Compare commits
	
		
			2 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					f7e243108d | ||
| 
						 | 
					0d6420df51 | 
							
								
								
									
										21
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										21
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -46,7 +46,6 @@ mutter
 | 
			
		||||
mutter-restart-helper
 | 
			
		||||
mutter-test-client
 | 
			
		||||
mutter-test-runner
 | 
			
		||||
mutter-test-unit-tests
 | 
			
		||||
mutter-all.test
 | 
			
		||||
org.gnome.mutter.gschema.valid
 | 
			
		||||
org.gnome.mutter.gschema.xml
 | 
			
		||||
@@ -58,23 +57,19 @@ testgradient
 | 
			
		||||
m4/*
 | 
			
		||||
INSTALL
 | 
			
		||||
mkinstalldirs
 | 
			
		||||
meta-enum-types.[ch]
 | 
			
		||||
src/stamp-meta-enum-types.h
 | 
			
		||||
src/mutter-enum-types.[ch]
 | 
			
		||||
src/stamp-mutter-enum-types.h
 | 
			
		||||
src/mutter-marshal.[ch]
 | 
			
		||||
src/stamp-mutter-marshal.h
 | 
			
		||||
src/meta-dbus-display-config.[ch]
 | 
			
		||||
src/meta-dbus-idle-monitor.[ch]
 | 
			
		||||
src/meta-dbus-login1.[ch]
 | 
			
		||||
src/gtk-primary-selection-protocol.c
 | 
			
		||||
src/gtk-primary-selection-server-protocol.h
 | 
			
		||||
src/gtk-shell-protocol.c
 | 
			
		||||
src/gtk-shell-server-protocol.h
 | 
			
		||||
src/xdg-shell-unstable-v*-protocol.c
 | 
			
		||||
src/xdg-shell-unstable-v*-server-protocol.h
 | 
			
		||||
src/pointer-gestures-unstable-v*-protocol.c
 | 
			
		||||
src/pointer-gestures-unstable-v*-server-protocol.h
 | 
			
		||||
src/relative-pointer-unstable-v*-protocol.c
 | 
			
		||||
src/relative-pointer-unstable-v*-server-protocol.h
 | 
			
		||||
src/pointer-constraints-unstable-v*-protocol.c
 | 
			
		||||
src/pointer-constraints-unstable-v*-server-protocol.h
 | 
			
		||||
src/xdg-shell-protocol.c
 | 
			
		||||
src/xdg-shell-server-protocol.h
 | 
			
		||||
src/xserver-protocol.c
 | 
			
		||||
src/xserver-server-protocol.h
 | 
			
		||||
src/meta/meta-version.h
 | 
			
		||||
doc/reference/*.args
 | 
			
		||||
doc/reference/*.bak
 | 
			
		||||
 
 | 
			
		||||
@@ -9,3 +9,5 @@ DISTCLEANFILES = \
 | 
			
		||||
	intltool-update \
 | 
			
		||||
	po/stamp-it \
 | 
			
		||||
	po/.intltool-merge-cache
 | 
			
		||||
 | 
			
		||||
DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										277
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										277
									
								
								NEWS
									
									
									
									
									
								
							@@ -1,278 +1,9 @@
 | 
			
		||||
3.20.3
 | 
			
		||||
======
 | 
			
		||||
* Fix grabbing random keys for disabled shortcuts [Rui; #766270]
 | 
			
		||||
* Crash fixes [Marek, Rui; #751847, #767969]
 | 
			
		||||
* Improve multi-monitor handling on wayland [Rui; #766528]
 | 
			
		||||
* Don't create invalid UTF-8 window description strings [Rui; #765535]
 | 
			
		||||
* Convert window titles and wm_class to UTF-8 [Rui; #752788]
 | 
			
		||||
* Use kill() to force-quit unresponsive wayland clients [Olivier; #767464]
 | 
			
		||||
* Fix window position when unmaximizing via DND on wayland [Olivier; #764180]
 | 
			
		||||
* Avoid full window redraws when using extended frame sync [Florian; #767798]
 | 
			
		||||
* Fix missing frame border around GTK+ dialogs [Florian; #745060]
 | 
			
		||||
* Improve X11 <-> wayland copy and paste interaction [Carlos; #768007]
 | 
			
		||||
3.16.1.1
 | 
			
		||||
========
 | 
			
		||||
* Prevent a crash when switching VTs or adding input devices [Carlos; #747886]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Marek Chalupa, Olivier Fourdan, Carlos Garnacho, Rui Matos, Florian Müllner
 | 
			
		||||
 | 
			
		||||
Translations:
 | 
			
		||||
  Kjartan Maraas [nb], Muhammet Kara [tr], Andika Triwidada [id]
 | 
			
		||||
 | 
			
		||||
3.20.2
 | 
			
		||||
======
 | 
			
		||||
* Notify clients of pending modifier state changes [Rui; #748526]
 | 
			
		||||
* Add get_is_builtin_display_on() method [Florian; #765267]
 | 
			
		||||
* Fix 2-finger titlebar taps on wayland [Carlos; #764519]
 | 
			
		||||
* Misc. bug fixes [Florian, Victor, Jonas; #765058, #765252, #765062]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Olivier Fourdan, Carlos Garnacho, Rui Matos, Florian Müllner,
 | 
			
		||||
  Victor Toso
 | 
			
		||||
 | 
			
		||||
Translations:
 | 
			
		||||
  GNOME Translation Robot [ja], Tiago Santos [pt]
 | 
			
		||||
 | 
			
		||||
3.20.1
 | 
			
		||||
======
 | 
			
		||||
* Constrain window move/resizes on wayland as on X11 [Rui; #748819]
 | 
			
		||||
* Don't crash with invalid previous monitor configurations [Rui; #764286]
 | 
			
		||||
* Misc. bug fixes and cleanups [Jonas, Cosimo; #762828, #764807]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Cosimo Cecchi, Rui Matos, Jasper St. Pierre
 | 
			
		||||
 | 
			
		||||
Translations:
 | 
			
		||||
  Inaki Larranaga Murgoitio [eu], Reinout van Schouwen [nl], Fabio Tomat [fur],
 | 
			
		||||
  Trần Ngọc Quân [vi]
 | 
			
		||||
 | 
			
		||||
3.20.0
 | 
			
		||||
======
 | 
			
		||||
* Fix crash when using visual bell [Jonas; #763858]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Jasper St. Pierre
 | 
			
		||||
 | 
			
		||||
Translations:
 | 
			
		||||
  Milo Casagrande [it], Ask Hjorth Larsen [da]
 | 
			
		||||
 | 
			
		||||
3.19.92
 | 
			
		||||
=======
 | 
			
		||||
* Add system bell support on wayland [Jonas; #763284]
 | 
			
		||||
* Add gtk_surface.present to gtk-shell [Jonas; #763295]
 | 
			
		||||
* Handle DND drops on the root window [Carlos; #762104]
 | 
			
		||||
* Misc. bug fixes [Jonas, Carlos, Rui; #762828, #760745, #763125, #762763,
 | 
			
		||||
  #762661, #762639, #763159]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Carlos Garnacho, Rui Matos, Florian Müllner
 | 
			
		||||
 | 
			
		||||
Translations:
 | 
			
		||||
  Rūdolfs Mazurs [lv], Balázs Úr [hu], Claude Paroz [fr], Matej Urbančič [sl],
 | 
			
		||||
  Мирослав Николић [sr, sr@latin], Sebastian Rasmussen [sv], Changwoo Ryu [ko],
 | 
			
		||||
  Gil Forcada [ca], Tom Tryfonidis [el]
 | 
			
		||||
 | 
			
		||||
3.19.91
 | 
			
		||||
=======
 | 
			
		||||
* Add --nested CLI argument to fix nested wayland session [Jonas; #758658]
 | 
			
		||||
* Fix stack - scene graph stacking synchronization issues [Jonas; #755605]
 | 
			
		||||
* Rate-limit last-device changes to fix freezes [Carlos; #753527]
 | 
			
		||||
* Implement primary selection protocol [Carlos; #762560]
 | 
			
		||||
* Misc. bug fixes [Carlos, Jonas; #762878, #762716]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Carlos Garnacho, Tim Lunn
 | 
			
		||||
 | 
			
		||||
Translations:
 | 
			
		||||
  Piotr Drąg [pl], Artur de Aquino Morais [pt_BR], Marek Černocký [cs],
 | 
			
		||||
  Cédric Valmary [oc], Mario Blättermann [de], Dušan Kazik [sk],
 | 
			
		||||
  Fran Dieguez [gl], Aurimas Černius [lt], Daniel Mustieles [es],
 | 
			
		||||
  Stas Solovey [ru], Yosef Or Boczko [he]
 | 
			
		||||
 | 
			
		||||
3.19.90
 | 
			
		||||
=======
 | 
			
		||||
* Release buffer after processing commit [Ray; #761312, #761613]
 | 
			
		||||
* Implement pointer motion, locks and confinement on wayland [Jonas; #744104]
 | 
			
		||||
* Add basic startup notification support on wayland [Carlos; #762268]
 | 
			
		||||
* Misc. bug fixes [Rui, Alberts, Florian; #760670, #761543, #752794, #761557]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Olivier Fourdan, Carlos Garnacho, Rui Matos,
 | 
			
		||||
  Alberts Muktupāvels, Florian Müllner, Jasper St. Pierre, Ray Strode
 | 
			
		||||
 | 
			
		||||
3.19.4
 | 
			
		||||
======
 | 
			
		||||
* Fix updating stacking order when setting transient_for [Jonas; #755606]
 | 
			
		||||
* Support screen rotation when supported by the driver [Carlos; #745079]
 | 
			
		||||
* Protect against broken WM_CLASS property implementations [Sebastian; #759658]
 | 
			
		||||
* Handle wl_pointer v5 events on wayland [Carlos; #760637]
 | 
			
		||||
* Implement DND actions on wayland [Carlos; #760805]
 | 
			
		||||
* Misc. bug fixes [Jonas, Rui, Ray, Marek; #754711, #756789, #759297, #758613,
 | 
			
		||||
  #760330, #760476, #759222, #760670]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Marek Chalupa, Carlos Garnacho, Sebastian Keller, Rui Matos,
 | 
			
		||||
  Florian Müllner, Jasper St. Pierre, Ray Strode
 | 
			
		||||
 | 
			
		||||
Translations:
 | 
			
		||||
  Aurimas Černius [lt]
 | 
			
		||||
 | 
			
		||||
3.19.3
 | 
			
		||||
======
 | 
			
		||||
* Correct refresh rate units on KMS/Wayland [Daniel; #758653]
 | 
			
		||||
* Fix crash when initial cursor position is not on a monitor [Marek; #756698]
 | 
			
		||||
* Fix crash when more CRTs are enabled than outputs connected [Rui; #751638]
 | 
			
		||||
* Fix touch pointer emulation on wayland [Carlos; #756754]
 | 
			
		||||
* Allow minimizing windows that don't advertise supporting it [Jasper; #758186]
 | 
			
		||||
* Force 2-finger scroll by default if available [Bastien; #759304]
 | 
			
		||||
* Fix crash during XWayland initialization [Marek; #751845]
 | 
			
		||||
* Ensure to send a ConfigureNotify to just mapped windows [Rui; #759492]
 | 
			
		||||
* Misc. bug fixes and cleanups [Carlos, Jonas, Lionel; #758239, #758633,
 | 
			
		||||
  #755503, #759374]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Marek Chalupa, Carlos Garnacho, Lionel Landwerlin, Rui Matos,
 | 
			
		||||
  Bastien Nocera, Daniel Stone, Jasper St. Pierre
 | 
			
		||||
 | 
			
		||||
3.19.2
 | 
			
		||||
======
 | 
			
		||||
* Fix crash on monitor unplug [Rui; #756796]
 | 
			
		||||
* Exit cleanly on initialization errors [Owen; #757311]
 | 
			
		||||
* Allow to determine backend setting from session type [Ray; #741666]
 | 
			
		||||
* Fix DRM device detection for non-PCI devices [Alban; #754911]
 | 
			
		||||
* Don't force placement of windows without buffer on wayland [Marek; #751887]
 | 
			
		||||
* Fix initialization of bypass compositor hint [Rui; #758544]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Alban Browaeys, Marek Chalupa, Rui Matos, Florian Müllner, Ray Strode,
 | 
			
		||||
  Owen W. Taylor
 | 
			
		||||
 | 
			
		||||
3.19.1
 | 
			
		||||
======
 | 
			
		||||
* wayland: Allow to trigger popups through keyboard/touch [Carlos; #756296]
 | 
			
		||||
* Fix modifiers-only input source switching on Ubuntu [Alberts; #756543]
 | 
			
		||||
* Misc. bug fixes [Jonas, Rui, Giovanni, Florian; #756675, #756660, #746420,
 | 
			
		||||
  #756548, #756796, #757101, #757148]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Giovanni Campagna, Carlos Garnacho, Rui Matos,
 | 
			
		||||
  Alberts Muktupāvels, Florian Müllner
 | 
			
		||||
 | 
			
		||||
Translations:
 | 
			
		||||
  Daniel Șerbănescu [ro]
 | 
			
		||||
 | 
			
		||||
3.18.1
 | 
			
		||||
======
 | 
			
		||||
* Misc. crash fixes [Jonas, Rui, Carlos, Owen, Florian; #755096, #754979,
 | 
			
		||||
  #755490, #754357, #745785, #756642]
 | 
			
		||||
* Improve HiDPI support on wayland [Jonas; #755097]
 | 
			
		||||
* Fix doubly-scaled cursor on XWayland HiDPI [Jonas; #755099]
 | 
			
		||||
* Stop hiding titlebar buttons in dialogs [Florian; #641630]
 | 
			
		||||
* Add support for fullscreen/unfullscreen animations [Cosimo; #707248]
 | 
			
		||||
* Misc. bug fixes [Rui, Colin, Florian; #743339, #752047, #756074, #756649]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Cosimo Cecchi, Carlos Garnacho, Rui Matos, Florian Müllner,
 | 
			
		||||
  Jasper St. Pierre, Colin Walters, Owen W. Taylor
 | 
			
		||||
 | 
			
		||||
3.18.0
 | 
			
		||||
======
 | 
			
		||||
* Misc. fixes [Florian, Jonas; #753434]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Florian Müllner
 | 
			
		||||
 | 
			
		||||
Translations:
 | 
			
		||||
  Rūdolfs Mazurs [lv]
 | 
			
		||||
 | 
			
		||||
3.17.92
 | 
			
		||||
=======
 | 
			
		||||
* Don't omit the background color for backgrounds that don't fill the screen
 | 
			
		||||
  [Ray; #754476]
 | 
			
		||||
* Fix up key state on FocusIn when running nested [Owen; #753948]
 | 
			
		||||
* Find the right DRM device instead of hardcoding card0 [Marek; #753434]
 | 
			
		||||
* Scale cursor on HiDPI screens [Jonas; #744932]
 | 
			
		||||
* Misc. fixes and cleanups [Lan, Jonas, Javier, Olivier; #754545, #754215,
 | 
			
		||||
  #754621, #754715]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Marek Chalupa, Olivier Fourdan, Javier Jardón, Ting-Wei Lan,
 | 
			
		||||
  Ray Strode, Owen W. Taylor
 | 
			
		||||
 | 
			
		||||
3.17.91
 | 
			
		||||
=======
 | 
			
		||||
* Send error on pointer-gesture protocol version mismatch [Jonas; #753855]
 | 
			
		||||
* Misc. cleanups [Jonas; #744932]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl
 | 
			
		||||
 | 
			
		||||
Translations:
 | 
			
		||||
  Chao-Hsiung Liao [zh_TW], Piotr Drąg [pl]
 | 
			
		||||
 | 
			
		||||
3.17.90
 | 
			
		||||
=======
 | 
			
		||||
* Fix glitch with some fullscreen apps [Rui; #753020]
 | 
			
		||||
* Fix screen update issue with NVidia driver [Aaron, Rui; #728464]
 | 
			
		||||
* Only call frame callbacks for surfaces that get drawn [Adel; #739163]
 | 
			
		||||
* Misc. bug fixes and cleanups [Jonas, Rui, Ting-Wei; #753222, #752753, #753237,
 | 
			
		||||
  #753380, #744104, #744932]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Adel Gadllah, Carlos Garnacho, Ting-Wei Lan, Rui Matos,
 | 
			
		||||
  Florian Müllner, Aaron Plattner, Jasper St. Pierre
 | 
			
		||||
 | 
			
		||||
Translations:
 | 
			
		||||
  Akom Chotiphantawanon [th]
 | 
			
		||||
 | 
			
		||||
3.17.4
 | 
			
		||||
======
 | 
			
		||||
* nested: Allow basic configuration of dummy outputs [Jonas; #747089]
 | 
			
		||||
* Send wl_surface.enter and wl_surface.leave on output changes [Jonas; #744453]
 | 
			
		||||
* Improve HiDPI handling on wayland [Jonas; #745655, #744934]
 | 
			
		||||
* Implement compositor-side animated cursors [Carlos; #752342]
 | 
			
		||||
* Misc. bug fixes [Peter, Marek, Carlos, Matthias, Rui; #750816, #751884,
 | 
			
		||||
  #752248, #752551, #752552, #752673, #752674]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Marek Chalupa, Matthias Clasen, Carlos Garnacho, Peter Hutterer,
 | 
			
		||||
  Rui Matos, Florian Müllner, Jasper St. Pierre
 | 
			
		||||
 | 
			
		||||
3.17.3
 | 
			
		||||
======
 | 
			
		||||
* Add X11/wayland clipboard interaction [Carlos; #738312]
 | 
			
		||||
* Support VM monitor layout hints on wayland [Thomas; #750363]
 | 
			
		||||
* Misc. bug fixes [Rui, Jonas, Olivier, Carlos, Ting-Wei, Peter, Florian;
 | 
			
		||||
  #749994, #750256, #749716, #748705, #750552, #751036, #750007, #751136,
 | 
			
		||||
  #750552, #751471, #751715, #750680]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Dave Airlie, Cosimo Cecchi, Olivier Fourdan, Carlos Garnacho,
 | 
			
		||||
  Thomas Hellstrom, Peter Hutterer, Ting-Wei Lan, Jasper Lievisse Adriaanse,
 | 
			
		||||
  Rui Matos, Florian Müllner, Jasper St. Pierre
 | 
			
		||||
 | 
			
		||||
Translations:
 | 
			
		||||
  Marek Černocký [cs], Christian Kirbach [de], Pedro Albuquerque [pt]
 | 
			
		||||
 | 
			
		||||
3.17.2
 | 
			
		||||
======
 | 
			
		||||
* Honor default value for click method setting [Rui; #746290]
 | 
			
		||||
* Add X11/wayland clipboard interoperation [Carlos; #738312]
 | 
			
		||||
* Misc. bug fixes [Rui; #749076, #749711]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Carlos Garnacho, Rui Matos, Jasper St. Pierre
 | 
			
		||||
 | 
			
		||||
3.17.1
 | 
			
		||||
======
 | 
			
		||||
* Add public method to get neighboring monitor [Florian; #633994]
 | 
			
		||||
* Apply the right settings to the right input devices [Carlos; #747886]
 | 
			
		||||
* Fix scroll button setting [Ondrej; #747967]
 | 
			
		||||
* Add support for modal hint on wayland [Jonas; #745720]
 | 
			
		||||
* Don't reset idle time for non-hardware events [Rui; #748541]
 | 
			
		||||
* Misc. bug fixes [Ray, Rui; #748380, #748478]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Jonas Ådahl, Carlos Garnacho, Ondrej Holy, Rui Matos, Florian Müllner,
 | 
			
		||||
  Jasper St. Pierre, Ray Strode, Tomeu Vizoso
 | 
			
		||||
  Carlos Garnacho
 | 
			
		||||
 | 
			
		||||
3.16.1
 | 
			
		||||
======
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										37
									
								
								configure.ac
									
									
									
									
									
								
							
							
						
						
									
										37
									
								
								configure.ac
									
									
									
									
									
								
							@@ -1,8 +1,8 @@
 | 
			
		||||
AC_PREREQ(2.62)
 | 
			
		||||
 | 
			
		||||
m4_define([mutter_major_version], [3])
 | 
			
		||||
m4_define([mutter_minor_version], [20])
 | 
			
		||||
m4_define([mutter_micro_version], [3])
 | 
			
		||||
m4_define([mutter_minor_version], [16])
 | 
			
		||||
m4_define([mutter_micro_version], [1.1])
 | 
			
		||||
 | 
			
		||||
m4_define([mutter_version],
 | 
			
		||||
          [mutter_major_version.mutter_minor_version.mutter_micro_version])
 | 
			
		||||
@@ -46,25 +46,37 @@ IT_PROG_INTLTOOL([0.41])
 | 
			
		||||
AC_PROG_CC
 | 
			
		||||
AC_PROG_CC_C_O
 | 
			
		||||
AC_PROG_INSTALL
 | 
			
		||||
AC_PROG_SED
 | 
			
		||||
AC_HEADER_STDC
 | 
			
		||||
PKG_PROG_PKG_CONFIG([0.21])
 | 
			
		||||
 | 
			
		||||
# Sets GLIB_GENMARSHAL and GLIB_MKENUMS
 | 
			
		||||
AM_PATH_GLIB_2_0()
 | 
			
		||||
 | 
			
		||||
#### Integer sizes
 | 
			
		||||
 | 
			
		||||
AC_CHECK_SIZEOF(char)
 | 
			
		||||
AC_CHECK_SIZEOF(short)
 | 
			
		||||
AC_CHECK_SIZEOF(long)
 | 
			
		||||
AC_CHECK_SIZEOF(int)
 | 
			
		||||
AC_CHECK_SIZEOF(void *)
 | 
			
		||||
AC_CHECK_SIZEOF(long long)
 | 
			
		||||
AC_CHECK_SIZEOF(__int64)
 | 
			
		||||
 | 
			
		||||
## byte order
 | 
			
		||||
AC_C_BIGENDIAN
 | 
			
		||||
 | 
			
		||||
CANBERRA_GTK=libcanberra-gtk3
 | 
			
		||||
CANBERRA_GTK_VERSION=0.26
 | 
			
		||||
 | 
			
		||||
CLUTTER_PACKAGE=clutter-1.0
 | 
			
		||||
 | 
			
		||||
MUTTER_PC_MODULES="
 | 
			
		||||
   gtk+-3.0 >= 3.19.8
 | 
			
		||||
   gtk+-3.0 >= 3.9.11
 | 
			
		||||
   gio-unix-2.0 >= 2.35.1
 | 
			
		||||
   pango >= 1.2.0
 | 
			
		||||
   cairo >= 1.10.0
 | 
			
		||||
   gsettings-desktop-schemas >= 3.19.3
 | 
			
		||||
   $CLUTTER_PACKAGE >= 1.25.6
 | 
			
		||||
   gsettings-desktop-schemas >= 3.15.92
 | 
			
		||||
   $CLUTTER_PACKAGE >= 1.21.3
 | 
			
		||||
   cogl-1.0 >= 1.17.1
 | 
			
		||||
   upower-glib >= 0.99.0
 | 
			
		||||
   gnome-desktop-3.0
 | 
			
		||||
@@ -220,10 +232,6 @@ AS_IF([test "$have_wayland" = "yes"], [
 | 
			
		||||
    [AC_MSG_ERROR([Could not find wayland-scanner in your PATH, required for parsing wayland extension protocols])])
 | 
			
		||||
  AC_SUBST([WAYLAND_SCANNER])
 | 
			
		||||
  AC_DEFINE([HAVE_WAYLAND],[1],[Define if you want to enable Wayland support])
 | 
			
		||||
 | 
			
		||||
  PKG_CHECK_MODULES(WAYLAND_PROTOCOLS, [wayland-protocols >= 1.1],
 | 
			
		||||
		    [ac_wayland_protocols_pkgdatadir=`$PKG_CONFIG --variable=pkgdatadir wayland-protocols`])
 | 
			
		||||
  AC_SUBST(WAYLAND_PROTOCOLS_DATADIR, $ac_wayland_protocols_pkgdatadir)
 | 
			
		||||
])
 | 
			
		||||
AM_CONDITIONAL([HAVE_WAYLAND],[test "$have_wayland" = "yes"])
 | 
			
		||||
 | 
			
		||||
@@ -276,8 +284,6 @@ AC_CHECK_LIB(Xrandr, XRRUpdateConfiguration,
 | 
			
		||||
 | 
			
		||||
if test "x$found_randr" = "xyes"; then
 | 
			
		||||
   AC_DEFINE(HAVE_RANDR, , [Have the Xrandr extension library])
 | 
			
		||||
   PKG_CHECK_EXISTS([xrandr >= 1.5.0],
 | 
			
		||||
                 AC_DEFINE([HAVE_XRANDR15],[1],[Define if you have support for XRandR 1.5 or greater]))
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
MUTTER_LIBS="$MUTTER_LIBS $RANDR_LIBS $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS -lm"
 | 
			
		||||
@@ -324,10 +330,7 @@ if test "x$enable_debug" = "xyes"; then
 | 
			
		||||
	CFLAGS="$CFLAGS -g -O"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
AC_CHECK_DECL([GL_EXT_x11_sync_object],
 | 
			
		||||
              [],
 | 
			
		||||
              [AC_MSG_ERROR([GL_EXT_x11_sync_object definition not found, please update your GL headers])],
 | 
			
		||||
              [#include <GL/glx.h>])
 | 
			
		||||
GTK_DOC_CHECK([1.15], [--flavour no-tmpl])
 | 
			
		||||
 | 
			
		||||
#### Warnings (last since -Werror can disturb other tests)
 | 
			
		||||
 | 
			
		||||
@@ -400,6 +403,8 @@ Makefile
 | 
			
		||||
data/Makefile
 | 
			
		||||
doc/Makefile
 | 
			
		||||
doc/man/Makefile
 | 
			
		||||
doc/reference/Makefile
 | 
			
		||||
doc/reference/meta-docs.sgml
 | 
			
		||||
src/Makefile
 | 
			
		||||
src/libmutter.pc
 | 
			
		||||
src/compositor/plugins/Makefile
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,6 @@
 | 
			
		||||
desktopfiles_in_files = \
 | 
			
		||||
	mutter.desktop.in
 | 
			
		||||
	mutter.desktop.in \
 | 
			
		||||
	mutter-wayland.desktop.in
 | 
			
		||||
desktopfilesdir = $(datadir)/applications
 | 
			
		||||
desktopfiles_DATA = $(desktopfiles_in_files:.desktop.in=.desktop)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										17
									
								
								data/mutter-wayland.desktop.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								data/mutter-wayland.desktop.in
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
			
		||||
[Desktop Entry]
 | 
			
		||||
Type=Application
 | 
			
		||||
_Name=Mutter (wayland compositor)
 | 
			
		||||
Exec=mutter --wayland --display-server
 | 
			
		||||
NoDisplay=true
 | 
			
		||||
# name of loadable control center module
 | 
			
		||||
X-GNOME-WMSettingsModule=metacity
 | 
			
		||||
# name we put on the WM spec check window
 | 
			
		||||
X-GNOME-WMName=Mutter
 | 
			
		||||
# back compat only 
 | 
			
		||||
X-GnomeWMSettingsLibrary=metacity
 | 
			
		||||
X-GNOME-Bugzilla-Bugzilla=GNOME
 | 
			
		||||
X-GNOME-Bugzilla-Product=mutter
 | 
			
		||||
X-GNOME-Bugzilla-Component=general
 | 
			
		||||
X-GNOME-Autostart-Phase=WindowManager
 | 
			
		||||
X-GNOME-Provides=windowmanager
 | 
			
		||||
X-GNOME-Autostart-Notify=true
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
SUBDIRS = man
 | 
			
		||||
SUBDIRS = man reference
 | 
			
		||||
 | 
			
		||||
EXTRA_DIST = dialogs.txt code-overview.txt \
 | 
			
		||||
	how-to-get-focus-right.txt rationales.txt
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										183
									
								
								doc/reference/Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										183
									
								
								doc/reference/Makefile.am
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,183 @@
 | 
			
		||||
## Process this file with automake to produce Makefile.in
 | 
			
		||||
 | 
			
		||||
# We require automake 1.6 at least.
 | 
			
		||||
AUTOMAKE_OPTIONS = 1.6
 | 
			
		||||
 | 
			
		||||
# This is a blank Makefile.am for using gtk-doc.
 | 
			
		||||
# Copy this to your project's API docs directory and modify the variables to
 | 
			
		||||
# suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples
 | 
			
		||||
# of using the various options.
 | 
			
		||||
 | 
			
		||||
# The name of the module, e.g. 'glib'.
 | 
			
		||||
DOC_MODULE=meta
 | 
			
		||||
 | 
			
		||||
# Uncomment for versioned docs and specify the version of the module, e.g. '2'.
 | 
			
		||||
#DOC_MODULE_VERSION=2
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# The top-level SGML file. You can change this if you want to.
 | 
			
		||||
DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.sgml
 | 
			
		||||
 | 
			
		||||
# Directories containing the source code, relative to $(srcdir).
 | 
			
		||||
# gtk-doc will search all .c and .h files beneath these paths
 | 
			
		||||
# for inline comments documenting functions and macros.
 | 
			
		||||
# e.g. DOC_SOURCE_DIR=../../../gtk ../../../gdk
 | 
			
		||||
DOC_SOURCE_DIR=../../src/
 | 
			
		||||
 | 
			
		||||
# Extra options to pass to gtkdoc-scangobj. Not normally needed.
 | 
			
		||||
SCANGOBJ_OPTIONS=
 | 
			
		||||
 | 
			
		||||
# Extra options to supply to gtkdoc-scan.
 | 
			
		||||
# e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED"
 | 
			
		||||
SCAN_OPTIONS=--rebuild-types
 | 
			
		||||
 | 
			
		||||
# Extra options to supply to gtkdoc-mkdb.
 | 
			
		||||
# e.g. MKDB_OPTIONS=--xml-mode --output-format=xml
 | 
			
		||||
MKDB_OPTIONS=--xml-mode --output-format=xml
 | 
			
		||||
 | 
			
		||||
# Extra options to supply to gtkdoc-mktmpl
 | 
			
		||||
# e.g. MKTMPL_OPTIONS=--only-section-tmpl
 | 
			
		||||
MKTMPL_OPTIONS=
 | 
			
		||||
 | 
			
		||||
# Extra options to supply to gtkdoc-mkhtml
 | 
			
		||||
MKHTML_OPTIONS=
 | 
			
		||||
 | 
			
		||||
# Extra options to supply to gtkdoc-fixref. Not normally needed.
 | 
			
		||||
# e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html
 | 
			
		||||
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
 | 
			
		||||
 | 
			
		||||
# Extra header to include when scanning, which are not under DOC_SOURCE_DIR
 | 
			
		||||
# e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h
 | 
			
		||||
EXTRA_HFILES=
 | 
			
		||||
 | 
			
		||||
# Header files or dirs to ignore when scanning. Use base file/dir names
 | 
			
		||||
# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h private_code
 | 
			
		||||
IGNORE_HFILES= \
 | 
			
		||||
	async-getprop.h \
 | 
			
		||||
	atoms.h \
 | 
			
		||||
	bell.h \
 | 
			
		||||
	boxes-private.h \
 | 
			
		||||
	clutter-utils.h \
 | 
			
		||||
	cogl-utils.h \
 | 
			
		||||
	compositor-private.h \
 | 
			
		||||
	constraints.h \
 | 
			
		||||
	core.h \
 | 
			
		||||
	display-private.h \
 | 
			
		||||
	draw-workspace.h \
 | 
			
		||||
	edge-resistance.h \
 | 
			
		||||
	eventqueue.h \
 | 
			
		||||
	frame.h \
 | 
			
		||||
	frames.h \
 | 
			
		||||
	group-private.h \
 | 
			
		||||
	group-props.h \
 | 
			
		||||
	iconcache.h \
 | 
			
		||||
	inlinepixbufs.h \
 | 
			
		||||
	keybindings-private.h \
 | 
			
		||||
	meta-background-actor-private.h \
 | 
			
		||||
	meta-background-group-private.h \
 | 
			
		||||
	meta-dbus-login1.h \
 | 
			
		||||
	meta-module.h \
 | 
			
		||||
	meta-plugin-manager.h \
 | 
			
		||||
	meta-shadow-factory-private.h \
 | 
			
		||||
	meta-texture-rectangle.h \
 | 
			
		||||
	meta-texture-tower.h \
 | 
			
		||||
	meta-window-actor-private.h \
 | 
			
		||||
	meta-window-group.h \
 | 
			
		||||
	meta-window-shape.h \
 | 
			
		||||
	mutter-enum-types.h \
 | 
			
		||||
	mutter-Xatomtype.h \
 | 
			
		||||
	place.h \
 | 
			
		||||
	preview-widget.h \
 | 
			
		||||
	region-utils.h \
 | 
			
		||||
	resizepopup.h \
 | 
			
		||||
	screen-private.h \
 | 
			
		||||
	session.h \
 | 
			
		||||
	stack.h \
 | 
			
		||||
	stack-tracker.h \
 | 
			
		||||
	stamp-mutter-enum-types.h \
 | 
			
		||||
	tabpopup.h \
 | 
			
		||||
	theme.h \
 | 
			
		||||
	theme-private.h \
 | 
			
		||||
	tile-preview.h \
 | 
			
		||||
	ui.h \
 | 
			
		||||
	window-private.h \
 | 
			
		||||
	window-props.h \
 | 
			
		||||
	workspace-private.h \
 | 
			
		||||
	xprops.h \
 | 
			
		||||
	$(NULL)
 | 
			
		||||
 | 
			
		||||
if !HAVE_NATIVE_BACKEND
 | 
			
		||||
IGNORE_HFILES+= \
 | 
			
		||||
	meta-backend-native.h \
 | 
			
		||||
	meta-barrier-native.h \
 | 
			
		||||
	meta-cursor-renderer-native.h \
 | 
			
		||||
	meta-idle-monitor-native.h \
 | 
			
		||||
	meta-input-settings-native.h \
 | 
			
		||||
	meta-monitor-manager-kms.h \
 | 
			
		||||
	$(NULL)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
if !HAVE_WAYLAND
 | 
			
		||||
IGNORE_HFILES += \
 | 
			
		||||
	meta-surface-actor-wayland.h	\
 | 
			
		||||
	wayland				\
 | 
			
		||||
	$(NULL)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
MKDB_OPTIONS+=--ignore-files="$(IGNORE_HFILES)"
 | 
			
		||||
 | 
			
		||||
# Images to copy into HTML directory.
 | 
			
		||||
# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png
 | 
			
		||||
HTML_IMAGES=
 | 
			
		||||
 | 
			
		||||
# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
 | 
			
		||||
# e.g. content_files=running.sgml building.sgml changes-2.0.sgml
 | 
			
		||||
content_files= \
 | 
			
		||||
	mutter-overview.xml \
 | 
			
		||||
	running-mutter.xml \
 | 
			
		||||
	$(NULL)
 | 
			
		||||
 | 
			
		||||
# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded
 | 
			
		||||
# These files must be listed here *and* in content_files
 | 
			
		||||
# e.g. expand_content_files=running.sgml
 | 
			
		||||
expand_content_files= \
 | 
			
		||||
	mutter-overview.xml \
 | 
			
		||||
	running-mutter.xml \
 | 
			
		||||
	$(NULL)
 | 
			
		||||
 | 
			
		||||
# CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library.
 | 
			
		||||
# Only needed if you are using gtkdoc-scangobj to dynamically query widget
 | 
			
		||||
# signals and properties.
 | 
			
		||||
# e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
 | 
			
		||||
# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
 | 
			
		||||
GTKDOC_CFLAGS=$(MUTTER_CFLAGS)
 | 
			
		||||
GTKDOC_LIBS=$(MUTTER_LIBS) $(top_builddir)/src/libmutter.la
 | 
			
		||||
 | 
			
		||||
# This includes the standard gtk-doc make rules, copied by gtkdocize.
 | 
			
		||||
include $(top_srcdir)/gtk-doc.make
 | 
			
		||||
 | 
			
		||||
# Other files to distribute
 | 
			
		||||
# e.g. EXTRA_DIST += version.xml.in
 | 
			
		||||
EXTRA_DIST +=
 | 
			
		||||
 | 
			
		||||
# Files not to distribute
 | 
			
		||||
# for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types
 | 
			
		||||
# for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt
 | 
			
		||||
DISTCLEANFILES = $(DOC_MODULES).types
 | 
			
		||||
 | 
			
		||||
# Comment this out if you want 'make check' to test you doc status
 | 
			
		||||
# and run some sanity checks
 | 
			
		||||
if ENABLE_GTK_DOC
 | 
			
		||||
TESTS_ENVIRONMENT = cd $(srcdir) && \
 | 
			
		||||
  DOC_MODULE=$(DOC_MODULE) DOC_MAIN_SGML_FILE=$(DOC_MAIN_SGML_FILE) \
 | 
			
		||||
  SRCDIR=$(abs_srcdir) BUILDDIR=$(abs_builddir)
 | 
			
		||||
#TESTS = $(GTKDOC_CHECK)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
-include $(top_srcdir)/git.mk
 | 
			
		||||
							
								
								
									
										58
									
								
								doc/reference/meta-docs.sgml.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								doc/reference/meta-docs.sgml.in
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,58 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
 | 
			
		||||
               "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"
 | 
			
		||||
[
 | 
			
		||||
  <!ENTITY % local.common.attrib "xmlns:xi  CDATA  #FIXED 'http://www.w3.org/2003/XInclude'">
 | 
			
		||||
  <!ENTITY version "@VERSION@">
 | 
			
		||||
]>
 | 
			
		||||
<book id="index">
 | 
			
		||||
  <bookinfo>
 | 
			
		||||
    <title>Mutter Reference Manual</title>
 | 
			
		||||
    <releaseinfo>
 | 
			
		||||
      This document is for Mutter &version;.
 | 
			
		||||
      The latest version of this documentation can be found on-line at
 | 
			
		||||
      <ulink role="online-location" url="http://developer.gnome.org/meta/">http://developer.gnome.org/meta/</ulink>.
 | 
			
		||||
    </releaseinfo>
 | 
			
		||||
  </bookinfo>
 | 
			
		||||
 | 
			
		||||
  <xi:include href="xml/mutter-overview.xml"/>
 | 
			
		||||
  <xi:include href="xml/running-mutter.xml"/>
 | 
			
		||||
 | 
			
		||||
  <part id="core-reference">
 | 
			
		||||
    <title>Mutter Core Reference</title>
 | 
			
		||||
    <xi:include href="xml/main.xml"/>
 | 
			
		||||
    <xi:include href="xml/common.xml"/>
 | 
			
		||||
    <xi:include href="xml/prefs.xml"/>
 | 
			
		||||
    <xi:include href="xml/util.xml"/>
 | 
			
		||||
    <xi:include href="xml/errors.xml"/>
 | 
			
		||||
    <xi:include href="xml/meta-plugin.xml"/>
 | 
			
		||||
    <xi:include href="xml/barrier.xml"/>
 | 
			
		||||
    <xi:include href="xml/boxes.xml"/>
 | 
			
		||||
    <xi:include href="xml/compositor.xml"/>
 | 
			
		||||
    <xi:include href="xml/display.xml"/>
 | 
			
		||||
    <xi:include href="xml/group.xml"/>
 | 
			
		||||
    <xi:include href="xml/keybindings.xml"/>
 | 
			
		||||
    <xi:include href="xml/meta-background-actor.xml"/>
 | 
			
		||||
    <xi:include href="xml/meta-shadow-factory.xml"/>
 | 
			
		||||
    <xi:include href="xml/meta-shaped-texture.xml"/>
 | 
			
		||||
    <xi:include href="xml/meta-window-actor.xml"/>
 | 
			
		||||
    <xi:include href="xml/screen.xml"/>
 | 
			
		||||
    <xi:include href="xml/window.xml"/>
 | 
			
		||||
    <xi:include href="xml/workspace.xml"/>
 | 
			
		||||
  </part>
 | 
			
		||||
 | 
			
		||||
  <chapter id="object-tree">
 | 
			
		||||
    <title>Object Hierarchy</title>
 | 
			
		||||
     <xi:include href="xml/tree_index.sgml"/>
 | 
			
		||||
  </chapter>
 | 
			
		||||
  <index id="api-index-full">
 | 
			
		||||
    <title>API Index</title>
 | 
			
		||||
    <xi:include href="xml/api-index-full.xml"><xi:fallback /></xi:include>
 | 
			
		||||
  </index>
 | 
			
		||||
  <index id="deprecated-api-index" role="deprecated">
 | 
			
		||||
    <title>Index of deprecated API</title>
 | 
			
		||||
    <xi:include href="xml/api-index-deprecated.xml"><xi:fallback /></xi:include>
 | 
			
		||||
  </index>
 | 
			
		||||
 | 
			
		||||
  <xi:include href="xml/annotation-glossary.xml"><xi:fallback /></xi:include>
 | 
			
		||||
</book>
 | 
			
		||||
							
								
								
									
										674
									
								
								doc/reference/meta-sections.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										674
									
								
								doc/reference/meta-sections.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,674 @@
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>barrier</FILE>
 | 
			
		||||
<TITLE>MetaBarrier</TITLE>
 | 
			
		||||
MetaBarrier
 | 
			
		||||
MetaBarrierClass
 | 
			
		||||
meta_barrier_is_active
 | 
			
		||||
meta_barrier_destroy
 | 
			
		||||
meta_barrier_release
 | 
			
		||||
MetaBarrierDirection
 | 
			
		||||
MetaBarrierEvent
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
META_BARRIER
 | 
			
		||||
META_BARRIER_CLASS
 | 
			
		||||
META_BARRIER_GET_CLASS
 | 
			
		||||
META_IS_BARRIER
 | 
			
		||||
META_IS_BARRIER_CLASS
 | 
			
		||||
META_TYPE_BARRIER
 | 
			
		||||
META_TYPE_BARRIER_EVENT
 | 
			
		||||
MetaBarrierPrivate
 | 
			
		||||
meta_barrier_event_get_type
 | 
			
		||||
meta_barrier_get_type
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>boxes</FILE>
 | 
			
		||||
MetaRectangle
 | 
			
		||||
MetaStrut
 | 
			
		||||
MetaEdgeType
 | 
			
		||||
MetaEdge
 | 
			
		||||
meta_rectangle_copy
 | 
			
		||||
meta_rectangle_free
 | 
			
		||||
meta_rect
 | 
			
		||||
meta_rectangle_area
 | 
			
		||||
meta_rectangle_intersect
 | 
			
		||||
meta_rectangle_equal
 | 
			
		||||
meta_rectangle_union
 | 
			
		||||
meta_rectangle_overlap
 | 
			
		||||
meta_rectangle_vert_overlap
 | 
			
		||||
meta_rectangle_horiz_overlap
 | 
			
		||||
meta_rectangle_could_fit_rect
 | 
			
		||||
meta_rectangle_contains_rect
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
META_TYPE_RECTANGLE
 | 
			
		||||
meta_rectangle_get_type
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>common</FILE>
 | 
			
		||||
META_VIRTUAL_CORE_POINTER_ID
 | 
			
		||||
META_VIRTUAL_CORE_KEYBOARD_ID
 | 
			
		||||
MetaFrameFlags
 | 
			
		||||
MetaMenuOp
 | 
			
		||||
MetaWindowMenuFunc
 | 
			
		||||
MetaGrabOp
 | 
			
		||||
MetaCursor
 | 
			
		||||
MetaFrameType
 | 
			
		||||
MetaVirtualModifier
 | 
			
		||||
MetaDirection
 | 
			
		||||
MetaMotionDirection
 | 
			
		||||
MetaSide
 | 
			
		||||
MetaButtonFunction
 | 
			
		||||
MAX_BUTTONS_PER_CORNER
 | 
			
		||||
MetaButtonLayout
 | 
			
		||||
MetaFrameBorders
 | 
			
		||||
meta_frame_borders_clear
 | 
			
		||||
META_ICON_WIDTH
 | 
			
		||||
META_ICON_HEIGHT
 | 
			
		||||
META_MINI_ICON_WIDTH
 | 
			
		||||
META_MINI_ICON_HEIGHT
 | 
			
		||||
META_DEFAULT_ICON_NAME
 | 
			
		||||
META_PRIORITY_RESIZE
 | 
			
		||||
META_PRIORITY_BEFORE_REDRAW
 | 
			
		||||
META_PRIORITY_REDRAW
 | 
			
		||||
META_PRIORITY_PREFS_NOTIFY
 | 
			
		||||
POINT_IN_RECT
 | 
			
		||||
MetaStackLayer
 | 
			
		||||
MetaWindowMenu
 | 
			
		||||
MetaResizePopup
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>compositor</FILE>
 | 
			
		||||
MetaCompEffect
 | 
			
		||||
MetaCompositor
 | 
			
		||||
meta_compositor_new
 | 
			
		||||
meta_compositor_destroy
 | 
			
		||||
meta_compositor_manage_screen
 | 
			
		||||
meta_compositor_unmanage_screen
 | 
			
		||||
meta_compositor_window_shape_changed
 | 
			
		||||
meta_compositor_process_event
 | 
			
		||||
meta_compositor_filter_keybinding
 | 
			
		||||
meta_compositor_add_window
 | 
			
		||||
meta_compositor_remove_window
 | 
			
		||||
meta_compositor_show_window
 | 
			
		||||
meta_compositor_hide_window
 | 
			
		||||
meta_compositor_switch_workspace
 | 
			
		||||
meta_compositor_maximize_window
 | 
			
		||||
meta_compositor_unmaximize_window
 | 
			
		||||
meta_compositor_sync_window_geometry
 | 
			
		||||
meta_compositor_set_updates_frozen
 | 
			
		||||
meta_compositor_queue_frame_drawn
 | 
			
		||||
meta_compositor_sync_stack
 | 
			
		||||
meta_compositor_sync_screen_size
 | 
			
		||||
meta_compositor_flash_screen
 | 
			
		||||
meta_get_stage_for_screen
 | 
			
		||||
meta_get_overlay_group_for_screen
 | 
			
		||||
meta_get_overlay_window
 | 
			
		||||
meta_get_window_actors
 | 
			
		||||
meta_get_window_group_for_screen
 | 
			
		||||
meta_get_top_window_group_for_screen
 | 
			
		||||
meta_disable_unredirect_for_screen
 | 
			
		||||
meta_enable_unredirect_for_screen
 | 
			
		||||
meta_set_stage_input_region
 | 
			
		||||
meta_empty_stage_input_region
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>display</FILE>
 | 
			
		||||
MetaTabList
 | 
			
		||||
MetaTabShowType
 | 
			
		||||
meta_XFree
 | 
			
		||||
meta_display_get_compositor_version
 | 
			
		||||
meta_display_get_xinput_opcode
 | 
			
		||||
meta_display_supports_extended_barriers
 | 
			
		||||
meta_display_get_xdisplay
 | 
			
		||||
meta_display_get_compositor
 | 
			
		||||
meta_display_get_screens
 | 
			
		||||
meta_display_has_shape
 | 
			
		||||
meta_display_screen_for_root
 | 
			
		||||
meta_display_get_focus_window
 | 
			
		||||
meta_display_xwindow_is_a_no_focus_window
 | 
			
		||||
meta_display_get_damage_event_base
 | 
			
		||||
meta_display_get_shape_event_base
 | 
			
		||||
meta_display_xserver_time_is_before
 | 
			
		||||
meta_display_get_last_user_time
 | 
			
		||||
meta_display_get_current_time
 | 
			
		||||
meta_display_get_current_time_roundtrip
 | 
			
		||||
meta_display_get_ignored_modifier_mask
 | 
			
		||||
meta_display_get_tab_list
 | 
			
		||||
meta_display_get_tab_next
 | 
			
		||||
meta_display_get_tab_current
 | 
			
		||||
meta_display_begin_grab_op
 | 
			
		||||
meta_display_end_grab_op
 | 
			
		||||
meta_display_get_grab_op
 | 
			
		||||
meta_display_add_keybinding
 | 
			
		||||
meta_display_remove_keybinding
 | 
			
		||||
meta_display_get_keybinding_action
 | 
			
		||||
meta_display_set_input_focus_window
 | 
			
		||||
meta_display_focus_the_no_focus_window
 | 
			
		||||
meta_display_sort_windows_by_stacking
 | 
			
		||||
meta_display_get_leader_window
 | 
			
		||||
meta_display_add_ignored_crossing_serial
 | 
			
		||||
meta_display_unmanage_screen
 | 
			
		||||
meta_display_clear_mouse_mode
 | 
			
		||||
MetaDisplay
 | 
			
		||||
MetaDisplayClass
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
META_DISPLAY
 | 
			
		||||
META_DISPLAY_CLASS
 | 
			
		||||
META_DISPLAY_GET_CLASS
 | 
			
		||||
META_IS_DISPLAY
 | 
			
		||||
META_IS_DISPLAY_CLASS
 | 
			
		||||
META_TYPE_DISPLAY
 | 
			
		||||
meta_display_get_type
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>errors</FILE>
 | 
			
		||||
meta_error_trap_push
 | 
			
		||||
meta_error_trap_pop
 | 
			
		||||
meta_error_trap_push_with_return
 | 
			
		||||
meta_error_trap_pop_with_return
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>group</FILE>
 | 
			
		||||
MetaGroup
 | 
			
		||||
meta_window_get_group
 | 
			
		||||
meta_window_compute_group
 | 
			
		||||
meta_window_shutdown_group
 | 
			
		||||
meta_window_group_leader_changed
 | 
			
		||||
meta_display_lookup_group
 | 
			
		||||
meta_group_list_windows
 | 
			
		||||
meta_group_update_layers
 | 
			
		||||
meta_group_get_startup_id
 | 
			
		||||
meta_group_get_size
 | 
			
		||||
meta_group_property_notify
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>keybindings</FILE>
 | 
			
		||||
MetaKeyBinding
 | 
			
		||||
META_TYPE_KEY_BINDING
 | 
			
		||||
meta_key_binding_get_name
 | 
			
		||||
meta_key_binding_get_modifiers
 | 
			
		||||
meta_key_binding_get_mask
 | 
			
		||||
meta_key_binding_is_builtin
 | 
			
		||||
meta_keybindings_set_custom_handler
 | 
			
		||||
meta_screen_ungrab_all_keys
 | 
			
		||||
meta_screen_grab_all_keys
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>main</FILE>
 | 
			
		||||
meta_get_option_context
 | 
			
		||||
meta_init
 | 
			
		||||
meta_run
 | 
			
		||||
meta_get_replace_current_wm
 | 
			
		||||
meta_set_wm_name
 | 
			
		||||
meta_set_gnome_wm_keybindings
 | 
			
		||||
MetaExitCode
 | 
			
		||||
meta_exit
 | 
			
		||||
meta_quit
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>meta-background</FILE>
 | 
			
		||||
<TITLE>MetaBackground</TITLE>
 | 
			
		||||
MetaBackgroundEffects
 | 
			
		||||
MetaBackground
 | 
			
		||||
MetaBackgroundClass
 | 
			
		||||
meta_background_new
 | 
			
		||||
meta_background_copy
 | 
			
		||||
meta_background_load_gradient
 | 
			
		||||
meta_background_load_color
 | 
			
		||||
meta_background_load_still_frame
 | 
			
		||||
meta_background_load_file_async
 | 
			
		||||
meta_background_load_file_finish
 | 
			
		||||
meta_background_get_filename
 | 
			
		||||
meta_background_get_style
 | 
			
		||||
meta_background_get_shading
 | 
			
		||||
meta_background_get_color
 | 
			
		||||
meta_background_get_second_color
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
META_BACKGROUND
 | 
			
		||||
META_BACKGROUND_CLASS
 | 
			
		||||
META_BACKGROUND_GET_CLASS
 | 
			
		||||
META_IS_BACKGROUND
 | 
			
		||||
META_IS_BACKGROUND_CLASS
 | 
			
		||||
META_TYPE_BACKGROUND
 | 
			
		||||
MetaBackgroundPrivate
 | 
			
		||||
meta_background_get_type
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>meta-background-actor</FILE>
 | 
			
		||||
<TITLE>MetaBackgroundActor</TITLE>
 | 
			
		||||
MetaBackgroundActor
 | 
			
		||||
MetaBackgroundActorClass
 | 
			
		||||
meta_background_actor_new_for_screen
 | 
			
		||||
MetaSnippetHook
 | 
			
		||||
meta_background_actor_add_glsl_snippet
 | 
			
		||||
meta_background_actor_set_uniform_float
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
META_BACKGROUND_ACTOR
 | 
			
		||||
META_BACKGROUND_ACTOR_CLASS
 | 
			
		||||
META_BACKGROUND_ACTOR_GET_CLASS
 | 
			
		||||
META_IS_BACKGROUND_ACTOR
 | 
			
		||||
META_IS_BACKGROUND_ACTOR_CLASS
 | 
			
		||||
META_TYPE_BACKGROUND_ACTOR
 | 
			
		||||
MetaBackgroundActorPrivate
 | 
			
		||||
meta_background_actor_get_type
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>meta-background-group</FILE>
 | 
			
		||||
<TITLE>MetaBackgroundGroup</TITLE>
 | 
			
		||||
MetaBackgroundGroupClass
 | 
			
		||||
meta_background_group_new
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
META_BACKGROUND_GROUP
 | 
			
		||||
META_BACKGROUND_GROUP_CLASS
 | 
			
		||||
META_BACKGROUND_GROUP_GET_CLASS
 | 
			
		||||
META_IS_BACKGROUND_GROUP
 | 
			
		||||
META_IS_BACKGROUND_GROUP_CLASS
 | 
			
		||||
META_TYPE_BACKGROUND_GROUP
 | 
			
		||||
MetaBackgroundGroupPrivate
 | 
			
		||||
meta_background_group_get_type
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>meta-plugin</FILE>
 | 
			
		||||
<TITLE>MetaPlugin</TITLE>
 | 
			
		||||
MetaPlugin
 | 
			
		||||
MetaPluginClass
 | 
			
		||||
MetaPluginInfo
 | 
			
		||||
meta_plugin_running
 | 
			
		||||
meta_plugin_debug_mode
 | 
			
		||||
meta_plugin_get_info
 | 
			
		||||
MetaPluginVersion
 | 
			
		||||
META_PLUGIN_DECLARE
 | 
			
		||||
meta_plugin_switch_workspace_completed
 | 
			
		||||
meta_plugin_minimize_completed
 | 
			
		||||
meta_plugin_unminimize_completed
 | 
			
		||||
meta_plugin_maximize_completed
 | 
			
		||||
meta_plugin_unmaximize_completed
 | 
			
		||||
meta_plugin_map_completed
 | 
			
		||||
meta_plugin_destroy_completed
 | 
			
		||||
MetaModalOptions
 | 
			
		||||
meta_plugin_begin_modal
 | 
			
		||||
meta_plugin_end_modal
 | 
			
		||||
meta_plugin_get_screen
 | 
			
		||||
meta_plugin_manager_set_plugin_type
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
META_IS_PLUGIN
 | 
			
		||||
META_IS_PLUGIN_CLASS
 | 
			
		||||
META_PLUGIN
 | 
			
		||||
META_PLUGIN_CLASS
 | 
			
		||||
META_PLUGIN_GET_CLASS
 | 
			
		||||
META_TYPE_PLUGIN
 | 
			
		||||
MetaPluginPrivate
 | 
			
		||||
meta_plugin_get_type
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>meta-shadow-factory</FILE>
 | 
			
		||||
MetaShadowParams
 | 
			
		||||
meta_shadow_factory_get_default
 | 
			
		||||
meta_shadow_factory_set_params
 | 
			
		||||
meta_shadow_factory_get_params
 | 
			
		||||
MetaShadowFactory
 | 
			
		||||
MetaShadowFactoryClass
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
META_IS_SHADOW_FACTORY
 | 
			
		||||
META_IS_SHADOW_FACTORY_CLASS
 | 
			
		||||
META_SHADOW_FACTORY
 | 
			
		||||
META_SHADOW_FACTORY_CLASS
 | 
			
		||||
META_SHADOW_FACTORY_GET_CLASS
 | 
			
		||||
META_TYPE_SHADOW_FACTORY
 | 
			
		||||
meta_shadow_factory_get_type
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>meta-shaped-texture</FILE>
 | 
			
		||||
<TITLE>MetaShapedTexture</TITLE>
 | 
			
		||||
MetaShapedTexture
 | 
			
		||||
MetaShapedTextureClass
 | 
			
		||||
meta_shaped_texture_new
 | 
			
		||||
meta_shaped_texture_set_create_mipmaps
 | 
			
		||||
meta_shaped_texture_update_area
 | 
			
		||||
meta_shaped_texture_set_pixmap
 | 
			
		||||
meta_shaped_texture_get_texture
 | 
			
		||||
meta_shaped_texture_set_mask_texture
 | 
			
		||||
meta_shaped_texture_set_clip_region
 | 
			
		||||
meta_shaped_texture_get_image
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
META_IS_SHAPED_TEXTURE
 | 
			
		||||
META_IS_SHAPED_TEXTURE_CLASS
 | 
			
		||||
META_SHAPED_TEXTURE
 | 
			
		||||
META_SHAPED_TEXTURE_CLASS
 | 
			
		||||
META_SHAPED_TEXTURE_GET_CLASS
 | 
			
		||||
META_TYPE_SHAPED_TEXTURE
 | 
			
		||||
MetaShapedTexturePrivate
 | 
			
		||||
meta_shaped_texture_get_type
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>meta-window-actor</FILE>
 | 
			
		||||
<TITLE>MetaWindowActor</TITLE>
 | 
			
		||||
MetaWindowActor
 | 
			
		||||
MetaWindowActorClass
 | 
			
		||||
meta_window_actor_get_x_window
 | 
			
		||||
meta_window_actor_get_workspace
 | 
			
		||||
meta_window_actor_get_meta_window
 | 
			
		||||
meta_window_actor_get_texture
 | 
			
		||||
meta_window_actor_is_override_redirect
 | 
			
		||||
meta_window_actor_get_description
 | 
			
		||||
meta_window_actor_showing_on_its_workspace
 | 
			
		||||
meta_window_actor_is_destroyed
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
META_IS_WINDOW_ACTOR
 | 
			
		||||
META_IS_WINDOW_ACTOR_CLASS
 | 
			
		||||
META_TYPE_WINDOW_ACTOR
 | 
			
		||||
META_WINDOW_ACTOR
 | 
			
		||||
META_WINDOW_ACTOR_CLASS
 | 
			
		||||
META_WINDOW_ACTOR_GET_CLASS
 | 
			
		||||
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
 | 
			
		||||
MetaPrefsChangedFunc
 | 
			
		||||
meta_prefs_add_listener
 | 
			
		||||
meta_prefs_remove_listener
 | 
			
		||||
meta_prefs_init
 | 
			
		||||
meta_prefs_override_preference_schema
 | 
			
		||||
meta_preference_to_string
 | 
			
		||||
meta_prefs_get_mouse_button_mods
 | 
			
		||||
meta_prefs_get_mouse_button_resize
 | 
			
		||||
meta_prefs_get_mouse_button_menu
 | 
			
		||||
meta_prefs_get_focus_mode
 | 
			
		||||
meta_prefs_get_focus_new_windows
 | 
			
		||||
meta_prefs_get_attach_modal_dialogs
 | 
			
		||||
meta_prefs_get_raise_on_click
 | 
			
		||||
meta_prefs_get_theme
 | 
			
		||||
meta_prefs_get_titlebar_font
 | 
			
		||||
meta_prefs_get_num_workspaces
 | 
			
		||||
meta_prefs_get_dynamic_workspaces
 | 
			
		||||
meta_prefs_get_disable_workarounds
 | 
			
		||||
meta_prefs_get_auto_raise
 | 
			
		||||
meta_prefs_get_auto_raise_delay
 | 
			
		||||
meta_prefs_get_focus_change_on_pointer_rest
 | 
			
		||||
meta_prefs_get_gnome_accessibility
 | 
			
		||||
meta_prefs_get_gnome_animations
 | 
			
		||||
meta_prefs_get_edge_tiling
 | 
			
		||||
meta_prefs_get_auto_maximize
 | 
			
		||||
meta_prefs_get_button_layout
 | 
			
		||||
meta_prefs_get_action_double_click_titlebar
 | 
			
		||||
meta_prefs_get_action_middle_click_titlebar
 | 
			
		||||
meta_prefs_get_action_right_click_titlebar
 | 
			
		||||
meta_prefs_set_num_workspaces
 | 
			
		||||
meta_prefs_get_workspace_name
 | 
			
		||||
meta_prefs_change_workspace_name
 | 
			
		||||
meta_prefs_get_cursor_theme
 | 
			
		||||
meta_prefs_get_cursor_size
 | 
			
		||||
meta_prefs_get_compositing_manager
 | 
			
		||||
meta_prefs_get_force_fullscreen
 | 
			
		||||
meta_prefs_set_force_fullscreen
 | 
			
		||||
meta_prefs_get_workspaces_only_on_primary
 | 
			
		||||
meta_prefs_get_no_tab_popup
 | 
			
		||||
meta_prefs_set_no_tab_popup
 | 
			
		||||
meta_prefs_get_draggable_border_width
 | 
			
		||||
meta_prefs_get_ignore_request_hide_titlebar
 | 
			
		||||
meta_prefs_set_ignore_request_hide_titlebar
 | 
			
		||||
MetaKeyBindingAction
 | 
			
		||||
MetaKeyBindingFlags
 | 
			
		||||
MetaKeyCombo
 | 
			
		||||
MetaKeyHandlerFunc
 | 
			
		||||
meta_prefs_get_keybindings
 | 
			
		||||
meta_prefs_get_keybinding_action
 | 
			
		||||
meta_prefs_get_window_binding
 | 
			
		||||
meta_prefs_get_overlay_binding
 | 
			
		||||
meta_prefs_get_visual_bell
 | 
			
		||||
meta_prefs_bell_is_audible
 | 
			
		||||
meta_prefs_get_visual_bell_type
 | 
			
		||||
MetaKeyHandler
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
meta_key_binding_get_type
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>screen</FILE>
 | 
			
		||||
MetaScreen
 | 
			
		||||
MetaScreenClass
 | 
			
		||||
meta_screen_get_screen_number
 | 
			
		||||
meta_screen_get_display
 | 
			
		||||
meta_screen_get_xroot
 | 
			
		||||
meta_screen_get_size
 | 
			
		||||
meta_screen_get_compositor_data
 | 
			
		||||
meta_screen_set_compositor_data
 | 
			
		||||
meta_screen_for_x_screen
 | 
			
		||||
meta_screen_set_cm_selection
 | 
			
		||||
meta_screen_unset_cm_selection
 | 
			
		||||
meta_screen_get_startup_sequences
 | 
			
		||||
meta_screen_get_workspaces
 | 
			
		||||
meta_screen_get_n_workspaces
 | 
			
		||||
meta_screen_get_workspace_by_index
 | 
			
		||||
meta_screen_remove_workspace
 | 
			
		||||
meta_screen_append_new_workspace
 | 
			
		||||
meta_screen_get_active_workspace_index
 | 
			
		||||
meta_screen_get_active_workspace
 | 
			
		||||
meta_screen_get_n_monitors
 | 
			
		||||
meta_screen_get_primary_monitor
 | 
			
		||||
meta_screen_get_current_monitor
 | 
			
		||||
meta_screen_get_monitor_geometry
 | 
			
		||||
meta_screen_get_monitor_index_for_rect
 | 
			
		||||
meta_screen_focus_default_window
 | 
			
		||||
MetaScreenCorner
 | 
			
		||||
meta_screen_override_workspace_layout
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
META_IS_SCREEN
 | 
			
		||||
META_IS_SCREEN_CLASS
 | 
			
		||||
META_SCREEN
 | 
			
		||||
META_SCREEN_CLASS
 | 
			
		||||
META_SCREEN_GET_CLASS
 | 
			
		||||
META_TYPE_SCREEN
 | 
			
		||||
meta_screen_get_type
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>util</FILE>
 | 
			
		||||
meta_is_verbose
 | 
			
		||||
meta_set_verbose
 | 
			
		||||
meta_is_debugging
 | 
			
		||||
meta_set_debugging
 | 
			
		||||
meta_is_syncing
 | 
			
		||||
meta_set_syncing
 | 
			
		||||
meta_set_replace_current_wm
 | 
			
		||||
meta_debug_spew_real
 | 
			
		||||
meta_verbose_real
 | 
			
		||||
meta_bug
 | 
			
		||||
meta_warning
 | 
			
		||||
meta_fatal
 | 
			
		||||
MetaDebugTopic
 | 
			
		||||
meta_topic_real
 | 
			
		||||
meta_add_verbose_topic
 | 
			
		||||
meta_remove_verbose_topic
 | 
			
		||||
meta_push_no_msg_prefix
 | 
			
		||||
meta_pop_no_msg_prefix
 | 
			
		||||
meta_unsigned_long_equal
 | 
			
		||||
meta_unsigned_long_hash
 | 
			
		||||
meta_frame_type_to_string
 | 
			
		||||
meta_gravity_to_string
 | 
			
		||||
_
 | 
			
		||||
N_
 | 
			
		||||
meta_g_utf8_strndup
 | 
			
		||||
meta_free_gslist_and_elements
 | 
			
		||||
meta_show_dialog
 | 
			
		||||
meta_debug_spew
 | 
			
		||||
meta_verbose
 | 
			
		||||
meta_topic
 | 
			
		||||
MetaLaterType
 | 
			
		||||
meta_later_add
 | 
			
		||||
meta_later_remove
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>window</FILE>
 | 
			
		||||
MetaWindow
 | 
			
		||||
MetaWindowClass
 | 
			
		||||
MetaWindowType
 | 
			
		||||
MetaMaximizeFlags
 | 
			
		||||
meta_window_get_frame
 | 
			
		||||
meta_window_has_focus
 | 
			
		||||
meta_window_appears_focused
 | 
			
		||||
meta_window_is_shaded
 | 
			
		||||
meta_window_is_monitor_sized
 | 
			
		||||
meta_window_is_override_redirect
 | 
			
		||||
meta_window_is_skip_taskbar
 | 
			
		||||
meta_window_get_rect
 | 
			
		||||
meta_window_get_buffer_rect
 | 
			
		||||
meta_window_get_frame_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
 | 
			
		||||
meta_window_get_window_type
 | 
			
		||||
meta_window_get_window_type_atom
 | 
			
		||||
meta_window_get_workspace
 | 
			
		||||
meta_window_get_monitor
 | 
			
		||||
meta_window_is_on_all_workspaces
 | 
			
		||||
meta_window_located_on_workspace
 | 
			
		||||
meta_window_is_hidden
 | 
			
		||||
meta_window_activate
 | 
			
		||||
meta_window_activate_with_workspace
 | 
			
		||||
meta_window_get_description
 | 
			
		||||
meta_window_get_wm_class
 | 
			
		||||
meta_window_get_wm_class_instance
 | 
			
		||||
meta_window_showing_on_its_workspace
 | 
			
		||||
meta_window_get_gtk_application_id
 | 
			
		||||
meta_window_get_gtk_unique_bus_name
 | 
			
		||||
meta_window_get_gtk_application_object_path
 | 
			
		||||
meta_window_get_gtk_window_object_path
 | 
			
		||||
meta_window_get_gtk_app_menu_object_path
 | 
			
		||||
meta_window_get_gtk_menubar_object_path
 | 
			
		||||
meta_window_move
 | 
			
		||||
meta_window_move_frame
 | 
			
		||||
meta_window_move_resize_frame
 | 
			
		||||
meta_window_move_to_monitor
 | 
			
		||||
meta_window_resize
 | 
			
		||||
meta_window_set_demands_attention
 | 
			
		||||
meta_window_unset_demands_attention
 | 
			
		||||
meta_window_get_startup_id
 | 
			
		||||
meta_window_change_workspace_by_index
 | 
			
		||||
meta_window_change_workspace
 | 
			
		||||
meta_window_get_compositor_private
 | 
			
		||||
meta_window_set_compositor_private
 | 
			
		||||
meta_window_configure_notify
 | 
			
		||||
meta_window_get_role
 | 
			
		||||
meta_window_get_layer
 | 
			
		||||
meta_window_find_root_ancestor
 | 
			
		||||
meta_window_is_ancestor_of_transient
 | 
			
		||||
MetaWindowForeachFunc
 | 
			
		||||
meta_window_foreach_transient
 | 
			
		||||
meta_window_foreach_ancestor
 | 
			
		||||
meta_window_get_maximized
 | 
			
		||||
meta_window_is_fullscreen
 | 
			
		||||
meta_window_is_on_primary_monitor
 | 
			
		||||
meta_window_requested_bypass_compositor
 | 
			
		||||
meta_window_requested_dont_bypass_compositor
 | 
			
		||||
meta_window_is_mapped
 | 
			
		||||
meta_window_toplevel_is_mapped
 | 
			
		||||
meta_window_get_icon_geometry
 | 
			
		||||
meta_window_set_icon_geometry
 | 
			
		||||
meta_window_maximize
 | 
			
		||||
meta_window_unmaximize
 | 
			
		||||
meta_window_minimize
 | 
			
		||||
meta_window_unminimize
 | 
			
		||||
meta_window_raise
 | 
			
		||||
meta_window_lower
 | 
			
		||||
meta_window_get_title
 | 
			
		||||
meta_window_get_transient_for
 | 
			
		||||
meta_window_get_transient_for_as_xid
 | 
			
		||||
meta_window_delete
 | 
			
		||||
meta_window_get_stable_sequence
 | 
			
		||||
meta_window_get_user_time
 | 
			
		||||
meta_window_get_pid
 | 
			
		||||
meta_window_get_client_machine
 | 
			
		||||
meta_window_is_remote
 | 
			
		||||
meta_window_is_modal
 | 
			
		||||
meta_window_is_attached_dialog
 | 
			
		||||
meta_window_get_mutter_hints
 | 
			
		||||
meta_window_get_frame_type
 | 
			
		||||
meta_window_get_frame_bounds
 | 
			
		||||
meta_window_get_tile_match
 | 
			
		||||
meta_window_make_fullscreen
 | 
			
		||||
meta_window_unmake_fullscreen
 | 
			
		||||
meta_window_make_above
 | 
			
		||||
meta_window_unmake_above
 | 
			
		||||
meta_window_shade
 | 
			
		||||
meta_window_unshade
 | 
			
		||||
meta_window_stick
 | 
			
		||||
meta_window_unstick
 | 
			
		||||
meta_window_kill
 | 
			
		||||
meta_window_focus
 | 
			
		||||
meta_window_check_alive
 | 
			
		||||
meta_window_get_work_area_current_monitor
 | 
			
		||||
meta_window_get_work_area_for_monitor
 | 
			
		||||
meta_window_get_work_area_all_monitors
 | 
			
		||||
meta_window_begin_grab_op
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
META_IS_WINDOW
 | 
			
		||||
META_IS_WINDOW_CLASS
 | 
			
		||||
META_TYPE_WINDOW
 | 
			
		||||
META_WINDOW
 | 
			
		||||
META_WINDOW_CLASS
 | 
			
		||||
META_WINDOW_GET_CLASS
 | 
			
		||||
meta_window_get_type
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
<SECTION>
 | 
			
		||||
<FILE>workspace</FILE>
 | 
			
		||||
MetaWorkspace
 | 
			
		||||
MetaWorkspaceClass
 | 
			
		||||
meta_workspace_index
 | 
			
		||||
meta_workspace_get_screen
 | 
			
		||||
meta_workspace_list_windows
 | 
			
		||||
meta_workspace_get_work_area_for_monitor
 | 
			
		||||
meta_workspace_get_work_area_all_monitors
 | 
			
		||||
meta_workspace_activate
 | 
			
		||||
meta_workspace_activate_with_focus
 | 
			
		||||
meta_workspace_update_window_hints
 | 
			
		||||
meta_workspace_set_builtin_struts
 | 
			
		||||
meta_workspace_get_neighbor
 | 
			
		||||
<SUBSECTION Standard>
 | 
			
		||||
META_IS_WORKSPACE
 | 
			
		||||
META_IS_WORKSPACE_CLASS
 | 
			
		||||
META_TYPE_WORKSPACE
 | 
			
		||||
META_WORKSPACE
 | 
			
		||||
META_WORKSPACE_CLASS
 | 
			
		||||
META_WORKSPACE_GET_CLASS
 | 
			
		||||
meta_workspace_get_type
 | 
			
		||||
</SECTION>
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										15
									
								
								doc/reference/mutter-overview.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								doc/reference/mutter-overview.xml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
			
		||||
<part id="mutter-overview">
 | 
			
		||||
 | 
			
		||||
  <title>Overview</title>
 | 
			
		||||
 | 
			
		||||
  <partintro>
 | 
			
		||||
 | 
			
		||||
    <para>Mutter is a GObject-based library for creating compositing window managers.</para>
 | 
			
		||||
 | 
			
		||||
    <para>Compositors that wish to use Mutter must implement a subclass of #MetaPlugin and register it with meta_plugin_manager_set_plugin_type() before calling meta_init() but after g_type_init().</para>
 | 
			
		||||
 | 
			
		||||
    <para>#MetaPlugin provides virtual functions that allow to override default behavior in the window management code, such as the effect to perform when a window is created or when switching workspaces.</para>
 | 
			
		||||
 | 
			
		||||
  </partintro>
 | 
			
		||||
 | 
			
		||||
</part>
 | 
			
		||||
							
								
								
									
										100
									
								
								doc/reference/running-mutter.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								doc/reference/running-mutter.xml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,100 @@
 | 
			
		||||
<part id="running-mutter">
 | 
			
		||||
 | 
			
		||||
  <title>Running Mutter</title>
 | 
			
		||||
 | 
			
		||||
  <partintro>
 | 
			
		||||
 | 
			
		||||
    <section id="environment-variables">
 | 
			
		||||
      <title>Environment Variables</title>
 | 
			
		||||
 | 
			
		||||
      <para>
 | 
			
		||||
        Mutter automatically checks environment variables during
 | 
			
		||||
        its initialization. These environment variables are meant
 | 
			
		||||
        as debug tools or overrides for default behaviours:
 | 
			
		||||
      </para>
 | 
			
		||||
 | 
			
		||||
      <variablelist>
 | 
			
		||||
        <varlistentry>
 | 
			
		||||
          <term>MUTTER_VERBOSE</term>
 | 
			
		||||
          <listitem>
 | 
			
		||||
            <para>Enable verbose mode, in which more information is printed to the console. Mutter needs to be built with the --enable-verbose-mode option (enabled by default). For more fine-grained control of the output, see meta_add_verbose_topic().</para>
 | 
			
		||||
          </listitem>
 | 
			
		||||
        </varlistentry>
 | 
			
		||||
        <varlistentry>
 | 
			
		||||
          <term>MUTTER_DEBUG</term>
 | 
			
		||||
          <listitem>
 | 
			
		||||
            <para>Traps and prints X errors to the console.</para>
 | 
			
		||||
          </listitem>
 | 
			
		||||
        </varlistentry>
 | 
			
		||||
        <varlistentry>
 | 
			
		||||
          <term>MUTTER_G_FATAL_WARNINGS</term>
 | 
			
		||||
          <listitem>
 | 
			
		||||
            <para>Causes any logging from the domains Mutter, Gtk, Gdk, Pango or GLib to terminate the process (only when using the log functions in GLib).</para>
 | 
			
		||||
          </listitem>
 | 
			
		||||
        </varlistentry>
 | 
			
		||||
        <varlistentry>
 | 
			
		||||
          <term>MUTTER_USE_LOGFILE</term>
 | 
			
		||||
          <listitem>
 | 
			
		||||
            <para>Log all messages to a temporary file.</para>
 | 
			
		||||
          </listitem>
 | 
			
		||||
        </varlistentry>
 | 
			
		||||
        <varlistentry>
 | 
			
		||||
          <term>MUTTER_DEBUG_XINERAMA</term>
 | 
			
		||||
          <listitem>
 | 
			
		||||
            <para>Log extra information about support of the XINERAMA extension.</para>
 | 
			
		||||
          </listitem>
 | 
			
		||||
        </varlistentry>
 | 
			
		||||
        <varlistentry>
 | 
			
		||||
          <term>MUTTER_DEBUG_SM</term>
 | 
			
		||||
          <listitem>
 | 
			
		||||
            <para>Log extra information about session management.</para>
 | 
			
		||||
          </listitem>
 | 
			
		||||
        </varlistentry>
 | 
			
		||||
        <varlistentry>
 | 
			
		||||
          <term>MUTTER_DEBUG_BUTTON_GRABS</term>
 | 
			
		||||
          <listitem>
 | 
			
		||||
            <para>Log extra information about button grabs.</para>
 | 
			
		||||
          </listitem>
 | 
			
		||||
        </varlistentry>
 | 
			
		||||
        <varlistentry>
 | 
			
		||||
          <term>MUTTER_SYNC</term>
 | 
			
		||||
          <listitem>
 | 
			
		||||
            <para>Call XSync after each X call.</para>
 | 
			
		||||
          </listitem>
 | 
			
		||||
        </varlistentry>
 | 
			
		||||
        <varlistentry>
 | 
			
		||||
          <term>MUTTER_DISPLAY</term>
 | 
			
		||||
          <listitem>
 | 
			
		||||
            <para>Name of the X11 display to use.</para>
 | 
			
		||||
          </listitem>
 | 
			
		||||
        </varlistentry>
 | 
			
		||||
        <varlistentry>
 | 
			
		||||
          <term>META_DISABLE_MIPMAPS</term>
 | 
			
		||||
          <listitem>
 | 
			
		||||
            <para>Disable use of mipmaps for the textures that back window pixmaps.</para>
 | 
			
		||||
          </listitem>
 | 
			
		||||
        </varlistentry>
 | 
			
		||||
        <varlistentry>
 | 
			
		||||
          <term>MUTTER_USE_STATIC_GRAVITY</term>
 | 
			
		||||
          <listitem>
 | 
			
		||||
            <para>Enable support for clients with static bit-gravity.</para>
 | 
			
		||||
          </listitem>
 | 
			
		||||
        </varlistentry>
 | 
			
		||||
        <varlistentry>
 | 
			
		||||
          <term>MUTTER_WM_CLASS_FILTER</term>
 | 
			
		||||
          <listitem>
 | 
			
		||||
            <para>Comma-separated list of WM_CLASS names to which to restrict Mutter to.</para>
 | 
			
		||||
          </listitem>
 | 
			
		||||
        </varlistentry>
 | 
			
		||||
        <varlistentry>
 | 
			
		||||
          <term>MUTTER_DISABLE_FALLBACK_COLOR</term>
 | 
			
		||||
          <listitem>
 | 
			
		||||
            <para>Disable fallback for themed colors, for easier detection of typographical errors.</para>
 | 
			
		||||
          </listitem>
 | 
			
		||||
        </varlistentry>
 | 
			
		||||
      </variablelist>
 | 
			
		||||
 | 
			
		||||
    </section>
 | 
			
		||||
 | 
			
		||||
  </partintro>
 | 
			
		||||
</part>
 | 
			
		||||
@@ -29,7 +29,6 @@ eu
 | 
			
		||||
fa
 | 
			
		||||
fi
 | 
			
		||||
fr
 | 
			
		||||
fur
 | 
			
		||||
ga
 | 
			
		||||
gl
 | 
			
		||||
gu
 | 
			
		||||
 
 | 
			
		||||
@@ -1,2 +1 @@
 | 
			
		||||
# List of source files that should NOT be translated.
 | 
			
		||||
# Please keep this file sorted alphabetically.
 | 
			
		||||
data/mutter-wayland.desktop.in
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										58
									
								
								po/ca.po
									
									
									
									
									
								
							
							
						
						
									
										58
									
								
								po/ca.po
									
									
									
									
									
								
							@@ -6,23 +6,21 @@
 | 
			
		||||
# Jordi Mallach <jordi@sindominio.net>, 2003, 2004, 2005, 2006, 2007, 2008.
 | 
			
		||||
# David Planella <david.planella@gmail.com>, 2008, 2009, 2011, 2012.
 | 
			
		||||
# Jordi Serratosa <jordis@softcatala.cat>, 2012.
 | 
			
		||||
# Gil Forcada <gilforcada@guifi.net>, 2012, 2013, 2014, 2016.
 | 
			
		||||
# Gil Forcada <gilforcada@guifi.net>, 2012, 2013, 2014.
 | 
			
		||||
#
 | 
			
		||||
msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: metacity 2.24\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
 | 
			
		||||
"product=mutter&keywords=I18N+L10N&component=general\n"
 | 
			
		||||
"POT-Creation-Date: 2016-03-13 01:36+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2016-03-13 14:45+0100\n"
 | 
			
		||||
"Last-Translator: Gil Forcada <gilforcada@guifi.net>\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2015-03-10 17:33-0400\n"
 | 
			
		||||
"PO-Revision-Date: 2015-03-10 17:33-0400\n"
 | 
			
		||||
"Last-Translator: Jordi Mas <jmas@softcatala.org>\n"
 | 
			
		||||
"Language-Team: Catalan <tradgnome@softcatala.org>\n"
 | 
			
		||||
"Language: ca\n"
 | 
			
		||||
"MIME-Version: 1.0\n"
 | 
			
		||||
"Content-Type: text/plain; charset=UTF-8\n"
 | 
			
		||||
"Content-Transfer-Encoding: 8bits\n"
 | 
			
		||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
 | 
			
		||||
"X-Generator: Gtranslator 2.91.6\n"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:1
 | 
			
		||||
msgid "Navigation"
 | 
			
		||||
@@ -467,22 +465,22 @@ msgstr "Canvia al terminal virtual 11"
 | 
			
		||||
msgid "Switch to VT 12"
 | 
			
		||||
msgstr "Canvia al terminal virtual 12"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:518
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:364
 | 
			
		||||
msgid "Built-in display"
 | 
			
		||||
msgstr "Pantalla integrada"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:544
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:391
 | 
			
		||||
msgid "Unknown"
 | 
			
		||||
msgstr "Desconeguda"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:546
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:393
 | 
			
		||||
msgid "Unknown Display"
 | 
			
		||||
msgstr "Pantalla desconeguda"
 | 
			
		||||
 | 
			
		||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
 | 
			
		||||
#. * size in inches, like 'Dell 15"'
 | 
			
		||||
#.
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:554
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:401
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s %s"
 | 
			
		||||
msgstr "%s %s"
 | 
			
		||||
@@ -498,7 +496,7 @@ msgstr ""
 | 
			
		||||
"Ja s'està executant un altre gestor de composició a la pantalla %i a la "
 | 
			
		||||
"visualització «%s»."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/bell.c:192
 | 
			
		||||
#: ../src/core/bell.c:185
 | 
			
		||||
msgid "Bell event"
 | 
			
		||||
msgstr "Esdeveniment de campana"
 | 
			
		||||
 | 
			
		||||
@@ -527,51 +525,41 @@ msgstr "_Espera"
 | 
			
		||||
msgid "_Force Quit"
 | 
			
		||||
msgstr "_Força'n la sortida"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/display.c:555
 | 
			
		||||
#: ../src/core/display.c:562
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Failed to open X Window System display '%s'\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"S'ha produït un error en obrir la pantalla del sistema de finestres X «%s»\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:181
 | 
			
		||||
#: ../src/core/main.c:176
 | 
			
		||||
msgid "Disable connection to session manager"
 | 
			
		||||
msgstr "Inhabilita la connexió al gestor de sessions"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:187
 | 
			
		||||
#: ../src/core/main.c:182
 | 
			
		||||
msgid "Replace the running window manager"
 | 
			
		||||
msgstr "Reemplaça el gestor de finestres en execució"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
#: ../src/core/main.c:188
 | 
			
		||||
msgid "Specify session management ID"
 | 
			
		||||
msgstr "Especifica l'ID de gestió de sessió"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:198
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
msgid "X Display to use"
 | 
			
		||||
msgstr "Visualització X per usar"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:204
 | 
			
		||||
#: ../src/core/main.c:199
 | 
			
		||||
msgid "Initialize session from savefile"
 | 
			
		||||
msgstr "Inicialitza la sessió des del fitxer desat"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:210
 | 
			
		||||
#: ../src/core/main.c:205
 | 
			
		||||
msgid "Make X calls synchronous"
 | 
			
		||||
msgstr "Fes que les crides a l'X siguin síncrones"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:217
 | 
			
		||||
#: ../src/core/main.c:212
 | 
			
		||||
msgid "Run as a wayland compositor"
 | 
			
		||||
msgstr "Funciona com a compositor de Wayland"
 | 
			
		||||
 | 
			
		||||
# Notes:
 | 
			
		||||
# Afegeix una nota
 | 
			
		||||
#
 | 
			
		||||
# Camins:
 | 
			
		||||
# ../src/core/main.c:223
 | 
			
		||||
#: ../src/core/main.c:223
 | 
			
		||||
#| msgid "Run as a wayland compositor"
 | 
			
		||||
msgid "Run as a nested compositor"
 | 
			
		||||
msgstr "Funciona com a compositor imbricat"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:231
 | 
			
		||||
#: ../src/core/main.c:220
 | 
			
		||||
msgid "Run as a full display server, rather than nested"
 | 
			
		||||
msgstr "Funciona com a servidor de pantalla completa, en comptes d'imbricat"
 | 
			
		||||
 | 
			
		||||
@@ -599,12 +587,12 @@ msgstr "Escriu versió"
 | 
			
		||||
msgid "Mutter plugin to use"
 | 
			
		||||
msgstr "Connector del Mutter a utilitzar"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/prefs.c:1997
 | 
			
		||||
#: ../src/core/prefs.c:2004
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Workspace %d"
 | 
			
		||||
msgstr "Espai de treball %d"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:521
 | 
			
		||||
#: ../src/core/screen.c:525
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"Display \"%s\" already has a window manager; try using the --replace option "
 | 
			
		||||
@@ -613,12 +601,12 @@ msgstr ""
 | 
			
		||||
"La pantalla «%s» ja té un gestor de finestres; proveu l'opció --replace per "
 | 
			
		||||
"reemplaçar el gestor de finestres actual."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:603
 | 
			
		||||
#: ../src/core/screen.c:607
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Screen %d on display '%s' is invalid\n"
 | 
			
		||||
msgstr "La pantalla %d en la visualització '%s' no és vàlida\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/util.c:121
 | 
			
		||||
#: ../src/core/util.c:118
 | 
			
		||||
msgid "Mutter was compiled without support for verbose mode\n"
 | 
			
		||||
msgstr "Mutter es va compilar sense compatibilitat per al mode detallat\n"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										138
									
								
								po/cs.po
									
									
									
									
									
								
							
							
						
						
									
										138
									
								
								po/cs.po
									
									
									
									
									
								
							@@ -12,7 +12,7 @@ msgstr ""
 | 
			
		||||
"Project-Id-Version: mutter\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
 | 
			
		||||
"product=mutter&keywords=I18N+L10N&component=general\n"
 | 
			
		||||
"POT-Creation-Date: 2016-02-27 13:36+0000\n"
 | 
			
		||||
"POT-Creation-Date: 2015-03-24 23:25+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2014-09-22 15:01+0200\n"
 | 
			
		||||
"Last-Translator: Petr Kovar <pknbe@volny.cz>\n"
 | 
			
		||||
"Language-Team: Czech <gnome-cs-list@gnome.org>\n"
 | 
			
		||||
@@ -30,91 +30,91 @@ msgstr "Navigace"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:2
 | 
			
		||||
msgid "Move window to workspace 1"
 | 
			
		||||
msgstr "Přesunout okno na pracovní plochu 1"
 | 
			
		||||
msgstr "Přesunout okno na plochu 1"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:3
 | 
			
		||||
msgid "Move window to workspace 2"
 | 
			
		||||
msgstr "Přesunout okno na pracovní plochu 2"
 | 
			
		||||
msgstr "Přesunout okno na plochu 2"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:4
 | 
			
		||||
msgid "Move window to workspace 3"
 | 
			
		||||
msgstr "Přesunout okno na pracovní plochu 3"
 | 
			
		||||
msgstr "Přesunout okno na plochu 3"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:5
 | 
			
		||||
msgid "Move window to workspace 4"
 | 
			
		||||
msgstr "Přesunout okno na pracovní plochu 4"
 | 
			
		||||
msgstr "Přesunout okno na plochu 4"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:6
 | 
			
		||||
msgid "Move window to last workspace"
 | 
			
		||||
msgstr "Přesunout okno na poslední pracovní plochu"
 | 
			
		||||
msgstr "Přesunout okno na poslední plochu"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:7
 | 
			
		||||
msgid "Move window one workspace to the left"
 | 
			
		||||
msgstr "Přesunout okno o jednu pracovní plochu doleva"
 | 
			
		||||
msgstr "Přesunout okno o plochu doleva"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:8
 | 
			
		||||
msgid "Move window one workspace to the right"
 | 
			
		||||
msgstr "Přesunout okno o jednu pracovní plochu doprava"
 | 
			
		||||
msgstr "Přesunout okno o plochu doprava"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:9
 | 
			
		||||
msgid "Move window one workspace up"
 | 
			
		||||
msgstr "Přesunout okno o jednu pracovní plochu nahoru"
 | 
			
		||||
msgstr "Přesunout okno o plochu nahoru"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:10
 | 
			
		||||
msgid "Move window one workspace down"
 | 
			
		||||
msgstr "Přesunout okno o jednu pracovní plochu dolů"
 | 
			
		||||
msgstr "Přesunout okno o plochu dolů"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:11
 | 
			
		||||
msgid "Move window one monitor to the left"
 | 
			
		||||
msgstr "Přesunout okno o jeden monitor doleva"
 | 
			
		||||
msgstr "Přesunout okno o monitor doleva"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:12
 | 
			
		||||
msgid "Move window one monitor to the right"
 | 
			
		||||
msgstr "Přesunout okno o jeden monitor doprava"
 | 
			
		||||
msgstr "Přesunout okno o monitor doprava"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:13
 | 
			
		||||
msgid "Move window one monitor up"
 | 
			
		||||
msgstr "Přesunout okno o jeden monitor nahoru"
 | 
			
		||||
msgstr "Přesunout okno o monitor nahoru"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:14
 | 
			
		||||
msgid "Move window one monitor down"
 | 
			
		||||
msgstr "Přesunout okno o jeden monitor dolů"
 | 
			
		||||
msgstr "Přesunout okno o monitor dolů"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:15
 | 
			
		||||
msgid "Switch applications"
 | 
			
		||||
msgstr "Přepnout do jiné aplikace"
 | 
			
		||||
msgstr "Přepnout mezi aplikacemi"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:16
 | 
			
		||||
msgid "Switch to previous application"
 | 
			
		||||
msgstr "Přepnout do předchozí aplikaci"
 | 
			
		||||
msgstr "Přepnout na předchozí aplikaci"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:17
 | 
			
		||||
msgid "Switch windows"
 | 
			
		||||
msgstr "Přepnout do jiného okna"
 | 
			
		||||
msgstr "Přepnout mezi okny"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:18
 | 
			
		||||
msgid "Switch to previous window"
 | 
			
		||||
msgstr "Přepnout do minulého okna"
 | 
			
		||||
msgstr "Přepnout na předchozí okno"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:19
 | 
			
		||||
msgid "Switch windows of an application"
 | 
			
		||||
msgstr "Přepnout do jiného okna aplikace"
 | 
			
		||||
msgstr "Přepnout mezi okny aplikace"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:20
 | 
			
		||||
msgid "Switch to previous window of an application"
 | 
			
		||||
msgstr "Přepnout do předchozího okna aplikace"
 | 
			
		||||
msgstr "Přepnout na předchozí okno aplikace"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:21
 | 
			
		||||
msgid "Switch system controls"
 | 
			
		||||
msgstr "Přepnout na systémový ovládací prvek"
 | 
			
		||||
msgstr "Přepnout mezi systémovými ovládacími prvky"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:22
 | 
			
		||||
msgid "Switch to previous system control"
 | 
			
		||||
msgstr "Přepnout na minulý systémový ovládací prvek"
 | 
			
		||||
msgstr "Přepnout na předchozí systémové ovládací prvky"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:23
 | 
			
		||||
msgid "Switch windows directly"
 | 
			
		||||
msgstr "Přepnout do minulého okna"
 | 
			
		||||
msgstr "Přepnout přímo mezi okny"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:24
 | 
			
		||||
msgid "Switch directly to previous window"
 | 
			
		||||
@@ -122,15 +122,15 @@ msgstr "Přepnout přímo na předchozí okno"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:25
 | 
			
		||||
msgid "Switch windows of an app directly"
 | 
			
		||||
msgstr "Přepnout do jiného okna aplikace"
 | 
			
		||||
msgstr "Přepnout přímo mezi okny aplikace"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:26
 | 
			
		||||
msgid "Switch directly to previous window of an app"
 | 
			
		||||
msgstr "Přepnout do předchozího okna aplikace"
 | 
			
		||||
msgstr "Přepnout přímo na předchozí okno aplikace"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:27
 | 
			
		||||
msgid "Switch system controls directly"
 | 
			
		||||
msgstr "Přepnout na minulý systémový ovládací prvek"
 | 
			
		||||
msgstr "Přepnout přímo mezi systémovými ovládacími prvky"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:28
 | 
			
		||||
msgid "Switch directly to previous system control"
 | 
			
		||||
@@ -198,7 +198,7 @@ msgstr "Aktivovat nabídku okna"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:3
 | 
			
		||||
msgid "Toggle fullscreen mode"
 | 
			
		||||
msgstr "Přepnout režim celé obrazovky"
 | 
			
		||||
msgstr "Přepnout režim na celou obrazovku"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:4
 | 
			
		||||
msgid "Toggle maximization state"
 | 
			
		||||
@@ -210,7 +210,7 @@ msgstr "Maximalizovat okno"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:6
 | 
			
		||||
msgid "Restore window"
 | 
			
		||||
msgstr "Obnovit velikost okna"
 | 
			
		||||
msgstr "Obnovit okno"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:7
 | 
			
		||||
msgid "Toggle shaded state"
 | 
			
		||||
@@ -234,19 +234,20 @@ msgstr "Změnit velikost okna"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:12
 | 
			
		||||
msgid "Toggle window on all workspaces or one"
 | 
			
		||||
msgstr "Přepnout okno na všechny/jednu pracovní plochu"
 | 
			
		||||
msgstr "Přepnout výskyt okna na všech plochách nebo jen na jedné"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:13
 | 
			
		||||
msgid "Raise window if covered, otherwise lower it"
 | 
			
		||||
msgstr "Když je okno zakryté vynést jej do popředí, jinak odsunout do pozadí"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Přenést okno do popředí, pokud je zakryté, jinak jej odsunout do pozadí"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:14
 | 
			
		||||
msgid "Raise window above other windows"
 | 
			
		||||
msgstr "Vynést okno do popředí nad ostatní okna"
 | 
			
		||||
msgstr "Přenést okno do popředí nad ostatní okna"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:15
 | 
			
		||||
msgid "Lower window below other windows"
 | 
			
		||||
msgstr "Odsunout okno do pozadí za ostatní okna"
 | 
			
		||||
msgstr "Odsunout okno do pozadí pod ostatní okna"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:16
 | 
			
		||||
msgid "Maximize window vertically"
 | 
			
		||||
@@ -258,11 +259,11 @@ msgstr "Maximalizovat okno vodorovně"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:18
 | 
			
		||||
msgid "View split on left"
 | 
			
		||||
msgstr "Rozdělit okno přes levou půlku obrazovky"
 | 
			
		||||
msgstr "Zobrazit rozdělení nalevo"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:19
 | 
			
		||||
msgid "View split on right"
 | 
			
		||||
msgstr "Rozdělit okno přes pravou půlku obrazovky"
 | 
			
		||||
msgstr "Zobrazit rozdělení napravo"
 | 
			
		||||
 | 
			
		||||
#: ../data/mutter.desktop.in.h:1
 | 
			
		||||
msgid "Mutter"
 | 
			
		||||
@@ -456,22 +457,22 @@ msgstr "Přepnout na VT 11"
 | 
			
		||||
msgid "Switch to VT 12"
 | 
			
		||||
msgstr "Přepnout na VT 12"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:518
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:364
 | 
			
		||||
msgid "Built-in display"
 | 
			
		||||
msgstr "Vestavěný displej"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:544
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:391
 | 
			
		||||
msgid "Unknown"
 | 
			
		||||
msgstr "Neznámý"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:546
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:393
 | 
			
		||||
msgid "Unknown Display"
 | 
			
		||||
msgstr "Neznámý displej"
 | 
			
		||||
 | 
			
		||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
 | 
			
		||||
#. * size in inches, like 'Dell 15"'
 | 
			
		||||
#.
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:554
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:401
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s %s"
 | 
			
		||||
msgstr "%s %s"
 | 
			
		||||
@@ -514,44 +515,40 @@ msgstr "_Počkat"
 | 
			
		||||
msgid "_Force Quit"
 | 
			
		||||
msgstr "_Vynutit ukončení"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/display.c:555
 | 
			
		||||
#: ../src/core/display.c:562
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Failed to open X Window System display '%s'\n"
 | 
			
		||||
msgstr "Nelze otevřít displej X Window System „%s“\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:181
 | 
			
		||||
#: ../src/core/main.c:176
 | 
			
		||||
msgid "Disable connection to session manager"
 | 
			
		||||
msgstr "Zakáže připojení ke správci sezení"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:187
 | 
			
		||||
#: ../src/core/main.c:182
 | 
			
		||||
msgid "Replace the running window manager"
 | 
			
		||||
msgstr "Nahradí běžícího správce oken"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
#: ../src/core/main.c:188
 | 
			
		||||
msgid "Specify session management ID"
 | 
			
		||||
msgstr "Určení ID správy sezení"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:198
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
msgid "X Display to use"
 | 
			
		||||
msgstr "Displej X, který použije"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:204
 | 
			
		||||
#: ../src/core/main.c:199
 | 
			
		||||
msgid "Initialize session from savefile"
 | 
			
		||||
msgstr "Spustí sezení z uloženého souboru"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:210
 | 
			
		||||
#: ../src/core/main.c:205
 | 
			
		||||
msgid "Make X calls synchronous"
 | 
			
		||||
msgstr "Provede volání X synchronně"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:217
 | 
			
		||||
#: ../src/core/main.c:212
 | 
			
		||||
msgid "Run as a wayland compositor"
 | 
			
		||||
msgstr "Spustit jako kompozitor protokolu Wayland"
 | 
			
		||||
msgstr "Spustit jako kompozitní program protokolu Wayland"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:223
 | 
			
		||||
msgid "Run as a nested compositor"
 | 
			
		||||
msgstr "Spustit jako podkladový kompozitor"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:231
 | 
			
		||||
#: ../src/core/main.c:220
 | 
			
		||||
msgid "Run as a full display server, rather than nested"
 | 
			
		||||
msgstr "Spustit jako plnohodnotný server displeje, nikoliv vnořeně"
 | 
			
		||||
 | 
			
		||||
@@ -579,12 +576,12 @@ msgstr "Vypíše verzi"
 | 
			
		||||
msgid "Mutter plugin to use"
 | 
			
		||||
msgstr "Zásuvný modul Mutter, který se má použít"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/prefs.c:1997
 | 
			
		||||
#: ../src/core/prefs.c:2004
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Workspace %d"
 | 
			
		||||
msgstr "Plocha %d"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:521
 | 
			
		||||
#: ../src/core/screen.c:525
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"Display \"%s\" already has a window manager; try using the --replace option "
 | 
			
		||||
@@ -593,12 +590,12 @@ msgstr ""
 | 
			
		||||
"Displej „%s“ již správce oken má; zkuste prosím nahradit aktuálního správce "
 | 
			
		||||
"oken pomocí přepínače --replace."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:603
 | 
			
		||||
#: ../src/core/screen.c:607
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Screen %d on display '%s' is invalid\n"
 | 
			
		||||
msgstr "Obrazovka %d na displeji „%s“ je neplatná\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/util.c:121
 | 
			
		||||
#: ../src/core/util.c:118
 | 
			
		||||
msgid "Mutter was compiled without support for verbose mode\n"
 | 
			
		||||
msgstr "Mutter bylo přeloženo bez podpory podrobného režimu\n"
 | 
			
		||||
 | 
			
		||||
@@ -1275,3 +1272,32 @@ msgstr "%s (na %s)"
 | 
			
		||||
#~ msgid "Move to Another _Workspace"
 | 
			
		||||
#~ msgstr "Přes_unout na jinou plochu"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Shift"
 | 
			
		||||
#~ msgstr "Shift"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Ctrl"
 | 
			
		||||
#~ msgstr "Ctrl"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Alt"
 | 
			
		||||
#~ msgstr "Alt"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Meta"
 | 
			
		||||
#~ msgstr "Meta"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Super"
 | 
			
		||||
#~ msgstr "Super"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Hyper"
 | 
			
		||||
#~ msgstr "Hyper"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Mod2"
 | 
			
		||||
#~ msgstr "Mod2"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Mod3"
 | 
			
		||||
#~ msgstr "Mod3"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Mod4"
 | 
			
		||||
#~ msgstr "Mod4"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Mod5"
 | 
			
		||||
#~ msgstr "Mod5"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										61
									
								
								po/da.po
									
									
									
									
									
								
							
							
						
						
									
										61
									
								
								po/da.po
									
									
									
									
									
								
							@@ -1,5 +1,5 @@
 | 
			
		||||
# Danish translation of Mutter.
 | 
			
		||||
# Copyright (C) 2002-2009, 2012-2016.
 | 
			
		||||
# Copyright (C) 2002-2009, 2012-2015.
 | 
			
		||||
# This file is distributed under the same license as the metacity package.
 | 
			
		||||
# Kjartan Maraas <kmaraas@gnome.org>, 2002
 | 
			
		||||
# Keld simonsen <keld@dkuug.dk>, 2002
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
# Lasse Bang Mikkelsen <lbm@fatalerror.dk>, 2006.
 | 
			
		||||
# Kenneth Nielsen <k.nielsen81@gmail.com>, 2008.
 | 
			
		||||
# Joe Hansen <joedalton2@yahoo.dk>, 2011.
 | 
			
		||||
# Ask Hjorth Larsen <asklarsen@gmail.com>, 2007, 09, 10, 12, 13, 14, 15, 16.
 | 
			
		||||
# Ask Hjorth Larsen <asklarsen@gmail.com>, 2007, 09, 10, 12, 13, 14, 15.
 | 
			
		||||
#
 | 
			
		||||
# Konventioner:
 | 
			
		||||
#
 | 
			
		||||
@@ -20,8 +20,8 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: mutter\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2016-03-20 23:17+0100\n"
 | 
			
		||||
"PO-Revision-Date: 2016-03-20 21:46+0100\n"
 | 
			
		||||
"POT-Creation-Date: 2015-03-21 16:30+0100\n"
 | 
			
		||||
"PO-Revision-Date: 2015-03-14 17:01+0100\n"
 | 
			
		||||
"Last-Translator: Ask Hjorth Larsen <asklarsen@gmail.com>\n"
 | 
			
		||||
"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
 | 
			
		||||
"Language: da\n"
 | 
			
		||||
@@ -291,7 +291,7 @@ msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:3
 | 
			
		||||
msgid "Attach modal dialogs"
 | 
			
		||||
msgstr "Fastgør modaldialoger"
 | 
			
		||||
msgstr "Fastgør modaldialogvinduer"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:4
 | 
			
		||||
msgid ""
 | 
			
		||||
@@ -299,8 +299,9 @@ msgid ""
 | 
			
		||||
"attached to the titlebar of the parent window and are moved together with "
 | 
			
		||||
"the parent window."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Når sand, vil modaldialoger hænge sammen med titellinjen af ophavsvinduet og "
 | 
			
		||||
"flyttes sammen med dette, frem for at have uafhængige titellinjer."
 | 
			
		||||
"Når sand, vil modaldialogvinduer hænge sammen med titellinjen af "
 | 
			
		||||
"ophavsvinduet og flyttes sammen med dette, frem for at have uafhængige "
 | 
			
		||||
"titellinjer."
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:5
 | 
			
		||||
msgid "Enable edge tiling when dropping windows on screen edges"
 | 
			
		||||
@@ -462,22 +463,22 @@ msgstr "Skift til VT 11"
 | 
			
		||||
msgid "Switch to VT 12"
 | 
			
		||||
msgstr "Skift til VT 12"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:518
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:364
 | 
			
		||||
msgid "Built-in display"
 | 
			
		||||
msgstr "Indbygget skærm"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:544
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:391
 | 
			
		||||
msgid "Unknown"
 | 
			
		||||
msgstr "Ukendt"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:546
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:393
 | 
			
		||||
msgid "Unknown Display"
 | 
			
		||||
msgstr "Ukendt skærm"
 | 
			
		||||
 | 
			
		||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
 | 
			
		||||
#. * size in inches, like 'Dell 15"'
 | 
			
		||||
#.
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:554
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:401
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s %s"
 | 
			
		||||
msgstr "%s %s"
 | 
			
		||||
@@ -492,7 +493,7 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"En anden komposithåndtering kører allerede på skærm %i på terminal \"%s\"."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/bell.c:192
 | 
			
		||||
#: ../src/core/bell.c:185
 | 
			
		||||
msgid "Bell event"
 | 
			
		||||
msgstr "Bip-hændelse"
 | 
			
		||||
 | 
			
		||||
@@ -521,44 +522,40 @@ msgstr "_Vent"
 | 
			
		||||
msgid "_Force Quit"
 | 
			
		||||
msgstr "_Tving til at afslutte"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/display.c:555
 | 
			
		||||
#: ../src/core/display.c:562
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Failed to open X Window System display '%s'\n"
 | 
			
		||||
msgstr "Kunne ikke åbne X Window System-terminalen \"%s\"\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:181
 | 
			
		||||
#: ../src/core/main.c:176
 | 
			
		||||
msgid "Disable connection to session manager"
 | 
			
		||||
msgstr "Deaktivér forbindelse til sessionshåndtering"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:187
 | 
			
		||||
#: ../src/core/main.c:182
 | 
			
		||||
msgid "Replace the running window manager"
 | 
			
		||||
msgstr "Erstat den kørende vindueshåndtering"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
#: ../src/core/main.c:188
 | 
			
		||||
msgid "Specify session management ID"
 | 
			
		||||
msgstr "Angiv sessionhåndterings-id"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:198
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
msgid "X Display to use"
 | 
			
		||||
msgstr "X-skærm som bruges"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:204
 | 
			
		||||
#: ../src/core/main.c:199
 | 
			
		||||
msgid "Initialize session from savefile"
 | 
			
		||||
msgstr "Initialisér session fra gemt fil"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:210
 | 
			
		||||
#: ../src/core/main.c:205
 | 
			
		||||
msgid "Make X calls synchronous"
 | 
			
		||||
msgstr "Gør kald til X synkrone"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:217
 | 
			
		||||
#: ../src/core/main.c:212
 | 
			
		||||
msgid "Run as a wayland compositor"
 | 
			
		||||
msgstr "Kør som en wayland-kompositor"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:223
 | 
			
		||||
msgid "Run as a nested compositor"
 | 
			
		||||
msgstr "Kør som en indlejret kompositor"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:231
 | 
			
		||||
#: ../src/core/main.c:220
 | 
			
		||||
msgid "Run as a full display server, rather than nested"
 | 
			
		||||
msgstr "Kør som fuld displayserver, frem for indlejret"
 | 
			
		||||
 | 
			
		||||
@@ -585,12 +582,12 @@ msgstr "Vis version"
 | 
			
		||||
msgid "Mutter plugin to use"
 | 
			
		||||
msgstr "Mutter-udvidelsesmodul der skal bruges"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/prefs.c:1997
 | 
			
		||||
#: ../src/core/prefs.c:2004
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Workspace %d"
 | 
			
		||||
msgstr "Arbejdsområde %d"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:521
 | 
			
		||||
#: ../src/core/screen.c:525
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"Display \"%s\" already has a window manager; try using the --replace option "
 | 
			
		||||
@@ -599,12 +596,12 @@ msgstr ""
 | 
			
		||||
"Terminalen \"%s\" har allerede en vindueshåndtering; prøv tilvalget --"
 | 
			
		||||
"replace for at erstatte den aktuelle vindueshåndtering."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:603
 | 
			
		||||
#: ../src/core/screen.c:607
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Screen %d on display '%s' is invalid\n"
 | 
			
		||||
msgstr "Skærm %d på terminal \"%s\" er ugyldig\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/util.c:121
 | 
			
		||||
#: ../src/core/util.c:118
 | 
			
		||||
msgid "Mutter was compiled without support for verbose mode\n"
 | 
			
		||||
msgstr "Mutter blev kompileret uden understøttelse for uddybende tilstand\n"
 | 
			
		||||
 | 
			
		||||
@@ -1339,6 +1336,9 @@ msgstr "%s (på %s)"
 | 
			
		||||
#~ msgid "_Dialog"
 | 
			
		||||
#~ msgstr "_Dialog"
 | 
			
		||||
 | 
			
		||||
#~ msgid "_Modal dialog"
 | 
			
		||||
#~ msgstr "_Modaldialogvindue"
 | 
			
		||||
 | 
			
		||||
#~ msgid "_Utility"
 | 
			
		||||
#~ msgstr "_Værktøj"
 | 
			
		||||
 | 
			
		||||
@@ -1402,6 +1402,9 @@ msgstr "%s (på %s)"
 | 
			
		||||
#~ msgid "Border"
 | 
			
		||||
#~ msgstr "Ramme"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Attached Modal Dialog"
 | 
			
		||||
#~ msgstr "Fastgjort modaldialogvindue"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Button layout test %d"
 | 
			
		||||
#~ msgstr "Knaplayouttest %d"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										58
									
								
								po/el.po
									
									
									
									
									
								
							
							
						
						
									
										58
									
								
								po/el.po
									
									
									
									
									
								
							@@ -20,16 +20,16 @@ msgstr ""
 | 
			
		||||
"Project-Id-Version: metacity.gnome-2-26\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
 | 
			
		||||
"product=mutter&keywords=I18N+L10N&component=general\n"
 | 
			
		||||
"POT-Creation-Date: 2016-03-12 01:36+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2016-03-14 23:05+0200\n"
 | 
			
		||||
"Last-Translator: Tom Tryfonidis <tomtryf@gmail.com>\n"
 | 
			
		||||
"POT-Creation-Date: 2015-02-21 11:31+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2015-02-21 15:43+0200\n"
 | 
			
		||||
"Last-Translator: Efstathios Iosifidis <iosifidis@opensuse.org>\n"
 | 
			
		||||
"Language-Team: Greek, Modern (1453-) <opensuse-translation-el@opensuse.org>\n"
 | 
			
		||||
"Language: el\n"
 | 
			
		||||
"MIME-Version: 1.0\n"
 | 
			
		||||
"Content-Type: text/plain; charset=UTF-8\n"
 | 
			
		||||
"Content-Transfer-Encoding: 8bit\n"
 | 
			
		||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 | 
			
		||||
"X-Generator: Poedit 1.8.7\n"
 | 
			
		||||
"X-Generator: Gtranslator 2.91.6\n"
 | 
			
		||||
"X-Project-Style: gnome\n"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:1
 | 
			
		||||
@@ -453,41 +453,46 @@ msgid "Switch to VT 7"
 | 
			
		||||
msgstr "Εναλλαγή στο VT 7"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:8
 | 
			
		||||
#| msgid "Switch to VT 1"
 | 
			
		||||
msgid "Switch to VT 8"
 | 
			
		||||
msgstr "Εναλλαγή στο VT 8"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:9
 | 
			
		||||
#| msgid "Switch to VT 1"
 | 
			
		||||
msgid "Switch to VT 9"
 | 
			
		||||
msgstr "Εναλλαγή στο VT 9"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:10
 | 
			
		||||
#| msgid "Switch to VT 1"
 | 
			
		||||
msgid "Switch to VT 10"
 | 
			
		||||
msgstr "Εναλλαγή στο VT 10"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:11
 | 
			
		||||
#| msgid "Switch to VT 1"
 | 
			
		||||
msgid "Switch to VT 11"
 | 
			
		||||
msgstr "Εναλλαγή στο VT 11"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:12
 | 
			
		||||
#| msgid "Switch to VT 1"
 | 
			
		||||
msgid "Switch to VT 12"
 | 
			
		||||
msgstr "Εναλλαγή στο VT 12"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:518
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:364
 | 
			
		||||
msgid "Built-in display"
 | 
			
		||||
msgstr "Ενσωματωμένη οθόνη"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:544
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:391
 | 
			
		||||
msgid "Unknown"
 | 
			
		||||
msgstr "Άγνωστη"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:546
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:393
 | 
			
		||||
msgid "Unknown Display"
 | 
			
		||||
msgstr "Άγνωστη οθόνη"
 | 
			
		||||
 | 
			
		||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
 | 
			
		||||
#. * size in inches, like 'Dell 15"'
 | 
			
		||||
#.
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:554
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:401
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s %s"
 | 
			
		||||
msgstr "%s %s"
 | 
			
		||||
@@ -502,7 +507,7 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Εκτελείται ένας άλλος διαχειριστής παραθύρων στην οθόνη %i προβολή \"%s\"."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/bell.c:192
 | 
			
		||||
#: ../src/core/bell.c:185
 | 
			
		||||
msgid "Bell event"
 | 
			
		||||
msgstr "Ηχητικό συμβάν κουδουνιού"
 | 
			
		||||
 | 
			
		||||
@@ -532,44 +537,40 @@ msgid "_Force Quit"
 | 
			
		||||
msgstr "_Εξαναγκασμός σε τερματισμό"
 | 
			
		||||
 | 
			
		||||
# gconf/gconf-internals.c:2416
 | 
			
		||||
#: ../src/core/display.c:555
 | 
			
		||||
#: ../src/core/display.c:562
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Failed to open X Window System display '%s'\n"
 | 
			
		||||
msgstr "Αποτυχία ανοίγματος οθόνης του συστήματος παραθύρων Χ '%s'\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:181
 | 
			
		||||
#: ../src/core/main.c:176
 | 
			
		||||
msgid "Disable connection to session manager"
 | 
			
		||||
msgstr "Απενεργοποίηση σύνδεσης στο διαχειριστή συνεδρίας"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:187
 | 
			
		||||
#: ../src/core/main.c:182
 | 
			
		||||
msgid "Replace the running window manager"
 | 
			
		||||
msgstr "Αντικατάσταση του τρέχοντος διαχειριστή παραθύρων"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
#: ../src/core/main.c:188
 | 
			
		||||
msgid "Specify session management ID"
 | 
			
		||||
msgstr "Καθορισμός αναγνωριστικού διαχείρισης συνεδρίας"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:198
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
msgid "X Display to use"
 | 
			
		||||
msgstr "Εμφάνιση Χ για χρήση"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:204
 | 
			
		||||
#: ../src/core/main.c:199
 | 
			
		||||
msgid "Initialize session from savefile"
 | 
			
		||||
msgstr "Εκκίνηση συνεδρίας από savefile"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:210
 | 
			
		||||
#: ../src/core/main.c:205
 | 
			
		||||
msgid "Make X calls synchronous"
 | 
			
		||||
msgstr "Να καταστούν σύγχρονες οι κλήσεις του X"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:217
 | 
			
		||||
#: ../src/core/main.c:212
 | 
			
		||||
msgid "Run as a wayland compositor"
 | 
			
		||||
msgstr "Εκτέλεση ως wayland compositor"
 | 
			
		||||
msgstr "Εκτέλεση ως συνθετητής wayland"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:223
 | 
			
		||||
msgid "Run as a nested compositor"
 | 
			
		||||
msgstr "Εκτέλεση ως ενσωματωμένος compositor"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:231
 | 
			
		||||
#: ../src/core/main.c:220
 | 
			
		||||
msgid "Run as a full display server, rather than nested"
 | 
			
		||||
msgstr "Εκτέλεση ως διακομιστής πλήρους οθόνης, αντί ενσωματωμένης"
 | 
			
		||||
 | 
			
		||||
@@ -597,13 +598,16 @@ msgstr "Εμφάνιση έκδοσης"
 | 
			
		||||
msgid "Mutter plugin to use"
 | 
			
		||||
msgstr "Πρόσθετα του Mutter για χρήση"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/prefs.c:1997
 | 
			
		||||
#: ../src/core/prefs.c:2004
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Workspace %d"
 | 
			
		||||
msgstr "Χώρος εργασίας %d"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:521
 | 
			
		||||
#: ../src/core/screen.c:525
 | 
			
		||||
#, c-format
 | 
			
		||||
#| msgid ""
 | 
			
		||||
#| "Screen %d on display \"%s\" already has a window manager; try using the --"
 | 
			
		||||
#| "replace option to replace the current window manager.\n"
 | 
			
		||||
msgid ""
 | 
			
		||||
"Display \"%s\" already has a window manager; try using the --replace option "
 | 
			
		||||
"to replace the current window manager."
 | 
			
		||||
@@ -612,12 +616,12 @@ msgstr ""
 | 
			
		||||
"χρησιμοποιήσετε την επιλογή --replace για να αντικαταστήσετε τον τρέχων "
 | 
			
		||||
"διαχειριστή παραθύρων."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:603
 | 
			
		||||
#: ../src/core/screen.c:607
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Screen %d on display '%s' is invalid\n"
 | 
			
		||||
msgstr "Η οθόνη %d στην προβολή '%s' δεν είναι έγκυρη\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/util.c:121
 | 
			
		||||
#: ../src/core/util.c:118
 | 
			
		||||
msgid "Mutter was compiled without support for verbose mode\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Το Mutter έχει μεταγλωττιστεί χωρίς υποστήριξη για λειτουργία εμφάνισης "
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										50
									
								
								po/es.po
									
									
									
									
									
								
							
							
						
						
									
										50
									
								
								po/es.po
									
									
									
									
									
								
							@@ -7,15 +7,15 @@
 | 
			
		||||
# Pablo Gonzalo del Campo <pablodc@bigfoot.com>,2002,2003.
 | 
			
		||||
# Francisco Javier F. Serrador <serrador@cvs.gnome.org>, 2004, 2005, 2006.
 | 
			
		||||
# Jorge González <jorgegonz@svn.gnome.org>, 2007, 2008, 2009, 2010, 2011.
 | 
			
		||||
# Daniel Mustieles <daniel.mustieles@gmail.com>, 2011, 2012, 2013, 2014, 2015, 2016.
 | 
			
		||||
# Daniel Mustieles <daniel.mustieles@gmail.com>, 2011, 2012, 2013, 2014, 2015.
 | 
			
		||||
#
 | 
			
		||||
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: 2016-02-28 13:37+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2016-02-29 16:02+0100\n"
 | 
			
		||||
"POT-Creation-Date: 2015-02-23 11:10+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2015-02-23 19:07+0100\n"
 | 
			
		||||
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
 | 
			
		||||
"Language-Team: Español; Castellano <gnome-es-list@gnome.org>\n"
 | 
			
		||||
"Language: \n"
 | 
			
		||||
@@ -445,41 +445,46 @@ msgid "Switch to VT 7"
 | 
			
		||||
msgstr "Cambiar al VT 7"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:8
 | 
			
		||||
#| msgid "Switch to VT 1"
 | 
			
		||||
msgid "Switch to VT 8"
 | 
			
		||||
msgstr "Cambiar al VT 8"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:9
 | 
			
		||||
#| msgid "Switch to VT 1"
 | 
			
		||||
msgid "Switch to VT 9"
 | 
			
		||||
msgstr "Cambiar al VT 9"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:10
 | 
			
		||||
#| msgid "Switch to VT 1"
 | 
			
		||||
msgid "Switch to VT 10"
 | 
			
		||||
msgstr "Cambiar al VT 10"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:11
 | 
			
		||||
#| msgid "Switch to VT 1"
 | 
			
		||||
msgid "Switch to VT 11"
 | 
			
		||||
msgstr "Cambiar al VT 11"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:12
 | 
			
		||||
#| msgid "Switch to VT 1"
 | 
			
		||||
msgid "Switch to VT 12"
 | 
			
		||||
msgstr "Cambiar al VT 12"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:518
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:364
 | 
			
		||||
msgid "Built-in display"
 | 
			
		||||
msgstr "Pantalla integrada"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:544
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:391
 | 
			
		||||
msgid "Unknown"
 | 
			
		||||
msgstr "Desconocida"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:546
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:393
 | 
			
		||||
msgid "Unknown Display"
 | 
			
		||||
msgstr "Pantalla desconocida"
 | 
			
		||||
 | 
			
		||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
 | 
			
		||||
#. * size in inches, like 'Dell 15"'
 | 
			
		||||
#.
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:554
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:401
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s %s"
 | 
			
		||||
msgstr "%s %s"
 | 
			
		||||
@@ -524,45 +529,40 @@ msgstr "_Esperar"
 | 
			
		||||
msgid "_Force Quit"
 | 
			
		||||
msgstr "_Forzar la salida"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/display.c:555
 | 
			
		||||
#: ../src/core/display.c:562
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Failed to open X Window System display '%s'\n"
 | 
			
		||||
msgstr "Ocurrió un error al abrir la pantalla de X Window System «%s»\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:181
 | 
			
		||||
#: ../src/core/main.c:176
 | 
			
		||||
msgid "Disable connection to session manager"
 | 
			
		||||
msgstr "Desactivar conexión al gestor de sesión"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:187
 | 
			
		||||
#: ../src/core/main.c:182
 | 
			
		||||
msgid "Replace the running window manager"
 | 
			
		||||
msgstr "Reemplazar el gestor de ventanas en ejecución"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
#: ../src/core/main.c:188
 | 
			
		||||
msgid "Specify session management ID"
 | 
			
		||||
msgstr "Especificar el ID se gestión de sesión"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:198
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
msgid "X Display to use"
 | 
			
		||||
msgstr "Pantalla X que usar"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:204
 | 
			
		||||
#: ../src/core/main.c:199
 | 
			
		||||
msgid "Initialize session from savefile"
 | 
			
		||||
msgstr "Inicializar sesión desde el archivo de salvaguarda"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:210
 | 
			
		||||
#: ../src/core/main.c:205
 | 
			
		||||
msgid "Make X calls synchronous"
 | 
			
		||||
msgstr "Hacer que las llamadas a las X sean síncronas"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:217
 | 
			
		||||
#: ../src/core/main.c:212
 | 
			
		||||
msgid "Run as a wayland compositor"
 | 
			
		||||
msgstr "Ejecutar como compositor Wayland"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:223
 | 
			
		||||
#| msgid "Run as a wayland compositor"
 | 
			
		||||
msgid "Run as a nested compositor"
 | 
			
		||||
msgstr "Ejecutar como compositor anidado"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:231
 | 
			
		||||
#: ../src/core/main.c:220
 | 
			
		||||
msgid "Run as a full display server, rather than nested"
 | 
			
		||||
msgstr "Ejecutar como servidor completo, en lugar de anidado"
 | 
			
		||||
 | 
			
		||||
@@ -589,12 +589,12 @@ msgstr "Imprimir versión"
 | 
			
		||||
msgid "Mutter plugin to use"
 | 
			
		||||
msgstr "Complemento de mutter que usar"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/prefs.c:1997
 | 
			
		||||
#: ../src/core/prefs.c:2004
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Workspace %d"
 | 
			
		||||
msgstr "Área de trabajo %d"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:521
 | 
			
		||||
#: ../src/core/screen.c:525
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"Display \"%s\" already has a window manager; try using the --replace option "
 | 
			
		||||
@@ -603,12 +603,12 @@ msgstr ""
 | 
			
		||||
"La pantalla «%s» ya tiene un gestor de ventanas; pruebe a usar la opción «--"
 | 
			
		||||
"replace» para reemplazar el gestor de ventanas activo."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:603
 | 
			
		||||
#: ../src/core/screen.c:607
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Screen %d on display '%s' is invalid\n"
 | 
			
		||||
msgstr "La ventana %d en la pantalla «%s» no es válida\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/util.c:121
 | 
			
		||||
#: ../src/core/util.c:118
 | 
			
		||||
msgid "Mutter was compiled without support for verbose mode\n"
 | 
			
		||||
msgstr "Mutter fue compilado sin soporte para modo prolijo\n"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										63
									
								
								po/eu.po
									
									
									
									
									
								
							
							
						
						
									
										63
									
								
								po/eu.po
									
									
									
									
									
								
							@@ -2,23 +2,24 @@
 | 
			
		||||
# This file is distributed under the same license as the PACKAGE package.
 | 
			
		||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER.
 | 
			
		||||
#
 | 
			
		||||
#
 | 
			
		||||
# Hizkuntza Politikarako Sailburuordetza <hizpol@ej-gv.es>, 2004.
 | 
			
		||||
# Iñaki Larrañaga Murgoitio <dooteo@zundan.com>, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011.
 | 
			
		||||
# Iñaki Larrañaga Murgoitio <dooteo@zundan.com>, 2012, 2013, 2014, 2015, 2016.
 | 
			
		||||
# Iñaki Larrañaga Murgoitio <dooteo@zundan.com>, 2012, 2013, 2014, 2015.
 | 
			
		||||
#
 | 
			
		||||
msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: mutter master\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2016-03-23 17:05+0100\n"
 | 
			
		||||
"PO-Revision-Date: 2016-03-23 17:06+0100\n"
 | 
			
		||||
"Last-Translator: dooteo <dooteo@zundan.com>\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
 | 
			
		||||
"product=mutter&keywords=I18N+L10N&component=general\n"
 | 
			
		||||
"POT-Creation-Date: 2015-03-21 15:50+0100\n"
 | 
			
		||||
"PO-Revision-Date: 2015-03-21 15:51+0100\n"
 | 
			
		||||
"Last-Translator: Iñaki Larrañaga Murgoitio <dooteo@zundan.com>\n"
 | 
			
		||||
"Language-Team: Basque <librezale@librezale.org>\n"
 | 
			
		||||
"Language: eu\n"
 | 
			
		||||
"MIME-Version: 1.0\n"
 | 
			
		||||
"Content-Type: text/plain; charset=UTF-8\n"
 | 
			
		||||
"Content-Transfer-Encoding: 8bit\n"
 | 
			
		||||
"X-Generator: Lokalize 2.0\n"
 | 
			
		||||
"X-Generator: Lokalize 1.4\n"
 | 
			
		||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:1
 | 
			
		||||
@@ -454,22 +455,22 @@ msgstr "Aldatu 11. TBra"
 | 
			
		||||
msgid "Switch to VT 12"
 | 
			
		||||
msgstr "Aldatu 12. TBra"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:518
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:364
 | 
			
		||||
msgid "Built-in display"
 | 
			
		||||
msgstr "Bertako pantaila"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:544
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:391
 | 
			
		||||
msgid "Unknown"
 | 
			
		||||
msgstr "Ezezaguna"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:546
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:393
 | 
			
		||||
msgid "Unknown Display"
 | 
			
		||||
msgstr "Pantaila ezezaguna"
 | 
			
		||||
 | 
			
		||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
 | 
			
		||||
#. * size in inches, like 'Dell 15"'
 | 
			
		||||
#.
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:554
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:401
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s %s"
 | 
			
		||||
msgstr "%s %s"
 | 
			
		||||
@@ -485,7 +486,7 @@ msgstr ""
 | 
			
		||||
"Dagoeneko beste konposatze-kudeatzailea ari da exekutatzen \"%2$s\" "
 | 
			
		||||
"pantailako %1$i. monitorean \"."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/bell.c:194
 | 
			
		||||
#: ../src/core/bell.c:185
 | 
			
		||||
msgid "Bell event"
 | 
			
		||||
msgstr "Soinuaren gertaera"
 | 
			
		||||
 | 
			
		||||
@@ -514,44 +515,40 @@ msgstr "_Itxaron"
 | 
			
		||||
msgid "_Force Quit"
 | 
			
		||||
msgstr "_Behartu ixtera"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/display.c:555
 | 
			
		||||
#: ../src/core/display.c:562
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Failed to open X Window System display '%s'\n"
 | 
			
		||||
msgstr "Huts egin du X Window sistemaren '%s' pantaila irekitzean\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:181
 | 
			
		||||
#: ../src/core/main.c:176
 | 
			
		||||
msgid "Disable connection to session manager"
 | 
			
		||||
msgstr "Desgaitu saio-kudeatzailearen konexioa"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:187
 | 
			
		||||
#: ../src/core/main.c:182
 | 
			
		||||
msgid "Replace the running window manager"
 | 
			
		||||
msgstr "Ordeztu exekutatzen dagoen leiho-kudeatzailea"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
#: ../src/core/main.c:188
 | 
			
		||||
msgid "Specify session management ID"
 | 
			
		||||
msgstr "Zehaztu saio-kudeatzailearen IDa"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:198
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
msgid "X Display to use"
 | 
			
		||||
msgstr "X pantaila erabiltzeko"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:204
 | 
			
		||||
#: ../src/core/main.c:199
 | 
			
		||||
msgid "Initialize session from savefile"
 | 
			
		||||
msgstr "Hasieratu saioa babes-fitxategitik"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:210
 | 
			
		||||
#: ../src/core/main.c:205
 | 
			
		||||
msgid "Make X calls synchronous"
 | 
			
		||||
msgstr "Egin X deiak sinkronoak izatea"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:217
 | 
			
		||||
#: ../src/core/main.c:212
 | 
			
		||||
msgid "Run as a wayland compositor"
 | 
			
		||||
msgstr "Exekutatu wayland konposatzaile gisa"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:223
 | 
			
		||||
msgid "Run as a nested compositor"
 | 
			
		||||
msgstr "Exekutatu habiaratutako konposatzaile gisa"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:231
 | 
			
		||||
#: ../src/core/main.c:220
 | 
			
		||||
msgid "Run as a full display server, rather than nested"
 | 
			
		||||
msgstr "Exekutatu pantaila-zerbitzari oso bezala, habiaratuta baino"
 | 
			
		||||
 | 
			
		||||
@@ -578,12 +575,12 @@ msgstr "Erakutsi bertsioa"
 | 
			
		||||
msgid "Mutter plugin to use"
 | 
			
		||||
msgstr "Mutter-en osagaia erabiltzeko"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/prefs.c:1997
 | 
			
		||||
#: ../src/core/prefs.c:2004
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Workspace %d"
 | 
			
		||||
msgstr "%d. laneko area"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:521
 | 
			
		||||
#: ../src/core/screen.c:525
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"Display \"%s\" already has a window manager; try using the --replace option "
 | 
			
		||||
@@ -592,12 +589,12 @@ msgstr ""
 | 
			
		||||
"'%s' pantailak badu leiho-kudeatzailea; erabili --replace aukera uneko leiho-"
 | 
			
		||||
"kudeatzailea ordezteko."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:603
 | 
			
		||||
#: ../src/core/screen.c:607
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Screen %d on display '%s' is invalid\n"
 | 
			
		||||
msgstr "'%2$s' bistaratzeko %1$d pantaila ez da baliozkoa\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/util.c:121
 | 
			
		||||
#: ../src/core/util.c:118
 | 
			
		||||
msgid "Mutter was compiled without support for verbose mode\n"
 | 
			
		||||
msgstr "Mutter modu xehatuaren euskarririk gabe konpilatu da\n"
 | 
			
		||||
 | 
			
		||||
@@ -679,11 +676,11 @@ msgstr "%s (%s)"
 | 
			
		||||
#~ "\" ez dator bat formatuarekin"
 | 
			
		||||
 | 
			
		||||
#~ msgid ""
 | 
			
		||||
#~ "GTK color specification must have the state in brackets, e.g. gtk:"
 | 
			
		||||
#~ "fg[NORMAL] where NORMAL is the state; could not parse \"%s\""
 | 
			
		||||
#~ "GTK color specification must have the state in brackets, e.g. gtk:fg"
 | 
			
		||||
#~ "[NORMAL] where NORMAL is the state; could not parse \"%s\""
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
#~ "GTK kolore-zehaztapenak egoera kortxete artean izan behar du, adib. gtk:"
 | 
			
		||||
#~ "fg[NORMAL], NORMAL egoera izanik; \"%s\" ezin da analizatu"
 | 
			
		||||
#~ "GTK kolore-zehaztapenak egoera kortxete artean izan behar du, adib. gtk:fg"
 | 
			
		||||
#~ "[NORMAL], NORMAL egoera izanik; \"%s\" ezin da analizatu"
 | 
			
		||||
 | 
			
		||||
#~ msgid ""
 | 
			
		||||
#~ "GTK color specification must have a close bracket after the state, e.g. "
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										46
									
								
								po/fr.po
									
									
									
									
									
								
							
							
						
						
									
										46
									
								
								po/fr.po
									
									
									
									
									
								
							@@ -1,5 +1,5 @@
 | 
			
		||||
# French translation of mutter.
 | 
			
		||||
# Copyright (C) 2002-2016 Free Software Foundation, Inc.
 | 
			
		||||
# Copyright (C) 2002-2015 Free Software Foundation, Inc.
 | 
			
		||||
# This file is distributed under the same license as the metacity package.
 | 
			
		||||
#
 | 
			
		||||
# Christophe Fergeau <teuf@users.sourceforge.net>, 2002.
 | 
			
		||||
@@ -11,7 +11,7 @@
 | 
			
		||||
# Cyprien Le Pannérer <cyplp@free.fr>, 2006.
 | 
			
		||||
# Robert-André Mauchin <zebob.m@gmail.com>, 2007. 
 | 
			
		||||
# Stéphane Raimbault <stephane.raimbault@gmail.com>, 2007.
 | 
			
		||||
# Claude Paroz <claude@2xlibre.net>, 2008-2016.
 | 
			
		||||
# Claude Paroz <claude@2xlibre.net>, 2008-2015.
 | 
			
		||||
# Bruno Brouard <annoa.b@gmail.com>, 2011-12.
 | 
			
		||||
#
 | 
			
		||||
msgid ""
 | 
			
		||||
@@ -19,8 +19,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: 2016-03-05 13:41+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2016-03-05 17:57+0100\n"
 | 
			
		||||
"POT-Creation-Date: 2015-02-23 23:11+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2015-02-24 10:08+0100\n"
 | 
			
		||||
"Last-Translator: Claude Paroz <claude@2xlibre.net>\n"
 | 
			
		||||
"Language-Team: GNOME French Team <gnomefr@traduc.org>\n"
 | 
			
		||||
"Language: fr\n"
 | 
			
		||||
@@ -468,22 +468,22 @@ msgstr "Passer à l'émulateur de terminal 11"
 | 
			
		||||
msgid "Switch to VT 12"
 | 
			
		||||
msgstr "Passer à l'émulateur de terminal 12"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:518
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:364
 | 
			
		||||
msgid "Built-in display"
 | 
			
		||||
msgstr "Affichage intégré"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:544
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:391
 | 
			
		||||
msgid "Unknown"
 | 
			
		||||
msgstr "Inconnu"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:546
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:393
 | 
			
		||||
msgid "Unknown Display"
 | 
			
		||||
msgstr "Affichage inconnu"
 | 
			
		||||
 | 
			
		||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
 | 
			
		||||
#. * size in inches, like 'Dell 15"'
 | 
			
		||||
#.
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:554
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:401
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s %s"
 | 
			
		||||
msgstr "%s %s"
 | 
			
		||||
@@ -528,44 +528,40 @@ msgstr "_Attendre"
 | 
			
		||||
msgid "_Force Quit"
 | 
			
		||||
msgstr "_Forcer à quitter"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/display.c:555
 | 
			
		||||
#: ../src/core/display.c:562
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Failed to open X Window System display '%s'\n"
 | 
			
		||||
msgstr "Impossible d'ouvrir l'affichage « %s » du système X Window\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:181
 | 
			
		||||
#: ../src/core/main.c:176
 | 
			
		||||
msgid "Disable connection to session manager"
 | 
			
		||||
msgstr "Désactiver la connexion au gestionnaire de sessions"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:187
 | 
			
		||||
#: ../src/core/main.c:182
 | 
			
		||||
msgid "Replace the running window manager"
 | 
			
		||||
msgstr "Remplacer le gestionnaire de fenêtres en cours de fonctionnement"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
#: ../src/core/main.c:188
 | 
			
		||||
msgid "Specify session management ID"
 | 
			
		||||
msgstr "Indiquer l'ID de gestion de sessions"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:198
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
msgid "X Display to use"
 | 
			
		||||
msgstr "Affichage X à utiliser"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:204
 | 
			
		||||
#: ../src/core/main.c:199
 | 
			
		||||
msgid "Initialize session from savefile"
 | 
			
		||||
msgstr "Initialiser la session depuis le fichier de sauvegarde"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:210
 | 
			
		||||
#: ../src/core/main.c:205
 | 
			
		||||
msgid "Make X calls synchronous"
 | 
			
		||||
msgstr "Rendre synchrones les appels à X"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:217
 | 
			
		||||
#: ../src/core/main.c:212
 | 
			
		||||
msgid "Run as a wayland compositor"
 | 
			
		||||
msgstr "Lancer comme un compositeur wayland"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:223
 | 
			
		||||
msgid "Run as a nested compositor"
 | 
			
		||||
msgstr "Lancer comme un compositeur imbriqué"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:231
 | 
			
		||||
#: ../src/core/main.c:220
 | 
			
		||||
msgid "Run as a full display server, rather than nested"
 | 
			
		||||
msgstr "Lancer comme un serveur d'affichage complet, plutôt qu'imbriqué"
 | 
			
		||||
 | 
			
		||||
@@ -593,12 +589,12 @@ msgstr "Afficher la version"
 | 
			
		||||
msgid "Mutter plugin to use"
 | 
			
		||||
msgstr "Greffon de Mutter à utiliser"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/prefs.c:1997
 | 
			
		||||
#: ../src/core/prefs.c:2004
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Workspace %d"
 | 
			
		||||
msgstr "Espace de travail %d"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:521
 | 
			
		||||
#: ../src/core/screen.c:525
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"Display \"%s\" already has a window manager; try using the --replace option "
 | 
			
		||||
@@ -607,12 +603,12 @@ msgstr ""
 | 
			
		||||
"L'affichage « %s » a déjà un gestionnaire de fenêtres ; essayez d'utiliser "
 | 
			
		||||
"l'option --replace pour remplacer le gestionnaire de fenêtres actuel."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:603
 | 
			
		||||
#: ../src/core/screen.c:607
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Screen %d on display '%s' is invalid\n"
 | 
			
		||||
msgstr "L'écran %d sur l'affichage « %s » n'est pas valide\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/util.c:121
 | 
			
		||||
#: ../src/core/util.c:118
 | 
			
		||||
msgid "Mutter was compiled without support for verbose mode\n"
 | 
			
		||||
msgstr "Mutter a été compilé sans la prise en charge du mode bavard\n"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										583
									
								
								po/fur.po
									
									
									
									
									
								
							
							
						
						
									
										583
									
								
								po/fur.po
									
									
									
									
									
								
							@@ -1,583 +0,0 @@
 | 
			
		||||
# Friulian translation for mutter.
 | 
			
		||||
# Copyright (C) 2016 mutter's COPYRIGHT HOLDER
 | 
			
		||||
# This file is distributed under the same license as the mutter package.
 | 
			
		||||
# Fabio Tomat <f.t.public@gmail.com>, 2016.
 | 
			
		||||
#
 | 
			
		||||
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: 2016-03-25 01:58+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2016-03-25 17:54+0100\n"
 | 
			
		||||
"Language-Team: Friulian <fur@li.org>\n"
 | 
			
		||||
"Language: fur\n"
 | 
			
		||||
"MIME-Version: 1.0\n"
 | 
			
		||||
"Content-Type: text/plain; charset=UTF-8\n"
 | 
			
		||||
"Content-Transfer-Encoding: 8bit\n"
 | 
			
		||||
"Last-Translator: Fabio Tomat <f.t.public@gmail.com>\n"
 | 
			
		||||
"X-Generator: Poedit 1.8.5\n"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:1
 | 
			
		||||
msgid "Navigation"
 | 
			
		||||
msgstr "Navigazion"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:2
 | 
			
		||||
msgid "Move window to workspace 1"
 | 
			
		||||
msgstr "Sposte barcon tal spazi di lavôr 1"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:3
 | 
			
		||||
msgid "Move window to workspace 2"
 | 
			
		||||
msgstr "Sposte barcon tal spazi di lavôr 2"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:4
 | 
			
		||||
msgid "Move window to workspace 3"
 | 
			
		||||
msgstr "Sposte barcon tal spazi di lavôr 3"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:5
 | 
			
		||||
msgid "Move window to workspace 4"
 | 
			
		||||
msgstr "Sposte barcon tal spazi di lavôr 4"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:6
 | 
			
		||||
msgid "Move window to last workspace"
 | 
			
		||||
msgstr "Sposte barcon tal ultin spazi di lavôr"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:7
 | 
			
		||||
msgid "Move window one workspace to the left"
 | 
			
		||||
msgstr "Sposte barcon tal spazi di lavôr a çampe"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:8
 | 
			
		||||
msgid "Move window one workspace to the right"
 | 
			
		||||
msgstr "Sposte barcon tal spazi di lavôr a drete"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:9
 | 
			
		||||
msgid "Move window one workspace up"
 | 
			
		||||
msgstr "Sposte barcon tal spazi di lavôr parsore"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:10
 | 
			
		||||
msgid "Move window one workspace down"
 | 
			
		||||
msgstr "Sposte barcon tal spazi di lavôr sot"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:11
 | 
			
		||||
msgid "Move window one monitor to the left"
 | 
			
		||||
msgstr "Sposte barcon tal visôr a çampe"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:12
 | 
			
		||||
msgid "Move window one monitor to the right"
 | 
			
		||||
msgstr "Sposte barcon tal visôr a drete"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:13
 | 
			
		||||
msgid "Move window one monitor up"
 | 
			
		||||
msgstr "Sposte barcon tal visôr parsore"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:14
 | 
			
		||||
msgid "Move window one monitor down"
 | 
			
		||||
msgstr "Sposte barcon tal visôr sot"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:15
 | 
			
		||||
msgid "Switch applications"
 | 
			
		||||
msgstr "Passâ di une aplicazion in chê altre"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:16
 | 
			
		||||
msgid "Switch to previous application"
 | 
			
		||||
msgstr "Passe ae aplicazion prime"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:17
 | 
			
		||||
msgid "Switch windows"
 | 
			
		||||
msgstr "Passâ di un barcon in chel altri"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:18
 | 
			
		||||
msgid "Switch to previous window"
 | 
			
		||||
msgstr "Passe al barcon prime"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:19
 | 
			
		||||
msgid "Switch windows of an application"
 | 
			
		||||
msgstr "Passâ di un barcon in chel altri di une aplicazion"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:20
 | 
			
		||||
msgid "Switch to previous window of an application"
 | 
			
		||||
msgstr "Passe al barcon prime di une aplicazion"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:21
 | 
			
		||||
msgid "Switch system controls"
 | 
			
		||||
msgstr "Passâ di un control di sisteme in chel altri"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:22
 | 
			
		||||
msgid "Switch to previous system control"
 | 
			
		||||
msgstr "Passe al control di sisteme precedent"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:23
 | 
			
		||||
msgid "Switch windows directly"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:24
 | 
			
		||||
msgid "Switch directly to previous window"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:25
 | 
			
		||||
msgid "Switch windows of an app directly"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:26
 | 
			
		||||
msgid "Switch directly to previous window of an app"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:27
 | 
			
		||||
msgid "Switch system controls directly"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:28
 | 
			
		||||
msgid "Switch directly to previous system control"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:29
 | 
			
		||||
msgid "Hide all normal windows"
 | 
			
		||||
msgstr "Plate ducj i barcons normâi"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:30
 | 
			
		||||
msgid "Switch to workspace 1"
 | 
			
		||||
msgstr "Passe al spazi di lavôr 1"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:31
 | 
			
		||||
msgid "Switch to workspace 2"
 | 
			
		||||
msgstr "Passe al spazi di lavôr 2"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:32
 | 
			
		||||
msgid "Switch to workspace 3"
 | 
			
		||||
msgstr "Passe al spazi di lavôr 3"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:33
 | 
			
		||||
msgid "Switch to workspace 4"
 | 
			
		||||
msgstr "Passe al spazi di lavôr 4"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:34
 | 
			
		||||
msgid "Switch to last workspace"
 | 
			
		||||
msgstr "Passe al ultin spazi di lavôr"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:35
 | 
			
		||||
msgid "Move to workspace left"
 | 
			
		||||
msgstr "Sposte il spazi di lavôr a çampe"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:36
 | 
			
		||||
msgid "Move to workspace right"
 | 
			
		||||
msgstr "Sposte il spazi di lavôr a drete"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:37
 | 
			
		||||
msgid "Move to workspace above"
 | 
			
		||||
msgstr "Sposte il spazi di lavôr parsore"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:38
 | 
			
		||||
msgid "Move to workspace below"
 | 
			
		||||
msgstr "Sposte il spazi di lavôr sot"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-system.xml.in.h:1
 | 
			
		||||
msgid "System"
 | 
			
		||||
msgstr "Sisteme"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-system.xml.in.h:2
 | 
			
		||||
msgid "Show the run command prompt"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-system.xml.in.h:3
 | 
			
		||||
msgid "Show the activities overview"
 | 
			
		||||
msgstr "Mostre la panoramiche ativitâts"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:1
 | 
			
		||||
msgid "Windows"
 | 
			
		||||
msgstr "Barcons"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:2
 | 
			
		||||
msgid "Activate the window menu"
 | 
			
		||||
msgstr "Ative il menù dal barcon"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:3
 | 
			
		||||
msgid "Toggle fullscreen mode"
 | 
			
		||||
msgstr "Ative/Disative modalitât plen visôr"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:4
 | 
			
		||||
msgid "Toggle maximization state"
 | 
			
		||||
msgstr "Ative/Disative il stât slargjât"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:5
 | 
			
		||||
msgid "Maximize window"
 | 
			
		||||
msgstr "Slargje il barcon"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:6
 | 
			
		||||
msgid "Restore window"
 | 
			
		||||
msgstr "Ripristine barcon"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:7
 | 
			
		||||
msgid "Toggle shaded state"
 | 
			
		||||
msgstr "Ative/Disative stât inrodolât"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:8
 | 
			
		||||
msgid "Close window"
 | 
			
		||||
msgstr "Siere il barcon"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:9
 | 
			
		||||
msgid "Hide window"
 | 
			
		||||
msgstr "Plate il barcon"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:10
 | 
			
		||||
msgid "Move window"
 | 
			
		||||
msgstr "Sposte il barcon"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:11
 | 
			
		||||
msgid "Resize window"
 | 
			
		||||
msgstr "Ridimensione barcon"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:12
 | 
			
		||||
msgid "Toggle window on all workspaces or one"
 | 
			
		||||
msgstr "Ative/Disative barcon su ducj i spazis di lavôr o nome un"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:13
 | 
			
		||||
msgid "Raise window if covered, otherwise lower it"
 | 
			
		||||
msgstr "Tire sù il barcon se al è cuviert, se no sbassilu"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:14
 | 
			
		||||
msgid "Raise window above other windows"
 | 
			
		||||
msgstr "Met il barcon parsore di chei altris"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:15
 | 
			
		||||
msgid "Lower window below other windows"
 | 
			
		||||
msgstr "Bute il barcon sot di chei altris"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:16
 | 
			
		||||
msgid "Maximize window vertically"
 | 
			
		||||
msgstr "Slargje il barcon par verticâl"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:17
 | 
			
		||||
msgid "Maximize window horizontally"
 | 
			
		||||
msgstr "Slargje il barcon par orizontâl"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:18
 | 
			
		||||
msgid "View split on left"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:19
 | 
			
		||||
msgid "View split on right"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/mutter.desktop.in.h:1
 | 
			
		||||
msgid "Mutter"
 | 
			
		||||
msgstr "Mutter"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:1
 | 
			
		||||
msgid "Modifier to use for extended window management operations"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:2
 | 
			
		||||
msgid ""
 | 
			
		||||
"This key will initiate the \"overlay\", which is a combination window "
 | 
			
		||||
"overview and application launching system. The default is intended to be the "
 | 
			
		||||
"\"Windows key\" on PC hardware. It's expected that this binding either the "
 | 
			
		||||
"default or set to the empty string."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:3
 | 
			
		||||
msgid "Attach modal dialogs"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:4
 | 
			
		||||
msgid ""
 | 
			
		||||
"When true, instead of having independent titlebars, modal dialogs appear "
 | 
			
		||||
"attached to the titlebar of the parent window and are moved together with "
 | 
			
		||||
"the parent window."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:5
 | 
			
		||||
msgid "Enable edge tiling when dropping windows on screen edges"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:6
 | 
			
		||||
msgid ""
 | 
			
		||||
"If enabled, dropping windows on vertical screen edges maximizes them "
 | 
			
		||||
"vertically and resizes them horizontally to cover half of the available "
 | 
			
		||||
"area. Dropping windows on the top screen edge maximizes them completely."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:7
 | 
			
		||||
msgid "Workspaces are managed dynamically"
 | 
			
		||||
msgstr "I spazis di vore a son ministrât in maniere dinamiche"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:8
 | 
			
		||||
msgid ""
 | 
			
		||||
"Determines whether workspaces are managed dynamically or whether there's a "
 | 
			
		||||
"static number of workspaces (determined by the num-workspaces key in org."
 | 
			
		||||
"gnome.desktop.wm.preferences)."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:9
 | 
			
		||||
msgid "Workspaces only on primary"
 | 
			
		||||
msgstr "Spazis di vore nome tal visôr primari"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:10
 | 
			
		||||
msgid ""
 | 
			
		||||
"Determines whether workspace switching should happen for windows on all "
 | 
			
		||||
"monitors or only for windows on the primary monitor."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:11
 | 
			
		||||
msgid "No tab popup"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:12
 | 
			
		||||
msgid ""
 | 
			
		||||
"Determines whether the use of popup and highlight frame should be disabled "
 | 
			
		||||
"for window cycling."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:13
 | 
			
		||||
msgid "Delay focus changes until the pointer stops moving"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:14
 | 
			
		||||
msgid ""
 | 
			
		||||
"If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
 | 
			
		||||
"the focus will not be changed immediately when entering a window, but only "
 | 
			
		||||
"after the pointer stops moving."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:15
 | 
			
		||||
msgid "Draggable border width"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:16
 | 
			
		||||
msgid ""
 | 
			
		||||
"The amount of total draggable borders. If the theme's visible borders are "
 | 
			
		||||
"not enough, invisible borders will be added to meet this value."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:17
 | 
			
		||||
msgid "Auto maximize nearly monitor sized windows"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:18
 | 
			
		||||
msgid ""
 | 
			
		||||
"If enabled, new windows that are initially the size of the monitor "
 | 
			
		||||
"automatically get maximized."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:19
 | 
			
		||||
msgid "Place new windows in the center"
 | 
			
		||||
msgstr "Place i gnûfs barcons tal mieç"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:20
 | 
			
		||||
msgid ""
 | 
			
		||||
"When true, the new windows will always be put in the center of the active "
 | 
			
		||||
"screen of the monitor."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:21
 | 
			
		||||
msgid "Select window from tab popup"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:22
 | 
			
		||||
msgid "Cancel tab popup"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:1
 | 
			
		||||
msgid "Switch to VT 1"
 | 
			
		||||
msgstr "Passe al VT 1"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:2
 | 
			
		||||
msgid "Switch to VT 2"
 | 
			
		||||
msgstr "Passe al VT 2"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:3
 | 
			
		||||
msgid "Switch to VT 3"
 | 
			
		||||
msgstr "Passe al VT 3"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:4
 | 
			
		||||
msgid "Switch to VT 4"
 | 
			
		||||
msgstr "Passe al VT 4"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:5
 | 
			
		||||
msgid "Switch to VT 5"
 | 
			
		||||
msgstr "Passe al VT 5"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:6
 | 
			
		||||
msgid "Switch to VT 6"
 | 
			
		||||
msgstr "Passe al VT 6"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:7
 | 
			
		||||
msgid "Switch to VT 7"
 | 
			
		||||
msgstr "Passe al VT 7"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:8
 | 
			
		||||
msgid "Switch to VT 8"
 | 
			
		||||
msgstr "Passe al VT 8"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:9
 | 
			
		||||
msgid "Switch to VT 9"
 | 
			
		||||
msgstr "Passe al VT 9"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:10
 | 
			
		||||
msgid "Switch to VT 10"
 | 
			
		||||
msgstr "Passe al VT 10"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:11
 | 
			
		||||
msgid "Switch to VT 11"
 | 
			
		||||
msgstr "Passe al VT 11"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:12
 | 
			
		||||
msgid "Switch to VT 12"
 | 
			
		||||
msgstr "Passe al VT 12"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:518
 | 
			
		||||
msgid "Built-in display"
 | 
			
		||||
msgstr "Display integrât"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:544
 | 
			
		||||
msgid "Unknown"
 | 
			
		||||
msgstr "No cognossût"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:546
 | 
			
		||||
msgid "Unknown Display"
 | 
			
		||||
msgstr "Display no cognossût"
 | 
			
		||||
 | 
			
		||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
 | 
			
		||||
#. * size in inches, like 'Dell 15"'
 | 
			
		||||
#.
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:554
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s %s"
 | 
			
		||||
msgstr "%s %s"
 | 
			
		||||
 | 
			
		||||
#. This probably means that a non-WM compositor like xcompmgr is running;
 | 
			
		||||
#. * we have no way to get it to exit
 | 
			
		||||
#: ../src/compositor/compositor.c:456
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"Another compositing manager is already running on screen %i on display \"%s"
 | 
			
		||||
"\"."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Un altri compositing manager al è za in esecuzion sul schermi %i sul display "
 | 
			
		||||
"\"%s\"."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/bell.c:194
 | 
			
		||||
msgid "Bell event"
 | 
			
		||||
msgstr "Event cjampane"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/delete.c:127
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "“%s” is not responding."
 | 
			
		||||
msgstr "“%s” nol rispuint."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/delete.c:129
 | 
			
		||||
msgid "Application is not responding."
 | 
			
		||||
msgstr "La aplicazion no rispuint."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/delete.c:134
 | 
			
		||||
msgid ""
 | 
			
		||||
"You may choose to wait a short while for it to continue or force the "
 | 
			
		||||
"application to quit entirely."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../src/core/delete.c:141
 | 
			
		||||
msgid "_Wait"
 | 
			
		||||
msgstr "_Spiete"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/delete.c:141
 | 
			
		||||
msgid "_Force Quit"
 | 
			
		||||
msgstr "Sfuarce _Jessude"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/display.c:555
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Failed to open X Window System display '%s'\n"
 | 
			
		||||
msgstr "Impussibil vierzi il display '%s' di X Window System\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:181
 | 
			
		||||
msgid "Disable connection to session manager"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:187
 | 
			
		||||
msgid "Replace the running window manager"
 | 
			
		||||
msgstr "Rimplace il window manager in vore"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
msgid "Specify session management ID"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:198
 | 
			
		||||
msgid "X Display to use"
 | 
			
		||||
msgstr "Display X di doprâ"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:204
 | 
			
		||||
msgid "Initialize session from savefile"
 | 
			
		||||
msgstr "Inizialize session da file salvât"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:210
 | 
			
		||||
msgid "Make X calls synchronous"
 | 
			
		||||
msgstr "Fâs lis clamadis X sincronis"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:217
 | 
			
		||||
msgid "Run as a wayland compositor"
 | 
			
		||||
msgstr "Eseguìs come compositor wayland"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:223
 | 
			
		||||
msgid "Run as a nested compositor"
 | 
			
		||||
msgstr "Eseguìs come compositor nidiât"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:231
 | 
			
		||||
msgid "Run as a full display server, rather than nested"
 | 
			
		||||
msgstr "Eseguìs come servidôr display complet, invezit che nidiât"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/mutter.c:39
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"mutter %s\n"
 | 
			
		||||
"Copyright (C) 2001-%d Havoc Pennington, Red Hat, Inc., and others\n"
 | 
			
		||||
"This is free software; see the source for copying conditions.\n"
 | 
			
		||||
"There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A "
 | 
			
		||||
"PARTICULAR PURPOSE.\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"mutter %s\n"
 | 
			
		||||
"Copyright (C) 2001-%d Havoc Pennington, Red Hat, Inc., e altris\n"
 | 
			
		||||
"Chest al è software libar; viodi i sorzints pes condizions di copie.\n"
 | 
			
		||||
"No je NISSUNE garanzie; nancje di COMERCIABILITÂT o IDONEITÂT A UNE "
 | 
			
		||||
"FINALITÂT PARTICOLÂR.\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/mutter.c:53
 | 
			
		||||
msgid "Print version"
 | 
			
		||||
msgstr "Stampe version"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/mutter.c:59
 | 
			
		||||
msgid "Mutter plugin to use"
 | 
			
		||||
msgstr "Plugin Mutter di doprâ"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/prefs.c:1997
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Workspace %d"
 | 
			
		||||
msgstr "Spazi di lavôr %d"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:521
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"Display \"%s\" already has a window manager; try using the --replace option "
 | 
			
		||||
"to replace the current window manager."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Il display \"%s\" al à za un window manager; prove dopre la opzion --replace "
 | 
			
		||||
"par rimplaçâ chel atuâl."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:603
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Screen %d on display '%s' is invalid\n"
 | 
			
		||||
msgstr "Schermi %d su display '%s' no valit\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/util.c:121
 | 
			
		||||
msgid "Mutter was compiled without support for verbose mode\n"
 | 
			
		||||
msgstr "Mutter al è stât compilât cence supuart pe modalitât fetose\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/x11/session.c:1815
 | 
			
		||||
msgid ""
 | 
			
		||||
"These windows do not support "save current setup" and will have to "
 | 
			
		||||
"be restarted manually next time you log in."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Chescj barcons no supuartin la funzion "salve impostazions atuâi" "
 | 
			
		||||
"e si scugnarà tornâ a inviâlis a man tal prossim acès."
 | 
			
		||||
 | 
			
		||||
#: ../src/x11/window-props.c:549
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s (on %s)"
 | 
			
		||||
msgstr "%s (su %s)"
 | 
			
		||||
							
								
								
									
										49
									
								
								po/gl.po
									
									
									
									
									
								
							
							
						
						
									
										49
									
								
								po/gl.po
									
									
									
									
									
								
							@@ -9,21 +9,22 @@
 | 
			
		||||
# Mancomún - Centro de Referencia e Servizos de Software Libre <g11n@mancomun.org>, 2009.
 | 
			
		||||
# Fran Diéguez <frandieguez@gnome.org>, 2009, 2010, 2011, 2012.
 | 
			
		||||
# Leandro Regueiro <leandro.regueiro@gmail.com>, 2012.
 | 
			
		||||
# Fran Dieguez <frandieguez@gnome.org>, 2012, 2013, 2014, 2015, 2016.
 | 
			
		||||
# Fran Dieguez <frandieguez@gnome.org>, 2012, 2013, 2014, 2015.
 | 
			
		||||
#
 | 
			
		||||
msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: gl\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2016-03-02 09:49+0100\n"
 | 
			
		||||
"PO-Revision-Date: 2016-03-02 09:49+0200\n"
 | 
			
		||||
"POT-Creation-Date: 2015-02-28 22:43+0100\n"
 | 
			
		||||
"PO-Revision-Date: 2015-02-28 22:42+0100\n"
 | 
			
		||||
"Last-Translator: Fran Dieguez <frandieguez@gnome.org>\n"
 | 
			
		||||
"Language-Team: gnome-l10n-gl@gnome.org\n"
 | 
			
		||||
"Language-Team: Galician <>\n"
 | 
			
		||||
"Language: gl\n"
 | 
			
		||||
"MIME-Version: 1.0\n"
 | 
			
		||||
"Content-Type: text/plain; charset=UTF-8\n"
 | 
			
		||||
"Content-Transfer-Encoding: 8bit\n"
 | 
			
		||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 | 
			
		||||
"X-Generator: Virtaal 0.7.1\n"
 | 
			
		||||
"X-Generator: Gtranslator 2.91.6\n"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:1
 | 
			
		||||
msgid "Navigation"
 | 
			
		||||
@@ -460,22 +461,22 @@ msgstr "Cambiar á VT 11"
 | 
			
		||||
msgid "Switch to VT 12"
 | 
			
		||||
msgstr "Cambiar á VT 12"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:518
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:364
 | 
			
		||||
msgid "Built-in display"
 | 
			
		||||
msgstr "Pantalla embebida"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:544
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:391
 | 
			
		||||
msgid "Unknown"
 | 
			
		||||
msgstr "Descoñecido"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:546
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:393
 | 
			
		||||
msgid "Unknown Display"
 | 
			
		||||
msgstr "Pantalla descoñecida"
 | 
			
		||||
 | 
			
		||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
 | 
			
		||||
#. * size in inches, like 'Dell 15"'
 | 
			
		||||
#.
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:554
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:401
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s %s"
 | 
			
		||||
msgstr "%s %s"
 | 
			
		||||
@@ -520,44 +521,40 @@ msgstr "Espe_rar"
 | 
			
		||||
msgid "_Force Quit"
 | 
			
		||||
msgstr "_Forzar a saída"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/display.c:555
 | 
			
		||||
#: ../src/core/display.c:562
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Failed to open X Window System display '%s'\n"
 | 
			
		||||
msgstr "Produciuse un erro ao abrir a visualización do X Window System «%s»\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:181
 | 
			
		||||
#: ../src/core/main.c:176
 | 
			
		||||
msgid "Disable connection to session manager"
 | 
			
		||||
msgstr "Desactivar a conexión ao xestor de sesión"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:187
 | 
			
		||||
#: ../src/core/main.c:182
 | 
			
		||||
msgid "Replace the running window manager"
 | 
			
		||||
msgstr "Substituír o xestor de xanelas en execución"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
#: ../src/core/main.c:188
 | 
			
		||||
msgid "Specify session management ID"
 | 
			
		||||
msgstr "Especificar o ID de xestión de sesión"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:198
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
msgid "X Display to use"
 | 
			
		||||
msgstr "Pantalla X que se vai usar"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:204
 | 
			
		||||
#: ../src/core/main.c:199
 | 
			
		||||
msgid "Initialize session from savefile"
 | 
			
		||||
msgstr "Inicializar sesión desde o ficheiro de salvagarda"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:210
 | 
			
		||||
#: ../src/core/main.c:205
 | 
			
		||||
msgid "Make X calls synchronous"
 | 
			
		||||
msgstr "Facer que as chamadas a X sexan sincrónicas"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:217
 | 
			
		||||
#: ../src/core/main.c:212
 | 
			
		||||
msgid "Run as a wayland compositor"
 | 
			
		||||
msgstr "Executar como compositor de wayland"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:223
 | 
			
		||||
msgid "Run as a nested compositor"
 | 
			
		||||
msgstr "Executar como compositor anidado"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:231
 | 
			
		||||
#: ../src/core/main.c:220
 | 
			
		||||
msgid "Run as a full display server, rather than nested"
 | 
			
		||||
msgstr "Executar como un servidor de pantalla completo, fronte a un aniñado"
 | 
			
		||||
 | 
			
		||||
@@ -584,12 +581,12 @@ msgstr "Imprimir versión"
 | 
			
		||||
msgid "Mutter plugin to use"
 | 
			
		||||
msgstr "Engadido de mutter que usar"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/prefs.c:1997
 | 
			
		||||
#: ../src/core/prefs.c:2004
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Workspace %d"
 | 
			
		||||
msgstr "Espazo de traballo %d"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:521
 | 
			
		||||
#: ../src/core/screen.c:525
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"Display \"%s\" already has a window manager; try using the --replace option "
 | 
			
		||||
@@ -598,12 +595,12 @@ msgstr ""
 | 
			
		||||
"A pantalla «%s» ten xa un xestor de xanelas, tente usar a opción --replace "
 | 
			
		||||
"para substituír o xestor de xanelas."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:603
 | 
			
		||||
#: ../src/core/screen.c:607
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Screen %d on display '%s' is invalid\n"
 | 
			
		||||
msgstr "A pantalla %d na visualización «%s» non é válida\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/util.c:121
 | 
			
		||||
#: ../src/core/util.c:118
 | 
			
		||||
msgid "Mutter was compiled without support for verbose mode\n"
 | 
			
		||||
msgstr "Mutter foi compilado sen compatibilidade para o modo detallado\n"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										42
									
								
								po/he.po
									
									
									
									
									
								
							
							
						
						
									
										42
									
								
								po/he.po
									
									
									
									
									
								
							@@ -10,8 +10,8 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: metacity.HEAD.he\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2016-03-03 14:39+0200\n"
 | 
			
		||||
"PO-Revision-Date: 2016-03-03 14:40+0200\n"
 | 
			
		||||
"POT-Creation-Date: 2015-02-24 19:33+0200\n"
 | 
			
		||||
"PO-Revision-Date: 2015-02-24 19:34+0200\n"
 | 
			
		||||
"Last-Translator: Yosef Or Boczko <yoseforb@gmail.com>\n"
 | 
			
		||||
"Language-Team: עברית <>\n"
 | 
			
		||||
"Language: he\n"
 | 
			
		||||
@@ -453,22 +453,22 @@ msgstr "מעבר ל־VT 11"
 | 
			
		||||
msgid "Switch to VT 12"
 | 
			
		||||
msgstr "מעבר ל־VT 12"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:518
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:364
 | 
			
		||||
msgid "Built-in display"
 | 
			
		||||
msgstr "תצוגה מובנית"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:544
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:391
 | 
			
		||||
msgid "Unknown"
 | 
			
		||||
msgstr "לא ידוע"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:546
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:393
 | 
			
		||||
msgid "Unknown Display"
 | 
			
		||||
msgstr "תצוגה לא ידועה"
 | 
			
		||||
 | 
			
		||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
 | 
			
		||||
#. * size in inches, like 'Dell 15"'
 | 
			
		||||
#.
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:554
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:401
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s %s"
 | 
			
		||||
msgstr "%s %s"
 | 
			
		||||
@@ -510,44 +510,40 @@ msgstr "ה_מתנה"
 | 
			
		||||
msgid "_Force Quit"
 | 
			
		||||
msgstr "_אילוץ סגירה"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/display.c:555
 | 
			
		||||
#: ../src/core/display.c:562
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Failed to open X Window System display '%s'\n"
 | 
			
		||||
msgstr "Failed to open X Window System display '%s'\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:181
 | 
			
		||||
#: ../src/core/main.c:176
 | 
			
		||||
msgid "Disable connection to session manager"
 | 
			
		||||
msgstr "Disable connection to session manager"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:187
 | 
			
		||||
#: ../src/core/main.c:182
 | 
			
		||||
msgid "Replace the running window manager"
 | 
			
		||||
msgstr "Replace the running window manager"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
#: ../src/core/main.c:188
 | 
			
		||||
msgid "Specify session management ID"
 | 
			
		||||
msgstr "Specify session management ID"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:198
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
msgid "X Display to use"
 | 
			
		||||
msgstr "X Display to use"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:204
 | 
			
		||||
#: ../src/core/main.c:199
 | 
			
		||||
msgid "Initialize session from savefile"
 | 
			
		||||
msgstr "Initialize session from savefile"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:210
 | 
			
		||||
#: ../src/core/main.c:205
 | 
			
		||||
msgid "Make X calls synchronous"
 | 
			
		||||
msgstr "Make X calls synchronous"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:217
 | 
			
		||||
#: ../src/core/main.c:212
 | 
			
		||||
msgid "Run as a wayland compositor"
 | 
			
		||||
msgstr "Run as a wayland compositor"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:223
 | 
			
		||||
msgid "Run as a nested compositor"
 | 
			
		||||
msgstr "Run as a nested compositor"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:231
 | 
			
		||||
#: ../src/core/main.c:220
 | 
			
		||||
msgid "Run as a full display server, rather than nested"
 | 
			
		||||
msgstr "Run as a full display server, rather than nested"
 | 
			
		||||
 | 
			
		||||
@@ -573,12 +569,12 @@ msgstr "Print version"
 | 
			
		||||
msgid "Mutter plugin to use"
 | 
			
		||||
msgstr "תוסף ה־mutter לשימוש"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/prefs.c:1997
 | 
			
		||||
#: ../src/core/prefs.c:2004
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Workspace %d"
 | 
			
		||||
msgstr "מרחב עבודה %d"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:521
 | 
			
		||||
#: ../src/core/screen.c:525
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"Display \"%s\" already has a window manager; try using the --replace option "
 | 
			
		||||
@@ -587,12 +583,12 @@ msgstr ""
 | 
			
		||||
"Display \"%s\" already has a window manager; try using the --replace option "
 | 
			
		||||
"to replace the current window manager."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:603
 | 
			
		||||
#: ../src/core/screen.c:607
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Screen %d on display '%s' is invalid\n"
 | 
			
		||||
msgstr "Screen %d on display '%s' is invalid\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/util.c:121
 | 
			
		||||
#: ../src/core/util.c:118
 | 
			
		||||
msgid "Mutter was compiled without support for verbose mode\n"
 | 
			
		||||
msgstr "Mutter הודר ללא תמיכה במצב פירוט\n"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										52
									
								
								po/hu.po
									
									
									
									
									
								
							
							
						
						
									
										52
									
								
								po/hu.po
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
# Hungarian translation of mutter.
 | 
			
		||||
# Hungarian translation of mutter
 | 
			
		||||
# Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
 | 
			
		||||
# This file is distributed under the same license as the mutter package.
 | 
			
		||||
#
 | 
			
		||||
@@ -6,14 +6,14 @@
 | 
			
		||||
# 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, 2014, 2015, 2016.
 | 
			
		||||
# Balázs Úr <urbalazs at gmail dot com>, 2013, 2014, 2015.
 | 
			
		||||
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: 2016-03-04 13:42+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2016-03-04 20:43+0100\n"
 | 
			
		||||
"POT-Creation-Date: 2015-02-22 11:10+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2015-02-22 20:52+0100\n"
 | 
			
		||||
"Last-Translator: Balázs Úr <urbalazs@gmail.com>\n"
 | 
			
		||||
"Language-Team: Hungarian <gnome-hu-list at gnome dot org>\n"
 | 
			
		||||
"Language: hu\n"
 | 
			
		||||
@@ -436,41 +436,46 @@ msgid "Switch to VT 7"
 | 
			
		||||
msgstr "Váltás a 7. VT-re"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:8
 | 
			
		||||
#| msgid "Switch to VT 1"
 | 
			
		||||
msgid "Switch to VT 8"
 | 
			
		||||
msgstr "Váltás a 8. VT-re"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:9
 | 
			
		||||
#| msgid "Switch to VT 1"
 | 
			
		||||
msgid "Switch to VT 9"
 | 
			
		||||
msgstr "Váltás a 9. VT-re"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:10
 | 
			
		||||
#| msgid "Switch to VT 1"
 | 
			
		||||
msgid "Switch to VT 10"
 | 
			
		||||
msgstr "Váltás a 10. VT-re"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:11
 | 
			
		||||
#| msgid "Switch to VT 1"
 | 
			
		||||
msgid "Switch to VT 11"
 | 
			
		||||
msgstr "Váltás a 11. VT-re"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:12
 | 
			
		||||
#| msgid "Switch to VT 1"
 | 
			
		||||
msgid "Switch to VT 12"
 | 
			
		||||
msgstr "Váltás a 12. VT-re"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:518
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:364
 | 
			
		||||
msgid "Built-in display"
 | 
			
		||||
msgstr "Beépített kijelző"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:544
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:391
 | 
			
		||||
msgid "Unknown"
 | 
			
		||||
msgstr "Ismeretlen"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:546
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:393
 | 
			
		||||
msgid "Unknown Display"
 | 
			
		||||
msgstr "Ismeretlen kijelző"
 | 
			
		||||
 | 
			
		||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
 | 
			
		||||
#. * size in inches, like 'Dell 15"'
 | 
			
		||||
#.
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:554
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:401
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s %s"
 | 
			
		||||
msgstr "%s %s"
 | 
			
		||||
@@ -514,45 +519,40 @@ msgstr "Vá_rakozás"
 | 
			
		||||
msgid "_Force Quit"
 | 
			
		||||
msgstr "_Erőltetett kilépés"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/display.c:555
 | 
			
		||||
#: ../src/core/display.c:562
 | 
			
		||||
#, 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/main.c:181
 | 
			
		||||
#: ../src/core/main.c:176
 | 
			
		||||
msgid "Disable connection to session manager"
 | 
			
		||||
msgstr "A munkamenet-kezelőhöz való csatlakozás tiltása"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:187
 | 
			
		||||
#: ../src/core/main.c:182
 | 
			
		||||
msgid "Replace the running window manager"
 | 
			
		||||
msgstr "A futó ablakkezelő helyettesítése"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
#: ../src/core/main.c:188
 | 
			
		||||
msgid "Specify session management ID"
 | 
			
		||||
msgstr "A munkamenet-kezelő azonosítójának megadása"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:198
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
msgid "X Display to use"
 | 
			
		||||
msgstr "A használandó X megjelenítő"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:204
 | 
			
		||||
#: ../src/core/main.c:199
 | 
			
		||||
msgid "Initialize session from savefile"
 | 
			
		||||
msgstr "A munkamenet előkészítése a mentési fájlból"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:210
 | 
			
		||||
#: ../src/core/main.c:205
 | 
			
		||||
msgid "Make X calls synchronous"
 | 
			
		||||
msgstr "Az X-hívások szinkronná tétele"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:217
 | 
			
		||||
#: ../src/core/main.c:212
 | 
			
		||||
msgid "Run as a wayland compositor"
 | 
			
		||||
msgstr "Futtatás wayland betűszedőként"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:223
 | 
			
		||||
#| msgid "Run as a wayland compositor"
 | 
			
		||||
msgid "Run as a nested compositor"
 | 
			
		||||
msgstr "Futtatás beágyazott betűszedőként"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:231
 | 
			
		||||
#: ../src/core/main.c:220
 | 
			
		||||
msgid "Run as a full display server, rather than nested"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Futtatás teljes megjelenítő kiszolgálóként az egymásba ágyazott helyett"
 | 
			
		||||
@@ -580,12 +580,12 @@ msgstr "Verzió kinyomtatása"
 | 
			
		||||
msgid "Mutter plugin to use"
 | 
			
		||||
msgstr "Használandó Mutter bővítmény"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/prefs.c:1997
 | 
			
		||||
#: ../src/core/prefs.c:2004
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Workspace %d"
 | 
			
		||||
msgstr "%d. munkaterület"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:521
 | 
			
		||||
#: ../src/core/screen.c:525
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"Display \"%s\" already has a window manager; try using the --replace option "
 | 
			
		||||
@@ -594,12 +594,12 @@ msgstr ""
 | 
			
		||||
"A(z) „%s” kijelző már rendelkezik ablakkezelővel; próbálja a --replace "
 | 
			
		||||
"kapcsolóval helyettesíteni a jelenlegi ablakkezelőt."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:603
 | 
			
		||||
#: ../src/core/screen.c:607
 | 
			
		||||
#, 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/util.c:121
 | 
			
		||||
#: ../src/core/util.c:118
 | 
			
		||||
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"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										48
									
								
								po/id.po
									
									
									
									
									
								
							
							
						
						
									
										48
									
								
								po/id.po
									
									
									
									
									
								
							@@ -8,18 +8,18 @@
 | 
			
		||||
# Andika Triwidada <andika@gmail.com>, 2011-2015.
 | 
			
		||||
msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: mutter gnome-3-20\n"
 | 
			
		||||
"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: 2016-05-10 20:26+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2016-06-23 04:18+0700\n"
 | 
			
		||||
"POT-Creation-Date: 2015-03-21 11:13+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2015-03-21 19:04+0700\n"
 | 
			
		||||
"Last-Translator: Andika Triwidada <andika@gmail.com>\n"
 | 
			
		||||
"Language-Team: Indonesian <gnome-l10n-id@googlegroups.com>\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.8.8\n"
 | 
			
		||||
"X-Generator: Poedit 1.7.1\n"
 | 
			
		||||
"Plural-Forms: nplurals=1; plural=0;\n"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:1
 | 
			
		||||
@@ -454,22 +454,22 @@ msgstr "Pindah ke VT 11"
 | 
			
		||||
msgid "Switch to VT 12"
 | 
			
		||||
msgstr "Pindah ke VT 12"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:515
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:364
 | 
			
		||||
msgid "Built-in display"
 | 
			
		||||
msgstr "Tampilan bawaan"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:538
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:391
 | 
			
		||||
msgid "Unknown"
 | 
			
		||||
msgstr "Tak Dikenal"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:540
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:393
 | 
			
		||||
msgid "Unknown Display"
 | 
			
		||||
msgstr "Tampilan Tak Dikenal"
 | 
			
		||||
 | 
			
		||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
 | 
			
		||||
#. * size in inches, like 'Dell 15"'
 | 
			
		||||
#.
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:548
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:401
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s %s"
 | 
			
		||||
msgstr "%s %s"
 | 
			
		||||
@@ -484,7 +484,7 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Manajer komposit lain telah berjalan pada layar %i pada tampilan \"%s\"."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/bell.c:194
 | 
			
		||||
#: ../src/core/bell.c:185
 | 
			
		||||
msgid "Bell event"
 | 
			
		||||
msgstr "Bel peristiwa"
 | 
			
		||||
 | 
			
		||||
@@ -512,44 +512,40 @@ msgstr "_Tunggu"
 | 
			
		||||
msgid "_Force Quit"
 | 
			
		||||
msgstr "_Matikan Paksa"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/display.c:555
 | 
			
		||||
#: ../src/core/display.c:562
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Failed to open X Window System display '%s'\n"
 | 
			
		||||
msgstr "Gagal membuka tampilan X Window System '%s'\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:181
 | 
			
		||||
#: ../src/core/main.c:176
 | 
			
		||||
msgid "Disable connection to session manager"
 | 
			
		||||
msgstr "Menonaktifkan koneksi ke manajer sesi"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:187
 | 
			
		||||
#: ../src/core/main.c:182
 | 
			
		||||
msgid "Replace the running window manager"
 | 
			
		||||
msgstr "Mengganti manajer jendela yang tengah berjalan"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
#: ../src/core/main.c:188
 | 
			
		||||
msgid "Specify session management ID"
 | 
			
		||||
msgstr "Tentukan kode pengaturan sesi"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:198
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
msgid "X Display to use"
 | 
			
		||||
msgstr "Tampilan X yang digunakna"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:204
 | 
			
		||||
#: ../src/core/main.c:199
 | 
			
		||||
msgid "Initialize session from savefile"
 | 
			
		||||
msgstr "Aktifkan sesi dari berkas simpanan"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:210
 | 
			
		||||
#: ../src/core/main.c:205
 | 
			
		||||
msgid "Make X calls synchronous"
 | 
			
		||||
msgstr "Buat panggilan X selaras"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:217
 | 
			
		||||
#: ../src/core/main.c:212
 | 
			
		||||
msgid "Run as a wayland compositor"
 | 
			
		||||
msgstr "Jalankan sebagai kompositor wayland"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:223
 | 
			
		||||
msgid "Run as a nested compositor"
 | 
			
		||||
msgstr "Jalankan sebagai kompositor bersarang"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:231
 | 
			
		||||
#: ../src/core/main.c:220
 | 
			
		||||
msgid "Run as a full display server, rather than nested"
 | 
			
		||||
msgstr "Jalankan sebagai server tampilan penuh, ketimbang tampilan bersarang"
 | 
			
		||||
 | 
			
		||||
@@ -577,12 +573,12 @@ msgstr "Cetak versi"
 | 
			
		||||
msgid "Mutter plugin to use"
 | 
			
		||||
msgstr "Pengaya Mutter yang dipakai"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/prefs.c:1997
 | 
			
		||||
#: ../src/core/prefs.c:2004
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Workspace %d"
 | 
			
		||||
msgstr "Area kerja %d"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:521
 | 
			
		||||
#: ../src/core/screen.c:525
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"Display \"%s\" already has a window manager; try using the --replace option "
 | 
			
		||||
@@ -591,12 +587,12 @@ msgstr ""
 | 
			
		||||
"Tampilan \"%s\" sudah memiliki manajer jendela; cobalah gunakan pilihan --"
 | 
			
		||||
"replace untuk mengganti manajer jendela saat ini."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:603
 | 
			
		||||
#: ../src/core/screen.c:607
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Screen %d on display '%s' is invalid\n"
 | 
			
		||||
msgstr "Layar %d pada tampilan '%s' tidak benar\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/util.c:121
 | 
			
		||||
#: ../src/core/util.c:118
 | 
			
		||||
msgid "Mutter was compiled without support for verbose mode\n"
 | 
			
		||||
msgstr "Muter dikompilasi tanpa dukungan mode riuh\n"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										48
									
								
								po/it.po
									
									
									
									
									
								
							
							
						
						
									
										48
									
								
								po/it.po
									
									
									
									
									
								
							@@ -5,15 +5,15 @@
 | 
			
		||||
# Pier Luigi Fiorini <plfiorini@libero.it>, 2002.
 | 
			
		||||
# Lapo Calamandrei <lapo.calamandrei@virgilio.it>, 2003.
 | 
			
		||||
# Luca Ferretti <lferrett@gnome.org>, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012.
 | 
			
		||||
# Milo Casagrande <milo@milo.name>, 2012, 2013, 2014, 2015, 2016.
 | 
			
		||||
# Milo Casagrande <milo@milo.name>, 2012, 2013, 2014, 2015.
 | 
			
		||||
#
 | 
			
		||||
msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: mutter\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
 | 
			
		||||
"product=mutter&keywords=I18N+L10N&component=general\n"
 | 
			
		||||
"POT-Creation-Date: 2016-03-17 13:44+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2016-03-17 21:24+0100\n"
 | 
			
		||||
"POT-Creation-Date: 2015-03-04 23:11+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2015-03-05 09:16+0100\n"
 | 
			
		||||
"Last-Translator: Milo Casagrande <milo@milo.name>\n"
 | 
			
		||||
"Language-Team: Italian <tp@lists.linux.it>\n"
 | 
			
		||||
"Language: it\n"
 | 
			
		||||
@@ -21,7 +21,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.8.7\n"
 | 
			
		||||
"X-Generator: Poedit 1.7.4\n"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:1
 | 
			
		||||
msgid "Navigation"
 | 
			
		||||
@@ -466,22 +466,22 @@ msgstr "Passa al VT 11"
 | 
			
		||||
msgid "Switch to VT 12"
 | 
			
		||||
msgstr "Passa al VT 12"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:518
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:364
 | 
			
		||||
msgid "Built-in display"
 | 
			
		||||
msgstr "Display integrato"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:544
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:391
 | 
			
		||||
msgid "Unknown"
 | 
			
		||||
msgstr "Sconosciuto"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:546
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:393
 | 
			
		||||
msgid "Unknown Display"
 | 
			
		||||
msgstr "Display sconosciuto"
 | 
			
		||||
 | 
			
		||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
 | 
			
		||||
#. * size in inches, like 'Dell 15"'
 | 
			
		||||
#.
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:554
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:401
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s %s"
 | 
			
		||||
msgstr "%s %s"
 | 
			
		||||
@@ -497,7 +497,7 @@ msgstr ""
 | 
			
		||||
"Un altro compositing manager è già in esecuzione sullo schermo %i sul "
 | 
			
		||||
"display «%s»."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/bell.c:192
 | 
			
		||||
#: ../src/core/bell.c:185
 | 
			
		||||
msgid "Bell event"
 | 
			
		||||
msgstr "Evento campanella"
 | 
			
		||||
 | 
			
		||||
@@ -526,44 +526,40 @@ msgstr "_Attendi"
 | 
			
		||||
msgid "_Force Quit"
 | 
			
		||||
msgstr "_Forza uscita"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/display.c:555
 | 
			
		||||
#: ../src/core/display.c:562
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Failed to open X Window System display '%s'\n"
 | 
			
		||||
msgstr "Apertura del display «%s» di X Window System non riuscita\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:181
 | 
			
		||||
#: ../src/core/main.c:176
 | 
			
		||||
msgid "Disable connection to session manager"
 | 
			
		||||
msgstr "Disabilita la connessione al gestore di sessione"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:187
 | 
			
		||||
#: ../src/core/main.c:182
 | 
			
		||||
msgid "Replace the running window manager"
 | 
			
		||||
msgstr "Sostituisce il window manager in esecuzione"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
#: ../src/core/main.c:188
 | 
			
		||||
msgid "Specify session management ID"
 | 
			
		||||
msgstr "Specifica l'ID di gestione sessione"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:198
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
msgid "X Display to use"
 | 
			
		||||
msgstr "Display X da usare"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:204
 | 
			
		||||
#: ../src/core/main.c:199
 | 
			
		||||
msgid "Initialize session from savefile"
 | 
			
		||||
msgstr "Inizializza la sessione da file salvato"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:210
 | 
			
		||||
#: ../src/core/main.c:205
 | 
			
		||||
msgid "Make X calls synchronous"
 | 
			
		||||
msgstr "Rende le chiamate X sincrone"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:217
 | 
			
		||||
#: ../src/core/main.c:212
 | 
			
		||||
msgid "Run as a wayland compositor"
 | 
			
		||||
msgstr "Esegui come compositor Wayland"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:223
 | 
			
		||||
msgid "Run as a nested compositor"
 | 
			
		||||
msgstr "Esegui come compositor annidato"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:231
 | 
			
		||||
#: ../src/core/main.c:220
 | 
			
		||||
msgid "Run as a full display server, rather than nested"
 | 
			
		||||
msgstr "Esegui come display server invece che annidato"
 | 
			
		||||
 | 
			
		||||
@@ -590,12 +586,12 @@ msgstr "Stampa la versione"
 | 
			
		||||
msgid "Mutter plugin to use"
 | 
			
		||||
msgstr "Plugin Mutter da usare"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/prefs.c:1997
 | 
			
		||||
#: ../src/core/prefs.c:2004
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Workspace %d"
 | 
			
		||||
msgstr "Spazio di lavoro %d"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:521
 | 
			
		||||
#: ../src/core/screen.c:525
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"Display \"%s\" already has a window manager; try using the --replace option "
 | 
			
		||||
@@ -604,12 +600,12 @@ msgstr ""
 | 
			
		||||
"Il display «%s» ha già un window manager; provare a utilizzare l'opzione --"
 | 
			
		||||
"replace per sostituirlo."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:603
 | 
			
		||||
#: ../src/core/screen.c:607
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Screen %d on display '%s' is invalid\n"
 | 
			
		||||
msgstr "Lo schermo %d nel display «%s» non è valido\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/util.c:121
 | 
			
		||||
#: ../src/core/util.c:118
 | 
			
		||||
msgid "Mutter was compiled without support for verbose mode\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Mutter è stato compilato escludendo il supporto per la modalità prolissa\n"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										50
									
								
								po/ko.po
									
									
									
									
									
								
							
							
						
						
									
										50
									
								
								po/ko.po
									
									
									
									
									
								
							@@ -6,7 +6,7 @@
 | 
			
		||||
# Changwoo Ryu <cwryu@debian.org>, 2003, 2004, 2005, 2006, 2007, 2008, 2009.
 | 
			
		||||
#
 | 
			
		||||
# Updated in mutter:
 | 
			
		||||
# Changwoo Ryu <cwryu@debian.org>, 2011-2016.
 | 
			
		||||
# Changwoo Ryu <cwryu@debian.org>, 2011-2015.
 | 
			
		||||
#
 | 
			
		||||
#
 | 
			
		||||
# 주의:
 | 
			
		||||
@@ -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: 2016-03-12 13:40+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2016-03-13 04:38+0900\n"
 | 
			
		||||
"POT-Creation-Date: 2015-03-07 11:12+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2015-03-08 03:44+0900\n"
 | 
			
		||||
"Last-Translator: Changwoo Ryu <cwryu@debian.org>\n"
 | 
			
		||||
"Language-Team: GNOME Korea <gnome-kr@googlegroups.com>\n"
 | 
			
		||||
"Language: Korean\n"
 | 
			
		||||
@@ -453,22 +453,22 @@ msgstr "가상 터미널 11로 이동"
 | 
			
		||||
msgid "Switch to VT 12"
 | 
			
		||||
msgstr "가상 터미널 12로 이동"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:518
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:364
 | 
			
		||||
msgid "Built-in display"
 | 
			
		||||
msgstr "내장 디스플레이"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:544
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:391
 | 
			
		||||
msgid "Unknown"
 | 
			
		||||
msgstr "알 수 없음"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:546
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:393
 | 
			
		||||
msgid "Unknown Display"
 | 
			
		||||
msgstr "알 수 없는 디스플레이"
 | 
			
		||||
 | 
			
		||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
 | 
			
		||||
#. * size in inches, like 'Dell 15"'
 | 
			
		||||
#.
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:554
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:401
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s %s"
 | 
			
		||||
msgstr "%s %s"
 | 
			
		||||
@@ -484,7 +484,7 @@ msgstr ""
 | 
			
		||||
"다른 창 구성 관리 프로그램이 이미 디스플레이 \"%2$s\" 화면 %1$i번에서 실행 중"
 | 
			
		||||
"입니다."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/bell.c:192
 | 
			
		||||
#: ../src/core/bell.c:185
 | 
			
		||||
msgid "Bell event"
 | 
			
		||||
msgstr "삑소리 이벤트"
 | 
			
		||||
 | 
			
		||||
@@ -511,44 +511,40 @@ msgstr "기다리기(_W)"
 | 
			
		||||
msgid "_Force Quit"
 | 
			
		||||
msgstr "강제로 끝내기(_F)"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/display.c:555
 | 
			
		||||
#: ../src/core/display.c:562
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Failed to open X Window System display '%s'\n"
 | 
			
		||||
msgstr "X 윈도 시스템 디스플레이 '%s'을(를) 여는데 실패하였습니다\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:181
 | 
			
		||||
#: ../src/core/main.c:176
 | 
			
		||||
msgid "Disable connection to session manager"
 | 
			
		||||
msgstr "세션 관리자와 연결 하지 않습니다"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:187
 | 
			
		||||
#: ../src/core/main.c:182
 | 
			
		||||
msgid "Replace the running window manager"
 | 
			
		||||
msgstr "실행 중인 창 관리자를 바꿉니다"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
#: ../src/core/main.c:188
 | 
			
		||||
msgid "Specify session management ID"
 | 
			
		||||
msgstr "세션 관리 ID를 지정합니다"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:198
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
msgid "X Display to use"
 | 
			
		||||
msgstr "사용할 X 디스플레이"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:204
 | 
			
		||||
#: ../src/core/main.c:199
 | 
			
		||||
msgid "Initialize session from savefile"
 | 
			
		||||
msgstr "저장 파일에서 세션을 초기화 합니다"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:210
 | 
			
		||||
#: ../src/core/main.c:205
 | 
			
		||||
msgid "Make X calls synchronous"
 | 
			
		||||
msgstr "동기 X 호출을 합니다"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:217
 | 
			
		||||
#: ../src/core/main.c:212
 | 
			
		||||
msgid "Run as a wayland compositor"
 | 
			
		||||
msgstr "웨일랜드 컴포지터로 실행합니다"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:223
 | 
			
		||||
msgid "Run as a nested compositor"
 | 
			
		||||
msgstr "내장 컴포지터로 실행합니다"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:231
 | 
			
		||||
#: ../src/core/main.c:220
 | 
			
		||||
msgid "Run as a full display server, rather than nested"
 | 
			
		||||
msgstr "전체 디스플레이 서버로 실행, 내장 프로그램 아님"
 | 
			
		||||
 | 
			
		||||
@@ -575,26 +571,24 @@ msgstr "버전을 출력합니다"
 | 
			
		||||
msgid "Mutter plugin to use"
 | 
			
		||||
msgstr "사용할 머터 플러그인"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/prefs.c:1997
 | 
			
		||||
#: ../src/core/prefs.c:2004
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Workspace %d"
 | 
			
		||||
msgstr "작업 공간 %d"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:521
 | 
			
		||||
#: ../src/core/screen.c:525
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"Display \"%s\" already has a window manager; try using the --replace option "
 | 
			
		||||
"to replace the current window manager."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"디스플레이 \"%s\"에 이미 창 관리자가 있습니다. 현재 창 관리자를 바꾸려면 --"
 | 
			
		||||
"replace 옵션을 써보십시오."
 | 
			
		||||
msgstr "디스플레이 \"%s\"에 이미 창 관리자가 있습니다. 현재 창 관리자를 바꾸려면 --replace 옵션을 써보십시오."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:603
 | 
			
		||||
#: ../src/core/screen.c:607
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Screen %d on display '%s' is invalid\n"
 | 
			
		||||
msgstr "디스플레이 '%2$s'의 화면 %1$d은(는) 잘못되었습니다\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/util.c:121
 | 
			
		||||
#: ../src/core/util.c:118
 | 
			
		||||
msgid "Mutter was compiled without support for verbose mode\n"
 | 
			
		||||
msgstr "머터가 자세한 모드 지원 없이 컴파일 되었습니다\n"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										124
									
								
								po/lt.po
									
									
									
									
									
								
							
							
						
						
									
										124
									
								
								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: 2016-02-26 09:54+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2016-02-25 15:18+0200\n"
 | 
			
		||||
"POT-Creation-Date: 2015-02-28 11:14+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2015-02-28 21:34+0200\n"
 | 
			
		||||
"Last-Translator: Aurimas Černius <aurisc4@gmail.com>\n"
 | 
			
		||||
"Language-Team: Lietuvių <gnome-lt@lists.akl.lt>\n"
 | 
			
		||||
"Language: lt\n"
 | 
			
		||||
@@ -23,7 +23,7 @@ msgstr ""
 | 
			
		||||
"Content-Transfer-Encoding: 8bit\n"
 | 
			
		||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n"
 | 
			
		||||
"%100<10 || n%100>=20) ? 1 : 2);\n"
 | 
			
		||||
"X-Generator: Poedit 1.8.7\n"
 | 
			
		||||
"X-Generator: Gtranslator 2.91.6\n"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:1
 | 
			
		||||
msgid "Navigation"
 | 
			
		||||
@@ -31,39 +31,39 @@ msgstr "Navigacija"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:2
 | 
			
		||||
msgid "Move window to workspace 1"
 | 
			
		||||
msgstr "Perkelti langą į darbo sritį Nr.1"
 | 
			
		||||
msgstr "Perkelti langą į darbalaukį Nr.1"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:3
 | 
			
		||||
msgid "Move window to workspace 2"
 | 
			
		||||
msgstr "Perkelti langą į darbo sritį Nr.2"
 | 
			
		||||
msgstr "Perkelti langą į darbalaukį Nr.2"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:4
 | 
			
		||||
msgid "Move window to workspace 3"
 | 
			
		||||
msgstr "Perkelti langą į darbo sritį Nr.3"
 | 
			
		||||
msgstr "Perkelti langą į darbalaukį Nr.3"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:5
 | 
			
		||||
msgid "Move window to workspace 4"
 | 
			
		||||
msgstr "Perkelti langą į darbo sritį Nr.4"
 | 
			
		||||
msgstr "Perkelti langą į darbalaukį Nr.4"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:6
 | 
			
		||||
msgid "Move window to last workspace"
 | 
			
		||||
msgstr "Perkelti langą į pastarąją darbo sritį"
 | 
			
		||||
msgstr "Perkelti langą į pastarąjį darbalaukį"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:7
 | 
			
		||||
msgid "Move window one workspace to the left"
 | 
			
		||||
msgstr "Perkelti langą į kairiau esančią darbo sritį"
 | 
			
		||||
msgstr "Perkelti langą į kairiau esantį darbalaukį"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:8
 | 
			
		||||
msgid "Move window one workspace to the right"
 | 
			
		||||
msgstr "Perkelti langą į dešiniau esančią darbo sritį"
 | 
			
		||||
msgstr "Perkelti langą į dešiniau esantį darbalaukį"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:9
 | 
			
		||||
msgid "Move window one workspace up"
 | 
			
		||||
msgstr "Perkelti langą į aukščiau esančią darbo sritį"
 | 
			
		||||
msgstr "Perkelti langą į aukščiau esantį darbalaukį"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:10
 | 
			
		||||
msgid "Move window one workspace down"
 | 
			
		||||
msgstr "Perkelti langą į žemiau esančią darbo sritį"
 | 
			
		||||
msgstr "Perkelti langą į žemiau esantį darbalaukį"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:11
 | 
			
		||||
msgid "Move window one monitor to the left"
 | 
			
		||||
@@ -143,39 +143,39 @@ msgstr "Paslėpti visus įprastinius langus"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:30
 | 
			
		||||
msgid "Switch to workspace 1"
 | 
			
		||||
msgstr "Persijungti į darbo sritį Nr.1"
 | 
			
		||||
msgstr "Persijungti į darbalaukį Nr.1"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:31
 | 
			
		||||
msgid "Switch to workspace 2"
 | 
			
		||||
msgstr "Persijungti į darbo sritį Nr.2"
 | 
			
		||||
msgstr "Persijungti į darbalaukį Nr.2"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:32
 | 
			
		||||
msgid "Switch to workspace 3"
 | 
			
		||||
msgstr "Persijungti į darbo sritį Nr.3"
 | 
			
		||||
msgstr "Persijungti į darbalaukį Nr.3"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:33
 | 
			
		||||
msgid "Switch to workspace 4"
 | 
			
		||||
msgstr "Persijungti į darbo sritį Nr.4"
 | 
			
		||||
msgstr "Persijungti į darbalaukį Nr.4"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:34
 | 
			
		||||
msgid "Switch to last workspace"
 | 
			
		||||
msgstr "Persijungti į pastarąją darbo sritį"
 | 
			
		||||
msgstr "Persijungti į pastarąjį darbalaukį"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:35
 | 
			
		||||
msgid "Move to workspace left"
 | 
			
		||||
msgstr "Perkelti į darbo sritį kairėje"
 | 
			
		||||
msgstr "Perkelti į darbalaukį kairėje"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:36
 | 
			
		||||
msgid "Move to workspace right"
 | 
			
		||||
msgstr "Perkelti į darbo sritį dešinėje"
 | 
			
		||||
msgstr "Perkelti į darbalaukį dešinėje"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:37
 | 
			
		||||
msgid "Move to workspace above"
 | 
			
		||||
msgstr "Perkelti į darbo sritį viršuje"
 | 
			
		||||
msgstr "Perkelti į darbalaukį viršuje"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:38
 | 
			
		||||
msgid "Move to workspace below"
 | 
			
		||||
msgstr "Perkelti į darbo sritį apačioje"
 | 
			
		||||
msgstr "Perkelti į darbalaukį apačioje"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-system.xml.in.h:1
 | 
			
		||||
msgid "System"
 | 
			
		||||
@@ -235,7 +235,7 @@ msgstr "Keisti lango dydį"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:12
 | 
			
		||||
msgid "Toggle window on all workspaces or one"
 | 
			
		||||
msgstr "Perjungti lango buvimo visose darbo srityse būseną"
 | 
			
		||||
msgstr "Perjungti lango buvimo visuose darbalaukiuose būseną"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:13
 | 
			
		||||
msgid "Raise window if covered, otherwise lower it"
 | 
			
		||||
@@ -272,7 +272,7 @@ msgstr "Mutter"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:1
 | 
			
		||||
msgid "Modifier to use for extended window management operations"
 | 
			
		||||
msgstr "Klavišas, naudojamas kartu su specialiomis lango tvarkymo operacijomis"
 | 
			
		||||
msgstr "Klavišas, naudojamas kartu su specialiais lango valdymo veiksmais"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:2
 | 
			
		||||
msgid ""
 | 
			
		||||
@@ -315,7 +315,7 @@ msgstr ""
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:7
 | 
			
		||||
msgid "Workspaces are managed dynamically"
 | 
			
		||||
msgstr "Darbo sritys tvarkomos dinamiškai"
 | 
			
		||||
msgstr "Darbalaukiai valdomi dinamiškai"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:8
 | 
			
		||||
msgid ""
 | 
			
		||||
@@ -323,21 +323,21 @@ msgid ""
 | 
			
		||||
"static number of workspaces (determined by the num-workspaces key in org."
 | 
			
		||||
"gnome.desktop.wm.preferences)."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Nusako, ar darbo sritys yra tvarkomos dinamiškai, ar yra pastovus darbo "
 | 
			
		||||
"sričių skaičius (nusakomas raktu num-workspaces schemoje org.gnome.desktop."
 | 
			
		||||
"wm.preferences)."
 | 
			
		||||
"Nusako, ar darbastaliai yra valdomi dinamiškai, ar yra pastovus darbalaukių "
 | 
			
		||||
"skaičius (nusakomas raktu num-workspaces schemoje org.gnome.desktop.wm."
 | 
			
		||||
"preferences)."
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:9
 | 
			
		||||
msgid "Workspaces only on primary"
 | 
			
		||||
msgstr "Darbo sritys tik pagrindiniame"
 | 
			
		||||
msgstr "Darbalaukiai tik pagrindiniame"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:10
 | 
			
		||||
msgid ""
 | 
			
		||||
"Determines whether workspace switching should happen for windows on all "
 | 
			
		||||
"monitors or only for windows on the primary monitor."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Nusako, ar darbo sričių perjungimas turi įvykti langams visuose "
 | 
			
		||||
"monitoriuose, ar tik langams pagrindiniame monitoriuje."
 | 
			
		||||
"Nusako, ar darbalaukių perjungimas turi įvykti langams viusose monitoriuose, "
 | 
			
		||||
"ar tik langams pagrindiniame monitoriuje."
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:11
 | 
			
		||||
msgid "No tab popup"
 | 
			
		||||
@@ -438,41 +438,46 @@ msgid "Switch to VT 7"
 | 
			
		||||
msgstr "Persijungti į VT 7"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:8
 | 
			
		||||
#| msgid "Switch to VT 1"
 | 
			
		||||
msgid "Switch to VT 8"
 | 
			
		||||
msgstr "Persijungti į VT 8"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:9
 | 
			
		||||
#| msgid "Switch to VT 1"
 | 
			
		||||
msgid "Switch to VT 9"
 | 
			
		||||
msgstr "Persijungti į VT 9"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:10
 | 
			
		||||
#| msgid "Switch to VT 1"
 | 
			
		||||
msgid "Switch to VT 10"
 | 
			
		||||
msgstr "Persijungti į VT 10"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:11
 | 
			
		||||
#| msgid "Switch to VT 1"
 | 
			
		||||
msgid "Switch to VT 11"
 | 
			
		||||
msgstr "Persijungti į VT 11"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:12
 | 
			
		||||
#| msgid "Switch to VT 1"
 | 
			
		||||
msgid "Switch to VT 12"
 | 
			
		||||
msgstr "Persijungti į VT 12"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:518
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:364
 | 
			
		||||
msgid "Built-in display"
 | 
			
		||||
msgstr "Integruotas vaizduoklis"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:544
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:391
 | 
			
		||||
msgid "Unknown"
 | 
			
		||||
msgstr "Nežinomas"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:546
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:393
 | 
			
		||||
msgid "Unknown Display"
 | 
			
		||||
msgstr "Nežinomas vaizduoklis"
 | 
			
		||||
 | 
			
		||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
 | 
			
		||||
#. * size in inches, like 'Dell 15"'
 | 
			
		||||
#.
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:554
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:401
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s %s"
 | 
			
		||||
msgstr "%s %s"
 | 
			
		||||
@@ -484,7 +489,7 @@ msgstr "%s %s"
 | 
			
		||||
msgid ""
 | 
			
		||||
"Another compositing manager is already running on screen %i on display \"%s"
 | 
			
		||||
"\"."
 | 
			
		||||
msgstr "Kita kompozicijos tvarkytuvė jau veikia ekrane %i vaizduoklyje „%s“."
 | 
			
		||||
msgstr "Kita kompozicijos valdyklė jau veikia ekrane %i vaizduoklyje „%s“."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/bell.c:185
 | 
			
		||||
msgid "Bell event"
 | 
			
		||||
@@ -513,46 +518,42 @@ msgstr "_Laukti"
 | 
			
		||||
msgid "_Force Quit"
 | 
			
		||||
msgstr "_Priverstinai išeiti"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/display.c:555
 | 
			
		||||
#: ../src/core/display.c:562
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Failed to open X Window System display '%s'\n"
 | 
			
		||||
msgstr "Nepavyko atverti X Window sistemos ekrano „%s“\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:181
 | 
			
		||||
#: ../src/core/main.c:176
 | 
			
		||||
msgid "Disable connection to session manager"
 | 
			
		||||
msgstr "Išjungti susijungimą su sesijos tvarkytuve"
 | 
			
		||||
msgstr "Išjungti susijungimą su sesijos valdykle"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:187
 | 
			
		||||
#: ../src/core/main.c:182
 | 
			
		||||
msgid "Replace the running window manager"
 | 
			
		||||
msgstr "Pakeisti veikiančią langų tvarkytuvę"
 | 
			
		||||
msgstr "Pakeisti veikiančią langų valdyklę"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:188
 | 
			
		||||
msgid "Specify session management ID"
 | 
			
		||||
msgstr "Nurodyti sesijos valdymo ID"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
msgid "Specify session management ID"
 | 
			
		||||
msgstr "Nurodyti sesijos tvarkymo ID"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:198
 | 
			
		||||
msgid "X Display to use"
 | 
			
		||||
msgstr "Naudotinas X ekranas"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:204
 | 
			
		||||
#: ../src/core/main.c:199
 | 
			
		||||
msgid "Initialize session from savefile"
 | 
			
		||||
msgstr "Inicializuoti sesiją iš išsaugojimo failo"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:210
 | 
			
		||||
#: ../src/core/main.c:205
 | 
			
		||||
msgid "Make X calls synchronous"
 | 
			
		||||
msgstr "Sinchronizuoti X iškvietimus"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:217
 | 
			
		||||
#: ../src/core/main.c:212
 | 
			
		||||
msgid "Run as a wayland compositor"
 | 
			
		||||
msgstr "Vykdyti kaip wayland kompozitorių"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:223
 | 
			
		||||
msgid "Run as a nested compositor"
 | 
			
		||||
msgstr "Vykdyti kaip įdėtinį kompozitorių"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:231
 | 
			
		||||
#: ../src/core/main.c:220
 | 
			
		||||
msgid "Run as a full display server, rather than nested"
 | 
			
		||||
msgstr "Vykdyti kaip visą vaizduoklio serverį, o ne įdėtinį"
 | 
			
		||||
msgstr "Vykdyti kaip visą vaizduoklio serverį, o ne vidinį"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/mutter.c:39
 | 
			
		||||
#, c-format
 | 
			
		||||
@@ -579,26 +580,29 @@ msgstr "Parodyti versiją"
 | 
			
		||||
msgid "Mutter plugin to use"
 | 
			
		||||
msgstr "Naudojamas Mutter įskiepis"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/prefs.c:1997
 | 
			
		||||
#: ../src/core/prefs.c:2004
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Workspace %d"
 | 
			
		||||
msgstr "Darbo sritis %d"
 | 
			
		||||
msgstr "Darbalaukis %d"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:521
 | 
			
		||||
#: ../src/core/screen.c:525
 | 
			
		||||
#, c-format
 | 
			
		||||
#| msgid ""
 | 
			
		||||
#| "Screen %d on display \"%s\" already has a window manager; try using the --"
 | 
			
		||||
#| "replace option to replace the current window manager.\n"
 | 
			
		||||
msgid ""
 | 
			
		||||
"Display \"%s\" already has a window manager; try using the --replace option "
 | 
			
		||||
"to replace the current window manager."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Vaizduoklis „%s“ jau turi langų tvarkytuvę; pabandykite pakeisti esamą langų "
 | 
			
		||||
"tvarkytuvę, naudodami parametrą --replace."
 | 
			
		||||
"Vaizduoklis „%s“ jau turi langų valdyklę; pabandykite pakeisti esamą langų "
 | 
			
		||||
"valdyklę naudodami parametrą --replace."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:603
 | 
			
		||||
#: ../src/core/screen.c:607
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Screen %d on display '%s' is invalid\n"
 | 
			
		||||
msgstr "Ekranas %d vaizduoklyje „%s“ netinkamas\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/util.c:121
 | 
			
		||||
#: ../src/core/util.c:118
 | 
			
		||||
msgid "Mutter was compiled without support for verbose mode\n"
 | 
			
		||||
msgstr "Mutter buvo sukompiliuota be išsamaus veikimo veiksenos\n"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										432
									
								
								po/nb.po
									
									
									
									
									
								
							
							
						
						
									
										432
									
								
								po/nb.po
									
									
									
									
									
								
							@@ -1,13 +1,13 @@
 | 
			
		||||
# Norwegian bokmål translation of mutter.
 | 
			
		||||
# Copyright © 2002-2004 Free Software Foundation, Inc.
 | 
			
		||||
# Kjartan Maraas <kmaraas@gnome.org>, 2002-2016.
 | 
			
		||||
# Kjartan Maraas <kmaraas@gnome.org>, 2002-2015.
 | 
			
		||||
#
 | 
			
		||||
msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: mutter 3.20.x\n"
 | 
			
		||||
"Project-Id-Version: mutter 3.15.x\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2016-05-23 18:59+0200\n"
 | 
			
		||||
"PO-Revision-Date: 2016-05-23 19:00+0200\n"
 | 
			
		||||
"POT-Creation-Date: 2015-03-19 21:23+0100\n"
 | 
			
		||||
"PO-Revision-Date: 2015-03-19 21:24+0100\n"
 | 
			
		||||
"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
 | 
			
		||||
"Language-Team: Norwegian bokmål <i18n-no@lister.ping.uio.no>\n"
 | 
			
		||||
"Language: \n"
 | 
			
		||||
@@ -448,22 +448,22 @@ msgstr "Bytt til VT 11"
 | 
			
		||||
msgid "Switch to VT 12"
 | 
			
		||||
msgstr "Bytt til VT 12"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:515
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:364
 | 
			
		||||
msgid "Built-in display"
 | 
			
		||||
msgstr "Innebygget skjerm"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:538
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:391
 | 
			
		||||
msgid "Unknown"
 | 
			
		||||
msgstr "Ukjent"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:540
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:393
 | 
			
		||||
msgid "Unknown Display"
 | 
			
		||||
msgstr "Ukjent skjerm"
 | 
			
		||||
 | 
			
		||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
 | 
			
		||||
#. * size in inches, like 'Dell 15"'
 | 
			
		||||
#.
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:548
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:401
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s %s"
 | 
			
		||||
msgstr "%s %s"
 | 
			
		||||
@@ -477,7 +477,7 @@ msgid ""
 | 
			
		||||
"\"."
 | 
			
		||||
msgstr "En annen compositing manager kjører skjerm %i på display «%s»."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/bell.c:194
 | 
			
		||||
#: ../src/core/bell.c:185
 | 
			
		||||
msgid "Bell event"
 | 
			
		||||
msgstr "Klokkehendelse"
 | 
			
		||||
 | 
			
		||||
@@ -506,44 +506,40 @@ msgstr "_Vent"
 | 
			
		||||
msgid "_Force Quit"
 | 
			
		||||
msgstr "_Tvungen nedstenging"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/display.c:555
 | 
			
		||||
#: ../src/core/display.c:562
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Failed to open X Window System display '%s'\n"
 | 
			
		||||
msgstr "Feil under åpning av X Window System skjerm «%s»\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:181
 | 
			
		||||
#: ../src/core/main.c:176
 | 
			
		||||
msgid "Disable connection to session manager"
 | 
			
		||||
msgstr "Deaktiver tilkobling til sesjonshåndtereren"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:187
 | 
			
		||||
#: ../src/core/main.c:182
 | 
			
		||||
msgid "Replace the running window manager"
 | 
			
		||||
msgstr "Erstatt kjørende vindushåndterer"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
#: ../src/core/main.c:188
 | 
			
		||||
msgid "Specify session management ID"
 | 
			
		||||
msgstr "Oppgi sesjonshåndterings-ID"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:198
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
msgid "X Display to use"
 | 
			
		||||
msgstr "X-skjerm som skal brukes"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:204
 | 
			
		||||
#: ../src/core/main.c:199
 | 
			
		||||
msgid "Initialize session from savefile"
 | 
			
		||||
msgstr "Initier sesjonen fra en lagret fil"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:210
 | 
			
		||||
#: ../src/core/main.c:205
 | 
			
		||||
msgid "Make X calls synchronous"
 | 
			
		||||
msgstr "Gjør X-kall synkrone"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:217
 | 
			
		||||
#: ../src/core/main.c:212
 | 
			
		||||
msgid "Run as a wayland compositor"
 | 
			
		||||
msgstr "Kjør som en wayland-kompositør"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:223
 | 
			
		||||
msgid "Run as a nested compositor"
 | 
			
		||||
msgstr "Kjør som en nøstet kompositør"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:231
 | 
			
		||||
#: ../src/core/main.c:220
 | 
			
		||||
msgid "Run as a full display server, rather than nested"
 | 
			
		||||
msgstr "Kjør som en full skjermtjener, heller enn nøstet"
 | 
			
		||||
 | 
			
		||||
@@ -569,26 +565,24 @@ msgstr "Skriv versjonsnummer"
 | 
			
		||||
msgid "Mutter plugin to use"
 | 
			
		||||
msgstr "Mutter-tillegg som skal brukes"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/prefs.c:1997
 | 
			
		||||
#: ../src/core/prefs.c:2004
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Workspace %d"
 | 
			
		||||
msgstr "Arbeidsområde %d"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:521
 | 
			
		||||
#: ../src/core/screen.c:525
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"Display \"%s\" already has a window manager; try using the --replace option "
 | 
			
		||||
"to replace the current window manager."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Skjerm «%s» har allerede en vindushåndterer; prøv å bruke flagget --replace "
 | 
			
		||||
"for å erstatte aktiv vindushåndterer."
 | 
			
		||||
msgstr "Skjerm «%s» har allerede en vindushåndterer; prøv å bruke flagget --replace for å erstatte aktiv vindushåndterer."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:603
 | 
			
		||||
#: ../src/core/screen.c:607
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Screen %d on display '%s' is invalid\n"
 | 
			
		||||
msgstr "Skjerm %d på display «%s» er ugyldig\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/util.c:121
 | 
			
		||||
#: ../src/core/util.c:118
 | 
			
		||||
msgid "Mutter was compiled without support for verbose mode\n"
 | 
			
		||||
msgstr "Mutter er kompilert uten støtte for «verbose» modus\n"
 | 
			
		||||
 | 
			
		||||
@@ -604,3 +598,383 @@ msgstr ""
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s (on %s)"
 | 
			
		||||
msgstr "%s (på %s)"
 | 
			
		||||
 | 
			
		||||
#~ msgid ""
 | 
			
		||||
#~ "Blend format is \"blend/bg_color/fg_color/alpha\", \"%s\" does not fit "
 | 
			
		||||
#~ "the format"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
#~ "Blandingsformat er «blend/bg_color/fg_color/alpha», «%s» passer ikke i "
 | 
			
		||||
#~ "formatet"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Could not parse alpha value \"%s\" in blended color"
 | 
			
		||||
#~ msgstr "Kunne ikke lese alpha-verdi «%s» i blandet farge"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Alpha value \"%s\" in blended color is not between 0.0 and 1.0"
 | 
			
		||||
#~ msgstr "Alpha-verdi «%s» i blandet farge er ikke mellom 0.0 og 1.0"
 | 
			
		||||
 | 
			
		||||
#~ msgid ""
 | 
			
		||||
#~ "Shade format is \"shade/base_color/factor\", \"%s\" does not fit the "
 | 
			
		||||
#~ "format"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
#~ "Skyggeformatet er «shade/base_color/factor», «%s» passer ikke i formatet"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Could not parse shade factor \"%s\" in shaded color"
 | 
			
		||||
#~ msgstr "Kunne ikke lese skyggefaktor «%s» i skyggelagt farge"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Shade factor \"%s\" in shaded color is negative"
 | 
			
		||||
#~ msgstr "Skyggefaktor «%s» i skyggelagt farge er negativ"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Could not parse color \"%s\""
 | 
			
		||||
#~ msgstr "Kunne ikke lese farge «%s»"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Coordinate expression contains character '%s' which is not allowed"
 | 
			
		||||
#~ msgstr "Koordinatuttrykk inneholder tegn «%s» som ikke er tillatt"
 | 
			
		||||
 | 
			
		||||
#~ msgid ""
 | 
			
		||||
#~ "Coordinate expression contains floating point number '%s' which could not "
 | 
			
		||||
#~ "be parsed"
 | 
			
		||||
#~ msgstr "Koordinatuttrykk inneholder flyttall «%s» som ikke kunne tolkes"
 | 
			
		||||
 | 
			
		||||
#~ msgid ""
 | 
			
		||||
#~ "Coordinate expression contains integer '%s' which could not be parsed"
 | 
			
		||||
#~ msgstr "Koordinatuttrykk inneholder heltall «%s» som ikke kunne tolkes"
 | 
			
		||||
 | 
			
		||||
#~ msgid ""
 | 
			
		||||
#~ "Coordinate expression contained unknown operator at the start of this "
 | 
			
		||||
#~ "text: \"%s\""
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
#~ "Koordinatuttrykket inneholdt en ukjent operator ved begynnelsen av denne "
 | 
			
		||||
#~ "teksten: «%s»"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Coordinate expression was empty or not understood"
 | 
			
		||||
#~ msgstr "Koordinatuttrykket var tomt eller ble ikke forstått"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Coordinate expression results in division by zero"
 | 
			
		||||
#~ msgstr "Koordinatuttrykket resulterer i divisjon med null"
 | 
			
		||||
 | 
			
		||||
#~ msgid ""
 | 
			
		||||
#~ "Coordinate expression tries to use mod operator on a floating-point number"
 | 
			
		||||
#~ msgstr "Koordinatuttrykket prøver å bruke mod-operator på et flyttall"
 | 
			
		||||
 | 
			
		||||
#~ msgid ""
 | 
			
		||||
#~ "Coordinate expression has an operator \"%s\" where an operand was expected"
 | 
			
		||||
#~ msgstr "Koordinatuttrykket har en operator «%s» hvor en operand var ventet"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Coordinate expression had an operand where an operator was expected"
 | 
			
		||||
#~ msgstr "Koordinatuttrykket hadde en operand hvor en operator var ventet"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Coordinate expression ended with an operator instead of an operand"
 | 
			
		||||
#~ msgstr "Koordinatuttrykket sluttet med en operator i stedet for en operand"
 | 
			
		||||
 | 
			
		||||
#~ msgid ""
 | 
			
		||||
#~ "Coordinate expression has operator \"%c\" following operator \"%c\" with "
 | 
			
		||||
#~ "no operand in between"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
#~ "Koordinatuttrykket har en operator «%c» etter en operator «%c» og ingen "
 | 
			
		||||
#~ "operand mellom dem."
 | 
			
		||||
 | 
			
		||||
#~ msgid "Coordinate expression had unknown variable or constant \"%s\""
 | 
			
		||||
#~ msgstr "Koordinatuttrykket haddeen ukjent variabel eller konstant «%s»"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Coordinate expression parser overflowed its buffer."
 | 
			
		||||
#~ msgstr "Tolkeren for koordinatuttrykk oversteg buffergrensen."
 | 
			
		||||
 | 
			
		||||
#~ msgid ""
 | 
			
		||||
#~ "Coordinate expression had a close parenthesis with no open parenthesis"
 | 
			
		||||
#~ msgstr "Koordinatuttrykket hadde en parantes slutt uten parantes start"
 | 
			
		||||
 | 
			
		||||
#~ msgid ""
 | 
			
		||||
#~ "Coordinate expression had an open parenthesis with no close parenthesis"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
#~ "Koordinatuttrykket hadde en åpen parantes uten en avsluttende parantes"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Coordinate expression doesn't seem to have any operators or operands"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
#~ "Koordinatuttrykket ser ikke ut til å ha noen operatorer eller operander"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Theme contained an expression that resulted in an error: %s\n"
 | 
			
		||||
#~ msgstr "Tema inneholdt et uttrykk som resulterte i en feil: %s\n"
 | 
			
		||||
 | 
			
		||||
#~ msgid ""
 | 
			
		||||
#~ "<button function=\"%s\" state=\"%s\" draw_ops=\"whatever\"/> must be "
 | 
			
		||||
#~ "specified for this frame style"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
#~ "<button function=«%s» state=«%s» draw_ops=«ett-eller-annet»/> må "
 | 
			
		||||
#~ "spesifiseres for denne rammestilen"
 | 
			
		||||
 | 
			
		||||
#~ msgid ""
 | 
			
		||||
#~ "Missing <frame state=\"%s\" resize=\"%s\" focus=\"%s\" style=\"whatever\"/"
 | 
			
		||||
#~ ">"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
#~ "Mangler <frame state=«%s» resize=«%s» focus=«%s» stil=«ett-eller-annet»/>"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Failed to load theme \"%s\": %s\n"
 | 
			
		||||
#~ msgstr "Klarte ikke å laste tema «%s»: %s\n"
 | 
			
		||||
 | 
			
		||||
#~ msgid "No <%s> set for theme \"%s\""
 | 
			
		||||
#~ msgstr "<%s> er ikke satt for tema «%s»"
 | 
			
		||||
 | 
			
		||||
#~ msgid ""
 | 
			
		||||
#~ "No frame style set for window type \"%s\" in theme \"%s\", add a <window "
 | 
			
		||||
#~ "type=\"%s\" style_set=\"whatever\"/> element"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
#~ "Ingen rammestil satt for vindutype «%s» i tema «%s», legg til et <window "
 | 
			
		||||
#~ "type=«%s» style_set=«ett-eller-annet»/>-element"
 | 
			
		||||
 | 
			
		||||
#~ 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"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Constant \"%s\" has already been defined"
 | 
			
		||||
#~ msgstr "Konstant «%s» er allerede definert"
 | 
			
		||||
 | 
			
		||||
#~ msgid "No \"%s\" attribute on element <%s>"
 | 
			
		||||
#~ msgstr "Ingen «%s»-attributt på element <%s>"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Line %d character %d: %s"
 | 
			
		||||
#~ msgstr "Linje %d tegn %d: %s"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Attribute \"%s\" repeated twice on the same <%s> element"
 | 
			
		||||
#~ msgstr "Attributt «%s» gjentatt to ganger på samme <%s>-element"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Attribute \"%s\" is invalid on <%s> element in this context"
 | 
			
		||||
#~ msgstr "Attributt «%s» er ugyldig på <%s>-element i denne konteksten"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Could not parse \"%s\" as an integer"
 | 
			
		||||
#~ msgstr "Kunne ikke lese «%s» som et heltall"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Did not understand trailing characters \"%s\" in string \"%s\""
 | 
			
		||||
#~ msgstr "Forsto ikke etterslepende tegn «%s» i streng «%s»"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Integer %ld must be positive"
 | 
			
		||||
#~ msgstr "Heltall %ld må være positivt"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Integer %ld is too large, current max is %d"
 | 
			
		||||
#~ msgstr "Heltall %ld er for stort, maksimalverdien er %d"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Could not parse \"%s\" as a floating point number"
 | 
			
		||||
#~ msgstr "Kunne ikke lese «%s» som et flyttall"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Boolean values must be \"true\" or \"false\" not \"%s\""
 | 
			
		||||
#~ msgstr "Bolske verdier må være «sann» eller «usann» ikke «%s»"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Angle must be between 0.0 and 360.0, was %g\n"
 | 
			
		||||
#~ msgstr "Vinkelen må være mellom 0.0 og 360.0, var %g\n"
 | 
			
		||||
 | 
			
		||||
#~ msgid ""
 | 
			
		||||
#~ "Alpha must be between 0.0 (invisible) and 1.0 (fully opaque), was %g\n"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
#~ "Alpha må være mellom 0.0 (usynlig) og 1.0 (helt ugjennomsiktig), var %g\n"
 | 
			
		||||
 | 
			
		||||
#~ msgid ""
 | 
			
		||||
#~ "Invalid title scale \"%s\" (must be one of xx-small,x-small,small,medium,"
 | 
			
		||||
#~ "large,x-large,xx-large)\n"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
#~ "Ugyldig skalering av tittel «%s» (må være en av xx-small,x-small,small,"
 | 
			
		||||
#~ "medium,large,x-large,xx-large)\n"
 | 
			
		||||
 | 
			
		||||
#~ msgid "<%s> name \"%s\" used a second time"
 | 
			
		||||
#~ msgstr "<%s> navn «%s» brukt på nytt"
 | 
			
		||||
 | 
			
		||||
#~ msgid "<%s> parent \"%s\" has not been defined"
 | 
			
		||||
#~ msgstr "<%s> opphav «%s» er ikke definert"
 | 
			
		||||
 | 
			
		||||
#~ msgid "<%s> geometry \"%s\" has not been defined"
 | 
			
		||||
#~ msgstr "<%s> geometri «%s» er ikke definert"
 | 
			
		||||
 | 
			
		||||
#~ msgid "<%s> must specify either a geometry or a parent that has a geometry"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
#~ "<%s> må spesifisere enten en geometri eller et opphav som har geometri"
 | 
			
		||||
 | 
			
		||||
#~ msgid "You must specify a background for an alpha value to be meaningful"
 | 
			
		||||
#~ msgstr "Du må oppgi en bakgrunn for at en alpha-verdi skal ha mening"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Unknown type \"%s\" on <%s> element"
 | 
			
		||||
#~ msgstr "Ukjent type «%s» på <%s>-element"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Unknown style_set \"%s\" on <%s> element"
 | 
			
		||||
#~ msgstr "Ukjent style_set «%s» på <%s>-element"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Window type \"%s\" has already been assigned a style set"
 | 
			
		||||
#~ msgstr "Vindutype «%s» er allerede tildelt et stilsett"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Element <%s> is not allowed below <%s>"
 | 
			
		||||
#~ msgstr "Element <%s> er ikke tillatt under <%s>"
 | 
			
		||||
 | 
			
		||||
#~ msgid ""
 | 
			
		||||
#~ "Cannot specify both \"button_width\"/\"button_height\" and \"aspect_ratio"
 | 
			
		||||
#~ "\" for buttons"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
#~ "Kan ikke spesifisere både «button_width»/«button_height» og "
 | 
			
		||||
#~ "«aspect_ratio» for knapper"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Distance \"%s\" is unknown"
 | 
			
		||||
#~ msgstr "Avstand «%s» er ukjent"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Aspect ratio \"%s\" is unknown"
 | 
			
		||||
#~ msgstr "Aspektrate «%s» er ukjent"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Border \"%s\" is unknown"
 | 
			
		||||
#~ msgstr "Grense «%s» er ukjent"
 | 
			
		||||
 | 
			
		||||
#~ msgid "No \"start_angle\" or \"from\" attribute on element <%s>"
 | 
			
		||||
#~ msgstr "Ingen «start_angle» eller «from»-attributt på element <%s>"
 | 
			
		||||
 | 
			
		||||
#~ msgid "No \"extent_angle\" or \"to\" attribute on element <%s>"
 | 
			
		||||
#~ msgstr "Ingen «extent_angle» eller «to»-attributt <%s>-element"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Did not understand value \"%s\" for type of gradient"
 | 
			
		||||
#~ msgstr "Forsto ikke verdi «%s» for gradienttype"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Did not understand fill type \"%s\" for <%s> element"
 | 
			
		||||
#~ msgstr "Forsto ikke fyll-type «%s» for <%s>-element"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Did not understand state \"%s\" for <%s> element"
 | 
			
		||||
#~ msgstr "Forsto ikke tilstand «%s» for element <%s>"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Did not understand shadow \"%s\" for <%s> element"
 | 
			
		||||
#~ msgstr "Forsto ikke skygge «%s» for element <%s>"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Did not understand arrow \"%s\" for <%s> element"
 | 
			
		||||
#~ msgstr "Forsto ikke pil «%s» for element <%s>"
 | 
			
		||||
 | 
			
		||||
#~ msgid "No <draw_ops> called \"%s\" has been defined"
 | 
			
		||||
#~ msgstr "Ingen <draw_ops> kalt «%s» er definert"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Including draw_ops \"%s\" here would create a circular reference"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
#~ "Hvis du tar med draw_ops «%s» her vil dette lage en sirkulær referanse"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Unknown position \"%s\" for frame piece"
 | 
			
		||||
#~ msgstr "Ukjent posisjon «%s» for rammesdel"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Frame style already has a piece at position %s"
 | 
			
		||||
#~ msgstr "Rammestil har allerede en del i posisjon %s"
 | 
			
		||||
 | 
			
		||||
#~ msgid "No <draw_ops> with the name \"%s\" has been defined"
 | 
			
		||||
#~ msgstr "Ingen <draw_ops> med navn «%s» er definert"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Unknown function \"%s\" for button"
 | 
			
		||||
#~ msgstr "Ukjent funksjon «%s» for knapp"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Button function \"%s\" does not exist in this version (%d, need %d)"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
#~ "Knappefunksjon «%s» eksisterer ikke i denne versjonen (%d, trenger %d)"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Unknown state \"%s\" for button"
 | 
			
		||||
#~ msgstr "Ukjent tilstand «%s» for knapp"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Frame style already has a button for function %s state %s"
 | 
			
		||||
#~ msgstr "Rammestil har allerede en knapp for funksjon %s tilstand %s"
 | 
			
		||||
 | 
			
		||||
#~ msgid "\"%s\" is not a valid value for focus attribute"
 | 
			
		||||
#~ msgstr "«%s» er ikke en gyldig verdi for fokusattributt"
 | 
			
		||||
 | 
			
		||||
#~ msgid "\"%s\" is not a valid value for state attribute"
 | 
			
		||||
#~ msgstr "«%s» er ikke en gyldig verdi for tilstandsattributt"
 | 
			
		||||
 | 
			
		||||
#~ msgid "A style called \"%s\" has not been defined"
 | 
			
		||||
#~ msgstr "En stil med navn «%s» er ikke definert"
 | 
			
		||||
 | 
			
		||||
#~ msgid "\"%s\" is not a valid value for resize attribute"
 | 
			
		||||
#~ msgstr "«%s» er ikke en gyldig verdi for attributt for endring av størrelse"
 | 
			
		||||
 | 
			
		||||
#~ msgid ""
 | 
			
		||||
#~ "Should not have \"resize\" attribute on <%s> element for maximized/shaded "
 | 
			
		||||
#~ "states"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
#~ "Skal ikke være noen «resize»-attributt på <%s>-element for maksimert/"
 | 
			
		||||
#~ "skyggelagt tilstand"
 | 
			
		||||
 | 
			
		||||
#~ msgid ""
 | 
			
		||||
#~ "Should not have \"resize\" attribute on <%s> element for maximized states"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
#~ "Skal ikke være noen «resize»-attributt på <%s>-element for maksimert "
 | 
			
		||||
#~ "tilstand"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Style has already been specified for state %s resize %s focus %s"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
#~ "Stil er allerede spesifisert for tilstand %s størrelsesendring %s fokus %s"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Style has already been specified for state %s focus %s"
 | 
			
		||||
#~ msgstr "Stil er allerede spesifisert for tilstand %s fokus %s"
 | 
			
		||||
 | 
			
		||||
#~ msgid ""
 | 
			
		||||
#~ "Can't have a two draw_ops for a <piece> element (theme specified a "
 | 
			
		||||
#~ "draw_ops attribute and also a <draw_ops> element, or specified two "
 | 
			
		||||
#~ "elements)"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
#~ "Kan ikke ha to draw_ops for et <piece>-element (tema spesifiserte en "
 | 
			
		||||
#~ "draw_ops-attributt i tillegg til et <draw_ops>-element, eller så "
 | 
			
		||||
#~ "spesifiserte det to elementer)"
 | 
			
		||||
 | 
			
		||||
#~ msgid ""
 | 
			
		||||
#~ "Can't have a two draw_ops for a <button> element (theme specified a "
 | 
			
		||||
#~ "draw_ops attribute and also a <draw_ops> element, or specified two "
 | 
			
		||||
#~ "elements)"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
#~ "Kan ikke ha to draw_ops for et <button>-element (tema spesifiserte en "
 | 
			
		||||
#~ "draw_ops-attributt i tillegg til et <draw_ops>-element, eller det "
 | 
			
		||||
#~ "spesifiserte to elementer)"
 | 
			
		||||
 | 
			
		||||
#~ msgid ""
 | 
			
		||||
#~ "Can't have a two draw_ops for a <menu_icon> element (theme specified a "
 | 
			
		||||
#~ "draw_ops attribute and also a <draw_ops> element, or specified two "
 | 
			
		||||
#~ "elements)"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
#~ "Kan ikke ha to draw_ops for et <menu_icon>-element (tema spesifiserte en "
 | 
			
		||||
#~ "draw_ops-attributt i tillegg til et <draw_ops>-element, eller det "
 | 
			
		||||
#~ "spesifiserte to elementer)"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Bad version specification '%s'"
 | 
			
		||||
#~ msgstr "Ugyldig versjonspesifikasjon «%s»"
 | 
			
		||||
 | 
			
		||||
#~ msgid ""
 | 
			
		||||
#~ "\"version\" attribute cannot be used in metacity-theme-1.xml or metacity-"
 | 
			
		||||
#~ "theme-2.xml"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
#~ "«version»-attributt kan ikke brukes i metacity-theme-1.xml eller metacity-"
 | 
			
		||||
#~ "theme-2.xml"
 | 
			
		||||
 | 
			
		||||
#~ msgid ""
 | 
			
		||||
#~ "Theme requires version %s but latest supported theme version is %d.%d"
 | 
			
		||||
#~ msgstr "Tema krever versjon %s men siste støttede temaversjon er %d.%d"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Outermost element in theme must be <metacity_theme> not <%s>"
 | 
			
		||||
#~ msgstr "Ytterste element i temaet må være <metacity_theme> ikke <%s>"
 | 
			
		||||
 | 
			
		||||
#~ msgid ""
 | 
			
		||||
#~ "Element <%s> is not allowed inside a name/author/date/description element"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
#~ "Element <%s> er ikke tillatt inne i et name/author/date/description "
 | 
			
		||||
#~ "element"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Element <%s> is not allowed inside a <constant> element"
 | 
			
		||||
#~ msgstr "Element <%s> er ikke tillatt inne i et <constand> element"
 | 
			
		||||
 | 
			
		||||
#~ msgid ""
 | 
			
		||||
#~ "Element <%s> is not allowed inside a distance/border/aspect_ratio element"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
#~ "Element <%s> er ikke tillatt inne i et avstand/kant/aspektrate-element"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Element <%s> is not allowed inside a draw operation element"
 | 
			
		||||
#~ msgstr "Element <%s> er ikke tillatt inne i et element for tegneoperasjon"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Element <%s> is not allowed inside a <%s> element"
 | 
			
		||||
#~ msgstr "Element <%s> er ikke tillatt inne i et <%s>-element"
 | 
			
		||||
 | 
			
		||||
#~ msgid "No draw_ops provided for frame piece"
 | 
			
		||||
#~ msgstr "Ingen draw_ops tilbys for rammedelen"
 | 
			
		||||
 | 
			
		||||
#~ msgid "No draw_ops provided for button"
 | 
			
		||||
#~ msgstr "Ingen draw_ops tilbys for knappen"
 | 
			
		||||
 | 
			
		||||
#~ msgid "No text is allowed inside element <%s>"
 | 
			
		||||
#~ msgstr "Ingen tekst er tillatt inne i element <%s>"
 | 
			
		||||
 | 
			
		||||
#~ msgid "<%s> specified twice for this theme"
 | 
			
		||||
#~ msgstr "<%s> spesifisert to ganger for dette temaet"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Failed to find a valid file for theme %s\n"
 | 
			
		||||
#~ msgstr "Fant ikke en gyldig fil for tema %s\n"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										93
									
								
								po/pl.po
									
									
									
									
									
								
							
							
						
						
									
										93
									
								
								po/pl.po
									
									
									
									
									
								
							@@ -9,14 +9,14 @@
 | 
			
		||||
# Marek Stępień <marcoos@aviary.pl>, 2007.
 | 
			
		||||
# Wadim Dziedzic <wdziedzic@aviary.pl>, 2007.
 | 
			
		||||
# Tomasz Dominikowski <dominikowski@gmail.com>, 2008-2009.
 | 
			
		||||
# Piotr Drąg <piotrdrag@gmail.com>, 2010-2016.
 | 
			
		||||
# Aviary.pl <gnomepl@aviary.pl>, 2007-2016.
 | 
			
		||||
# Piotr Drąg <piotrdrag@gmail.com>, 2010-2015.
 | 
			
		||||
# Aviary.pl <gnomepl@aviary.pl>, 2007-2015.
 | 
			
		||||
msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: mutter\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2016-02-25 17:29+0100\n"
 | 
			
		||||
"PO-Revision-Date: 2016-02-25 17:30+0100\n"
 | 
			
		||||
"POT-Creation-Date: 2015-03-05 00:23+0100\n"
 | 
			
		||||
"PO-Revision-Date: 2015-03-05 00:24+0100\n"
 | 
			
		||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
 | 
			
		||||
"Language-Team: Polish <gnomepl@aviary.pl>\n"
 | 
			
		||||
"Language: pl\n"
 | 
			
		||||
@@ -285,10 +285,10 @@ msgid ""
 | 
			
		||||
"\"Windows key\" on PC hardware. It's expected that this binding either the "
 | 
			
		||||
"default or set to the empty string."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Ten klawisz inicjuje tryb „overlay” (nakładki), który jest połączeniem "
 | 
			
		||||
"podglądu okien i systemu uruchamiania programów. Domyślnie jest przeznaczony "
 | 
			
		||||
"do powiązania z klawiszem „Windows” na komputerach typu PC. Ustawienie tego "
 | 
			
		||||
"powiązania powinno być domyślne lub puste."
 | 
			
		||||
"Ten klawisz inicjuje tryb \"overlay\", który jest połączeniem podglądu okien "
 | 
			
		||||
"i systemu uruchamiania programów. Domyślnie jest przeznaczony do powiązania "
 | 
			
		||||
"z klawiszem \"Windows\" na komputerach typu PC. Ustawienie tego powiązania "
 | 
			
		||||
"powinno być domyślne lub puste."
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:3
 | 
			
		||||
msgid "Attach modal dialogs"
 | 
			
		||||
@@ -300,9 +300,9 @@ msgid ""
 | 
			
		||||
"attached to the titlebar of the parent window and are moved together with "
 | 
			
		||||
"the parent window."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Jeśli wynosi wartość „true”, to modalne okna dialogowe pojawiają się "
 | 
			
		||||
"dołączone do paska tytułowego okna nadrzędnego zamiast posiadać oddzielne "
 | 
			
		||||
"paski tytułowe i są przenoszone razem z nim."
 | 
			
		||||
"Jeśli wynosi \"true\", to modalne okna dialogowe pojawiają się dołączone do "
 | 
			
		||||
"paska tytułowego okna nadrzędnego zamiast posiadać oddzielne paski tytułowe "
 | 
			
		||||
"i są przenoszone razem z nim."
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:5
 | 
			
		||||
msgid "Enable edge tiling when dropping windows on screen edges"
 | 
			
		||||
@@ -332,8 +332,8 @@ msgid ""
 | 
			
		||||
"gnome.desktop.wm.preferences)."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Określa, czy obszary robocze są zarządzane dynamicznie, czy istnieje "
 | 
			
		||||
"statyczna liczba obszarów (określona przez klucz „num-workspaces” w „org."
 | 
			
		||||
"gnome.desktop.wm.preferences”)."
 | 
			
		||||
"statyczna liczba obszarów (określona przez klucz \"num-workspaces\" w org."
 | 
			
		||||
"gnome.desktop.wm.preferences)."
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:9
 | 
			
		||||
msgid "Workspaces only on primary"
 | 
			
		||||
@@ -369,9 +369,9 @@ msgid ""
 | 
			
		||||
"the focus will not be changed immediately when entering a window, but only "
 | 
			
		||||
"after the pointer stops moving."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Jeśli jest ustawione na wartość „true”, a tryb aktywności to „sloppy” lub "
 | 
			
		||||
"„mouse”, to aktywność nie będzie zmieniana od razu po przejściu do okna, ale "
 | 
			
		||||
"dopiero po zatrzymaniu ruchu kursora."
 | 
			
		||||
"Jeśli jest ustawione na wartość \"true\", a tryb aktywności to \"sloppy\" "
 | 
			
		||||
"lub \"mouse\", to aktywność nie będzie zmieniana od razu po przejściu do "
 | 
			
		||||
"okna, ale dopiero po zatrzymaniu ruchu kursora."
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:15
 | 
			
		||||
msgid "Draggable border width"
 | 
			
		||||
@@ -409,7 +409,7 @@ msgid ""
 | 
			
		||||
"When true, the new windows will always be put in the center of the active "
 | 
			
		||||
"screen of the monitor."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Jeśli wynosi wartość „true”, to nowe okna będą zawsze umieszczane na środku "
 | 
			
		||||
"Jeśli wynosi \"true\", to nowe okna będą zawsze umieszczane na środku "
 | 
			
		||||
"aktywnego ekranu monitora."
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:21
 | 
			
		||||
@@ -468,22 +468,22 @@ msgstr "Przełączenie na 11. konsolę wirtualną"
 | 
			
		||||
msgid "Switch to VT 12"
 | 
			
		||||
msgstr "Przełączenie na 12. konsolę wirtualną"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:518
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:364
 | 
			
		||||
msgid "Built-in display"
 | 
			
		||||
msgstr "Wbudowany ekran"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:544
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:391
 | 
			
		||||
msgid "Unknown"
 | 
			
		||||
msgstr "Nieznany"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:546
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:393
 | 
			
		||||
msgid "Unknown Display"
 | 
			
		||||
msgstr "Nieznany ekran"
 | 
			
		||||
 | 
			
		||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
 | 
			
		||||
#. * size in inches, like 'Dell 15"'
 | 
			
		||||
#.
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:554
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:401
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s %s"
 | 
			
		||||
msgstr "%s %s"
 | 
			
		||||
@@ -496,7 +496,7 @@ msgid ""
 | 
			
		||||
"Another compositing manager is already running on screen %i on display \"%s"
 | 
			
		||||
"\"."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Inny menedżer składania jest już uruchomiony na podekranie %i ekranu „%s”."
 | 
			
		||||
"Inny menedżer składania jest już uruchomiony na podekranie %i ekranu \"%s\"."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/bell.c:185
 | 
			
		||||
msgid "Bell event"
 | 
			
		||||
@@ -505,7 +505,7 @@ msgstr "Zdarzenie sygnału dźwiękowego"
 | 
			
		||||
#: ../src/core/delete.c:127
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "“%s” is not responding."
 | 
			
		||||
msgstr "Okno „%s” nie odpowiada."
 | 
			
		||||
msgstr "Okno \"%s\" nie odpowiada."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/delete.c:129
 | 
			
		||||
msgid "Application is not responding."
 | 
			
		||||
@@ -525,46 +525,43 @@ msgstr "_Czekaj"
 | 
			
		||||
msgid "_Force Quit"
 | 
			
		||||
msgstr "_Zakończ"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/display.c:555
 | 
			
		||||
#: ../src/core/display.c:562
 | 
			
		||||
#, 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"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Otwarcie połączenia z ekranem \"%s\" systemu X Window się nie powiodło\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:181
 | 
			
		||||
#: ../src/core/main.c:176
 | 
			
		||||
msgid "Disable connection to session manager"
 | 
			
		||||
msgstr "Rozłącza połączenie z menedżerem sesji"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:187
 | 
			
		||||
#: ../src/core/main.c:182
 | 
			
		||||
msgid "Replace the running window manager"
 | 
			
		||||
msgstr "Zastępuje uruchomionego menedżera okien"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
#: ../src/core/main.c:188
 | 
			
		||||
msgid "Specify session management ID"
 | 
			
		||||
msgstr "Podaje identyfikator zarządzania sesją"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:198
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
msgid "X Display to use"
 | 
			
		||||
msgstr "Używany ekran X"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:204
 | 
			
		||||
#: ../src/core/main.c:199
 | 
			
		||||
msgid "Initialize session from savefile"
 | 
			
		||||
msgstr "Inicjuje sesję z zapisanego pliku"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:210
 | 
			
		||||
#: ../src/core/main.c:205
 | 
			
		||||
msgid "Make X calls synchronous"
 | 
			
		||||
msgstr "Synchroniczne wywołania X"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:217
 | 
			
		||||
#: ../src/core/main.c:212
 | 
			
		||||
msgid "Run as a wayland compositor"
 | 
			
		||||
msgstr "Uruchamia jako menedżer składania Wayland"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:223
 | 
			
		||||
msgid "Run as a nested compositor"
 | 
			
		||||
msgstr "Uruchamia jako osadzony menedżer składania"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:231
 | 
			
		||||
#: ../src/core/main.c:220
 | 
			
		||||
msgid "Run as a full display server, rather than nested"
 | 
			
		||||
msgstr "Uruchamia jako pełny serwer wyświetlania zamiast osadzonego"
 | 
			
		||||
msgstr "Uruchamia pełny serwer wyświetlania zamiast osadzonego"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/mutter.c:39
 | 
			
		||||
#, c-format
 | 
			
		||||
@@ -588,38 +585,38 @@ msgstr "Wyświetla wersję"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/mutter.c:59
 | 
			
		||||
msgid "Mutter plugin to use"
 | 
			
		||||
msgstr "Używana wtyczka menedżera Mutter"
 | 
			
		||||
msgstr "Używana wtyczka programu Mutter"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/prefs.c:1997
 | 
			
		||||
#: ../src/core/prefs.c:2004
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Workspace %d"
 | 
			
		||||
msgstr "%d. obszar roboczy"
 | 
			
		||||
msgstr "Obszar roboczy %d"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:521
 | 
			
		||||
#: ../src/core/screen.c:525
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"Display \"%s\" already has a window manager; try using the --replace option "
 | 
			
		||||
"to replace the current window manager."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Na ekranie „%s” działa już menedżer okien. Aby zastąpić działającego "
 | 
			
		||||
"menedżera okien, należy użyć opcji „--replace”."
 | 
			
		||||
"Na ekranie \"%s\" działa już menedżer okien. Aby zastąpić działającego "
 | 
			
		||||
"menedżera okien, proszę spróbować użyć opcji --replace."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:603
 | 
			
		||||
#: ../src/core/screen.c:607
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Screen %d on display '%s' is invalid\n"
 | 
			
		||||
msgstr "Podekran %d ekranu „%s” jest nieprawidłowy\n"
 | 
			
		||||
msgstr "Podekran %d ekranu \"%s\" jest nieprawidłowy\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/util.c:118
 | 
			
		||||
msgid "Mutter was compiled without support for verbose mode\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Menedżer Mutter został skompilowany bez obsługi trybu z obszerną informacją\n"
 | 
			
		||||
"Program Mutter został skompilowany bez obsługi trybu z obszerną informacją\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/x11/session.c:1815
 | 
			
		||||
msgid ""
 | 
			
		||||
"These windows do not support "save current setup" and will have to "
 | 
			
		||||
"be restarted manually next time you log in."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Te okna nie obsługują opcji zapisu obecnego stanu („save current setup”), "
 | 
			
		||||
"Te okna nie obsługują opcji zapisu obecnego stanu (\"save current setup\"), "
 | 
			
		||||
"więc przy następnym zalogowaniu będą musiały zostać uruchomione ręcznie."
 | 
			
		||||
 | 
			
		||||
#: ../src/x11/window-props.c:549
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										45
									
								
								po/pt_BR.po
									
									
									
									
									
								
							
							
						
						
									
										45
									
								
								po/pt_BR.po
									
									
									
									
									
								
							@@ -15,23 +15,22 @@
 | 
			
		||||
# Rodrigo Padula de Oliveira <contato@rodrigopadula.com>, 2011.
 | 
			
		||||
# Rafael Ferreira <rafael.f.f1@gmail.com>, 2013, 2014.
 | 
			
		||||
# Enrico Nicoletto <liverig@gmail.com>, 2012, 2014.
 | 
			
		||||
# Artur de Aquino Morais <artur.morais93@outlook.com>, 2016.
 | 
			
		||||
#
 | 
			
		||||
msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: mutter\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
 | 
			
		||||
"product=mutter&keywords=I18N+L10N&component=general\n"
 | 
			
		||||
"POT-Creation-Date: 2016-02-25 13:40+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2016-02-25 13:41-0300\n"
 | 
			
		||||
"Last-Translator: Artur de Aquino Morais <artur.morais93@outlook.com>\n"
 | 
			
		||||
"POT-Creation-Date: 2015-02-26 11:24+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2015-02-26 17:36-0300\n"
 | 
			
		||||
"Last-Translator: Rafael Ferreira <rafael.f.f1@gmail.com>\n"
 | 
			
		||||
"Language-Team: Brazilian Portuguese <gnome-pt_br-list@gnome.org>\n"
 | 
			
		||||
"Language: pt_BR\n"
 | 
			
		||||
"MIME-Version: 1.0\n"
 | 
			
		||||
"Content-Type: text/plain; charset=UTF-8\n"
 | 
			
		||||
"Content-Transfer-Encoding: 8bit\n"
 | 
			
		||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
 | 
			
		||||
"X-Generator: Poedit 1.8.4\n"
 | 
			
		||||
"X-Generator: Poedit 1.7.4\n"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:1
 | 
			
		||||
msgid "Navigation"
 | 
			
		||||
@@ -473,22 +472,22 @@ msgstr "Trocar para o VT 11"
 | 
			
		||||
msgid "Switch to VT 12"
 | 
			
		||||
msgstr "Trocar para o VT 12"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:518
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:364
 | 
			
		||||
msgid "Built-in display"
 | 
			
		||||
msgstr "Tela embutida"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:544
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:391
 | 
			
		||||
msgid "Unknown"
 | 
			
		||||
msgstr "Desconhecido"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:546
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:393
 | 
			
		||||
msgid "Unknown Display"
 | 
			
		||||
msgstr "Monitor desconhecido"
 | 
			
		||||
 | 
			
		||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
 | 
			
		||||
#. * size in inches, like 'Dell 15"'
 | 
			
		||||
#.
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:554
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:401
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s %s"
 | 
			
		||||
msgstr "%s de %s"
 | 
			
		||||
@@ -532,44 +531,40 @@ msgstr "_Esperar"
 | 
			
		||||
msgid "_Force Quit"
 | 
			
		||||
msgstr "_Forçar sair"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/display.c:555
 | 
			
		||||
#: ../src/core/display.c:562
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Failed to open X Window System display '%s'\n"
 | 
			
		||||
msgstr "Falha ao abrir a exibição \"%s\" do sistema de janelas X\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:181
 | 
			
		||||
#: ../src/core/main.c:176
 | 
			
		||||
msgid "Disable connection to session manager"
 | 
			
		||||
msgstr "Desabilitar a conexão com o gerenciador de sessões"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:187
 | 
			
		||||
#: ../src/core/main.c:182
 | 
			
		||||
msgid "Replace the running window manager"
 | 
			
		||||
msgstr "Substituir o gerenciador de janelas em execução"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
#: ../src/core/main.c:188
 | 
			
		||||
msgid "Specify session management ID"
 | 
			
		||||
msgstr "Especificar o ID do gerenciador de sessões"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:198
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
msgid "X Display to use"
 | 
			
		||||
msgstr "Exibição do X a ser utilizada"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:204
 | 
			
		||||
#: ../src/core/main.c:199
 | 
			
		||||
msgid "Initialize session from savefile"
 | 
			
		||||
msgstr "Inicializar a sessão a partir do arquivo salvo"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:210
 | 
			
		||||
#: ../src/core/main.c:205
 | 
			
		||||
msgid "Make X calls synchronous"
 | 
			
		||||
msgstr "Fazer X chamadas síncronas"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:217
 | 
			
		||||
#: ../src/core/main.c:212
 | 
			
		||||
msgid "Run as a wayland compositor"
 | 
			
		||||
msgstr "Executar como um compositor wayland"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:223
 | 
			
		||||
msgid "Run as a nested compositor"
 | 
			
		||||
msgstr "Executar como um compositor aninhado"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:231
 | 
			
		||||
#: ../src/core/main.c:220
 | 
			
		||||
msgid "Run as a full display server, rather than nested"
 | 
			
		||||
msgstr "Executar como um servidor de tela cheia, ao invés de aninhado"
 | 
			
		||||
 | 
			
		||||
@@ -597,12 +592,12 @@ msgstr "Versão impressa"
 | 
			
		||||
msgid "Mutter plugin to use"
 | 
			
		||||
msgstr "Plug-in do Mutter para usar"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/prefs.c:1997
 | 
			
		||||
#: ../src/core/prefs.c:2004
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Workspace %d"
 | 
			
		||||
msgstr "Espaço de trabalho %d"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:521
 | 
			
		||||
#: ../src/core/screen.c:525
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"Display \"%s\" already has a window manager; try using the --replace option "
 | 
			
		||||
@@ -611,7 +606,7 @@ msgstr ""
 | 
			
		||||
"A exibição \"%s\" já possui um gerenciador de janelas; tente usar a opção --"
 | 
			
		||||
"replace para substituir o gerenciador de janelas atual."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:603
 | 
			
		||||
#: ../src/core/screen.c:607
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Screen %d on display '%s' is invalid\n"
 | 
			
		||||
msgstr "A tela %d na exibição \"%s\" é inválida\n"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										53
									
								
								po/ru.po
									
									
									
									
									
								
							
							
						
						
									
										53
									
								
								po/ru.po
									
									
									
									
									
								
							@@ -9,16 +9,15 @@
 | 
			
		||||
# Yuri Kozlov <yuray@komyakino.ru>, 2011.
 | 
			
		||||
# Yuri Myasoedov <ymyasoedov@yandex.ru>, 2012-2014, 2015.
 | 
			
		||||
# Ivan Komaritsyn <vantu5z@mail.ru>, 2015.
 | 
			
		||||
# Stas Solovey <whats_up@tut.by>, 2016.
 | 
			
		||||
#
 | 
			
		||||
msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: metacity ru\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
 | 
			
		||||
"product=mutter&keywords=I18N+L10N&component=general\n"
 | 
			
		||||
"POT-Creation-Date: 2016-03-03 01:44+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2016-03-03 13:51+0300\n"
 | 
			
		||||
"Last-Translator: Stas Solovey <whats_up@tut.by>\n"
 | 
			
		||||
"POT-Creation-Date: 2015-02-19 23:11+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2015-02-20 13:59+0300\n"
 | 
			
		||||
"Last-Translator: Ivan Komaritsyn <vantu5z@mail.ru>\n"
 | 
			
		||||
"Language-Team: Русский <gnome-cyr@gnome.org>\n"
 | 
			
		||||
"Language: ru\n"
 | 
			
		||||
"MIME-Version: 1.0\n"
 | 
			
		||||
@@ -26,7 +25,7 @@ msgstr ""
 | 
			
		||||
"Content-Transfer-Encoding: 8bit\n"
 | 
			
		||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
 | 
			
		||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
 | 
			
		||||
"X-Generator: Gtranslator 2.91.7\n"
 | 
			
		||||
"X-Generator: Gtranslator 2.91.6\n"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:1
 | 
			
		||||
msgid "Navigation"
 | 
			
		||||
@@ -442,41 +441,46 @@ msgid "Switch to VT 7"
 | 
			
		||||
msgstr "Переключиться на виртуальный терминал 7"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:8
 | 
			
		||||
#| msgid "Switch to VT 1"
 | 
			
		||||
msgid "Switch to VT 8"
 | 
			
		||||
msgstr "Переключиться на виртуальный терминал 8"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:9
 | 
			
		||||
#| msgid "Switch to VT 1"
 | 
			
		||||
msgid "Switch to VT 9"
 | 
			
		||||
msgstr "Переключиться на виртуальный терминал 9"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:10
 | 
			
		||||
#| msgid "Switch to VT 1"
 | 
			
		||||
msgid "Switch to VT 10"
 | 
			
		||||
msgstr "Переключиться на виртуальный терминал 10"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:11
 | 
			
		||||
#| msgid "Switch to VT 1"
 | 
			
		||||
msgid "Switch to VT 11"
 | 
			
		||||
msgstr "Переключиться на виртуальный терминал 11"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:12
 | 
			
		||||
#| msgid "Switch to VT 1"
 | 
			
		||||
msgid "Switch to VT 12"
 | 
			
		||||
msgstr "Переключиться на виртуальный терминал 12"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:518
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:364
 | 
			
		||||
msgid "Built-in display"
 | 
			
		||||
msgstr "Встроенный дисплей"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:544
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:391
 | 
			
		||||
msgid "Unknown"
 | 
			
		||||
msgstr "Неизвестный"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:546
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:393
 | 
			
		||||
msgid "Unknown Display"
 | 
			
		||||
msgstr "Неизвестный дисплей"
 | 
			
		||||
 | 
			
		||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
 | 
			
		||||
#. * size in inches, like 'Dell 15"'
 | 
			
		||||
#.
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:554
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:401
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s %s"
 | 
			
		||||
msgstr "%s %s"
 | 
			
		||||
@@ -517,45 +521,40 @@ msgstr "_Подождать"
 | 
			
		||||
msgid "_Force Quit"
 | 
			
		||||
msgstr "Завер_шить"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/display.c:555
 | 
			
		||||
#: ../src/core/display.c:562
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Failed to open X Window System display '%s'\n"
 | 
			
		||||
msgstr "Не удалось открыть дисплей «%s» системы X Window\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:181
 | 
			
		||||
#: ../src/core/main.c:176
 | 
			
		||||
msgid "Disable connection to session manager"
 | 
			
		||||
msgstr "Запретить подключение к менеджеру сеансов"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:187
 | 
			
		||||
#: ../src/core/main.c:182
 | 
			
		||||
msgid "Replace the running window manager"
 | 
			
		||||
msgstr "Заменить запущенный оконный менеджер"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
#: ../src/core/main.c:188
 | 
			
		||||
msgid "Specify session management ID"
 | 
			
		||||
msgstr "Указать идентификатор управления сеансом"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:198
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
msgid "X Display to use"
 | 
			
		||||
msgstr "Используемый дисплей X"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:204
 | 
			
		||||
#: ../src/core/main.c:199
 | 
			
		||||
msgid "Initialize session from savefile"
 | 
			
		||||
msgstr "Инициализировать сеанс из сохранённого файла"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:210
 | 
			
		||||
#: ../src/core/main.c:205
 | 
			
		||||
msgid "Make X calls synchronous"
 | 
			
		||||
msgstr "Сделать X-вызовы синхронными"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:217
 | 
			
		||||
#: ../src/core/main.c:212
 | 
			
		||||
msgid "Run as a wayland compositor"
 | 
			
		||||
msgstr "Запустить в качестве композитора wayland"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:223
 | 
			
		||||
#| msgid "Run as a wayland compositor"
 | 
			
		||||
msgid "Run as a nested compositor"
 | 
			
		||||
msgstr "Запустить в качестве встроенного композитора"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:231
 | 
			
		||||
#: ../src/core/main.c:220
 | 
			
		||||
msgid "Run as a full display server, rather than nested"
 | 
			
		||||
msgstr "Запустить в качестве полноэкранного сервера вместо встроенного"
 | 
			
		||||
 | 
			
		||||
@@ -584,12 +583,12 @@ msgstr "Вывести версию"
 | 
			
		||||
msgid "Mutter plugin to use"
 | 
			
		||||
msgstr "Использовать модуль mutter"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/prefs.c:1997
 | 
			
		||||
#: ../src/core/prefs.c:2004
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Workspace %d"
 | 
			
		||||
msgstr "Рабочее место %d"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:521
 | 
			
		||||
#: ../src/core/screen.c:525
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"Display \"%s\" already has a window manager; try using the --replace option "
 | 
			
		||||
@@ -598,12 +597,12 @@ msgstr ""
 | 
			
		||||
"Дисплей «%s» уже использует менеджер окон; попробуйте использовать параметр "
 | 
			
		||||
"--replace, чтобы заменить текущий менеджер окон."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:603
 | 
			
		||||
#: ../src/core/screen.c:607
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Screen %d on display '%s' is invalid\n"
 | 
			
		||||
msgstr "Недопустимый экран %d дисплея «%s»\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/util.c:121
 | 
			
		||||
#: ../src/core/util.c:118
 | 
			
		||||
msgid "Mutter was compiled without support for verbose mode\n"
 | 
			
		||||
msgstr "Mutter собран без поддержки режима подробных сообщений\n"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										45
									
								
								po/sk.po
									
									
									
									
									
								
							
							
						
						
									
										45
									
								
								po/sk.po
									
									
									
									
									
								
							@@ -14,8 +14,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: 2016-03-01 13:42+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2016-03-01 20:40+0100\n"
 | 
			
		||||
"POT-Creation-Date: 2015-02-21 23:27+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2015-02-22 11:11+0100\n"
 | 
			
		||||
"Last-Translator: Dušan Kazik <prescott66@gmail.com>\n"
 | 
			
		||||
"Language-Team: Slovak <gnome-sk-list@gnome.org>\n"
 | 
			
		||||
"Language: sk\n"
 | 
			
		||||
@@ -23,7 +23,7 @@ msgstr ""
 | 
			
		||||
"Content-Type: text/plain; charset=UTF-8\n"
 | 
			
		||||
"Content-Transfer-Encoding: 8bit\n"
 | 
			
		||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0;\n"
 | 
			
		||||
"X-Generator: Poedit 1.8.7\n"
 | 
			
		||||
"X-Generator: Poedit 1.7.4\n"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:1
 | 
			
		||||
msgid "Navigation"
 | 
			
		||||
@@ -542,22 +542,22 @@ msgstr "Prepnúť na VT č. 11"
 | 
			
		||||
msgid "Switch to VT 12"
 | 
			
		||||
msgstr "Prepnúť na VT č. 12"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:518
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:364
 | 
			
		||||
msgid "Built-in display"
 | 
			
		||||
msgstr "Vstavaný displej"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:544
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:391
 | 
			
		||||
msgid "Unknown"
 | 
			
		||||
msgstr "Neznámy"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:546
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:393
 | 
			
		||||
msgid "Unknown Display"
 | 
			
		||||
msgstr "Neznámy displej"
 | 
			
		||||
 | 
			
		||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
 | 
			
		||||
#. * size in inches, like 'Dell 15"'
 | 
			
		||||
#.
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:554
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:401
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s %s"
 | 
			
		||||
msgstr "%s %s"
 | 
			
		||||
@@ -602,51 +602,46 @@ msgid "_Force Quit"
 | 
			
		||||
msgstr "_Vynútiť ukončenie"
 | 
			
		||||
 | 
			
		||||
# X window system preloz, napr. system na spravu okien X
 | 
			
		||||
#: ../src/core/display.c:555
 | 
			
		||||
#: ../src/core/display.c:562
 | 
			
		||||
#, 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"
 | 
			
		||||
 | 
			
		||||
# cmd desc
 | 
			
		||||
#: ../src/core/main.c:181
 | 
			
		||||
#: ../src/core/main.c:176
 | 
			
		||||
msgid "Disable connection to session manager"
 | 
			
		||||
msgstr "Zakáže pripojenia k správcovi relácií"
 | 
			
		||||
 | 
			
		||||
# cmd desc
 | 
			
		||||
#: ../src/core/main.c:187
 | 
			
		||||
#: ../src/core/main.c:182
 | 
			
		||||
msgid "Replace the running window manager"
 | 
			
		||||
msgstr "Nahradí bežiaceho správcu okien"
 | 
			
		||||
 | 
			
		||||
# cmd desc
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
#: ../src/core/main.c:188
 | 
			
		||||
msgid "Specify session management ID"
 | 
			
		||||
msgstr "Zadá identifikátor správy relácií"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:198
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
msgid "X Display to use"
 | 
			
		||||
msgstr "X displej, ktorý bude použitý"
 | 
			
		||||
 | 
			
		||||
# cmd desc
 | 
			
		||||
#: ../src/core/main.c:204
 | 
			
		||||
#: ../src/core/main.c:199
 | 
			
		||||
msgid "Initialize session from savefile"
 | 
			
		||||
msgstr "Inicializuje reláciu z uloženého súboru"
 | 
			
		||||
 | 
			
		||||
# cmd desc
 | 
			
		||||
#: ../src/core/main.c:210
 | 
			
		||||
#: ../src/core/main.c:205
 | 
			
		||||
msgid "Make X calls synchronous"
 | 
			
		||||
msgstr "Použije synchrónne volania X"
 | 
			
		||||
 | 
			
		||||
# cmd desc
 | 
			
		||||
#: ../src/core/main.c:217
 | 
			
		||||
#: ../src/core/main.c:212
 | 
			
		||||
msgid "Run as a wayland compositor"
 | 
			
		||||
msgstr "Spustí ako kompozitor protokolu wayland"
 | 
			
		||||
 | 
			
		||||
# cmd desc
 | 
			
		||||
#: ../src/core/main.c:223
 | 
			
		||||
msgid "Run as a nested compositor"
 | 
			
		||||
msgstr "Spustí ako kompozitor s vnoreným režimom"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:231
 | 
			
		||||
#: ../src/core/main.c:220
 | 
			
		||||
msgid "Run as a full display server, rather than nested"
 | 
			
		||||
msgstr "Spustí ako plnohodnotný zobrazovací server, namiesto vnoreného režimu"
 | 
			
		||||
 | 
			
		||||
@@ -675,12 +670,12 @@ msgstr "Zobrazí verziu"
 | 
			
		||||
msgid "Mutter plugin to use"
 | 
			
		||||
msgstr "Použije zásuvný modul Mutter"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/prefs.c:1997
 | 
			
		||||
#: ../src/core/prefs.c:2004
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Workspace %d"
 | 
			
		||||
msgstr "Pracovný priestor č. %d"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:521
 | 
			
		||||
#: ../src/core/screen.c:525
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"Display \"%s\" already has a window manager; try using the --replace option "
 | 
			
		||||
@@ -689,12 +684,12 @@ msgstr ""
 | 
			
		||||
"Displej „%s“ už má správcu okien. Skúste použiť prepínač --replace, aby sa "
 | 
			
		||||
"aktuálny správca nahradil."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:603
 | 
			
		||||
#: ../src/core/screen.c:607
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Screen %d on display '%s' is invalid\n"
 | 
			
		||||
msgstr "Obrazovka č. %d na displeji „%s“ nie je platná\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/util.c:121
 | 
			
		||||
#: ../src/core/util.c:118
 | 
			
		||||
msgid "Mutter was compiled without support for verbose mode\n"
 | 
			
		||||
msgstr "Mutter bol skompilovaný bez výpisu podrobností pri behu\n"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										46
									
								
								po/sl.po
									
									
									
									
									
								
							
							
						
						
									
										46
									
								
								po/sl.po
									
									
									
									
									
								
							@@ -4,15 +4,15 @@
 | 
			
		||||
#
 | 
			
		||||
# Andraž Tori <andraz.tori1@guest.arnes.si>, 2000.
 | 
			
		||||
# Matjaž Horvat <m@owca.info>, 2006.
 | 
			
		||||
# Matej Urbančič <mateju@svn.gnome.org>, 2007-2016.
 | 
			
		||||
# Matej Urbančič <mateju@svn.gnome.org>, 2007-2015.
 | 
			
		||||
#
 | 
			
		||||
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: 2016-03-05 21:12+0100\n"
 | 
			
		||||
"PO-Revision-Date: 2016-03-05 21:12+0100\n"
 | 
			
		||||
"POT-Creation-Date: 2015-03-15 11:07+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2015-03-15 14:36+0100\n"
 | 
			
		||||
"Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n"
 | 
			
		||||
"Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n"
 | 
			
		||||
"Language: sl_SI\n"
 | 
			
		||||
@@ -22,7 +22,7 @@ msgstr ""
 | 
			
		||||
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n"
 | 
			
		||||
"%100==4 ? 3 : 0);\n"
 | 
			
		||||
"X-Poedit-SourceCharset: utf-8\n"
 | 
			
		||||
"X-Generator: Poedit 1.8.4\n"
 | 
			
		||||
"X-Generator: Poedit 1.5.4\n"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:1
 | 
			
		||||
msgid "Navigation"
 | 
			
		||||
@@ -455,22 +455,22 @@ msgstr "Preklopi na VT 11"
 | 
			
		||||
msgid "Switch to VT 12"
 | 
			
		||||
msgstr "Preklopi na VT 12"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:518
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:364
 | 
			
		||||
msgid "Built-in display"
 | 
			
		||||
msgstr "Vgrajen zaslon"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:544
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:391
 | 
			
		||||
msgid "Unknown"
 | 
			
		||||
msgstr "Neznano"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:546
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:393
 | 
			
		||||
msgid "Unknown Display"
 | 
			
		||||
msgstr "Neznan zaslon"
 | 
			
		||||
 | 
			
		||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
 | 
			
		||||
#. * size in inches, like 'Dell 15"'
 | 
			
		||||
#.
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:554
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:401
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s %s"
 | 
			
		||||
msgstr "%s %s"
 | 
			
		||||
@@ -514,44 +514,40 @@ msgstr "_Počakaj"
 | 
			
		||||
msgid "_Force Quit"
 | 
			
		||||
msgstr "_Vsili konec"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/display.c:555
 | 
			
		||||
#: ../src/core/display.c:562
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Failed to open X Window System display '%s'\n"
 | 
			
		||||
msgstr "Ni mogoče odpreti zaslona '%s' okenskega sistema X\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:181
 | 
			
		||||
#: ../src/core/main.c:176
 | 
			
		||||
msgid "Disable connection to session manager"
 | 
			
		||||
msgstr "Onemogoči povezavo z upravljalnikom sej"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:187
 | 
			
		||||
#: ../src/core/main.c:182
 | 
			
		||||
msgid "Replace the running window manager"
 | 
			
		||||
msgstr "Zamenjaj trenutni upravljalnik oken"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
#: ../src/core/main.c:188
 | 
			
		||||
msgid "Specify session management ID"
 | 
			
		||||
msgstr "Navedite ID upravljanja seje"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:198
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
msgid "X Display to use"
 | 
			
		||||
msgstr "Zaslon X za uporabo"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:204
 | 
			
		||||
#: ../src/core/main.c:199
 | 
			
		||||
msgid "Initialize session from savefile"
 | 
			
		||||
msgstr "Začni sejo iz shranjene datoteke"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:210
 | 
			
		||||
#: ../src/core/main.c:205
 | 
			
		||||
msgid "Make X calls synchronous"
 | 
			
		||||
msgstr "Uskladi klice X"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:217
 | 
			
		||||
#: ../src/core/main.c:212
 | 
			
		||||
msgid "Run as a wayland compositor"
 | 
			
		||||
msgstr "Zaženi izbirnik wayland"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:223
 | 
			
		||||
msgid "Run as a nested compositor"
 | 
			
		||||
msgstr "Zaženi kot gnezden vpisovalnik"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:231
 | 
			
		||||
#: ../src/core/main.c:220
 | 
			
		||||
msgid "Run as a full display server, rather than nested"
 | 
			
		||||
msgstr "Zaženi kot polni strežnik zaslona in ne vstavljeno"
 | 
			
		||||
 | 
			
		||||
@@ -579,12 +575,12 @@ msgid "Mutter plugin to use"
 | 
			
		||||
msgstr "Vstavek Mutter za uporabo"
 | 
			
		||||
 | 
			
		||||
# G:1 K:0 O:0
 | 
			
		||||
#: ../src/core/prefs.c:1997
 | 
			
		||||
#: ../src/core/prefs.c:2004
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Workspace %d"
 | 
			
		||||
msgstr "Delovna površina %d"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:521
 | 
			
		||||
#: ../src/core/screen.c:525
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"Display \"%s\" already has a window manager; try using the --replace option "
 | 
			
		||||
@@ -593,12 +589,12 @@ msgstr ""
 | 
			
		||||
"Zaslon \"%s\" že ima določen upravljalnik oken; poskušajte uporabiti možnost "
 | 
			
		||||
"--replace za zamenjavo trenutnega upravljalnika zaslona."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:603
 | 
			
		||||
#: ../src/core/screen.c:607
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Screen %d on display '%s' is invalid\n"
 | 
			
		||||
msgstr "Zaslon %d na prikazu '%s' ni veljaven\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/util.c:121
 | 
			
		||||
#: ../src/core/util.c:118
 | 
			
		||||
msgid "Mutter was compiled without support for verbose mode\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Program Mutter je kodno preveden brez podpore za podrobni način izpisovanja\n"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										67
									
								
								po/sr.po
									
									
									
									
									
								
							
							
						
						
									
										67
									
								
								po/sr.po
									
									
									
									
									
								
							@@ -1,21 +1,19 @@
 | 
			
		||||
# Serbian translation of mutter.
 | 
			
		||||
# Courtesy of Prevod.org team (http://prevod.org/) -- 2003—2016.
 | 
			
		||||
# Courtesy of Prevod.org team (http://prevod.org/) -- 2003—2015.
 | 
			
		||||
# This file is distributed under the same license as the mutter package.
 | 
			
		||||
#
 | 
			
		||||
# Translators: 
 | 
			
		||||
# Горан Ракић <grakic@devbase.net>
 | 
			
		||||
# Данило Шеган <danilo@prevod.org>, 2005.
 | 
			
		||||
# Милош Поповић <gpopac@gmail.com>, 2010.
 | 
			
		||||
# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2011—2016.
 | 
			
		||||
# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2011—2015.
 | 
			
		||||
msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: mutter\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=mutter&"
 | 
			
		||||
"keywords=I18N+L10N&component=general\n"
 | 
			
		||||
"POT-Creation-Date: 2016-03-09 01:41+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2016-03-09 09:52+0200\n"
 | 
			
		||||
"POT-Creation-Date: 2015-03-04 11:14+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2015-03-04 19:46+0200\n"
 | 
			
		||||
"Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
 | 
			
		||||
"Language-Team: Serbian <(nothing)>\n"
 | 
			
		||||
"Language-Team: Serbian <gnom@prevod.org>\n"
 | 
			
		||||
"Language: sr\n"
 | 
			
		||||
"MIME-Version: 1.0\n"
 | 
			
		||||
"Content-Type: text/plain; charset=UTF-8\n"
 | 
			
		||||
@@ -438,41 +436,46 @@ msgid "Switch to VT 7"
 | 
			
		||||
msgstr "Прелазак на ВТ 7"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:8
 | 
			
		||||
#| msgid "Switch to VT 1"
 | 
			
		||||
msgid "Switch to VT 8"
 | 
			
		||||
msgstr "Прелазак на ВТ 8"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:9
 | 
			
		||||
#| msgid "Switch to VT 1"
 | 
			
		||||
msgid "Switch to VT 9"
 | 
			
		||||
msgstr "Прелазак на ВТ 9"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:10
 | 
			
		||||
#| msgid "Switch to VT 1"
 | 
			
		||||
msgid "Switch to VT 10"
 | 
			
		||||
msgstr "Прелазак на ВТ 10"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:11
 | 
			
		||||
#| msgid "Switch to VT 1"
 | 
			
		||||
msgid "Switch to VT 11"
 | 
			
		||||
msgstr "Прелазак на ВТ 11"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:12
 | 
			
		||||
#| msgid "Switch to VT 1"
 | 
			
		||||
msgid "Switch to VT 12"
 | 
			
		||||
msgstr "Прелазак на ВТ 12"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:518
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:364
 | 
			
		||||
msgid "Built-in display"
 | 
			
		||||
msgstr "Уграђени дисплеј"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:544
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:391
 | 
			
		||||
msgid "Unknown"
 | 
			
		||||
msgstr "Непознато"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:546
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:393
 | 
			
		||||
msgid "Unknown Display"
 | 
			
		||||
msgstr "Непознат дисплеј"
 | 
			
		||||
 | 
			
		||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
 | 
			
		||||
#. * size in inches, like 'Dell 15"'
 | 
			
		||||
#.
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:554
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:401
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s %s"
 | 
			
		||||
msgstr "%s %s"
 | 
			
		||||
@@ -516,45 +519,40 @@ msgstr "_Сачекај"
 | 
			
		||||
msgid "_Force Quit"
 | 
			
		||||
msgstr "_Приморај излаз"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/display.c:555
 | 
			
		||||
#: ../src/core/display.c:562
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Failed to open X Window System display '%s'\n"
 | 
			
		||||
msgstr "Нисам успео да отворим екран „%s“ Икс система прозора\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:181
 | 
			
		||||
#: ../src/core/main.c:176
 | 
			
		||||
msgid "Disable connection to session manager"
 | 
			
		||||
msgstr "Искључује везу са управником сесије"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:187
 | 
			
		||||
#: ../src/core/main.c:182
 | 
			
		||||
msgid "Replace the running window manager"
 | 
			
		||||
msgstr "Мења текућег управника прозорима"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
#: ../src/core/main.c:188
 | 
			
		||||
msgid "Specify session management ID"
 | 
			
		||||
msgstr "Наводи ИБ управника сесије"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:198
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
msgid "X Display to use"
 | 
			
		||||
msgstr "Икс екран који ће бити коришћен"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:204
 | 
			
		||||
#: ../src/core/main.c:199
 | 
			
		||||
msgid "Initialize session from savefile"
 | 
			
		||||
msgstr "Покреће сесију из датотеке чувања"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:210
 | 
			
		||||
#: ../src/core/main.c:205
 | 
			
		||||
msgid "Make X calls synchronous"
 | 
			
		||||
msgstr "Чини Икс позиве усклађеним"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:217
 | 
			
		||||
#: ../src/core/main.c:212
 | 
			
		||||
msgid "Run as a wayland compositor"
 | 
			
		||||
msgstr "Ради као вајландов саставник"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:223
 | 
			
		||||
#| msgid "Run as a wayland compositor"
 | 
			
		||||
msgid "Run as a nested compositor"
 | 
			
		||||
msgstr "Ради као угнеждени саставник"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:231
 | 
			
		||||
#: ../src/core/main.c:220
 | 
			
		||||
msgid "Run as a full display server, rather than nested"
 | 
			
		||||
msgstr "Ради као пуни сервер приказа, уместо као угнеждени"
 | 
			
		||||
 | 
			
		||||
@@ -568,8 +566,8 @@ msgid ""
 | 
			
		||||
"PARTICULAR PURPOSE.\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"матер %s\n"
 | 
			
		||||
"Сва права задржана © 2001–%d Хевок Пенингтон, Ред Хет, Инк., и остали\n"
 | 
			
		||||
"Ово је слободан програм; погледајте изворни кôд за услове коришћења.\n"
 | 
			
		||||
"Сва права задржана (C) 2001–%d Havoc Pennington, Red Hat, Inc., и остали\n"
 | 
			
		||||
"Ово је слободан програм; погледајте изворни код за услове коришћења.\n"
 | 
			
		||||
"НЕ постоји никаква гаранција; чак ни гаранција о ТРЖИШНОЈ ВРЕДНОСТИ или "
 | 
			
		||||
"ПРИЛАГОЂЕНОСТИ ОДРЕЂЕНОЈ НАМЕНИ.\n"
 | 
			
		||||
 | 
			
		||||
@@ -581,26 +579,29 @@ msgstr "Исписује издање"
 | 
			
		||||
msgid "Mutter plugin to use"
 | 
			
		||||
msgstr "Прикључци Матера за коришћење"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/prefs.c:1997
 | 
			
		||||
#: ../src/core/prefs.c:2004
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Workspace %d"
 | 
			
		||||
msgstr "%d. радни простор"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:521
 | 
			
		||||
#: ../src/core/screen.c:525
 | 
			
		||||
#, c-format
 | 
			
		||||
#| msgid ""
 | 
			
		||||
#| "Screen %d on display \"%s\" already has a window manager; try using the --"
 | 
			
		||||
#| "replace option to replace the current window manager.\n"
 | 
			
		||||
msgid ""
 | 
			
		||||
"Display \"%s\" already has a window manager; try using the --replace option "
 | 
			
		||||
"to replace the current window manager."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Приказ „%s“ већ има управника прозора; пробајте да користите опцију „--"
 | 
			
		||||
"replace“ да замените тренутног управника прозора."
 | 
			
		||||
"Приказ „%s“ већ има управника прозора; пробајте да користите опцију "
 | 
			
		||||
"„--replace“ да замените тренутног управника прозора."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:603
 | 
			
		||||
#: ../src/core/screen.c:607
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Screen %d on display '%s' is invalid\n"
 | 
			
		||||
msgstr "Приказ „%d“ на екрану „%s“ није исправан\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/util.c:121
 | 
			
		||||
#: ../src/core/util.c:118
 | 
			
		||||
msgid "Mutter was compiled without support for verbose mode\n"
 | 
			
		||||
msgstr "Матер је преведен без подршке за опширан режим\n"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,21 +1,19 @@
 | 
			
		||||
# Serbian translation of mutter.
 | 
			
		||||
# Courtesy of Prevod.org team (http://prevod.org/) -- 2003—2016.
 | 
			
		||||
# Courtesy of Prevod.org team (http://prevod.org/) -- 2003—2015.
 | 
			
		||||
# This file is distributed under the same license as the mutter package.
 | 
			
		||||
#
 | 
			
		||||
# Translators: 
 | 
			
		||||
# Goran Rakić <grakic@devbase.net>
 | 
			
		||||
# Danilo Šegan <danilo@prevod.org>, 2005.
 | 
			
		||||
# Miloš Popović <gpopac@gmail.com>, 2010.
 | 
			
		||||
# Miroslav Nikolić <miroslavnikolic@rocketmail.com>, 2011—2016.
 | 
			
		||||
# Miroslav Nikolić <miroslavnikolic@rocketmail.com>, 2011—2015.
 | 
			
		||||
msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: mutter\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=mutter&"
 | 
			
		||||
"keywords=I18N+L10N&component=general\n"
 | 
			
		||||
"POT-Creation-Date: 2016-03-09 01:41+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2016-03-09 09:52+0200\n"
 | 
			
		||||
"POT-Creation-Date: 2015-03-04 11:14+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2015-03-04 19:46+0200\n"
 | 
			
		||||
"Last-Translator: Miroslav Nikolić <miroslavnikolic@rocketmail.com>\n"
 | 
			
		||||
"Language-Team: Serbian <(nothing)>\n"
 | 
			
		||||
"Language-Team: Serbian <gnom@prevod.org>\n"
 | 
			
		||||
"Language: sr\n"
 | 
			
		||||
"MIME-Version: 1.0\n"
 | 
			
		||||
"Content-Type: text/plain; charset=UTF-8\n"
 | 
			
		||||
@@ -438,41 +436,46 @@ msgid "Switch to VT 7"
 | 
			
		||||
msgstr "Prelazak na VT 7"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:8
 | 
			
		||||
#| msgid "Switch to VT 1"
 | 
			
		||||
msgid "Switch to VT 8"
 | 
			
		||||
msgstr "Prelazak na VT 8"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:9
 | 
			
		||||
#| msgid "Switch to VT 1"
 | 
			
		||||
msgid "Switch to VT 9"
 | 
			
		||||
msgstr "Prelazak na VT 9"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:10
 | 
			
		||||
#| msgid "Switch to VT 1"
 | 
			
		||||
msgid "Switch to VT 10"
 | 
			
		||||
msgstr "Prelazak na VT 10"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:11
 | 
			
		||||
#| msgid "Switch to VT 1"
 | 
			
		||||
msgid "Switch to VT 11"
 | 
			
		||||
msgstr "Prelazak na VT 11"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:12
 | 
			
		||||
#| msgid "Switch to VT 1"
 | 
			
		||||
msgid "Switch to VT 12"
 | 
			
		||||
msgstr "Prelazak na VT 12"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:518
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:364
 | 
			
		||||
msgid "Built-in display"
 | 
			
		||||
msgstr "Ugrađeni displej"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:544
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:391
 | 
			
		||||
msgid "Unknown"
 | 
			
		||||
msgstr "Nepoznato"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:546
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:393
 | 
			
		||||
msgid "Unknown Display"
 | 
			
		||||
msgstr "Nepoznat displej"
 | 
			
		||||
 | 
			
		||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
 | 
			
		||||
#. * size in inches, like 'Dell 15"'
 | 
			
		||||
#.
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:554
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:401
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s %s"
 | 
			
		||||
msgstr "%s %s"
 | 
			
		||||
@@ -516,45 +519,40 @@ msgstr "_Sačekaj"
 | 
			
		||||
msgid "_Force Quit"
 | 
			
		||||
msgstr "_Primoraj izlaz"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/display.c:555
 | 
			
		||||
#: ../src/core/display.c:562
 | 
			
		||||
#, 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/main.c:181
 | 
			
		||||
#: ../src/core/main.c:176
 | 
			
		||||
msgid "Disable connection to session manager"
 | 
			
		||||
msgstr "Isključuje vezu sa upravnikom sesije"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:187
 | 
			
		||||
#: ../src/core/main.c:182
 | 
			
		||||
msgid "Replace the running window manager"
 | 
			
		||||
msgstr "Menja tekućeg upravnika prozorima"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
#: ../src/core/main.c:188
 | 
			
		||||
msgid "Specify session management ID"
 | 
			
		||||
msgstr "Navodi IB upravnika sesije"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:198
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
msgid "X Display to use"
 | 
			
		||||
msgstr "Iks ekran koji će biti korišćen"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:204
 | 
			
		||||
#: ../src/core/main.c:199
 | 
			
		||||
msgid "Initialize session from savefile"
 | 
			
		||||
msgstr "Pokreće sesiju iz datoteke čuvanja"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:210
 | 
			
		||||
#: ../src/core/main.c:205
 | 
			
		||||
msgid "Make X calls synchronous"
 | 
			
		||||
msgstr "Čini Iks pozive usklađenim"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:217
 | 
			
		||||
#: ../src/core/main.c:212
 | 
			
		||||
msgid "Run as a wayland compositor"
 | 
			
		||||
msgstr "Radi kao vajlandov sastavnik"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:223
 | 
			
		||||
#| msgid "Run as a wayland compositor"
 | 
			
		||||
msgid "Run as a nested compositor"
 | 
			
		||||
msgstr "Radi kao ugneždeni sastavnik"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:231
 | 
			
		||||
#: ../src/core/main.c:220
 | 
			
		||||
msgid "Run as a full display server, rather than nested"
 | 
			
		||||
msgstr "Radi kao puni server prikaza, umesto kao ugneždeni"
 | 
			
		||||
 | 
			
		||||
@@ -568,8 +566,8 @@ msgid ""
 | 
			
		||||
"PARTICULAR PURPOSE.\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"mater %s\n"
 | 
			
		||||
"Sva prava zadržana © 2001–%d Hevok Penington, Red Het, Ink., i ostali\n"
 | 
			
		||||
"Ovo je slobodan program; pogledajte izvorni kôd za uslove korišćenja.\n"
 | 
			
		||||
"Sva prava zadržana (C) 2001–%d Havoc Pennington, Red Hat, Inc., i ostali\n"
 | 
			
		||||
"Ovo je slobodan program; pogledajte izvorni kod za uslove korišćenja.\n"
 | 
			
		||||
"NE postoji nikakva garancija; čak ni garancija o TRŽIŠNOJ VREDNOSTI ili "
 | 
			
		||||
"PRILAGOĐENOSTI ODREĐENOJ NAMENI.\n"
 | 
			
		||||
 | 
			
		||||
@@ -581,26 +579,29 @@ msgstr "Ispisuje izdanje"
 | 
			
		||||
msgid "Mutter plugin to use"
 | 
			
		||||
msgstr "Priključci Matera za korišćenje"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/prefs.c:1997
 | 
			
		||||
#: ../src/core/prefs.c:2004
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Workspace %d"
 | 
			
		||||
msgstr "%d. radni prostor"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:521
 | 
			
		||||
#: ../src/core/screen.c:525
 | 
			
		||||
#, c-format
 | 
			
		||||
#| msgid ""
 | 
			
		||||
#| "Screen %d on display \"%s\" already has a window manager; try using the --"
 | 
			
		||||
#| "replace option to replace the current window manager.\n"
 | 
			
		||||
msgid ""
 | 
			
		||||
"Display \"%s\" already has a window manager; try using the --replace option "
 | 
			
		||||
"to replace the current window manager."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Prikaz „%s“ već ima upravnika prozora; probajte da koristite opciju „--"
 | 
			
		||||
"replace“ da zamenite trenutnog upravnika prozora."
 | 
			
		||||
"Prikaz „%s“ već ima upravnika prozora; probajte da koristite opciju "
 | 
			
		||||
"„--replace“ da zamenite trenutnog upravnika prozora."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:603
 | 
			
		||||
#: ../src/core/screen.c:607
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Screen %d on display '%s' is invalid\n"
 | 
			
		||||
msgstr "Prikaz „%d“ na ekranu „%s“ nije ispravan\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/util.c:121
 | 
			
		||||
#: ../src/core/util.c:118
 | 
			
		||||
msgid "Mutter was compiled without support for verbose mode\n"
 | 
			
		||||
msgstr "Mater je preveden bez podrške za opširan režim\n"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										162
									
								
								po/sv.po
									
									
									
									
									
								
							
							
						
						
									
										162
									
								
								po/sv.po
									
									
									
									
									
								
							@@ -1,25 +1,24 @@
 | 
			
		||||
# Swedish messages for mutter.
 | 
			
		||||
# Copyright © 2001-2016 Free Software Foundation, Inc.
 | 
			
		||||
# Copyright © 2001-2015 Free Software Foundation, Inc.
 | 
			
		||||
# Christian Rose <menthos@menthos.com>, 2001, 2002, 2003, 2004, 2005.
 | 
			
		||||
# Daniel Nylander <po@danielnylander.se>, 2006, 2007, 2008, 2009, 2010, 2011, 2012.
 | 
			
		||||
# Mattias Eriksson <snaggen@gmail.com>, 2014.
 | 
			
		||||
# Anders Jonsson <anders.jonsson@norsjovallen.se>, 2015.
 | 
			
		||||
# Sebastian Rasmussen <sebras@gmail.com>, 2016.
 | 
			
		||||
#
 | 
			
		||||
msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: mutter\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
 | 
			
		||||
"product=mutter&keywords=I18N+L10N&component=general\n"
 | 
			
		||||
"POT-Creation-Date: 2016-03-05 13:41+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2016-03-06 13:47+0100\n"
 | 
			
		||||
"Last-Translator: Sebastian Rasmussen <sebras@gmail.com>\n"
 | 
			
		||||
"POT-Creation-Date: 2015-02-19 21:45+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2015-02-24 17:54+0100\n"
 | 
			
		||||
"Last-Translator: Anders Jonsson <anders.jonsson@norsjovallen.se>\n"
 | 
			
		||||
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
 | 
			
		||||
"Language: sv\n"
 | 
			
		||||
"MIME-Version: 1.0\n"
 | 
			
		||||
"Content-Type: text/plain; charset=UTF-8\n"
 | 
			
		||||
"Content-Transfer-Encoding: 8bit\n"
 | 
			
		||||
"X-Generator: Poedit 1.8.7.1\n"
 | 
			
		||||
"X-Generator: Poedit 1.7.3\n"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:1
 | 
			
		||||
msgid "Navigation"
 | 
			
		||||
@@ -271,15 +270,15 @@ msgstr "Modifierare att använda för utökade fönsterhanteringsåtgärder"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:2
 | 
			
		||||
msgid ""
 | 
			
		||||
"This key will initiate the \"overlay\", which is a combination window "
 | 
			
		||||
"overview and application launching system. The default is intended to be the "
 | 
			
		||||
"\"Windows key\" on PC hardware. It's expected that this binding either the "
 | 
			
		||||
"default or set to the empty string."
 | 
			
		||||
"This key will initiate the \"overlay\", which is a combination window overview "
 | 
			
		||||
"and application launching system. The default is intended to be the \"Windows key"
 | 
			
		||||
"\" on PC hardware. It's expected that this binding either the default or set to "
 | 
			
		||||
"the empty string."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Denna nyckel kommer att initiera \"overlay\", som är en kombinerad "
 | 
			
		||||
"fönsteröversikt och programstartare. Standard är tänkt att vara \"Windows-"
 | 
			
		||||
"tangenten\" på PC-maskinvara. Det är förväntat att denna bindning antingen "
 | 
			
		||||
"är standard eller inställd till en tom sträng."
 | 
			
		||||
"tangenten\" på PC-maskinvara. Det är förväntat att denna bindning antingen är "
 | 
			
		||||
"standard eller inställd till en tom sträng."
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:3
 | 
			
		||||
msgid "Attach modal dialogs"
 | 
			
		||||
@@ -288,12 +287,12 @@ msgstr "Bifoga modala dialogfönster"
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:4
 | 
			
		||||
msgid ""
 | 
			
		||||
"When true, instead of having independent titlebars, modal dialogs appear "
 | 
			
		||||
"attached to the titlebar of the parent window and are moved together with "
 | 
			
		||||
"the parent window."
 | 
			
		||||
"attached to the titlebar of the parent window and are moved together with the "
 | 
			
		||||
"parent window."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"När true kommer, istället för att ha oberoende namnlister, modala "
 | 
			
		||||
"dialogfönster att visas anslutna till namnlisten i föräldrafönstret och "
 | 
			
		||||
"flyttas tillsammans med föräldrafönstret."
 | 
			
		||||
"När true kommer, istället för att ha oberoende namnlister, modala dialogfönster "
 | 
			
		||||
"att visas anslutna till namnlisten i föräldrafönstret och flyttas tillsammans "
 | 
			
		||||
"med föräldrafönstret."
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:5
 | 
			
		||||
msgid "Enable edge tiling when dropping windows on screen edges"
 | 
			
		||||
@@ -301,13 +300,13 @@ msgstr "Aktivera kantframhävning när fönster släpps på skärmkanter"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:6
 | 
			
		||||
msgid ""
 | 
			
		||||
"If enabled, dropping windows on vertical screen edges maximizes them "
 | 
			
		||||
"vertically and resizes them horizontally to cover half of the available "
 | 
			
		||||
"area. Dropping windows on the top screen edge maximizes them completely."
 | 
			
		||||
"If enabled, dropping windows on vertical screen edges maximizes them vertically "
 | 
			
		||||
"and resizes them horizontally to cover half of the available area. Dropping "
 | 
			
		||||
"windows on the top screen edge maximizes them completely."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Om aktiverad, släppa fönster på vertikala skärmkanter kommer att maximera "
 | 
			
		||||
"dem vertikalt och storleksändra dem horisontellt till att täcka hälften av "
 | 
			
		||||
"den tillgängliga ytan. Släppa fönster på övre skärmkanten maximerar dem helt."
 | 
			
		||||
"Om aktiverad, släppa fönster på vertikala skärmkanter kommer att maximera dem "
 | 
			
		||||
"vertikalt och storleksändra dem horisontellt till att täcka hälften av den "
 | 
			
		||||
"tillgängliga ytan. Släppa fönster på övre skärmkanten maximerar dem helt."
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:7
 | 
			
		||||
msgid "Workspaces are managed dynamically"
 | 
			
		||||
@@ -316,12 +315,12 @@ msgstr "Arbetsytor hanteras dynamiskt"
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:8
 | 
			
		||||
msgid ""
 | 
			
		||||
"Determines whether workspaces are managed dynamically or whether there's a "
 | 
			
		||||
"static number of workspaces (determined by the num-workspaces key in org."
 | 
			
		||||
"gnome.desktop.wm.preferences)."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Bestämmer huruvida arbetsytor hanteras dynamiskt eller huruvida det finns "
 | 
			
		||||
"ett fast antal arbetsytor (bestäms av nyckeln num-workspaces i org.gnome."
 | 
			
		||||
"static number of workspaces (determined by the num-workspaces key in org.gnome."
 | 
			
		||||
"desktop.wm.preferences)."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Bestämmer huruvida arbetsytor hanteras dynamiskt eller huruvida det finns ett "
 | 
			
		||||
"fast antal arbetsytor (bestäms av nyckeln num-workspaces i org.gnome.desktop.wm."
 | 
			
		||||
"preferences)."
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:9
 | 
			
		||||
msgid "Workspaces only on primary"
 | 
			
		||||
@@ -329,11 +328,11 @@ msgstr "Arbetsytor endast på primär"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:10
 | 
			
		||||
msgid ""
 | 
			
		||||
"Determines whether workspace switching should happen for windows on all "
 | 
			
		||||
"monitors or only for windows on the primary monitor."
 | 
			
		||||
"Determines whether workspace switching should happen for windows on all monitors "
 | 
			
		||||
"or only for windows on the primary monitor."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Bestämmer huruvida arbetsyteväxling ska hända för alla fönster på alla "
 | 
			
		||||
"skärmar eller endast för fönster på den primära skärmen."
 | 
			
		||||
"Bestämmer huruvida arbetsyteväxling ska hända för alla fönster på alla skärmar "
 | 
			
		||||
"eller endast för fönster på den primära skärmen."
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:11
 | 
			
		||||
msgid "No tab popup"
 | 
			
		||||
@@ -341,11 +340,11 @@ msgstr "Ingen flik-popup"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:12
 | 
			
		||||
msgid ""
 | 
			
		||||
"Determines whether the use of popup and highlight frame should be disabled "
 | 
			
		||||
"for window cycling."
 | 
			
		||||
"Determines whether the use of popup and highlight frame should be disabled for "
 | 
			
		||||
"window cycling."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Bestämmer huruvida användning av popup och framhävning av kontur ska "
 | 
			
		||||
"inaktiveras vid fönsterväxling."
 | 
			
		||||
"Bestämmer huruvida användning av popup och framhävning av kontur ska inaktiveras "
 | 
			
		||||
"vid fönsterväxling."
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:13
 | 
			
		||||
msgid "Delay focus changes until the pointer stops moving"
 | 
			
		||||
@@ -353,13 +352,13 @@ msgstr "Fördröj fokusändringar till muspekaren hålls still"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:14
 | 
			
		||||
msgid ""
 | 
			
		||||
"If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
 | 
			
		||||
"the focus will not be changed immediately when entering a window, but only "
 | 
			
		||||
"after the pointer stops moving."
 | 
			
		||||
"If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then the "
 | 
			
		||||
"focus will not be changed immediately when entering a window, but only after the "
 | 
			
		||||
"pointer stops moving."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Om satt till \"true\", och fokusläget är antingen \"sloppy\" eller \"mouse\" "
 | 
			
		||||
"kommer fokus inte att ändras omedelbart när muspekaren går in över ett "
 | 
			
		||||
"fönster, utan först efter att muspekaren slutar röra sig."
 | 
			
		||||
"kommer fokus inte att ändras omedelbart när muspekaren går in över ett fönster, "
 | 
			
		||||
"utan först efter att muspekaren slutar röra sig."
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:15
 | 
			
		||||
msgid "Draggable border width"
 | 
			
		||||
@@ -367,8 +366,8 @@ msgstr "Dragbar rambredd"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:16
 | 
			
		||||
msgid ""
 | 
			
		||||
"The amount of total draggable borders. If the theme's visible borders are "
 | 
			
		||||
"not enough, invisible borders will be added to meet this value."
 | 
			
		||||
"The amount of total draggable borders. If the theme's visible borders are not "
 | 
			
		||||
"enough, invisible borders will be added to meet this value."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Mängd av totalt dragbara ramar. Om temats synliga ramar inte är tillräckliga "
 | 
			
		||||
"kommer osynliga ramar att läggas till för att möta detta värde."
 | 
			
		||||
@@ -379,8 +378,8 @@ msgstr "Automatiskt maximera fönster vars storlek ligger nära skärmens storle
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:18
 | 
			
		||||
msgid ""
 | 
			
		||||
"If enabled, new windows that are initially the size of the monitor "
 | 
			
		||||
"automatically get maximized."
 | 
			
		||||
"If enabled, new windows that are initially the size of the monitor automatically "
 | 
			
		||||
"get maximized."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Om aktiverad kommer nya fönster med nästan samma storlek som skärmen att bli "
 | 
			
		||||
"automatiskt maximerade."
 | 
			
		||||
@@ -391,11 +390,11 @@ msgstr "Placera nya fönster centrerat"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:20
 | 
			
		||||
msgid ""
 | 
			
		||||
"When true, the new windows will always be put in the center of the active "
 | 
			
		||||
"screen of the monitor."
 | 
			
		||||
"When true, the new windows will always be put in the center of the active screen "
 | 
			
		||||
"of the monitor."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"När satt till \"true\", kommer nya fönster alltid att placeras centrerat på "
 | 
			
		||||
"den aktiva skärmen."
 | 
			
		||||
"När satt till \"true\", kommer nya fönster alltid att placeras centrerat på den "
 | 
			
		||||
"aktiva skärmen."
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:21
 | 
			
		||||
msgid "Select window from tab popup"
 | 
			
		||||
@@ -453,22 +452,22 @@ msgstr "Växla till VT 11"
 | 
			
		||||
msgid "Switch to VT 12"
 | 
			
		||||
msgstr "Växla till VT 12"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:518
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:364
 | 
			
		||||
msgid "Built-in display"
 | 
			
		||||
msgstr "Inbyggd display"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:544
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:391
 | 
			
		||||
msgid "Unknown"
 | 
			
		||||
msgstr "Okänd"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:546
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:393
 | 
			
		||||
msgid "Unknown Display"
 | 
			
		||||
msgstr "Okänd display"
 | 
			
		||||
 | 
			
		||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
 | 
			
		||||
#. * size in inches, like 'Dell 15"'
 | 
			
		||||
#.
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:554
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:401
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s %s"
 | 
			
		||||
msgstr "%s %s"
 | 
			
		||||
@@ -478,9 +477,8 @@ msgstr "%s %s"
 | 
			
		||||
#: ../src/compositor/compositor.c:456
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"Another compositing manager is already running on screen %i on display \"%s"
 | 
			
		||||
"\"."
 | 
			
		||||
msgstr "En annan kompositionshanterare körs redan på skärm %i på display ”%s”."
 | 
			
		||||
"Another compositing manager is already running on screen %i on display \"%s\"."
 | 
			
		||||
msgstr "En annan compositing-hanterare körs redan på skärm %i på display \"%s\"."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/bell.c:185
 | 
			
		||||
msgid "Bell event"
 | 
			
		||||
@@ -497,8 +495,8 @@ msgstr "Programmet svarar inte."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/delete.c:134
 | 
			
		||||
msgid ""
 | 
			
		||||
"You may choose to wait a short while for it to continue or force the "
 | 
			
		||||
"application to quit entirely."
 | 
			
		||||
"You may choose to wait a short while for it to continue or force the application "
 | 
			
		||||
"to quit entirely."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Du kan välja att vänta en kort stund på det för att fortsätta eller tvinga "
 | 
			
		||||
"programmet att helt avslutas."
 | 
			
		||||
@@ -511,44 +509,40 @@ msgstr "_Vänta"
 | 
			
		||||
msgid "_Force Quit"
 | 
			
		||||
msgstr "_Tvinga avslut"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/display.c:555
 | 
			
		||||
#: ../src/core/display.c:562
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Failed to open X Window System display '%s'\n"
 | 
			
		||||
msgstr "Misslyckades med att öppna X Window System-displayen ”%s”\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:181
 | 
			
		||||
#: ../src/core/main.c:176
 | 
			
		||||
msgid "Disable connection to session manager"
 | 
			
		||||
msgstr "Inaktivera anslutning till sessionshanteraren"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:187
 | 
			
		||||
#: ../src/core/main.c:182
 | 
			
		||||
msgid "Replace the running window manager"
 | 
			
		||||
msgstr "Ersätt körande fönsterhanteraren"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
#: ../src/core/main.c:188
 | 
			
		||||
msgid "Specify session management ID"
 | 
			
		||||
msgstr "Ange sessionshanteringsid"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:198
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
msgid "X Display to use"
 | 
			
		||||
msgstr "X-display att använda"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:204
 | 
			
		||||
#: ../src/core/main.c:199
 | 
			
		||||
msgid "Initialize session from savefile"
 | 
			
		||||
msgstr "Initiera session från sparandefil"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:210
 | 
			
		||||
#: ../src/core/main.c:205
 | 
			
		||||
msgid "Make X calls synchronous"
 | 
			
		||||
msgstr "Gör X-anrop synkrona"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:217
 | 
			
		||||
#: ../src/core/main.c:212
 | 
			
		||||
msgid "Run as a wayland compositor"
 | 
			
		||||
msgstr "Kör som en wayland-kompositionshanterare"
 | 
			
		||||
msgstr "Kör som en wayland-compositor"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:223
 | 
			
		||||
msgid "Run as a nested compositor"
 | 
			
		||||
msgstr "Kör som en nästlad kompositionshanterare"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:231
 | 
			
		||||
#: ../src/core/main.c:220
 | 
			
		||||
msgid "Run as a full display server, rather than nested"
 | 
			
		||||
msgstr "Kör som en full display-tjänst, i stället för nästlad"
 | 
			
		||||
 | 
			
		||||
@@ -558,8 +552,8 @@ msgid ""
 | 
			
		||||
"mutter %s\n"
 | 
			
		||||
"Copyright (C) 2001-%d Havoc Pennington, Red Hat, Inc., and others\n"
 | 
			
		||||
"This is free software; see the source for copying conditions.\n"
 | 
			
		||||
"There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A "
 | 
			
		||||
"PARTICULAR PURPOSE.\n"
 | 
			
		||||
"There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR "
 | 
			
		||||
"PURPOSE.\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"mutter %s\n"
 | 
			
		||||
"Copyright © 2001-%d Havoc Pennington, Red Hat, Inc. och andra\n"
 | 
			
		||||
@@ -575,33 +569,33 @@ msgstr "Skriv ut version"
 | 
			
		||||
msgid "Mutter plugin to use"
 | 
			
		||||
msgstr "Mutter-insticksmodul att använda"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/prefs.c:1997
 | 
			
		||||
#: ../src/core/prefs.c:2004
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Workspace %d"
 | 
			
		||||
msgstr "Arbetsyta %d"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:521
 | 
			
		||||
#: ../src/core/screen.c:525
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"Display \"%s\" already has a window manager; try using the --replace option "
 | 
			
		||||
"to replace the current window manager."
 | 
			
		||||
"Display \"%s\" already has a window manager; try using the --replace option to "
 | 
			
		||||
"replace the current window manager."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Display ”%s” har redan en fönsterhanterare; försök med flaggan --replace för "
 | 
			
		||||
"att ersätta den aktuella fönsterhanteraren."
 | 
			
		||||
"Display ”%s” har redan en fönsterhanterare; försök med flaggan --replace för att "
 | 
			
		||||
"ersätta den aktuella fönsterhanteraren."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:603
 | 
			
		||||
#: ../src/core/screen.c:607
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Screen %d on display '%s' is invalid\n"
 | 
			
		||||
msgstr "Skärm %d på display ”%s” är ogiltig\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/util.c:121
 | 
			
		||||
#: ../src/core/util.c:118
 | 
			
		||||
msgid "Mutter was compiled without support for verbose mode\n"
 | 
			
		||||
msgstr "Mutter kompilerades utan stöd för utförligt läge\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/x11/session.c:1815
 | 
			
		||||
msgid ""
 | 
			
		||||
"These windows do not support "save current setup" and will have to "
 | 
			
		||||
"be restarted manually next time you log in."
 | 
			
		||||
"These windows do not support "save current setup" and will have to be "
 | 
			
		||||
"restarted manually next time you log in."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Dessa fönster saknar stöd för "spara nuvarande inställningar" och "
 | 
			
		||||
"kommer att behöva startas om manuellt nästa gång du loggar in."
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										82
									
								
								po/tr.po
									
									
									
									
									
								
							
							
						
						
									
										82
									
								
								po/tr.po
									
									
									
									
									
								
							@@ -6,22 +6,22 @@
 | 
			
		||||
# Baris Cicek <baris@teamforce.name.tr>, 2004, 2005, 2008, 2009.
 | 
			
		||||
# İlker DAĞLI <ilker@ilkerdagli.info>, 2011.
 | 
			
		||||
# Muhammed EKEN <gnome@m-eken.com>, 2011.
 | 
			
		||||
# Muhammet Kara <muhammetk@gmail.com>, 2011, 2012, 2014, 2015, 2016.
 | 
			
		||||
# Muhammet Kara <muhammetk@gmail.com>, 2011, 2012, 2014, 2015.
 | 
			
		||||
#
 | 
			
		||||
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: 2016-05-10 20:26+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2016-05-26 22:25+0300\n"
 | 
			
		||||
"POT-Creation-Date: 2015-03-21 23:08+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2015-03-22 15:57+0200\n"
 | 
			
		||||
"Last-Translator: Muhammet Kara <muhammetk@gmail.com>\n"
 | 
			
		||||
"Language-Team: Turkish <gnome-turk@gnome.org>\n"
 | 
			
		||||
"Language: tr\n"
 | 
			
		||||
"MIME-Version: 1.0\n"
 | 
			
		||||
"Content-Type: text/plain; charset=UTF-8\n"
 | 
			
		||||
"Content-Transfer-Encoding: 8bit\n"
 | 
			
		||||
"X-Generator: Poedit 1.8.6\n"
 | 
			
		||||
"X-Generator: Gtranslator 2.91.6\n"
 | 
			
		||||
"Plural-Forms: nplurals=1; plural=0;\n"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:1
 | 
			
		||||
@@ -73,10 +73,12 @@ msgid "Move window one monitor to the right"
 | 
			
		||||
msgstr "Pencereyi sağdaki monitöre taşı"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:13
 | 
			
		||||
#| msgid "Move window one workspace up"
 | 
			
		||||
msgid "Move window one monitor up"
 | 
			
		||||
msgstr "Pencereyi üstteki monitöre taşı"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:14
 | 
			
		||||
#| msgid "Move window one workspace down"
 | 
			
		||||
msgid "Move window one monitor down"
 | 
			
		||||
msgstr "Pencereyi alttaki monitöre taşı"
 | 
			
		||||
 | 
			
		||||
@@ -97,10 +99,12 @@ msgid "Switch to previous window"
 | 
			
		||||
msgstr "Önceki pencereye geç"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:19
 | 
			
		||||
#| msgid "Move between windows of an application immediately"
 | 
			
		||||
msgid "Switch windows of an application"
 | 
			
		||||
msgstr "Uygulamanın pencereleri arasında geçiş yap"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:20
 | 
			
		||||
#| msgid "Move between windows of an application immediately"
 | 
			
		||||
msgid "Switch to previous window of an application"
 | 
			
		||||
msgstr "Uygulamanın bir önceki penceresine geç"
 | 
			
		||||
 | 
			
		||||
@@ -121,6 +125,7 @@ msgid "Switch directly to previous window"
 | 
			
		||||
msgstr "Önceki pencereye doğrudan geç"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:25
 | 
			
		||||
#| msgid "Move between windows of an application immediately"
 | 
			
		||||
msgid "Switch windows of an app directly"
 | 
			
		||||
msgstr "Uygulamanın pencereleri arasında anında geçiş yap"
 | 
			
		||||
 | 
			
		||||
@@ -137,6 +142,7 @@ msgid "Switch directly to previous system control"
 | 
			
		||||
msgstr "Önceki sistem denetimine doğrudan geç"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:29
 | 
			
		||||
#| msgid "Hide all normal windows and set focus to the desktop"
 | 
			
		||||
msgid "Hide all normal windows"
 | 
			
		||||
msgstr "Tüm normal pencereleri gizle"
 | 
			
		||||
 | 
			
		||||
@@ -157,22 +163,27 @@ msgid "Switch to workspace 4"
 | 
			
		||||
msgstr "Çalışma alanı 4'e geç"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:34
 | 
			
		||||
#| msgid "Switch to workspace 1"
 | 
			
		||||
msgid "Switch to last workspace"
 | 
			
		||||
msgstr "Son çalışma alanına geç"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:35
 | 
			
		||||
#| msgid "Move to Workspace _Left"
 | 
			
		||||
msgid "Move to workspace left"
 | 
			
		||||
msgstr "Soldaki çalışma alanına taşı"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:36
 | 
			
		||||
#| msgid "Move to Workspace R_ight"
 | 
			
		||||
msgid "Move to workspace right"
 | 
			
		||||
msgstr "Sağdaki çalışma alanına taşı"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:37
 | 
			
		||||
#| msgid "Move to Workspace _Left"
 | 
			
		||||
msgid "Move to workspace above"
 | 
			
		||||
msgstr "Üstteki çalışma alanına taşı"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:38
 | 
			
		||||
#| msgid "Move to Workspace _Down"
 | 
			
		||||
msgid "Move to workspace below"
 | 
			
		||||
msgstr "Alttaki çalışma alanına taşı"
 | 
			
		||||
 | 
			
		||||
@@ -181,6 +192,7 @@ msgid "System"
 | 
			
		||||
msgstr "Sistem"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-system.xml.in.h:2
 | 
			
		||||
#| msgid "Show the panel's main menu"
 | 
			
		||||
msgid "Show the run command prompt"
 | 
			
		||||
msgstr "Komut çalıştırma istemini göster"
 | 
			
		||||
 | 
			
		||||
@@ -233,12 +245,14 @@ msgid "Resize window"
 | 
			
		||||
msgstr "Pencereyi yeniden boyutlandır"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:12
 | 
			
		||||
#| msgid "Toggle whether window is on all workspaces or just one"
 | 
			
		||||
msgid "Toggle window on all workspaces or one"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Pencerenin tüm çalışma alanlarında veya sadece bir tanesi üzerinde olmasını "
 | 
			
		||||
"seç"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-windows.xml.in.h:13
 | 
			
		||||
#| msgid "Raise window if it's covered by another window, otherwise lower it"
 | 
			
		||||
msgid "Raise window if covered, otherwise lower it"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Pencere eğer başkası tarafından kapatılmışsa yukarı çıkar, yoksa aşağıya it"
 | 
			
		||||
@@ -360,6 +374,11 @@ msgid "Delay focus changes until the pointer stops moving"
 | 
			
		||||
msgstr "Odak değişikliklerini işaretçi hareketi durana kadar ertele"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.gschema.xml.in.h:14
 | 
			
		||||
#| msgid ""
 | 
			
		||||
#| "If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
 | 
			
		||||
#| "the focused window will be automatically raised after a delay specified "
 | 
			
		||||
#| "by the auto_raise_delay key. This is not related to clicking on a window "
 | 
			
		||||
#| "to raise it, nor to entering a window during drag-and-drop."
 | 
			
		||||
msgid ""
 | 
			
		||||
"If set to true, and the focus mode is either \"sloppy\" or \"mouse\" then "
 | 
			
		||||
"the focus will not be changed immediately when entering a window, but only "
 | 
			
		||||
@@ -414,69 +433,81 @@ msgid "Cancel tab popup"
 | 
			
		||||
msgstr "Sekmeyi yeni pencerede açmayı iptal et"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:1
 | 
			
		||||
#| msgid "Switch to workspace 1"
 | 
			
		||||
msgid "Switch to VT 1"
 | 
			
		||||
msgstr "VT 1'e geç"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:2
 | 
			
		||||
#| msgid "Switch to workspace 2"
 | 
			
		||||
msgid "Switch to VT 2"
 | 
			
		||||
msgstr "VT 2'ye geç"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:3
 | 
			
		||||
#| msgid "Switch to workspace 3"
 | 
			
		||||
msgid "Switch to VT 3"
 | 
			
		||||
msgstr "VT 3'e geç"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:4
 | 
			
		||||
#| msgid "Switch to workspace 4"
 | 
			
		||||
msgid "Switch to VT 4"
 | 
			
		||||
msgstr "VT 4'e geç"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:5
 | 
			
		||||
#| msgid "Switch to workspace 5"
 | 
			
		||||
msgid "Switch to VT 5"
 | 
			
		||||
msgstr "VT 5'e geç"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:6
 | 
			
		||||
#| msgid "Switch to workspace 6"
 | 
			
		||||
msgid "Switch to VT 6"
 | 
			
		||||
msgstr "VT 6'ya geç"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:7
 | 
			
		||||
#| msgid "Switch to workspace 7"
 | 
			
		||||
msgid "Switch to VT 7"
 | 
			
		||||
msgstr "VT 7'ye geç"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:8
 | 
			
		||||
#| msgid "Switch to workspace 1"
 | 
			
		||||
msgid "Switch to VT 8"
 | 
			
		||||
msgstr "VT 8'e geç"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:9
 | 
			
		||||
#| msgid "Switch to workspace 1"
 | 
			
		||||
msgid "Switch to VT 9"
 | 
			
		||||
msgstr "VT 9'a geç"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:10
 | 
			
		||||
#| msgid "Switch to workspace 1"
 | 
			
		||||
msgid "Switch to VT 10"
 | 
			
		||||
msgstr "VT 10'a geç"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:11
 | 
			
		||||
#| msgid "Switch to workspace 1"
 | 
			
		||||
msgid "Switch to VT 11"
 | 
			
		||||
msgstr "VT 11'e geç"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.mutter.wayland.gschema.xml.in.h:12
 | 
			
		||||
#| msgid "Switch to workspace 1"
 | 
			
		||||
msgid "Switch to VT 12"
 | 
			
		||||
msgstr "VT 12'ye geç"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:515
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:364
 | 
			
		||||
msgid "Built-in display"
 | 
			
		||||
msgstr "Yerleşik ekran"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:538
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:391
 | 
			
		||||
msgid "Unknown"
 | 
			
		||||
msgstr "Bilinmiyor"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:540
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:393
 | 
			
		||||
msgid "Unknown Display"
 | 
			
		||||
msgstr "Bilinmeyen Ekran"
 | 
			
		||||
 | 
			
		||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
 | 
			
		||||
#. * size in inches, like 'Dell 15"'
 | 
			
		||||
#.
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:548
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:401
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s %s"
 | 
			
		||||
msgstr "%s %s"
 | 
			
		||||
@@ -492,7 +523,7 @@ msgstr ""
 | 
			
		||||
"\"%2$s\" monitöründeki %1$i ekranında zaten başka bir birleştirme yöneticisi "
 | 
			
		||||
"çalışıyor."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/bell.c:194
 | 
			
		||||
#: ../src/core/bell.c:185
 | 
			
		||||
msgid "Bell event"
 | 
			
		||||
msgstr "Etkinlik zili"
 | 
			
		||||
 | 
			
		||||
@@ -521,44 +552,40 @@ msgstr "_Bekle"
 | 
			
		||||
msgid "_Force Quit"
 | 
			
		||||
msgstr "_Sonlandır"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/display.c:555
 | 
			
		||||
#: ../src/core/display.c:562
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Failed to open X Window System display '%s'\n"
 | 
			
		||||
msgstr "X Pencere Sistemi '%s' ekranı açılamadı\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:181
 | 
			
		||||
#: ../src/core/main.c:176
 | 
			
		||||
msgid "Disable connection to session manager"
 | 
			
		||||
msgstr "Ortam yöneticisine olan bağlantıyı kapat"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:187
 | 
			
		||||
#: ../src/core/main.c:182
 | 
			
		||||
msgid "Replace the running window manager"
 | 
			
		||||
msgstr "Çalışan pencere yöneticisinin yerini al"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
#: ../src/core/main.c:188
 | 
			
		||||
msgid "Specify session management ID"
 | 
			
		||||
msgstr "Ortam yönetim ID'sini belirtin"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:198
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
msgid "X Display to use"
 | 
			
		||||
msgstr "Kullanılacak X Ekranı"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:204
 | 
			
		||||
#: ../src/core/main.c:199
 | 
			
		||||
msgid "Initialize session from savefile"
 | 
			
		||||
msgstr "Ortamı kayıtlı dosyadan başlat"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:210
 | 
			
		||||
#: ../src/core/main.c:205
 | 
			
		||||
msgid "Make X calls synchronous"
 | 
			
		||||
msgstr "X çağrılarını eşazamanlı yap"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:217
 | 
			
		||||
#: ../src/core/main.c:212
 | 
			
		||||
msgid "Run as a wayland compositor"
 | 
			
		||||
msgstr "Bir wayland dizgicisi olarak çalıştır"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:223
 | 
			
		||||
msgid "Run as a nested compositor"
 | 
			
		||||
msgstr "Yuvalanmış dizgici olarak çalıştır"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:231
 | 
			
		||||
#: ../src/core/main.c:220
 | 
			
		||||
msgid "Run as a full display server, rather than nested"
 | 
			
		||||
msgstr "İç içe değil tam ekran sunucusu olarak çalıştır"
 | 
			
		||||
 | 
			
		||||
@@ -584,13 +611,16 @@ msgstr "Sürümü yazdır"
 | 
			
		||||
msgid "Mutter plugin to use"
 | 
			
		||||
msgstr "Kullanılacak Mutter eklentisi"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/prefs.c:1997
 | 
			
		||||
#: ../src/core/prefs.c:2004
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Workspace %d"
 | 
			
		||||
msgstr "Çalışma Alanı %d"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:521
 | 
			
		||||
#: ../src/core/screen.c:525
 | 
			
		||||
#, c-format
 | 
			
		||||
#| msgid ""
 | 
			
		||||
#| "Screen %d on display \"%s\" already has a window manager; try using the --"
 | 
			
		||||
#| "replace option to replace the current window manager.\n"
 | 
			
		||||
msgid ""
 | 
			
		||||
"Display \"%s\" already has a window manager; try using the --replace option "
 | 
			
		||||
"to replace the current window manager."
 | 
			
		||||
@@ -599,12 +629,12 @@ msgstr ""
 | 
			
		||||
"yöneticisinin yerine bir başkasını koymak için --replace seçeneğini "
 | 
			
		||||
"kullanmayı deneyin."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:603
 | 
			
		||||
#: ../src/core/screen.c:607
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Screen %d on display '%s' is invalid\n"
 | 
			
		||||
msgstr "'%2$s' X oturumundaki ekran %1$d geçersiz\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/util.c:121
 | 
			
		||||
#: ../src/core/util.c:118
 | 
			
		||||
msgid "Mutter was compiled without support for verbose mode\n"
 | 
			
		||||
msgstr "Mutter, ayrıntılı kip desteği olmadan derlenmiş\n"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										52
									
								
								po/vi.po
									
									
									
									
									
								
							
							
						
						
									
										52
									
								
								po/vi.po
									
									
									
									
									
								
							@@ -1,17 +1,17 @@
 | 
			
		||||
# Vietnamese translation for Metacity.
 | 
			
		||||
# Copyright © 2016 GNOME i18n Project for Vietnamese.
 | 
			
		||||
# Copyright © 2015 GNOME i18n Project for Vietnamese.
 | 
			
		||||
# This file is distributed under the same license as the Metacity package.
 | 
			
		||||
# Nguyễn Thái Ngọc Duy <pclouds@gmail.com>, 2002-2004, 2007, 2008, 2011-2013.
 | 
			
		||||
# Clytie Siddall <clytie@riverland.net.au>, 2005-2009.
 | 
			
		||||
# Trần Ngọc Quân <vnwildman@gmail.com>, 2014, 2015, 2016.
 | 
			
		||||
# Trần Ngọc Quân <vnwildman@gmail.com>, 2014, 2015.
 | 
			
		||||
#
 | 
			
		||||
msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: metacity master\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
 | 
			
		||||
"product=mutter&keywords=I18N+L10N&component=general\n"
 | 
			
		||||
"POT-Creation-Date: 2016-03-26 14:03+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2016-03-27 07:22+0700\n"
 | 
			
		||||
"POT-Creation-Date: 2015-03-09 23:13+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2015-03-10 13:28+0700\n"
 | 
			
		||||
"Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n"
 | 
			
		||||
"Language-Team: Vietnamese <gnome-vi-list@gnome.org>\n"
 | 
			
		||||
"Language: vi\n"
 | 
			
		||||
@@ -19,11 +19,11 @@ msgstr ""
 | 
			
		||||
"Content-Type: text/plain; charset=UTF-8\n"
 | 
			
		||||
"Content-Transfer-Encoding: 8bit\n"
 | 
			
		||||
"Plural-Forms: nplurals=1; plural=0;\n"
 | 
			
		||||
"X-Generator: Gtranslator 2.91.7\n"
 | 
			
		||||
"X-Generator: LocFactoryEditor 1.8\n"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:1
 | 
			
		||||
msgid "Navigation"
 | 
			
		||||
msgstr "Điều hướng"
 | 
			
		||||
msgstr "Di chuyển"
 | 
			
		||||
 | 
			
		||||
#: ../data/50-mutter-navigation.xml.in.h:2
 | 
			
		||||
msgid "Move window to workspace 1"
 | 
			
		||||
@@ -447,22 +447,22 @@ msgstr "Chuyển sang VT 11"
 | 
			
		||||
msgid "Switch to VT 12"
 | 
			
		||||
msgstr "Chuyển sang VT 12"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:518
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:364
 | 
			
		||||
msgid "Built-in display"
 | 
			
		||||
msgstr "Màn hình tích hợp"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:544
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:391
 | 
			
		||||
msgid "Unknown"
 | 
			
		||||
msgstr "Không rõ"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:546
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:393
 | 
			
		||||
msgid "Unknown Display"
 | 
			
		||||
msgstr "Không hiểu màn hình"
 | 
			
		||||
 | 
			
		||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
 | 
			
		||||
#. * size in inches, like 'Dell 15"'
 | 
			
		||||
#.
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:554
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:401
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s %s"
 | 
			
		||||
msgstr "%s %s"
 | 
			
		||||
@@ -477,7 +477,7 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Bộ quản lý cửa sổ đã đang chạy trên Màn hình %i trên bộ trình bày \"%s\"."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/bell.c:194
 | 
			
		||||
#: ../src/core/bell.c:185
 | 
			
		||||
msgid "Bell event"
 | 
			
		||||
msgstr "Sự kiện chuông"
 | 
			
		||||
 | 
			
		||||
@@ -506,44 +506,40 @@ msgstr "_Chờ"
 | 
			
		||||
msgid "_Force Quit"
 | 
			
		||||
msgstr "_Buộc thoát"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/display.c:555
 | 
			
		||||
#: ../src/core/display.c:562
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Failed to open X Window System display '%s'\n"
 | 
			
		||||
msgstr "Gặp lỗi khi mở bộ trình bày Hệ thống Cửa sổ X \"%s\".\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:181
 | 
			
		||||
#: ../src/core/main.c:176
 | 
			
		||||
msgid "Disable connection to session manager"
 | 
			
		||||
msgstr "Vô hiệu hóa kết nối với bộ quản lý phiên làm việc"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:187
 | 
			
		||||
#: ../src/core/main.c:182
 | 
			
		||||
msgid "Replace the running window manager"
 | 
			
		||||
msgstr "Thay thế bộ quản lý cửa sổ đang chạy"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
#: ../src/core/main.c:188
 | 
			
		||||
msgid "Specify session management ID"
 | 
			
		||||
msgstr "Ghi rõ mã số quản lý phiên làm việc"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:198
 | 
			
		||||
#: ../src/core/main.c:193
 | 
			
		||||
msgid "X Display to use"
 | 
			
		||||
msgstr "Bộ trình bày X cần dùng"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:204
 | 
			
		||||
#: ../src/core/main.c:199
 | 
			
		||||
msgid "Initialize session from savefile"
 | 
			
		||||
msgstr "Khởi động phiên làm việc từ tập tin lưu"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:210
 | 
			
		||||
#: ../src/core/main.c:205
 | 
			
		||||
msgid "Make X calls synchronous"
 | 
			
		||||
msgstr "Khiến các lời gọi X đồng bộ với nhau"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:217
 | 
			
		||||
#: ../src/core/main.c:212
 | 
			
		||||
msgid "Run as a wayland compositor"
 | 
			
		||||
msgstr "Chạy như là một “wayland compositor”"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:223
 | 
			
		||||
msgid "Run as a nested compositor"
 | 
			
		||||
msgstr "Chạy như là một “nested compositor”"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:231
 | 
			
		||||
#: ../src/core/main.c:220
 | 
			
		||||
msgid "Run as a full display server, rather than nested"
 | 
			
		||||
msgstr "Chạy như là một dịch vụ hiển thị đầy đủ, thay cho lồng nhau"
 | 
			
		||||
 | 
			
		||||
@@ -571,12 +567,12 @@ msgstr "Hiển thị phiên bản"
 | 
			
		||||
msgid "Mutter plugin to use"
 | 
			
		||||
msgstr "Phần bổ sung Mutter cần dùng"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/prefs.c:1997
 | 
			
		||||
#: ../src/core/prefs.c:2004
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Workspace %d"
 | 
			
		||||
msgstr "Vùng làm việc %d"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:521
 | 
			
		||||
#: ../src/core/screen.c:525
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"Display \"%s\" already has a window manager; try using the --replace option "
 | 
			
		||||
@@ -585,12 +581,12 @@ msgstr ""
 | 
			
		||||
"Màn hình \"%s\" đã có bộ quản lý cửa sổ rồi; hãy thử dùng tùy chọn “--"
 | 
			
		||||
"replace” để thay thế bộ quản lý cửa sổ đang dùng."
 | 
			
		||||
 | 
			
		||||
#: ../src/core/screen.c:603
 | 
			
		||||
#: ../src/core/screen.c:607
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Screen %d on display '%s' is invalid\n"
 | 
			
		||||
msgstr "Màn hình %d trên bộ trình bày \"%s\" không hợp lệ.\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/util.c:121
 | 
			
		||||
#: ../src/core/util.c:118
 | 
			
		||||
msgid "Mutter was compiled without support for verbose mode\n"
 | 
			
		||||
msgstr "Mutter đã được biên dịch không hỗ trợ chế độ chi tiết\n"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										20
									
								
								po/zh_TW.po
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								po/zh_TW.po
									
									
									
									
									
								
							@@ -10,7 +10,7 @@ msgstr ""
 | 
			
		||||
"Project-Id-Version: metacity 3.3.4\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
 | 
			
		||||
"product=mutter&keywords=I18N+L10N&component=general\n"
 | 
			
		||||
"POT-Creation-Date: 2015-07-21 10:52+0000\n"
 | 
			
		||||
"POT-Creation-Date: 2015-02-20 23:22+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2015-02-21 16:33+0800\n"
 | 
			
		||||
"Last-Translator: Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>\n"
 | 
			
		||||
"Language-Team: Chinese (Taiwan) <zh-l10n@lists.linux.org.tw>\n"
 | 
			
		||||
@@ -439,22 +439,22 @@ msgstr "切換至 VT 11"
 | 
			
		||||
msgid "Switch to VT 12"
 | 
			
		||||
msgstr "切換至 VT 12"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:500
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:364
 | 
			
		||||
msgid "Built-in display"
 | 
			
		||||
msgstr "內建顯示"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:526
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:391
 | 
			
		||||
msgid "Unknown"
 | 
			
		||||
msgstr "不明"
 | 
			
		||||
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:528
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:393
 | 
			
		||||
msgid "Unknown Display"
 | 
			
		||||
msgstr "不明的顯示器"
 | 
			
		||||
 | 
			
		||||
#. TRANSLATORS: this is a monitor vendor name, followed by a
 | 
			
		||||
#. * size in inches, like 'Dell 15"'
 | 
			
		||||
#.
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:536
 | 
			
		||||
#: ../src/backends/meta-monitor-manager.c:401
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s %s"
 | 
			
		||||
msgstr "%s %s"
 | 
			
		||||
@@ -462,7 +462,7 @@ msgstr "%s %s"
 | 
			
		||||
# FIXME: I'm still unclear about the meaning of XGetSelectionOwner -- Abel
 | 
			
		||||
#. 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:451
 | 
			
		||||
#: ../src/compositor/compositor.c:456
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"Another compositing manager is already running on screen %i on display \"%s"
 | 
			
		||||
@@ -496,14 +496,14 @@ msgstr "等待(_W)"
 | 
			
		||||
msgid "_Force Quit"
 | 
			
		||||
msgstr "強制結束(_F)"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/display.c:563
 | 
			
		||||
#: ../src/core/display.c:562
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Failed to open X Window System display '%s'\n"
 | 
			
		||||
msgstr "無法開啟 X Window 畫面‘%s’\n"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:176
 | 
			
		||||
msgid "Disable connection to session manager"
 | 
			
		||||
msgstr "停用到作業階段管理員的連線"
 | 
			
		||||
msgstr "停用到作業階段管理程式的連線"
 | 
			
		||||
 | 
			
		||||
#: ../src/core/main.c:182
 | 
			
		||||
msgid "Replace the running window manager"
 | 
			
		||||
@@ -1053,9 +1053,9 @@ msgstr "%s(在 %s)"
 | 
			
		||||
#~ msgid ""
 | 
			
		||||
#~ "\"%s\" found in configuration database is not a valid value for mouse "
 | 
			
		||||
#~ "button modifier\n"
 | 
			
		||||
#~ msgstr "設定資料庫中的“%s”設定值不是有效的滑鼠按鈕修改功能鍵\n"
 | 
			
		||||
#~ msgstr "組態資料庫中的“%s”設定值不是有效的滑鼠按鈕修改功能鍵\n"
 | 
			
		||||
 | 
			
		||||
#~ msgid ""
 | 
			
		||||
#~ "\"%s\" found in configuration database is not a valid value for "
 | 
			
		||||
#~ "keybinding \"%s\"\n"
 | 
			
		||||
#~ msgstr "設定資料庫中的“%s”不是按鍵組合“%s”的有效設定值\n"
 | 
			
		||||
#~ msgstr "組態資料庫中的“%s”不是按鍵組合“%s”的有效設定值\n"
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,6 @@ dist_stacking_DATA =				\
 | 
			
		||||
	tests/stacking/basic-wayland.metatest	\
 | 
			
		||||
	tests/stacking/minimized.metatest   	\
 | 
			
		||||
	tests/stacking/mixed-windows.metatest   \
 | 
			
		||||
	tests/stacking/set-parent.metatest	\
 | 
			
		||||
	tests/stacking/override-redirect.metatest
 | 
			
		||||
 | 
			
		||||
mutter-all.test: tests/mutter-all.test.in
 | 
			
		||||
@@ -19,9 +18,9 @@ installedtestsdir = $(datadir)/installed-tests/mutter
 | 
			
		||||
installedtests_DATA = mutter-all.test
 | 
			
		||||
 | 
			
		||||
installedtestsbindir = $(libexecdir)/installed-tests/mutter
 | 
			
		||||
installedtestsbin_PROGRAMS = mutter-test-client mutter-test-runner mutter-test-unit-tests
 | 
			
		||||
installedtestsbin_PROGRAMS = mutter-test-client mutter-test-runner
 | 
			
		||||
else
 | 
			
		||||
noinst_PROGRAMS += mutter-test-client mutter-test-runner mutter-test-unit-tests
 | 
			
		||||
noinst_PROGRAMS += mutter-test-client mutter-test-runner
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
EXTRA_DIST += tests/mutter-all.test.in
 | 
			
		||||
@@ -32,24 +31,19 @@ mutter_test_client_LDADD = $(MUTTER_LIBS) libmutter.la
 | 
			
		||||
mutter_test_runner_SOURCES = tests/test-runner.c
 | 
			
		||||
mutter_test_runner_LDADD = $(MUTTER_LIBS) libmutter.la
 | 
			
		||||
 | 
			
		||||
mutter_test_unit_tests_SOURCES = tests/unit-tests.c
 | 
			
		||||
mutter_test_unit_tests_LDADD = $(MUTTER_LIBS) libmutter.la
 | 
			
		||||
.PHONY: run-tests
 | 
			
		||||
 | 
			
		||||
.PHONY: run-tests run-test-runner-tests run-unit-tests
 | 
			
		||||
 | 
			
		||||
run-test-runner-tests: mutter-test-client mutter-test-runner
 | 
			
		||||
run-tests: mutter-test-client mutter-test-runner
 | 
			
		||||
	./mutter-test-runner $(dist_stacking_DATA)
 | 
			
		||||
 | 
			
		||||
run-unit-tests: mutter-test-unit-tests
 | 
			
		||||
	./mutter-test-unit-tests
 | 
			
		||||
 | 
			
		||||
run-tests: run-test-runner-tests run-unit-tests
 | 
			
		||||
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Some random test programs for bits of the code
 | 
			
		||||
 | 
			
		||||
testboxes_SOURCES = core/testboxes.c
 | 
			
		||||
testboxes_LDADD = $(MUTTER_LIBS) libmutter.la
 | 
			
		||||
testasyncgetprop_SOURCES = x11/testasyncgetprop.c
 | 
			
		||||
 | 
			
		||||
noinst_PROGRAMS += testboxes
 | 
			
		||||
noinst_PROGRAMS+=testboxes testasyncgetprop
 | 
			
		||||
 | 
			
		||||
testboxes_LDADD = $(MUTTER_LIBS) libmutter.la
 | 
			
		||||
testasyncgetprop_LDADD = $(MUTTER_LIBS) libmutter.la
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										106
									
								
								src/Makefile.am
									
									
									
									
									
								
							
							
						
						
									
										106
									
								
								src/Makefile.am
									
									
									
									
									
								
							@@ -39,30 +39,22 @@ mutter_built_sources = \
 | 
			
		||||
	$(dbus_idle_built_sources)		\
 | 
			
		||||
	$(dbus_display_config_built_sources)	\
 | 
			
		||||
	$(dbus_login1_built_sources)		\
 | 
			
		||||
	meta/meta-enum-types.h			\
 | 
			
		||||
	meta-enum-types.c			\
 | 
			
		||||
	mutter-enum-types.h 			\
 | 
			
		||||
	mutter-enum-types.c			\
 | 
			
		||||
	$(NULL)
 | 
			
		||||
 | 
			
		||||
if HAVE_WAYLAND
 | 
			
		||||
mutter_built_sources += \
 | 
			
		||||
	pointer-gestures-unstable-v1-protocol.c				\
 | 
			
		||||
	pointer-gestures-unstable-v1-server-protocol.h			\
 | 
			
		||||
	gtk-shell-protocol.c			\
 | 
			
		||||
	gtk-shell-server-protocol.h		\
 | 
			
		||||
	gtk-primary-selection-protocol.c				\
 | 
			
		||||
	gtk-primary-selection-server-protocol.h				\
 | 
			
		||||
	xdg-shell-unstable-v5-protocol.c				\
 | 
			
		||||
	xdg-shell-unstable-v5-server-protocol.h				\
 | 
			
		||||
	relative-pointer-unstable-v1-protocol.c				\
 | 
			
		||||
	relative-pointer-unstable-v1-server-protocol.h			\
 | 
			
		||||
	pointer-constraints-unstable-v1-protocol.c			\
 | 
			
		||||
	pointer-constraints-unstable-v1-server-protocol.h		\
 | 
			
		||||
	xdg-shell-protocol.c			\
 | 
			
		||||
	xdg-shell-server-protocol.h		\
 | 
			
		||||
	$(NULL)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
wayland_protocols =				\
 | 
			
		||||
	wayland/protocol/gtk-shell.xml		\
 | 
			
		||||
	wayland/protocol/gtk-primary-selection.xml	\
 | 
			
		||||
	wayland/protocol/xdg-shell.xml		\
 | 
			
		||||
	$(NULL)
 | 
			
		||||
 | 
			
		||||
libmutter_la_SOURCES =				\
 | 
			
		||||
@@ -73,6 +65,7 @@ libmutter_la_SOURCES =				\
 | 
			
		||||
	backends/meta-barrier-private.h		\
 | 
			
		||||
	backends/meta-cursor.c			\
 | 
			
		||||
	backends/meta-cursor.h			\
 | 
			
		||||
	backends/meta-cursor-private.h		\
 | 
			
		||||
	backends/meta-cursor-tracker.c		\
 | 
			
		||||
	backends/meta-cursor-tracker-private.h	\
 | 
			
		||||
	backends/meta-cursor-renderer.c		\
 | 
			
		||||
@@ -91,8 +84,6 @@ libmutter_la_SOURCES =				\
 | 
			
		||||
	backends/meta-monitor-manager-private.h	\
 | 
			
		||||
	backends/meta-monitor-manager-dummy.c	\
 | 
			
		||||
	backends/meta-monitor-manager-dummy.h	\
 | 
			
		||||
	backends/meta-pointer-constraint.c	\
 | 
			
		||||
	backends/meta-pointer-constraint.h	\
 | 
			
		||||
	backends/meta-stage.h			\
 | 
			
		||||
	backends/meta-stage.c			\
 | 
			
		||||
	backends/edid-parse.c			\
 | 
			
		||||
@@ -103,8 +94,6 @@ libmutter_la_SOURCES =				\
 | 
			
		||||
	backends/x11/meta-barrier-x11.h			\
 | 
			
		||||
	backends/x11/meta-cursor-renderer-x11.c		\
 | 
			
		||||
	backends/x11/meta-cursor-renderer-x11.h		\
 | 
			
		||||
	backends/x11/nested/meta-cursor-renderer-x11-nested.c		\
 | 
			
		||||
	backends/x11/nested/meta-cursor-renderer-x11-nested.h		\
 | 
			
		||||
	backends/x11/meta-idle-monitor-xsync.c		\
 | 
			
		||||
	backends/x11/meta-idle-monitor-xsync.h		\
 | 
			
		||||
	backends/x11/meta-input-settings-x11.c		\
 | 
			
		||||
@@ -119,8 +108,6 @@ libmutter_la_SOURCES =				\
 | 
			
		||||
	core/boxes.c				\
 | 
			
		||||
	core/boxes-private.h			\
 | 
			
		||||
	meta/boxes.h				\
 | 
			
		||||
	core/meta-border.c			\
 | 
			
		||||
	core/meta-border.h			\
 | 
			
		||||
	compositor/clutter-utils.c		\
 | 
			
		||||
	compositor/clutter-utils.h		\
 | 
			
		||||
	compositor/cogl-utils.c			\
 | 
			
		||||
@@ -145,14 +132,13 @@ libmutter_la_SOURCES =				\
 | 
			
		||||
	compositor/meta-plugin-manager.c	\
 | 
			
		||||
	compositor/meta-plugin-manager.h	\
 | 
			
		||||
	compositor/meta-shadow-factory.c	\
 | 
			
		||||
	compositor/meta-shadow-factory-private.h	\
 | 
			
		||||
	compositor/meta-shaped-texture.c	\
 | 
			
		||||
	compositor/meta-shaped-texture-private.h 	\
 | 
			
		||||
	compositor/meta-surface-actor.c		\
 | 
			
		||||
	compositor/meta-surface-actor.h		\
 | 
			
		||||
	compositor/meta-surface-actor-x11.c	\
 | 
			
		||||
	compositor/meta-surface-actor-x11.h	\
 | 
			
		||||
	compositor/meta-sync-ring.c		\
 | 
			
		||||
	compositor/meta-sync-ring.h		\
 | 
			
		||||
	compositor/meta-texture-rectangle.c	\
 | 
			
		||||
	compositor/meta-texture-rectangle.h	\
 | 
			
		||||
	compositor/meta-texture-tower.c		\
 | 
			
		||||
@@ -162,6 +148,7 @@ libmutter_la_SOURCES =				\
 | 
			
		||||
	compositor/meta-window-group.c		\
 | 
			
		||||
	compositor/meta-window-group.h		\
 | 
			
		||||
	compositor/meta-window-shape.c		\
 | 
			
		||||
	compositor/meta-window-shape.h		\
 | 
			
		||||
	compositor/region-utils.c		\
 | 
			
		||||
	compositor/region-utils.h		\
 | 
			
		||||
	meta/compositor.h			\
 | 
			
		||||
@@ -172,7 +159,6 @@ libmutter_la_SOURCES =				\
 | 
			
		||||
	meta/meta-plugin.h			\
 | 
			
		||||
	meta/meta-shadow-factory.h		\
 | 
			
		||||
	meta/meta-window-actor.h		\
 | 
			
		||||
	meta/meta-window-shape.h		\
 | 
			
		||||
	meta/compositor-mutter.h 		\
 | 
			
		||||
	core/constraints.c			\
 | 
			
		||||
	core/constraints.h			\
 | 
			
		||||
@@ -201,8 +187,6 @@ libmutter_la_SOURCES =				\
 | 
			
		||||
	core/screen.c				\
 | 
			
		||||
	core/screen-private.h			\
 | 
			
		||||
	meta/screen.h				\
 | 
			
		||||
	core/startup-notification.c		\
 | 
			
		||||
	core/startup-notification-private.h	\
 | 
			
		||||
	meta/types.h				\
 | 
			
		||||
	core/restart.c				\
 | 
			
		||||
	core/stack.c				\
 | 
			
		||||
@@ -226,7 +210,10 @@ libmutter_la_SOURCES =				\
 | 
			
		||||
	meta/theme.h				\
 | 
			
		||||
	ui/theme-private.h			\
 | 
			
		||||
	ui/ui.c					\
 | 
			
		||||
	x11/atomnames.h				\
 | 
			
		||||
	x11/iconcache.c				\
 | 
			
		||||
	x11/iconcache.h				\
 | 
			
		||||
	x11/async-getprop.c			\
 | 
			
		||||
	x11/async-getprop.h			\
 | 
			
		||||
	x11/events.c				\
 | 
			
		||||
	x11/events.h				\
 | 
			
		||||
	x11/group-private.h			\
 | 
			
		||||
@@ -234,8 +221,6 @@ libmutter_la_SOURCES =				\
 | 
			
		||||
	x11/group-props.h			\
 | 
			
		||||
	x11/group.c				\
 | 
			
		||||
	meta/group.h				\
 | 
			
		||||
	x11/iconcache.c				\
 | 
			
		||||
	x11/iconcache.h				\
 | 
			
		||||
	x11/session.c				\
 | 
			
		||||
	x11/session.h				\
 | 
			
		||||
	x11/window-props.c			\
 | 
			
		||||
@@ -257,8 +242,6 @@ libmutter_la_SOURCES +=				\
 | 
			
		||||
	wayland/meta-wayland-private.h		\
 | 
			
		||||
	wayland/meta-xwayland.c			\
 | 
			
		||||
	wayland/meta-xwayland.h			\
 | 
			
		||||
	wayland/meta-xwayland-selection.c	\
 | 
			
		||||
	wayland/meta-xwayland-selection-private.h	\
 | 
			
		||||
	wayland/meta-xwayland-private.h		\
 | 
			
		||||
	wayland/meta-wayland-buffer.c      	\
 | 
			
		||||
	wayland/meta-wayland-buffer.h      	\
 | 
			
		||||
@@ -266,23 +249,10 @@ libmutter_la_SOURCES +=				\
 | 
			
		||||
	wayland/meta-wayland-region.h      	\
 | 
			
		||||
	wayland/meta-wayland-data-device.c      \
 | 
			
		||||
	wayland/meta-wayland-data-device.h      \
 | 
			
		||||
	wayland/meta-wayland-data-device-private.h	\
 | 
			
		||||
	wayland/meta-wayland-pointer-gestures.c	\
 | 
			
		||||
	wayland/meta-wayland-pointer-gestures.h	\
 | 
			
		||||
	wayland/meta-wayland-pointer-gesture-swipe.c	\
 | 
			
		||||
	wayland/meta-wayland-pointer-gesture-swipe.h	\
 | 
			
		||||
	wayland/meta-wayland-pointer-gesture-pinch.c	\
 | 
			
		||||
	wayland/meta-wayland-pointer-gesture-pinch.h	\
 | 
			
		||||
	wayland/meta-wayland-keyboard.c		\
 | 
			
		||||
	wayland/meta-wayland-keyboard.h		\
 | 
			
		||||
	wayland/meta-wayland-pointer.c		\
 | 
			
		||||
	wayland/meta-wayland-pointer.h		\
 | 
			
		||||
	wayland/meta-wayland-pointer-constraints.c	\
 | 
			
		||||
	wayland/meta-wayland-pointer-constraints.h	\
 | 
			
		||||
	wayland/meta-pointer-lock-wayland.c		\
 | 
			
		||||
	wayland/meta-pointer-lock-wayland.h		\
 | 
			
		||||
	wayland/meta-pointer-confinement-wayland.c	\
 | 
			
		||||
	wayland/meta-pointer-confinement-wayland.h	\
 | 
			
		||||
	wayland/meta-wayland-popup.c		\
 | 
			
		||||
	wayland/meta-wayland-popup.h		\
 | 
			
		||||
	wayland/meta-wayland-seat.c		\
 | 
			
		||||
@@ -295,8 +265,8 @@ libmutter_la_SOURCES +=				\
 | 
			
		||||
	wayland/meta-wayland-versions.h		\
 | 
			
		||||
	wayland/meta-wayland-outputs.c		\
 | 
			
		||||
	wayland/meta-wayland-outputs.h		\
 | 
			
		||||
	wayland/meta-window-wayland.c		\
 | 
			
		||||
	wayland/meta-window-wayland.h		\
 | 
			
		||||
	wayland/window-wayland.c		\
 | 
			
		||||
	wayland/window-wayland.h		\
 | 
			
		||||
	$(NULL)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
@@ -352,7 +322,6 @@ libmutterinclude_headers =			\
 | 
			
		||||
	meta/meta-shaped-texture.h		\
 | 
			
		||||
	meta/meta-shadow-factory.h		\
 | 
			
		||||
	meta/meta-window-actor.h		\
 | 
			
		||||
	meta/meta-window-shape.h		\
 | 
			
		||||
	meta/prefs.h				\
 | 
			
		||||
	meta/screen.h				\
 | 
			
		||||
	meta/theme.h				\
 | 
			
		||||
@@ -363,18 +332,22 @@ libmutterinclude_headers =			\
 | 
			
		||||
	$(NULL)
 | 
			
		||||
 | 
			
		||||
libmutterinclude_built_headers =		\
 | 
			
		||||
	meta/meta-version.h			\
 | 
			
		||||
	meta/meta-enum-types.h			\
 | 
			
		||||
	$(NULL)
 | 
			
		||||
	meta/meta-version.h
 | 
			
		||||
 | 
			
		||||
libmutterinclude_base_headers =			\
 | 
			
		||||
	$(libmutterinclude_headers)		\
 | 
			
		||||
	$(libmutterinclude_built_headers)
 | 
			
		||||
 | 
			
		||||
# Excluded from scanning for introspection but installed
 | 
			
		||||
# atomnames.h: macros cause problems for scanning process
 | 
			
		||||
libmutterinclude_extra_headers =		\
 | 
			
		||||
	meta/atomnames.h
 | 
			
		||||
 | 
			
		||||
libmutterincludedir = $(includedir)/mutter/meta
 | 
			
		||||
 | 
			
		||||
libmutterinclude_HEADERS =			\
 | 
			
		||||
	$(libmutterinclude_headers)
 | 
			
		||||
	$(libmutterinclude_headers)		\
 | 
			
		||||
	$(libmutterinclude_extra_headers)
 | 
			
		||||
 | 
			
		||||
nodist_libmutterinclude_HEADERS =		\
 | 
			
		||||
	$(libmutterinclude_built_headers)
 | 
			
		||||
@@ -417,6 +390,7 @@ Meta-$(api_version).gir: libmutter.la
 | 
			
		||||
@META_GIR@_CFLAGS = $(AM_CPPFLAGS)
 | 
			
		||||
@META_GIR@_LIBS = libmutter.la
 | 
			
		||||
@META_GIR@_FILES =				\
 | 
			
		||||
	mutter-enum-types.h			\
 | 
			
		||||
	$(libmutterinclude_base_headers)	\
 | 
			
		||||
	$(filter %.c,$(libmutter_la_SOURCES) $(nodist_libmutter_la_SOURCES))
 | 
			
		||||
@META_GIR@_SCANNERFLAGS = --warn-all --warn-error
 | 
			
		||||
@@ -439,8 +413,8 @@ pkgconfig_DATA = libmutter.pc
 | 
			
		||||
EXTRA_DIST +=					\
 | 
			
		||||
	$(wayland_protocols)			\
 | 
			
		||||
	libmutter.pc.in				\
 | 
			
		||||
	meta-enum-types.h.in			\
 | 
			
		||||
	meta-enum-types.c.in			\
 | 
			
		||||
	mutter-enum-types.h.in			\
 | 
			
		||||
	mutter-enum-types.c.in			\
 | 
			
		||||
	org.freedesktop.login1.xml		\
 | 
			
		||||
	org.gnome.Mutter.DisplayConfig.xml	\
 | 
			
		||||
	org.gnome.Mutter.IdleMonitor.xml	\
 | 
			
		||||
@@ -450,26 +424,26 @@ BUILT_SOURCES =					\
 | 
			
		||||
	$(mutter_built_sources)			\
 | 
			
		||||
	$(libmutterinclude_built_headers)
 | 
			
		||||
 | 
			
		||||
MUTTER_STAMP_FILES = stamp-meta-enum-types.h
 | 
			
		||||
MUTTER_STAMP_FILES = stamp-mutter-enum-types.h
 | 
			
		||||
CLEANFILES += $(MUTTER_STAMP_FILES)
 | 
			
		||||
 | 
			
		||||
meta/meta-enum-types.h: stamp-meta-enum-types.h Makefile
 | 
			
		||||
mutter-enum-types.h: stamp-mutter-enum-types.h Makefile
 | 
			
		||||
	@true
 | 
			
		||||
stamp-meta-enum-types.h: $(libmutterinclude_headers) meta-enum-types.h.in
 | 
			
		||||
stamp-mutter-enum-types.h: $(libmutterinclude_base_headers) mutter-enum-types.h.in
 | 
			
		||||
	$(AM_V_GEN) ( cd $(srcdir) && \
 | 
			
		||||
	  $(GLIB_MKENUMS) \
 | 
			
		||||
	    --template meta-enum-types.h.in \
 | 
			
		||||
	    --template mutter-enum-types.h.in \
 | 
			
		||||
	  $(libmutterinclude_base_headers) ) >> xgen-teth && \
 | 
			
		||||
	(cmp -s xgen-teth meta/meta-enum-types.h || cp xgen-teth meta/meta-enum-types.h) && \
 | 
			
		||||
	(cmp -s xgen-teth mutter-enum-types.h || cp xgen-teth mutter-enum-types.h) && \
 | 
			
		||||
	rm -f xgen-teth && \
 | 
			
		||||
	echo timestamp > $(@F)
 | 
			
		||||
 | 
			
		||||
meta-enum-types.c: stamp-meta-enum-types.h meta-enum-types.c.in
 | 
			
		||||
mutter-enum-types.c: stamp-mutter-enum-types.h mutter-enum-types.c.in
 | 
			
		||||
	  $(AM_V_GEN) ( cd $(srcdir) && \
 | 
			
		||||
	  $(GLIB_MKENUMS) \
 | 
			
		||||
	    --template meta-enum-types.c.in \
 | 
			
		||||
	    --template mutter-enum-types.c.in \
 | 
			
		||||
	  $(libmutterinclude_base_headers) ) >> xgen-tetc && \
 | 
			
		||||
	cp xgen-tetc meta-enum-types.c && \
 | 
			
		||||
	cp xgen-tetc mutter-enum-types.c && \
 | 
			
		||||
	rm -f xgen-tetc
 | 
			
		||||
 | 
			
		||||
dbus_display_config_built_sources = meta-dbus-display-config.c meta-dbus-display-config.h
 | 
			
		||||
@@ -498,20 +472,6 @@ $(dbus_login1_built_sources) : Makefile.am org.freedesktop.login1.xml
 | 
			
		||||
		--generate-c-code meta-dbus-login1					\
 | 
			
		||||
		$(srcdir)/org.freedesktop.login1.xml
 | 
			
		||||
 | 
			
		||||
.SECONDEXPANSION:
 | 
			
		||||
 | 
			
		||||
define protostability
 | 
			
		||||
$(shell echo $1 | sed 's/.*\(\<unstable\>\|\<stable\>\).*/\1/')
 | 
			
		||||
endef
 | 
			
		||||
 | 
			
		||||
define protoname
 | 
			
		||||
$(shell echo $1 | sed 's/\([a-z\-]\+\)-[a-z]\+-v[0-9]\+/\1/')
 | 
			
		||||
endef
 | 
			
		||||
 | 
			
		||||
%-protocol.c : $(WAYLAND_PROTOCOLS_DATADIR)/$$(call protostability,$$*)/$$(call protoname,$$*)/$$*.xml
 | 
			
		||||
	$(AM_V_GEN)$(WAYLAND_SCANNER) code < $< > $@
 | 
			
		||||
%-server-protocol.h : $(WAYLAND_PROTOCOLS_DATADIR)/$$(call protostability,$$*)/$$(call protoname,$$*)/$$*.xml
 | 
			
		||||
	$(AM_V_GEN)$(WAYLAND_SCANNER) server-header < $< > $@
 | 
			
		||||
%-protocol.c : $(srcdir)/wayland/protocol/%.xml
 | 
			
		||||
	$(AM_V_GEN)$(WAYLAND_SCANNER) code < $< > $@
 | 
			
		||||
%-server-protocol.h : $(srcdir)/wayland/protocol/%.xml
 | 
			
		||||
 
 | 
			
		||||
@@ -34,7 +34,6 @@
 | 
			
		||||
#include <meta/meta-idle-monitor.h>
 | 
			
		||||
#include "meta-cursor-renderer.h"
 | 
			
		||||
#include "meta-monitor-manager-private.h"
 | 
			
		||||
#include "backends/meta-pointer-constraint.h"
 | 
			
		||||
 | 
			
		||||
#define DEFAULT_XKB_RULES_FILE "evdev"
 | 
			
		||||
#define DEFAULT_XKB_MODEL "pc105+inet"
 | 
			
		||||
@@ -52,8 +51,6 @@ struct _MetaBackend
 | 
			
		||||
 | 
			
		||||
  GHashTable *device_monitors;
 | 
			
		||||
  gint current_device_id;
 | 
			
		||||
 | 
			
		||||
  MetaPointerConstraint *client_pointer_constraint;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _MetaBackendClass
 | 
			
		||||
@@ -90,13 +87,6 @@ struct _MetaBackendClass
 | 
			
		||||
 | 
			
		||||
  void (* update_screen_size) (MetaBackend *backend, int width, int height);
 | 
			
		||||
  void (* select_stage_events) (MetaBackend *backend);
 | 
			
		||||
 | 
			
		||||
  gboolean (* get_relative_motion_deltas) (MetaBackend *backend,
 | 
			
		||||
                                           const        ClutterEvent *event,
 | 
			
		||||
                                           double       *dx,
 | 
			
		||||
                                           double       *dy,
 | 
			
		||||
                                           double       *dx_unaccel,
 | 
			
		||||
                                           double       *dy_unaccel);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
MetaIdleMonitor * meta_backend_get_idle_monitor (MetaBackend *backend,
 | 
			
		||||
@@ -120,14 +110,4 @@ struct xkb_keymap * meta_backend_get_keymap (MetaBackend *backend);
 | 
			
		||||
void meta_backend_update_last_device (MetaBackend *backend,
 | 
			
		||||
                                      int          device_id);
 | 
			
		||||
 | 
			
		||||
gboolean meta_backend_get_relative_motion_deltas (MetaBackend *backend,
 | 
			
		||||
                                                  const        ClutterEvent *event,
 | 
			
		||||
                                                  double       *dx,
 | 
			
		||||
                                                  double       *dy,
 | 
			
		||||
                                                  double       *dx_unaccel,
 | 
			
		||||
                                                  double       *dy_unaccel);
 | 
			
		||||
 | 
			
		||||
void meta_backend_set_client_pointer_constraint (MetaBackend *backend,
 | 
			
		||||
                                                 MetaPointerConstraint *constraint);
 | 
			
		||||
 | 
			
		||||
#endif /* META_BACKEND_PRIVATE_H */
 | 
			
		||||
 
 | 
			
		||||
@@ -24,8 +24,6 @@
 | 
			
		||||
 | 
			
		||||
#include "config.h"
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
 | 
			
		||||
#include <meta/meta-backend.h>
 | 
			
		||||
#include "meta-backend-private.h"
 | 
			
		||||
#include "meta-input-settings-private.h"
 | 
			
		||||
@@ -64,8 +62,6 @@ struct _MetaBackendPrivate
 | 
			
		||||
  MetaInputSettings *input_settings;
 | 
			
		||||
 | 
			
		||||
  ClutterActor *stage;
 | 
			
		||||
 | 
			
		||||
  guint device_update_idle_id;
 | 
			
		||||
};
 | 
			
		||||
typedef struct _MetaBackendPrivate MetaBackendPrivate;
 | 
			
		||||
 | 
			
		||||
@@ -80,9 +76,6 @@ meta_backend_finalize (GObject *object)
 | 
			
		||||
  g_clear_object (&priv->monitor_manager);
 | 
			
		||||
  g_clear_object (&priv->input_settings);
 | 
			
		||||
 | 
			
		||||
  if (priv->device_update_idle_id)
 | 
			
		||||
    g_source_remove (priv->device_update_idle_id);
 | 
			
		||||
 | 
			
		||||
  g_hash_table_destroy (backend->device_monitors);
 | 
			
		||||
 | 
			
		||||
  G_OBJECT_CLASS (meta_backend_parent_class)->finalize (object);
 | 
			
		||||
@@ -358,17 +351,6 @@ meta_backend_real_select_stage_events (MetaBackend *backend)
 | 
			
		||||
  /* Do nothing */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
meta_backend_real_get_relative_motion_deltas (MetaBackend *backend,
 | 
			
		||||
                                             const         ClutterEvent *event,
 | 
			
		||||
                                             double        *dx,
 | 
			
		||||
                                             double        *dy,
 | 
			
		||||
                                             double        *dx_unaccel,
 | 
			
		||||
                                             double        *dy_unaccel)
 | 
			
		||||
{
 | 
			
		||||
  return FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
meta_backend_class_init (MetaBackendClass *klass)
 | 
			
		||||
{
 | 
			
		||||
@@ -382,7 +364,6 @@ meta_backend_class_init (MetaBackendClass *klass)
 | 
			
		||||
  klass->ungrab_device = meta_backend_real_ungrab_device;
 | 
			
		||||
  klass->update_screen_size = meta_backend_real_update_screen_size;
 | 
			
		||||
  klass->select_stage_events = meta_backend_real_select_stage_events;
 | 
			
		||||
  klass->get_relative_motion_deltas = meta_backend_real_get_relative_motion_deltas;
 | 
			
		||||
 | 
			
		||||
  g_signal_new ("keymap-changed",
 | 
			
		||||
                G_TYPE_FROM_CLASS (object_class),
 | 
			
		||||
@@ -522,44 +503,12 @@ meta_backend_get_stage (MetaBackend *backend)
 | 
			
		||||
  return priv->stage;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
update_last_device (MetaBackend *backend)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorTracker *cursor_tracker = meta_cursor_tracker_get_for_screen (NULL);
 | 
			
		||||
  MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
 | 
			
		||||
  ClutterInputDeviceType device_type;
 | 
			
		||||
  ClutterDeviceManager *manager;
 | 
			
		||||
  ClutterInputDevice *device;
 | 
			
		||||
 | 
			
		||||
  priv->device_update_idle_id = 0;
 | 
			
		||||
  manager = clutter_device_manager_get_default ();
 | 
			
		||||
  device = clutter_device_manager_get_device (manager,
 | 
			
		||||
                                              backend->current_device_id);
 | 
			
		||||
  device_type = clutter_input_device_get_device_type (device);
 | 
			
		||||
 | 
			
		||||
  g_signal_emit_by_name (backend, "last-device-changed",
 | 
			
		||||
                         backend->current_device_id);
 | 
			
		||||
 | 
			
		||||
  switch (device_type)
 | 
			
		||||
    {
 | 
			
		||||
    case CLUTTER_KEYBOARD_DEVICE:
 | 
			
		||||
      break;
 | 
			
		||||
    case CLUTTER_TOUCHSCREEN_DEVICE:
 | 
			
		||||
      meta_cursor_tracker_set_pointer_visible (cursor_tracker, FALSE);
 | 
			
		||||
      break;
 | 
			
		||||
    default:
 | 
			
		||||
      meta_cursor_tracker_set_pointer_visible (cursor_tracker, TRUE);
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  return G_SOURCE_REMOVE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
meta_backend_update_last_device (MetaBackend *backend,
 | 
			
		||||
                                 int          device_id)
 | 
			
		||||
{
 | 
			
		||||
  MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
 | 
			
		||||
  ClutterInputDeviceType device_type;
 | 
			
		||||
  MetaCursorTracker *cursor_tracker;
 | 
			
		||||
  ClutterDeviceManager *manager;
 | 
			
		||||
  ClutterInputDevice *device;
 | 
			
		||||
 | 
			
		||||
@@ -573,43 +522,26 @@ meta_backend_update_last_device (MetaBackend *backend,
 | 
			
		||||
      clutter_input_device_get_device_mode (device) == CLUTTER_INPUT_MODE_MASTER)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  device_type = clutter_input_device_get_device_type (device);
 | 
			
		||||
 | 
			
		||||
  cursor_tracker = meta_cursor_tracker_get_for_screen (NULL);
 | 
			
		||||
  backend->current_device_id = device_id;
 | 
			
		||||
  g_signal_emit_by_name (backend, "last-device-changed", device_id);
 | 
			
		||||
 | 
			
		||||
  if (priv->device_update_idle_id == 0)
 | 
			
		||||
  if (device_type == CLUTTER_KEYBOARD_DEVICE)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  switch (device_type)
 | 
			
		||||
    {
 | 
			
		||||
      priv->device_update_idle_id =
 | 
			
		||||
        g_idle_add ((GSourceFunc) update_last_device, backend);
 | 
			
		||||
      g_source_set_name_by_id (priv->device_update_idle_id,
 | 
			
		||||
                               "[mutter] update_last_device");
 | 
			
		||||
    case CLUTTER_TOUCHSCREEN_DEVICE:
 | 
			
		||||
      meta_cursor_tracker_set_pointer_visible (cursor_tracker, FALSE);
 | 
			
		||||
      break;
 | 
			
		||||
    default:
 | 
			
		||||
      meta_cursor_tracker_set_pointer_visible (cursor_tracker, TRUE);
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gboolean
 | 
			
		||||
meta_backend_get_relative_motion_deltas (MetaBackend *backend,
 | 
			
		||||
                                         const        ClutterEvent *event,
 | 
			
		||||
                                         double       *dx,
 | 
			
		||||
                                         double       *dy,
 | 
			
		||||
                                         double       *dx_unaccel,
 | 
			
		||||
                                         double       *dy_unaccel)
 | 
			
		||||
{
 | 
			
		||||
  MetaBackendClass *klass = META_BACKEND_GET_CLASS (backend);
 | 
			
		||||
  return klass->get_relative_motion_deltas (backend,
 | 
			
		||||
                                            event,
 | 
			
		||||
                                            dx, dy,
 | 
			
		||||
                                            dx_unaccel, dy_unaccel);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
meta_backend_set_client_pointer_constraint (MetaBackend           *backend,
 | 
			
		||||
                                            MetaPointerConstraint *constraint)
 | 
			
		||||
{
 | 
			
		||||
  g_assert (!constraint || (constraint && !backend->client_pointer_constraint));
 | 
			
		||||
 | 
			
		||||
  g_clear_object (&backend->client_pointer_constraint);
 | 
			
		||||
  if (constraint)
 | 
			
		||||
    backend->client_pointer_constraint = g_object_ref (constraint);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static GType
 | 
			
		||||
get_backend_type (void)
 | 
			
		||||
{
 | 
			
		||||
@@ -694,10 +626,7 @@ meta_clutter_init (void)
 | 
			
		||||
  meta_create_backend ();
 | 
			
		||||
 | 
			
		||||
  if (clutter_init (NULL, NULL) != CLUTTER_INIT_SUCCESS)
 | 
			
		||||
    {
 | 
			
		||||
      g_warning ("Unable to initialize Clutter.\n");
 | 
			
		||||
      exit (1);
 | 
			
		||||
    }
 | 
			
		||||
    g_error ("Unable to initialize Clutter.\n");
 | 
			
		||||
 | 
			
		||||
  /*
 | 
			
		||||
   * XXX: We cannot handle high dpi scaling yet, so fix the scale to 1
 | 
			
		||||
 
 | 
			
		||||
@@ -26,8 +26,6 @@
 | 
			
		||||
#ifndef META_BARRIER_PRIVATE_H
 | 
			
		||||
#define META_BARRIER_PRIVATE_H
 | 
			
		||||
 | 
			
		||||
#include "core/meta-border.h"
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
#define META_TYPE_BARRIER_IMPL            (meta_barrier_impl_get_type ())
 | 
			
		||||
@@ -69,7 +67,14 @@ G_END_DECLS
 | 
			
		||||
struct _MetaBarrierPrivate
 | 
			
		||||
{
 | 
			
		||||
  MetaDisplay *display;
 | 
			
		||||
  MetaBorder border;
 | 
			
		||||
 | 
			
		||||
  int x1;
 | 
			
		||||
  int y1;
 | 
			
		||||
  int x2;
 | 
			
		||||
  int y2;
 | 
			
		||||
 | 
			
		||||
  MetaBarrierDirection directions;
 | 
			
		||||
 | 
			
		||||
  MetaBarrierImpl *impl;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -16,7 +16,7 @@
 | 
			
		||||
#include "backends/native/meta-barrier-native.h"
 | 
			
		||||
#include "backends/x11/meta-backend-x11.h"
 | 
			
		||||
#include "backends/x11/meta-barrier-x11.h"
 | 
			
		||||
#include <meta/meta-enum-types.h>
 | 
			
		||||
#include "mutter-enum-types.h"
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE (MetaBarrier, meta_barrier, G_TYPE_OBJECT)
 | 
			
		||||
G_DEFINE_TYPE (MetaBarrierImpl, meta_barrier_impl, G_TYPE_OBJECT)
 | 
			
		||||
@@ -61,20 +61,19 @@ meta_barrier_get_property (GObject    *object,
 | 
			
		||||
      g_value_set_object (value, priv->display);
 | 
			
		||||
      break;
 | 
			
		||||
    case PROP_X1:
 | 
			
		||||
      g_value_set_int (value, priv->border.line.a.x);
 | 
			
		||||
      g_value_set_int (value, priv->x1);
 | 
			
		||||
      break;
 | 
			
		||||
    case PROP_Y1:
 | 
			
		||||
      g_value_set_int (value, priv->border.line.a.y);
 | 
			
		||||
      g_value_set_int (value, priv->y1);
 | 
			
		||||
      break;
 | 
			
		||||
    case PROP_X2:
 | 
			
		||||
      g_value_set_int (value, priv->border.line.b.x);
 | 
			
		||||
      g_value_set_int (value, priv->x2);
 | 
			
		||||
      break;
 | 
			
		||||
    case PROP_Y2:
 | 
			
		||||
      g_value_set_int (value, priv->border.line.b.y);
 | 
			
		||||
      g_value_set_int (value, priv->y2);
 | 
			
		||||
      break;
 | 
			
		||||
    case PROP_DIRECTIONS:
 | 
			
		||||
      g_value_set_flags (value,
 | 
			
		||||
                         meta_border_get_allows_directions (&priv->border));
 | 
			
		||||
      g_value_set_flags (value, priv->directions);
 | 
			
		||||
      break;
 | 
			
		||||
    default:
 | 
			
		||||
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 | 
			
		||||
@@ -96,20 +95,19 @@ meta_barrier_set_property (GObject      *object,
 | 
			
		||||
      priv->display = g_value_get_object (value);
 | 
			
		||||
      break;
 | 
			
		||||
    case PROP_X1:
 | 
			
		||||
      priv->border.line.a.x = g_value_get_int (value);
 | 
			
		||||
      priv->x1 = g_value_get_int (value);
 | 
			
		||||
      break;
 | 
			
		||||
    case PROP_Y1:
 | 
			
		||||
      priv->border.line.a.y = g_value_get_int (value);
 | 
			
		||||
      priv->y1 = g_value_get_int (value);
 | 
			
		||||
      break;
 | 
			
		||||
    case PROP_X2:
 | 
			
		||||
      priv->border.line.b.x = g_value_get_int (value);
 | 
			
		||||
      priv->x2 = g_value_get_int (value);
 | 
			
		||||
      break;
 | 
			
		||||
    case PROP_Y2:
 | 
			
		||||
      priv->border.line.b.y = g_value_get_int (value);
 | 
			
		||||
      priv->y2 = g_value_get_int (value);
 | 
			
		||||
      break;
 | 
			
		||||
    case PROP_DIRECTIONS:
 | 
			
		||||
      meta_border_set_allows_directions (&priv->border,
 | 
			
		||||
                                         g_value_get_flags (value));
 | 
			
		||||
      priv->directions = g_value_get_flags (value);
 | 
			
		||||
      break;
 | 
			
		||||
    default:
 | 
			
		||||
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 | 
			
		||||
@@ -168,8 +166,7 @@ meta_barrier_constructed (GObject *object)
 | 
			
		||||
  MetaBarrier *barrier = META_BARRIER (object);
 | 
			
		||||
  MetaBarrierPrivate *priv = barrier->priv;
 | 
			
		||||
 | 
			
		||||
  g_return_if_fail (priv->border.line.a.x == priv->border.line.b.x ||
 | 
			
		||||
                    priv->border.line.a.y == priv->border.line.b.y);
 | 
			
		||||
  g_return_if_fail (priv->x1 == priv->x2 || priv->y1 == priv->y2);
 | 
			
		||||
 | 
			
		||||
#if defined(HAVE_NATIVE_BACKEND)
 | 
			
		||||
  if (META_IS_BACKEND_NATIVE (meta_get_backend ()))
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										59
									
								
								src/backends/meta-cursor-private.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								src/backends/meta-cursor-private.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,59 @@
 | 
			
		||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright 2013 Red Hat, Inc.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software; you can redistribute it and/or
 | 
			
		||||
 * modify it under the terms of the GNU General Public License as
 | 
			
		||||
 * published by the Free Software Foundation; either version 2 of the
 | 
			
		||||
 * License, or (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful, but
 | 
			
		||||
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
			
		||||
 * General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 *
 | 
			
		||||
 * Author: Giovanni Campagna <gcampagn@redhat.com>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef META_CURSOR_PRIVATE_H
 | 
			
		||||
#define META_CURSOR_PRIVATE_H
 | 
			
		||||
 | 
			
		||||
#include "meta-cursor.h"
 | 
			
		||||
 | 
			
		||||
#include <cogl/cogl.h>
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_NATIVE_BACKEND
 | 
			
		||||
#include <gbm.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
  CoglTexture2D *texture;
 | 
			
		||||
  int hot_x, hot_y;
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_NATIVE_BACKEND
 | 
			
		||||
  struct gbm_bo *bo;
 | 
			
		||||
#endif
 | 
			
		||||
} MetaCursorImage;
 | 
			
		||||
 | 
			
		||||
struct _MetaCursorReference {
 | 
			
		||||
  int ref_count;
 | 
			
		||||
 | 
			
		||||
  MetaCursor cursor;
 | 
			
		||||
  MetaCursorImage image;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
CoglTexture *meta_cursor_reference_get_cogl_texture (MetaCursorReference *cursor,
 | 
			
		||||
                                                     int                 *hot_x,
 | 
			
		||||
                                                     int                 *hot_y);
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_NATIVE_BACKEND
 | 
			
		||||
struct gbm_bo *meta_cursor_reference_get_gbm_bo (MetaCursorReference *cursor,
 | 
			
		||||
                                                 int                 *hot_x,
 | 
			
		||||
                                                 int                 *hot_y);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* META_CURSOR_PRIVATE_H */
 | 
			
		||||
@@ -25,10 +25,10 @@
 | 
			
		||||
#include "config.h"
 | 
			
		||||
 | 
			
		||||
#include "meta-cursor-renderer.h"
 | 
			
		||||
#include "meta-cursor-private.h"
 | 
			
		||||
 | 
			
		||||
#include <meta/meta-backend.h>
 | 
			
		||||
#include <meta/util.h>
 | 
			
		||||
#include <math.h>
 | 
			
		||||
 | 
			
		||||
#include <cogl/cogl.h>
 | 
			
		||||
#include <clutter/clutter.h>
 | 
			
		||||
@@ -38,8 +38,9 @@
 | 
			
		||||
struct _MetaCursorRendererPrivate
 | 
			
		||||
{
 | 
			
		||||
  int current_x, current_y;
 | 
			
		||||
  MetaRectangle current_rect;
 | 
			
		||||
 | 
			
		||||
  MetaCursorSprite *displayed_cursor;
 | 
			
		||||
  MetaCursorReference *displayed_cursor;
 | 
			
		||||
  gboolean handled_by_backend;
 | 
			
		||||
};
 | 
			
		||||
typedef struct _MetaCursorRendererPrivate MetaCursorRendererPrivate;
 | 
			
		||||
@@ -47,33 +48,27 @@ typedef struct _MetaCursorRendererPrivate MetaCursorRendererPrivate;
 | 
			
		||||
G_DEFINE_TYPE_WITH_PRIVATE (MetaCursorRenderer, meta_cursor_renderer, G_TYPE_OBJECT);
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
queue_redraw (MetaCursorRenderer *renderer,
 | 
			
		||||
              MetaCursorSprite   *cursor_sprite)
 | 
			
		||||
queue_redraw (MetaCursorRenderer *renderer)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorRendererPrivate *priv = meta_cursor_renderer_get_instance_private (renderer);
 | 
			
		||||
  MetaBackend *backend = meta_get_backend ();
 | 
			
		||||
  ClutterActor *stage = meta_backend_get_stage (backend);
 | 
			
		||||
  CoglTexture *texture;
 | 
			
		||||
  MetaRectangle rect = { 0 };
 | 
			
		||||
 | 
			
		||||
  if (cursor_sprite)
 | 
			
		||||
    rect = meta_cursor_renderer_calculate_rect (renderer, cursor_sprite);
 | 
			
		||||
 | 
			
		||||
  /* During early initialization, we can have no stage */
 | 
			
		||||
  if (!stage)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  if (cursor_sprite && !priv->handled_by_backend)
 | 
			
		||||
    texture = meta_cursor_sprite_get_cogl_texture (cursor_sprite);
 | 
			
		||||
  if (priv->displayed_cursor && !priv->handled_by_backend)
 | 
			
		||||
    texture = meta_cursor_reference_get_cogl_texture (priv->displayed_cursor, NULL, NULL);
 | 
			
		||||
  else
 | 
			
		||||
    texture = NULL;
 | 
			
		||||
 | 
			
		||||
  meta_stage_set_cursor (META_STAGE (stage), texture, &rect);
 | 
			
		||||
  meta_stage_set_cursor (META_STAGE (stage), texture, &priv->current_rect);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
meta_cursor_renderer_real_update_cursor (MetaCursorRenderer *renderer,
 | 
			
		||||
                                         MetaCursorSprite   *cursor_sprite)
 | 
			
		||||
meta_cursor_renderer_real_update_cursor (MetaCursorRenderer *renderer)
 | 
			
		||||
{
 | 
			
		||||
  return FALSE;
 | 
			
		||||
}
 | 
			
		||||
@@ -89,50 +84,34 @@ meta_cursor_renderer_init (MetaCursorRenderer *renderer)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
MetaRectangle
 | 
			
		||||
meta_cursor_renderer_calculate_rect (MetaCursorRenderer *renderer,
 | 
			
		||||
                                     MetaCursorSprite   *cursor_sprite)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorRendererPrivate *priv =
 | 
			
		||||
    meta_cursor_renderer_get_instance_private (renderer);
 | 
			
		||||
  CoglTexture *texture;
 | 
			
		||||
  int hot_x, hot_y;
 | 
			
		||||
  int width, height;
 | 
			
		||||
  float texture_scale;
 | 
			
		||||
 | 
			
		||||
  texture = meta_cursor_sprite_get_cogl_texture (cursor_sprite);
 | 
			
		||||
  if (!texture)
 | 
			
		||||
    return (MetaRectangle) { 0 };
 | 
			
		||||
 | 
			
		||||
  meta_cursor_sprite_get_hotspot (cursor_sprite, &hot_x, &hot_y);
 | 
			
		||||
  texture_scale = meta_cursor_sprite_get_texture_scale (cursor_sprite);
 | 
			
		||||
  width = cogl_texture_get_width (texture);
 | 
			
		||||
  height = cogl_texture_get_height (texture);
 | 
			
		||||
 | 
			
		||||
  return (MetaRectangle) {
 | 
			
		||||
    .x = (int)roundf (priv->current_x - (hot_x * texture_scale)),
 | 
			
		||||
    .y = (int)roundf (priv->current_y - (hot_y * texture_scale)),
 | 
			
		||||
    .width = (int)roundf (width * texture_scale),
 | 
			
		||||
    .height = (int)roundf (height * texture_scale),
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
update_cursor (MetaCursorRenderer *renderer,
 | 
			
		||||
               MetaCursorSprite   *cursor_sprite)
 | 
			
		||||
update_cursor (MetaCursorRenderer *renderer)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorRendererPrivate *priv = meta_cursor_renderer_get_instance_private (renderer);
 | 
			
		||||
  gboolean handled_by_backend;
 | 
			
		||||
  gboolean should_redraw = FALSE;
 | 
			
		||||
 | 
			
		||||
  if (cursor_sprite)
 | 
			
		||||
    meta_cursor_sprite_prepare_at (cursor_sprite,
 | 
			
		||||
                                   priv->current_x,
 | 
			
		||||
                                   priv->current_y);
 | 
			
		||||
  if (priv->displayed_cursor)
 | 
			
		||||
    {
 | 
			
		||||
      CoglTexture *texture;
 | 
			
		||||
      int hot_x, hot_y;
 | 
			
		||||
 | 
			
		||||
  handled_by_backend =
 | 
			
		||||
    META_CURSOR_RENDERER_GET_CLASS (renderer)->update_cursor (renderer,
 | 
			
		||||
                                                              cursor_sprite);
 | 
			
		||||
      texture = meta_cursor_reference_get_cogl_texture (priv->displayed_cursor, &hot_x, &hot_y);
 | 
			
		||||
 | 
			
		||||
      priv->current_rect.x = priv->current_x - hot_x;
 | 
			
		||||
      priv->current_rect.y = priv->current_y - hot_y;
 | 
			
		||||
      priv->current_rect.width = cogl_texture_get_width (COGL_TEXTURE (texture));
 | 
			
		||||
      priv->current_rect.height = cogl_texture_get_height (COGL_TEXTURE (texture));
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      priv->current_rect.x = 0;
 | 
			
		||||
      priv->current_rect.y = 0;
 | 
			
		||||
      priv->current_rect.width = 0;
 | 
			
		||||
      priv->current_rect.height = 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  handled_by_backend = META_CURSOR_RENDERER_GET_CLASS (renderer)->update_cursor (renderer);
 | 
			
		||||
  if (handled_by_backend != priv->handled_by_backend)
 | 
			
		||||
    {
 | 
			
		||||
      priv->handled_by_backend = handled_by_backend;
 | 
			
		||||
@@ -143,7 +122,7 @@ update_cursor (MetaCursorRenderer *renderer,
 | 
			
		||||
    should_redraw = TRUE;
 | 
			
		||||
 | 
			
		||||
  if (should_redraw)
 | 
			
		||||
    queue_redraw (renderer, cursor_sprite);
 | 
			
		||||
    queue_redraw (renderer);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
MetaCursorRenderer *
 | 
			
		||||
@@ -153,25 +132,16 @@ meta_cursor_renderer_new (void)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
meta_cursor_renderer_set_cursor (MetaCursorRenderer *renderer,
 | 
			
		||||
                                 MetaCursorSprite   *cursor_sprite)
 | 
			
		||||
meta_cursor_renderer_set_cursor (MetaCursorRenderer  *renderer,
 | 
			
		||||
                                 MetaCursorReference *cursor)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorRendererPrivate *priv = meta_cursor_renderer_get_instance_private (renderer);
 | 
			
		||||
 | 
			
		||||
  if (priv->displayed_cursor == cursor_sprite)
 | 
			
		||||
  if (priv->displayed_cursor == cursor)
 | 
			
		||||
    return;
 | 
			
		||||
  priv->displayed_cursor = cursor_sprite;
 | 
			
		||||
 | 
			
		||||
  update_cursor (renderer, cursor_sprite);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
meta_cursor_renderer_force_update (MetaCursorRenderer *renderer)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorRendererPrivate *priv =
 | 
			
		||||
    meta_cursor_renderer_get_instance_private (renderer);
 | 
			
		||||
 | 
			
		||||
  update_cursor (renderer, priv->displayed_cursor);
 | 
			
		||||
  priv->displayed_cursor = cursor;
 | 
			
		||||
  update_cursor (renderer);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
@@ -185,10 +155,10 @@ meta_cursor_renderer_set_position (MetaCursorRenderer *renderer,
 | 
			
		||||
  priv->current_x = x;
 | 
			
		||||
  priv->current_y = y;
 | 
			
		||||
 | 
			
		||||
  update_cursor (renderer, priv->displayed_cursor);
 | 
			
		||||
  update_cursor (renderer);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
MetaCursorSprite *
 | 
			
		||||
MetaCursorReference *
 | 
			
		||||
meta_cursor_renderer_get_cursor (MetaCursorRenderer *renderer)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorRendererPrivate *priv = meta_cursor_renderer_get_instance_private (renderer);
 | 
			
		||||
@@ -196,27 +166,10 @@ meta_cursor_renderer_get_cursor (MetaCursorRenderer *renderer)
 | 
			
		||||
  return priv->displayed_cursor;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_WAYLAND
 | 
			
		||||
void
 | 
			
		||||
meta_cursor_renderer_realize_cursor_from_wl_buffer (MetaCursorRenderer *renderer,
 | 
			
		||||
                                                    MetaCursorSprite   *cursor_sprite,
 | 
			
		||||
                                                    struct wl_resource *buffer)
 | 
			
		||||
const MetaRectangle *
 | 
			
		||||
meta_cursor_renderer_get_rect (MetaCursorRenderer *renderer)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorRendererPrivate *priv = meta_cursor_renderer_get_instance_private (renderer);
 | 
			
		||||
 | 
			
		||||
  MetaCursorRendererClass *renderer_class = META_CURSOR_RENDERER_GET_CLASS (renderer);
 | 
			
		||||
 | 
			
		||||
  if (renderer_class->realize_cursor_from_wl_buffer)
 | 
			
		||||
    renderer_class->realize_cursor_from_wl_buffer (renderer, cursor_sprite, buffer);
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
meta_cursor_renderer_realize_cursor_from_xcursor (MetaCursorRenderer *renderer,
 | 
			
		||||
                                                  MetaCursorSprite   *cursor_sprite,
 | 
			
		||||
                                                  XcursorImage       *xc_image)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorRendererClass *renderer_class = META_CURSOR_RENDERER_GET_CLASS (renderer);
 | 
			
		||||
 | 
			
		||||
  if (renderer_class->realize_cursor_from_xcursor)
 | 
			
		||||
    renderer_class->realize_cursor_from_xcursor (renderer, cursor_sprite, xc_image);
 | 
			
		||||
  return &priv->current_rect;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -26,56 +26,43 @@
 | 
			
		||||
#define META_CURSOR_RENDERER_H
 | 
			
		||||
 | 
			
		||||
#include <glib-object.h>
 | 
			
		||||
#include <X11/Xcursor/Xcursor.h>
 | 
			
		||||
#ifdef HAVE_WAYLAND
 | 
			
		||||
#include <wayland-server.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <meta/screen.h>
 | 
			
		||||
#include "meta-cursor.h"
 | 
			
		||||
 | 
			
		||||
#define META_TYPE_CURSOR_RENDERER (meta_cursor_renderer_get_type ())
 | 
			
		||||
G_DECLARE_DERIVABLE_TYPE (MetaCursorRenderer, meta_cursor_renderer,
 | 
			
		||||
                          META, CURSOR_RENDERER, GObject);
 | 
			
		||||
#define META_TYPE_CURSOR_RENDERER            (meta_cursor_renderer_get_type ())
 | 
			
		||||
#define META_CURSOR_RENDERER(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_CURSOR_RENDERER, MetaCursorRenderer))
 | 
			
		||||
#define META_CURSOR_RENDERER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass),  META_TYPE_CURSOR_RENDERER, MetaCursorRendererClass))
 | 
			
		||||
#define META_IS_CURSOR_RENDERER(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), META_TYPE_CURSOR_RENDERER))
 | 
			
		||||
#define META_IS_CURSOR_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),  META_TYPE_CURSOR_RENDERER))
 | 
			
		||||
#define META_CURSOR_RENDERER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj),  META_TYPE_CURSOR_RENDERER, MetaCursorRendererClass))
 | 
			
		||||
 | 
			
		||||
typedef struct _MetaCursorRenderer        MetaCursorRenderer;
 | 
			
		||||
typedef struct _MetaCursorRendererClass   MetaCursorRendererClass;
 | 
			
		||||
 | 
			
		||||
struct _MetaCursorRenderer
 | 
			
		||||
{
 | 
			
		||||
  GObject parent;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _MetaCursorRendererClass
 | 
			
		||||
{
 | 
			
		||||
  GObjectClass parent_class;
 | 
			
		||||
 | 
			
		||||
  gboolean (* update_cursor) (MetaCursorRenderer *renderer,
 | 
			
		||||
                              MetaCursorSprite   *cursor_sprite);
 | 
			
		||||
#ifdef HAVE_WAYLAND
 | 
			
		||||
  void (* realize_cursor_from_wl_buffer) (MetaCursorRenderer *renderer,
 | 
			
		||||
                                          MetaCursorSprite *cursor_sprite,
 | 
			
		||||
                                          struct wl_resource *buffer);
 | 
			
		||||
#endif
 | 
			
		||||
  void (* realize_cursor_from_xcursor) (MetaCursorRenderer *renderer,
 | 
			
		||||
                                        MetaCursorSprite *cursor_sprite,
 | 
			
		||||
                                        XcursorImage *xc_image);
 | 
			
		||||
  gboolean (* update_cursor) (MetaCursorRenderer *renderer);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
GType meta_cursor_renderer_get_type (void) G_GNUC_CONST;
 | 
			
		||||
 | 
			
		||||
MetaCursorRenderer * meta_cursor_renderer_new (void);
 | 
			
		||||
 | 
			
		||||
void meta_cursor_renderer_set_cursor (MetaCursorRenderer *renderer,
 | 
			
		||||
                                      MetaCursorSprite   *cursor_sprite);
 | 
			
		||||
void meta_cursor_renderer_set_cursor (MetaCursorRenderer  *renderer,
 | 
			
		||||
                                      MetaCursorReference *cursor);
 | 
			
		||||
 | 
			
		||||
void meta_cursor_renderer_set_position (MetaCursorRenderer *renderer,
 | 
			
		||||
                                        int x, int y);
 | 
			
		||||
void meta_cursor_renderer_force_update (MetaCursorRenderer *renderer);
 | 
			
		||||
 | 
			
		||||
MetaCursorSprite * meta_cursor_renderer_get_cursor (MetaCursorRenderer *renderer);
 | 
			
		||||
 | 
			
		||||
MetaRectangle meta_cursor_renderer_calculate_rect (MetaCursorRenderer *renderer,
 | 
			
		||||
                                                   MetaCursorSprite   *cursor_sprite);
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_WAYLAND
 | 
			
		||||
void meta_cursor_renderer_realize_cursor_from_wl_buffer (MetaCursorRenderer *renderer,
 | 
			
		||||
                                                         MetaCursorSprite   *cursor_sprite,
 | 
			
		||||
                                                         struct wl_resource *buffer);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void meta_cursor_renderer_realize_cursor_from_xcursor (MetaCursorRenderer *renderer,
 | 
			
		||||
                                                       MetaCursorSprite   *cursor_sprite,
 | 
			
		||||
                                                       XcursorImage       *xc_image);
 | 
			
		||||
MetaCursorReference * meta_cursor_renderer_get_cursor (MetaCursorRenderer *renderer);
 | 
			
		||||
const MetaRectangle * meta_cursor_renderer_get_rect (MetaCursorRenderer *renderer);
 | 
			
		||||
 | 
			
		||||
#endif /* META_CURSOR_RENDERER_H */
 | 
			
		||||
 
 | 
			
		||||
@@ -34,7 +34,7 @@ struct _MetaCursorTracker {
 | 
			
		||||
 | 
			
		||||
  gboolean is_showing;
 | 
			
		||||
 | 
			
		||||
  MetaCursorSprite *displayed_cursor;
 | 
			
		||||
  MetaCursorReference *displayed_cursor;
 | 
			
		||||
 | 
			
		||||
  /* Wayland clients can set a NULL buffer as their cursor
 | 
			
		||||
   * explicitly, which means that we shouldn't display anything.
 | 
			
		||||
@@ -42,12 +42,12 @@ struct _MetaCursorTracker {
 | 
			
		||||
   * determine an unset window cursor; we need an extra boolean.
 | 
			
		||||
   */
 | 
			
		||||
  gboolean has_window_cursor;
 | 
			
		||||
  MetaCursorSprite *window_cursor;
 | 
			
		||||
  MetaCursorReference *window_cursor;
 | 
			
		||||
 | 
			
		||||
  MetaCursorSprite *root_cursor;
 | 
			
		||||
  MetaCursorReference *root_cursor;
 | 
			
		||||
 | 
			
		||||
  /* The cursor from the X11 server. */
 | 
			
		||||
  MetaCursorSprite *xfixes_cursor;
 | 
			
		||||
  MetaCursorReference *xfixes_cursor;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _MetaCursorTrackerClass {
 | 
			
		||||
@@ -57,16 +57,16 @@ struct _MetaCursorTrackerClass {
 | 
			
		||||
gboolean meta_cursor_tracker_handle_xevent (MetaCursorTracker *tracker,
 | 
			
		||||
					    XEvent            *xevent);
 | 
			
		||||
 | 
			
		||||
void     meta_cursor_tracker_set_window_cursor   (MetaCursorTracker *tracker,
 | 
			
		||||
                                                  MetaCursorSprite  *cursor_sprite);
 | 
			
		||||
void     meta_cursor_tracker_unset_window_cursor (MetaCursorTracker *tracker);
 | 
			
		||||
void     meta_cursor_tracker_set_root_cursor     (MetaCursorTracker *tracker,
 | 
			
		||||
                                                  MetaCursorSprite  *cursor_sprite);
 | 
			
		||||
void     meta_cursor_tracker_set_window_cursor   (MetaCursorTracker   *tracker,
 | 
			
		||||
                                                  MetaCursorReference *cursor);
 | 
			
		||||
void     meta_cursor_tracker_unset_window_cursor (MetaCursorTracker   *tracker);
 | 
			
		||||
void     meta_cursor_tracker_set_root_cursor     (MetaCursorTracker   *tracker,
 | 
			
		||||
                                                  MetaCursorReference *cursor);
 | 
			
		||||
 | 
			
		||||
void     meta_cursor_tracker_update_position (MetaCursorTracker *tracker,
 | 
			
		||||
					      int                new_x,
 | 
			
		||||
					      int                new_y);
 | 
			
		||||
 | 
			
		||||
MetaCursorSprite * meta_cursor_tracker_get_displayed_cursor (MetaCursorTracker *tracker);
 | 
			
		||||
MetaCursorReference * meta_cursor_tracker_get_displayed_cursor (MetaCursorTracker *tracker);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -43,6 +43,7 @@
 | 
			
		||||
#include <X11/extensions/Xfixes.h>
 | 
			
		||||
 | 
			
		||||
#include "meta-backend-private.h"
 | 
			
		||||
#include "meta-cursor-private.h"
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE (MetaCursorTracker, meta_cursor_tracker, G_TYPE_OBJECT);
 | 
			
		||||
 | 
			
		||||
@@ -53,7 +54,7 @@ enum {
 | 
			
		||||
 | 
			
		||||
static guint signals[LAST_SIGNAL];
 | 
			
		||||
 | 
			
		||||
static MetaCursorSprite *
 | 
			
		||||
static MetaCursorReference *
 | 
			
		||||
get_displayed_cursor (MetaCursorTracker *tracker)
 | 
			
		||||
{
 | 
			
		||||
  MetaDisplay *display = meta_get_display ();
 | 
			
		||||
@@ -79,14 +80,14 @@ update_displayed_cursor (MetaCursorTracker *tracker)
 | 
			
		||||
static void
 | 
			
		||||
sync_cursor (MetaCursorTracker *tracker)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorSprite *displayed_cursor = get_displayed_cursor (tracker);
 | 
			
		||||
  MetaCursorReference *displayed_cursor = get_displayed_cursor (tracker);
 | 
			
		||||
 | 
			
		||||
  if (tracker->displayed_cursor == displayed_cursor)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  g_clear_object (&tracker->displayed_cursor);
 | 
			
		||||
  g_clear_pointer (&tracker->displayed_cursor, meta_cursor_reference_unref);
 | 
			
		||||
  if (displayed_cursor)
 | 
			
		||||
    tracker->displayed_cursor = g_object_ref (displayed_cursor);
 | 
			
		||||
    tracker->displayed_cursor = meta_cursor_reference_ref (displayed_cursor);
 | 
			
		||||
 | 
			
		||||
  update_displayed_cursor (tracker);
 | 
			
		||||
  g_signal_emit (tracker, signals[CURSOR_CHANGED], 0);
 | 
			
		||||
@@ -107,9 +108,9 @@ meta_cursor_tracker_finalize (GObject *object)
 | 
			
		||||
  MetaCursorTracker *self = META_CURSOR_TRACKER (object);
 | 
			
		||||
 | 
			
		||||
  if (self->displayed_cursor)
 | 
			
		||||
    g_object_unref (self->displayed_cursor);
 | 
			
		||||
    meta_cursor_reference_unref (self->displayed_cursor);
 | 
			
		||||
  if (self->root_cursor)
 | 
			
		||||
    g_object_unref (self->root_cursor);
 | 
			
		||||
    meta_cursor_reference_unref (self->root_cursor);
 | 
			
		||||
 | 
			
		||||
  G_OBJECT_CLASS (meta_cursor_tracker_parent_class)->finalize (object);
 | 
			
		||||
}
 | 
			
		||||
@@ -155,13 +156,13 @@ meta_cursor_tracker_get_for_screen (MetaScreen *screen)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
set_window_cursor (MetaCursorTracker *tracker,
 | 
			
		||||
                   gboolean           has_cursor,
 | 
			
		||||
                   MetaCursorSprite  *cursor_sprite)
 | 
			
		||||
set_window_cursor (MetaCursorTracker   *tracker,
 | 
			
		||||
                   gboolean             has_cursor,
 | 
			
		||||
                   MetaCursorReference *cursor)
 | 
			
		||||
{
 | 
			
		||||
  g_clear_object (&tracker->window_cursor);
 | 
			
		||||
  if (cursor_sprite)
 | 
			
		||||
    tracker->window_cursor = g_object_ref (cursor_sprite);
 | 
			
		||||
  g_clear_pointer (&tracker->window_cursor, meta_cursor_reference_unref);
 | 
			
		||||
  if (cursor)
 | 
			
		||||
    tracker->window_cursor = meta_cursor_reference_ref (cursor);
 | 
			
		||||
  tracker->has_window_cursor = has_cursor;
 | 
			
		||||
  sync_cursor (tracker);
 | 
			
		||||
}
 | 
			
		||||
@@ -183,12 +184,28 @@ meta_cursor_tracker_handle_xevent (MetaCursorTracker *tracker,
 | 
			
		||||
  if (notify_event->subtype != XFixesDisplayCursorNotify)
 | 
			
		||||
    return FALSE;
 | 
			
		||||
 | 
			
		||||
  g_clear_object (&tracker->xfixes_cursor);
 | 
			
		||||
  g_clear_pointer (&tracker->xfixes_cursor, meta_cursor_reference_unref);
 | 
			
		||||
  g_signal_emit (tracker, signals[CURSOR_CHANGED], 0);
 | 
			
		||||
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static MetaCursorReference *
 | 
			
		||||
meta_cursor_reference_take_texture (CoglTexture2D *texture,
 | 
			
		||||
                                    int            hot_x,
 | 
			
		||||
                                    int            hot_y)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorReference *self;
 | 
			
		||||
 | 
			
		||||
  self = g_slice_new0 (MetaCursorReference);
 | 
			
		||||
  self->ref_count = 1;
 | 
			
		||||
  self->image.texture = texture;
 | 
			
		||||
  self->image.hot_x = hot_x;
 | 
			
		||||
  self->image.hot_y = hot_y;
 | 
			
		||||
 | 
			
		||||
  return self;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
ensure_xfixes_cursor (MetaCursorTracker *tracker)
 | 
			
		||||
{
 | 
			
		||||
@@ -198,7 +215,6 @@ ensure_xfixes_cursor (MetaCursorTracker *tracker)
 | 
			
		||||
  guint8 *cursor_data;
 | 
			
		||||
  gboolean free_cursor_data;
 | 
			
		||||
  CoglContext *ctx;
 | 
			
		||||
  CoglError *error = NULL;
 | 
			
		||||
 | 
			
		||||
  if (tracker->xfixes_cursor)
 | 
			
		||||
    return;
 | 
			
		||||
@@ -240,26 +256,17 @@ ensure_xfixes_cursor (MetaCursorTracker *tracker)
 | 
			
		||||
                                          CLUTTER_CAIRO_FORMAT_ARGB32,
 | 
			
		||||
                                          cursor_image->width * 4, /* stride */
 | 
			
		||||
                                          cursor_data,
 | 
			
		||||
                                          &error);
 | 
			
		||||
                                          NULL);
 | 
			
		||||
 | 
			
		||||
  if (free_cursor_data)
 | 
			
		||||
    g_free (cursor_data);
 | 
			
		||||
 | 
			
		||||
  if (error != NULL)
 | 
			
		||||
    {
 | 
			
		||||
      meta_warning ("Failed to allocate cursor sprite texture: %s\n", error->message);
 | 
			
		||||
      cogl_error_free (error);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (sprite != NULL)
 | 
			
		||||
    {
 | 
			
		||||
      MetaCursorSprite *cursor_sprite = meta_cursor_sprite_new ();
 | 
			
		||||
      meta_cursor_sprite_set_texture (cursor_sprite,
 | 
			
		||||
                                      sprite,
 | 
			
		||||
                                      cursor_image->xhot,
 | 
			
		||||
                                      cursor_image->yhot);
 | 
			
		||||
      cogl_object_unref (sprite);
 | 
			
		||||
      tracker->xfixes_cursor = cursor_sprite;
 | 
			
		||||
      MetaCursorReference *cursor = meta_cursor_reference_take_texture (sprite,
 | 
			
		||||
                                                                        cursor_image->xhot,
 | 
			
		||||
                                                                        cursor_image->yhot);
 | 
			
		||||
      tracker->xfixes_cursor = cursor;
 | 
			
		||||
    }
 | 
			
		||||
  XFree (cursor_image);
 | 
			
		||||
}
 | 
			
		||||
@@ -272,22 +279,22 @@ ensure_xfixes_cursor (MetaCursorTracker *tracker)
 | 
			
		||||
CoglTexture *
 | 
			
		||||
meta_cursor_tracker_get_sprite (MetaCursorTracker *tracker)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorSprite *cursor_sprite;
 | 
			
		||||
  MetaCursorReference *cursor;
 | 
			
		||||
 | 
			
		||||
  g_return_val_if_fail (META_IS_CURSOR_TRACKER (tracker), NULL);
 | 
			
		||||
 | 
			
		||||
  if (meta_is_wayland_compositor ())
 | 
			
		||||
    {
 | 
			
		||||
      cursor_sprite = tracker->displayed_cursor;
 | 
			
		||||
      cursor = tracker->displayed_cursor;
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      ensure_xfixes_cursor (tracker);
 | 
			
		||||
      cursor_sprite = tracker->xfixes_cursor;
 | 
			
		||||
      cursor = tracker->xfixes_cursor;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (cursor_sprite)
 | 
			
		||||
    return meta_cursor_sprite_get_cogl_texture (cursor_sprite);
 | 
			
		||||
  if (cursor)
 | 
			
		||||
    return meta_cursor_reference_get_cogl_texture (cursor, NULL, NULL);
 | 
			
		||||
  else
 | 
			
		||||
    return NULL;
 | 
			
		||||
}
 | 
			
		||||
@@ -304,22 +311,22 @@ meta_cursor_tracker_get_hot (MetaCursorTracker *tracker,
 | 
			
		||||
                             int               *x,
 | 
			
		||||
                             int               *y)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorSprite *cursor_sprite;
 | 
			
		||||
  MetaCursorReference *cursor;
 | 
			
		||||
 | 
			
		||||
  g_return_if_fail (META_IS_CURSOR_TRACKER (tracker));
 | 
			
		||||
 | 
			
		||||
  if (meta_is_wayland_compositor ())
 | 
			
		||||
    {
 | 
			
		||||
      cursor_sprite = tracker->displayed_cursor;
 | 
			
		||||
      cursor = tracker->displayed_cursor;
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      ensure_xfixes_cursor (tracker);
 | 
			
		||||
      cursor_sprite = tracker->xfixes_cursor;
 | 
			
		||||
      cursor = tracker->xfixes_cursor;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (cursor_sprite)
 | 
			
		||||
    meta_cursor_sprite_get_hotspot (cursor_sprite, x, y);
 | 
			
		||||
  if (cursor)
 | 
			
		||||
    meta_cursor_reference_get_cogl_texture (cursor, x, y);
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      if (x)
 | 
			
		||||
@@ -330,10 +337,10 @@ meta_cursor_tracker_get_hot (MetaCursorTracker *tracker,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
meta_cursor_tracker_set_window_cursor (MetaCursorTracker *tracker,
 | 
			
		||||
                                       MetaCursorSprite  *cursor_sprite)
 | 
			
		||||
meta_cursor_tracker_set_window_cursor (MetaCursorTracker   *tracker,
 | 
			
		||||
                                       MetaCursorReference *cursor)
 | 
			
		||||
{
 | 
			
		||||
  set_window_cursor (tracker, TRUE, cursor_sprite);
 | 
			
		||||
  set_window_cursor (tracker, TRUE, cursor);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
@@ -343,12 +350,12 @@ meta_cursor_tracker_unset_window_cursor (MetaCursorTracker *tracker)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
meta_cursor_tracker_set_root_cursor (MetaCursorTracker *tracker,
 | 
			
		||||
                                     MetaCursorSprite  *cursor_sprite)
 | 
			
		||||
meta_cursor_tracker_set_root_cursor (MetaCursorTracker   *tracker,
 | 
			
		||||
                                     MetaCursorReference *cursor)
 | 
			
		||||
{
 | 
			
		||||
  g_clear_object (&tracker->root_cursor);
 | 
			
		||||
  if (cursor_sprite)
 | 
			
		||||
    tracker->root_cursor = g_object_ref (cursor_sprite);
 | 
			
		||||
  g_clear_pointer (&tracker->root_cursor, meta_cursor_reference_unref);
 | 
			
		||||
  if (cursor)
 | 
			
		||||
    tracker->root_cursor = meta_cursor_reference_ref (cursor);
 | 
			
		||||
 | 
			
		||||
  sync_cursor (tracker);
 | 
			
		||||
}
 | 
			
		||||
@@ -368,12 +375,12 @@ get_pointer_position_gdk (int         *x,
 | 
			
		||||
                          int         *y,
 | 
			
		||||
                          int         *mods)
 | 
			
		||||
{
 | 
			
		||||
  GdkSeat *gseat;
 | 
			
		||||
  GdkDeviceManager *gmanager;
 | 
			
		||||
  GdkDevice *gdevice;
 | 
			
		||||
  GdkScreen *gscreen;
 | 
			
		||||
 | 
			
		||||
  gseat = gdk_display_get_default_seat (gdk_display_get_default ());
 | 
			
		||||
  gdevice = gdk_seat_get_pointer (gseat);
 | 
			
		||||
  gmanager = gdk_display_get_device_manager (gdk_display_get_default ());
 | 
			
		||||
  gdevice = gdk_x11_device_manager_lookup (gmanager, META_VIRTUAL_CORE_POINTER_ID);
 | 
			
		||||
 | 
			
		||||
  gdk_device_get_position (gdevice, &gscreen, x, y);
 | 
			
		||||
  if (mods)
 | 
			
		||||
@@ -431,7 +438,7 @@ meta_cursor_tracker_set_pointer_visible (MetaCursorTracker *tracker,
 | 
			
		||||
  sync_cursor (tracker);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
MetaCursorSprite *
 | 
			
		||||
MetaCursorReference *
 | 
			
		||||
meta_cursor_tracker_get_displayed_cursor (MetaCursorTracker *tracker)
 | 
			
		||||
{
 | 
			
		||||
  return tracker->displayed_cursor;
 | 
			
		||||
 
 | 
			
		||||
@@ -21,7 +21,7 @@
 | 
			
		||||
 | 
			
		||||
#include "config.h"
 | 
			
		||||
 | 
			
		||||
#include "meta-cursor.h"
 | 
			
		||||
#include "meta-cursor-private.h"
 | 
			
		||||
 | 
			
		||||
#include <meta/errors.h>
 | 
			
		||||
 | 
			
		||||
@@ -29,38 +29,56 @@
 | 
			
		||||
#include "screen-private.h"
 | 
			
		||||
#include "meta-backend-private.h"
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_NATIVE_BACKEND
 | 
			
		||||
#include "backends/native/meta-cursor-renderer-native.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
#include <X11/cursorfont.h>
 | 
			
		||||
#include <X11/extensions/Xfixes.h>
 | 
			
		||||
#include <X11/Xcursor/Xcursor.h>
 | 
			
		||||
 | 
			
		||||
enum {
 | 
			
		||||
  PREPARE_AT,
 | 
			
		||||
#ifdef HAVE_WAYLAND
 | 
			
		||||
#include <cogl/cogl-wayland-server.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  LAST_SIGNAL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static guint signals[LAST_SIGNAL];
 | 
			
		||||
 | 
			
		||||
struct _MetaCursorSprite
 | 
			
		||||
MetaCursorReference *
 | 
			
		||||
meta_cursor_reference_ref (MetaCursorReference *self)
 | 
			
		||||
{
 | 
			
		||||
  GObject parent;
 | 
			
		||||
  g_assert (self->ref_count > 0);
 | 
			
		||||
  self->ref_count++;
 | 
			
		||||
 | 
			
		||||
  MetaCursor cursor;
 | 
			
		||||
  return self;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
  CoglTexture2D *texture;
 | 
			
		||||
  float texture_scale;
 | 
			
		||||
  int hot_x, hot_y;
 | 
			
		||||
static void
 | 
			
		||||
meta_cursor_image_free (MetaCursorImage *image)
 | 
			
		||||
{
 | 
			
		||||
  if (image->texture)
 | 
			
		||||
    cogl_object_unref (image->texture);
 | 
			
		||||
 | 
			
		||||
  int current_frame;
 | 
			
		||||
  XcursorImages *xcursor_images;
 | 
			
		||||
#ifdef HAVE_NATIVE_BACKEND
 | 
			
		||||
  if (image->bo)
 | 
			
		||||
    gbm_bo_destroy (image->bo);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
  int theme_scale;
 | 
			
		||||
  gboolean theme_dirty;
 | 
			
		||||
};
 | 
			
		||||
static void
 | 
			
		||||
meta_cursor_reference_free (MetaCursorReference *self)
 | 
			
		||||
{
 | 
			
		||||
  meta_cursor_image_free (&self->image);
 | 
			
		||||
  g_slice_free (MetaCursorReference, self);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE (MetaCursorSprite, meta_cursor_sprite, G_TYPE_OBJECT)
 | 
			
		||||
void
 | 
			
		||||
meta_cursor_reference_unref (MetaCursorReference *self)
 | 
			
		||||
{
 | 
			
		||||
  self->ref_count--;
 | 
			
		||||
 | 
			
		||||
  if (self->ref_count == 0)
 | 
			
		||||
    meta_cursor_reference_free (self);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const char *
 | 
			
		||||
translate_meta_cursor (MetaCursor cursor)
 | 
			
		||||
@@ -117,28 +135,93 @@ meta_cursor_create_x_cursor (Display    *xdisplay,
 | 
			
		||||
  return XcursorLibraryLoadCursor (xdisplay, translate_meta_cursor (cursor));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static XcursorImages *
 | 
			
		||||
load_cursor_on_client (MetaCursor cursor, int scale)
 | 
			
		||||
static XcursorImage *
 | 
			
		||||
load_cursor_on_client (MetaCursor cursor)
 | 
			
		||||
{
 | 
			
		||||
  return XcursorLibraryLoadImages (translate_meta_cursor (cursor),
 | 
			
		||||
                                   meta_prefs_get_cursor_theme (),
 | 
			
		||||
                                   meta_prefs_get_cursor_size () * scale);
 | 
			
		||||
  return XcursorLibraryLoadImage (translate_meta_cursor (cursor),
 | 
			
		||||
                                  meta_prefs_get_cursor_theme (),
 | 
			
		||||
                                  meta_prefs_get_cursor_size ());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_NATIVE_BACKEND
 | 
			
		||||
static void
 | 
			
		||||
meta_cursor_sprite_load_from_xcursor_image (MetaCursorSprite *self,
 | 
			
		||||
                                            XcursorImage     *xc_image)
 | 
			
		||||
get_hardware_cursor_size (uint64_t *cursor_width, uint64_t *cursor_height)
 | 
			
		||||
{
 | 
			
		||||
  MetaBackend *meta_backend = meta_get_backend ();
 | 
			
		||||
  MetaCursorRenderer *renderer = meta_backend_get_cursor_renderer (meta_backend);
 | 
			
		||||
 | 
			
		||||
  if (META_IS_CURSOR_RENDERER_NATIVE (renderer))
 | 
			
		||||
    {
 | 
			
		||||
      meta_cursor_renderer_native_get_cursor_size (META_CURSOR_RENDERER_NATIVE (renderer), cursor_width, cursor_height);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  g_assert_not_reached ();
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_NATIVE_BACKEND
 | 
			
		||||
static void
 | 
			
		||||
meta_cursor_image_load_gbm_buffer (struct gbm_device *gbm,
 | 
			
		||||
                                   MetaCursorImage   *image,
 | 
			
		||||
                                   uint8_t           *pixels,
 | 
			
		||||
                                   uint               width,
 | 
			
		||||
                                   uint               height,
 | 
			
		||||
                                   int                rowstride,
 | 
			
		||||
                                   uint32_t           gbm_format)
 | 
			
		||||
{
 | 
			
		||||
  uint64_t cursor_width, cursor_height;
 | 
			
		||||
  get_hardware_cursor_size (&cursor_width, &cursor_height);
 | 
			
		||||
 | 
			
		||||
  if (width > cursor_width || height > cursor_height)
 | 
			
		||||
    {
 | 
			
		||||
      meta_warning ("Invalid theme cursor size (must be at most %ux%u)\n",
 | 
			
		||||
                    (unsigned int)cursor_width, (unsigned int)cursor_height);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (gbm_device_is_format_supported (gbm, gbm_format,
 | 
			
		||||
                                      GBM_BO_USE_CURSOR | GBM_BO_USE_WRITE))
 | 
			
		||||
    {
 | 
			
		||||
      uint8_t buf[4 * cursor_width * cursor_height];
 | 
			
		||||
      uint i;
 | 
			
		||||
 | 
			
		||||
      image->bo = gbm_bo_create (gbm, cursor_width, cursor_height,
 | 
			
		||||
                                 gbm_format, GBM_BO_USE_CURSOR | GBM_BO_USE_WRITE);
 | 
			
		||||
 | 
			
		||||
      memset (buf, 0, sizeof(buf));
 | 
			
		||||
      for (i = 0; i < height; i++)
 | 
			
		||||
        memcpy (buf + i * 4 * cursor_width, pixels + i * rowstride, width * 4);
 | 
			
		||||
 | 
			
		||||
      gbm_bo_write (image->bo, buf, cursor_width * cursor_height * 4);
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    meta_warning ("HW cursor for format %d not supported\n", gbm_format);
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_NATIVE_BACKEND
 | 
			
		||||
static struct gbm_device *
 | 
			
		||||
get_gbm_device (void)
 | 
			
		||||
{
 | 
			
		||||
  MetaBackend *meta_backend = meta_get_backend ();
 | 
			
		||||
  MetaCursorRenderer *renderer = meta_backend_get_cursor_renderer (meta_backend);
 | 
			
		||||
 | 
			
		||||
  if (META_IS_CURSOR_RENDERER_NATIVE (renderer))
 | 
			
		||||
    return meta_cursor_renderer_native_get_gbm_device (META_CURSOR_RENDERER_NATIVE (renderer));
 | 
			
		||||
  else
 | 
			
		||||
    return NULL;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
meta_cursor_image_load_from_xcursor_image (MetaCursorImage   *image,
 | 
			
		||||
                                           XcursorImage      *xc_image)
 | 
			
		||||
{
 | 
			
		||||
  uint width, height, rowstride;
 | 
			
		||||
  CoglPixelFormat cogl_format;
 | 
			
		||||
  ClutterBackend *clutter_backend;
 | 
			
		||||
  CoglContext *cogl_context;
 | 
			
		||||
  CoglTexture *texture;
 | 
			
		||||
  CoglError *error = NULL;
 | 
			
		||||
 | 
			
		||||
  g_assert (self->texture == NULL);
 | 
			
		||||
 | 
			
		||||
  width           = xc_image->width;
 | 
			
		||||
  height          = xc_image->height;
 | 
			
		||||
@@ -150,219 +233,196 @@ meta_cursor_sprite_load_from_xcursor_image (MetaCursorSprite *self,
 | 
			
		||||
  cogl_format = COGL_PIXEL_FORMAT_ARGB_8888;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  image->hot_x = xc_image->xhot;
 | 
			
		||||
  image->hot_y = xc_image->yhot;
 | 
			
		||||
 | 
			
		||||
  clutter_backend = clutter_get_default_backend ();
 | 
			
		||||
  cogl_context = clutter_backend_get_cogl_context (clutter_backend);
 | 
			
		||||
  texture = cogl_texture_2d_new_from_data (cogl_context,
 | 
			
		||||
                                           width, height,
 | 
			
		||||
                                           cogl_format,
 | 
			
		||||
                                           rowstride,
 | 
			
		||||
                                           (uint8_t *) xc_image->pixels,
 | 
			
		||||
                                           &error);
 | 
			
		||||
  image->texture = cogl_texture_2d_new_from_data (cogl_context,
 | 
			
		||||
                                                  width, height,
 | 
			
		||||
                                                  cogl_format,
 | 
			
		||||
                                                  rowstride,
 | 
			
		||||
                                                  (uint8_t *) xc_image->pixels,
 | 
			
		||||
                                                  NULL);
 | 
			
		||||
 | 
			
		||||
  if (error)
 | 
			
		||||
    {
 | 
			
		||||
      meta_warning ("Failed to allocate cursor texture: %s\n", error->message);
 | 
			
		||||
      cogl_error_free (error);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  meta_cursor_sprite_set_texture (self, texture,
 | 
			
		||||
                                  xc_image->xhot, xc_image->yhot);
 | 
			
		||||
 | 
			
		||||
  if (texture)
 | 
			
		||||
    cogl_object_unref (texture);
 | 
			
		||||
 | 
			
		||||
  meta_cursor_renderer_realize_cursor_from_xcursor (renderer, self, xc_image);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static XcursorImage *
 | 
			
		||||
meta_cursor_sprite_get_current_frame_image (MetaCursorSprite *self)
 | 
			
		||||
{
 | 
			
		||||
  return self->xcursor_images->images[self->current_frame];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
meta_cursor_sprite_tick_frame (MetaCursorSprite *self)
 | 
			
		||||
{
 | 
			
		||||
  XcursorImage *image;
 | 
			
		||||
 | 
			
		||||
  if (!meta_cursor_sprite_is_animated (self))
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  self->current_frame++;
 | 
			
		||||
 | 
			
		||||
  if (self->current_frame >= self->xcursor_images->nimage)
 | 
			
		||||
    self->current_frame = 0;
 | 
			
		||||
 | 
			
		||||
  image = meta_cursor_sprite_get_current_frame_image (self);
 | 
			
		||||
 | 
			
		||||
  g_clear_pointer (&self->texture, cogl_object_unref);
 | 
			
		||||
  meta_cursor_sprite_load_from_xcursor_image (self, image);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
guint
 | 
			
		||||
meta_cursor_sprite_get_current_frame_time (MetaCursorSprite *self)
 | 
			
		||||
{
 | 
			
		||||
  if (!meta_cursor_sprite_is_animated (self))
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
  return self->xcursor_images->images[self->current_frame]->delay;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gboolean
 | 
			
		||||
meta_cursor_sprite_is_animated (MetaCursorSprite *self)
 | 
			
		||||
{
 | 
			
		||||
  return (self->xcursor_images &&
 | 
			
		||||
          self->xcursor_images->nimage > 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
MetaCursorSprite *
 | 
			
		||||
meta_cursor_sprite_new (void)
 | 
			
		||||
{
 | 
			
		||||
  return g_object_new (META_TYPE_CURSOR_SPRITE, NULL);
 | 
			
		||||
#ifdef HAVE_NATIVE_BACKEND
 | 
			
		||||
  struct gbm_device *gbm = get_gbm_device ();
 | 
			
		||||
  if (gbm)
 | 
			
		||||
    meta_cursor_image_load_gbm_buffer (gbm,
 | 
			
		||||
                                       image,
 | 
			
		||||
                                       (uint8_t *) xc_image->pixels,
 | 
			
		||||
                                       width, height, rowstride,
 | 
			
		||||
                                       GBM_FORMAT_ARGB8888);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
meta_cursor_sprite_load_from_theme (MetaCursorSprite *self)
 | 
			
		||||
load_cursor_image (MetaCursorReference *cursor)
 | 
			
		||||
{
 | 
			
		||||
  XcursorImage *image;
 | 
			
		||||
 | 
			
		||||
  g_assert (self->cursor != META_CURSOR_NONE);
 | 
			
		||||
  /* Either cursors are loaded from X cursors or buffers. Since
 | 
			
		||||
   * buffers are converted over immediately, we can make sure to
 | 
			
		||||
   * load this directly. */
 | 
			
		||||
  g_assert (cursor->cursor != META_CURSOR_NONE);
 | 
			
		||||
 | 
			
		||||
  /* We might be reloading with a different scale. If so clear the old data. */
 | 
			
		||||
  if (self->xcursor_images)
 | 
			
		||||
    {
 | 
			
		||||
      g_clear_pointer (&self->texture, cogl_object_unref);
 | 
			
		||||
      XcursorImagesDestroy (self->xcursor_images);
 | 
			
		||||
    }
 | 
			
		||||
  image = load_cursor_on_client (cursor->cursor);
 | 
			
		||||
  if (!image)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  self->current_frame = 0;
 | 
			
		||||
  self->xcursor_images = load_cursor_on_client (self->cursor,
 | 
			
		||||
                                                self->theme_scale);
 | 
			
		||||
  if (!self->xcursor_images)
 | 
			
		||||
    meta_fatal ("Could not find cursor. Perhaps set XCURSOR_PATH?");
 | 
			
		||||
 | 
			
		||||
  image = meta_cursor_sprite_get_current_frame_image (self);
 | 
			
		||||
  meta_cursor_sprite_load_from_xcursor_image (self, image);
 | 
			
		||||
 | 
			
		||||
  self->theme_dirty = FALSE;
 | 
			
		||||
  meta_cursor_image_load_from_xcursor_image (&cursor->image, image);
 | 
			
		||||
  XcursorImageDestroy (image);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
MetaCursorSprite *
 | 
			
		||||
meta_cursor_sprite_from_theme (MetaCursor cursor)
 | 
			
		||||
MetaCursorReference *
 | 
			
		||||
meta_cursor_reference_from_theme (MetaCursor cursor)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorSprite *self;
 | 
			
		||||
 | 
			
		||||
  self = meta_cursor_sprite_new ();
 | 
			
		||||
 | 
			
		||||
  MetaCursorReference *self = g_slice_new0 (MetaCursorReference);
 | 
			
		||||
  self->ref_count = 1;
 | 
			
		||||
  self->cursor = cursor;
 | 
			
		||||
  self->theme_dirty = TRUE;
 | 
			
		||||
 | 
			
		||||
  return self;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
meta_cursor_sprite_set_texture (MetaCursorSprite *self,
 | 
			
		||||
                                CoglTexture      *texture,
 | 
			
		||||
                                int               hot_x,
 | 
			
		||||
                                int               hot_y)
 | 
			
		||||
#ifdef HAVE_WAYLAND
 | 
			
		||||
static void
 | 
			
		||||
meta_cursor_image_load_from_buffer (MetaCursorImage    *image,
 | 
			
		||||
                                    struct wl_resource *buffer,
 | 
			
		||||
                                    int                 hot_x,
 | 
			
		||||
                                    int                 hot_y)
 | 
			
		||||
{
 | 
			
		||||
  g_clear_pointer (&self->texture, cogl_object_unref);
 | 
			
		||||
  if (texture)
 | 
			
		||||
    self->texture = cogl_object_ref (texture);
 | 
			
		||||
  self->hot_x = hot_x;
 | 
			
		||||
  self->hot_y = hot_y;
 | 
			
		||||
  ClutterBackend *backend;
 | 
			
		||||
  CoglContext *cogl_context;
 | 
			
		||||
 | 
			
		||||
  image->hot_x = hot_x;
 | 
			
		||||
  image->hot_y = hot_y;
 | 
			
		||||
 | 
			
		||||
  backend = clutter_get_default_backend ();
 | 
			
		||||
  cogl_context = clutter_backend_get_cogl_context (backend);
 | 
			
		||||
 | 
			
		||||
  image->texture = cogl_wayland_texture_2d_new_from_buffer (cogl_context, buffer, NULL);
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_NATIVE_BACKEND
 | 
			
		||||
  struct gbm_device *gbm = get_gbm_device ();
 | 
			
		||||
  if (gbm)
 | 
			
		||||
    {
 | 
			
		||||
      uint32_t gbm_format;
 | 
			
		||||
      uint64_t cursor_width, cursor_height;
 | 
			
		||||
      uint width, height;
 | 
			
		||||
 | 
			
		||||
      width = cogl_texture_get_width (COGL_TEXTURE (image->texture));
 | 
			
		||||
      height = cogl_texture_get_height (COGL_TEXTURE (image->texture));
 | 
			
		||||
 | 
			
		||||
      struct wl_shm_buffer *shm_buffer = wl_shm_buffer_get (buffer);
 | 
			
		||||
      if (shm_buffer)
 | 
			
		||||
        {
 | 
			
		||||
          int rowstride = wl_shm_buffer_get_stride (shm_buffer);
 | 
			
		||||
 | 
			
		||||
          wl_shm_buffer_begin_access (shm_buffer);
 | 
			
		||||
 | 
			
		||||
          switch (wl_shm_buffer_get_format (shm_buffer))
 | 
			
		||||
            {
 | 
			
		||||
#if G_BYTE_ORDER == G_BIG_ENDIAN
 | 
			
		||||
            case WL_SHM_FORMAT_ARGB8888:
 | 
			
		||||
              gbm_format = GBM_FORMAT_ARGB8888;
 | 
			
		||||
              break;
 | 
			
		||||
            case WL_SHM_FORMAT_XRGB8888:
 | 
			
		||||
              gbm_format = GBM_FORMAT_XRGB8888;
 | 
			
		||||
              break;
 | 
			
		||||
#else
 | 
			
		||||
            case WL_SHM_FORMAT_ARGB8888:
 | 
			
		||||
              gbm_format = GBM_FORMAT_ARGB8888;
 | 
			
		||||
              break;
 | 
			
		||||
            case WL_SHM_FORMAT_XRGB8888:
 | 
			
		||||
              gbm_format = GBM_FORMAT_XRGB8888;
 | 
			
		||||
              break;
 | 
			
		||||
#endif
 | 
			
		||||
            default:
 | 
			
		||||
              g_warn_if_reached ();
 | 
			
		||||
              gbm_format = GBM_FORMAT_ARGB8888;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
          meta_cursor_image_load_gbm_buffer (gbm,
 | 
			
		||||
                                             image,
 | 
			
		||||
                                             (uint8_t *) wl_shm_buffer_get_data (shm_buffer),
 | 
			
		||||
                                             width, height, rowstride,
 | 
			
		||||
                                             gbm_format);
 | 
			
		||||
 | 
			
		||||
          wl_shm_buffer_end_access (shm_buffer);
 | 
			
		||||
        }
 | 
			
		||||
      else
 | 
			
		||||
        {
 | 
			
		||||
          /* HW cursors have a predefined size (at least 64x64), which usually is bigger than cursor theme
 | 
			
		||||
             size, so themed cursors must be padded with transparent pixels to fill the
 | 
			
		||||
             overlay. This is trivial if we have CPU access to the data, but it's not
 | 
			
		||||
             possible if the buffer is in GPU memory (and possibly tiled too), so if we
 | 
			
		||||
             don't get the right size, we fallback to GL.
 | 
			
		||||
          */
 | 
			
		||||
          get_hardware_cursor_size (&cursor_width, &cursor_height);
 | 
			
		||||
 | 
			
		||||
          if (width != cursor_width || height != cursor_height)
 | 
			
		||||
            {
 | 
			
		||||
              meta_warning ("Invalid cursor size (must be 64x64), falling back to software (GL) cursors\n");
 | 
			
		||||
              return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
          image->bo = gbm_bo_import (gbm, GBM_BO_IMPORT_WL_BUFFER, buffer, GBM_BO_USE_CURSOR);
 | 
			
		||||
          if (!image->bo)
 | 
			
		||||
            meta_warning ("Importing HW cursor from wl_buffer failed\n");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
meta_cursor_sprite_set_texture_scale (MetaCursorSprite *self,
 | 
			
		||||
                                      float             scale)
 | 
			
		||||
MetaCursorReference *
 | 
			
		||||
meta_cursor_reference_from_buffer (struct wl_resource *buffer,
 | 
			
		||||
                                   int                 hot_x,
 | 
			
		||||
                                   int                 hot_y)
 | 
			
		||||
{
 | 
			
		||||
  self->texture_scale = scale;
 | 
			
		||||
}
 | 
			
		||||
  MetaCursorReference *self;
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
meta_cursor_sprite_set_theme_scale (MetaCursorSprite *self,
 | 
			
		||||
                                    int               theme_scale)
 | 
			
		||||
{
 | 
			
		||||
  if (self->theme_scale != theme_scale)
 | 
			
		||||
    self->theme_dirty = TRUE;
 | 
			
		||||
  self->theme_scale = theme_scale;
 | 
			
		||||
  self = g_slice_new0 (MetaCursorReference);
 | 
			
		||||
  self->ref_count = 1;
 | 
			
		||||
  meta_cursor_image_load_from_buffer (&self->image, buffer, hot_x, hot_y);
 | 
			
		||||
 | 
			
		||||
  return self;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
CoglTexture *
 | 
			
		||||
meta_cursor_sprite_get_cogl_texture (MetaCursorSprite *self)
 | 
			
		||||
meta_cursor_reference_get_cogl_texture (MetaCursorReference *cursor,
 | 
			
		||||
                                        int                 *hot_x,
 | 
			
		||||
                                        int                 *hot_y)
 | 
			
		||||
{
 | 
			
		||||
  return COGL_TEXTURE (self->texture);
 | 
			
		||||
  if (!cursor->image.texture)
 | 
			
		||||
    load_cursor_image (cursor);
 | 
			
		||||
 | 
			
		||||
  if (hot_x)
 | 
			
		||||
    *hot_x = cursor->image.hot_x;
 | 
			
		||||
  if (hot_y)
 | 
			
		||||
    *hot_y = cursor->image.hot_y;
 | 
			
		||||
 | 
			
		||||
  return COGL_TEXTURE (cursor->image.texture);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_NATIVE_BACKEND
 | 
			
		||||
struct gbm_bo *
 | 
			
		||||
meta_cursor_reference_get_gbm_bo (MetaCursorReference *cursor,
 | 
			
		||||
                                  int                 *hot_x,
 | 
			
		||||
                                  int                 *hot_y)
 | 
			
		||||
{
 | 
			
		||||
  if (!cursor->image.bo)
 | 
			
		||||
    load_cursor_image (cursor);
 | 
			
		||||
 | 
			
		||||
  if (hot_x)
 | 
			
		||||
    *hot_x = cursor->image.hot_x;
 | 
			
		||||
  if (hot_y)
 | 
			
		||||
    *hot_y = cursor->image.hot_y;
 | 
			
		||||
  return cursor->image.bo;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
MetaCursor
 | 
			
		||||
meta_cursor_sprite_get_meta_cursor (MetaCursorSprite *self)
 | 
			
		||||
meta_cursor_reference_get_meta_cursor (MetaCursorReference *cursor)
 | 
			
		||||
{
 | 
			
		||||
  return self->cursor;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
meta_cursor_sprite_get_hotspot (MetaCursorSprite *self,
 | 
			
		||||
                                int              *hot_x,
 | 
			
		||||
                                int              *hot_y)
 | 
			
		||||
{
 | 
			
		||||
  *hot_x = self->hot_x;
 | 
			
		||||
  *hot_y = self->hot_y;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
float
 | 
			
		||||
meta_cursor_sprite_get_texture_scale (MetaCursorSprite *self)
 | 
			
		||||
{
 | 
			
		||||
  return self->texture_scale;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
meta_cursor_sprite_prepare_at (MetaCursorSprite *self,
 | 
			
		||||
                               int               x,
 | 
			
		||||
                               int               y)
 | 
			
		||||
{
 | 
			
		||||
  g_signal_emit (self, signals[PREPARE_AT], 0, x, y);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
meta_cursor_sprite_realize_texture (MetaCursorSprite *self)
 | 
			
		||||
{
 | 
			
		||||
  if (self->theme_dirty)
 | 
			
		||||
    meta_cursor_sprite_load_from_theme (self);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
meta_cursor_sprite_init (MetaCursorSprite *self)
 | 
			
		||||
{
 | 
			
		||||
  self->texture_scale = 1.0f;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
meta_cursor_sprite_finalize (GObject *object)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorSprite *self = META_CURSOR_SPRITE (object);
 | 
			
		||||
 | 
			
		||||
  if (self->xcursor_images)
 | 
			
		||||
    XcursorImagesDestroy (self->xcursor_images);
 | 
			
		||||
 | 
			
		||||
  g_clear_pointer (&self->texture, cogl_object_unref);
 | 
			
		||||
 | 
			
		||||
  G_OBJECT_CLASS (meta_cursor_sprite_parent_class)->finalize (object);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
meta_cursor_sprite_class_init (MetaCursorSpriteClass *klass)
 | 
			
		||||
{
 | 
			
		||||
  GObjectClass *object_class = G_OBJECT_CLASS (klass);
 | 
			
		||||
 | 
			
		||||
  object_class->finalize = meta_cursor_sprite_finalize;
 | 
			
		||||
 | 
			
		||||
  signals[PREPARE_AT] = g_signal_new ("prepare-at",
 | 
			
		||||
                                      G_TYPE_FROM_CLASS (object_class),
 | 
			
		||||
                                      G_SIGNAL_RUN_LAST,
 | 
			
		||||
                                      0,
 | 
			
		||||
                                      NULL, NULL, NULL,
 | 
			
		||||
                                      G_TYPE_NONE, 2,
 | 
			
		||||
                                      G_TYPE_INT,
 | 
			
		||||
                                      G_TYPE_INT);
 | 
			
		||||
  return cursor->cursor;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -22,54 +22,25 @@
 | 
			
		||||
#ifndef META_CURSOR_H
 | 
			
		||||
#define META_CURSOR_H
 | 
			
		||||
 | 
			
		||||
typedef struct _MetaCursorReference MetaCursorReference;
 | 
			
		||||
 | 
			
		||||
MetaCursorReference * meta_cursor_reference_ref (MetaCursorReference *cursor);
 | 
			
		||||
void meta_cursor_reference_unref (MetaCursorReference *cursor);
 | 
			
		||||
 | 
			
		||||
#include <meta/common.h>
 | 
			
		||||
#include <meta/boxes.h>
 | 
			
		||||
 | 
			
		||||
typedef struct _MetaCursorSprite MetaCursorSprite;
 | 
			
		||||
MetaCursorReference * meta_cursor_reference_from_theme  (MetaCursor          cursor);
 | 
			
		||||
 | 
			
		||||
#define META_TYPE_CURSOR_SPRITE (meta_cursor_sprite_get_type ())
 | 
			
		||||
G_DECLARE_FINAL_TYPE (MetaCursorSprite,
 | 
			
		||||
                      meta_cursor_sprite,
 | 
			
		||||
                      META, CURSOR_SPRITE,
 | 
			
		||||
                      GObject);
 | 
			
		||||
#ifdef HAVE_WAYLAND
 | 
			
		||||
#include <wayland-server.h>
 | 
			
		||||
MetaCursorReference * meta_cursor_reference_from_buffer (struct wl_resource *buffer,
 | 
			
		||||
                                                         int                 hot_x,
 | 
			
		||||
                                                         int                 hot_y);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
MetaCursorSprite * meta_cursor_sprite_new (void);
 | 
			
		||||
 | 
			
		||||
MetaCursorSprite * meta_cursor_sprite_from_theme  (MetaCursor cursor);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void meta_cursor_sprite_set_theme_scale (MetaCursorSprite *self,
 | 
			
		||||
                                         int               scale);
 | 
			
		||||
 | 
			
		||||
MetaCursor meta_cursor_sprite_get_meta_cursor (MetaCursorSprite *self);
 | 
			
		||||
MetaCursor meta_cursor_reference_get_meta_cursor (MetaCursorReference *cursor);
 | 
			
		||||
 | 
			
		||||
Cursor meta_cursor_create_x_cursor (Display    *xdisplay,
 | 
			
		||||
                                    MetaCursor  cursor);
 | 
			
		||||
 | 
			
		||||
void meta_cursor_sprite_prepare_at (MetaCursorSprite *self,
 | 
			
		||||
                                    int               x,
 | 
			
		||||
                                    int               y);
 | 
			
		||||
 | 
			
		||||
void meta_cursor_sprite_realize_texture (MetaCursorSprite *self);
 | 
			
		||||
 | 
			
		||||
void meta_cursor_sprite_set_texture (MetaCursorSprite *self,
 | 
			
		||||
                                     CoglTexture      *texture,
 | 
			
		||||
                                     int               hot_x,
 | 
			
		||||
                                     int               hot_y);
 | 
			
		||||
 | 
			
		||||
void meta_cursor_sprite_set_texture_scale (MetaCursorSprite *self,
 | 
			
		||||
                                           float             scale);
 | 
			
		||||
 | 
			
		||||
CoglTexture *meta_cursor_sprite_get_cogl_texture (MetaCursorSprite *self);
 | 
			
		||||
 | 
			
		||||
void meta_cursor_sprite_get_hotspot (MetaCursorSprite *self,
 | 
			
		||||
                                     int              *hot_x,
 | 
			
		||||
                                     int              *hot_y);
 | 
			
		||||
 | 
			
		||||
float meta_cursor_sprite_get_texture_scale (MetaCursorSprite *self);
 | 
			
		||||
 | 
			
		||||
gboolean meta_cursor_sprite_is_animated            (MetaCursorSprite *self);
 | 
			
		||||
void     meta_cursor_sprite_tick_frame             (MetaCursorSprite *self);
 | 
			
		||||
guint    meta_cursor_sprite_get_current_frame_time (MetaCursorSprite *self);
 | 
			
		||||
 | 
			
		||||
#endif /* META_CURSOR_H */
 | 
			
		||||
 
 | 
			
		||||
@@ -63,9 +63,9 @@ struct _MetaInputSettingsClass
 | 
			
		||||
  void (* set_invert_scroll) (MetaInputSettings  *settings,
 | 
			
		||||
                              ClutterInputDevice *device,
 | 
			
		||||
                              gboolean            inverted);
 | 
			
		||||
  void (* set_edge_scroll)   (MetaInputSettings  *settings,
 | 
			
		||||
                              ClutterInputDevice *device,
 | 
			
		||||
                              gboolean            enabled);
 | 
			
		||||
  void (* set_scroll_method) (MetaInputSettings            *settings,
 | 
			
		||||
                              ClutterInputDevice           *device,
 | 
			
		||||
                              GDesktopTouchpadScrollMethod  mode);
 | 
			
		||||
  void (* set_scroll_button) (MetaInputSettings  *settings,
 | 
			
		||||
                              ClutterInputDevice *device,
 | 
			
		||||
                              guint               button);
 | 
			
		||||
 
 | 
			
		||||
@@ -395,11 +395,11 @@ update_touchpad_tap_enabled (MetaInputSettings  *input_settings,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
update_touchpad_edge_scroll (MetaInputSettings *input_settings,
 | 
			
		||||
                             ClutterInputDevice *device)
 | 
			
		||||
update_touchpad_scroll_method (MetaInputSettings *input_settings,
 | 
			
		||||
                               ClutterInputDevice *device)
 | 
			
		||||
{
 | 
			
		||||
  MetaInputSettingsClass *input_settings_class;
 | 
			
		||||
  gboolean edge_scroll_enabled;
 | 
			
		||||
  GDesktopTouchpadScrollMethod method;
 | 
			
		||||
  MetaInputSettingsPrivate *priv;
 | 
			
		||||
 | 
			
		||||
  if (device &&
 | 
			
		||||
@@ -408,19 +408,19 @@ update_touchpad_edge_scroll (MetaInputSettings *input_settings,
 | 
			
		||||
 | 
			
		||||
  priv = meta_input_settings_get_instance_private (input_settings);
 | 
			
		||||
  input_settings_class = META_INPUT_SETTINGS_GET_CLASS (input_settings);
 | 
			
		||||
  edge_scroll_enabled = g_settings_get_boolean (priv->touchpad_settings, "edge-scrolling-enabled");
 | 
			
		||||
  method = g_settings_get_enum (priv->touchpad_settings, "scroll-method");
 | 
			
		||||
 | 
			
		||||
  if (device)
 | 
			
		||||
    {
 | 
			
		||||
      settings_device_set_bool_setting (input_settings, device,
 | 
			
		||||
                                        input_settings_class->set_edge_scroll,
 | 
			
		||||
                                        edge_scroll_enabled);
 | 
			
		||||
      settings_device_set_uint_setting (input_settings, device,
 | 
			
		||||
                                        input_settings_class->set_scroll_method,
 | 
			
		||||
                                        method);
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      settings_set_bool_setting (input_settings, CLUTTER_TOUCHPAD_DEVICE,
 | 
			
		||||
                                 (ConfigBoolFunc) input_settings_class->set_edge_scroll,
 | 
			
		||||
                                 edge_scroll_enabled);
 | 
			
		||||
      settings_set_uint_setting (input_settings, CLUTTER_TOUCHPAD_DEVICE,
 | 
			
		||||
                                 (ConfigUintFunc) input_settings_class->set_scroll_method,
 | 
			
		||||
                                 method);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -429,7 +429,7 @@ update_touchpad_click_method (MetaInputSettings *input_settings,
 | 
			
		||||
                              ClutterInputDevice *device)
 | 
			
		||||
{
 | 
			
		||||
  MetaInputSettingsClass *input_settings_class;
 | 
			
		||||
  GDesktopTouchpadClickMethod method;
 | 
			
		||||
  GDesktopTouchpadScrollMethod method;
 | 
			
		||||
  MetaInputSettingsPrivate *priv;
 | 
			
		||||
 | 
			
		||||
  if (device &&
 | 
			
		||||
@@ -523,13 +523,15 @@ update_trackball_scroll_button (MetaInputSettings  *input_settings,
 | 
			
		||||
    }
 | 
			
		||||
  else if (!device)
 | 
			
		||||
    {
 | 
			
		||||
      MetaInputSettingsPrivate *priv;
 | 
			
		||||
      const GSList *devices;
 | 
			
		||||
 | 
			
		||||
      priv = meta_input_settings_get_instance_private (input_settings);
 | 
			
		||||
      devices = clutter_device_manager_peek_devices (priv->device_manager);
 | 
			
		||||
 | 
			
		||||
      while (devices)
 | 
			
		||||
        {
 | 
			
		||||
          device = devices->data;
 | 
			
		||||
          ClutterInputDevice *device = devices->data;
 | 
			
		||||
 | 
			
		||||
          if (device_is_trackball (device))
 | 
			
		||||
            input_settings_class->set_scroll_button (input_settings, device, button);
 | 
			
		||||
@@ -645,8 +647,8 @@ meta_input_settings_changed_cb (GSettings  *settings,
 | 
			
		||||
        update_touchpad_tap_enabled (input_settings, NULL);
 | 
			
		||||
      else if (strcmp (key, "send-events") == 0)
 | 
			
		||||
        update_touchpad_send_events (input_settings, NULL);
 | 
			
		||||
      else if (strcmp (key, "edge-scrolling-enabled") == 0)
 | 
			
		||||
        update_touchpad_edge_scroll (input_settings, NULL);
 | 
			
		||||
      else if (strcmp (key, "scroll-method") == 0)
 | 
			
		||||
        update_touchpad_scroll_method (input_settings, NULL);
 | 
			
		||||
      else if (strcmp (key, "click-method") == 0)
 | 
			
		||||
        update_touchpad_click_method (input_settings, NULL);
 | 
			
		||||
    }
 | 
			
		||||
@@ -771,7 +773,7 @@ apply_device_settings (MetaInputSettings  *input_settings,
 | 
			
		||||
  update_device_natural_scroll (input_settings, device);
 | 
			
		||||
  update_touchpad_tap_enabled (input_settings, device);
 | 
			
		||||
  update_touchpad_send_events (input_settings, device);
 | 
			
		||||
  update_touchpad_edge_scroll (input_settings, device);
 | 
			
		||||
  update_touchpad_scroll_method (input_settings, device);
 | 
			
		||||
  update_touchpad_click_method (input_settings, device);
 | 
			
		||||
 | 
			
		||||
  update_trackball_scroll_button (input_settings, device);
 | 
			
		||||
 
 | 
			
		||||
@@ -65,7 +65,6 @@ typedef struct {
 | 
			
		||||
 | 
			
		||||
  gboolean is_primary;
 | 
			
		||||
  gboolean is_presentation;
 | 
			
		||||
  gboolean is_underscanning;
 | 
			
		||||
} MetaOutputConfig;
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
@@ -83,8 +82,7 @@ struct _MetaMonitorConfig {
 | 
			
		||||
  gboolean current_is_for_laptop_lid;
 | 
			
		||||
  MetaConfiguration *previous;
 | 
			
		||||
 | 
			
		||||
  GFile *user_file;
 | 
			
		||||
  GFile *system_file;
 | 
			
		||||
  GFile *file;
 | 
			
		||||
  GCancellable *save_cancellable;
 | 
			
		||||
 | 
			
		||||
  UpClient *up_client;
 | 
			
		||||
@@ -240,7 +238,6 @@ meta_monitor_config_init (MetaMonitorConfig *self)
 | 
			
		||||
{
 | 
			
		||||
  const char *filename;
 | 
			
		||||
  char *path;
 | 
			
		||||
  const char * const *system_dirs;
 | 
			
		||||
 | 
			
		||||
  self->configs = g_hash_table_new_full (config_hash, config_equal, NULL, (GDestroyNotify) config_unref);
 | 
			
		||||
 | 
			
		||||
@@ -249,17 +246,9 @@ meta_monitor_config_init (MetaMonitorConfig *self)
 | 
			
		||||
    filename = "monitors.xml";
 | 
			
		||||
 | 
			
		||||
  path = g_build_filename (g_get_user_config_dir (), filename, NULL);
 | 
			
		||||
  self->user_file = g_file_new_for_path (path);
 | 
			
		||||
  self->file = g_file_new_for_path (path);
 | 
			
		||||
  g_free (path);
 | 
			
		||||
 | 
			
		||||
  for (system_dirs = g_get_system_config_dirs (); !self->system_file && *system_dirs; system_dirs++)
 | 
			
		||||
    {
 | 
			
		||||
      path = g_build_filename (*system_dirs, filename, NULL);
 | 
			
		||||
      if (g_file_test (path, G_FILE_TEST_EXISTS))
 | 
			
		||||
        self->system_file = g_file_new_for_path (path);
 | 
			
		||||
      g_free (path);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  self->up_client = up_client_new ();
 | 
			
		||||
  self->lid_is_closed = up_client_get_lid_is_closed (self->up_client);
 | 
			
		||||
 | 
			
		||||
@@ -404,8 +393,7 @@ handle_start_element (GMarkupParseContext  *context,
 | 
			
		||||
             strcmp (element_name, "reflect_x") == 0 ||
 | 
			
		||||
             strcmp (element_name, "reflect_y") == 0 ||
 | 
			
		||||
             strcmp (element_name, "primary") == 0 ||
 | 
			
		||||
             strcmp (element_name, "presentation") == 0 ||
 | 
			
		||||
             strcmp (element_name, "underscanning") == 0) && parser->unknown_count == 0)
 | 
			
		||||
             strcmp (element_name, "presentation") == 0) && parser->unknown_count == 0)
 | 
			
		||||
          {
 | 
			
		||||
            parser->state = STATE_OUTPUT_FIELD;
 | 
			
		||||
 | 
			
		||||
@@ -489,8 +477,8 @@ handle_end_element (GMarkupParseContext  *context,
 | 
			
		||||
              }
 | 
			
		||||
            else
 | 
			
		||||
              {
 | 
			
		||||
                if (parser->output.rect.width == 0 ||
 | 
			
		||||
                    parser->output.rect.height == 0)
 | 
			
		||||
                if (parser->output.rect.width == 0 &&
 | 
			
		||||
                    parser->output.rect.width == 0)
 | 
			
		||||
                  parser->output.enabled = FALSE;
 | 
			
		||||
                else
 | 
			
		||||
                  parser->output.enabled = TRUE;
 | 
			
		||||
@@ -712,8 +700,6 @@ handle_text (GMarkupParseContext *context,
 | 
			
		||||
          parser->output.is_primary = read_bool (text, text_len, error);
 | 
			
		||||
        else if (strcmp (parser->output_field, "presentation") == 0)
 | 
			
		||||
          parser->output.is_presentation = read_bool (text, text_len, error);
 | 
			
		||||
        else if (strcmp (parser->output_field, "underscanning") == 0)
 | 
			
		||||
          parser->output.is_underscanning = read_bool (text, text_len, error);
 | 
			
		||||
        else
 | 
			
		||||
          g_assert_not_reached ();
 | 
			
		||||
        return;
 | 
			
		||||
@@ -731,8 +717,8 @@ static const GMarkupParser config_parser = {
 | 
			
		||||
  .text = handle_text,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
load_config_file (MetaMonitorConfig *self, GFile *file)
 | 
			
		||||
static void
 | 
			
		||||
meta_monitor_config_load (MetaMonitorConfig  *self)
 | 
			
		||||
{
 | 
			
		||||
  char *contents;
 | 
			
		||||
  gsize size;
 | 
			
		||||
@@ -750,12 +736,14 @@ load_config_file (MetaMonitorConfig *self, GFile *file)
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
  error = NULL;
 | 
			
		||||
  ok = g_file_load_contents (file, NULL, &contents, &size, NULL, &error);
 | 
			
		||||
  ok = g_file_load_contents (self->file, NULL, &contents, &size, NULL, &error);
 | 
			
		||||
  if (!ok)
 | 
			
		||||
    {
 | 
			
		||||
      if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
 | 
			
		||||
        meta_warning ("Failed to load stored monitor configuration: %s\n", error->message);
 | 
			
		||||
 | 
			
		||||
      g_error_free (error);
 | 
			
		||||
      return FALSE;
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  memset (&parser, 0, sizeof (ConfigParser));
 | 
			
		||||
@@ -784,17 +772,6 @@ load_config_file (MetaMonitorConfig *self, GFile *file)
 | 
			
		||||
 | 
			
		||||
  g_markup_parse_context_free (context);
 | 
			
		||||
  g_free (contents);
 | 
			
		||||
 | 
			
		||||
  return ok;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
meta_monitor_config_load (MetaMonitorConfig *self)
 | 
			
		||||
{
 | 
			
		||||
  if (self->user_file && load_config_file (self, self->user_file))
 | 
			
		||||
    return;
 | 
			
		||||
  if (self->system_file && load_config_file (self, self->system_file))
 | 
			
		||||
    return;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
MetaMonitorConfig *
 | 
			
		||||
@@ -886,14 +863,14 @@ apply_configuration (MetaMonitorConfig  *self,
 | 
			
		||||
                     MetaConfiguration  *config,
 | 
			
		||||
		     MetaMonitorManager *manager)
 | 
			
		||||
{
 | 
			
		||||
  g_autoptr(GPtrArray) crtcs = NULL;
 | 
			
		||||
  g_autoptr(GPtrArray) outputs = NULL;
 | 
			
		||||
  GPtrArray *crtcs, *outputs;
 | 
			
		||||
  gboolean ret = FALSE;
 | 
			
		||||
 | 
			
		||||
  crtcs = g_ptr_array_new_full (config->n_outputs, (GDestroyNotify)meta_crtc_info_free);
 | 
			
		||||
  outputs = g_ptr_array_new_full (config->n_outputs, (GDestroyNotify)meta_output_info_free);
 | 
			
		||||
 | 
			
		||||
  if (!meta_monitor_config_assign_crtcs (config, manager, crtcs, outputs))
 | 
			
		||||
    return FALSE;
 | 
			
		||||
    goto out;
 | 
			
		||||
 | 
			
		||||
  meta_monitor_manager_apply_configuration (manager,
 | 
			
		||||
                                            (MetaCRTCInfo**)crtcs->pdata, crtcs->len,
 | 
			
		||||
@@ -905,7 +882,12 @@ apply_configuration (MetaMonitorConfig  *self,
 | 
			
		||||
   * inside turn_off_laptop_display / apply_configuration_with_lid */
 | 
			
		||||
  self->current_is_for_laptop_lid = FALSE;
 | 
			
		||||
 | 
			
		||||
  return TRUE;
 | 
			
		||||
  ret = TRUE;
 | 
			
		||||
 | 
			
		||||
 out:
 | 
			
		||||
  g_ptr_array_unref (crtcs);
 | 
			
		||||
  g_ptr_array_unref (outputs);
 | 
			
		||||
  return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
@@ -913,13 +895,23 @@ key_is_laptop (MetaOutputKey *key)
 | 
			
		||||
{
 | 
			
		||||
  /* FIXME: extend with better heuristics */
 | 
			
		||||
  return g_str_has_prefix (key->connector, "LVDS") ||
 | 
			
		||||
    g_str_has_prefix (key->connector, "lvds") ||
 | 
			
		||||
    g_str_has_prefix (key->connector, "Lvds") ||
 | 
			
		||||
    g_str_has_prefix (key->connector, "LCD")  || /* some versions of fglrx, sigh */
 | 
			
		||||
    g_str_has_prefix (key->connector, "DSI") ||
 | 
			
		||||
    g_str_has_prefix (key->connector, "eDP");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
output_is_laptop (MetaOutput *output)
 | 
			
		||||
{
 | 
			
		||||
  /* FIXME: extend with better heuristics */
 | 
			
		||||
  switch (output->connector_type)
 | 
			
		||||
    {
 | 
			
		||||
    case META_CONNECTOR_TYPE_eDP:
 | 
			
		||||
    case META_CONNECTOR_TYPE_LVDS:
 | 
			
		||||
      return TRUE;
 | 
			
		||||
    default:
 | 
			
		||||
      return FALSE;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
laptop_display_is_on (MetaConfiguration *config)
 | 
			
		||||
{
 | 
			
		||||
@@ -1041,17 +1033,6 @@ apply_configuration_with_lid (MetaMonitorConfig  *self,
 | 
			
		||||
    return apply_configuration (self, config, manager);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gboolean
 | 
			
		||||
meta_monitor_config_get_is_builtin_display_on (MetaMonitorConfig *self)
 | 
			
		||||
{
 | 
			
		||||
  g_return_val_if_fail (META_IS_MONITOR_CONFIG (self), FALSE);
 | 
			
		||||
 | 
			
		||||
  if (self->current)
 | 
			
		||||
    return laptop_display_is_on (self->current);
 | 
			
		||||
 | 
			
		||||
  return FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gboolean
 | 
			
		||||
meta_monitor_config_apply_stored (MetaMonitorConfig  *self,
 | 
			
		||||
				  MetaMonitorManager *manager)
 | 
			
		||||
@@ -1075,12 +1056,12 @@ meta_monitor_config_apply_stored (MetaMonitorConfig  *self,
 | 
			
		||||
 * which are internal monitors), or failing that, the one with the
 | 
			
		||||
 * best resolution
 | 
			
		||||
 */
 | 
			
		||||
static int
 | 
			
		||||
static MetaOutput *
 | 
			
		||||
find_primary_output (MetaOutput *outputs,
 | 
			
		||||
                     unsigned    n_outputs)
 | 
			
		||||
{
 | 
			
		||||
  unsigned i;
 | 
			
		||||
  int best;
 | 
			
		||||
  MetaOutput *best;
 | 
			
		||||
  int best_width, best_height;
 | 
			
		||||
 | 
			
		||||
  g_assert (n_outputs >= 1);
 | 
			
		||||
@@ -1088,23 +1069,23 @@ find_primary_output (MetaOutput *outputs,
 | 
			
		||||
  for (i = 0; i < n_outputs; i++)
 | 
			
		||||
    {
 | 
			
		||||
      if (outputs[i].is_primary)
 | 
			
		||||
        return i;
 | 
			
		||||
        return &outputs[i];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < n_outputs; i++)
 | 
			
		||||
    {
 | 
			
		||||
      if (meta_output_is_laptop (&outputs[i]))
 | 
			
		||||
        return i;
 | 
			
		||||
      if (output_is_laptop (&outputs[i]))
 | 
			
		||||
        return &outputs[i];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  best = -1;
 | 
			
		||||
  best = NULL;
 | 
			
		||||
  best_width = 0; best_height = 0;
 | 
			
		||||
  for (i = 0; i < n_outputs; i++)
 | 
			
		||||
    {
 | 
			
		||||
      if (outputs[i].preferred_mode->width * outputs[i].preferred_mode->height >
 | 
			
		||||
          best_width * best_height)
 | 
			
		||||
        {
 | 
			
		||||
          best = i;
 | 
			
		||||
          best = &outputs[i];
 | 
			
		||||
          best_width = outputs[i].preferred_mode->width;
 | 
			
		||||
          best_height = outputs[i].preferred_mode->height;
 | 
			
		||||
        }
 | 
			
		||||
@@ -1142,7 +1123,7 @@ make_suggested_config (MetaMonitorConfig *self,
 | 
			
		||||
                       MetaConfiguration *config)
 | 
			
		||||
{
 | 
			
		||||
  unsigned int i;
 | 
			
		||||
  int primary;
 | 
			
		||||
  MetaOutput *primary;
 | 
			
		||||
  GList *region = NULL;
 | 
			
		||||
 | 
			
		||||
  g_return_val_if_fail (config != NULL, FALSE);
 | 
			
		||||
@@ -1150,7 +1131,7 @@ make_suggested_config (MetaMonitorConfig *self,
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < n_outputs; i++)
 | 
			
		||||
    {
 | 
			
		||||
      gboolean is_primary = ((int)i == primary);
 | 
			
		||||
      gboolean is_primary = (&outputs[i] == primary);
 | 
			
		||||
 | 
			
		||||
      if (outputs[i].suggested_x < 0 || outputs[i].suggested_y < 0)
 | 
			
		||||
          return FALSE;
 | 
			
		||||
@@ -1177,81 +1158,6 @@ make_suggested_config (MetaMonitorConfig *self,
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
config_one_untiled_output (MetaOutput *outputs,
 | 
			
		||||
                           MetaConfiguration *config,
 | 
			
		||||
                           int idx, gboolean is_primary,
 | 
			
		||||
                           int *x, unsigned long *output_configured_bitmap)
 | 
			
		||||
{
 | 
			
		||||
  MetaOutput *output = &outputs[idx];
 | 
			
		||||
 | 
			
		||||
  if (*output_configured_bitmap & (1 << idx))
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  init_config_from_preferred_mode (&config->outputs[idx], output);
 | 
			
		||||
  config->outputs[idx].is_primary = is_primary;
 | 
			
		||||
  config->outputs[idx].rect.x = *x;
 | 
			
		||||
  *x += config->outputs[idx].rect.width;
 | 
			
		||||
  *output_configured_bitmap |= (1 << idx);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
config_one_tiled_group (MetaOutput *outputs,
 | 
			
		||||
                        MetaConfiguration *config,
 | 
			
		||||
                        int base_idx, gboolean is_primary,
 | 
			
		||||
                        int n_outputs,
 | 
			
		||||
                        int *x, unsigned long *output_configured_bitmap)
 | 
			
		||||
{
 | 
			
		||||
  guint32 num_h_tile, num_v_tile, ht, vt;
 | 
			
		||||
  int j;
 | 
			
		||||
  int cur_x, cur_y, addx = 0;
 | 
			
		||||
 | 
			
		||||
  if (*output_configured_bitmap & (1 << base_idx))
 | 
			
		||||
      return;
 | 
			
		||||
 | 
			
		||||
  if (outputs[base_idx].tile_info.group_id == 0)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  cur_x = cur_y = 0;
 | 
			
		||||
  num_h_tile = outputs[base_idx].tile_info.max_h_tiles;
 | 
			
		||||
  num_v_tile = outputs[base_idx].tile_info.max_v_tiles;
 | 
			
		||||
 | 
			
		||||
  /* iterate over horizontal tiles */
 | 
			
		||||
  cur_x = *x;
 | 
			
		||||
  for (ht = 0; ht < num_h_tile; ht++)
 | 
			
		||||
    {
 | 
			
		||||
      cur_y = 0;
 | 
			
		||||
      addx = 0;
 | 
			
		||||
      for (vt = 0; vt < num_v_tile; vt++)
 | 
			
		||||
        {
 | 
			
		||||
          for (j = 0; j < n_outputs; j++)
 | 
			
		||||
            {
 | 
			
		||||
              if (outputs[j].tile_info.group_id != outputs[base_idx].tile_info.group_id)
 | 
			
		||||
                continue;
 | 
			
		||||
 | 
			
		||||
              if (outputs[j].tile_info.loc_h_tile != ht ||
 | 
			
		||||
                  outputs[j].tile_info.loc_v_tile != vt)
 | 
			
		||||
                continue;
 | 
			
		||||
 | 
			
		||||
              if (ht == 0 && vt == 0 && is_primary)
 | 
			
		||||
                config->outputs[j].is_primary = TRUE;
 | 
			
		||||
 | 
			
		||||
              init_config_from_preferred_mode (&config->outputs[j], &outputs[j]);
 | 
			
		||||
              config->outputs[j].rect.x = cur_x;
 | 
			
		||||
              config->outputs[j].rect.y = cur_y;
 | 
			
		||||
 | 
			
		||||
              *output_configured_bitmap |= (1 << j);
 | 
			
		||||
              cur_y += outputs[j].tile_info.tile_h;
 | 
			
		||||
              if (vt == 0)
 | 
			
		||||
                addx += outputs[j].tile_info.tile_w;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
      cur_x += addx;
 | 
			
		||||
    }
 | 
			
		||||
  *x = cur_x;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
make_linear_config (MetaMonitorConfig *self,
 | 
			
		||||
                    MetaOutput        *outputs,
 | 
			
		||||
@@ -1260,41 +1166,31 @@ make_linear_config (MetaMonitorConfig *self,
 | 
			
		||||
                    int                max_height,
 | 
			
		||||
                    MetaConfiguration *config)
 | 
			
		||||
{
 | 
			
		||||
  unsigned long output_configured_bitmap = 0;
 | 
			
		||||
  MetaOutput *primary;
 | 
			
		||||
  unsigned i;
 | 
			
		||||
  int x;
 | 
			
		||||
  int primary;
 | 
			
		||||
 | 
			
		||||
  g_return_if_fail (config != NULL);
 | 
			
		||||
 | 
			
		||||
  primary = find_primary_output (outputs, n_outputs);
 | 
			
		||||
 | 
			
		||||
  x = 0;
 | 
			
		||||
  /* set the primary up first at 0 */
 | 
			
		||||
  if (outputs[primary].tile_info.group_id)
 | 
			
		||||
    {
 | 
			
		||||
      config_one_tiled_group (outputs, config, primary, TRUE, n_outputs,
 | 
			
		||||
                              &x, &output_configured_bitmap);
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      config_one_untiled_output (outputs, config, primary, TRUE,
 | 
			
		||||
                                 &x, &output_configured_bitmap);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* then add other tiled monitors */
 | 
			
		||||
  x = primary->preferred_mode->width;
 | 
			
		||||
  for (i = 0; i < n_outputs; i++)
 | 
			
		||||
    {
 | 
			
		||||
      config_one_tiled_group (outputs, config, i, FALSE, n_outputs,
 | 
			
		||||
                              &x, &output_configured_bitmap);
 | 
			
		||||
    }
 | 
			
		||||
      gboolean is_primary = (&outputs[i] == primary);
 | 
			
		||||
 | 
			
		||||
  /* then add remaining monitors */
 | 
			
		||||
  for (i = 0; i < n_outputs; i++)
 | 
			
		||||
    {
 | 
			
		||||
      config_one_untiled_output (outputs, config, i, FALSE,
 | 
			
		||||
                                 &x, &output_configured_bitmap);
 | 
			
		||||
      init_config_from_preferred_mode (&config->outputs[i], &outputs[i]);
 | 
			
		||||
      config->outputs[i].is_primary = is_primary;
 | 
			
		||||
 | 
			
		||||
      if (is_primary)
 | 
			
		||||
        {
 | 
			
		||||
          config->outputs[i].rect.x = 0;
 | 
			
		||||
        }
 | 
			
		||||
      else
 | 
			
		||||
        {
 | 
			
		||||
          config->outputs[i].rect.x = x;
 | 
			
		||||
          x += config->outputs[i].rect.width;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -1418,7 +1314,7 @@ ensure_at_least_one_output (MetaMonitorConfig  *self,
 | 
			
		||||
                            unsigned            n_outputs)
 | 
			
		||||
{
 | 
			
		||||
  MetaConfiguration *config;
 | 
			
		||||
  int primary;
 | 
			
		||||
  MetaOutput *primary;
 | 
			
		||||
  unsigned i;
 | 
			
		||||
 | 
			
		||||
  /* Check that we have at least one active output */
 | 
			
		||||
@@ -1436,7 +1332,7 @@ ensure_at_least_one_output (MetaMonitorConfig  *self,
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < n_outputs; i++)
 | 
			
		||||
    {
 | 
			
		||||
      gboolean is_primary = ((int)i == primary);
 | 
			
		||||
      gboolean is_primary = (&outputs[i] == primary);
 | 
			
		||||
 | 
			
		||||
      if (is_primary)
 | 
			
		||||
        {
 | 
			
		||||
@@ -1512,7 +1408,6 @@ init_config_from_output (MetaOutputConfig *config,
 | 
			
		||||
  config->transform = output->crtc->transform;
 | 
			
		||||
  config->is_primary = output->is_primary;
 | 
			
		||||
  config->is_presentation = output->is_presentation;
 | 
			
		||||
  config->is_underscanning = output->is_underscanning;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
@@ -1555,19 +1450,18 @@ meta_monitor_config_restore_previous (MetaMonitorConfig  *self,
 | 
			
		||||
      /* The user chose to restore the previous configuration. In this
 | 
			
		||||
       * case, restore the previous configuration. */
 | 
			
		||||
      MetaConfiguration *prev_config = config_ref (self->previous);
 | 
			
		||||
      gboolean ok = apply_configuration (self, prev_config, manager);
 | 
			
		||||
      apply_configuration (self, prev_config, manager);
 | 
			
		||||
      config_unref (prev_config);
 | 
			
		||||
 | 
			
		||||
      /* After this, self->previous contains the rejected configuration.
 | 
			
		||||
       * Since it was rejected, nuke it. */
 | 
			
		||||
      g_clear_pointer (&self->previous, (GDestroyNotify) config_unref);
 | 
			
		||||
 | 
			
		||||
      if (ok)
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (!meta_monitor_config_apply_stored (self, manager))
 | 
			
		||||
    meta_monitor_config_make_default (self, manager);
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      if (!meta_monitor_config_apply_stored (self, manager))
 | 
			
		||||
        meta_monitor_config_make_default (self, manager);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -1704,8 +1598,7 @@ meta_monitor_config_save (MetaMonitorConfig *self)
 | 
			
		||||
                                      "      <reflect_x>%s</reflect_x>\n"
 | 
			
		||||
                                      "      <reflect_y>no</reflect_y>\n"
 | 
			
		||||
                                      "      <primary>%s</primary>\n"
 | 
			
		||||
                                      "      <presentation>%s</presentation>\n"
 | 
			
		||||
                                      "      <underscanning>%s</underscanning>\n",
 | 
			
		||||
                                      "      <presentation>%s</presentation>\n",
 | 
			
		||||
                                      output->rect.width,
 | 
			
		||||
                                      output->rect.height,
 | 
			
		||||
                                      refresh_rate,
 | 
			
		||||
@@ -1714,8 +1607,7 @@ meta_monitor_config_save (MetaMonitorConfig *self)
 | 
			
		||||
                                      rotation_map[output->transform & 0x3],
 | 
			
		||||
                                      output->transform >= META_MONITOR_TRANSFORM_FLIPPED ? "yes" : "no",
 | 
			
		||||
                                      output->is_primary ? "yes" : "no",
 | 
			
		||||
                                      output->is_presentation ? "yes" : "no",
 | 
			
		||||
                                      output->is_underscanning ? "yes" : "no");
 | 
			
		||||
                                      output->is_presentation ? "yes" : "no");
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
          g_string_append (buffer, "    </output>\n");
 | 
			
		||||
@@ -1730,7 +1622,7 @@ meta_monitor_config_save (MetaMonitorConfig *self)
 | 
			
		||||
  closure->config = g_object_ref (self);
 | 
			
		||||
  closure->buffer = buffer;
 | 
			
		||||
 | 
			
		||||
  g_file_replace_contents_async (self->user_file,
 | 
			
		||||
  g_file_replace_contents_async (self->file,
 | 
			
		||||
                                 buffer->str, buffer->len,
 | 
			
		||||
                                 NULL, /* etag */
 | 
			
		||||
                                 TRUE,
 | 
			
		||||
@@ -1848,7 +1740,7 @@ crtc_assignment_assign (CrtcAssignment       *assign,
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      info = g_slice_new0 (MetaCRTCInfo);
 | 
			
		||||
      MetaCRTCInfo *info = g_slice_new0 (MetaCRTCInfo);
 | 
			
		||||
 | 
			
		||||
      info->crtc = crtc;
 | 
			
		||||
      info->mode = mode;
 | 
			
		||||
@@ -1922,6 +1814,7 @@ real_assign_crtcs (CrtcAssignment     *assignment,
 | 
			
		||||
  MetaOutputKey *output_key;
 | 
			
		||||
  MetaOutputConfig *output_config;
 | 
			
		||||
  unsigned int i;
 | 
			
		||||
  gboolean success;
 | 
			
		||||
 | 
			
		||||
  if (output_num == assignment->config->n_outputs)
 | 
			
		||||
    return TRUE;
 | 
			
		||||
@@ -1938,6 +1831,8 @@ real_assign_crtcs (CrtcAssignment     *assignment,
 | 
			
		||||
                                      &crtcs, &n_crtcs,
 | 
			
		||||
                                      &outputs, &n_outputs);
 | 
			
		||||
 | 
			
		||||
  success = FALSE;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < n_crtcs; i++)
 | 
			
		||||
    {
 | 
			
		||||
      MetaCRTC *crtc = &crtcs[i];
 | 
			
		||||
@@ -1984,7 +1879,10 @@ real_assign_crtcs (CrtcAssignment     *assignment,
 | 
			
		||||
                                              output))
 | 
			
		||||
                    {
 | 
			
		||||
                      if (real_assign_crtcs (assignment, output_num + 1))
 | 
			
		||||
                        return TRUE;
 | 
			
		||||
                        {
 | 
			
		||||
                          success = TRUE;
 | 
			
		||||
                          goto out;
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                      crtc_assignment_unassign (assignment, crtc, output);
 | 
			
		||||
                    }
 | 
			
		||||
@@ -1993,7 +1891,8 @@ real_assign_crtcs (CrtcAssignment     *assignment,
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  return FALSE;
 | 
			
		||||
out:
 | 
			
		||||
  return success;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
@@ -2031,11 +1930,7 @@ meta_monitor_config_assign_crtcs (MetaConfiguration  *config,
 | 
			
		||||
 | 
			
		||||
  all_outputs = meta_monitor_manager_get_outputs (manager,
 | 
			
		||||
                                                  &n_outputs);
 | 
			
		||||
  if (n_outputs != config->n_outputs)
 | 
			
		||||
    {
 | 
			
		||||
      g_hash_table_destroy (assignment.info);
 | 
			
		||||
      return FALSE;
 | 
			
		||||
    }
 | 
			
		||||
  g_assert (n_outputs == config->n_outputs);
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < n_outputs; i++)
 | 
			
		||||
    {
 | 
			
		||||
@@ -2046,7 +1941,6 @@ meta_monitor_config_assign_crtcs (MetaConfiguration  *config,
 | 
			
		||||
                                                &config->keys[i]);
 | 
			
		||||
      output_info->is_primary = output_config->is_primary;
 | 
			
		||||
      output_info->is_presentation = output_config->is_presentation;
 | 
			
		||||
      output_info->is_underscanning = output_config->is_underscanning;
 | 
			
		||||
 | 
			
		||||
      g_ptr_array_add (outputs, output_info);
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -49,6 +49,4 @@ void               meta_monitor_config_make_persistent (MetaMonitorConfig *confi
 | 
			
		||||
void               meta_monitor_config_restore_previous (MetaMonitorConfig  *config,
 | 
			
		||||
                                                         MetaMonitorManager *manager);
 | 
			
		||||
 | 
			
		||||
gboolean           meta_monitor_config_get_is_builtin_display_on (MetaMonitorConfig *config);
 | 
			
		||||
 | 
			
		||||
#endif /* META_MONITOR_CONFIG_H */
 | 
			
		||||
 
 | 
			
		||||
@@ -27,10 +27,6 @@
 | 
			
		||||
 | 
			
		||||
#include "meta-monitor-manager-dummy.h"
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
 | 
			
		||||
#include <meta/util.h>
 | 
			
		||||
 | 
			
		||||
#define ALL_TRANSFORMS ((1 << (META_MONITOR_TRANSFORM_FLIPPED_270 + 1)) - 1)
 | 
			
		||||
 | 
			
		||||
struct _MetaMonitorManagerDummy
 | 
			
		||||
@@ -48,69 +44,9 @@ G_DEFINE_TYPE (MetaMonitorManagerDummy, meta_monitor_manager_dummy, META_TYPE_MO
 | 
			
		||||
static void
 | 
			
		||||
meta_monitor_manager_dummy_read_current (MetaMonitorManager *manager)
 | 
			
		||||
{
 | 
			
		||||
  unsigned int num_monitors = 1;
 | 
			
		||||
  int *monitor_scales = NULL;
 | 
			
		||||
  const char *num_monitors_str;
 | 
			
		||||
  const char *monitor_scales_str;
 | 
			
		||||
  unsigned int i;
 | 
			
		||||
  int current_x = 0;
 | 
			
		||||
 | 
			
		||||
  /* To control what monitor configuration is generated, there are two available
 | 
			
		||||
   * environmental variables that can be used:
 | 
			
		||||
   *
 | 
			
		||||
   * MUTTER_DEBUG_NUM_DUMMY_MONITORS
 | 
			
		||||
   *
 | 
			
		||||
   * Specifies the number of dummy monitors to include in the stage. Every
 | 
			
		||||
   * monitor is 1024x786 pixels and they are placed on a horizontal row.
 | 
			
		||||
   *
 | 
			
		||||
   * MUTTER_DEBUG_DUMMY_MONITOR_SCALES
 | 
			
		||||
   *
 | 
			
		||||
   * A comma separated list that specifies the scales of the dummy monitors.
 | 
			
		||||
   *
 | 
			
		||||
   * For example the following configuration results in two monitors, where the
 | 
			
		||||
   * first one has the monitor scale 1, and the other the monitor scale 2.
 | 
			
		||||
   *
 | 
			
		||||
   * MUTTER_DEBUG_NUM_DUMMY_MONITORS=2
 | 
			
		||||
   * MUTTER_DEBUG_DUMMY_MONITOR_SCALES=1,2
 | 
			
		||||
   */
 | 
			
		||||
  num_monitors_str = getenv ("MUTTER_DEBUG_NUM_DUMMY_MONITORS");
 | 
			
		||||
  if (num_monitors_str)
 | 
			
		||||
    {
 | 
			
		||||
      num_monitors = g_ascii_strtoll (num_monitors_str, NULL, 10);
 | 
			
		||||
      if (num_monitors <= 0)
 | 
			
		||||
        {
 | 
			
		||||
          meta_warning ("Invalid number of dummy monitors");
 | 
			
		||||
          num_monitors = 1;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  monitor_scales = g_newa (int, num_monitors);
 | 
			
		||||
  for (i = 0; i < num_monitors; i++)
 | 
			
		||||
    monitor_scales[i] = 1;
 | 
			
		||||
 | 
			
		||||
  monitor_scales_str = getenv ("MUTTER_DEBUG_DUMMY_MONITOR_SCALES");
 | 
			
		||||
  if (monitor_scales_str)
 | 
			
		||||
    {
 | 
			
		||||
      gchar **scales_str_list;
 | 
			
		||||
 | 
			
		||||
      scales_str_list = g_strsplit (monitor_scales_str, ",", -1);
 | 
			
		||||
      if (g_strv_length (scales_str_list) != num_monitors)
 | 
			
		||||
        meta_warning ("Number of specified monitor scales differ from number "
 | 
			
		||||
                      "of monitors (defaults to 1).\n");
 | 
			
		||||
      for (i = 0; i < num_monitors && scales_str_list[i]; i++)
 | 
			
		||||
        {
 | 
			
		||||
          int scale = g_ascii_strtoll (scales_str_list[i], NULL, 10);
 | 
			
		||||
          if (scale == 1 || scale == 2)
 | 
			
		||||
            monitor_scales[i] = scale;
 | 
			
		||||
          else
 | 
			
		||||
            meta_warning ("Invalid dummy monitor scale");
 | 
			
		||||
        }
 | 
			
		||||
      g_strfreev (scales_str_list);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  manager->max_screen_width = 65535;
 | 
			
		||||
  manager->max_screen_height = 65535;
 | 
			
		||||
  manager->screen_width = 1024 * num_monitors;
 | 
			
		||||
  manager->screen_width = 1024;
 | 
			
		||||
  manager->screen_height = 768;
 | 
			
		||||
 | 
			
		||||
  manager->modes = g_new0 (MetaMonitorMode, 1);
 | 
			
		||||
@@ -121,52 +57,46 @@ meta_monitor_manager_dummy_read_current (MetaMonitorManager *manager)
 | 
			
		||||
  manager->modes[0].height = 768;
 | 
			
		||||
  manager->modes[0].refresh_rate = 60.0;
 | 
			
		||||
 | 
			
		||||
  manager->crtcs = g_new0 (MetaCRTC, num_monitors);
 | 
			
		||||
  manager->n_crtcs = num_monitors;
 | 
			
		||||
  manager->outputs = g_new0 (MetaOutput, num_monitors);
 | 
			
		||||
  manager->n_outputs = num_monitors;
 | 
			
		||||
  manager->crtcs = g_new0 (MetaCRTC, 1);
 | 
			
		||||
  manager->n_crtcs = 1;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < num_monitors; i++)
 | 
			
		||||
    {
 | 
			
		||||
      manager->crtcs[i].crtc_id = i + 1;
 | 
			
		||||
      manager->crtcs[i].rect.x = current_x;
 | 
			
		||||
      manager->crtcs[i].rect.y = 0;
 | 
			
		||||
      manager->crtcs[i].rect.width = manager->modes[0].width;
 | 
			
		||||
      manager->crtcs[i].rect.height = manager->modes[0].height;
 | 
			
		||||
      manager->crtcs[i].current_mode = &manager->modes[0];
 | 
			
		||||
      manager->crtcs[i].transform = META_MONITOR_TRANSFORM_NORMAL;
 | 
			
		||||
      manager->crtcs[i].all_transforms = ALL_TRANSFORMS;
 | 
			
		||||
      manager->crtcs[i].is_dirty = FALSE;
 | 
			
		||||
      manager->crtcs[i].logical_monitor = NULL;
 | 
			
		||||
  manager->crtcs[0].crtc_id = 1;
 | 
			
		||||
  manager->crtcs[0].rect.x = 0;
 | 
			
		||||
  manager->crtcs[0].rect.y = 0;
 | 
			
		||||
  manager->crtcs[0].rect.width = manager->modes[0].width;
 | 
			
		||||
  manager->crtcs[0].rect.height = manager->modes[0].height;
 | 
			
		||||
  manager->crtcs[0].current_mode = &manager->modes[0];
 | 
			
		||||
  manager->crtcs[0].transform = META_MONITOR_TRANSFORM_NORMAL;
 | 
			
		||||
  manager->crtcs[0].all_transforms = ALL_TRANSFORMS;
 | 
			
		||||
  manager->crtcs[0].is_dirty = FALSE;
 | 
			
		||||
  manager->crtcs[0].logical_monitor = NULL;
 | 
			
		||||
 | 
			
		||||
      current_x += manager->crtcs[i].rect.width;
 | 
			
		||||
  manager->outputs = g_new0 (MetaOutput, 1);
 | 
			
		||||
  manager->n_outputs = 1;
 | 
			
		||||
 | 
			
		||||
      manager->outputs[i].crtc = &manager->crtcs[i];
 | 
			
		||||
      manager->outputs[i].winsys_id = i + 1;
 | 
			
		||||
      manager->outputs[i].name = g_strdup_printf ("LVDS%d", i + 1);
 | 
			
		||||
      manager->outputs[i].vendor = g_strdup ("MetaProducts Inc.");
 | 
			
		||||
      manager->outputs[i].product = g_strdup ("unknown");
 | 
			
		||||
      manager->outputs[i].serial = g_strdup ("0xC0FFEE");
 | 
			
		||||
      manager->outputs[i].suggested_x = -1;
 | 
			
		||||
      manager->outputs[i].suggested_y = -1;
 | 
			
		||||
      manager->outputs[i].width_mm = 222;
 | 
			
		||||
      manager->outputs[i].height_mm = 125;
 | 
			
		||||
      manager->outputs[i].subpixel_order = COGL_SUBPIXEL_ORDER_UNKNOWN;
 | 
			
		||||
      manager->outputs[i].preferred_mode = &manager->modes[0];
 | 
			
		||||
      manager->outputs[i].n_modes = 1;
 | 
			
		||||
      manager->outputs[i].modes = g_new0 (MetaMonitorMode *, 1);
 | 
			
		||||
      manager->outputs[i].modes[0] = &manager->modes[0];
 | 
			
		||||
      manager->outputs[i].n_possible_crtcs = 1;
 | 
			
		||||
      manager->outputs[i].possible_crtcs = g_new0 (MetaCRTC *, 1);
 | 
			
		||||
      manager->outputs[i].possible_crtcs[0] = &manager->crtcs[i];
 | 
			
		||||
      manager->outputs[i].n_possible_clones = 0;
 | 
			
		||||
      manager->outputs[i].possible_clones = g_new0 (MetaOutput *, 0);
 | 
			
		||||
      manager->outputs[i].backlight = -1;
 | 
			
		||||
      manager->outputs[i].backlight_min = 0;
 | 
			
		||||
      manager->outputs[i].backlight_max = 0;
 | 
			
		||||
      manager->outputs[i].connector_type = META_CONNECTOR_TYPE_LVDS;
 | 
			
		||||
      manager->outputs[i].scale = monitor_scales[i];
 | 
			
		||||
    }
 | 
			
		||||
  manager->outputs[0].crtc = &manager->crtcs[0];
 | 
			
		||||
  manager->outputs[0].winsys_id = 1;
 | 
			
		||||
  manager->outputs[0].name = g_strdup ("LVDS");
 | 
			
		||||
  manager->outputs[0].vendor = g_strdup ("MetaProducts Inc.");
 | 
			
		||||
  manager->outputs[0].product = g_strdup ("unknown");
 | 
			
		||||
  manager->outputs[0].serial = g_strdup ("0xC0FFEE");
 | 
			
		||||
  manager->outputs[0].width_mm = 222;
 | 
			
		||||
  manager->outputs[0].height_mm = 125;
 | 
			
		||||
  manager->outputs[0].subpixel_order = COGL_SUBPIXEL_ORDER_UNKNOWN;
 | 
			
		||||
  manager->outputs[0].preferred_mode = &manager->modes[0];
 | 
			
		||||
  manager->outputs[0].n_modes = 1;
 | 
			
		||||
  manager->outputs[0].modes = g_new0 (MetaMonitorMode *, 1);
 | 
			
		||||
  manager->outputs[0].modes[0] = &manager->modes[0];
 | 
			
		||||
  manager->outputs[0].n_possible_crtcs = 1;
 | 
			
		||||
  manager->outputs[0].possible_crtcs = g_new0 (MetaCRTC *, 1);
 | 
			
		||||
  manager->outputs[0].possible_crtcs[0] = &manager->crtcs[0];
 | 
			
		||||
  manager->outputs[0].n_possible_clones = 0;
 | 
			
		||||
  manager->outputs[0].possible_clones = g_new0 (MetaOutput *, 0);
 | 
			
		||||
  manager->outputs[0].backlight = -1;
 | 
			
		||||
  manager->outputs[0].backlight_min = 0;
 | 
			
		||||
  manager->outputs[0].backlight_max = 0;
 | 
			
		||||
  manager->outputs[0].connector_type = META_CONNECTOR_TYPE_LVDS;
 | 
			
		||||
  manager->outputs[0].scale = 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -197,7 +127,7 @@ meta_monitor_manager_dummy_apply_config (MetaMonitorManager *manager,
 | 
			
		||||
        {
 | 
			
		||||
          MetaMonitorMode *mode;
 | 
			
		||||
          MetaOutput *output;
 | 
			
		||||
          unsigned int j;
 | 
			
		||||
          int i, n_outputs;
 | 
			
		||||
          int width, height;
 | 
			
		||||
 | 
			
		||||
          mode = crtc_info->mode;
 | 
			
		||||
@@ -223,9 +153,10 @@ meta_monitor_manager_dummy_apply_config (MetaMonitorManager *manager,
 | 
			
		||||
          screen_width = MAX (screen_width, crtc_info->x + width);
 | 
			
		||||
          screen_height = MAX (screen_height, crtc_info->y + height);
 | 
			
		||||
 | 
			
		||||
          for (j = 0; j < crtc_info->outputs->len; j++)
 | 
			
		||||
          n_outputs = crtc_info->outputs->len;
 | 
			
		||||
          for (i = 0; i < n_outputs; i++)
 | 
			
		||||
            {
 | 
			
		||||
              output = ((MetaOutput**)crtc_info->outputs->pdata)[j];
 | 
			
		||||
              output = ((MetaOutput**)crtc_info->outputs->pdata)[i];
 | 
			
		||||
 | 
			
		||||
              output->is_dirty = TRUE;
 | 
			
		||||
              output->crtc = crtc;
 | 
			
		||||
 
 | 
			
		||||
@@ -56,7 +56,6 @@ typedef struct _MetaMonitorMode MetaMonitorMode;
 | 
			
		||||
typedef struct _MetaMonitorInfo MetaMonitorInfo;
 | 
			
		||||
typedef struct _MetaCRTCInfo MetaCRTCInfo;
 | 
			
		||||
typedef struct _MetaOutputInfo MetaOutputInfo;
 | 
			
		||||
typedef struct _MetaTileInfo MetaTileInfo;
 | 
			
		||||
 | 
			
		||||
typedef enum {
 | 
			
		||||
  META_MONITOR_TRANSFORM_NORMAL,
 | 
			
		||||
@@ -90,17 +89,6 @@ typedef enum {
 | 
			
		||||
  META_CONNECTOR_TYPE_DSI = 16,
 | 
			
		||||
} MetaConnectorType;
 | 
			
		||||
 | 
			
		||||
struct _MetaTileInfo {
 | 
			
		||||
  guint32 group_id;
 | 
			
		||||
  guint32 flags;
 | 
			
		||||
  guint32 max_h_tiles;
 | 
			
		||||
  guint32 max_v_tiles;
 | 
			
		||||
  guint32 loc_h_tile;
 | 
			
		||||
  guint32 loc_v_tile;
 | 
			
		||||
  guint32 tile_w;
 | 
			
		||||
  guint32 tile_h;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _MetaOutput
 | 
			
		||||
{
 | 
			
		||||
  /* The CRTC driving this output, NULL if the output is not enabled */
 | 
			
		||||
@@ -144,8 +132,6 @@ struct _MetaOutput
 | 
			
		||||
  */
 | 
			
		||||
  gboolean is_primary;
 | 
			
		||||
  gboolean is_presentation;
 | 
			
		||||
  gboolean is_underscanning;
 | 
			
		||||
  gboolean supports_underscanning;
 | 
			
		||||
 | 
			
		||||
  gpointer driver_private;
 | 
			
		||||
  GDestroyNotify driver_notify;
 | 
			
		||||
@@ -154,8 +140,6 @@ struct _MetaOutput
 | 
			
		||||
  gboolean hotplug_mode_update;
 | 
			
		||||
  gint suggested_x;
 | 
			
		||||
  gint suggested_y;
 | 
			
		||||
 | 
			
		||||
  MetaTileInfo tile_info;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _MetaCRTC
 | 
			
		||||
@@ -174,11 +158,7 @@ struct _MetaCRTC
 | 
			
		||||
  /* Used when changing configuration */
 | 
			
		||||
  gboolean is_dirty;
 | 
			
		||||
 | 
			
		||||
  /* Used by cursor renderer backend */
 | 
			
		||||
  void *cursor_renderer_private;
 | 
			
		||||
 | 
			
		||||
  gpointer driver_private;
 | 
			
		||||
  GDestroyNotify driver_notify;
 | 
			
		||||
  MetaCursorReference *cursor;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _MetaMonitorMode
 | 
			
		||||
@@ -195,7 +175,6 @@ struct _MetaMonitorMode
 | 
			
		||||
  GDestroyNotify driver_notify;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define META_MAX_OUTPUTS_PER_MONITOR 4
 | 
			
		||||
/**
 | 
			
		||||
 * MetaMonitorInfo:
 | 
			
		||||
 *
 | 
			
		||||
@@ -211,14 +190,9 @@ struct _MetaMonitorInfo
 | 
			
		||||
  int number;
 | 
			
		||||
  int xinerama_index;
 | 
			
		||||
  MetaRectangle rect;
 | 
			
		||||
  /* for tiled monitors these are calculated, from untiled just copied */
 | 
			
		||||
  float refresh_rate;
 | 
			
		||||
  int width_mm;
 | 
			
		||||
  int height_mm;
 | 
			
		||||
  gboolean is_primary;
 | 
			
		||||
  gboolean is_presentation; /* XXX: not yet used */
 | 
			
		||||
  gboolean in_fullscreen;
 | 
			
		||||
  int scale;
 | 
			
		||||
 | 
			
		||||
  /* The primary or first output for this monitor, 0 if we can't figure out.
 | 
			
		||||
     It can be matched to a winsys_id of a MetaOutput.
 | 
			
		||||
@@ -229,12 +203,6 @@ struct _MetaMonitorInfo
 | 
			
		||||
     the primary one).
 | 
			
		||||
  */
 | 
			
		||||
  glong winsys_id;
 | 
			
		||||
 | 
			
		||||
  guint32 tile_group_id;
 | 
			
		||||
 | 
			
		||||
  int monitor_winsys_xid;
 | 
			
		||||
  int n_outputs;
 | 
			
		||||
  MetaOutput *outputs[META_MAX_OUTPUTS_PER_MONITOR];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
@@ -262,7 +230,6 @@ struct _MetaOutputInfo {
 | 
			
		||||
  MetaOutput  *output;
 | 
			
		||||
  gboolean     is_primary;
 | 
			
		||||
  gboolean     is_presentation;
 | 
			
		||||
  gboolean     is_underscanning;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define META_TYPE_MONITOR_MANAGER            (meta_monitor_manager_get_type ())
 | 
			
		||||
@@ -352,13 +319,6 @@ struct _MetaMonitorManagerClass
 | 
			
		||||
                          unsigned short     *,
 | 
			
		||||
                          unsigned short     *,
 | 
			
		||||
                          unsigned short     *);
 | 
			
		||||
 | 
			
		||||
  void (*add_monitor) (MetaMonitorManager *,
 | 
			
		||||
                       MetaMonitorInfo *);
 | 
			
		||||
 | 
			
		||||
  void (*delete_monitor) (MetaMonitorManager *,
 | 
			
		||||
                          int monitor_winsys_xid);
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void                meta_monitor_manager_rebuild_derived   (MetaMonitorManager *manager);
 | 
			
		||||
@@ -398,7 +358,6 @@ void                meta_monitor_manager_confirm_configuration (MetaMonitorManag
 | 
			
		||||
 | 
			
		||||
void               meta_output_parse_edid (MetaOutput *output,
 | 
			
		||||
                                           GBytes     *edid);
 | 
			
		||||
gboolean           meta_output_is_laptop  (MetaOutput *output);
 | 
			
		||||
 | 
			
		||||
void               meta_crtc_info_free   (MetaCRTCInfo   *info);
 | 
			
		||||
void               meta_output_info_free (MetaOutputInfo *info);
 | 
			
		||||
@@ -415,10 +374,6 @@ gint               meta_monitor_manager_get_monitor_at_point (MetaMonitorManager
 | 
			
		||||
                                                              gfloat              x,
 | 
			
		||||
                                                              gfloat              y);
 | 
			
		||||
 | 
			
		||||
void meta_monitor_manager_clear_output (MetaOutput *output);
 | 
			
		||||
void meta_monitor_manager_clear_mode (MetaMonitorMode *mode);
 | 
			
		||||
void meta_monitor_manager_clear_crtc (MetaCRTC *crtc);
 | 
			
		||||
 | 
			
		||||
/* Returns true if transform causes width and height to be inverted
 | 
			
		||||
   This is true for the odd transforms in the enum */
 | 
			
		||||
static inline gboolean
 | 
			
		||||
 
 | 
			
		||||
@@ -71,98 +71,6 @@ meta_monitor_manager_init (MetaMonitorManager *manager)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * rules for constructing a tiled monitor
 | 
			
		||||
 * 1. find a tile_group_id
 | 
			
		||||
 * 2. iterate over all outputs for that tile group id
 | 
			
		||||
 * 3. see if output has a crtc and if it is configured for the tile size
 | 
			
		||||
 * 4. calculate the total tile size
 | 
			
		||||
 * 5. set tile finished size
 | 
			
		||||
 * 6. check for more tile_group_id
 | 
			
		||||
*/
 | 
			
		||||
static void
 | 
			
		||||
construct_tile_monitor (MetaMonitorManager *manager,
 | 
			
		||||
                        GArray *monitor_infos,
 | 
			
		||||
                        guint32 tile_group_id)
 | 
			
		||||
{
 | 
			
		||||
  MetaMonitorInfo info;
 | 
			
		||||
  unsigned i;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < monitor_infos->len; i++)
 | 
			
		||||
    {
 | 
			
		||||
      MetaMonitorInfo *pinfo = &g_array_index (monitor_infos, MetaMonitorInfo, i);
 | 
			
		||||
 | 
			
		||||
      if (pinfo->tile_group_id == tile_group_id)
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* didn't find it */
 | 
			
		||||
  info.number = monitor_infos->len;
 | 
			
		||||
  info.tile_group_id = tile_group_id;
 | 
			
		||||
  info.is_presentation = FALSE;
 | 
			
		||||
  info.refresh_rate = 0.0;
 | 
			
		||||
  info.width_mm = 0;
 | 
			
		||||
  info.height_mm = 0;
 | 
			
		||||
  info.is_primary = FALSE;
 | 
			
		||||
  info.rect.x = INT_MAX;
 | 
			
		||||
  info.rect.y = INT_MAX;
 | 
			
		||||
  info.rect.width = 0;
 | 
			
		||||
  info.rect.height = 0;
 | 
			
		||||
  info.winsys_id = 0;
 | 
			
		||||
  info.n_outputs = 0;
 | 
			
		||||
  info.monitor_winsys_xid = 0;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < manager->n_outputs; i++)
 | 
			
		||||
    {
 | 
			
		||||
      MetaOutput *output = &manager->outputs[i];
 | 
			
		||||
 | 
			
		||||
      if (!output->tile_info.group_id)
 | 
			
		||||
        continue;
 | 
			
		||||
 | 
			
		||||
      if (output->tile_info.group_id != tile_group_id)
 | 
			
		||||
        continue;
 | 
			
		||||
 | 
			
		||||
      if (!output->crtc)
 | 
			
		||||
        continue;
 | 
			
		||||
 | 
			
		||||
      if (output->crtc->rect.width != (int)output->tile_info.tile_w ||
 | 
			
		||||
          output->crtc->rect.height != (int)output->tile_info.tile_h)
 | 
			
		||||
        continue;
 | 
			
		||||
 | 
			
		||||
      if (output->tile_info.loc_h_tile == 0 && output->tile_info.loc_v_tile == 0)
 | 
			
		||||
        {
 | 
			
		||||
          info.refresh_rate = output->crtc->current_mode->refresh_rate;
 | 
			
		||||
          info.width_mm = output->width_mm;
 | 
			
		||||
          info.height_mm = output->height_mm;
 | 
			
		||||
          info.winsys_id = output->winsys_id;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      /* hack */
 | 
			
		||||
      if (output->crtc->rect.x < info.rect.x)
 | 
			
		||||
        info.rect.x = output->crtc->rect.x;
 | 
			
		||||
      if (output->crtc->rect.y < info.rect.y)
 | 
			
		||||
        info.rect.y = output->crtc->rect.y;
 | 
			
		||||
 | 
			
		||||
      if (output->tile_info.loc_h_tile == 0)
 | 
			
		||||
        info.rect.height += output->tile_info.tile_h;
 | 
			
		||||
 | 
			
		||||
      if (output->tile_info.loc_v_tile == 0)
 | 
			
		||||
        info.rect.width += output->tile_info.tile_w;
 | 
			
		||||
 | 
			
		||||
      if (info.n_outputs > META_MAX_OUTPUTS_PER_MONITOR)
 | 
			
		||||
        continue;
 | 
			
		||||
 | 
			
		||||
      info.outputs[info.n_outputs++] = output;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* if we don't have a winsys id, i.e. we haven't found tile 0,0
 | 
			
		||||
     don't try and add this to the monitor infos */
 | 
			
		||||
  if (!info.winsys_id)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  g_array_append_val (monitor_infos, info);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * make_logical_config:
 | 
			
		||||
 *
 | 
			
		||||
@@ -173,26 +81,16 @@ construct_tile_monitor (MetaMonitorManager *manager,
 | 
			
		||||
static void
 | 
			
		||||
make_logical_config (MetaMonitorManager *manager)
 | 
			
		||||
{
 | 
			
		||||
  MetaMonitorManagerClass *manager_class = META_MONITOR_MANAGER_GET_CLASS (manager);
 | 
			
		||||
  GArray *monitor_infos;
 | 
			
		||||
  unsigned int i, j;
 | 
			
		||||
 | 
			
		||||
  monitor_infos = g_array_sized_new (FALSE, TRUE, sizeof (MetaMonitorInfo),
 | 
			
		||||
                                     manager->n_crtcs);
 | 
			
		||||
                                     manager->n_outputs);
 | 
			
		||||
 | 
			
		||||
  /* Walk the list of MetaCRTCs, and build a MetaMonitorInfo
 | 
			
		||||
     for each of them, unless they reference a rectangle that
 | 
			
		||||
     is already there.
 | 
			
		||||
  */
 | 
			
		||||
  /* for tiling we need to work out how many tiled outputs there are */
 | 
			
		||||
  for (i = 0; i < manager->n_outputs; i++)
 | 
			
		||||
    {
 | 
			
		||||
      MetaOutput *output = &manager->outputs[i];
 | 
			
		||||
 | 
			
		||||
      if (output->tile_info.group_id)
 | 
			
		||||
        construct_tile_monitor (manager, monitor_infos, output->tile_info.group_id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < manager->n_crtcs; i++)
 | 
			
		||||
    {
 | 
			
		||||
      MetaCRTC *crtc = &manager->crtcs[i];
 | 
			
		||||
@@ -204,8 +102,8 @@ make_logical_config (MetaMonitorManager *manager)
 | 
			
		||||
      for (j = 0; j < monitor_infos->len; j++)
 | 
			
		||||
        {
 | 
			
		||||
          MetaMonitorInfo *info = &g_array_index (monitor_infos, MetaMonitorInfo, j);
 | 
			
		||||
          if (meta_rectangle_contains_rect (&info->rect,
 | 
			
		||||
                                            &crtc->rect))
 | 
			
		||||
          if (meta_rectangle_equal (&crtc->rect,
 | 
			
		||||
                                    &info->rect))
 | 
			
		||||
            {
 | 
			
		||||
              crtc->logical_monitor = info;
 | 
			
		||||
              break;
 | 
			
		||||
@@ -217,10 +115,7 @@ make_logical_config (MetaMonitorManager *manager)
 | 
			
		||||
          MetaMonitorInfo info;
 | 
			
		||||
 | 
			
		||||
          info.number = monitor_infos->len;
 | 
			
		||||
          info.tile_group_id = 0;
 | 
			
		||||
          info.rect = crtc->rect;
 | 
			
		||||
          info.refresh_rate = crtc->current_mode->refresh_rate;
 | 
			
		||||
          info.scale = 1;
 | 
			
		||||
          info.is_primary = FALSE;
 | 
			
		||||
          /* This starts true because we want
 | 
			
		||||
             is_presentation only if all outputs are
 | 
			
		||||
@@ -230,8 +125,7 @@ make_logical_config (MetaMonitorManager *manager)
 | 
			
		||||
          info.is_presentation = TRUE;
 | 
			
		||||
          info.in_fullscreen = -1;
 | 
			
		||||
          info.winsys_id = 0;
 | 
			
		||||
          info.n_outputs = 0;
 | 
			
		||||
          info.monitor_winsys_xid = 0;
 | 
			
		||||
 | 
			
		||||
          g_array_append_val (monitor_infos, info);
 | 
			
		||||
 | 
			
		||||
          crtc->logical_monitor = &g_array_index (monitor_infos, MetaMonitorInfo,
 | 
			
		||||
@@ -253,9 +147,6 @@ make_logical_config (MetaMonitorManager *manager)
 | 
			
		||||
      if (output->crtc == NULL)
 | 
			
		||||
        continue;
 | 
			
		||||
 | 
			
		||||
      if (output->tile_info.group_id)
 | 
			
		||||
        continue;
 | 
			
		||||
 | 
			
		||||
      /* We must have a logical monitor on every CRTC at this point */
 | 
			
		||||
      g_assert (output->crtc->logical_monitor != NULL);
 | 
			
		||||
 | 
			
		||||
@@ -264,17 +155,8 @@ make_logical_config (MetaMonitorManager *manager)
 | 
			
		||||
      info->is_primary = info->is_primary || output->is_primary;
 | 
			
		||||
      info->is_presentation = info->is_presentation && output->is_presentation;
 | 
			
		||||
 | 
			
		||||
      info->width_mm = output->width_mm;
 | 
			
		||||
      info->height_mm = output->height_mm;
 | 
			
		||||
 | 
			
		||||
      info->outputs[0] = output;
 | 
			
		||||
      info->n_outputs = 1;
 | 
			
		||||
 | 
			
		||||
      if (output->is_primary || info->winsys_id == 0)
 | 
			
		||||
        {
 | 
			
		||||
          info->scale = output->scale;
 | 
			
		||||
          info->winsys_id = output->winsys_id;
 | 
			
		||||
        }
 | 
			
		||||
        info->winsys_id = output->winsys_id;
 | 
			
		||||
 | 
			
		||||
      if (info->is_primary)
 | 
			
		||||
        manager->primary_monitor_index = info->number;
 | 
			
		||||
@@ -282,10 +164,6 @@ make_logical_config (MetaMonitorManager *manager)
 | 
			
		||||
 | 
			
		||||
  manager->n_monitor_infos = monitor_infos->len;
 | 
			
		||||
  manager->monitor_infos = (void*)g_array_free (monitor_infos, FALSE);
 | 
			
		||||
 | 
			
		||||
  if (manager_class->add_monitor)
 | 
			
		||||
    for (i = 0; i < manager->n_monitor_infos; i++)
 | 
			
		||||
      manager_class->add_monitor (manager, &manager->monitor_infos[i]);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -346,23 +224,6 @@ meta_monitor_manager_constructed (GObject *object)
 | 
			
		||||
  manager->in_init = FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
meta_monitor_manager_clear_output (MetaOutput *output)
 | 
			
		||||
{
 | 
			
		||||
  g_free (output->name);
 | 
			
		||||
  g_free (output->vendor);
 | 
			
		||||
  g_free (output->product);
 | 
			
		||||
  g_free (output->serial);
 | 
			
		||||
  g_free (output->modes);
 | 
			
		||||
  g_free (output->possible_crtcs);
 | 
			
		||||
  g_free (output->possible_clones);
 | 
			
		||||
 | 
			
		||||
  if (output->driver_notify)
 | 
			
		||||
    output->driver_notify (output);
 | 
			
		||||
 | 
			
		||||
  memset (output, 0, sizeof (*output));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
meta_monitor_manager_free_output_array (MetaOutput *old_outputs,
 | 
			
		||||
                                        int         n_old_outputs)
 | 
			
		||||
@@ -370,22 +231,22 @@ meta_monitor_manager_free_output_array (MetaOutput *old_outputs,
 | 
			
		||||
  int i;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < n_old_outputs; i++)
 | 
			
		||||
    meta_monitor_manager_clear_output (&old_outputs[i]);
 | 
			
		||||
    {
 | 
			
		||||
      g_free (old_outputs[i].name);
 | 
			
		||||
      g_free (old_outputs[i].vendor);
 | 
			
		||||
      g_free (old_outputs[i].product);
 | 
			
		||||
      g_free (old_outputs[i].serial);
 | 
			
		||||
      g_free (old_outputs[i].modes);
 | 
			
		||||
      g_free (old_outputs[i].possible_crtcs);
 | 
			
		||||
      g_free (old_outputs[i].possible_clones);
 | 
			
		||||
 | 
			
		||||
      if (old_outputs[i].driver_notify)
 | 
			
		||||
        old_outputs[i].driver_notify (&old_outputs[i]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  g_free (old_outputs);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
meta_monitor_manager_clear_mode (MetaMonitorMode *mode)
 | 
			
		||||
{
 | 
			
		||||
  g_free (mode->name);
 | 
			
		||||
 | 
			
		||||
  if (mode->driver_notify)
 | 
			
		||||
    mode->driver_notify (mode);
 | 
			
		||||
 | 
			
		||||
  memset (mode, 0, sizeof (*mode));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
meta_monitor_manager_free_mode_array (MetaMonitorMode *old_modes,
 | 
			
		||||
                                      int              n_old_modes)
 | 
			
		||||
@@ -393,32 +254,16 @@ meta_monitor_manager_free_mode_array (MetaMonitorMode *old_modes,
 | 
			
		||||
  int i;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < n_old_modes; i++)
 | 
			
		||||
    meta_monitor_manager_clear_mode (&old_modes[i]);
 | 
			
		||||
    {
 | 
			
		||||
      g_free (old_modes[i].name);
 | 
			
		||||
 | 
			
		||||
      if (old_modes[i].driver_notify)
 | 
			
		||||
        old_modes[i].driver_notify (&old_modes[i]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  g_free (old_modes);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
meta_monitor_manager_clear_crtc (MetaCRTC *crtc)
 | 
			
		||||
{
 | 
			
		||||
  if (crtc->driver_notify)
 | 
			
		||||
    crtc->driver_notify (crtc);
 | 
			
		||||
 | 
			
		||||
  memset (crtc, 0, sizeof (*crtc));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
meta_monitor_manager_free_crtc_array (MetaCRTC *old_crtcs,
 | 
			
		||||
                                      int       n_old_crtcs)
 | 
			
		||||
{
 | 
			
		||||
  int i;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < n_old_crtcs; i++)
 | 
			
		||||
    meta_monitor_manager_clear_crtc (&old_crtcs[i]);
 | 
			
		||||
 | 
			
		||||
  g_free (old_crtcs);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
meta_monitor_manager_finalize (GObject *object)
 | 
			
		||||
{
 | 
			
		||||
@@ -426,8 +271,8 @@ meta_monitor_manager_finalize (GObject *object)
 | 
			
		||||
 | 
			
		||||
  meta_monitor_manager_free_output_array (manager->outputs, manager->n_outputs);
 | 
			
		||||
  meta_monitor_manager_free_mode_array (manager->modes, manager->n_modes);
 | 
			
		||||
  meta_monitor_manager_free_crtc_array (manager->crtcs, manager->n_crtcs);
 | 
			
		||||
  g_free (manager->monitor_infos);
 | 
			
		||||
  g_free (manager->crtcs);
 | 
			
		||||
 | 
			
		||||
  G_OBJECT_CLASS (meta_monitor_manager_parent_class)->finalize (object);
 | 
			
		||||
}
 | 
			
		||||
@@ -508,11 +353,19 @@ static char *
 | 
			
		||||
make_display_name (MetaMonitorManager *manager,
 | 
			
		||||
                   MetaOutput         *output)
 | 
			
		||||
{
 | 
			
		||||
  g_autofree char *inches = NULL;
 | 
			
		||||
  g_autofree char *vendor_name = NULL;
 | 
			
		||||
  char *inches = NULL;
 | 
			
		||||
  char *vendor_name = NULL;
 | 
			
		||||
  char *ret;
 | 
			
		||||
 | 
			
		||||
  if (meta_output_is_laptop (output))
 | 
			
		||||
      return g_strdup (_("Built-in display"));
 | 
			
		||||
  switch (output->connector_type)
 | 
			
		||||
    {
 | 
			
		||||
    case META_CONNECTOR_TYPE_LVDS:
 | 
			
		||||
    case META_CONNECTOR_TYPE_eDP:
 | 
			
		||||
      ret = g_strdup (_("Built-in display"));
 | 
			
		||||
      goto out;
 | 
			
		||||
    default:
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (output->width_mm > 0 && output->height_mm > 0)
 | 
			
		||||
    {
 | 
			
		||||
@@ -545,12 +398,18 @@ make_display_name (MetaMonitorManager *manager,
 | 
			
		||||
      /* TRANSLATORS: this is a monitor vendor name, followed by a
 | 
			
		||||
       * size in inches, like 'Dell 15"'
 | 
			
		||||
       */
 | 
			
		||||
      return g_strdup_printf (_("%s %s"), vendor_name, inches);
 | 
			
		||||
      ret = g_strdup_printf (_("%s %s"), vendor_name, inches);
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      return g_strdup (vendor_name);
 | 
			
		||||
      ret = g_strdup (vendor_name);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 out:
 | 
			
		||||
  g_free (inches);
 | 
			
		||||
  g_free (vendor_name);
 | 
			
		||||
 | 
			
		||||
  return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const char *
 | 
			
		||||
@@ -661,10 +520,6 @@ meta_monitor_manager_handle_get_resources (MetaDBusDisplayConfig *skeleton,
 | 
			
		||||
                             g_variant_new_boolean (output->is_presentation));
 | 
			
		||||
      g_variant_builder_add (&properties, "{sv}", "connector-type",
 | 
			
		||||
                             g_variant_new_string (get_connector_type_name (output->connector_type)));
 | 
			
		||||
      g_variant_builder_add (&properties, "{sv}", "underscanning",
 | 
			
		||||
                             g_variant_new_boolean (output->is_underscanning));
 | 
			
		||||
      g_variant_builder_add (&properties, "{sv}", "supports-underscanning",
 | 
			
		||||
                             g_variant_new_boolean (output->supports_underscanning));
 | 
			
		||||
 | 
			
		||||
      edid_file = manager_class->get_edid_file (manager, output);
 | 
			
		||||
      if (edid_file)
 | 
			
		||||
@@ -685,20 +540,6 @@ meta_monitor_manager_handle_get_resources (MetaDBusDisplayConfig *skeleton,
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      if (output->tile_info.group_id)
 | 
			
		||||
        {
 | 
			
		||||
          g_variant_builder_add (&properties, "{sv}", "tile",
 | 
			
		||||
                                 g_variant_new ("(uuuuuuuu)",
 | 
			
		||||
                                                output->tile_info.group_id,
 | 
			
		||||
                                                output->tile_info.flags,
 | 
			
		||||
                                                output->tile_info.max_h_tiles,
 | 
			
		||||
                                                output->tile_info.max_v_tiles,
 | 
			
		||||
                                                output->tile_info.loc_h_tile,
 | 
			
		||||
                                                output->tile_info.loc_v_tile,
 | 
			
		||||
                                                output->tile_info.tile_w,
 | 
			
		||||
                                                output->tile_info.tile_h));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      g_variant_builder_add (&output_builder, "(uxiausauaua{sv})",
 | 
			
		||||
                             i, /* ID */
 | 
			
		||||
                             (gint64)output->winsys_id,
 | 
			
		||||
@@ -896,7 +737,8 @@ meta_monitor_manager_handle_apply_configuration  (MetaDBusDisplayConfig *skeleto
 | 
			
		||||
          crtc_info->y = 0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      if (transform > META_MONITOR_TRANSFORM_FLIPPED_270 ||
 | 
			
		||||
      if (transform < META_MONITOR_TRANSFORM_NORMAL ||
 | 
			
		||||
          transform > META_MONITOR_TRANSFORM_FLIPPED_270 ||
 | 
			
		||||
          ((crtc->all_transforms & (1 << transform)) == 0))
 | 
			
		||||
        {
 | 
			
		||||
          g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
 | 
			
		||||
@@ -966,7 +808,7 @@ meta_monitor_manager_handle_apply_configuration  (MetaDBusDisplayConfig *skeleto
 | 
			
		||||
  while (g_variant_iter_loop (&output_iter, "(u@a{sv})", &output_index, &properties))
 | 
			
		||||
    {
 | 
			
		||||
      MetaOutputInfo *output_info;
 | 
			
		||||
      gboolean primary, presentation, underscanning;
 | 
			
		||||
      gboolean primary, presentation;
 | 
			
		||||
 | 
			
		||||
      if (output_index >= manager->n_outputs)
 | 
			
		||||
        {
 | 
			
		||||
@@ -985,9 +827,6 @@ meta_monitor_manager_handle_apply_configuration  (MetaDBusDisplayConfig *skeleto
 | 
			
		||||
      if (g_variant_lookup (properties, "presentation", "b", &presentation))
 | 
			
		||||
        output_info->is_presentation = presentation;
 | 
			
		||||
 | 
			
		||||
      if (g_variant_lookup (properties, "underscanning", "b", &underscanning))
 | 
			
		||||
        output_info->is_underscanning = underscanning;
 | 
			
		||||
 | 
			
		||||
      g_ptr_array_add (output_infos, output_info);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -1355,58 +1194,37 @@ meta_monitor_manager_read_current_config (MetaMonitorManager *manager)
 | 
			
		||||
  MetaOutput *old_outputs;
 | 
			
		||||
  MetaCRTC *old_crtcs;
 | 
			
		||||
  MetaMonitorMode *old_modes;
 | 
			
		||||
  unsigned int n_old_outputs, n_old_crtcs, n_old_modes;
 | 
			
		||||
  unsigned int n_old_outputs, n_old_modes;
 | 
			
		||||
 | 
			
		||||
  /* Some implementations of read_current use the existing information
 | 
			
		||||
   * we have available, so don't free the old configuration until after
 | 
			
		||||
   * read_current finishes. */
 | 
			
		||||
  old_outputs = manager->outputs;
 | 
			
		||||
  n_old_outputs = manager->n_outputs;
 | 
			
		||||
  old_crtcs = manager->crtcs;
 | 
			
		||||
  n_old_crtcs = manager->n_crtcs;
 | 
			
		||||
  old_modes = manager->modes;
 | 
			
		||||
  n_old_modes = manager->n_modes;
 | 
			
		||||
  old_crtcs = manager->crtcs;
 | 
			
		||||
 | 
			
		||||
  manager->serial++;
 | 
			
		||||
  META_MONITOR_MANAGER_GET_CLASS (manager)->read_current (manager);
 | 
			
		||||
 | 
			
		||||
  meta_monitor_manager_free_output_array (old_outputs, n_old_outputs);
 | 
			
		||||
  meta_monitor_manager_free_mode_array (old_modes, n_old_modes);
 | 
			
		||||
  meta_monitor_manager_free_crtc_array (old_crtcs, n_old_crtcs);
 | 
			
		||||
  g_free (old_crtcs);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
meta_monitor_manager_rebuild_derived (MetaMonitorManager *manager)
 | 
			
		||||
{
 | 
			
		||||
  MetaMonitorManagerClass *manager_class = META_MONITOR_MANAGER_GET_CLASS (manager);
 | 
			
		||||
  MetaMonitorInfo *old_monitor_infos;
 | 
			
		||||
  unsigned old_n_monitor_infos;
 | 
			
		||||
  unsigned i, j;
 | 
			
		||||
 | 
			
		||||
  old_monitor_infos = manager->monitor_infos;
 | 
			
		||||
  old_n_monitor_infos = manager->n_monitor_infos;
 | 
			
		||||
 | 
			
		||||
  if (manager->in_init)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  make_logical_config (manager);
 | 
			
		||||
 | 
			
		||||
  if (manager_class->delete_monitor)
 | 
			
		||||
    {
 | 
			
		||||
      for (i = 0; i < old_n_monitor_infos; i++)
 | 
			
		||||
        {
 | 
			
		||||
          gboolean delete_mon = TRUE;
 | 
			
		||||
          for (j = 0; j < manager->n_monitor_infos; j++)
 | 
			
		||||
            {
 | 
			
		||||
              if (manager->monitor_infos[j].monitor_winsys_xid == old_monitor_infos[i].monitor_winsys_xid)
 | 
			
		||||
                {
 | 
			
		||||
                  delete_mon = FALSE;
 | 
			
		||||
                  break;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
          if (delete_mon)
 | 
			
		||||
            manager_class->delete_monitor (manager, old_monitor_infos[i].monitor_winsys_xid);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
  g_signal_emit_by_name (manager, "monitors-changed");
 | 
			
		||||
 | 
			
		||||
  g_free (old_monitor_infos);
 | 
			
		||||
@@ -1427,49 +1245,24 @@ meta_output_parse_edid (MetaOutput *meta_output,
 | 
			
		||||
  if (parsed_edid)
 | 
			
		||||
    {
 | 
			
		||||
      meta_output->vendor = g_strndup (parsed_edid->manufacturer_code, 4);
 | 
			
		||||
      if (!g_utf8_validate (meta_output->vendor, -1, NULL))
 | 
			
		||||
        g_clear_pointer (&meta_output->vendor, g_free);
 | 
			
		||||
 | 
			
		||||
      meta_output->product = g_strndup (parsed_edid->dsc_product_name, 14);
 | 
			
		||||
      if (!g_utf8_validate (meta_output->product, -1, NULL) ||
 | 
			
		||||
          meta_output->product[0] == '\0')
 | 
			
		||||
        {
 | 
			
		||||
          g_clear_pointer (&meta_output->product, g_free);
 | 
			
		||||
          meta_output->product = g_strdup_printf ("0x%04x", (unsigned) parsed_edid->product_code);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      meta_output->serial = g_strndup (parsed_edid->dsc_serial_number, 14);
 | 
			
		||||
      if (!g_utf8_validate (meta_output->serial, -1, NULL) ||
 | 
			
		||||
          meta_output->serial[0] == '\0')
 | 
			
		||||
        {
 | 
			
		||||
          g_clear_pointer (&meta_output->serial, g_free);
 | 
			
		||||
          meta_output->serial = g_strdup_printf ("0x%08x", parsed_edid->serial_number);
 | 
			
		||||
        }
 | 
			
		||||
      if (parsed_edid->dsc_product_name[0])
 | 
			
		||||
        meta_output->product = g_strndup (parsed_edid->dsc_product_name, 14);
 | 
			
		||||
      else
 | 
			
		||||
        meta_output->product = g_strdup_printf ("0x%04x", (unsigned) parsed_edid->product_code);
 | 
			
		||||
      if (parsed_edid->dsc_serial_number[0])
 | 
			
		||||
        meta_output->serial = g_strndup (parsed_edid->dsc_serial_number, 14);
 | 
			
		||||
      else
 | 
			
		||||
        meta_output->serial = g_strdup_printf ("0x%08x", parsed_edid->serial_number);
 | 
			
		||||
 | 
			
		||||
      g_free (parsed_edid);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 out:
 | 
			
		||||
  if (!meta_output->vendor)
 | 
			
		||||
    meta_output->vendor = g_strdup ("unknown");
 | 
			
		||||
  if (!meta_output->product)
 | 
			
		||||
    meta_output->product = g_strdup ("unknown");
 | 
			
		||||
  if (!meta_output->serial)
 | 
			
		||||
    meta_output->serial = g_strdup ("unknown");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gboolean
 | 
			
		||||
meta_output_is_laptop (MetaOutput *output)
 | 
			
		||||
{
 | 
			
		||||
  /* FIXME: extend with better heuristics */
 | 
			
		||||
  switch (output->connector_type)
 | 
			
		||||
    {
 | 
			
		||||
    case META_CONNECTOR_TYPE_eDP:
 | 
			
		||||
    case META_CONNECTOR_TYPE_LVDS:
 | 
			
		||||
    case META_CONNECTOR_TYPE_DSI:
 | 
			
		||||
      return TRUE;
 | 
			
		||||
    default:
 | 
			
		||||
      return FALSE;
 | 
			
		||||
      meta_output->vendor = g_strdup ("unknown");
 | 
			
		||||
      meta_output->product = g_strdup ("unknown");
 | 
			
		||||
      meta_output->serial = g_strdup ("unknown");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -1599,11 +1392,3 @@ meta_monitor_manager_get_monitor_at_point (MetaMonitorManager *manager,
 | 
			
		||||
 | 
			
		||||
  return -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gboolean
 | 
			
		||||
meta_monitor_manager_get_is_builtin_display_on (MetaMonitorManager *manager)
 | 
			
		||||
{
 | 
			
		||||
  g_return_val_if_fail (META_IS_MONITOR_MANAGER (manager), FALSE);
 | 
			
		||||
 | 
			
		||||
  return meta_monitor_config_get_is_builtin_display_on (manager->config);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,57 +0,0 @@
 | 
			
		||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2015 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:
 | 
			
		||||
 *     Jonas Ådahl <jadahl@gmail.com>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "config.h"
 | 
			
		||||
 | 
			
		||||
#include "backends/meta-pointer-constraint.h"
 | 
			
		||||
 | 
			
		||||
#include <glib-object.h>
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE (MetaPointerConstraint, meta_pointer_constraint, G_TYPE_OBJECT);
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
meta_pointer_constraint_init (MetaPointerConstraint *constraint)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
meta_pointer_constraint_class_init (MetaPointerConstraintClass *klass)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
meta_pointer_constraint_constrain (MetaPointerConstraint *constraint,
 | 
			
		||||
                                   ClutterInputDevice    *device,
 | 
			
		||||
                                   guint32                time,
 | 
			
		||||
                                   float                  prev_x,
 | 
			
		||||
                                   float                  prev_y,
 | 
			
		||||
                                   float                  *x,
 | 
			
		||||
                                   float                  *y)
 | 
			
		||||
{
 | 
			
		||||
  META_POINTER_CONSTRAINT_GET_CLASS (constraint)->constrain (constraint,
 | 
			
		||||
                                                             device,
 | 
			
		||||
                                                             time,
 | 
			
		||||
                                                             prev_x, prev_y,
 | 
			
		||||
                                                             x, y);
 | 
			
		||||
}
 | 
			
		||||
@@ -1,60 +0,0 @@
 | 
			
		||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2015 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:
 | 
			
		||||
 *     Jonas Ådahl <jadahl@gmail.com>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef META_POINTER_CONSTRAINT_H
 | 
			
		||||
#define META_POINTER_CONSTRAINT_H
 | 
			
		||||
 | 
			
		||||
#include <glib-object.h>
 | 
			
		||||
#include <clutter/clutter.h>
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
#define META_TYPE_POINTER_CONSTRAINT (meta_pointer_constraint_get_type ())
 | 
			
		||||
G_DECLARE_DERIVABLE_TYPE (MetaPointerConstraint, meta_pointer_constraint,
 | 
			
		||||
                          META, POINTER_CONSTRAINT, GObject);
 | 
			
		||||
 | 
			
		||||
struct _MetaPointerConstraintClass
 | 
			
		||||
{
 | 
			
		||||
  GObjectClass parent_class;
 | 
			
		||||
 | 
			
		||||
  void (*constrain) (MetaPointerConstraint *constraint,
 | 
			
		||||
                     ClutterInputDevice *device,
 | 
			
		||||
                     guint32 time,
 | 
			
		||||
                     float prev_x,
 | 
			
		||||
                     float prev_y,
 | 
			
		||||
                     float *x,
 | 
			
		||||
                     float *y);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void meta_pointer_constraint_constrain (MetaPointerConstraint *constraint,
 | 
			
		||||
                                        ClutterInputDevice    *device,
 | 
			
		||||
                                        guint32                time,
 | 
			
		||||
                                        float                  prev_x,
 | 
			
		||||
                                        float                  prev_y,
 | 
			
		||||
                                        float                 *x,
 | 
			
		||||
                                        float                 *y);
 | 
			
		||||
 | 
			
		||||
G_END_DECLS
 | 
			
		||||
 | 
			
		||||
#endif /* META_POINTER_CONSTRAINT_H */
 | 
			
		||||
@@ -24,6 +24,7 @@
 | 
			
		||||
 | 
			
		||||
#include "meta-stage.h"
 | 
			
		||||
 | 
			
		||||
#include "meta-cursor-private.h"
 | 
			
		||||
#include <meta/meta-backend.h>
 | 
			
		||||
#include <meta/util.h>
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -29,26 +29,20 @@
 | 
			
		||||
 | 
			
		||||
#include <meta/main.h>
 | 
			
		||||
#include <clutter/evdev/clutter-evdev.h>
 | 
			
		||||
#include <libupower-glib/upower.h>
 | 
			
		||||
 | 
			
		||||
#include "meta-barrier-native.h"
 | 
			
		||||
#include "meta-idle-monitor-native.h"
 | 
			
		||||
#include "meta-monitor-manager-kms.h"
 | 
			
		||||
#include "meta-cursor-renderer-native.h"
 | 
			
		||||
#include "meta-launcher.h"
 | 
			
		||||
#include "backends/meta-cursor-tracker-private.h"
 | 
			
		||||
#include "backends/meta-pointer-constraint.h"
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
 | 
			
		||||
struct _MetaBackendNativePrivate
 | 
			
		||||
{
 | 
			
		||||
  MetaLauncher *launcher;
 | 
			
		||||
 | 
			
		||||
  MetaBarrierManagerNative *barrier_manager;
 | 
			
		||||
  UpClient *up_client;
 | 
			
		||||
  guint sleep_signal_id;
 | 
			
		||||
  GCancellable *cancellable;
 | 
			
		||||
  GDBusConnection *system_bus;
 | 
			
		||||
 | 
			
		||||
  GSettings *keyboard_settings;
 | 
			
		||||
};
 | 
			
		||||
typedef struct _MetaBackendNativePrivate MetaBackendNativePrivate;
 | 
			
		||||
 | 
			
		||||
@@ -62,69 +56,9 @@ meta_backend_native_finalize (GObject *object)
 | 
			
		||||
 | 
			
		||||
  meta_launcher_free (priv->launcher);
 | 
			
		||||
 | 
			
		||||
  g_object_unref (priv->up_client);
 | 
			
		||||
  if (priv->sleep_signal_id)
 | 
			
		||||
    g_dbus_connection_signal_unsubscribe (priv->system_bus, priv->sleep_signal_id);
 | 
			
		||||
  g_cancellable_cancel (priv->cancellable);
 | 
			
		||||
  g_clear_object (&priv->cancellable);
 | 
			
		||||
  g_clear_object (&priv->system_bus);
 | 
			
		||||
 | 
			
		||||
  G_OBJECT_CLASS (meta_backend_native_parent_class)->finalize (object);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
prepare_for_sleep_cb (GDBusConnection *connection,
 | 
			
		||||
                      const gchar     *sender_name,
 | 
			
		||||
                      const gchar     *object_path,
 | 
			
		||||
                      const gchar     *interface_name,
 | 
			
		||||
                      const gchar     *signal_name,
 | 
			
		||||
                      GVariant        *parameters,
 | 
			
		||||
                      gpointer         user_data)
 | 
			
		||||
{
 | 
			
		||||
  gboolean suspending;
 | 
			
		||||
  g_variant_get (parameters, "(b)", &suspending);
 | 
			
		||||
  if (suspending)
 | 
			
		||||
    return;
 | 
			
		||||
  meta_idle_monitor_native_reset_idletime (meta_idle_monitor_get_core ());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
system_bus_gotten_cb (GObject      *object,
 | 
			
		||||
                      GAsyncResult *res,
 | 
			
		||||
                      gpointer      user_data)
 | 
			
		||||
{
 | 
			
		||||
  MetaBackendNativePrivate *priv;
 | 
			
		||||
  GDBusConnection *bus;
 | 
			
		||||
 | 
			
		||||
  bus = g_bus_get_finish (res, NULL);
 | 
			
		||||
  if (!bus)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  priv = meta_backend_native_get_instance_private (META_BACKEND_NATIVE (user_data));
 | 
			
		||||
  priv->system_bus = bus;
 | 
			
		||||
  priv->sleep_signal_id = g_dbus_connection_signal_subscribe (priv->system_bus,
 | 
			
		||||
                                                              "org.freedesktop.login1",
 | 
			
		||||
                                                              "org.freedesktop.login1.Manager",
 | 
			
		||||
                                                              "PrepareForSleep",
 | 
			
		||||
                                                              "/org/freedesktop/login1",
 | 
			
		||||
                                                              NULL,
 | 
			
		||||
                                                              G_DBUS_SIGNAL_FLAGS_NONE,
 | 
			
		||||
                                                              prepare_for_sleep_cb,
 | 
			
		||||
                                                              NULL,
 | 
			
		||||
                                                              NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
lid_is_closed_changed_cb (UpClient   *client,
 | 
			
		||||
                          GParamSpec *pspec,
 | 
			
		||||
                          gpointer    user_data)
 | 
			
		||||
{
 | 
			
		||||
  if (up_client_get_lid_is_closed (client))
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  meta_idle_monitor_native_reset_idletime (meta_idle_monitor_get_core ());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
constrain_to_barriers (ClutterInputDevice *device,
 | 
			
		||||
                       guint32             time,
 | 
			
		||||
@@ -141,24 +75,6 @@ constrain_to_barriers (ClutterInputDevice *device,
 | 
			
		||||
                                       new_x, new_y);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
constrain_to_client_constraint (ClutterInputDevice *device,
 | 
			
		||||
                                guint32             time,
 | 
			
		||||
                                float               prev_x,
 | 
			
		||||
                                float               prev_y,
 | 
			
		||||
                                float              *x,
 | 
			
		||||
                                float              *y)
 | 
			
		||||
{
 | 
			
		||||
  MetaBackend *backend = meta_get_backend ();
 | 
			
		||||
  MetaPointerConstraint *constraint = backend->client_pointer_constraint;
 | 
			
		||||
 | 
			
		||||
  if (!constraint)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  meta_pointer_constraint_constrain (constraint, device,
 | 
			
		||||
                                     time, prev_x, prev_y, x, y);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * The pointer constrain code is mostly a rip-off of the XRandR code from Xorg.
 | 
			
		||||
 * (from xserver/randr/rrcrtc.c, RRConstrainCursorHarder)
 | 
			
		||||
@@ -213,12 +129,10 @@ constrain_all_screen_monitors (ClutterInputDevice *device,
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
pointer_constrain_callback (ClutterInputDevice *device,
 | 
			
		||||
                            guint32             time,
 | 
			
		||||
                            float               prev_x,
 | 
			
		||||
                            float               prev_y,
 | 
			
		||||
                            float              *new_x,
 | 
			
		||||
                            float              *new_y,
 | 
			
		||||
                            gpointer            user_data)
 | 
			
		||||
			    guint32             time,
 | 
			
		||||
			    float              *new_x,
 | 
			
		||||
			    float              *new_y,
 | 
			
		||||
			    gpointer            user_data)
 | 
			
		||||
{
 | 
			
		||||
  MetaMonitorManager *monitor_manager;
 | 
			
		||||
  MetaMonitorInfo *monitors;
 | 
			
		||||
@@ -227,9 +141,6 @@ pointer_constrain_callback (ClutterInputDevice *device,
 | 
			
		||||
  /* Constrain to barriers */
 | 
			
		||||
  constrain_to_barriers (device, time, new_x, new_y);
 | 
			
		||||
 | 
			
		||||
  /* Constrain to pointer lock */
 | 
			
		||||
  constrain_to_client_constraint (device, time, prev_x, prev_y, new_x, new_y);
 | 
			
		||||
 | 
			
		||||
  monitor_manager = meta_monitor_manager_get ();
 | 
			
		||||
  monitors = meta_monitor_manager_get_monitor_infos (monitor_manager, &n_monitors);
 | 
			
		||||
 | 
			
		||||
@@ -280,16 +191,11 @@ meta_backend_native_warp_pointer (MetaBackend *backend,
 | 
			
		||||
{
 | 
			
		||||
  ClutterDeviceManager *manager = clutter_device_manager_get_default ();
 | 
			
		||||
  ClutterInputDevice *device = clutter_device_manager_get_core_device (manager, CLUTTER_POINTER_DEVICE);
 | 
			
		||||
  MetaCursorTracker *tracker = meta_cursor_tracker_get_for_screen (NULL);
 | 
			
		||||
 | 
			
		||||
  /* XXX */
 | 
			
		||||
  guint32 time_ = 0;
 | 
			
		||||
 | 
			
		||||
  /* Warp the input device pointer state. */
 | 
			
		||||
  clutter_evdev_warp_pointer (device, time_, x, y);
 | 
			
		||||
 | 
			
		||||
  /* Warp displayed pointer cursor. */
 | 
			
		||||
  meta_cursor_tracker_update_position (tracker, x, y);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -336,19 +242,6 @@ meta_backend_native_lock_layout_group (MetaBackend *backend,
 | 
			
		||||
  g_signal_emit_by_name (backend, "keymap-layout-group-changed", idx, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
meta_backend_native_get_relative_motion_deltas (MetaBackend *backend,
 | 
			
		||||
                                                const        ClutterEvent *event,
 | 
			
		||||
                                                double       *dx,
 | 
			
		||||
                                                double       *dy,
 | 
			
		||||
                                                double       *dx_unaccel,
 | 
			
		||||
                                                double       *dy_unaccel)
 | 
			
		||||
{
 | 
			
		||||
  return clutter_evdev_event_get_relative_motion (event,
 | 
			
		||||
                                                  dx, dy,
 | 
			
		||||
                                                  dx_unaccel, dy_unaccel);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
meta_backend_native_class_init (MetaBackendNativeClass *klass)
 | 
			
		||||
{
 | 
			
		||||
@@ -366,33 +259,17 @@ meta_backend_native_class_init (MetaBackendNativeClass *klass)
 | 
			
		||||
  backend_class->set_keymap = meta_backend_native_set_keymap;
 | 
			
		||||
  backend_class->get_keymap = meta_backend_native_get_keymap;
 | 
			
		||||
  backend_class->lock_layout_group = meta_backend_native_lock_layout_group;
 | 
			
		||||
  backend_class->get_relative_motion_deltas = meta_backend_native_get_relative_motion_deltas;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
meta_backend_native_init (MetaBackendNative *native)
 | 
			
		||||
{
 | 
			
		||||
  MetaBackendNativePrivate *priv = meta_backend_native_get_instance_private (native);
 | 
			
		||||
  GError *error = NULL;
 | 
			
		||||
 | 
			
		||||
  priv->launcher = meta_launcher_new (&error);
 | 
			
		||||
  if (priv->launcher == NULL)
 | 
			
		||||
    {
 | 
			
		||||
      g_warning ("Can't initialize KMS backend: %s\n", error->message);
 | 
			
		||||
      exit (1);
 | 
			
		||||
    }
 | 
			
		||||
  /* We're a display server, so start talking to weston-launch. */
 | 
			
		||||
  priv->launcher = meta_launcher_new ();
 | 
			
		||||
 | 
			
		||||
  priv->barrier_manager = meta_barrier_manager_native_new ();
 | 
			
		||||
 | 
			
		||||
  priv->up_client = up_client_new ();
 | 
			
		||||
  g_signal_connect (priv->up_client, "notify::lid-is-closed",
 | 
			
		||||
                    G_CALLBACK (lid_is_closed_changed_cb), NULL);
 | 
			
		||||
 | 
			
		||||
  priv->cancellable = g_cancellable_new ();
 | 
			
		||||
  g_bus_get (G_BUS_TYPE_SYSTEM,
 | 
			
		||||
             priv->cancellable,
 | 
			
		||||
             system_bus_gotten_cb,
 | 
			
		||||
             native);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gboolean
 | 
			
		||||
 
 | 
			
		||||
@@ -93,18 +93,126 @@ next_serial (void)
 | 
			
		||||
  return barrier_serial;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
typedef struct _Vector2
 | 
			
		||||
{
 | 
			
		||||
  float x, y;
 | 
			
		||||
} Vector2;
 | 
			
		||||
 | 
			
		||||
static float
 | 
			
		||||
vector2_cross_product (Vector2 a, Vector2 b)
 | 
			
		||||
{
 | 
			
		||||
  return a.x * b.y - a.y * b.x;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Vector2
 | 
			
		||||
vector2_add (Vector2 a, Vector2 b)
 | 
			
		||||
{
 | 
			
		||||
  return (Vector2) {
 | 
			
		||||
    .x = a.x + b.x,
 | 
			
		||||
    .y = a.y + b.y,
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Vector2
 | 
			
		||||
vector2_subtract (Vector2 a, Vector2 b)
 | 
			
		||||
{
 | 
			
		||||
  return (Vector2) {
 | 
			
		||||
    .x = a.x - b.x,
 | 
			
		||||
    .y = a.y - b.y,
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Vector2
 | 
			
		||||
vector2_multiply_constant (float c, Vector2 a)
 | 
			
		||||
{
 | 
			
		||||
  return (Vector2) {
 | 
			
		||||
    .x = c * a.x,
 | 
			
		||||
    .y = c * a.y,
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
typedef struct _Line2
 | 
			
		||||
{
 | 
			
		||||
  Vector2 a;
 | 
			
		||||
  Vector2 b;
 | 
			
		||||
} Line2;
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
lines_intersect (Line2 *line1, Line2 *line2, Vector2 *intersection)
 | 
			
		||||
{
 | 
			
		||||
  Vector2 p = line1->a;
 | 
			
		||||
  Vector2 r = vector2_subtract (line1->b, line1->a);
 | 
			
		||||
  Vector2 q = line2->a;
 | 
			
		||||
  Vector2 s = vector2_subtract (line2->b, line2->a);
 | 
			
		||||
  float rxs;
 | 
			
		||||
  float sxr;
 | 
			
		||||
  float t;
 | 
			
		||||
  float u;
 | 
			
		||||
 | 
			
		||||
  /*
 | 
			
		||||
   * The line (p, r) and (q, s) intersects where
 | 
			
		||||
   *
 | 
			
		||||
   *   p + t r = q + u s
 | 
			
		||||
   *
 | 
			
		||||
   * Calculate t:
 | 
			
		||||
   *
 | 
			
		||||
   *   (p + t r) × s = (q + u s) × s
 | 
			
		||||
   *   p × s + t (r × s) = q × s + u (s × s)
 | 
			
		||||
   *   p × s + t (r × s) = q × s
 | 
			
		||||
   *   t (r × s) = q × s - p × s
 | 
			
		||||
   *   t (r × s) = (q - p) × s
 | 
			
		||||
   *   t = ((q - p) × s) / (r × s)
 | 
			
		||||
   *
 | 
			
		||||
   * Using the same method, for u we get:
 | 
			
		||||
   *
 | 
			
		||||
   *   u = ((p - q) × r) / (s × r)
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  rxs = vector2_cross_product (r, s);
 | 
			
		||||
  sxr = vector2_cross_product (s, r);
 | 
			
		||||
 | 
			
		||||
  /* If r × s = 0 then the lines are either parallel or collinear. */
 | 
			
		||||
  if (fabs ( rxs) < DBL_MIN)
 | 
			
		||||
    return FALSE;
 | 
			
		||||
 | 
			
		||||
  t = vector2_cross_product (vector2_subtract (q, p), s) / rxs;
 | 
			
		||||
  u = vector2_cross_product (vector2_subtract (p, q), r) / sxr;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  /* The lines only intersect if 0 ≤ t ≤ 1 and 0 ≤ u ≤ 1. */
 | 
			
		||||
  if (t < 0.0 || t > 1.0 || u < 0.0 || u > 1.0)
 | 
			
		||||
    return FALSE;
 | 
			
		||||
 | 
			
		||||
  *intersection = vector2_add (p, vector2_multiply_constant (t, r));
 | 
			
		||||
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
is_barrier_horizontal (MetaBarrier *barrier)
 | 
			
		||||
{
 | 
			
		||||
  return meta_border_is_horizontal (&barrier->priv->border);
 | 
			
		||||
  return barrier->priv->y1 == barrier->priv->y2;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
is_barrier_blocking_directions (MetaBarrier         *barrier,
 | 
			
		||||
                                MetaBarrierDirection directions)
 | 
			
		||||
{
 | 
			
		||||
  return meta_border_is_blocking_directions (&barrier->priv->border,
 | 
			
		||||
                                             directions);
 | 
			
		||||
  /* Barriers doesn't block parallel motions. */
 | 
			
		||||
  if (is_barrier_horizontal (barrier))
 | 
			
		||||
    {
 | 
			
		||||
      if ((directions & (META_BARRIER_DIRECTION_POSITIVE_Y |
 | 
			
		||||
                         META_BARRIER_DIRECTION_NEGATIVE_Y)) == 0)
 | 
			
		||||
        return FALSE;
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      if ((directions & (META_BARRIER_DIRECTION_POSITIVE_X |
 | 
			
		||||
                         META_BARRIER_DIRECTION_NEGATIVE_X)) == 0)
 | 
			
		||||
        return FALSE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  return (barrier->priv->directions & directions) != directions;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -116,16 +224,31 @@ dismiss_pointer (MetaBarrierImplNative *self)
 | 
			
		||||
  priv->state = META_BARRIER_STATE_LEFT;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Line2
 | 
			
		||||
barrier_to_line (MetaBarrier *barrier)
 | 
			
		||||
{
 | 
			
		||||
  return (Line2) {
 | 
			
		||||
    .a = (Vector2) {
 | 
			
		||||
      .x = MIN (barrier->priv->x1, barrier->priv->x2),
 | 
			
		||||
      .y = MIN (barrier->priv->y1, barrier->priv->y2),
 | 
			
		||||
    },
 | 
			
		||||
    .b = (Vector2) {
 | 
			
		||||
      .x = MAX (barrier->priv->x1, barrier->priv->x2),
 | 
			
		||||
      .y = MAX (barrier->priv->y1, barrier->priv->y2),
 | 
			
		||||
    },
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Calculate the hit box for a held motion. The hit box is a 2 px wide region
 | 
			
		||||
 * in the opposite direction of every direction the barrier blocks. The purpose
 | 
			
		||||
 * of this is to allow small movements without receiving a "left" signal. This
 | 
			
		||||
 * heuristic comes from the X.org pointer barrier implementation.
 | 
			
		||||
 */
 | 
			
		||||
static MetaLine2
 | 
			
		||||
static Line2
 | 
			
		||||
calculate_barrier_hit_box (MetaBarrier *barrier)
 | 
			
		||||
{
 | 
			
		||||
  MetaLine2 hit_box = barrier->priv->border.line;
 | 
			
		||||
  Line2 hit_box = barrier_to_line (barrier);
 | 
			
		||||
 | 
			
		||||
  if (is_barrier_horizontal (barrier))
 | 
			
		||||
    {
 | 
			
		||||
@@ -150,8 +273,7 @@ calculate_barrier_hit_box (MetaBarrier *barrier)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
is_within_box (MetaLine2   box,
 | 
			
		||||
               MetaVector2 point)
 | 
			
		||||
is_within_box (Line2 box, Vector2 point)
 | 
			
		||||
{
 | 
			
		||||
  return (point.x >= box.a.x && point.x < box.b.x &&
 | 
			
		||||
          point.y >= box.a.y && point.y < box.b.y);
 | 
			
		||||
@@ -166,8 +288,8 @@ maybe_release_barrier (gpointer key,
 | 
			
		||||
  MetaBarrierImplNativePrivate *priv =
 | 
			
		||||
    meta_barrier_impl_native_get_instance_private (self);
 | 
			
		||||
  MetaBarrier *barrier = priv->barrier;
 | 
			
		||||
  MetaLine2 *motion = user_data;
 | 
			
		||||
  MetaLine2 hit_box;
 | 
			
		||||
  Line2 *motion = user_data;
 | 
			
		||||
  Line2 hit_box;
 | 
			
		||||
 | 
			
		||||
  if (priv->state != META_BARRIER_STATE_HELD)
 | 
			
		||||
    return;
 | 
			
		||||
@@ -175,10 +297,8 @@ maybe_release_barrier (gpointer key,
 | 
			
		||||
  /* Release if we end up outside barrier end points. */
 | 
			
		||||
  if (is_barrier_horizontal (barrier))
 | 
			
		||||
    {
 | 
			
		||||
      if (motion->b.x > MAX (barrier->priv->border.line.a.x,
 | 
			
		||||
                             barrier->priv->border.line.b.x) ||
 | 
			
		||||
          motion->b.x < MIN (barrier->priv->border.line.a.x,
 | 
			
		||||
                             barrier->priv->border.line.b.x))
 | 
			
		||||
      if (motion->b.x > MAX (barrier->priv->x1, barrier->priv->x2) ||
 | 
			
		||||
          motion->b.x < MIN (barrier->priv->x1, barrier->priv->x2))
 | 
			
		||||
        {
 | 
			
		||||
          dismiss_pointer (self);
 | 
			
		||||
          return;
 | 
			
		||||
@@ -186,10 +306,8 @@ maybe_release_barrier (gpointer key,
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      if (motion->b.y > MAX (barrier->priv->border.line.a.y,
 | 
			
		||||
                             barrier->priv->border.line.b.y) ||
 | 
			
		||||
          motion->b.y < MIN (barrier->priv->border.line.a.y,
 | 
			
		||||
                             barrier->priv->border.line.b.y))
 | 
			
		||||
      if (motion->b.y > MAX (barrier->priv->y1, barrier->priv->y2) ||
 | 
			
		||||
          motion->b.y < MIN (barrier->priv->y1, barrier->priv->y2))
 | 
			
		||||
        {
 | 
			
		||||
          dismiss_pointer (self);
 | 
			
		||||
          return;
 | 
			
		||||
@@ -212,7 +330,7 @@ maybe_release_barriers (MetaBarrierManagerNative *manager,
 | 
			
		||||
                        float                     x,
 | 
			
		||||
                        float                     y)
 | 
			
		||||
{
 | 
			
		||||
  MetaLine2 motion = {
 | 
			
		||||
  Line2 motion = {
 | 
			
		||||
    .a = {
 | 
			
		||||
      .x = prev_x,
 | 
			
		||||
      .y = prev_y,
 | 
			
		||||
@@ -232,7 +350,7 @@ typedef struct _MetaClosestBarrierData
 | 
			
		||||
{
 | 
			
		||||
  struct
 | 
			
		||||
  {
 | 
			
		||||
    MetaLine2                   motion;
 | 
			
		||||
    Line2                       motion;
 | 
			
		||||
    MetaBarrierDirection        directions;
 | 
			
		||||
  } in;
 | 
			
		||||
 | 
			
		||||
@@ -253,7 +371,8 @@ update_closest_barrier (gpointer key,
 | 
			
		||||
    meta_barrier_impl_native_get_instance_private (self);
 | 
			
		||||
  MetaBarrier *barrier = priv->barrier;
 | 
			
		||||
  MetaClosestBarrierData *data = user_data;
 | 
			
		||||
  MetaVector2 intersection;
 | 
			
		||||
  Line2 barrier_line;
 | 
			
		||||
  Vector2 intersection;
 | 
			
		||||
  float dx, dy;
 | 
			
		||||
  float distance_2;
 | 
			
		||||
 | 
			
		||||
@@ -272,9 +391,17 @@ update_closest_barrier (gpointer key,
 | 
			
		||||
 | 
			
		||||
  /* Check if the motion intersects with the barrier, and retrieve the
 | 
			
		||||
   * intersection point if any. */
 | 
			
		||||
  if (!meta_line2_intersects_with (&barrier->priv->border.line,
 | 
			
		||||
                                   &data->in.motion,
 | 
			
		||||
                                   &intersection))
 | 
			
		||||
  barrier_line = (Line2) {
 | 
			
		||||
    .a = {
 | 
			
		||||
      .x = barrier->priv->x1,
 | 
			
		||||
      .y = barrier->priv->y1
 | 
			
		||||
    },
 | 
			
		||||
    .b = {
 | 
			
		||||
      .x = barrier->priv->x2,
 | 
			
		||||
      .y = barrier->priv->y2
 | 
			
		||||
    },
 | 
			
		||||
  };
 | 
			
		||||
  if (!lines_intersect (&barrier_line, &data->in.motion, &intersection))
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  /* Calculate the distance to the barrier and keep track of the closest
 | 
			
		||||
@@ -443,9 +570,9 @@ clamp_to_barrier (MetaBarrierImplNative *self,
 | 
			
		||||
  if (is_barrier_horizontal (barrier))
 | 
			
		||||
    {
 | 
			
		||||
      if (*motion_dir & META_BARRIER_DIRECTION_POSITIVE_Y)
 | 
			
		||||
        *y = barrier->priv->border.line.a.y;
 | 
			
		||||
        *y = barrier->priv->y1;
 | 
			
		||||
      else if (*motion_dir & META_BARRIER_DIRECTION_NEGATIVE_Y)
 | 
			
		||||
        *y = barrier->priv->border.line.a.y;
 | 
			
		||||
        *y = barrier->priv->y1;
 | 
			
		||||
 | 
			
		||||
      priv->blocked_dir = *motion_dir & (META_BARRIER_DIRECTION_POSITIVE_Y |
 | 
			
		||||
                                         META_BARRIER_DIRECTION_NEGATIVE_Y);
 | 
			
		||||
@@ -455,9 +582,9 @@ clamp_to_barrier (MetaBarrierImplNative *self,
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      if (*motion_dir & META_BARRIER_DIRECTION_POSITIVE_X)
 | 
			
		||||
        *x = barrier->priv->border.line.a.x;
 | 
			
		||||
        *x = barrier->priv->x1;
 | 
			
		||||
      else if (*motion_dir & META_BARRIER_DIRECTION_NEGATIVE_X)
 | 
			
		||||
        *x = barrier->priv->border.line.a.x;
 | 
			
		||||
        *x = barrier->priv->x1;
 | 
			
		||||
 | 
			
		||||
      priv->blocked_dir = *motion_dir & (META_BARRIER_DIRECTION_POSITIVE_X |
 | 
			
		||||
                                         META_BARRIER_DIRECTION_NEGATIVE_X);
 | 
			
		||||
 
 | 
			
		||||
@@ -26,16 +26,11 @@
 | 
			
		||||
 | 
			
		||||
#include "meta-cursor-renderer-native.h"
 | 
			
		||||
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <gbm.h>
 | 
			
		||||
#include <xf86drm.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
 | 
			
		||||
#include <meta/util.h>
 | 
			
		||||
#include <meta/meta-backend.h>
 | 
			
		||||
 | 
			
		||||
#include "meta-cursor-private.h"
 | 
			
		||||
#include "meta-monitor-manager-private.h"
 | 
			
		||||
#include "meta/boxes.h"
 | 
			
		||||
 | 
			
		||||
#ifndef DRM_CAP_CURSOR_WIDTH
 | 
			
		||||
#define DRM_CAP_CURSOR_WIDTH 0x8
 | 
			
		||||
@@ -44,28 +39,10 @@
 | 
			
		||||
#define DRM_CAP_CURSOR_HEIGHT 0x9
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* When animating a cursor, we usually call drmModeSetCursor2 once per frame.
 | 
			
		||||
 * Though, testing shows that we need to triple buffer the cursor buffer in
 | 
			
		||||
 * order to avoid glitches when animating the cursor, at least when running on
 | 
			
		||||
 * Intel. The reason for this might be (but is not confirmed to be) due to
 | 
			
		||||
 * the user space gbm_bo cache, making us reuse and overwrite the kernel side
 | 
			
		||||
 * buffer content before it was scanned out. To avoid this, we keep a user space
 | 
			
		||||
 * reference to each buffer we set until at least one frame after it was drawn.
 | 
			
		||||
 * In effect, this means we three active cursor gbm_bo's: one that that just has
 | 
			
		||||
 * been set, one that was previously set and may or may not have been scanned
 | 
			
		||||
 * out, and one pending that will be replaced if the cursor sprite changes.
 | 
			
		||||
 */
 | 
			
		||||
#define HW_CURSOR_BUFFER_COUNT 3
 | 
			
		||||
 | 
			
		||||
static GQuark quark_cursor_sprite = 0;
 | 
			
		||||
 | 
			
		||||
struct _MetaCursorRendererNativePrivate
 | 
			
		||||
{
 | 
			
		||||
  gboolean has_hw_cursor;
 | 
			
		||||
 | 
			
		||||
  MetaCursorSprite *last_cursor;
 | 
			
		||||
  guint animation_timeout_id;
 | 
			
		||||
 | 
			
		||||
  int drm_fd;
 | 
			
		||||
  struct gbm_device *gbm;
 | 
			
		||||
 | 
			
		||||
@@ -74,167 +51,77 @@ struct _MetaCursorRendererNativePrivate
 | 
			
		||||
};
 | 
			
		||||
typedef struct _MetaCursorRendererNativePrivate MetaCursorRendererNativePrivate;
 | 
			
		||||
 | 
			
		||||
typedef enum _MetaCursorGbmBoState
 | 
			
		||||
{
 | 
			
		||||
  META_CURSOR_GBM_BO_STATE_NONE,
 | 
			
		||||
  META_CURSOR_GBM_BO_STATE_SET,
 | 
			
		||||
  META_CURSOR_GBM_BO_STATE_INVALIDATED,
 | 
			
		||||
} MetaCursorGbmBoState;
 | 
			
		||||
 | 
			
		||||
typedef struct _MetaCursorNativePrivate
 | 
			
		||||
{
 | 
			
		||||
  guint active_bo;
 | 
			
		||||
  MetaCursorGbmBoState pending_bo_state;
 | 
			
		||||
  struct gbm_bo *bos[HW_CURSOR_BUFFER_COUNT];
 | 
			
		||||
} MetaCursorNativePrivate;
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE_WITH_PRIVATE (MetaCursorRendererNative, meta_cursor_renderer_native, META_TYPE_CURSOR_RENDERER);
 | 
			
		||||
 | 
			
		||||
static MetaCursorNativePrivate *
 | 
			
		||||
ensure_cursor_priv (MetaCursorSprite *cursor_sprite);
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
meta_cursor_renderer_native_finalize (GObject *object)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorRendererNative *renderer = META_CURSOR_RENDERER_NATIVE (object);
 | 
			
		||||
  MetaCursorRendererNativePrivate *priv = meta_cursor_renderer_native_get_instance_private (renderer);
 | 
			
		||||
 | 
			
		||||
  if (priv->animation_timeout_id)
 | 
			
		||||
    g_source_remove (priv->animation_timeout_id);
 | 
			
		||||
  if (priv->gbm)
 | 
			
		||||
    gbm_device_destroy (priv->gbm);
 | 
			
		||||
 | 
			
		||||
  G_OBJECT_CLASS (meta_cursor_renderer_native_parent_class)->finalize (object);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static guint
 | 
			
		||||
get_pending_cursor_sprite_gbm_bo_index (MetaCursorSprite *cursor_sprite)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorNativePrivate *cursor_priv =
 | 
			
		||||
    g_object_get_qdata (G_OBJECT (cursor_sprite), quark_cursor_sprite);
 | 
			
		||||
 | 
			
		||||
  return (cursor_priv->active_bo + 1) % HW_CURSOR_BUFFER_COUNT;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static struct gbm_bo *
 | 
			
		||||
get_pending_cursor_sprite_gbm_bo (MetaCursorSprite *cursor_sprite)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorNativePrivate *cursor_priv =
 | 
			
		||||
    g_object_get_qdata (G_OBJECT (cursor_sprite), quark_cursor_sprite);
 | 
			
		||||
  guint pending_bo;
 | 
			
		||||
 | 
			
		||||
  if (!cursor_priv)
 | 
			
		||||
    return NULL;
 | 
			
		||||
 | 
			
		||||
  pending_bo = get_pending_cursor_sprite_gbm_bo_index (cursor_sprite);
 | 
			
		||||
  return cursor_priv->bos[pending_bo];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static struct gbm_bo *
 | 
			
		||||
get_active_cursor_sprite_gbm_bo (MetaCursorSprite *cursor_sprite)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorNativePrivate *cursor_priv =
 | 
			
		||||
    g_object_get_qdata (G_OBJECT (cursor_sprite), quark_cursor_sprite);
 | 
			
		||||
 | 
			
		||||
  if (!cursor_priv)
 | 
			
		||||
    return NULL;
 | 
			
		||||
 | 
			
		||||
  return cursor_priv->bos[cursor_priv->active_bo];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
set_pending_cursor_sprite_gbm_bo (MetaCursorSprite *cursor_sprite,
 | 
			
		||||
                                  struct gbm_bo    *bo)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorNativePrivate *cursor_priv;
 | 
			
		||||
  guint pending_bo;
 | 
			
		||||
 | 
			
		||||
  cursor_priv = ensure_cursor_priv (cursor_sprite);
 | 
			
		||||
 | 
			
		||||
  pending_bo = get_pending_cursor_sprite_gbm_bo_index (cursor_sprite);
 | 
			
		||||
  cursor_priv->bos[pending_bo] = bo;
 | 
			
		||||
  cursor_priv->pending_bo_state = META_CURSOR_GBM_BO_STATE_SET;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
set_crtc_cursor (MetaCursorRendererNative *native,
 | 
			
		||||
                 MetaCRTC                 *crtc,
 | 
			
		||||
                 MetaCursorSprite         *cursor_sprite,
 | 
			
		||||
                 MetaCursorReference      *cursor,
 | 
			
		||||
                 gboolean                  force)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorRendererNativePrivate *priv = meta_cursor_renderer_native_get_instance_private (native);
 | 
			
		||||
 | 
			
		||||
  if (cursor_sprite)
 | 
			
		||||
  if (crtc->cursor == cursor && !force)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  crtc->cursor = cursor;
 | 
			
		||||
 | 
			
		||||
  if (cursor)
 | 
			
		||||
    {
 | 
			
		||||
      MetaCursorNativePrivate *cursor_priv =
 | 
			
		||||
        g_object_get_qdata (G_OBJECT (cursor_sprite), quark_cursor_sprite);
 | 
			
		||||
      struct gbm_bo *bo;
 | 
			
		||||
      union gbm_bo_handle handle;
 | 
			
		||||
      int hot_x, hot_y;
 | 
			
		||||
 | 
			
		||||
      if (cursor_priv->pending_bo_state == META_CURSOR_GBM_BO_STATE_SET)
 | 
			
		||||
        bo = get_pending_cursor_sprite_gbm_bo (cursor_sprite);
 | 
			
		||||
      else
 | 
			
		||||
        bo = get_active_cursor_sprite_gbm_bo (cursor_sprite);
 | 
			
		||||
 | 
			
		||||
      if (!force && bo == crtc->cursor_renderer_private)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
      crtc->cursor_renderer_private = bo;
 | 
			
		||||
      bo = meta_cursor_reference_get_gbm_bo (cursor, &hot_x, &hot_y);
 | 
			
		||||
 | 
			
		||||
      handle = gbm_bo_get_handle (bo);
 | 
			
		||||
      meta_cursor_sprite_get_hotspot (cursor_sprite, &hot_x, &hot_y);
 | 
			
		||||
 | 
			
		||||
      drmModeSetCursor2 (priv->drm_fd, crtc->crtc_id, handle.u32,
 | 
			
		||||
                         priv->cursor_width, priv->cursor_height, hot_x, hot_y);
 | 
			
		||||
 | 
			
		||||
      if (cursor_priv->pending_bo_state == META_CURSOR_GBM_BO_STATE_SET)
 | 
			
		||||
        {
 | 
			
		||||
          cursor_priv->active_bo =
 | 
			
		||||
            (cursor_priv->active_bo + 1) % HW_CURSOR_BUFFER_COUNT;
 | 
			
		||||
          cursor_priv->pending_bo_state = META_CURSOR_GBM_BO_STATE_NONE;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      if (force || crtc->cursor_renderer_private != NULL)
 | 
			
		||||
        {
 | 
			
		||||
          drmModeSetCursor2 (priv->drm_fd, crtc->crtc_id, 0, 0, 0, 0, 0);
 | 
			
		||||
          crtc->cursor_renderer_private = NULL;
 | 
			
		||||
        }
 | 
			
		||||
      drmModeSetCursor2 (priv->drm_fd, crtc->crtc_id, 0, 0, 0, 0, 0);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
update_hw_cursor (MetaCursorRendererNative *native,
 | 
			
		||||
                  MetaCursorSprite         *cursor_sprite,
 | 
			
		||||
                  gboolean                  force)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorRendererNativePrivate *priv = meta_cursor_renderer_native_get_instance_private (native);
 | 
			
		||||
  MetaCursorRenderer *renderer = META_CURSOR_RENDERER (native);
 | 
			
		||||
  const MetaRectangle *cursor_rect = meta_cursor_renderer_get_rect (renderer);
 | 
			
		||||
  MetaCursorReference *cursor = meta_cursor_renderer_get_cursor (renderer);
 | 
			
		||||
  MetaMonitorManager *monitors;
 | 
			
		||||
  MetaCRTC *crtcs;
 | 
			
		||||
  unsigned int i, n_crtcs;
 | 
			
		||||
  MetaRectangle rect;
 | 
			
		||||
 | 
			
		||||
  monitors = meta_monitor_manager_get ();
 | 
			
		||||
  meta_monitor_manager_get_resources (monitors, NULL, NULL, &crtcs, &n_crtcs, NULL, NULL);
 | 
			
		||||
 | 
			
		||||
  if (cursor_sprite)
 | 
			
		||||
    rect = meta_cursor_renderer_calculate_rect (renderer, cursor_sprite);
 | 
			
		||||
  else
 | 
			
		||||
    rect = (MetaRectangle) { 0 };
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < n_crtcs; i++)
 | 
			
		||||
    {
 | 
			
		||||
      gboolean crtc_should_use_cursor;
 | 
			
		||||
      MetaCursorSprite *crtc_cursor;
 | 
			
		||||
      gboolean crtc_should_have_cursor;
 | 
			
		||||
      MetaCursorReference *crtc_cursor;
 | 
			
		||||
      MetaRectangle *crtc_rect;
 | 
			
		||||
 | 
			
		||||
      crtc_rect = &crtcs[i].rect;
 | 
			
		||||
 | 
			
		||||
      crtc_should_use_cursor = (priv->has_hw_cursor &&
 | 
			
		||||
                                meta_rectangle_overlap (&rect, crtc_rect));
 | 
			
		||||
      if (crtc_should_use_cursor)
 | 
			
		||||
        crtc_cursor = cursor_sprite;
 | 
			
		||||
      crtc_should_have_cursor = (priv->has_hw_cursor && meta_rectangle_overlap (cursor_rect, crtc_rect));
 | 
			
		||||
      if (crtc_should_have_cursor)
 | 
			
		||||
        crtc_cursor = cursor;
 | 
			
		||||
      else
 | 
			
		||||
        crtc_cursor = NULL;
 | 
			
		||||
 | 
			
		||||
@@ -243,382 +130,34 @@ update_hw_cursor (MetaCursorRendererNative *native,
 | 
			
		||||
      if (crtc_cursor)
 | 
			
		||||
        {
 | 
			
		||||
          drmModeMoveCursor (priv->drm_fd, crtcs[i].crtc_id,
 | 
			
		||||
                             rect.x - crtc_rect->x,
 | 
			
		||||
                             rect.y - crtc_rect->y);
 | 
			
		||||
                             cursor_rect->x - crtc_rect->x,
 | 
			
		||||
                             cursor_rect->y - crtc_rect->y);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
has_valid_cursor_sprite_gbm_bo (MetaCursorSprite *cursor_sprite)
 | 
			
		||||
should_have_hw_cursor (MetaCursorRenderer *renderer)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorNativePrivate *cursor_priv =
 | 
			
		||||
    g_object_get_qdata (G_OBJECT (cursor_sprite), quark_cursor_sprite);
 | 
			
		||||
  MetaCursorReference *cursor = meta_cursor_renderer_get_cursor (renderer);
 | 
			
		||||
 | 
			
		||||
  if (!cursor_priv)
 | 
			
		||||
  if (cursor)
 | 
			
		||||
    return (meta_cursor_reference_get_gbm_bo (cursor, NULL, NULL) != NULL);
 | 
			
		||||
  else
 | 
			
		||||
    return FALSE;
 | 
			
		||||
 | 
			
		||||
  switch (cursor_priv->pending_bo_state)
 | 
			
		||||
    {
 | 
			
		||||
    case META_CURSOR_GBM_BO_STATE_NONE:
 | 
			
		||||
      return get_active_cursor_sprite_gbm_bo (cursor_sprite) != NULL;
 | 
			
		||||
    case META_CURSOR_GBM_BO_STATE_SET:
 | 
			
		||||
      return TRUE;
 | 
			
		||||
    case META_CURSOR_GBM_BO_STATE_INVALIDATED:
 | 
			
		||||
      return FALSE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  g_assert_not_reached ();
 | 
			
		||||
 | 
			
		||||
  return FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
cursor_over_transformed_crtc (MetaCursorRenderer *renderer,
 | 
			
		||||
                              MetaCursorSprite   *cursor_sprite)
 | 
			
		||||
{
 | 
			
		||||
  MetaMonitorManager *monitors;
 | 
			
		||||
  MetaCRTC *crtcs;
 | 
			
		||||
  unsigned int i, n_crtcs;
 | 
			
		||||
  MetaRectangle rect;
 | 
			
		||||
 | 
			
		||||
  monitors = meta_monitor_manager_get ();
 | 
			
		||||
  meta_monitor_manager_get_resources (monitors, NULL, NULL,
 | 
			
		||||
                                      &crtcs, &n_crtcs, NULL, NULL);
 | 
			
		||||
  rect = meta_cursor_renderer_calculate_rect (renderer, cursor_sprite);
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < n_crtcs; i++)
 | 
			
		||||
    {
 | 
			
		||||
      if (!meta_rectangle_overlap (&rect, &crtcs[i].rect))
 | 
			
		||||
        continue;
 | 
			
		||||
 | 
			
		||||
      if (crtcs[i].transform != META_MONITOR_TRANSFORM_NORMAL)
 | 
			
		||||
        return TRUE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  return FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
should_have_hw_cursor (MetaCursorRenderer *renderer,
 | 
			
		||||
                       MetaCursorSprite   *cursor_sprite)
 | 
			
		||||
{
 | 
			
		||||
  CoglTexture *texture;
 | 
			
		||||
 | 
			
		||||
  if (!cursor_sprite)
 | 
			
		||||
    return FALSE;
 | 
			
		||||
 | 
			
		||||
  if (cursor_over_transformed_crtc (renderer, cursor_sprite))
 | 
			
		||||
    return FALSE;
 | 
			
		||||
 | 
			
		||||
  texture = meta_cursor_sprite_get_cogl_texture (cursor_sprite);
 | 
			
		||||
  if (!texture)
 | 
			
		||||
    return FALSE;
 | 
			
		||||
 | 
			
		||||
  if (meta_cursor_sprite_get_texture_scale (cursor_sprite) != 1)
 | 
			
		||||
    return FALSE;
 | 
			
		||||
 | 
			
		||||
  if (!has_valid_cursor_sprite_gbm_bo (cursor_sprite))
 | 
			
		||||
    return FALSE;
 | 
			
		||||
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
meta_cursor_renderer_native_update_animation (MetaCursorRendererNative *native)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorRendererNativePrivate *priv = meta_cursor_renderer_native_get_instance_private (native);
 | 
			
		||||
  MetaCursorRenderer *renderer = META_CURSOR_RENDERER (native);
 | 
			
		||||
  MetaCursorSprite *cursor_sprite = meta_cursor_renderer_get_cursor (renderer);
 | 
			
		||||
 | 
			
		||||
  priv->animation_timeout_id = 0;
 | 
			
		||||
  meta_cursor_sprite_tick_frame (cursor_sprite);
 | 
			
		||||
  meta_cursor_renderer_force_update (renderer);
 | 
			
		||||
 | 
			
		||||
  return G_SOURCE_REMOVE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
meta_cursor_renderer_native_trigger_frame (MetaCursorRendererNative *native,
 | 
			
		||||
                                           MetaCursorSprite         *cursor_sprite)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorRendererNativePrivate *priv = meta_cursor_renderer_native_get_instance_private (native);
 | 
			
		||||
  gboolean cursor_change;
 | 
			
		||||
  guint delay;
 | 
			
		||||
 | 
			
		||||
  cursor_change = cursor_sprite != priv->last_cursor;
 | 
			
		||||
  priv->last_cursor = cursor_sprite;
 | 
			
		||||
 | 
			
		||||
  if (!cursor_change && priv->animation_timeout_id)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  if (priv->animation_timeout_id)
 | 
			
		||||
    {
 | 
			
		||||
      g_source_remove (priv->animation_timeout_id);
 | 
			
		||||
      priv->animation_timeout_id = 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (cursor_sprite && meta_cursor_sprite_is_animated (cursor_sprite))
 | 
			
		||||
    {
 | 
			
		||||
      delay = meta_cursor_sprite_get_current_frame_time (cursor_sprite);
 | 
			
		||||
 | 
			
		||||
      if (delay == 0)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
      priv->animation_timeout_id =
 | 
			
		||||
        g_timeout_add (delay,
 | 
			
		||||
                       (GSourceFunc) meta_cursor_renderer_native_update_animation,
 | 
			
		||||
                       native);
 | 
			
		||||
      g_source_set_name_by_id (priv->animation_timeout_id,
 | 
			
		||||
                               "[mutter] meta_cursor_renderer_native_update_animation");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
meta_cursor_renderer_native_update_cursor (MetaCursorRenderer *renderer,
 | 
			
		||||
                                           MetaCursorSprite   *cursor_sprite)
 | 
			
		||||
meta_cursor_renderer_native_update_cursor (MetaCursorRenderer *renderer)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorRendererNative *native = META_CURSOR_RENDERER_NATIVE (renderer);
 | 
			
		||||
  MetaCursorRendererNativePrivate *priv = meta_cursor_renderer_native_get_instance_private (native);
 | 
			
		||||
 | 
			
		||||
  if (cursor_sprite)
 | 
			
		||||
    meta_cursor_sprite_realize_texture (cursor_sprite);
 | 
			
		||||
 | 
			
		||||
  meta_cursor_renderer_native_trigger_frame (native, cursor_sprite);
 | 
			
		||||
 | 
			
		||||
  priv->has_hw_cursor = should_have_hw_cursor (renderer, cursor_sprite);
 | 
			
		||||
  update_hw_cursor (native, cursor_sprite, FALSE);
 | 
			
		||||
  priv->has_hw_cursor = should_have_hw_cursor (renderer);
 | 
			
		||||
  update_hw_cursor (native, FALSE);
 | 
			
		||||
  return priv->has_hw_cursor;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
get_hardware_cursor_size (MetaCursorRendererNative *native,
 | 
			
		||||
                          uint64_t *width, uint64_t *height)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorRendererNativePrivate *priv =
 | 
			
		||||
    meta_cursor_renderer_native_get_instance_private (native);
 | 
			
		||||
 | 
			
		||||
  *width = priv->cursor_width;
 | 
			
		||||
  *height = priv->cursor_height;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
cursor_priv_free (gpointer data)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorNativePrivate *cursor_priv = data;
 | 
			
		||||
  guint i;
 | 
			
		||||
 | 
			
		||||
  if (!data)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < HW_CURSOR_BUFFER_COUNT; i++)
 | 
			
		||||
    g_clear_pointer (&cursor_priv->bos[0], (GDestroyNotify) gbm_bo_destroy);
 | 
			
		||||
  g_slice_free (MetaCursorNativePrivate, cursor_priv);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static MetaCursorNativePrivate *
 | 
			
		||||
ensure_cursor_priv (MetaCursorSprite *cursor_sprite)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorNativePrivate *cursor_priv =
 | 
			
		||||
    g_object_get_qdata (G_OBJECT (cursor_sprite), quark_cursor_sprite);
 | 
			
		||||
 | 
			
		||||
  if (!cursor_priv)
 | 
			
		||||
    {
 | 
			
		||||
      cursor_priv = g_slice_new0 (MetaCursorNativePrivate);
 | 
			
		||||
      g_object_set_qdata_full (G_OBJECT (cursor_sprite),
 | 
			
		||||
                               quark_cursor_sprite,
 | 
			
		||||
                               cursor_priv,
 | 
			
		||||
                               cursor_priv_free);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  return cursor_priv;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
load_cursor_sprite_gbm_buffer (MetaCursorRendererNative *native,
 | 
			
		||||
                               MetaCursorSprite         *cursor_sprite,
 | 
			
		||||
                               uint8_t                  *pixels,
 | 
			
		||||
                               uint                      width,
 | 
			
		||||
                               uint                      height,
 | 
			
		||||
                               int                       rowstride,
 | 
			
		||||
                               uint32_t                  gbm_format)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorRendererNativePrivate *priv =
 | 
			
		||||
    meta_cursor_renderer_native_get_instance_private (native);
 | 
			
		||||
  uint64_t cursor_width, cursor_height;
 | 
			
		||||
 | 
			
		||||
  get_hardware_cursor_size (native, &cursor_width, &cursor_height);
 | 
			
		||||
 | 
			
		||||
  if (width > cursor_width || height > cursor_height)
 | 
			
		||||
    {
 | 
			
		||||
      meta_warning ("Invalid theme cursor size (must be at most %ux%u)\n",
 | 
			
		||||
                    (unsigned int)cursor_width, (unsigned int)cursor_height);
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (gbm_device_is_format_supported (priv->gbm, gbm_format,
 | 
			
		||||
                                      GBM_BO_USE_CURSOR | GBM_BO_USE_WRITE))
 | 
			
		||||
    {
 | 
			
		||||
      struct gbm_bo *bo;
 | 
			
		||||
      uint8_t buf[4 * cursor_width * cursor_height];
 | 
			
		||||
      uint i;
 | 
			
		||||
 | 
			
		||||
      bo = gbm_bo_create (priv->gbm, cursor_width, cursor_height,
 | 
			
		||||
                          gbm_format, GBM_BO_USE_CURSOR | GBM_BO_USE_WRITE);
 | 
			
		||||
      if (!bo)
 | 
			
		||||
        {
 | 
			
		||||
          meta_warning ("Failed to allocate HW cursor buffer\n");
 | 
			
		||||
          return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      memset (buf, 0, sizeof(buf));
 | 
			
		||||
      for (i = 0; i < height; i++)
 | 
			
		||||
        memcpy (buf + i * 4 * cursor_width, pixels + i * rowstride, width * 4);
 | 
			
		||||
      if (gbm_bo_write (bo, buf, cursor_width * cursor_height * 4) != 0)
 | 
			
		||||
        {
 | 
			
		||||
          meta_warning ("Failed to write cursors buffer data: %s",
 | 
			
		||||
                        g_strerror (errno));
 | 
			
		||||
          gbm_bo_destroy (bo);
 | 
			
		||||
          return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      set_pending_cursor_sprite_gbm_bo (cursor_sprite, bo);
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      meta_warning ("HW cursor for format %d not supported\n", gbm_format);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
invalidate_pending_cursor_sprite_gbm_bo (MetaCursorSprite *cursor_sprite)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorNativePrivate *cursor_priv =
 | 
			
		||||
    g_object_get_qdata (G_OBJECT (cursor_sprite), quark_cursor_sprite);
 | 
			
		||||
  guint pending_bo;
 | 
			
		||||
 | 
			
		||||
  if (!cursor_priv)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  pending_bo = get_pending_cursor_sprite_gbm_bo_index (cursor_sprite);
 | 
			
		||||
  g_clear_pointer (&cursor_priv->bos[pending_bo],
 | 
			
		||||
                   (GDestroyNotify) gbm_bo_destroy);
 | 
			
		||||
  cursor_priv->pending_bo_state = META_CURSOR_GBM_BO_STATE_INVALIDATED;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_WAYLAND
 | 
			
		||||
static void
 | 
			
		||||
meta_cursor_renderer_native_realize_cursor_from_wl_buffer (MetaCursorRenderer *renderer,
 | 
			
		||||
                                                           MetaCursorSprite *cursor_sprite,
 | 
			
		||||
                                                           struct wl_resource *buffer)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorRendererNative *native = META_CURSOR_RENDERER_NATIVE (renderer);
 | 
			
		||||
  MetaCursorRendererNativePrivate *priv =
 | 
			
		||||
    meta_cursor_renderer_native_get_instance_private (native);
 | 
			
		||||
  uint32_t gbm_format;
 | 
			
		||||
  uint64_t cursor_width, cursor_height;
 | 
			
		||||
  CoglTexture *texture;
 | 
			
		||||
  uint width, height;
 | 
			
		||||
 | 
			
		||||
  /* Destroy any previous pending cursor buffer; we'll always either fail (which
 | 
			
		||||
   * should unset, or succeed, which will set new buffer.
 | 
			
		||||
   */
 | 
			
		||||
  invalidate_pending_cursor_sprite_gbm_bo (cursor_sprite);
 | 
			
		||||
 | 
			
		||||
  texture = meta_cursor_sprite_get_cogl_texture (cursor_sprite);
 | 
			
		||||
  width = cogl_texture_get_width (texture);
 | 
			
		||||
  height = cogl_texture_get_height (texture);
 | 
			
		||||
 | 
			
		||||
  struct wl_shm_buffer *shm_buffer = wl_shm_buffer_get (buffer);
 | 
			
		||||
  if (shm_buffer)
 | 
			
		||||
    {
 | 
			
		||||
      int rowstride = wl_shm_buffer_get_stride (shm_buffer);
 | 
			
		||||
      uint8_t *buffer_data;
 | 
			
		||||
 | 
			
		||||
      wl_shm_buffer_begin_access (shm_buffer);
 | 
			
		||||
 | 
			
		||||
      switch (wl_shm_buffer_get_format (shm_buffer))
 | 
			
		||||
        {
 | 
			
		||||
#if G_BYTE_ORDER == G_BIG_ENDIAN
 | 
			
		||||
        case WL_SHM_FORMAT_ARGB8888:
 | 
			
		||||
          gbm_format = GBM_FORMAT_ARGB8888;
 | 
			
		||||
          break;
 | 
			
		||||
        case WL_SHM_FORMAT_XRGB8888:
 | 
			
		||||
          gbm_format = GBM_FORMAT_XRGB8888;
 | 
			
		||||
          break;
 | 
			
		||||
#else
 | 
			
		||||
        case WL_SHM_FORMAT_ARGB8888:
 | 
			
		||||
          gbm_format = GBM_FORMAT_ARGB8888;
 | 
			
		||||
          break;
 | 
			
		||||
        case WL_SHM_FORMAT_XRGB8888:
 | 
			
		||||
          gbm_format = GBM_FORMAT_XRGB8888;
 | 
			
		||||
          break;
 | 
			
		||||
#endif
 | 
			
		||||
        default:
 | 
			
		||||
          g_warn_if_reached ();
 | 
			
		||||
          gbm_format = GBM_FORMAT_ARGB8888;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      buffer_data = wl_shm_buffer_get_data (shm_buffer);
 | 
			
		||||
      load_cursor_sprite_gbm_buffer (native,
 | 
			
		||||
                                     cursor_sprite,
 | 
			
		||||
                                     buffer_data,
 | 
			
		||||
                                     width, height, rowstride,
 | 
			
		||||
                                     gbm_format);
 | 
			
		||||
 | 
			
		||||
      wl_shm_buffer_end_access (shm_buffer);
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      struct gbm_bo *bo;
 | 
			
		||||
 | 
			
		||||
      /* HW cursors have a predefined size (at least 64x64), which usually is
 | 
			
		||||
       * bigger than cursor theme size, so themed cursors must be padded with
 | 
			
		||||
       * transparent pixels to fill the overlay. This is trivial if we have CPU
 | 
			
		||||
       * access to the data, but it's not possible if the buffer is in GPU
 | 
			
		||||
       * memory (and possibly tiled too), so if we don't get the right size, we
 | 
			
		||||
       * fallback to GL. */
 | 
			
		||||
      get_hardware_cursor_size (native, &cursor_width, &cursor_height);
 | 
			
		||||
 | 
			
		||||
      if (width != cursor_width || height != cursor_height)
 | 
			
		||||
        {
 | 
			
		||||
          meta_warning ("Invalid cursor size (must be 64x64), falling back to software (GL) cursors\n");
 | 
			
		||||
          return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      bo = gbm_bo_import (priv->gbm,
 | 
			
		||||
                          GBM_BO_IMPORT_WL_BUFFER,
 | 
			
		||||
                          buffer,
 | 
			
		||||
                          GBM_BO_USE_CURSOR);
 | 
			
		||||
      if (!bo)
 | 
			
		||||
        {
 | 
			
		||||
          meta_warning ("Importing HW cursor from wl_buffer failed\n");
 | 
			
		||||
          return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      set_pending_cursor_sprite_gbm_bo (cursor_sprite, bo);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
meta_cursor_renderer_native_realize_cursor_from_xcursor (MetaCursorRenderer *renderer,
 | 
			
		||||
                                                         MetaCursorSprite *cursor_sprite,
 | 
			
		||||
                                                         XcursorImage *xc_image)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorRendererNative *native = META_CURSOR_RENDERER_NATIVE (renderer);
 | 
			
		||||
 | 
			
		||||
  invalidate_pending_cursor_sprite_gbm_bo (cursor_sprite);
 | 
			
		||||
 | 
			
		||||
  load_cursor_sprite_gbm_buffer (native,
 | 
			
		||||
                                 cursor_sprite,
 | 
			
		||||
                                 (uint8_t *) xc_image->pixels,
 | 
			
		||||
                                 xc_image->width,
 | 
			
		||||
                                 xc_image->height,
 | 
			
		||||
                                 xc_image->width * 4,
 | 
			
		||||
                                 GBM_FORMAT_ARGB8888);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
meta_cursor_renderer_native_class_init (MetaCursorRendererNativeClass *klass)
 | 
			
		||||
{
 | 
			
		||||
@@ -627,22 +166,6 @@ meta_cursor_renderer_native_class_init (MetaCursorRendererNativeClass *klass)
 | 
			
		||||
 | 
			
		||||
  object_class->finalize = meta_cursor_renderer_native_finalize;
 | 
			
		||||
  renderer_class->update_cursor = meta_cursor_renderer_native_update_cursor;
 | 
			
		||||
#ifdef HAVE_WAYLAND
 | 
			
		||||
  renderer_class->realize_cursor_from_wl_buffer =
 | 
			
		||||
    meta_cursor_renderer_native_realize_cursor_from_wl_buffer;
 | 
			
		||||
#endif
 | 
			
		||||
  renderer_class->realize_cursor_from_xcursor =
 | 
			
		||||
    meta_cursor_renderer_native_realize_cursor_from_xcursor;
 | 
			
		||||
 | 
			
		||||
  quark_cursor_sprite = g_quark_from_static_string ("-meta-cursor-native");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
force_update_hw_cursor (MetaCursorRendererNative *native)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorRenderer *renderer = META_CURSOR_RENDERER (native);
 | 
			
		||||
 | 
			
		||||
  update_hw_cursor (native, meta_cursor_renderer_get_cursor (renderer), TRUE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -650,7 +173,7 @@ on_monitors_changed (MetaMonitorManager       *monitors,
 | 
			
		||||
                     MetaCursorRendererNative *native)
 | 
			
		||||
{
 | 
			
		||||
  /* Our tracking is all messed up, so force an update. */
 | 
			
		||||
  force_update_hw_cursor (native);
 | 
			
		||||
  update_hw_cursor (native, TRUE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -669,7 +192,7 @@ meta_cursor_renderer_native_init (MetaCursorRendererNative *native)
 | 
			
		||||
    {
 | 
			
		||||
      CoglRenderer *cogl_renderer = cogl_display_get_renderer (cogl_context_get_display (ctx));
 | 
			
		||||
      priv->drm_fd = cogl_kms_renderer_get_kms_fd (cogl_renderer);
 | 
			
		||||
      priv->gbm = cogl_kms_renderer_get_gbm (cogl_renderer);
 | 
			
		||||
      priv->gbm = gbm_create_device (priv->drm_fd);
 | 
			
		||||
 | 
			
		||||
      uint64_t width, height;
 | 
			
		||||
      if (drmGetCap (priv->drm_fd, DRM_CAP_CURSOR_WIDTH, &width) == 0 &&
 | 
			
		||||
@@ -695,8 +218,18 @@ meta_cursor_renderer_native_get_gbm_device (MetaCursorRendererNative *native)
 | 
			
		||||
  return priv->gbm;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
meta_cursor_renderer_native_get_cursor_size (MetaCursorRendererNative *native,
 | 
			
		||||
                                             uint64_t *width, uint64_t *height)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorRendererNativePrivate *priv = meta_cursor_renderer_native_get_instance_private (native);
 | 
			
		||||
 | 
			
		||||
  *width = priv->cursor_width;
 | 
			
		||||
  *height = priv->cursor_height;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
meta_cursor_renderer_native_force_update (MetaCursorRendererNative *native)
 | 
			
		||||
{
 | 
			
		||||
  force_update_hw_cursor (native);
 | 
			
		||||
  update_hw_cursor (native, TRUE);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -164,36 +164,56 @@ meta_idle_monitor_native_init (MetaIdleMonitorNative *monitor_native)
 | 
			
		||||
  monitor->watches = g_hash_table_new_full (NULL, NULL, NULL, free_watch);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
  MetaIdleMonitorNative *monitor_native;
 | 
			
		||||
  GList *fired_watches;
 | 
			
		||||
} CheckNativeClosure;
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
check_native_watch (gpointer key,
 | 
			
		||||
                    gpointer value,
 | 
			
		||||
                    gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
  MetaIdleMonitorWatchNative *watch_native = value;
 | 
			
		||||
  MetaIdleMonitorWatch *watch = (MetaIdleMonitorWatch *) watch_native;
 | 
			
		||||
  CheckNativeClosure *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_native->timeout_source,
 | 
			
		||||
                               closure->monitor_native->last_event_time +
 | 
			
		||||
                               watch->timeout_msec * 1000);
 | 
			
		||||
      steal = FALSE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  return steal;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
fire_native_watch (gpointer watch,
 | 
			
		||||
                   gpointer data)
 | 
			
		||||
{
 | 
			
		||||
  _meta_idle_monitor_watch_fire (watch);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
meta_idle_monitor_native_reset_idletime (MetaIdleMonitor *monitor)
 | 
			
		||||
{
 | 
			
		||||
  MetaIdleMonitorNative *monitor_native = META_IDLE_MONITOR_NATIVE (monitor);
 | 
			
		||||
  GList *node, *watch_ids;
 | 
			
		||||
  CheckNativeClosure closure;
 | 
			
		||||
 | 
			
		||||
  monitor_native->last_event_time = g_get_monotonic_time ();
 | 
			
		||||
 | 
			
		||||
  watch_ids = g_hash_table_get_keys (monitor->watches);
 | 
			
		||||
  closure.monitor_native = monitor_native;
 | 
			
		||||
  closure.fired_watches = NULL;
 | 
			
		||||
  g_hash_table_foreach_steal (monitor->watches, check_native_watch, &closure);
 | 
			
		||||
 | 
			
		||||
  for (node = watch_ids; node != NULL; node = node->next)
 | 
			
		||||
    {
 | 
			
		||||
      guint watch_id = GPOINTER_TO_UINT (node->data);
 | 
			
		||||
      MetaIdleMonitorWatchNative *watch;
 | 
			
		||||
 | 
			
		||||
      watch = g_hash_table_lookup (monitor->watches, GUINT_TO_POINTER (watch_id));
 | 
			
		||||
      if (!watch)
 | 
			
		||||
        continue;
 | 
			
		||||
 | 
			
		||||
      if (watch->base.timeout_msec == 0)
 | 
			
		||||
        {
 | 
			
		||||
          _meta_idle_monitor_watch_fire ((MetaIdleMonitorWatch *) watch);
 | 
			
		||||
        }
 | 
			
		||||
      else
 | 
			
		||||
        {
 | 
			
		||||
          g_source_set_ready_time (watch->timeout_source,
 | 
			
		||||
                                   monitor_native->last_event_time +
 | 
			
		||||
                                   watch->base.timeout_msec * 1000);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  g_list_free (watch_ids);
 | 
			
		||||
  g_list_foreach (closure.fired_watches, fire_native_watch, NULL);
 | 
			
		||||
  g_list_free (closure.fired_watches);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -154,30 +154,30 @@ device_set_click_method (struct libinput_device            *libinput_device,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
meta_input_settings_native_set_edge_scroll (MetaInputSettings            *settings,
 | 
			
		||||
                                            ClutterInputDevice           *device,
 | 
			
		||||
                                            gboolean                      edge_scrolling_enabled)
 | 
			
		||||
meta_input_settings_native_set_scroll_method (MetaInputSettings            *settings,
 | 
			
		||||
                                              ClutterInputDevice           *device,
 | 
			
		||||
                                              GDesktopTouchpadScrollMethod  mode)
 | 
			
		||||
{
 | 
			
		||||
  enum libinput_config_scroll_method scroll_method = 0;
 | 
			
		||||
  struct libinput_device *libinput_device;
 | 
			
		||||
  enum libinput_config_scroll_method supported;
 | 
			
		||||
 | 
			
		||||
  libinput_device = clutter_evdev_input_device_get_libinput_device (device);
 | 
			
		||||
  supported = libinput_device_config_scroll_get_methods (libinput_device);
 | 
			
		||||
 | 
			
		||||
  if (supported & LIBINPUT_CONFIG_SCROLL_2FG)
 | 
			
		||||
    {
 | 
			
		||||
      scroll_method = LIBINPUT_CONFIG_SCROLL_2FG;
 | 
			
		||||
    }
 | 
			
		||||
  else if (supported & LIBINPUT_CONFIG_SCROLL_EDGE &&
 | 
			
		||||
           edge_scrolling_enabled)
 | 
			
		||||
    {
 | 
			
		||||
      scroll_method = LIBINPUT_CONFIG_SCROLL_EDGE;
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
  switch (mode)
 | 
			
		||||
    {
 | 
			
		||||
    case G_DESKTOP_TOUCHPAD_SCROLL_METHOD_DISABLED:
 | 
			
		||||
      scroll_method = LIBINPUT_CONFIG_SCROLL_NO_SCROLL;
 | 
			
		||||
    }
 | 
			
		||||
      break;
 | 
			
		||||
    case G_DESKTOP_TOUCHPAD_SCROLL_METHOD_EDGE_SCROLLING:
 | 
			
		||||
      scroll_method = LIBINPUT_CONFIG_SCROLL_EDGE;
 | 
			
		||||
      break;
 | 
			
		||||
    case G_DESKTOP_TOUCHPAD_SCROLL_METHOD_TWO_FINGER_SCROLLING:
 | 
			
		||||
      scroll_method = LIBINPUT_CONFIG_SCROLL_2FG;
 | 
			
		||||
      break;
 | 
			
		||||
    default:
 | 
			
		||||
      g_assert_not_reached ();
 | 
			
		||||
      return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  device_set_scroll_method (libinput_device, scroll_method);
 | 
			
		||||
}
 | 
			
		||||
@@ -252,7 +252,7 @@ meta_input_settings_native_class_init (MetaInputSettingsNativeClass *klass)
 | 
			
		||||
  input_settings_class->set_left_handed = meta_input_settings_native_set_left_handed;
 | 
			
		||||
  input_settings_class->set_tap_enabled = meta_input_settings_native_set_tap_enabled;
 | 
			
		||||
  input_settings_class->set_invert_scroll = meta_input_settings_native_set_invert_scroll;
 | 
			
		||||
  input_settings_class->set_edge_scroll = meta_input_settings_native_set_edge_scroll;
 | 
			
		||||
  input_settings_class->set_scroll_method = meta_input_settings_native_set_scroll_method;
 | 
			
		||||
  input_settings_class->set_scroll_button = meta_input_settings_native_set_scroll_button;
 | 
			
		||||
  input_settings_class->set_click_method = meta_input_settings_native_set_click_method;
 | 
			
		||||
  input_settings_class->set_keyboard_repeat = meta_input_settings_native_set_keyboard_repeat;
 | 
			
		||||
 
 | 
			
		||||
@@ -37,20 +37,12 @@
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
 | 
			
		||||
#include <systemd/sd-login.h>
 | 
			
		||||
#include <gudev/gudev.h>
 | 
			
		||||
 | 
			
		||||
#include "dbus-utils.h"
 | 
			
		||||
#include "meta-dbus-login1.h"
 | 
			
		||||
 | 
			
		||||
#include "backends/meta-backend-private.h"
 | 
			
		||||
#include "meta-cursor-renderer-native.h"
 | 
			
		||||
#include "meta-idle-monitor-native.h"
 | 
			
		||||
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GUdevDevice, g_object_unref)
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GUdevClient, g_object_unref)
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GUdevEnumerator, g_object_unref)
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(Login1Session, g_object_unref)
 | 
			
		||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(Login1Seat, g_object_unref)
 | 
			
		||||
 | 
			
		||||
struct _MetaLauncher
 | 
			
		||||
{
 | 
			
		||||
@@ -61,21 +53,14 @@ struct _MetaLauncher
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static Login1Session *
 | 
			
		||||
get_session_proxy (GCancellable *cancellable,
 | 
			
		||||
                   GError      **error)
 | 
			
		||||
get_session_proxy (GCancellable *cancellable)
 | 
			
		||||
{
 | 
			
		||||
  g_autofree char *proxy_path = NULL;
 | 
			
		||||
  g_autofree char *session_id = NULL;
 | 
			
		||||
  char *proxy_path;
 | 
			
		||||
  char *session_id;
 | 
			
		||||
  Login1Session *session_proxy;
 | 
			
		||||
 | 
			
		||||
  if (sd_pid_get_session (getpid (), &session_id) < 0)
 | 
			
		||||
    {
 | 
			
		||||
      g_set_error (error,
 | 
			
		||||
                   G_IO_ERROR,
 | 
			
		||||
                   G_IO_ERROR_NOT_FOUND,
 | 
			
		||||
                   "Could not get session ID: %m");
 | 
			
		||||
      return NULL;
 | 
			
		||||
    }
 | 
			
		||||
    return NULL;
 | 
			
		||||
 | 
			
		||||
  proxy_path = get_escaped_dbus_path ("/org/freedesktop/login1/session", session_id);
 | 
			
		||||
 | 
			
		||||
@@ -83,37 +68,31 @@ get_session_proxy (GCancellable *cancellable,
 | 
			
		||||
                                                         G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START,
 | 
			
		||||
                                                         "org.freedesktop.login1",
 | 
			
		||||
                                                         proxy_path,
 | 
			
		||||
                                                         cancellable, error);
 | 
			
		||||
  if (!session_proxy)
 | 
			
		||||
    g_prefix_error(error, "Could not get session proxy: ");
 | 
			
		||||
                                                         cancellable, NULL);
 | 
			
		||||
  free (proxy_path);
 | 
			
		||||
 | 
			
		||||
  return session_proxy;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Login1Seat *
 | 
			
		||||
get_seat_proxy (GCancellable *cancellable,
 | 
			
		||||
                GError      **error)
 | 
			
		||||
get_seat_proxy (GCancellable *cancellable)
 | 
			
		||||
{
 | 
			
		||||
  Login1Seat *seat = login1_seat_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
 | 
			
		||||
                                                         G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START,
 | 
			
		||||
                                                         "org.freedesktop.login1",
 | 
			
		||||
                                                         "/org/freedesktop/login1/seat/self",
 | 
			
		||||
                                                         cancellable, error);
 | 
			
		||||
  if (!seat)
 | 
			
		||||
    g_prefix_error(error, "Could not get seat proxy: ");
 | 
			
		||||
 | 
			
		||||
  return seat;
 | 
			
		||||
  return login1_seat_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
 | 
			
		||||
                                             G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START,
 | 
			
		||||
                                             "org.freedesktop.login1",
 | 
			
		||||
                                             "/org/freedesktop/login1/seat/self",
 | 
			
		||||
                                             cancellable, NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
session_unpause (void)
 | 
			
		||||
{
 | 
			
		||||
  ClutterBackend *clutter_backend;
 | 
			
		||||
  ClutterBackend *backend;
 | 
			
		||||
  CoglContext *cogl_context;
 | 
			
		||||
  CoglDisplay *cogl_display;
 | 
			
		||||
 | 
			
		||||
  clutter_backend = clutter_get_default_backend ();
 | 
			
		||||
  cogl_context = clutter_backend_get_cogl_context (clutter_backend);
 | 
			
		||||
  backend = clutter_get_default_backend ();
 | 
			
		||||
  cogl_context = clutter_backend_get_cogl_context (backend);
 | 
			
		||||
  cogl_display = cogl_context_get_display (cogl_context);
 | 
			
		||||
  cogl_kms_display_queue_modes_reset (cogl_display);
 | 
			
		||||
 | 
			
		||||
@@ -131,7 +110,6 @@ session_unpause (void)
 | 
			
		||||
 | 
			
		||||
    clutter_actor_queue_redraw (stage);
 | 
			
		||||
    meta_cursor_renderer_native_force_update (META_CURSOR_RENDERER_NATIVE (renderer));
 | 
			
		||||
    meta_idle_monitor_native_reset_idletime (meta_idle_monitor_get_core ());
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -150,8 +128,9 @@ take_device (Login1Session *session_proxy,
 | 
			
		||||
             GCancellable  *cancellable,
 | 
			
		||||
             GError       **error)
 | 
			
		||||
{
 | 
			
		||||
  g_autoptr (GVariant) fd_variant = NULL;
 | 
			
		||||
  g_autoptr (GUnixFDList) fd_list = NULL;
 | 
			
		||||
  gboolean ret = FALSE;
 | 
			
		||||
  GVariant *fd_variant = NULL;
 | 
			
		||||
  GUnixFDList *fd_list = NULL;
 | 
			
		||||
  int fd = -1;
 | 
			
		||||
 | 
			
		||||
  if (!login1_session_call_take_device_sync (session_proxy,
 | 
			
		||||
@@ -163,14 +142,21 @@ take_device (Login1Session *session_proxy,
 | 
			
		||||
                                             &fd_list,
 | 
			
		||||
                                             cancellable,
 | 
			
		||||
                                             error))
 | 
			
		||||
    return FALSE;
 | 
			
		||||
    goto out;
 | 
			
		||||
 | 
			
		||||
  fd = g_unix_fd_list_get (fd_list, g_variant_get_handle (fd_variant), error);
 | 
			
		||||
  if (fd == -1)
 | 
			
		||||
    return FALSE;
 | 
			
		||||
    goto out;
 | 
			
		||||
 | 
			
		||||
  *out_fd = fd;
 | 
			
		||||
  return TRUE;
 | 
			
		||||
  ret = TRUE;
 | 
			
		||||
 | 
			
		||||
 out:
 | 
			
		||||
  if (fd_variant)
 | 
			
		||||
    g_variant_unref (fd_variant);
 | 
			
		||||
  if (fd_list)
 | 
			
		||||
    g_object_unref (fd_list);
 | 
			
		||||
  return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
@@ -178,16 +164,22 @@ get_device_info_from_path (const char *path,
 | 
			
		||||
                           int        *out_major,
 | 
			
		||||
                           int        *out_minor)
 | 
			
		||||
{
 | 
			
		||||
  gboolean ret = FALSE;
 | 
			
		||||
  int r;
 | 
			
		||||
  struct stat st;
 | 
			
		||||
 | 
			
		||||
  r = stat (path, &st);
 | 
			
		||||
  if (r < 0 || !S_ISCHR (st.st_mode))
 | 
			
		||||
    return FALSE;
 | 
			
		||||
  if (r < 0)
 | 
			
		||||
    goto out;
 | 
			
		||||
  if (!S_ISCHR (st.st_mode))
 | 
			
		||||
    goto out;
 | 
			
		||||
 | 
			
		||||
  *out_major = major (st.st_rdev);
 | 
			
		||||
  *out_minor = minor (st.st_rdev);
 | 
			
		||||
  return TRUE;
 | 
			
		||||
  ret = TRUE;
 | 
			
		||||
 | 
			
		||||
 out:
 | 
			
		||||
  return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
@@ -195,16 +187,22 @@ get_device_info_from_fd (int  fd,
 | 
			
		||||
                         int *out_major,
 | 
			
		||||
                         int *out_minor)
 | 
			
		||||
{
 | 
			
		||||
  gboolean ret = FALSE;
 | 
			
		||||
  int r;
 | 
			
		||||
  struct stat st;
 | 
			
		||||
 | 
			
		||||
  r = fstat (fd, &st);
 | 
			
		||||
  if (r < 0 || !S_ISCHR (st.st_mode))
 | 
			
		||||
    return FALSE;
 | 
			
		||||
  if (r < 0)
 | 
			
		||||
    goto out;
 | 
			
		||||
  if (!S_ISCHR (st.st_mode))
 | 
			
		||||
    goto out;
 | 
			
		||||
 | 
			
		||||
  *out_major = major (st.st_rdev);
 | 
			
		||||
  *out_minor = minor (st.st_rdev);
 | 
			
		||||
  return TRUE;
 | 
			
		||||
  ret = TRUE;
 | 
			
		||||
 | 
			
		||||
 out:
 | 
			
		||||
  return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int
 | 
			
		||||
@@ -243,7 +241,7 @@ on_evdev_device_close (int      fd,
 | 
			
		||||
  if (!get_device_info_from_fd (fd, &major, &minor))
 | 
			
		||||
    {
 | 
			
		||||
      g_warning ("Could not get device info for fd %d: %m", fd);
 | 
			
		||||
      goto out;
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (!login1_session_call_release_device_sync (self->session_proxy,
 | 
			
		||||
@@ -252,9 +250,6 @@ on_evdev_device_close (int      fd,
 | 
			
		||||
    {
 | 
			
		||||
      g_warning ("Could not release device %d,%d: %s", major, minor, error->message);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
out:
 | 
			
		||||
  close (fd);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -282,111 +277,25 @@ on_active_changed (Login1Session *session,
 | 
			
		||||
  sync_active (self);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gchar *
 | 
			
		||||
get_primary_gpu_path (const gchar *seat_name)
 | 
			
		||||
{
 | 
			
		||||
  const gchar *subsystems[] = {"drm", NULL};
 | 
			
		||||
  gchar *path = NULL;
 | 
			
		||||
  GList *devices, *tmp;
 | 
			
		||||
 | 
			
		||||
  g_autoptr (GUdevClient) gudev_client = g_udev_client_new (subsystems);
 | 
			
		||||
  g_autoptr (GUdevEnumerator) enumerator = g_udev_enumerator_new (gudev_client);
 | 
			
		||||
 | 
			
		||||
  g_udev_enumerator_add_match_name (enumerator, "card*");
 | 
			
		||||
  g_udev_enumerator_add_match_tag (enumerator, "seat");
 | 
			
		||||
 | 
			
		||||
  devices = g_udev_enumerator_execute (enumerator);
 | 
			
		||||
  if (!devices)
 | 
			
		||||
    goto out;
 | 
			
		||||
 | 
			
		||||
  for (tmp = devices; tmp != NULL; tmp = tmp->next)
 | 
			
		||||
    {
 | 
			
		||||
      g_autoptr (GUdevDevice) platform_device = NULL;
 | 
			
		||||
      g_autoptr (GUdevDevice) pci_device = NULL;
 | 
			
		||||
      GUdevDevice *dev = tmp->data;
 | 
			
		||||
      gint boot_vga;
 | 
			
		||||
      const gchar *device_seat;
 | 
			
		||||
 | 
			
		||||
      /* filter out devices that are not character device, like card0-VGA-1 */
 | 
			
		||||
      if (g_udev_device_get_device_type (dev) != G_UDEV_DEVICE_TYPE_CHAR)
 | 
			
		||||
        continue;
 | 
			
		||||
 | 
			
		||||
      device_seat = g_udev_device_get_property (dev, "ID_SEAT");
 | 
			
		||||
      if (!device_seat)
 | 
			
		||||
        {
 | 
			
		||||
          /* when ID_SEAT is not set, it means seat0 */
 | 
			
		||||
          device_seat = "seat0";
 | 
			
		||||
        }
 | 
			
		||||
      else if (g_strcmp0 (device_seat, "seat0") != 0)
 | 
			
		||||
        {
 | 
			
		||||
          /* if the device has been explicitly assigned other seat
 | 
			
		||||
           * than seat0, it is probably the right device to use */
 | 
			
		||||
          path = g_strdup (g_udev_device_get_device_file (dev));
 | 
			
		||||
          break;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      /* skip devices that do not belong to our seat */
 | 
			
		||||
      if (g_strcmp0 (seat_name, device_seat))
 | 
			
		||||
        continue;
 | 
			
		||||
 | 
			
		||||
      platform_device = g_udev_device_get_parent_with_subsystem (dev, "platform", NULL);
 | 
			
		||||
      if (platform_device != NULL)
 | 
			
		||||
        {
 | 
			
		||||
          path = g_strdup (g_udev_device_get_device_file (dev));
 | 
			
		||||
          break;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      pci_device = g_udev_device_get_parent_with_subsystem (dev, "pci", NULL);
 | 
			
		||||
      if (pci_device != NULL)
 | 
			
		||||
        {
 | 
			
		||||
          /* get value of boot_vga attribute or 0 if the device has no boot_vga */
 | 
			
		||||
          boot_vga = g_udev_device_get_sysfs_attr_as_int (pci_device, "boot_vga");
 | 
			
		||||
          if (boot_vga == 1)
 | 
			
		||||
            {
 | 
			
		||||
              /* found the boot_vga device */
 | 
			
		||||
              path = g_strdup (g_udev_device_get_device_file (dev));
 | 
			
		||||
              break;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  g_list_free_full (devices, g_object_unref);
 | 
			
		||||
 | 
			
		||||
out:
 | 
			
		||||
  return path;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
get_kms_fd (Login1Session *session_proxy,
 | 
			
		||||
            const gchar   *seat_id,
 | 
			
		||||
            int           *fd_out,
 | 
			
		||||
            GError       **error)
 | 
			
		||||
            int *fd_out)
 | 
			
		||||
{
 | 
			
		||||
  int major, minor;
 | 
			
		||||
  int fd;
 | 
			
		||||
  GError *error = NULL;
 | 
			
		||||
 | 
			
		||||
  g_autofree gchar *path = get_primary_gpu_path (seat_id);
 | 
			
		||||
  if (!path)
 | 
			
		||||
  /* XXX -- use udev to find the DRM master device */
 | 
			
		||||
  if (!get_device_info_from_path ("/dev/dri/card0", &major, &minor))
 | 
			
		||||
    {
 | 
			
		||||
      g_set_error (error,
 | 
			
		||||
                   G_IO_ERROR,
 | 
			
		||||
                   G_IO_ERROR_NOT_FOUND,
 | 
			
		||||
                   "could not find drm kms device");
 | 
			
		||||
      g_warning ("Could not stat /dev/dri/card0: %m");
 | 
			
		||||
      return FALSE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (!get_device_info_from_path (path, &major, &minor))
 | 
			
		||||
  if (!take_device (session_proxy, major, minor, &fd, NULL, &error))
 | 
			
		||||
    {
 | 
			
		||||
      g_set_error (error,
 | 
			
		||||
                   G_IO_ERROR,
 | 
			
		||||
                   G_IO_ERROR_NOT_FOUND,
 | 
			
		||||
                   "Could not get device info for path %s: %m", path);
 | 
			
		||||
      return FALSE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (!take_device (session_proxy, major, minor, &fd, NULL, error))
 | 
			
		||||
    {
 | 
			
		||||
      g_prefix_error (error, "Could not open DRM device: ");
 | 
			
		||||
      g_warning ("Could not open DRM device: %s\n", error->message);
 | 
			
		||||
      g_error_free (error);
 | 
			
		||||
      return FALSE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -395,72 +304,28 @@ get_kms_fd (Login1Session *session_proxy,
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gchar *
 | 
			
		||||
get_seat_id (GError **error)
 | 
			
		||||
{
 | 
			
		||||
  g_autofree char *session_id = NULL;
 | 
			
		||||
  char *seat_id = NULL;
 | 
			
		||||
  int r;
 | 
			
		||||
 | 
			
		||||
  r = sd_pid_get_session (0, &session_id);
 | 
			
		||||
  if (r < 0)
 | 
			
		||||
    {
 | 
			
		||||
      g_set_error (error,
 | 
			
		||||
                   G_IO_ERROR,
 | 
			
		||||
                   G_IO_ERROR_NOT_FOUND,
 | 
			
		||||
                   "Could not get session for PID: %s", g_strerror (-r));
 | 
			
		||||
      return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  r = sd_session_get_seat (session_id, &seat_id);
 | 
			
		||||
  if (r < 0)
 | 
			
		||||
    {
 | 
			
		||||
      g_set_error (error,
 | 
			
		||||
                   G_IO_ERROR,
 | 
			
		||||
                   G_IO_ERROR_NOT_FOUND,
 | 
			
		||||
                   "Could not get seat for session: %s", g_strerror (-r));
 | 
			
		||||
      return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  return seat_id;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
MetaLauncher *
 | 
			
		||||
meta_launcher_new (GError **error)
 | 
			
		||||
meta_launcher_new (void)
 | 
			
		||||
{
 | 
			
		||||
  MetaLauncher *self = NULL;
 | 
			
		||||
  g_autoptr (Login1Session) session_proxy = NULL;
 | 
			
		||||
  g_autoptr (Login1Seat) seat_proxy = NULL;
 | 
			
		||||
  g_autofree char *seat_id = NULL;
 | 
			
		||||
  gboolean have_control = FALSE;
 | 
			
		||||
  Login1Session *session_proxy;
 | 
			
		||||
  GError *error = NULL;
 | 
			
		||||
  int kms_fd;
 | 
			
		||||
 | 
			
		||||
  session_proxy = get_session_proxy (NULL, error);
 | 
			
		||||
  if (!session_proxy)
 | 
			
		||||
    goto fail;
 | 
			
		||||
 | 
			
		||||
  if (!login1_session_call_take_control_sync (session_proxy, FALSE, NULL, error))
 | 
			
		||||
  session_proxy = get_session_proxy (NULL);
 | 
			
		||||
  if (!login1_session_call_take_control_sync (session_proxy, FALSE, NULL, &error))
 | 
			
		||||
    {
 | 
			
		||||
      g_prefix_error (error, "Could not take control: ");
 | 
			
		||||
      goto fail;
 | 
			
		||||
      g_warning ("Could not take control: %s", error->message);
 | 
			
		||||
      g_error_free (error);
 | 
			
		||||
      goto out;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  have_control = TRUE;
 | 
			
		||||
 | 
			
		||||
  seat_id = get_seat_id (error);
 | 
			
		||||
  if (!seat_id)
 | 
			
		||||
    goto fail;
 | 
			
		||||
 | 
			
		||||
  seat_proxy = get_seat_proxy (NULL, error);
 | 
			
		||||
  if (!seat_proxy)
 | 
			
		||||
    goto fail;
 | 
			
		||||
 | 
			
		||||
  if (!get_kms_fd (session_proxy, seat_id, &kms_fd, error))
 | 
			
		||||
    goto fail;
 | 
			
		||||
  if (!get_kms_fd (session_proxy, &kms_fd))
 | 
			
		||||
    goto out;
 | 
			
		||||
 | 
			
		||||
  self = g_slice_new0 (MetaLauncher);
 | 
			
		||||
  self->session_proxy = g_object_ref (session_proxy);
 | 
			
		||||
  self->seat_proxy = g_object_ref (seat_proxy);
 | 
			
		||||
  self->seat_proxy = get_seat_proxy (NULL);
 | 
			
		||||
 | 
			
		||||
  self->session_active = TRUE;
 | 
			
		||||
 | 
			
		||||
@@ -470,12 +335,11 @@ meta_launcher_new (GError **error)
 | 
			
		||||
                                      self);
 | 
			
		||||
 | 
			
		||||
  g_signal_connect (self->session_proxy, "notify::active", G_CALLBACK (on_active_changed), self);
 | 
			
		||||
  return self;
 | 
			
		||||
 | 
			
		||||
 fail:
 | 
			
		||||
  if (have_control)
 | 
			
		||||
    login1_session_call_release_control_sync (session_proxy, NULL, NULL);
 | 
			
		||||
  return NULL;
 | 
			
		||||
out:
 | 
			
		||||
  g_object_unref (session_proxy);
 | 
			
		||||
 | 
			
		||||
  return self;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,7 @@
 | 
			
		||||
 | 
			
		||||
typedef struct _MetaLauncher MetaLauncher;
 | 
			
		||||
 | 
			
		||||
MetaLauncher     *meta_launcher_new                     (GError       **error);
 | 
			
		||||
MetaLauncher     *meta_launcher_new                     (void);
 | 
			
		||||
void              meta_launcher_free                    (MetaLauncher  *self);
 | 
			
		||||
 | 
			
		||||
gboolean          meta_launcher_activate_session        (MetaLauncher  *self,
 | 
			
		||||
 
 | 
			
		||||
@@ -42,8 +42,6 @@
 | 
			
		||||
 | 
			
		||||
#include <gudev/gudev.h>
 | 
			
		||||
 | 
			
		||||
#define ALL_TRANSFORMS (META_MONITOR_TRANSFORM_FLIPPED_270 + 1)
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
  drmModeConnector *connector;
 | 
			
		||||
 | 
			
		||||
@@ -57,22 +55,8 @@ typedef struct {
 | 
			
		||||
 | 
			
		||||
  uint32_t dpms_prop_id;
 | 
			
		||||
  uint32_t edid_blob_id;
 | 
			
		||||
  uint32_t tile_blob_id;
 | 
			
		||||
 | 
			
		||||
  int suggested_x;
 | 
			
		||||
  int suggested_y;
 | 
			
		||||
  uint32_t hotplug_mode_update;
 | 
			
		||||
} MetaOutputKms;
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
  uint32_t underscan_prop_id;
 | 
			
		||||
  uint32_t underscan_hborder_prop_id;
 | 
			
		||||
  uint32_t underscan_vborder_prop_id;
 | 
			
		||||
  uint32_t primary_plane_id;
 | 
			
		||||
  uint32_t rotation_prop_id;
 | 
			
		||||
  uint32_t rotation_map[ALL_TRANSFORMS];
 | 
			
		||||
} MetaCRTCKms;
 | 
			
		||||
 | 
			
		||||
struct _MetaMonitorManagerKms
 | 
			
		||||
{
 | 
			
		||||
  MetaMonitorManager parent_instance;
 | 
			
		||||
@@ -120,7 +104,7 @@ make_output_name (drmModeConnector *connector)
 | 
			
		||||
  static const char * const connector_type_names[] = {
 | 
			
		||||
    "unknown", "VGA", "DVII", "DVID", "DVID", "Composite",
 | 
			
		||||
    "SVIDEO", "LVDS", "Component", "9PinDIN", "DisplayPort",
 | 
			
		||||
    "HDMIA", "HDMIB", "TV", "eDP", "Virtual", "DSI"
 | 
			
		||||
    "HDMIA", "HDMIB", "TV", "eDP"
 | 
			
		||||
  };
 | 
			
		||||
  const char *connector_type_name;
 | 
			
		||||
 | 
			
		||||
@@ -153,12 +137,6 @@ meta_monitor_mode_destroy_notify (MetaMonitorMode *output)
 | 
			
		||||
  g_slice_free (drmModeModeInfo, output->driver_private);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
meta_crtc_destroy_notify (MetaCRTC *crtc)
 | 
			
		||||
{
 | 
			
		||||
  g_free (crtc->driver_private);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
drm_mode_equal (gconstpointer one,
 | 
			
		||||
                gconstpointer two)
 | 
			
		||||
@@ -203,67 +181,24 @@ drm_mode_hash (gconstpointer ptr)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
find_connector_properties (MetaMonitorManagerKms *manager_kms,
 | 
			
		||||
                           MetaOutputKms         *output_kms)
 | 
			
		||||
find_properties (MetaMonitorManagerKms *manager_kms,
 | 
			
		||||
                 MetaOutputKms         *output_kms)
 | 
			
		||||
{
 | 
			
		||||
  drmModePropertyPtr prop;
 | 
			
		||||
  int i;
 | 
			
		||||
 | 
			
		||||
  output_kms->hotplug_mode_update = 0;
 | 
			
		||||
  output_kms->suggested_x = -1;
 | 
			
		||||
  output_kms->suggested_y = -1;
 | 
			
		||||
  for (i = 0; i < output_kms->connector->count_props; i++)
 | 
			
		||||
    {
 | 
			
		||||
      drmModePropertyPtr prop = drmModeGetProperty (manager_kms->fd, output_kms->connector->props[i]);
 | 
			
		||||
      prop = drmModeGetProperty (manager_kms->fd, output_kms->connector->props[i]);
 | 
			
		||||
      if (!prop)
 | 
			
		||||
        continue;
 | 
			
		||||
 | 
			
		||||
      if ((prop->flags & DRM_MODE_PROP_ENUM) && strcmp (prop->name, "DPMS") == 0)
 | 
			
		||||
      if ((prop->flags & DRM_MODE_PROP_ENUM) &&
 | 
			
		||||
          strcmp(prop->name, "DPMS") == 0)
 | 
			
		||||
        output_kms->dpms_prop_id = prop->prop_id;
 | 
			
		||||
      else if ((prop->flags & DRM_MODE_PROP_BLOB) && strcmp (prop->name, "EDID") == 0)
 | 
			
		||||
        output_kms->edid_blob_id = output_kms->connector->prop_values[i];
 | 
			
		||||
      else if ((prop->flags & DRM_MODE_PROP_BLOB) &&
 | 
			
		||||
               strcmp (prop->name, "TILE") == 0)
 | 
			
		||||
        output_kms->tile_blob_id = output_kms->connector->prop_values[i];
 | 
			
		||||
      else if ((prop->flags & DRM_MODE_PROP_RANGE) &&
 | 
			
		||||
               strcmp (prop->name, "suggested X") == 0)
 | 
			
		||||
        output_kms->suggested_x = output_kms->connector->prop_values[i];
 | 
			
		||||
      else if ((prop->flags & DRM_MODE_PROP_RANGE) &&
 | 
			
		||||
               strcmp (prop->name, "suggested Y") == 0)
 | 
			
		||||
        output_kms->suggested_y = output_kms->connector->prop_values[i];
 | 
			
		||||
      else if ((prop->flags & DRM_MODE_PROP_RANGE) &&
 | 
			
		||||
               strcmp (prop->name, "hotplug_mode_update") == 0)
 | 
			
		||||
        output_kms->hotplug_mode_update = output_kms->connector->prop_values[i];
 | 
			
		||||
      
 | 
			
		||||
      drmModeFreeProperty (prop);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
find_crtc_properties (MetaMonitorManagerKms *manager_kms,
 | 
			
		||||
                      MetaCRTC *meta_crtc)
 | 
			
		||||
{
 | 
			
		||||
  MetaCRTCKms *crtc_kms;
 | 
			
		||||
  drmModeObjectPropertiesPtr props;
 | 
			
		||||
  size_t i;
 | 
			
		||||
 | 
			
		||||
  crtc_kms = meta_crtc->driver_private;
 | 
			
		||||
 | 
			
		||||
  props = drmModeObjectGetProperties (manager_kms->fd, meta_crtc->crtc_id, DRM_MODE_OBJECT_CRTC);
 | 
			
		||||
  if (!props)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < props->count_props; i++)
 | 
			
		||||
    {
 | 
			
		||||
      drmModePropertyPtr prop = drmModeGetProperty (manager_kms->fd, props->props[i]);
 | 
			
		||||
      if (!prop)
 | 
			
		||||
        continue;
 | 
			
		||||
 | 
			
		||||
      if ((prop->flags & DRM_MODE_PROP_ENUM) && strcmp (prop->name, "underscan") == 0)
 | 
			
		||||
        crtc_kms->underscan_prop_id = prop->prop_id;
 | 
			
		||||
      else if ((prop->flags & DRM_MODE_PROP_RANGE) && strcmp (prop->name, "underscan hborder") == 0)
 | 
			
		||||
        crtc_kms->underscan_hborder_prop_id = prop->prop_id;
 | 
			
		||||
      else if ((prop->flags & DRM_MODE_PROP_RANGE) && strcmp (prop->name, "underscan vborder") == 0)
 | 
			
		||||
        crtc_kms->underscan_vborder_prop_id = prop->prop_id;
 | 
			
		||||
               strcmp (prop->name, "EDID") == 0)
 | 
			
		||||
        output_kms->edid_blob_id = output_kms->connector->prop_values[i];
 | 
			
		||||
 | 
			
		||||
      drmModeFreeProperty (prop);
 | 
			
		||||
    }
 | 
			
		||||
@@ -298,47 +233,6 @@ read_output_edid (MetaMonitorManagerKms *manager_kms,
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
output_get_tile_info (MetaMonitorManagerKms *manager_kms,
 | 
			
		||||
                      MetaOutput            *output)
 | 
			
		||||
{
 | 
			
		||||
  MetaOutputKms *output_kms = output->driver_private;
 | 
			
		||||
  drmModePropertyBlobPtr tile_blob = NULL;
 | 
			
		||||
  int ret;
 | 
			
		||||
 | 
			
		||||
  if (output_kms->tile_blob_id == 0)
 | 
			
		||||
    return FALSE;
 | 
			
		||||
 | 
			
		||||
  tile_blob = drmModeGetPropertyBlob (manager_kms->fd, output_kms->tile_blob_id);
 | 
			
		||||
  if (!tile_blob)
 | 
			
		||||
    {
 | 
			
		||||
      meta_warning ("Failed to read TILE of output %s: %s\n", output->name, strerror(errno));
 | 
			
		||||
      return FALSE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (tile_blob->length > 0)
 | 
			
		||||
    {
 | 
			
		||||
      ret = sscanf ((char *)tile_blob->data, "%d:%d:%d:%d:%d:%d:%d:%d",
 | 
			
		||||
                    &output->tile_info.group_id,
 | 
			
		||||
                    &output->tile_info.flags,
 | 
			
		||||
                    &output->tile_info.max_h_tiles,
 | 
			
		||||
                    &output->tile_info.max_v_tiles,
 | 
			
		||||
                    &output->tile_info.loc_h_tile,
 | 
			
		||||
                    &output->tile_info.loc_v_tile,
 | 
			
		||||
                    &output->tile_info.tile_w,
 | 
			
		||||
                    &output->tile_info.tile_h);
 | 
			
		||||
 | 
			
		||||
      if (ret != 8)
 | 
			
		||||
        return FALSE;
 | 
			
		||||
      return TRUE;
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      drmModeFreePropertyBlob (tile_blob);
 | 
			
		||||
      return FALSE;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static MetaMonitorMode *
 | 
			
		||||
find_meta_mode (MetaMonitorManager    *manager,
 | 
			
		||||
                const drmModeModeInfo *drm_mode)
 | 
			
		||||
@@ -434,137 +328,6 @@ get_output_scale (MetaMonitorManager *manager,
 | 
			
		||||
    return compute_scale (output);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int
 | 
			
		||||
find_property_index (MetaMonitorManager         *manager,
 | 
			
		||||
                     drmModeObjectPropertiesPtr  props,
 | 
			
		||||
                     const gchar                *prop_name,
 | 
			
		||||
                     drmModePropertyPtr         *found)
 | 
			
		||||
{
 | 
			
		||||
  MetaMonitorManagerKms *manager_kms = META_MONITOR_MANAGER_KMS (manager);
 | 
			
		||||
  unsigned int i;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < props->count_props; i++)
 | 
			
		||||
    {
 | 
			
		||||
      drmModePropertyPtr prop;
 | 
			
		||||
 | 
			
		||||
      prop = drmModeGetProperty (manager_kms->fd, props->props[i]);
 | 
			
		||||
      if (!prop)
 | 
			
		||||
        continue;
 | 
			
		||||
 | 
			
		||||
      if (strcmp (prop->name, prop_name) == 0)
 | 
			
		||||
        {
 | 
			
		||||
          *found = prop;
 | 
			
		||||
          return i;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      drmModeFreeProperty (prop);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  return -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
parse_transforms (MetaMonitorManager *manager,
 | 
			
		||||
                  drmModePropertyPtr  prop,
 | 
			
		||||
                  MetaCRTC           *crtc)
 | 
			
		||||
{
 | 
			
		||||
  MetaCRTCKms *crtc_kms = crtc->driver_private;
 | 
			
		||||
  int i;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < prop->count_enums; i++)
 | 
			
		||||
    {
 | 
			
		||||
      int cur = -1;
 | 
			
		||||
 | 
			
		||||
      if (strcmp (prop->enums[i].name, "rotate-0") == 0)
 | 
			
		||||
        cur = META_MONITOR_TRANSFORM_NORMAL;
 | 
			
		||||
      else if (strcmp (prop->enums[i].name, "rotate-90") == 0)
 | 
			
		||||
        cur = META_MONITOR_TRANSFORM_90;
 | 
			
		||||
      else if (strcmp (prop->enums[i].name, "rotate-180") == 0)
 | 
			
		||||
        cur = META_MONITOR_TRANSFORM_180;
 | 
			
		||||
      else if (strcmp (prop->enums[i].name, "rotate-270") == 0)
 | 
			
		||||
        cur = META_MONITOR_TRANSFORM_270;
 | 
			
		||||
 | 
			
		||||
      if (cur != -1)
 | 
			
		||||
        {
 | 
			
		||||
          crtc->all_transforms |= 1 << cur;
 | 
			
		||||
          crtc_kms->rotation_map[cur] = 1 << prop->enums[i].value;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
is_primary_plane (MetaMonitorManager         *manager,
 | 
			
		||||
                  drmModeObjectPropertiesPtr  props)
 | 
			
		||||
{
 | 
			
		||||
  drmModePropertyPtr prop;
 | 
			
		||||
  int idx;
 | 
			
		||||
 | 
			
		||||
  idx = find_property_index (manager, props, "type", &prop);
 | 
			
		||||
  if (idx < 0)
 | 
			
		||||
    return FALSE;
 | 
			
		||||
 | 
			
		||||
  drmModeFreeProperty (prop);
 | 
			
		||||
  return props->prop_values[idx] == DRM_PLANE_TYPE_PRIMARY;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
init_crtc_rotations (MetaMonitorManager *manager,
 | 
			
		||||
                     MetaCRTC           *crtc,
 | 
			
		||||
                     unsigned int        idx)
 | 
			
		||||
{
 | 
			
		||||
  MetaMonitorManagerKms *manager_kms = META_MONITOR_MANAGER_KMS (manager);
 | 
			
		||||
  drmModeObjectPropertiesPtr props;
 | 
			
		||||
  drmModePlaneRes *planes;
 | 
			
		||||
  drmModePlane *drm_plane;
 | 
			
		||||
  MetaCRTCKms *crtc_kms;
 | 
			
		||||
  unsigned int i;
 | 
			
		||||
 | 
			
		||||
  crtc_kms = crtc->driver_private;
 | 
			
		||||
 | 
			
		||||
  planes = drmModeGetPlaneResources(manager_kms->fd);
 | 
			
		||||
  if (planes == NULL)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < planes->count_planes; i++)
 | 
			
		||||
    {
 | 
			
		||||
      drmModePropertyPtr prop;
 | 
			
		||||
 | 
			
		||||
      drm_plane = drmModeGetPlane (manager_kms->fd, planes->planes[i]);
 | 
			
		||||
 | 
			
		||||
      if (!drm_plane)
 | 
			
		||||
        continue;
 | 
			
		||||
 | 
			
		||||
      if ((drm_plane->possible_crtcs & (1 << idx)))
 | 
			
		||||
        {
 | 
			
		||||
          props = drmModeObjectGetProperties (manager_kms->fd,
 | 
			
		||||
                                              drm_plane->plane_id,
 | 
			
		||||
                                              DRM_MODE_OBJECT_PLANE);
 | 
			
		||||
 | 
			
		||||
          if (props && is_primary_plane (manager, props))
 | 
			
		||||
            {
 | 
			
		||||
              int rotation_idx;
 | 
			
		||||
 | 
			
		||||
              crtc_kms->primary_plane_id = drm_plane->plane_id;
 | 
			
		||||
              rotation_idx = find_property_index (manager, props, "rotation", &prop);
 | 
			
		||||
 | 
			
		||||
              if (rotation_idx >= 0)
 | 
			
		||||
                {
 | 
			
		||||
                  crtc_kms->rotation_prop_id = props->props[rotation_idx];
 | 
			
		||||
                  parse_transforms (manager, prop, crtc);
 | 
			
		||||
                  drmModeFreeProperty (prop);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
          if (props)
 | 
			
		||||
            drmModeFreeObjectProperties (props);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      drmModeFreePlane (drm_plane);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  drmModeFreePlaneResources (planes);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
meta_monitor_manager_kms_read_current (MetaMonitorManager *manager)
 | 
			
		||||
{
 | 
			
		||||
@@ -632,18 +395,8 @@ meta_monitor_manager_kms_read_current (MetaMonitorManager *manager)
 | 
			
		||||
      meta_mode->name = g_strndup (mode->name, DRM_DISPLAY_MODE_LEN);
 | 
			
		||||
      meta_mode->width = mode->hdisplay;
 | 
			
		||||
      meta_mode->height = mode->vdisplay;
 | 
			
		||||
 | 
			
		||||
      /* Calculate refresh rate in milliHz first for extra precision. */
 | 
			
		||||
      meta_mode->refresh_rate = (mode->clock * 1000000LL) / mode->htotal;
 | 
			
		||||
      meta_mode->refresh_rate += (mode->vtotal / 2);
 | 
			
		||||
      meta_mode->refresh_rate /= mode->vtotal;
 | 
			
		||||
      if (mode->flags & DRM_MODE_FLAG_INTERLACE)
 | 
			
		||||
	meta_mode->refresh_rate *= 2;
 | 
			
		||||
      if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
 | 
			
		||||
        meta_mode->refresh_rate /= 2;
 | 
			
		||||
      if (mode->vscan > 1)
 | 
			
		||||
        meta_mode->refresh_rate /= mode->vscan;
 | 
			
		||||
      meta_mode->refresh_rate /= 1000.0;
 | 
			
		||||
      meta_mode->refresh_rate = (1000 * mode->clock /
 | 
			
		||||
                                 ((float)mode->htotal * mode->vtotal));
 | 
			
		||||
 | 
			
		||||
      meta_mode->driver_private = g_slice_dup (drmModeModeInfo, mode);
 | 
			
		||||
      meta_mode->driver_notify = (GDestroyNotify)meta_monitor_mode_destroy_notify;
 | 
			
		||||
@@ -689,11 +442,6 @@ meta_monitor_manager_kms_read_current (MetaMonitorManager *manager)
 | 
			
		||||
          height = MAX (height, meta_crtc->rect.y + meta_crtc->rect.height);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      meta_crtc->driver_private = g_new0 (MetaCRTCKms, 1);
 | 
			
		||||
      meta_crtc->driver_notify = (GDestroyNotify) meta_crtc_destroy_notify;
 | 
			
		||||
      find_crtc_properties (manager_kms, meta_crtc);
 | 
			
		||||
      init_crtc_rotations (manager, meta_crtc, i);
 | 
			
		||||
 | 
			
		||||
      drmModeFreeCrtc (crtc);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -724,6 +472,8 @@ meta_monitor_manager_kms_read_current (MetaMonitorManager *manager)
 | 
			
		||||
	  meta_output->name = make_output_name (connector);
 | 
			
		||||
	  meta_output->width_mm = connector->mmWidth;
 | 
			
		||||
	  meta_output->height_mm = connector->mmHeight;
 | 
			
		||||
	  meta_output->suggested_x = -1;
 | 
			
		||||
	  meta_output->suggested_y = -1;
 | 
			
		||||
 | 
			
		||||
          switch (connector->subpixel)
 | 
			
		||||
            {
 | 
			
		||||
@@ -748,17 +498,11 @@ meta_monitor_manager_kms_read_current (MetaMonitorManager *manager)
 | 
			
		||||
              break;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
	  meta_output->preferred_mode = NULL;
 | 
			
		||||
	  meta_output->n_modes = connector->count_modes;
 | 
			
		||||
	  meta_output->modes = g_new0 (MetaMonitorMode *, meta_output->n_modes);
 | 
			
		||||
	  for (j = 0; j < meta_output->n_modes; j++) {
 | 
			
		||||
	  for (j = 0; j < meta_output->n_modes; j++)
 | 
			
		||||
            meta_output->modes[j] = find_meta_mode (manager, &connector->modes[j]);
 | 
			
		||||
            if (connector->modes[j].type & DRM_MODE_TYPE_PREFERRED)
 | 
			
		||||
              meta_output->preferred_mode = meta_output->modes[j];
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          if (!meta_output->preferred_mode)
 | 
			
		||||
            meta_output->preferred_mode = meta_output->modes[0];
 | 
			
		||||
	  meta_output->preferred_mode = meta_output->modes[0];
 | 
			
		||||
 | 
			
		||||
          output_kms->connector = connector;
 | 
			
		||||
          output_kms->n_encoders = connector->count_encoders;
 | 
			
		||||
@@ -823,11 +567,8 @@ meta_monitor_manager_kms_read_current (MetaMonitorManager *manager)
 | 
			
		||||
              meta_output->is_presentation = FALSE;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
          find_connector_properties (manager_kms, output_kms);
 | 
			
		||||
          meta_output->suggested_x = output_kms->suggested_x;
 | 
			
		||||
          meta_output->suggested_y = output_kms->suggested_y;
 | 
			
		||||
          meta_output->hotplug_mode_update = output_kms->hotplug_mode_update;
 | 
			
		||||
          
 | 
			
		||||
          find_properties (manager_kms, output_kms);
 | 
			
		||||
 | 
			
		||||
          edid = read_output_edid (manager_kms, meta_output);
 | 
			
		||||
          meta_output_parse_edid (meta_output, edid);
 | 
			
		||||
          g_bytes_unref (edid);
 | 
			
		||||
@@ -837,8 +578,6 @@ meta_monitor_manager_kms_read_current (MetaMonitorManager *manager)
 | 
			
		||||
 | 
			
		||||
          meta_output->scale = get_output_scale (manager, meta_output);
 | 
			
		||||
 | 
			
		||||
          output_get_tile_info (manager_kms, meta_output);
 | 
			
		||||
 | 
			
		||||
          /* FIXME: backlight is a very driver specific thing unfortunately,
 | 
			
		||||
             every DDX does its own thing, and the dumb KMS API does not include it.
 | 
			
		||||
 | 
			
		||||
@@ -984,9 +723,8 @@ meta_monitor_manager_kms_set_power_save_mode (MetaMonitorManager *manager,
 | 
			
		||||
 | 
			
		||||
      if (output_kms->dpms_prop_id != 0)
 | 
			
		||||
        {
 | 
			
		||||
          int ok = drmModeObjectSetProperty (manager_kms->fd, meta_output->winsys_id,
 | 
			
		||||
                                             DRM_MODE_OBJECT_CONNECTOR,
 | 
			
		||||
                                             output_kms->dpms_prop_id, state);
 | 
			
		||||
          int ok = drmModeConnectorSetProperty(manager_kms->fd, meta_output->winsys_id,
 | 
			
		||||
                                               output_kms->dpms_prop_id, state);
 | 
			
		||||
 | 
			
		||||
          if (ok < 0)
 | 
			
		||||
            meta_warning ("Failed to set power save mode for output %s: %s\n",
 | 
			
		||||
@@ -1010,48 +748,6 @@ crtc_free (CoglKmsCrtc *crtc)
 | 
			
		||||
  g_slice_free (CoglKmsCrtc, crtc);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
set_underscan (MetaMonitorManagerKms *manager_kms,
 | 
			
		||||
               MetaOutput *output)
 | 
			
		||||
{
 | 
			
		||||
  if (!output->crtc)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  MetaCRTC *crtc = output->crtc;
 | 
			
		||||
  MetaCRTCKms *crtc_kms = crtc->driver_private;
 | 
			
		||||
  if (!crtc_kms->underscan_prop_id)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  if (output->is_underscanning)
 | 
			
		||||
    {
 | 
			
		||||
      drmModeObjectSetProperty (manager_kms->fd, crtc->crtc_id,
 | 
			
		||||
                                DRM_MODE_OBJECT_CRTC,
 | 
			
		||||
                                crtc_kms->underscan_prop_id, (uint64_t) 1);
 | 
			
		||||
 | 
			
		||||
      if (crtc_kms->underscan_hborder_prop_id)
 | 
			
		||||
        {
 | 
			
		||||
          uint64_t value = crtc->current_mode->width * 0.05;
 | 
			
		||||
          drmModeObjectSetProperty (manager_kms->fd, crtc->crtc_id,
 | 
			
		||||
                                    DRM_MODE_OBJECT_CRTC,
 | 
			
		||||
                                    crtc_kms->underscan_hborder_prop_id, value);
 | 
			
		||||
        }
 | 
			
		||||
      if (crtc_kms->underscan_vborder_prop_id)
 | 
			
		||||
        {
 | 
			
		||||
          uint64_t value = crtc->current_mode->height * 0.05;
 | 
			
		||||
          drmModeObjectSetProperty (manager_kms->fd, crtc->crtc_id,
 | 
			
		||||
                                    DRM_MODE_OBJECT_CRTC,
 | 
			
		||||
                                    crtc_kms->underscan_vborder_prop_id, value);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      drmModeObjectSetProperty (manager_kms->fd, crtc->crtc_id,
 | 
			
		||||
                                DRM_MODE_OBJECT_CRTC,
 | 
			
		||||
                                crtc_kms->underscan_prop_id, (uint64_t) 0);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
meta_monitor_manager_kms_apply_configuration (MetaMonitorManager *manager,
 | 
			
		||||
                                              MetaCRTCInfo       **crtcs,
 | 
			
		||||
@@ -1059,7 +755,6 @@ meta_monitor_manager_kms_apply_configuration (MetaMonitorManager *manager,
 | 
			
		||||
                                              MetaOutputInfo     **outputs,
 | 
			
		||||
                                              unsigned int         n_outputs)
 | 
			
		||||
{
 | 
			
		||||
  MetaMonitorManagerKms *manager_kms = META_MONITOR_MANAGER_KMS (manager);
 | 
			
		||||
  ClutterBackend *backend;
 | 
			
		||||
  CoglContext *cogl_context;
 | 
			
		||||
  CoglDisplay *cogl_display;
 | 
			
		||||
@@ -1075,7 +770,6 @@ meta_monitor_manager_kms_apply_configuration (MetaMonitorManager *manager,
 | 
			
		||||
    {
 | 
			
		||||
      MetaCRTCInfo *crtc_info = crtcs[i];
 | 
			
		||||
      MetaCRTC *crtc = crtc_info->crtc;
 | 
			
		||||
      MetaCRTCKms *crtc_kms = crtc->driver_private;
 | 
			
		||||
      CoglKmsCrtc *cogl_crtc;
 | 
			
		||||
 | 
			
		||||
      crtc->is_dirty = TRUE;
 | 
			
		||||
@@ -1148,13 +842,6 @@ meta_monitor_manager_kms_apply_configuration (MetaMonitorManager *manager,
 | 
			
		||||
          crtc->current_mode = mode;
 | 
			
		||||
          crtc->transform = crtc_info->transform;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      if (crtc->all_transforms & (1 << crtc->transform))
 | 
			
		||||
        drmModeObjectSetProperty (manager_kms->fd,
 | 
			
		||||
                                  crtc_kms->primary_plane_id,
 | 
			
		||||
                                  DRM_MODE_OBJECT_PLANE,
 | 
			
		||||
                                  crtc_kms->rotation_prop_id,
 | 
			
		||||
                                  crtc_kms->rotation_map[crtc->transform]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Disable CRTCs not mentioned in the list (they have is_dirty == FALSE,
 | 
			
		||||
@@ -1213,9 +900,6 @@ meta_monitor_manager_kms_apply_configuration (MetaMonitorManager *manager,
 | 
			
		||||
 | 
			
		||||
      output->is_primary = output_info->is_primary;
 | 
			
		||||
      output->is_presentation = output_info->is_presentation;
 | 
			
		||||
      output->is_underscanning = output_info->is_underscanning;
 | 
			
		||||
 | 
			
		||||
      set_underscan (manager_kms, output);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Disable outputs not mentioned in the list */
 | 
			
		||||
@@ -1307,8 +991,6 @@ meta_monitor_manager_kms_init (MetaMonitorManagerKms *manager_kms)
 | 
			
		||||
 | 
			
		||||
  manager_kms->fd = cogl_kms_renderer_get_kms_fd (cogl_renderer);
 | 
			
		||||
 | 
			
		||||
  drmSetClientCap (manager_kms->fd, DRM_CLIENT_CAP_UNIVERSAL_PLANES, 1);
 | 
			
		||||
 | 
			
		||||
  const char *subsystems[2] = { "drm", NULL };
 | 
			
		||||
  manager_kms->udev = g_udev_client_new (subsystems);
 | 
			
		||||
  g_signal_connect (manager_kms->udev, "uevent",
 | 
			
		||||
 
 | 
			
		||||
@@ -40,24 +40,12 @@
 | 
			
		||||
#include "meta-idle-monitor-xsync.h"
 | 
			
		||||
#include "meta-monitor-manager-xrandr.h"
 | 
			
		||||
#include "backends/meta-monitor-manager-dummy.h"
 | 
			
		||||
#include "backends/x11/nested/meta-cursor-renderer-x11-nested.h"
 | 
			
		||||
#include "meta-cursor-renderer-x11.h"
 | 
			
		||||
#ifdef HAVE_WAYLAND
 | 
			
		||||
#include "wayland/meta-wayland.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <meta/util.h>
 | 
			
		||||
#include "display-private.h"
 | 
			
		||||
#include "compositor/compositor-private.h"
 | 
			
		||||
 | 
			
		||||
typedef enum {
 | 
			
		||||
  /* We're a traditional CM running under the host. */
 | 
			
		||||
  META_BACKEND_X11_MODE_COMPOSITOR,
 | 
			
		||||
 | 
			
		||||
  /* We're a nested X11 client */
 | 
			
		||||
  META_BACKEND_X11_MODE_NESTED,
 | 
			
		||||
} MetaBackendX11Mode;
 | 
			
		||||
 | 
			
		||||
struct _MetaBackendX11Private
 | 
			
		||||
{
 | 
			
		||||
  /* The host X11 display */
 | 
			
		||||
@@ -65,8 +53,6 @@ struct _MetaBackendX11Private
 | 
			
		||||
  xcb_connection_t *xcb;
 | 
			
		||||
  GSource *source;
 | 
			
		||||
 | 
			
		||||
  MetaBackendX11Mode mode;
 | 
			
		||||
 | 
			
		||||
  int xsync_event_base;
 | 
			
		||||
  int xsync_error_base;
 | 
			
		||||
 | 
			
		||||
@@ -82,7 +68,6 @@ struct _MetaBackendX11Private
 | 
			
		||||
  gchar *keymap_layouts;
 | 
			
		||||
  gchar *keymap_variants;
 | 
			
		||||
  gchar *keymap_options;
 | 
			
		||||
  int locked_group;
 | 
			
		||||
};
 | 
			
		||||
typedef struct _MetaBackendX11Private MetaBackendX11Private;
 | 
			
		||||
 | 
			
		||||
@@ -117,7 +102,7 @@ translate_device_event (MetaBackendX11 *x11,
 | 
			
		||||
      /* This codepath should only ever trigger as an X11 compositor,
 | 
			
		||||
       * and never under nested, as under nested all backend events
 | 
			
		||||
       * should be reported with respect to the stage window. */
 | 
			
		||||
      g_assert (priv->mode == META_BACKEND_X11_MODE_COMPOSITOR);
 | 
			
		||||
      g_assert (!meta_is_wayland_compositor ());
 | 
			
		||||
 | 
			
		||||
      device_event->event = stage_window;
 | 
			
		||||
 | 
			
		||||
@@ -148,8 +133,6 @@ static void
 | 
			
		||||
translate_crossing_event (MetaBackendX11 *x11,
 | 
			
		||||
                          XIEnterEvent   *enter_event)
 | 
			
		||||
{
 | 
			
		||||
  MetaBackendX11Private *priv = meta_backend_x11_get_instance_private (x11);
 | 
			
		||||
 | 
			
		||||
  /* Throw out weird events generated by grabs. */
 | 
			
		||||
  if (enter_event->mode == XINotifyGrab ||
 | 
			
		||||
      enter_event->mode == XINotifyUngrab)
 | 
			
		||||
@@ -158,14 +141,7 @@ translate_crossing_event (MetaBackendX11 *x11,
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  Window stage_window = meta_backend_x11_get_xwindow (x11);
 | 
			
		||||
  if (enter_event->event != stage_window &&
 | 
			
		||||
      priv->mode == META_BACKEND_X11_MODE_COMPOSITOR)
 | 
			
		||||
    {
 | 
			
		||||
      enter_event->event = meta_backend_x11_get_xwindow (x11);
 | 
			
		||||
      enter_event->event_x = enter_event->root_x;
 | 
			
		||||
      enter_event->event_y = enter_event->root_y;
 | 
			
		||||
    }
 | 
			
		||||
  enter_event->event = meta_backend_x11_get_xwindow (x11);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -274,47 +250,20 @@ handle_host_xevent (MetaBackend *backend,
 | 
			
		||||
      }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (priv->mode == META_BACKEND_X11_MODE_NESTED && event->type == FocusIn)
 | 
			
		||||
    {
 | 
			
		||||
#ifdef HAVE_WAYLAND
 | 
			
		||||
      Window xwin = meta_backend_x11_get_xwindow(x11);
 | 
			
		||||
      XEvent xev;
 | 
			
		||||
 | 
			
		||||
      if (event->xfocus.window == xwin)
 | 
			
		||||
        {
 | 
			
		||||
          /* Since we've selected for KeymapStateMask, every FocusIn is followed immediately
 | 
			
		||||
           * by a KeymapNotify event */
 | 
			
		||||
          XMaskEvent(priv->xdisplay, KeymapStateMask, &xev);
 | 
			
		||||
          MetaWaylandCompositor *compositor = meta_wayland_compositor_get_default ();
 | 
			
		||||
          meta_wayland_compositor_update_key_state (compositor, xev.xkeymap.key_vector, 32, 8);
 | 
			
		||||
        }
 | 
			
		||||
#else
 | 
			
		||||
      g_assert_not_reached ();
 | 
			
		||||
#endif
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (event->type == (priv->xsync_event_base + XSyncAlarmNotify))
 | 
			
		||||
    handle_alarm_notify (backend, event);
 | 
			
		||||
 | 
			
		||||
  if (event->type == priv->xkb_event_base)
 | 
			
		||||
    {
 | 
			
		||||
      XkbEvent *xkb_ev = (XkbEvent *) event;
 | 
			
		||||
      XkbAnyEvent *xkb_ev = (XkbAnyEvent *) event;
 | 
			
		||||
 | 
			
		||||
      if (xkb_ev->any.device == META_VIRTUAL_CORE_KEYBOARD_ID)
 | 
			
		||||
      if (xkb_ev->device == META_VIRTUAL_CORE_KEYBOARD_ID)
 | 
			
		||||
        {
 | 
			
		||||
          switch (xkb_ev->any.xkb_type)
 | 
			
		||||
          switch (xkb_ev->xkb_type)
 | 
			
		||||
            {
 | 
			
		||||
            case XkbNewKeyboardNotify:
 | 
			
		||||
            case XkbMapNotify:
 | 
			
		||||
              keymap_changed (backend);
 | 
			
		||||
              break;
 | 
			
		||||
            case XkbStateNotify:
 | 
			
		||||
              if (xkb_ev->state.changed & XkbGroupLockMask)
 | 
			
		||||
                {
 | 
			
		||||
                  if (priv->locked_group != xkb_ev->state.locked_group)
 | 
			
		||||
                    XkbLockGroup (priv->xdisplay, XkbUseCoreKbd, priv->locked_group);
 | 
			
		||||
                }
 | 
			
		||||
              break;
 | 
			
		||||
            default:
 | 
			
		||||
              break;
 | 
			
		||||
            }
 | 
			
		||||
@@ -450,7 +399,6 @@ meta_backend_x11_post_init (MetaBackend *backend)
 | 
			
		||||
  MetaBackendX11 *x11 = META_BACKEND_X11 (backend);
 | 
			
		||||
  MetaBackendX11Private *priv = meta_backend_x11_get_instance_private (x11);
 | 
			
		||||
  int major, minor;
 | 
			
		||||
  gboolean has_xi = FALSE;
 | 
			
		||||
 | 
			
		||||
  priv->xdisplay = clutter_x11_get_default_display ();
 | 
			
		||||
 | 
			
		||||
@@ -460,27 +408,29 @@ meta_backend_x11_post_init (MetaBackend *backend)
 | 
			
		||||
      !XSyncInitialize (priv->xdisplay, &major, &minor))
 | 
			
		||||
    meta_fatal ("Could not initialize XSync");
 | 
			
		||||
 | 
			
		||||
  if (XQueryExtension (priv->xdisplay,
 | 
			
		||||
                       "XInputExtension",
 | 
			
		||||
                       &priv->xinput_opcode,
 | 
			
		||||
                       &priv->xinput_error_base,
 | 
			
		||||
                       &priv->xinput_event_base))
 | 
			
		||||
    {
 | 
			
		||||
      major = 2; minor = 3;
 | 
			
		||||
      if (XIQueryVersion (priv->xdisplay, &major, &minor) == Success)
 | 
			
		||||
        {
 | 
			
		||||
          int version = (major * 10) + minor;
 | 
			
		||||
          if (version >= 22)
 | 
			
		||||
            has_xi = TRUE;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
  {
 | 
			
		||||
    int major = 2, minor = 3;
 | 
			
		||||
    gboolean has_xi = FALSE;
 | 
			
		||||
 | 
			
		||||
  if (!has_xi)
 | 
			
		||||
    meta_fatal ("X server doesn't have the XInput extension, version 2.2 or newer\n");
 | 
			
		||||
    if (XQueryExtension (priv->xdisplay,
 | 
			
		||||
                         "XInputExtension",
 | 
			
		||||
                         &priv->xinput_opcode,
 | 
			
		||||
                         &priv->xinput_error_base,
 | 
			
		||||
                         &priv->xinput_event_base))
 | 
			
		||||
      {
 | 
			
		||||
        if (XIQueryVersion (priv->xdisplay, &major, &minor) == Success)
 | 
			
		||||
          {
 | 
			
		||||
            int version = (major * 10) + minor;
 | 
			
		||||
            if (version >= 22)
 | 
			
		||||
              has_xi = TRUE;
 | 
			
		||||
          }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
  /* We only take the passive touch grab if we are a X11 compositor */
 | 
			
		||||
  if (priv->mode == META_BACKEND_X11_MODE_COMPOSITOR)
 | 
			
		||||
    take_touch_grab (backend);
 | 
			
		||||
    if (!has_xi)
 | 
			
		||||
      meta_fatal ("X server doesn't have the XInput extension, version 2.2 or newer\n");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  take_touch_grab (backend);
 | 
			
		||||
 | 
			
		||||
  priv->xcb = XGetXCBConnection (priv->xdisplay);
 | 
			
		||||
  if (!xkb_x11_setup_xkb_extension (priv->xcb,
 | 
			
		||||
@@ -511,37 +461,19 @@ meta_backend_x11_create_idle_monitor (MetaBackend *backend,
 | 
			
		||||
static MetaMonitorManager *
 | 
			
		||||
meta_backend_x11_create_monitor_manager (MetaBackend *backend)
 | 
			
		||||
{
 | 
			
		||||
  MetaBackendX11 *x11 = META_BACKEND_X11 (backend);
 | 
			
		||||
  MetaBackendX11Private *priv = meta_backend_x11_get_instance_private (x11);
 | 
			
		||||
  /* If we're a Wayland compositor using the X11 backend,
 | 
			
		||||
   * we're a nested configuration, so return the dummy
 | 
			
		||||
   * monitor setup. */
 | 
			
		||||
  if (meta_is_wayland_compositor ())
 | 
			
		||||
    return g_object_new (META_TYPE_MONITOR_MANAGER_DUMMY, NULL);
 | 
			
		||||
 | 
			
		||||
  switch (priv->mode)
 | 
			
		||||
    {
 | 
			
		||||
    case META_BACKEND_X11_MODE_COMPOSITOR:
 | 
			
		||||
      return g_object_new (META_TYPE_MONITOR_MANAGER_XRANDR, NULL);
 | 
			
		||||
    case META_BACKEND_X11_MODE_NESTED:
 | 
			
		||||
      return g_object_new (META_TYPE_MONITOR_MANAGER_DUMMY, NULL);
 | 
			
		||||
    default:
 | 
			
		||||
      g_assert_not_reached ();
 | 
			
		||||
    }
 | 
			
		||||
  return g_object_new (META_TYPE_MONITOR_MANAGER_XRANDR, NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static MetaCursorRenderer *
 | 
			
		||||
meta_backend_x11_create_cursor_renderer (MetaBackend *backend)
 | 
			
		||||
{
 | 
			
		||||
  MetaBackendX11 *x11 = META_BACKEND_X11 (backend);
 | 
			
		||||
  MetaBackendX11Private *priv = meta_backend_x11_get_instance_private (x11);
 | 
			
		||||
 | 
			
		||||
  switch (priv->mode)
 | 
			
		||||
    {
 | 
			
		||||
    case META_BACKEND_X11_MODE_COMPOSITOR:
 | 
			
		||||
      return g_object_new (META_TYPE_CURSOR_RENDERER_X11, NULL);
 | 
			
		||||
      break;
 | 
			
		||||
    case META_BACKEND_X11_MODE_NESTED:
 | 
			
		||||
      return g_object_new (META_TYPE_CURSOR_RENDERER_X11_NESTED, NULL);
 | 
			
		||||
      break;
 | 
			
		||||
    default:
 | 
			
		||||
      g_assert_not_reached ();
 | 
			
		||||
    }
 | 
			
		||||
  return g_object_new (META_TYPE_CURSOR_RENDERER_X11, NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
@@ -769,9 +701,6 @@ meta_backend_x11_get_keymap (MetaBackend *backend)
 | 
			
		||||
                                                     priv->xcb,
 | 
			
		||||
                                                     xkb_x11_get_core_keyboard_device_id (priv->xcb),
 | 
			
		||||
                                                     XKB_KEYMAP_COMPILE_NO_FLAGS);
 | 
			
		||||
      if (priv->keymap == NULL)
 | 
			
		||||
        priv->keymap = xkb_keymap_new_from_names (context, NULL, XKB_KEYMAP_COMPILE_NO_FLAGS);
 | 
			
		||||
 | 
			
		||||
      xkb_context_unref (context);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -785,7 +714,6 @@ meta_backend_x11_lock_layout_group (MetaBackend *backend,
 | 
			
		||||
  MetaBackendX11 *x11 = META_BACKEND_X11 (backend);
 | 
			
		||||
  MetaBackendX11Private *priv = meta_backend_x11_get_instance_private (x11);
 | 
			
		||||
 | 
			
		||||
  priv->locked_group = idx;
 | 
			
		||||
  XkbLockGroup (priv->xdisplay, XkbUseCoreKbd, idx);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -793,10 +721,7 @@ static void
 | 
			
		||||
meta_backend_x11_update_screen_size (MetaBackend *backend,
 | 
			
		||||
                                     int width, int height)
 | 
			
		||||
{
 | 
			
		||||
  MetaBackendX11 *x11 = META_BACKEND_X11 (backend);
 | 
			
		||||
  MetaBackendX11Private *priv = meta_backend_x11_get_instance_private (x11);
 | 
			
		||||
 | 
			
		||||
  if (priv->mode == META_BACKEND_X11_MODE_NESTED)
 | 
			
		||||
  if (meta_is_wayland_compositor ())
 | 
			
		||||
    {
 | 
			
		||||
      /* For a nested wayland session, we want to go through Clutter to update the
 | 
			
		||||
       * toplevel window size, rather than doing it directly.
 | 
			
		||||
@@ -805,6 +730,8 @@ meta_backend_x11_update_screen_size (MetaBackend *backend,
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      MetaBackendX11 *x11 = META_BACKEND_X11 (backend);
 | 
			
		||||
      MetaBackendX11Private *priv = meta_backend_x11_get_instance_private (x11);
 | 
			
		||||
      Window xwin = meta_backend_x11_get_xwindow (x11);
 | 
			
		||||
      XResizeWindow (priv->xdisplay, xwin, width, height);
 | 
			
		||||
    }
 | 
			
		||||
@@ -828,36 +755,10 @@ meta_backend_x11_select_stage_events (MetaBackend *backend)
 | 
			
		||||
  XISetMask (mask.mask, XI_FocusIn);
 | 
			
		||||
  XISetMask (mask.mask, XI_FocusOut);
 | 
			
		||||
  XISetMask (mask.mask, XI_Motion);
 | 
			
		||||
 | 
			
		||||
  if (priv->mode == META_BACKEND_X11_MODE_NESTED)
 | 
			
		||||
    {
 | 
			
		||||
      /* When we're an X11 compositor, we can't take these events or else
 | 
			
		||||
       * replaying events from our passive root window grab will cause
 | 
			
		||||
       * them to come back to us.
 | 
			
		||||
       *
 | 
			
		||||
       * When we're a nested application, we want to behave like any other
 | 
			
		||||
       * application, so select these events like normal apps do.
 | 
			
		||||
       */
 | 
			
		||||
      XISetMask (mask.mask, XI_TouchBegin);
 | 
			
		||||
      XISetMask (mask.mask, XI_TouchEnd);
 | 
			
		||||
      XISetMask (mask.mask, XI_TouchUpdate);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  XIClearMask (mask.mask, XI_TouchBegin);
 | 
			
		||||
  XIClearMask (mask.mask, XI_TouchEnd);
 | 
			
		||||
  XIClearMask (mask.mask, XI_TouchUpdate);
 | 
			
		||||
  XISelectEvents (priv->xdisplay, xwin, &mask, 1);
 | 
			
		||||
 | 
			
		||||
  if (priv->mode == META_BACKEND_X11_MODE_NESTED)
 | 
			
		||||
    {
 | 
			
		||||
      /* We have no way of tracking key changes when the stage doesn't have
 | 
			
		||||
       * focus, so we select for KeymapStateMask so that we get a complete
 | 
			
		||||
       * dump of the keyboard state in a KeymapNotify event that immediately
 | 
			
		||||
       * follows each FocusIn (and EnterNotify, but we ignore that.)
 | 
			
		||||
       */
 | 
			
		||||
      XWindowAttributes xwa;
 | 
			
		||||
 | 
			
		||||
      XGetWindowAttributes(priv->xdisplay, xwin, &xwa);
 | 
			
		||||
      XSelectInput(priv->xdisplay, xwin,
 | 
			
		||||
                   xwa.your_event_mask | FocusChangeMask | KeymapStateMask);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -882,15 +783,8 @@ meta_backend_x11_class_init (MetaBackendX11Class *klass)
 | 
			
		||||
static void
 | 
			
		||||
meta_backend_x11_init (MetaBackendX11 *x11)
 | 
			
		||||
{
 | 
			
		||||
  MetaBackendX11Private *priv = meta_backend_x11_get_instance_private (x11);
 | 
			
		||||
 | 
			
		||||
  /* We do X11 event retrieval ourselves */
 | 
			
		||||
  clutter_x11_disable_event_retrieval ();
 | 
			
		||||
 | 
			
		||||
  if (meta_is_wayland_compositor ())
 | 
			
		||||
    priv->mode = META_BACKEND_X11_MODE_NESTED;
 | 
			
		||||
  else
 | 
			
		||||
    priv->mode = META_BACKEND_X11_MODE_COMPOSITOR;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Display *
 | 
			
		||||
 
 | 
			
		||||
@@ -107,7 +107,6 @@ meta_barrier_impl_x11_new (MetaBarrier *barrier)
 | 
			
		||||
  MetaDisplay *display = barrier->priv->display;
 | 
			
		||||
  Display *dpy;
 | 
			
		||||
  Window root;
 | 
			
		||||
  unsigned int allowed_motion_dirs;
 | 
			
		||||
 | 
			
		||||
  if (display == NULL)
 | 
			
		||||
    {
 | 
			
		||||
@@ -122,14 +121,12 @@ meta_barrier_impl_x11_new (MetaBarrier *barrier)
 | 
			
		||||
  dpy = display->xdisplay;
 | 
			
		||||
  root = DefaultRootWindow (dpy);
 | 
			
		||||
 | 
			
		||||
  allowed_motion_dirs =
 | 
			
		||||
    meta_border_get_allows_directions (&barrier->priv->border);
 | 
			
		||||
  priv->xbarrier = XFixesCreatePointerBarrier (dpy, root,
 | 
			
		||||
                                               barrier->priv->border.line.a.x,
 | 
			
		||||
                                               barrier->priv->border.line.a.y,
 | 
			
		||||
                                               barrier->priv->border.line.b.x,
 | 
			
		||||
                                               barrier->priv->border.line.b.y,
 | 
			
		||||
                                               allowed_motion_dirs,
 | 
			
		||||
                                               barrier->priv->x1,
 | 
			
		||||
                                               barrier->priv->y1,
 | 
			
		||||
                                               barrier->priv->x2,
 | 
			
		||||
                                               barrier->priv->y2,
 | 
			
		||||
                                               barrier->priv->directions,
 | 
			
		||||
                                               0, NULL);
 | 
			
		||||
 | 
			
		||||
  g_hash_table_insert (display->xids, &priv->xbarrier, barrier);
 | 
			
		||||
 
 | 
			
		||||
@@ -40,29 +40,25 @@ typedef struct _MetaCursorRendererX11Private MetaCursorRendererX11Private;
 | 
			
		||||
G_DEFINE_TYPE_WITH_PRIVATE (MetaCursorRendererX11, meta_cursor_renderer_x11, META_TYPE_CURSOR_RENDERER);
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
meta_cursor_renderer_x11_update_cursor (MetaCursorRenderer *renderer,
 | 
			
		||||
                                        MetaCursorSprite   *cursor_sprite)
 | 
			
		||||
meta_cursor_renderer_x11_update_cursor (MetaCursorRenderer *renderer)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorRendererX11 *x11 = META_CURSOR_RENDERER_X11 (renderer);
 | 
			
		||||
  MetaCursorRendererX11Private *priv = meta_cursor_renderer_x11_get_instance_private (x11);
 | 
			
		||||
 | 
			
		||||
  MetaBackendX11 *backend = META_BACKEND_X11 (meta_get_backend ());
 | 
			
		||||
  Window xwindow = meta_backend_x11_get_xwindow (backend);
 | 
			
		||||
  Display *xdisplay = meta_backend_x11_get_xdisplay (backend);
 | 
			
		||||
 | 
			
		||||
  if (xwindow == None)
 | 
			
		||||
    {
 | 
			
		||||
      if (cursor_sprite)
 | 
			
		||||
        meta_cursor_sprite_realize_texture (cursor_sprite);
 | 
			
		||||
      return FALSE;
 | 
			
		||||
    }
 | 
			
		||||
    return FALSE;
 | 
			
		||||
 | 
			
		||||
  Display *xdisplay = meta_backend_x11_get_xdisplay (backend);
 | 
			
		||||
 | 
			
		||||
  MetaCursorReference *cursor_ref = meta_cursor_renderer_get_cursor (renderer);
 | 
			
		||||
  gboolean has_server_cursor = FALSE;
 | 
			
		||||
 | 
			
		||||
  if (cursor_sprite)
 | 
			
		||||
  if (cursor_ref)
 | 
			
		||||
    {
 | 
			
		||||
      MetaCursor cursor = meta_cursor_sprite_get_meta_cursor (cursor_sprite);
 | 
			
		||||
 | 
			
		||||
      MetaCursor cursor = meta_cursor_reference_get_meta_cursor (cursor_ref);
 | 
			
		||||
      if (cursor != META_CURSOR_NONE)
 | 
			
		||||
        {
 | 
			
		||||
          Cursor xcursor = meta_cursor_create_x_cursor (xdisplay, cursor);
 | 
			
		||||
@@ -84,9 +80,6 @@ meta_cursor_renderer_x11_update_cursor (MetaCursorRenderer *renderer,
 | 
			
		||||
      priv->server_cursor_visible = has_server_cursor;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (!priv->server_cursor_visible && cursor_sprite)
 | 
			
		||||
    meta_cursor_sprite_realize_texture (cursor_sprite);
 | 
			
		||||
 | 
			
		||||
  return priv->server_cursor_visible;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -107,6 +107,20 @@ set_alarm_enabled (Display    *dpy,
 | 
			
		||||
  XSyncChangeAlarm (dpy, alarm, XSyncCAEvents, &attr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
check_x11_watch (gpointer data,
 | 
			
		||||
                 gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
  MetaIdleMonitorWatchXSync *watch_xsync = data;
 | 
			
		||||
  MetaIdleMonitorWatch *watch = (MetaIdleMonitorWatch *) watch_xsync;
 | 
			
		||||
  XSyncAlarm alarm = (XSyncAlarm) user_data;
 | 
			
		||||
 | 
			
		||||
  if (watch_xsync->xalarm != alarm)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  _meta_idle_monitor_watch_fire (watch);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static char *
 | 
			
		||||
counter_name_for_device (int device_id)
 | 
			
		||||
{
 | 
			
		||||
@@ -313,38 +327,13 @@ meta_idle_monitor_xsync_init (MetaIdleMonitorXSync *monitor_xsync)
 | 
			
		||||
  monitor_xsync->alarms = g_hash_table_new (NULL, NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
check_x11_watches (MetaIdleMonitor *monitor,
 | 
			
		||||
                   XSyncAlarm       alarm)
 | 
			
		||||
{
 | 
			
		||||
  GList *node, *watch_ids;
 | 
			
		||||
 | 
			
		||||
  /* we get the keys and do explicit look ups in case
 | 
			
		||||
   * an early iteration of the loop ends up leading
 | 
			
		||||
   * to watches from later iterations getting invalidated
 | 
			
		||||
   */
 | 
			
		||||
  watch_ids = g_hash_table_get_keys (monitor->watches);
 | 
			
		||||
 | 
			
		||||
  for (node = watch_ids; node != NULL; node = node->next)
 | 
			
		||||
    {
 | 
			
		||||
      guint watch_id = GPOINTER_TO_UINT (node->data);
 | 
			
		||||
      MetaIdleMonitorWatchXSync *watch;
 | 
			
		||||
 | 
			
		||||
      watch = g_hash_table_lookup (monitor->watches, GUINT_TO_POINTER (watch_id));
 | 
			
		||||
 | 
			
		||||
      if (watch && watch->xalarm == alarm)
 | 
			
		||||
        _meta_idle_monitor_watch_fire ((MetaIdleMonitorWatch *) watch);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  g_list_free (watch_ids);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
meta_idle_monitor_xsync_handle_xevent (MetaIdleMonitor       *monitor,
 | 
			
		||||
                                       XSyncAlarmNotifyEvent *alarm_event)
 | 
			
		||||
{
 | 
			
		||||
  MetaIdleMonitorXSync *monitor_xsync = META_IDLE_MONITOR_XSYNC (monitor);
 | 
			
		||||
  XSyncAlarm alarm;
 | 
			
		||||
  GList *watches;
 | 
			
		||||
  gboolean has_alarm;
 | 
			
		||||
 | 
			
		||||
  if (alarm_event->state != XSyncAlarmActive)
 | 
			
		||||
@@ -369,5 +358,10 @@ meta_idle_monitor_xsync_handle_xevent (MetaIdleMonitor       *monitor,
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (has_alarm)
 | 
			
		||||
    check_x11_watches (monitor, alarm);
 | 
			
		||||
    {
 | 
			
		||||
      watches = g_hash_table_get_values (monitor->watches);
 | 
			
		||||
 | 
			
		||||
      g_list_foreach (watches, check_x11_watch, (gpointer) alarm);
 | 
			
		||||
      g_list_free (watches);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -26,7 +26,6 @@
 | 
			
		||||
#include "meta-backend-x11.h"
 | 
			
		||||
#include "meta-input-settings-x11.h"
 | 
			
		||||
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <gdk/gdkx.h>
 | 
			
		||||
#include <X11/Xatom.h>
 | 
			
		||||
#include <X11/extensions/XInput2.h>
 | 
			
		||||
@@ -36,41 +35,6 @@
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE (MetaInputSettingsX11, meta_input_settings_x11, META_TYPE_INPUT_SETTINGS)
 | 
			
		||||
 | 
			
		||||
static void *
 | 
			
		||||
get_property (ClutterInputDevice *device,
 | 
			
		||||
              const gchar        *property,
 | 
			
		||||
              Atom                type,
 | 
			
		||||
              int                 format,
 | 
			
		||||
              gulong              nitems)
 | 
			
		||||
{
 | 
			
		||||
  MetaBackend *backend = meta_get_backend ();
 | 
			
		||||
  Display *xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend));
 | 
			
		||||
  gulong nitems_ret, bytes_after_ret;
 | 
			
		||||
  int rc, device_id, format_ret;
 | 
			
		||||
  Atom property_atom, type_ret;
 | 
			
		||||
  guchar *data_ret = NULL;
 | 
			
		||||
 | 
			
		||||
  property_atom = XInternAtom (xdisplay, property, True);
 | 
			
		||||
  if (!property_atom)
 | 
			
		||||
    return NULL;
 | 
			
		||||
 | 
			
		||||
  device_id = clutter_input_device_get_device_id (device);
 | 
			
		||||
 | 
			
		||||
  rc = XIGetProperty (xdisplay, device_id, property_atom,
 | 
			
		||||
                      0, 10, False, type, &type_ret, &format_ret,
 | 
			
		||||
                      &nitems_ret, &bytes_after_ret, &data_ret);
 | 
			
		||||
  if (rc == Success && type_ret == type && format_ret == format && nitems_ret >= nitems)
 | 
			
		||||
    {
 | 
			
		||||
      if (nitems_ret > nitems)
 | 
			
		||||
        g_warning ("Property '%s' for device '%s' returned %lu items, expected %lu",
 | 
			
		||||
                   property, clutter_input_device_get_device_name (device), nitems_ret, nitems);
 | 
			
		||||
      return data_ret;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  meta_XFree (data_ret);
 | 
			
		||||
  return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
change_property (ClutterInputDevice *device,
 | 
			
		||||
                 const gchar        *property,
 | 
			
		||||
@@ -81,23 +45,23 @@ change_property (ClutterInputDevice *device,
 | 
			
		||||
{
 | 
			
		||||
  MetaBackend *backend = meta_get_backend ();
 | 
			
		||||
  Display *xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend));
 | 
			
		||||
  int device_id;
 | 
			
		||||
  Atom property_atom;
 | 
			
		||||
  gulong nitems_ret, bytes_after_ret;
 | 
			
		||||
  int rc, device_id, format_ret;
 | 
			
		||||
  Atom property_atom, type_ret;
 | 
			
		||||
  guchar *data_ret;
 | 
			
		||||
 | 
			
		||||
  property_atom = XInternAtom (xdisplay, property, True);
 | 
			
		||||
  if (!property_atom)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  property_atom = XInternAtom (xdisplay, property, False);
 | 
			
		||||
  device_id = clutter_input_device_get_device_id (device);
 | 
			
		||||
 | 
			
		||||
  data_ret = get_property (device, property, type, format, nitems);
 | 
			
		||||
  if (!data_ret)
 | 
			
		||||
    return;
 | 
			
		||||
  rc = XIGetProperty (xdisplay, device_id, property_atom,
 | 
			
		||||
                      0, 0, False, type, &type_ret, &format_ret,
 | 
			
		||||
                      &nitems_ret, &bytes_after_ret, &data_ret);
 | 
			
		||||
 | 
			
		||||
  XIChangeProperty (xdisplay, device_id, property_atom, type,
 | 
			
		||||
                    format, XIPropModeReplace, data, nitems);
 | 
			
		||||
  meta_XFree (data_ret);
 | 
			
		||||
 | 
			
		||||
  if (rc == Success && type_ret == type && format_ret == format)
 | 
			
		||||
    XIChangeProperty (xdisplay, device_id, property_atom, type,
 | 
			
		||||
                      format, XIPropModeReplace, data, nitems);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -106,12 +70,6 @@ meta_input_settings_x11_set_send_events (MetaInputSettings        *settings,
 | 
			
		||||
                                         GDesktopDeviceSendEvents  mode)
 | 
			
		||||
{
 | 
			
		||||
  guchar values[2] = { 0 }; /* disabled, disabled-on-external-mouse */
 | 
			
		||||
  guchar *available;
 | 
			
		||||
 | 
			
		||||
  available = get_property (device, "libinput Send Events Modes Available",
 | 
			
		||||
                            XA_INTEGER, 8, 2);
 | 
			
		||||
  if (!available)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  switch (mode)
 | 
			
		||||
    {
 | 
			
		||||
@@ -125,14 +83,8 @@ meta_input_settings_x11_set_send_events (MetaInputSettings        *settings,
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if ((values[0] && !available[0]) || (values[1] && !available[1]))
 | 
			
		||||
    g_warning ("Device '%s' does not support sendevents mode %d\n",
 | 
			
		||||
               clutter_input_device_get_device_name (device), mode);
 | 
			
		||||
  else
 | 
			
		||||
    change_property (device, "libinput Send Events Mode Enabled",
 | 
			
		||||
                     XA_INTEGER, 8, &values, 2);
 | 
			
		||||
 | 
			
		||||
  meta_XFree (available);
 | 
			
		||||
  change_property (device, "libinput Send Events Mode Enabled",
 | 
			
		||||
                   XA_INTEGER, 8, &values, 2);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -199,35 +151,28 @@ meta_input_settings_x11_set_invert_scroll (MetaInputSettings  *settings,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
meta_input_settings_x11_set_edge_scroll (MetaInputSettings            *settings,
 | 
			
		||||
                                         ClutterInputDevice           *device,
 | 
			
		||||
                                         gboolean                      edge_scroll_enabled)
 | 
			
		||||
meta_input_settings_x11_set_scroll_method (MetaInputSettings            *settings,
 | 
			
		||||
                                           ClutterInputDevice           *device,
 | 
			
		||||
                                           GDesktopTouchpadScrollMethod  mode)
 | 
			
		||||
{
 | 
			
		||||
  guchar values[3] = { 0 }; /* 2fg, edge, button. The last value is unused */
 | 
			
		||||
  guchar *available;
 | 
			
		||||
 | 
			
		||||
  available = get_property (device, "libinput Scroll Methods Available",
 | 
			
		||||
                            XA_INTEGER, 8, 3);
 | 
			
		||||
  if (!available)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  if (available[0])
 | 
			
		||||
    {
 | 
			
		||||
      values[0] = 1;
 | 
			
		||||
    }
 | 
			
		||||
  else if (available[1] && edge_scroll_enabled)
 | 
			
		||||
  switch (mode)
 | 
			
		||||
    {
 | 
			
		||||
    case G_DESKTOP_TOUCHPAD_SCROLL_METHOD_DISABLED:
 | 
			
		||||
      break;
 | 
			
		||||
    case G_DESKTOP_TOUCHPAD_SCROLL_METHOD_EDGE_SCROLLING:
 | 
			
		||||
      values[1] = 1;
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      /* Disabled */
 | 
			
		||||
      break;
 | 
			
		||||
    case G_DESKTOP_TOUCHPAD_SCROLL_METHOD_TWO_FINGER_SCROLLING:
 | 
			
		||||
      values[0] = 1;
 | 
			
		||||
      break;
 | 
			
		||||
    default:
 | 
			
		||||
      g_assert_not_reached ();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  change_property (device, "libinput Scroll Method Enabled",
 | 
			
		||||
                   XA_INTEGER, 8, &values, 3);
 | 
			
		||||
 | 
			
		||||
  meta_XFree (available);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -235,7 +180,7 @@ meta_input_settings_x11_set_scroll_button (MetaInputSettings  *settings,
 | 
			
		||||
                                           ClutterInputDevice *device,
 | 
			
		||||
                                           guint               button)
 | 
			
		||||
{
 | 
			
		||||
  change_property (device, "libinput Button Scrolling Button",
 | 
			
		||||
  change_property (device, "libinput Scroll Method Enabled",
 | 
			
		||||
                   XA_INTEGER, 32, &button, 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -245,28 +190,16 @@ meta_input_settings_x11_set_click_method (MetaInputSettings           *settings,
 | 
			
		||||
                                          GDesktopTouchpadClickMethod  mode)
 | 
			
		||||
{
 | 
			
		||||
  guchar values[2] = { 0 }; /* buttonareas, clickfinger */
 | 
			
		||||
  guchar *defaults, *available;
 | 
			
		||||
 | 
			
		||||
  available = get_property (device, "libinput Click Methods Available",
 | 
			
		||||
                            XA_INTEGER, 8, 2);
 | 
			
		||||
  if (!available)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  switch (mode)
 | 
			
		||||
    {
 | 
			
		||||
    case G_DESKTOP_TOUCHPAD_CLICK_METHOD_DEFAULT:
 | 
			
		||||
      defaults = get_property (device, "libinput Click Method Enabled Default",
 | 
			
		||||
                               XA_INTEGER, 8, 2);
 | 
			
		||||
      if (!defaults)
 | 
			
		||||
        break;
 | 
			
		||||
      memcpy (values, defaults, 2);
 | 
			
		||||
      meta_XFree (defaults);
 | 
			
		||||
      break;
 | 
			
		||||
    case G_DESKTOP_TOUCHPAD_CLICK_METHOD_NONE:
 | 
			
		||||
      break;
 | 
			
		||||
    case G_DESKTOP_TOUCHPAD_CLICK_METHOD_AREAS:
 | 
			
		||||
      values[0] = 1;
 | 
			
		||||
      break;
 | 
			
		||||
    case G_DESKTOP_TOUCHPAD_CLICK_METHOD_DEFAULT:
 | 
			
		||||
      /* XXX: We can't be much smarter yet, x11 doesn't expose default settings */
 | 
			
		||||
    case G_DESKTOP_TOUCHPAD_CLICK_METHOD_FINGERS:
 | 
			
		||||
      values[1] = 1;
 | 
			
		||||
      break;
 | 
			
		||||
@@ -275,14 +208,8 @@ meta_input_settings_x11_set_click_method (MetaInputSettings           *settings,
 | 
			
		||||
      return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if ((values[0] && !available[0]) || (values[1] && !available[1]))
 | 
			
		||||
    g_warning ("Device '%s' does not support click method %d\n",
 | 
			
		||||
               clutter_input_device_get_device_name (device), mode);
 | 
			
		||||
  else
 | 
			
		||||
    change_property (device, "libinput Click Method Enabled",
 | 
			
		||||
                     XA_INTEGER, 8, &values, 2);
 | 
			
		||||
 | 
			
		||||
  meta_XFree(available);
 | 
			
		||||
  change_property (device, "libinput Click Method Enabled",
 | 
			
		||||
                   XA_INTEGER, 8, &values, 2);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -316,7 +243,7 @@ meta_input_settings_x11_class_init (MetaInputSettingsX11Class *klass)
 | 
			
		||||
  input_settings_class->set_left_handed = meta_input_settings_x11_set_left_handed;
 | 
			
		||||
  input_settings_class->set_tap_enabled = meta_input_settings_x11_set_tap_enabled;
 | 
			
		||||
  input_settings_class->set_invert_scroll = meta_input_settings_x11_set_invert_scroll;
 | 
			
		||||
  input_settings_class->set_edge_scroll = meta_input_settings_x11_set_edge_scroll;
 | 
			
		||||
  input_settings_class->set_scroll_method = meta_input_settings_x11_set_scroll_method;
 | 
			
		||||
  input_settings_class->set_scroll_button = meta_input_settings_x11_set_scroll_button;
 | 
			
		||||
  input_settings_class->set_click_method = meta_input_settings_x11_set_click_method;
 | 
			
		||||
  input_settings_class->set_keyboard_repeat = meta_input_settings_x11_set_keyboard_repeat;
 | 
			
		||||
 
 | 
			
		||||
@@ -58,7 +58,6 @@ struct _MetaMonitorManagerXrandr
 | 
			
		||||
  XRRScreenResources *resources;
 | 
			
		||||
  int rr_event_base;
 | 
			
		||||
  int rr_error_base;
 | 
			
		||||
  gboolean has_randr15;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _MetaMonitorManagerXrandrClass
 | 
			
		||||
@@ -195,10 +194,11 @@ static gboolean
 | 
			
		||||
output_get_boolean_property (MetaMonitorManagerXrandr *manager_xrandr,
 | 
			
		||||
                             MetaOutput *output, const char *propname)
 | 
			
		||||
{
 | 
			
		||||
  gboolean value = FALSE;
 | 
			
		||||
  Atom atom, actual_type;
 | 
			
		||||
  int actual_format;
 | 
			
		||||
  unsigned long nitems, bytes_after;
 | 
			
		||||
  g_autofree unsigned char *buffer = NULL;
 | 
			
		||||
  unsigned char *buffer;
 | 
			
		||||
 | 
			
		||||
  atom = XInternAtom (manager_xrandr->xdisplay, propname, False);
 | 
			
		||||
  XRRGetOutputProperty (manager_xrandr->xdisplay,
 | 
			
		||||
@@ -209,9 +209,13 @@ output_get_boolean_property (MetaMonitorManagerXrandr *manager_xrandr,
 | 
			
		||||
                        &nitems, &bytes_after, &buffer);
 | 
			
		||||
 | 
			
		||||
  if (actual_type != XA_CARDINAL || actual_format != 32 || nitems < 1)
 | 
			
		||||
    return FALSE;
 | 
			
		||||
    goto out;
 | 
			
		||||
 | 
			
		||||
  return ((int*)buffer)[0];
 | 
			
		||||
  value = ((int*)buffer)[0];
 | 
			
		||||
 | 
			
		||||
 out:
 | 
			
		||||
  XFree (buffer);
 | 
			
		||||
  return value;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
@@ -221,76 +225,6 @@ output_get_presentation_xrandr (MetaMonitorManagerXrandr *manager_xrandr,
 | 
			
		||||
  return output_get_boolean_property (manager_xrandr, output, "_MUTTER_PRESENTATION_OUTPUT");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
output_get_underscanning_xrandr (MetaMonitorManagerXrandr *manager_xrandr,
 | 
			
		||||
                                 MetaOutput               *output)
 | 
			
		||||
{
 | 
			
		||||
  Atom atom, actual_type;
 | 
			
		||||
  int actual_format;
 | 
			
		||||
  unsigned long nitems, bytes_after;
 | 
			
		||||
  g_autofree unsigned char *buffer = NULL;
 | 
			
		||||
  g_autofree char *str = NULL;
 | 
			
		||||
 | 
			
		||||
  atom = XInternAtom (manager_xrandr->xdisplay, "underscan", False);
 | 
			
		||||
  XRRGetOutputProperty (manager_xrandr->xdisplay,
 | 
			
		||||
                        (XID)output->winsys_id,
 | 
			
		||||
                        atom,
 | 
			
		||||
                        0, G_MAXLONG, False, False, XA_ATOM,
 | 
			
		||||
                        &actual_type, &actual_format,
 | 
			
		||||
                        &nitems, &bytes_after, &buffer);
 | 
			
		||||
 | 
			
		||||
  if (actual_type != XA_ATOM || actual_format != 32 || nitems < 1)
 | 
			
		||||
    return FALSE;
 | 
			
		||||
 | 
			
		||||
  str = XGetAtomName (manager_xrandr->xdisplay, *(Atom *)buffer);
 | 
			
		||||
  return (strcmp (str, "on") == 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
output_get_supports_underscanning_xrandr (MetaMonitorManagerXrandr *manager_xrandr,
 | 
			
		||||
                                          MetaOutput               *output)
 | 
			
		||||
{
 | 
			
		||||
  Atom atom, actual_type;
 | 
			
		||||
  int actual_format, i;
 | 
			
		||||
  unsigned long nitems, bytes_after;
 | 
			
		||||
  g_autofree unsigned char *buffer = NULL;
 | 
			
		||||
  XRRPropertyInfo *property_info;
 | 
			
		||||
  Atom *values;
 | 
			
		||||
  gboolean supports_underscanning = FALSE;
 | 
			
		||||
 | 
			
		||||
  atom = XInternAtom (manager_xrandr->xdisplay, "underscan", False);
 | 
			
		||||
  XRRGetOutputProperty (manager_xrandr->xdisplay,
 | 
			
		||||
                        (XID)output->winsys_id,
 | 
			
		||||
                        atom,
 | 
			
		||||
                        0, G_MAXLONG, False, False, XA_ATOM,
 | 
			
		||||
                        &actual_type, &actual_format,
 | 
			
		||||
                        &nitems, &bytes_after, &buffer);
 | 
			
		||||
 | 
			
		||||
  if (actual_type != XA_ATOM || actual_format != 32 || nitems < 1)
 | 
			
		||||
    return FALSE;
 | 
			
		||||
 | 
			
		||||
  property_info = XRRQueryOutputProperty (manager_xrandr->xdisplay,
 | 
			
		||||
                                          (XID) output->winsys_id,
 | 
			
		||||
                                          atom);
 | 
			
		||||
  values = (Atom *) property_info->values;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < property_info->num_values; i++)
 | 
			
		||||
    {
 | 
			
		||||
      /* The output supports underscanning if "on" is a valid value
 | 
			
		||||
       * for the underscan property.
 | 
			
		||||
       */
 | 
			
		||||
      char *name = XGetAtomName (manager_xrandr->xdisplay, values[i]);
 | 
			
		||||
      if (strcmp (name, "on") == 0)
 | 
			
		||||
        supports_underscanning = TRUE;
 | 
			
		||||
 | 
			
		||||
      XFree (name);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  XFree (property_info);
 | 
			
		||||
 | 
			
		||||
  return supports_underscanning;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int
 | 
			
		||||
normalize_backlight (MetaOutput *output,
 | 
			
		||||
                     int         hw_value)
 | 
			
		||||
@@ -307,7 +241,7 @@ output_get_backlight_xrandr (MetaMonitorManagerXrandr *manager_xrandr,
 | 
			
		||||
  Atom atom, actual_type;
 | 
			
		||||
  int actual_format;
 | 
			
		||||
  unsigned long nitems, bytes_after;
 | 
			
		||||
  g_autofree unsigned char *buffer = NULL;
 | 
			
		||||
  unsigned char *buffer;
 | 
			
		||||
 | 
			
		||||
  atom = XInternAtom (manager_xrandr->xdisplay, "Backlight", False);
 | 
			
		||||
  XRRGetOutputProperty (manager_xrandr->xdisplay,
 | 
			
		||||
@@ -318,9 +252,12 @@ output_get_backlight_xrandr (MetaMonitorManagerXrandr *manager_xrandr,
 | 
			
		||||
                        &nitems, &bytes_after, &buffer);
 | 
			
		||||
 | 
			
		||||
  if (actual_type != XA_INTEGER || actual_format != 32 || nitems < 1)
 | 
			
		||||
    return FALSE;
 | 
			
		||||
    goto out;
 | 
			
		||||
 | 
			
		||||
  value = ((int*)buffer)[0];
 | 
			
		||||
 | 
			
		||||
 out:
 | 
			
		||||
  XFree (buffer);
 | 
			
		||||
  if (value > 0)
 | 
			
		||||
    return normalize_backlight (output, value);
 | 
			
		||||
  else
 | 
			
		||||
@@ -333,7 +270,7 @@ output_get_backlight_limits_xrandr (MetaMonitorManagerXrandr *manager_xrandr,
 | 
			
		||||
{
 | 
			
		||||
  Atom atom;
 | 
			
		||||
  xcb_connection_t *xcb_conn;
 | 
			
		||||
  g_autofree xcb_randr_query_output_property_reply_t *reply;
 | 
			
		||||
  xcb_randr_query_output_property_reply_t *reply;
 | 
			
		||||
 | 
			
		||||
  atom = XInternAtom (manager_xrandr->xdisplay, "Backlight", False);
 | 
			
		||||
 | 
			
		||||
@@ -351,12 +288,15 @@ output_get_backlight_limits_xrandr (MetaMonitorManagerXrandr *manager_xrandr,
 | 
			
		||||
  if (!reply->range || reply->length != 2)
 | 
			
		||||
    {
 | 
			
		||||
      meta_verbose ("backlight %s was not range\n", output->name);
 | 
			
		||||
      return;
 | 
			
		||||
      goto out;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  int32_t *values = xcb_randr_query_output_property_valid_values (reply);
 | 
			
		||||
  output->backlight_min = values[0];
 | 
			
		||||
  output->backlight_max = values[1];
 | 
			
		||||
 | 
			
		||||
out:
 | 
			
		||||
  free (reply);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int
 | 
			
		||||
@@ -419,6 +359,12 @@ read_output_edid (MetaMonitorManagerXrandr *manager_xrandr,
 | 
			
		||||
      result = get_edid_property (manager_xrandr->xdisplay, winsys_id, edid_atom, &len);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (!result)
 | 
			
		||||
    {
 | 
			
		||||
      edid_atom = XInternAtom (manager_xrandr->xdisplay, "XFree86_DDC_EDID1_RAWDATA", FALSE);
 | 
			
		||||
      result = get_edid_property (manager_xrandr->xdisplay, winsys_id, edid_atom, &len);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (result)
 | 
			
		||||
    {
 | 
			
		||||
      if (len > 0 && len % 128 == 0)
 | 
			
		||||
@@ -430,42 +376,6 @@ read_output_edid (MetaMonitorManagerXrandr *manager_xrandr,
 | 
			
		||||
  return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
output_get_tile_info (MetaMonitorManagerXrandr *manager_xrandr,
 | 
			
		||||
                      MetaOutput *output)
 | 
			
		||||
{
 | 
			
		||||
  Atom tile_atom;
 | 
			
		||||
  unsigned char *prop;
 | 
			
		||||
  unsigned long nitems, bytes_after;
 | 
			
		||||
  int actual_format;
 | 
			
		||||
  Atom actual_type;
 | 
			
		||||
 | 
			
		||||
  if (manager_xrandr->has_randr15 == FALSE)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  tile_atom = XInternAtom (manager_xrandr->xdisplay, "TILE", FALSE);
 | 
			
		||||
  XRRGetOutputProperty (manager_xrandr->xdisplay,
 | 
			
		||||
                        output->winsys_id,
 | 
			
		||||
                        tile_atom, 0, 100, False,
 | 
			
		||||
                        False, AnyPropertyType,
 | 
			
		||||
                        &actual_type, &actual_format,
 | 
			
		||||
                        &nitems, &bytes_after, &prop);
 | 
			
		||||
 | 
			
		||||
  if (actual_type == XA_INTEGER && actual_format == 32 && nitems == 8)
 | 
			
		||||
    {
 | 
			
		||||
      long *values = (long *)prop;
 | 
			
		||||
      output->tile_info.group_id = values[0];
 | 
			
		||||
      output->tile_info.flags = values[1];
 | 
			
		||||
      output->tile_info.max_h_tiles = values[2];
 | 
			
		||||
      output->tile_info.max_v_tiles = values[3];
 | 
			
		||||
      output->tile_info.loc_h_tile = values[4];
 | 
			
		||||
      output->tile_info.loc_v_tile = values[5];
 | 
			
		||||
      output->tile_info.tile_w = values[6];
 | 
			
		||||
      output->tile_info.tile_h = values[7];
 | 
			
		||||
    }
 | 
			
		||||
  XFree (prop);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
output_get_hotplug_mode_update (MetaMonitorManagerXrandr *manager_xrandr,
 | 
			
		||||
                                MetaOutput               *output)
 | 
			
		||||
@@ -537,10 +447,11 @@ static MetaConnectorType
 | 
			
		||||
output_get_connector_type_from_prop (MetaMonitorManagerXrandr *manager_xrandr,
 | 
			
		||||
                                     MetaOutput               *output)
 | 
			
		||||
{
 | 
			
		||||
  MetaConnectorType ret = META_CONNECTOR_TYPE_Unknown;
 | 
			
		||||
  Atom atom, actual_type, connector_type_atom;
 | 
			
		||||
  int actual_format;
 | 
			
		||||
  unsigned long nitems, bytes_after;
 | 
			
		||||
  g_autofree unsigned char *buffer = NULL;
 | 
			
		||||
  unsigned char *buffer;
 | 
			
		||||
 | 
			
		||||
  atom = XInternAtom (manager_xrandr->xdisplay, "ConnectorType", False);
 | 
			
		||||
  XRRGetOutputProperty (manager_xrandr->xdisplay,
 | 
			
		||||
@@ -551,10 +462,14 @@ output_get_connector_type_from_prop (MetaMonitorManagerXrandr *manager_xrandr,
 | 
			
		||||
                        &nitems, &bytes_after, &buffer);
 | 
			
		||||
 | 
			
		||||
  if (actual_type != XA_ATOM || actual_format != 32 || nitems < 1)
 | 
			
		||||
    return META_CONNECTOR_TYPE_Unknown;
 | 
			
		||||
    goto out;
 | 
			
		||||
 | 
			
		||||
  connector_type_atom = ((Atom *) buffer)[0];
 | 
			
		||||
  return connector_type_from_atom (manager_xrandr, connector_type_atom);
 | 
			
		||||
  ret = connector_type_from_atom (manager_xrandr, connector_type_atom);
 | 
			
		||||
 | 
			
		||||
 out:
 | 
			
		||||
  meta_XFree (buffer);
 | 
			
		||||
  return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static MetaConnectorType
 | 
			
		||||
@@ -591,7 +506,7 @@ output_get_connector_type_from_name (MetaMonitorManagerXrandr *manager_xrandr,
 | 
			
		||||
  if (g_str_has_prefix (name, "Virtual"))
 | 
			
		||||
    return META_CONNECTOR_TYPE_VIRTUAL;
 | 
			
		||||
  if (g_str_has_prefix (name, "Composite"))
 | 
			
		||||
    return META_CONNECTOR_TYPE_Composite;
 | 
			
		||||
    return META_CONNECTOR_TYPE_VGA;
 | 
			
		||||
  if (g_str_has_prefix (name, "S-video"))
 | 
			
		||||
    return META_CONNECTOR_TYPE_SVIDEO;
 | 
			
		||||
  if (g_str_has_prefix (name, "TV"))
 | 
			
		||||
@@ -631,70 +546,6 @@ output_get_connector_type (MetaMonitorManagerXrandr *manager_xrandr,
 | 
			
		||||
  return META_CONNECTOR_TYPE_Unknown;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
output_get_modes (MetaMonitorManager *manager,
 | 
			
		||||
                  MetaOutput         *meta_output,
 | 
			
		||||
                  XRROutputInfo      *output)
 | 
			
		||||
{
 | 
			
		||||
  guint j, k;
 | 
			
		||||
  guint n_actual_modes;
 | 
			
		||||
 | 
			
		||||
  meta_output->modes = g_new0 (MetaMonitorMode *, output->nmode);
 | 
			
		||||
 | 
			
		||||
  n_actual_modes = 0;
 | 
			
		||||
  for (j = 0; j < (guint)output->nmode; j++)
 | 
			
		||||
    {
 | 
			
		||||
      for (k = 0; k < manager->n_modes; k++)
 | 
			
		||||
        {
 | 
			
		||||
          if (output->modes[j] == (XID)manager->modes[k].mode_id)
 | 
			
		||||
            {
 | 
			
		||||
              meta_output->modes[n_actual_modes] = &manager->modes[k];
 | 
			
		||||
              n_actual_modes += 1;
 | 
			
		||||
              break;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
  meta_output->n_modes = n_actual_modes;
 | 
			
		||||
  if (n_actual_modes > 0)
 | 
			
		||||
    meta_output->preferred_mode = meta_output->modes[0];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
output_get_crtcs (MetaMonitorManager *manager,
 | 
			
		||||
                  MetaOutput         *meta_output,
 | 
			
		||||
                  XRROutputInfo      *output)
 | 
			
		||||
{
 | 
			
		||||
  guint j, k;
 | 
			
		||||
  guint n_actual_crtcs;
 | 
			
		||||
 | 
			
		||||
  meta_output->possible_crtcs = g_new0 (MetaCRTC *, output->ncrtc);
 | 
			
		||||
 | 
			
		||||
  n_actual_crtcs = 0;
 | 
			
		||||
  for (j = 0; j < (unsigned)output->ncrtc; j++)
 | 
			
		||||
    {
 | 
			
		||||
      for (k = 0; k < manager->n_crtcs; k++)
 | 
			
		||||
        {
 | 
			
		||||
          if ((XID)manager->crtcs[k].crtc_id == output->crtcs[j])
 | 
			
		||||
            {
 | 
			
		||||
              meta_output->possible_crtcs[n_actual_crtcs] = &manager->crtcs[k];
 | 
			
		||||
              n_actual_crtcs += 1;
 | 
			
		||||
              break;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
  meta_output->n_possible_crtcs = n_actual_crtcs;
 | 
			
		||||
 | 
			
		||||
  meta_output->crtc = NULL;
 | 
			
		||||
  for (j = 0; j < manager->n_crtcs; j++)
 | 
			
		||||
    {
 | 
			
		||||
      if ((XID)manager->crtcs[j].crtc_id == output->crtc)
 | 
			
		||||
        {
 | 
			
		||||
          meta_output->crtc = &manager->crtcs[j];
 | 
			
		||||
          break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static char *
 | 
			
		||||
get_xmode_name (XRRModeInfo *xmode)
 | 
			
		||||
{
 | 
			
		||||
@@ -831,8 +682,6 @@ meta_monitor_manager_xrandr_read_current (MetaMonitorManager *manager)
 | 
			
		||||
      MetaOutput *meta_output;
 | 
			
		||||
 | 
			
		||||
      output = XRRGetOutputInfo (manager_xrandr->xdisplay, resources, resources->outputs[i]);
 | 
			
		||||
      if (!output)
 | 
			
		||||
        continue;
 | 
			
		||||
 | 
			
		||||
      meta_output = &manager->outputs[n_actual_outputs];
 | 
			
		||||
 | 
			
		||||
@@ -855,9 +704,44 @@ meta_monitor_manager_xrandr_read_current (MetaMonitorManager *manager)
 | 
			
		||||
	  meta_output->suggested_y = output_get_suggested_y (manager_xrandr, meta_output);
 | 
			
		||||
          meta_output->connector_type = output_get_connector_type (manager_xrandr, meta_output);
 | 
			
		||||
 | 
			
		||||
	  output_get_tile_info (manager_xrandr, meta_output);
 | 
			
		||||
	  output_get_modes (manager, meta_output, output);
 | 
			
		||||
          output_get_crtcs (manager, meta_output, output);
 | 
			
		||||
	  meta_output->n_modes = output->nmode;
 | 
			
		||||
	  meta_output->modes = g_new0 (MetaMonitorMode *, meta_output->n_modes);
 | 
			
		||||
	  for (j = 0; j < meta_output->n_modes; j++)
 | 
			
		||||
	    {
 | 
			
		||||
	      for (k = 0; k < manager->n_modes; k++)
 | 
			
		||||
		{
 | 
			
		||||
		  if (output->modes[j] == (XID)manager->modes[k].mode_id)
 | 
			
		||||
		    {
 | 
			
		||||
		      meta_output->modes[j] = &manager->modes[k];
 | 
			
		||||
		      break;
 | 
			
		||||
		    }
 | 
			
		||||
		}
 | 
			
		||||
	    }
 | 
			
		||||
	  meta_output->preferred_mode = meta_output->modes[0];
 | 
			
		||||
 | 
			
		||||
	  meta_output->n_possible_crtcs = output->ncrtc;
 | 
			
		||||
	  meta_output->possible_crtcs = g_new0 (MetaCRTC *, meta_output->n_possible_crtcs);
 | 
			
		||||
	  for (j = 0; j < (unsigned)output->ncrtc; j++)
 | 
			
		||||
	    {
 | 
			
		||||
	      for (k = 0; k < manager->n_crtcs; k++)
 | 
			
		||||
		{
 | 
			
		||||
		  if ((XID)manager->crtcs[k].crtc_id == output->crtcs[j])
 | 
			
		||||
		    {
 | 
			
		||||
		      meta_output->possible_crtcs[j] = &manager->crtcs[k];
 | 
			
		||||
		      break;
 | 
			
		||||
		    }
 | 
			
		||||
		}
 | 
			
		||||
	    }
 | 
			
		||||
 | 
			
		||||
	  meta_output->crtc = NULL;
 | 
			
		||||
	  for (j = 0; j < manager->n_crtcs; j++)
 | 
			
		||||
	    {
 | 
			
		||||
	      if ((XID)manager->crtcs[j].crtc_id == output->crtc)
 | 
			
		||||
		{
 | 
			
		||||
		  meta_output->crtc = &manager->crtcs[j];
 | 
			
		||||
		  break;
 | 
			
		||||
		}
 | 
			
		||||
	    }
 | 
			
		||||
 | 
			
		||||
	  meta_output->n_possible_clones = output->nclone;
 | 
			
		||||
	  meta_output->possible_clones = g_new0 (MetaOutput *, meta_output->n_possible_clones);
 | 
			
		||||
@@ -872,8 +756,6 @@ meta_monitor_manager_xrandr_read_current (MetaMonitorManager *manager)
 | 
			
		||||
 | 
			
		||||
	  meta_output->is_primary = ((XID)meta_output->winsys_id == primary_output);
 | 
			
		||||
	  meta_output->is_presentation = output_get_presentation_xrandr (manager_xrandr, meta_output);
 | 
			
		||||
	  meta_output->is_underscanning = output_get_underscanning_xrandr (manager_xrandr, meta_output);
 | 
			
		||||
          meta_output->supports_underscanning = output_get_supports_underscanning_xrandr (manager_xrandr, meta_output);
 | 
			
		||||
	  output_get_backlight_limits_xrandr (manager_xrandr, meta_output);
 | 
			
		||||
 | 
			
		||||
	  if (!(meta_output->backlight_min == 0 && meta_output->backlight_max == 0))
 | 
			
		||||
@@ -881,10 +763,7 @@ meta_monitor_manager_xrandr_read_current (MetaMonitorManager *manager)
 | 
			
		||||
	  else
 | 
			
		||||
	    meta_output->backlight = -1;
 | 
			
		||||
 | 
			
		||||
          if (meta_output->n_modes == 0 || meta_output->n_possible_crtcs == 0)
 | 
			
		||||
            meta_monitor_manager_clear_output (meta_output);
 | 
			
		||||
          else
 | 
			
		||||
            n_actual_outputs++;
 | 
			
		||||
	  n_actual_outputs++;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
      XRRFreeOutputInfo (output);
 | 
			
		||||
@@ -990,58 +869,11 @@ output_set_presentation_xrandr (MetaMonitorManagerXrandr *manager_xrandr,
 | 
			
		||||
  int value = presentation;
 | 
			
		||||
 | 
			
		||||
  atom = XInternAtom (manager_xrandr->xdisplay, "_MUTTER_PRESENTATION_OUTPUT", False);
 | 
			
		||||
 | 
			
		||||
  xcb_randr_change_output_property (XGetXCBConnection (manager_xrandr->xdisplay),
 | 
			
		||||
                                    (XID)output->winsys_id,
 | 
			
		||||
                                    atom, XCB_ATOM_CARDINAL, 32,
 | 
			
		||||
                                    XCB_PROP_MODE_REPLACE,
 | 
			
		||||
                                    1, &value);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
output_set_underscanning_xrandr (MetaMonitorManagerXrandr *manager_xrandr,
 | 
			
		||||
                                 MetaOutput               *output,
 | 
			
		||||
                                 gboolean                  underscanning)
 | 
			
		||||
{
 | 
			
		||||
  Atom prop, valueatom;
 | 
			
		||||
  const char *value;
 | 
			
		||||
 | 
			
		||||
  prop = XInternAtom (manager_xrandr->xdisplay, "underscan", False);
 | 
			
		||||
 | 
			
		||||
  value = underscanning ? "on" : "off";
 | 
			
		||||
  valueatom = XInternAtom (manager_xrandr->xdisplay, value, False);
 | 
			
		||||
 | 
			
		||||
  xcb_randr_change_output_property (XGetXCBConnection (manager_xrandr->xdisplay),
 | 
			
		||||
                                    (XID)output->winsys_id,
 | 
			
		||||
                                    prop, XCB_ATOM_ATOM, 32,
 | 
			
		||||
                                    XCB_PROP_MODE_REPLACE,
 | 
			
		||||
                                    1, &valueatom);
 | 
			
		||||
 | 
			
		||||
  /* Configure the border at the same time. Currently, we use a
 | 
			
		||||
   * 5% of the width/height of the mode. In the future, we should
 | 
			
		||||
   * make the border configurable. */
 | 
			
		||||
  if (underscanning)
 | 
			
		||||
    {
 | 
			
		||||
      uint32_t border_value;
 | 
			
		||||
 | 
			
		||||
      prop = XInternAtom (manager_xrandr->xdisplay, "underscan hborder", False);
 | 
			
		||||
      border_value = output->crtc->current_mode->width * 0.05;
 | 
			
		||||
 | 
			
		||||
      xcb_randr_change_output_property (XGetXCBConnection (manager_xrandr->xdisplay),
 | 
			
		||||
                                        (XID)output->winsys_id,
 | 
			
		||||
                                        prop, XCB_ATOM_INTEGER, 32,
 | 
			
		||||
                                        XCB_PROP_MODE_REPLACE,
 | 
			
		||||
                                        1, &border_value);
 | 
			
		||||
 | 
			
		||||
      prop = XInternAtom (manager_xrandr->xdisplay, "underscan vborder", False);
 | 
			
		||||
      border_value = output->crtc->current_mode->height * 0.05;
 | 
			
		||||
 | 
			
		||||
      xcb_randr_change_output_property (XGetXCBConnection (manager_xrandr->xdisplay),
 | 
			
		||||
                                        (XID)output->winsys_id,
 | 
			
		||||
                                        prop, XCB_ATOM_INTEGER, 32,
 | 
			
		||||
                                        XCB_PROP_MODE_REPLACE,
 | 
			
		||||
                                        1, &border_value);
 | 
			
		||||
    }
 | 
			
		||||
  XRRChangeOutputProperty (manager_xrandr->xdisplay,
 | 
			
		||||
                           (XID)output->winsys_id,
 | 
			
		||||
                           atom,
 | 
			
		||||
                           XA_CARDINAL, 32, PropModeReplace,
 | 
			
		||||
                           (unsigned char*) &value, 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -1160,16 +992,17 @@ meta_monitor_manager_xrandr_apply_configuration (MetaMonitorManager *manager,
 | 
			
		||||
      if (crtc_info->mode != NULL)
 | 
			
		||||
        {
 | 
			
		||||
          MetaMonitorMode *mode;
 | 
			
		||||
          g_autofree XID *output_ids = NULL;
 | 
			
		||||
          unsigned int j, n_output_ids;
 | 
			
		||||
          XID *outputs;
 | 
			
		||||
          unsigned int j, n_outputs;
 | 
			
		||||
          int width, height;
 | 
			
		||||
          Status ok;
 | 
			
		||||
 | 
			
		||||
          mode = crtc_info->mode;
 | 
			
		||||
 | 
			
		||||
          n_output_ids = crtc_info->outputs->len;
 | 
			
		||||
          output_ids = g_new (XID, n_output_ids);
 | 
			
		||||
          n_outputs = crtc_info->outputs->len;
 | 
			
		||||
          outputs = g_new (XID, n_outputs);
 | 
			
		||||
 | 
			
		||||
          for (j = 0; j < n_output_ids; j++)
 | 
			
		||||
          for (j = 0; j < n_outputs; j++)
 | 
			
		||||
            {
 | 
			
		||||
              MetaOutput *output;
 | 
			
		||||
 | 
			
		||||
@@ -1178,7 +1011,7 @@ meta_monitor_manager_xrandr_apply_configuration (MetaMonitorManager *manager,
 | 
			
		||||
              output->is_dirty = TRUE;
 | 
			
		||||
              output->crtc = crtc;
 | 
			
		||||
 | 
			
		||||
              output_ids[j] = output->winsys_id;
 | 
			
		||||
              outputs[j] = output->winsys_id;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
          ok = XRRSetCrtcConfig (manager_xrandr->xdisplay,
 | 
			
		||||
@@ -1188,7 +1021,7 @@ meta_monitor_manager_xrandr_apply_configuration (MetaMonitorManager *manager,
 | 
			
		||||
                                 crtc_info->x, crtc_info->y,
 | 
			
		||||
                                 (XID)mode->mode_id,
 | 
			
		||||
                                 meta_monitor_transform_to_xrandr (crtc_info->transform),
 | 
			
		||||
                                 output_ids, n_output_ids);
 | 
			
		||||
                                 outputs, n_outputs);
 | 
			
		||||
 | 
			
		||||
          if (ok != Success)
 | 
			
		||||
            {
 | 
			
		||||
@@ -1196,7 +1029,7 @@ meta_monitor_manager_xrandr_apply_configuration (MetaMonitorManager *manager,
 | 
			
		||||
                            (unsigned)(crtc->crtc_id), (unsigned)(mode->mode_id),
 | 
			
		||||
                            mode->width, mode->height, (float)mode->refresh_rate,
 | 
			
		||||
                            crtc_info->x, crtc_info->y, crtc_info->transform);
 | 
			
		||||
              continue;
 | 
			
		||||
              goto next;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
          if (meta_monitor_transform_is_rotated (crtc_info->transform))
 | 
			
		||||
@@ -1216,6 +1049,9 @@ meta_monitor_manager_xrandr_apply_configuration (MetaMonitorManager *manager,
 | 
			
		||||
          crtc->rect.height = height;
 | 
			
		||||
          crtc->current_mode = mode;
 | 
			
		||||
          crtc->transform = crtc_info->transform;
 | 
			
		||||
 | 
			
		||||
        next:
 | 
			
		||||
          g_free (outputs);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -1235,14 +1071,8 @@ meta_monitor_manager_xrandr_apply_configuration (MetaMonitorManager *manager,
 | 
			
		||||
                                      output_info->output,
 | 
			
		||||
                                      output_info->is_presentation);
 | 
			
		||||
 | 
			
		||||
      if (output_get_supports_underscanning_xrandr (manager_xrandr, output_info->output))
 | 
			
		||||
        output_set_underscanning_xrandr (manager_xrandr,
 | 
			
		||||
                                         output_info->output,
 | 
			
		||||
                                         output_info->is_underscanning);
 | 
			
		||||
 | 
			
		||||
      output->is_primary = output_info->is_primary;
 | 
			
		||||
      output->is_presentation = output_info->is_presentation;
 | 
			
		||||
      output->is_underscanning = output_info->is_underscanning;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Disable outputs not mentioned in the list */
 | 
			
		||||
@@ -1276,12 +1106,11 @@ meta_monitor_manager_xrandr_change_backlight (MetaMonitorManager *manager,
 | 
			
		||||
  hw_value = round ((double)value / 100.0 * output->backlight_max + output->backlight_min);
 | 
			
		||||
 | 
			
		||||
  atom = XInternAtom (manager_xrandr->xdisplay, "Backlight", False);
 | 
			
		||||
 | 
			
		||||
  xcb_randr_change_output_property (XGetXCBConnection (manager_xrandr->xdisplay),
 | 
			
		||||
                                    (XID)output->winsys_id,
 | 
			
		||||
                                    atom, XCB_ATOM_INTEGER, 32,
 | 
			
		||||
                                    XCB_PROP_MODE_REPLACE,
 | 
			
		||||
                                    1, &hw_value);
 | 
			
		||||
  XRRChangeOutputProperty (manager_xrandr->xdisplay,
 | 
			
		||||
                           (XID)output->winsys_id,
 | 
			
		||||
                           atom,
 | 
			
		||||
                           XA_INTEGER, 32, PropModeReplace,
 | 
			
		||||
                           (unsigned char *) &hw_value, 1);
 | 
			
		||||
 | 
			
		||||
  /* We're not selecting for property notifies, so update the value immediately */
 | 
			
		||||
  output->backlight = normalize_backlight (output, hw_value);
 | 
			
		||||
@@ -1329,88 +1158,6 @@ meta_monitor_manager_xrandr_set_crtc_gamma (MetaMonitorManager *manager,
 | 
			
		||||
  XRRFreeGamma (gamma);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_XRANDR15
 | 
			
		||||
static void
 | 
			
		||||
meta_monitor_manager_xrandr_add_monitor(MetaMonitorManager *manager,
 | 
			
		||||
                                        MetaMonitorInfo *monitor)
 | 
			
		||||
{
 | 
			
		||||
  MetaMonitorManagerXrandr *manager_xrandr = META_MONITOR_MANAGER_XRANDR (manager);
 | 
			
		||||
  XRRMonitorInfo *m;
 | 
			
		||||
  int o;
 | 
			
		||||
  Atom name;
 | 
			
		||||
  char name_buf[40];
 | 
			
		||||
 | 
			
		||||
  if (manager_xrandr->has_randr15 == FALSE)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  if (monitor->n_outputs <= 1)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  if (monitor->outputs[0]->product)
 | 
			
		||||
    snprintf (name_buf, 40, "%s-%d", monitor->outputs[0]->product, monitor->outputs[0]->tile_info.group_id);
 | 
			
		||||
  else
 | 
			
		||||
    snprintf (name_buf, 40, "Tiled-%d", monitor->outputs[0]->tile_info.group_id);
 | 
			
		||||
 | 
			
		||||
  name = XInternAtom (manager_xrandr->xdisplay, name_buf, False);
 | 
			
		||||
  monitor->monitor_winsys_xid = name;
 | 
			
		||||
  m = XRRAllocateMonitor (manager_xrandr->xdisplay, monitor->n_outputs);
 | 
			
		||||
  if (!m)
 | 
			
		||||
    return;
 | 
			
		||||
  m->name = name;
 | 
			
		||||
  m->primary = monitor->is_primary;
 | 
			
		||||
  m->automatic = True;
 | 
			
		||||
 | 
			
		||||
  for (o = 0; o < monitor->n_outputs; o++) {
 | 
			
		||||
    MetaOutput *output = monitor->outputs[o];
 | 
			
		||||
    m->outputs[o] = output->winsys_id;
 | 
			
		||||
  }
 | 
			
		||||
  XRRSetMonitor (manager_xrandr->xdisplay,
 | 
			
		||||
                 DefaultRootWindow (manager_xrandr->xdisplay),
 | 
			
		||||
                 m);
 | 
			
		||||
  XRRFreeMonitors (m);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
meta_monitor_manager_xrandr_delete_monitor(MetaMonitorManager *manager,
 | 
			
		||||
                                           int monitor_winsys_xid)
 | 
			
		||||
{
 | 
			
		||||
  MetaMonitorManagerXrandr *manager_xrandr = META_MONITOR_MANAGER_XRANDR (manager);
 | 
			
		||||
 | 
			
		||||
  if (manager_xrandr->has_randr15 == FALSE)
 | 
			
		||||
    return;
 | 
			
		||||
  XRRDeleteMonitor (manager_xrandr->xdisplay,
 | 
			
		||||
                    DefaultRootWindow (manager_xrandr->xdisplay),
 | 
			
		||||
                    monitor_winsys_xid);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
meta_monitor_manager_xrandr_init_monitors(MetaMonitorManagerXrandr *manager_xrandr)
 | 
			
		||||
{
 | 
			
		||||
  XRRMonitorInfo *m;
 | 
			
		||||
  int n, i;
 | 
			
		||||
 | 
			
		||||
  if (manager_xrandr->has_randr15 == FALSE)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  /* delete any tiled monitors setup, as mutter will want to recreate
 | 
			
		||||
     things in its image */
 | 
			
		||||
  m = XRRGetMonitors (manager_xrandr->xdisplay,
 | 
			
		||||
                      DefaultRootWindow (manager_xrandr->xdisplay),
 | 
			
		||||
                      FALSE, &n);
 | 
			
		||||
  if (n == -1)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  for (i = 0; i < n; i++)
 | 
			
		||||
    {
 | 
			
		||||
      if (m[i].noutput > 1)
 | 
			
		||||
        XRRDeleteMonitor (manager_xrandr->xdisplay,
 | 
			
		||||
                          DefaultRootWindow (manager_xrandr->xdisplay),
 | 
			
		||||
                          m[i].name);
 | 
			
		||||
    }
 | 
			
		||||
  XRRFreeMonitors (m);
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
meta_monitor_manager_xrandr_init (MetaMonitorManagerXrandr *manager_xrandr)
 | 
			
		||||
{
 | 
			
		||||
@@ -1426,7 +1173,6 @@ meta_monitor_manager_xrandr_init (MetaMonitorManagerXrandr *manager_xrandr)
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      int major_version, minor_version;
 | 
			
		||||
      /* We only use ScreenChangeNotify, but GDK uses the others,
 | 
			
		||||
	 and we don't want to step on its toes */
 | 
			
		||||
      XRRSelectInput (manager_xrandr->xdisplay,
 | 
			
		||||
@@ -1434,17 +1180,6 @@ meta_monitor_manager_xrandr_init (MetaMonitorManagerXrandr *manager_xrandr)
 | 
			
		||||
		      RRScreenChangeNotifyMask
 | 
			
		||||
		      | RRCrtcChangeNotifyMask
 | 
			
		||||
		      | RROutputPropertyNotifyMask);
 | 
			
		||||
 | 
			
		||||
      manager_xrandr->has_randr15 = FALSE;
 | 
			
		||||
      XRRQueryVersion (manager_xrandr->xdisplay, &major_version,
 | 
			
		||||
                       &minor_version);
 | 
			
		||||
#ifdef HAVE_XRANDR15
 | 
			
		||||
      if (major_version > 1 ||
 | 
			
		||||
          (major_version == 1 &&
 | 
			
		||||
           minor_version >= 5))
 | 
			
		||||
        manager_xrandr->has_randr15 = TRUE;
 | 
			
		||||
      meta_monitor_manager_xrandr_init_monitors (manager_xrandr);
 | 
			
		||||
#endif
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -1475,10 +1210,6 @@ meta_monitor_manager_xrandr_class_init (MetaMonitorManagerXrandrClass *klass)
 | 
			
		||||
  manager_class->change_backlight = meta_monitor_manager_xrandr_change_backlight;
 | 
			
		||||
  manager_class->get_crtc_gamma = meta_monitor_manager_xrandr_get_crtc_gamma;
 | 
			
		||||
  manager_class->set_crtc_gamma = meta_monitor_manager_xrandr_set_crtc_gamma;
 | 
			
		||||
#ifdef HAVE_XRANDR15
 | 
			
		||||
  manager_class->add_monitor = meta_monitor_manager_xrandr_add_monitor;
 | 
			
		||||
  manager_class->delete_monitor = meta_monitor_manager_xrandr_delete_monitor;
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gboolean
 | 
			
		||||
 
 | 
			
		||||
@@ -1,89 +0,0 @@
 | 
			
		||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2015 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:
 | 
			
		||||
 *     Jonas Ådahl <jadahl@gmail.com>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "config.h"
 | 
			
		||||
 | 
			
		||||
#include "backends/x11/nested/meta-cursor-renderer-x11-nested.h"
 | 
			
		||||
 | 
			
		||||
#include "backends/x11/meta-backend-x11.h"
 | 
			
		||||
 | 
			
		||||
struct _MetaCursorRendererX11Nested
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorRenderer parent;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE (MetaCursorRendererX11Nested, meta_cursor_renderer_x11_nested,
 | 
			
		||||
               META_TYPE_CURSOR_RENDERER);
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
meta_cursor_renderer_x11_nested_update_cursor (MetaCursorRenderer *renderer,
 | 
			
		||||
                                               MetaCursorSprite   *cursor_sprite)
 | 
			
		||||
{
 | 
			
		||||
  if (cursor_sprite)
 | 
			
		||||
    meta_cursor_sprite_realize_texture (cursor_sprite);
 | 
			
		||||
  return FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Cursor
 | 
			
		||||
create_empty_cursor (Display *xdisplay)
 | 
			
		||||
{
 | 
			
		||||
  XcursorImage *image;
 | 
			
		||||
  XcursorPixel *pixels;
 | 
			
		||||
  Cursor xcursor;
 | 
			
		||||
 | 
			
		||||
  image = XcursorImageCreate (1, 1);
 | 
			
		||||
  if (image == NULL)
 | 
			
		||||
    return None;
 | 
			
		||||
 | 
			
		||||
  image->xhot = 0;
 | 
			
		||||
  image->yhot = 0;
 | 
			
		||||
 | 
			
		||||
  pixels = image->pixels;
 | 
			
		||||
  pixels[0] = 0;
 | 
			
		||||
 | 
			
		||||
  xcursor = XcursorImageLoadCursor (xdisplay, image);
 | 
			
		||||
  XcursorImageDestroy (image);
 | 
			
		||||
 | 
			
		||||
  return xcursor;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
meta_cursor_renderer_x11_nested_init (MetaCursorRendererX11Nested *x11_nested)
 | 
			
		||||
{
 | 
			
		||||
  MetaBackendX11 *backend = META_BACKEND_X11 (meta_get_backend ());
 | 
			
		||||
  Window xwindow = meta_backend_x11_get_xwindow (backend);
 | 
			
		||||
  Display *xdisplay = meta_backend_x11_get_xdisplay (backend);
 | 
			
		||||
 | 
			
		||||
  Cursor empty_xcursor = create_empty_cursor (xdisplay);
 | 
			
		||||
  XDefineCursor (xdisplay, xwindow, empty_xcursor);
 | 
			
		||||
  XFreeCursor (xdisplay, empty_xcursor);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
meta_cursor_renderer_x11_nested_class_init (MetaCursorRendererX11NestedClass *klass)
 | 
			
		||||
{
 | 
			
		||||
  MetaCursorRendererClass *renderer_class = META_CURSOR_RENDERER_CLASS (klass);
 | 
			
		||||
 | 
			
		||||
  renderer_class->update_cursor = meta_cursor_renderer_x11_nested_update_cursor;
 | 
			
		||||
}
 | 
			
		||||
@@ -1,38 +0,0 @@
 | 
			
		||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2015 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:
 | 
			
		||||
 *     Jonas Ådahl <jadahl@gmail.com>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef META_CURSOR_RENDERER_X11_NESTED_NESTED_H
 | 
			
		||||
#define META_CURSOR_RENDERER_X11_NESTED_NESTED_H
 | 
			
		||||
 | 
			
		||||
#include <glib-object.h>
 | 
			
		||||
 | 
			
		||||
#include "backends/meta-cursor-renderer.h"
 | 
			
		||||
 | 
			
		||||
#define META_TYPE_CURSOR_RENDERER_X11_NESTED (meta_cursor_renderer_x11_nested_get_type ())
 | 
			
		||||
G_DECLARE_FINAL_TYPE (MetaCursorRendererX11Nested,
 | 
			
		||||
                      meta_cursor_renderer_x11_nested,
 | 
			
		||||
                      META, CURSOR_RENDERER_X11_NESTED,
 | 
			
		||||
                      MetaCursorRenderer);
 | 
			
		||||
 | 
			
		||||
#endif /* META_CURSOR_RENDERER_X11_NESTED_NESTED_H */
 | 
			
		||||
@@ -15,8 +15,7 @@ struct _MetaCompositor
 | 
			
		||||
{
 | 
			
		||||
  MetaDisplay    *display;
 | 
			
		||||
 | 
			
		||||
  guint           pre_paint_func_id;
 | 
			
		||||
  guint           post_paint_func_id;
 | 
			
		||||
  guint           repaint_func_id;
 | 
			
		||||
 | 
			
		||||
  gint64          server_time_query_time;
 | 
			
		||||
  gint64          server_time_offset;
 | 
			
		||||
@@ -41,7 +40,6 @@ struct _MetaCompositor
 | 
			
		||||
  MetaPluginManager *plugin_mgr;
 | 
			
		||||
 | 
			
		||||
  gboolean frame_has_updated_xsurfaces;
 | 
			
		||||
  gboolean have_x11_sync_object;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Wait 2ms after vblank before starting to draw next frame */
 | 
			
		||||
@@ -60,7 +58,4 @@ void     meta_end_modal_for_plugin   (MetaCompositor   *compositor,
 | 
			
		||||
gint64 meta_compositor_monotonic_time_to_server_time (MetaDisplay *display,
 | 
			
		||||
                                                      gint64       monotonic_time);
 | 
			
		||||
 | 
			
		||||
void meta_compositor_flash_window (MetaCompositor *compositor,
 | 
			
		||||
                                   MetaWindow     *window);
 | 
			
		||||
 | 
			
		||||
#endif /* META_COMPOSITOR_PRIVATE_H */
 | 
			
		||||
 
 | 
			
		||||
@@ -37,6 +37,11 @@
 | 
			
		||||
 * compositor needs to delay hiding the windows until the switch
 | 
			
		||||
 * workspace animation completes.
 | 
			
		||||
 *
 | 
			
		||||
 * meta_compositor_maximize_window() and meta_compositor_unmaximize_window()
 | 
			
		||||
 * are transitions within the visible state. The window is resized __before__
 | 
			
		||||
 * the call, so it may be necessary to readjust the display based on the
 | 
			
		||||
 * old_rect to start the animation.
 | 
			
		||||
 *
 | 
			
		||||
 * # Containers #
 | 
			
		||||
 *
 | 
			
		||||
 * There's two containers in the stage that are used to place window actors, here
 | 
			
		||||
@@ -74,7 +79,6 @@
 | 
			
		||||
#include "frame.h"
 | 
			
		||||
#include <X11/extensions/shape.h>
 | 
			
		||||
#include <X11/extensions/Xcomposite.h>
 | 
			
		||||
#include "meta-sync-ring.h"
 | 
			
		||||
 | 
			
		||||
#include "backends/x11/meta-backend-x11.h"
 | 
			
		||||
 | 
			
		||||
@@ -121,11 +125,7 @@ meta_switch_workspace_completed (MetaCompositor *compositor)
 | 
			
		||||
void
 | 
			
		||||
meta_compositor_destroy (MetaCompositor *compositor)
 | 
			
		||||
{
 | 
			
		||||
  clutter_threads_remove_repaint_func (compositor->pre_paint_func_id);
 | 
			
		||||
  clutter_threads_remove_repaint_func (compositor->post_paint_func_id);
 | 
			
		||||
 | 
			
		||||
  if (compositor->have_x11_sync_object)
 | 
			
		||||
    meta_sync_ring_destroy ();
 | 
			
		||||
  clutter_threads_remove_repaint_func (compositor->repaint_func_id);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -468,11 +468,13 @@ meta_compositor_manage (MetaCompositor *compositor)
 | 
			
		||||
  MetaDisplay *display = compositor->display;
 | 
			
		||||
  Display *xdisplay = display->xdisplay;
 | 
			
		||||
  MetaScreen *screen = display->screen;
 | 
			
		||||
  MetaBackend *backend = meta_get_backend ();
 | 
			
		||||
 | 
			
		||||
  meta_screen_set_cm_selection (display->screen);
 | 
			
		||||
 | 
			
		||||
  compositor->stage = meta_backend_get_stage (backend);
 | 
			
		||||
  {
 | 
			
		||||
    MetaBackend *backend = meta_get_backend ();
 | 
			
		||||
    compositor->stage = meta_backend_get_stage (backend);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* We use connect_after() here to accomodate code in GNOME Shell that,
 | 
			
		||||
   * when benchmarking drawing performance, connects to ::after-paint
 | 
			
		||||
@@ -508,7 +510,7 @@ meta_compositor_manage (MetaCompositor *compositor)
 | 
			
		||||
 | 
			
		||||
      compositor->output = screen->composite_overlay_window;
 | 
			
		||||
 | 
			
		||||
      xwin = meta_backend_x11_get_xwindow (META_BACKEND_X11 (backend));
 | 
			
		||||
      xwin = meta_backend_x11_get_xwindow (META_BACKEND_X11 (meta_get_backend ()));
 | 
			
		||||
 | 
			
		||||
      XReparentWindow (xdisplay, xwin, compositor->output, 0, 0);
 | 
			
		||||
 | 
			
		||||
@@ -528,8 +530,6 @@ meta_compositor_manage (MetaCompositor *compositor)
 | 
			
		||||
       * contents until we show the stage.
 | 
			
		||||
       */
 | 
			
		||||
      XMapWindow (xdisplay, compositor->output);
 | 
			
		||||
 | 
			
		||||
      compositor->have_x11_sync_object = meta_sync_ring_init (xdisplay);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  redirect_windows (display->screen);
 | 
			
		||||
@@ -731,9 +731,6 @@ meta_compositor_process_event (MetaCompositor *compositor,
 | 
			
		||||
        process_damage (compositor, (XDamageNotifyEvent *) event, window);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (compositor->have_x11_sync_object)
 | 
			
		||||
    meta_sync_ring_handle_event (event);
 | 
			
		||||
 | 
			
		||||
  /* Clutter needs to know about MapNotify events otherwise it will
 | 
			
		||||
     think the stage is invisible */
 | 
			
		||||
  if (!meta_is_wayland_compositor () && event->type == MapNotify)
 | 
			
		||||
@@ -772,14 +769,23 @@ meta_compositor_hide_window (MetaCompositor *compositor,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
meta_compositor_size_change_window (MetaCompositor    *compositor,
 | 
			
		||||
                                    MetaWindow        *window,
 | 
			
		||||
                                    MetaSizeChange     which_change,
 | 
			
		||||
                                    MetaRectangle     *old_frame_rect,
 | 
			
		||||
                                    MetaRectangle     *old_buffer_rect)
 | 
			
		||||
meta_compositor_maximize_window (MetaCompositor    *compositor,
 | 
			
		||||
                                 MetaWindow        *window,
 | 
			
		||||
				 MetaRectangle	   *old_rect,
 | 
			
		||||
				 MetaRectangle	   *new_rect)
 | 
			
		||||
{
 | 
			
		||||
  MetaWindowActor *window_actor = META_WINDOW_ACTOR (meta_window_get_compositor_private (window));
 | 
			
		||||
  meta_window_actor_size_change (window_actor, which_change, old_frame_rect, old_buffer_rect);
 | 
			
		||||
  meta_window_actor_maximize (window_actor, old_rect, new_rect);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
meta_compositor_unmaximize_window (MetaCompositor    *compositor,
 | 
			
		||||
                                   MetaWindow        *window,
 | 
			
		||||
				   MetaRectangle     *old_rect,
 | 
			
		||||
				   MetaRectangle     *new_rect)
 | 
			
		||||
{
 | 
			
		||||
  MetaWindowActor *window_actor = META_WINDOW_ACTOR (meta_window_get_compositor_private (window));
 | 
			
		||||
  meta_window_actor_unmaximize (window_actor, old_rect, new_rect);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
@@ -1038,12 +1044,11 @@ frame_callback (CoglOnscreen  *onscreen,
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
meta_pre_paint_func (gpointer data)
 | 
			
		||||
static void
 | 
			
		||||
pre_paint_windows (MetaCompositor *compositor)
 | 
			
		||||
{
 | 
			
		||||
  GList *l;
 | 
			
		||||
  MetaWindowActor *top_window;
 | 
			
		||||
  MetaCompositor *compositor = data;
 | 
			
		||||
 | 
			
		||||
  if (compositor->onscreen == NULL)
 | 
			
		||||
    {
 | 
			
		||||
@@ -1055,7 +1060,7 @@ meta_pre_paint_func (gpointer data)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (compositor->windows == NULL)
 | 
			
		||||
    return TRUE;
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  top_window = g_list_last (compositor->windows)->data;
 | 
			
		||||
 | 
			
		||||
@@ -1072,12 +1077,10 @@ meta_pre_paint_func (gpointer data)
 | 
			
		||||
    {
 | 
			
		||||
      /* We need to make sure that any X drawing that happens before
 | 
			
		||||
       * the XDamageSubtract() for each window above is visible to
 | 
			
		||||
       * subsequent GL rendering; the standardized way to do this is
 | 
			
		||||
       * GL_EXT_X11_sync_object. Since this isn't implemented yet in
 | 
			
		||||
       * mesa, we also have a path that relies on the implementation
 | 
			
		||||
       * of the open source drivers.
 | 
			
		||||
       *
 | 
			
		||||
       * Anything else, we just hope for the best.
 | 
			
		||||
       * subsequent GL rendering; the only standardized way to do this
 | 
			
		||||
       * is EXT_x11_sync_object, which isn't yet widely available. For
 | 
			
		||||
       * now, we count on details of Xorg and the open source drivers,
 | 
			
		||||
       * and hope for the best otherwise.
 | 
			
		||||
       *
 | 
			
		||||
       * Xorg and open source driver specifics:
 | 
			
		||||
       *
 | 
			
		||||
@@ -1092,28 +1095,17 @@ meta_pre_paint_func (gpointer data)
 | 
			
		||||
       * round trip request at this point is sufficient to flush the
 | 
			
		||||
       * GLX buffers.
 | 
			
		||||
       */
 | 
			
		||||
      if (compositor->have_x11_sync_object)
 | 
			
		||||
        compositor->have_x11_sync_object = meta_sync_ring_insert_wait ();
 | 
			
		||||
      else
 | 
			
		||||
        XSync (compositor->display->xdisplay, False);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
meta_post_paint_func (gpointer data)
 | 
			
		||||
{
 | 
			
		||||
  MetaCompositor *compositor = data;
 | 
			
		||||
 | 
			
		||||
  if (compositor->frame_has_updated_xsurfaces)
 | 
			
		||||
    {
 | 
			
		||||
      if (compositor->have_x11_sync_object)
 | 
			
		||||
        compositor->have_x11_sync_object = meta_sync_ring_after_frame ();
 | 
			
		||||
      XSync (compositor->display->xdisplay, False);
 | 
			
		||||
 | 
			
		||||
      compositor->frame_has_updated_xsurfaces = FALSE;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
meta_repaint_func (gpointer data)
 | 
			
		||||
{
 | 
			
		||||
  MetaCompositor *compositor = data;
 | 
			
		||||
  pre_paint_windows (compositor);
 | 
			
		||||
  return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -1148,16 +1140,10 @@ meta_compositor_new (MetaDisplay *display)
 | 
			
		||||
                    G_CALLBACK (on_shadow_factory_changed),
 | 
			
		||||
                    compositor);
 | 
			
		||||
 | 
			
		||||
  compositor->pre_paint_func_id =
 | 
			
		||||
    clutter_threads_add_repaint_func_full (CLUTTER_REPAINT_FLAGS_PRE_PAINT,
 | 
			
		||||
                                           meta_pre_paint_func,
 | 
			
		||||
                                           compositor,
 | 
			
		||||
                                           NULL);
 | 
			
		||||
  compositor->post_paint_func_id =
 | 
			
		||||
    clutter_threads_add_repaint_func_full (CLUTTER_REPAINT_FLAGS_POST_PAINT,
 | 
			
		||||
                                           meta_post_paint_func,
 | 
			
		||||
                                           compositor,
 | 
			
		||||
                                           NULL);
 | 
			
		||||
  compositor->repaint_func_id = clutter_threads_add_repaint_func (meta_repaint_func,
 | 
			
		||||
                                                                  compositor,
 | 
			
		||||
                                                                  NULL);
 | 
			
		||||
 | 
			
		||||
  return compositor;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -1249,48 +1235,6 @@ meta_compositor_flash_screen (MetaCompositor *compositor,
 | 
			
		||||
  clutter_actor_restore_easing_state (flash);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
window_flash_out_completed (ClutterTimeline *timeline,
 | 
			
		||||
                            gboolean         is_finished,
 | 
			
		||||
                            gpointer         user_data)
 | 
			
		||||
{
 | 
			
		||||
  ClutterActor *flash = CLUTTER_ACTOR (user_data);
 | 
			
		||||
  clutter_actor_destroy (flash);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
meta_compositor_flash_window (MetaCompositor *compositor,
 | 
			
		||||
                              MetaWindow     *window)
 | 
			
		||||
{
 | 
			
		||||
  ClutterActor *window_actor =
 | 
			
		||||
    CLUTTER_ACTOR (meta_window_get_compositor_private (window));
 | 
			
		||||
  ClutterActor *flash;
 | 
			
		||||
  ClutterTransition *transition;
 | 
			
		||||
 | 
			
		||||
  flash = clutter_actor_new ();
 | 
			
		||||
  clutter_actor_set_background_color (flash, CLUTTER_COLOR_Black);
 | 
			
		||||
  clutter_actor_set_size (flash, window->rect.width, window->rect.height);
 | 
			
		||||
  clutter_actor_set_position (flash,
 | 
			
		||||
                              window->custom_frame_extents.left,
 | 
			
		||||
                              window->custom_frame_extents.top);
 | 
			
		||||
  clutter_actor_set_opacity (flash, 0);
 | 
			
		||||
  clutter_actor_add_child (window_actor, flash);
 | 
			
		||||
 | 
			
		||||
  clutter_actor_save_easing_state (flash);
 | 
			
		||||
  clutter_actor_set_easing_mode (flash, CLUTTER_EASE_IN_QUAD);
 | 
			
		||||
  clutter_actor_set_easing_duration (flash, FLASH_TIME_MS);
 | 
			
		||||
  clutter_actor_set_opacity (flash, 192);
 | 
			
		||||
 | 
			
		||||
  transition = clutter_actor_get_transition (flash, "opacity");
 | 
			
		||||
  clutter_timeline_set_auto_reverse (CLUTTER_TIMELINE (transition), TRUE);
 | 
			
		||||
  clutter_timeline_set_repeat_count (CLUTTER_TIMELINE (transition), 2);
 | 
			
		||||
 | 
			
		||||
  g_signal_connect (transition, "stopped",
 | 
			
		||||
                    G_CALLBACK (window_flash_out_completed), flash);
 | 
			
		||||
 | 
			
		||||
  clutter_actor_restore_easing_state (flash);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * meta_compositor_monotonic_time_to_server_time:
 | 
			
		||||
 * @display: a #MetaDisplay
 | 
			
		||||
 
 | 
			
		||||
@@ -152,7 +152,6 @@ file_loaded (GObject      *source_object,
 | 
			
		||||
{
 | 
			
		||||
  MetaBackgroundImage *image = META_BACKGROUND_IMAGE (source_object);
 | 
			
		||||
  GError *error = NULL;
 | 
			
		||||
  CoglError *catch_error = NULL;
 | 
			
		||||
  GTask *task;
 | 
			
		||||
  CoglTexture *texture;
 | 
			
		||||
  GdkPixbuf *pixbuf;
 | 
			
		||||
@@ -187,10 +186,9 @@ file_loaded (GObject      *source_object,
 | 
			
		||||
                              has_alpha ? COGL_PIXEL_FORMAT_RGBA_8888 : COGL_PIXEL_FORMAT_RGB_888,
 | 
			
		||||
                              row_stride,
 | 
			
		||||
                              pixels, 0,
 | 
			
		||||
                              &catch_error))
 | 
			
		||||
                              NULL))
 | 
			
		||||
    {
 | 
			
		||||
      g_warning ("Failed to create texture for background");
 | 
			
		||||
      cogl_error_free (catch_error);
 | 
			
		||||
      cogl_object_unref (texture);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -17,14 +17,11 @@
 | 
			
		||||
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <meta/util.h>
 | 
			
		||||
#include <meta/meta-background.h>
 | 
			
		||||
#include <meta/meta-background-image.h>
 | 
			
		||||
#include "meta-background-private.h"
 | 
			
		||||
#include "cogl-utils.h"
 | 
			
		||||
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
  CHANGED,
 | 
			
		||||
@@ -74,8 +71,6 @@ enum
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE (MetaBackground, meta_background, G_TYPE_OBJECT)
 | 
			
		||||
 | 
			
		||||
static gboolean texture_has_alpha (CoglTexture *texture);
 | 
			
		||||
 | 
			
		||||
static GSList *all_backgrounds = NULL;
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -479,7 +474,7 @@ get_texture_area (MetaBackground          *self,
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
static void
 | 
			
		||||
draw_texture (MetaBackground        *self,
 | 
			
		||||
              CoglFramebuffer       *framebuffer,
 | 
			
		||||
              CoglPipeline          *pipeline,
 | 
			
		||||
@@ -488,7 +483,6 @@ draw_texture (MetaBackground        *self,
 | 
			
		||||
{
 | 
			
		||||
  MetaBackgroundPrivate *priv = self->priv;
 | 
			
		||||
  cairo_rectangle_int_t texture_area;
 | 
			
		||||
  gboolean bare_region_visible;
 | 
			
		||||
 | 
			
		||||
  get_texture_area (self, monitor_area, texture, &texture_area);
 | 
			
		||||
 | 
			
		||||
@@ -509,9 +503,6 @@ draw_texture (MetaBackground        *self,
 | 
			
		||||
                                                - texture_area.y / (float)texture_area.height,
 | 
			
		||||
                                                (monitor_area->width - texture_area.x) / (float)texture_area.width,
 | 
			
		||||
                                                (monitor_area->height - texture_area.y) / (float)texture_area.height);
 | 
			
		||||
 | 
			
		||||
      bare_region_visible = texture_has_alpha (texture);
 | 
			
		||||
 | 
			
		||||
      /* Draw just the texture */
 | 
			
		||||
      break;
 | 
			
		||||
    case G_DESKTOP_BACKGROUND_STYLE_CENTERED:
 | 
			
		||||
@@ -522,16 +513,11 @@ draw_texture (MetaBackground        *self,
 | 
			
		||||
                                                texture_area.x + texture_area.width,
 | 
			
		||||
                                                texture_area.y + texture_area.height,
 | 
			
		||||
                                                0, 0, 1.0, 1.0);
 | 
			
		||||
      bare_region_visible = texture_has_alpha (texture) || memcmp (&texture_area, monitor_area, sizeof (cairo_rectangle_int_t)) != 0;
 | 
			
		||||
      break;
 | 
			
		||||
    case G_DESKTOP_BACKGROUND_STYLE_NONE:
 | 
			
		||||
      bare_region_visible = TRUE;
 | 
			
		||||
      break;
 | 
			
		||||
    default:
 | 
			
		||||
      g_return_val_if_reached(FALSE);
 | 
			
		||||
      g_return_if_reached();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  return bare_region_visible;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -543,7 +529,6 @@ ensure_color_texture (MetaBackground *self)
 | 
			
		||||
    {
 | 
			
		||||
      ClutterBackend *backend = clutter_get_default_backend ();
 | 
			
		||||
      CoglContext *ctx = clutter_backend_get_cogl_context (backend);
 | 
			
		||||
      CoglError *error = NULL;
 | 
			
		||||
      uint8_t pixels[6];
 | 
			
		||||
      int width, height;
 | 
			
		||||
 | 
			
		||||
@@ -584,13 +569,7 @@ ensure_color_texture (MetaBackground *self)
 | 
			
		||||
                                                                         COGL_PIXEL_FORMAT_RGB_888,
 | 
			
		||||
                                                                         width * 3,
 | 
			
		||||
                                                                         pixels,
 | 
			
		||||
                                                                         &error));
 | 
			
		||||
 | 
			
		||||
      if (error != NULL)
 | 
			
		||||
        {
 | 
			
		||||
          meta_warning ("Failed to allocate color texture: %s\n", error->message);
 | 
			
		||||
          cogl_error_free (error);
 | 
			
		||||
        }
 | 
			
		||||
                                                                         NULL));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -769,7 +748,6 @@ meta_background_get_texture (MetaBackground         *self,
 | 
			
		||||
  if (monitor->dirty)
 | 
			
		||||
    {
 | 
			
		||||
      CoglError *catch_error = NULL;
 | 
			
		||||
      gboolean bare_region_visible = FALSE;
 | 
			
		||||
 | 
			
		||||
      if (monitor->texture == NULL)
 | 
			
		||||
        {
 | 
			
		||||
@@ -805,9 +783,9 @@ meta_background_get_texture (MetaBackground         *self,
 | 
			
		||||
          cogl_pipeline_set_layer_texture (pipeline, 0, texture2);
 | 
			
		||||
          cogl_pipeline_set_layer_wrap_mode (pipeline, 0, get_wrap_mode (priv->style));
 | 
			
		||||
 | 
			
		||||
          bare_region_visible = draw_texture (self,
 | 
			
		||||
                                              monitor->fbo, pipeline,
 | 
			
		||||
                                              texture2, &monitor_area);
 | 
			
		||||
          draw_texture (self,
 | 
			
		||||
                        monitor->fbo, pipeline,
 | 
			
		||||
                        texture2, &monitor_area);
 | 
			
		||||
 | 
			
		||||
          cogl_object_unref (pipeline);
 | 
			
		||||
        }
 | 
			
		||||
@@ -818,7 +796,8 @@ meta_background_get_texture (MetaBackground         *self,
 | 
			
		||||
                                    0.0, 0.0, 0.0, 0.0);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      if (texture1 != NULL && priv->blend_factor != 1.0)
 | 
			
		||||
      if (texture1 != NULL &&
 | 
			
		||||
          !(texture2 != NULL && priv->blend_factor == 1.0 && !texture_has_alpha (texture2)))
 | 
			
		||||
        {
 | 
			
		||||
          CoglPipeline *pipeline = create_pipeline (PIPELINE_ADD);
 | 
			
		||||
          cogl_pipeline_set_color4f (pipeline,
 | 
			
		||||
@@ -829,14 +808,15 @@ meta_background_get_texture (MetaBackground         *self,
 | 
			
		||||
          cogl_pipeline_set_layer_texture (pipeline, 0, texture1);
 | 
			
		||||
          cogl_pipeline_set_layer_wrap_mode (pipeline, 0, get_wrap_mode (priv->style));
 | 
			
		||||
 | 
			
		||||
          bare_region_visible = bare_region_visible || draw_texture (self,
 | 
			
		||||
                                                                     monitor->fbo, pipeline,
 | 
			
		||||
                                                                     texture1, &monitor_area);
 | 
			
		||||
          draw_texture (self,
 | 
			
		||||
                        monitor->fbo, pipeline,
 | 
			
		||||
                        texture1, &monitor_area);
 | 
			
		||||
 | 
			
		||||
          cogl_object_unref (pipeline);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      if (bare_region_visible)
 | 
			
		||||
      if (!((texture2 != NULL && priv->blend_factor == 1.0 && !texture_has_alpha (texture2)) ||
 | 
			
		||||
            (texture1 != NULL && !texture_has_alpha (texture1))))
 | 
			
		||||
        {
 | 
			
		||||
          CoglPipeline *pipeline = create_pipeline (PIPELINE_OVER_REVERSE);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -187,7 +187,7 @@ meta_feedback_actor_set_anchor (MetaFeedbackActor *self,
 | 
			
		||||
  if (priv->anchor_x == anchor_x && priv->anchor_y == anchor_y)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  if (priv->anchor_x != anchor_x)
 | 
			
		||||
  if (priv->anchor_x != anchor_y)
 | 
			
		||||
    {
 | 
			
		||||
      priv->anchor_x = anchor_x;
 | 
			
		||||
      g_object_notify (G_OBJECT (self), "anchor-x");
 | 
			
		||||
 
 | 
			
		||||
@@ -149,7 +149,7 @@ meta_plugin_manager_kill_switch_workspace (MetaPluginManager *plugin_mgr)
 | 
			
		||||
gboolean
 | 
			
		||||
meta_plugin_manager_event_simple (MetaPluginManager *plugin_mgr,
 | 
			
		||||
                                  MetaWindowActor   *actor,
 | 
			
		||||
                                  MetaPluginEffect   event)
 | 
			
		||||
                                  unsigned long      event)
 | 
			
		||||
{
 | 
			
		||||
  MetaPlugin *plugin = plugin_mgr->plugin;
 | 
			
		||||
  MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin);
 | 
			
		||||
@@ -196,32 +196,67 @@ meta_plugin_manager_event_simple (MetaPluginManager *plugin_mgr,
 | 
			
		||||
        }
 | 
			
		||||
      break;
 | 
			
		||||
    default:
 | 
			
		||||
      g_warning ("Incorrect handler called for event %d", event);
 | 
			
		||||
      g_warning ("Incorrect handler called for event %lu", event);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  return retval;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * The public method that the compositor hooks into for maximize and unmaximize
 | 
			
		||||
 * events.
 | 
			
		||||
 *
 | 
			
		||||
 * 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_event_size_change (MetaPluginManager *plugin_mgr,
 | 
			
		||||
                                       MetaWindowActor   *actor,
 | 
			
		||||
                                       MetaSizeChange     which_change,
 | 
			
		||||
                                       MetaRectangle     *old_frame_rect,
 | 
			
		||||
                                       MetaRectangle     *old_buffer_rect)
 | 
			
		||||
meta_plugin_manager_event_maximize (MetaPluginManager *plugin_mgr,
 | 
			
		||||
                                    MetaWindowActor   *actor,
 | 
			
		||||
                                    unsigned long      event,
 | 
			
		||||
                                    gint               target_x,
 | 
			
		||||
                                    gint               target_y,
 | 
			
		||||
                                    gint               target_width,
 | 
			
		||||
                                    gint               target_height)
 | 
			
		||||
{
 | 
			
		||||
  MetaPlugin *plugin = plugin_mgr->plugin;
 | 
			
		||||
  MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin);
 | 
			
		||||
  MetaDisplay *display = plugin_mgr->compositor->display;
 | 
			
		||||
  gboolean retval = FALSE;
 | 
			
		||||
 | 
			
		||||
  if (display->display_opening)
 | 
			
		||||
    return FALSE;
 | 
			
		||||
 | 
			
		||||
  if (!klass->size_change)
 | 
			
		||||
    return FALSE;
 | 
			
		||||
  switch (event)
 | 
			
		||||
    {
 | 
			
		||||
    case META_PLUGIN_MAXIMIZE:
 | 
			
		||||
      if (klass->maximize)
 | 
			
		||||
        {
 | 
			
		||||
          retval = TRUE;
 | 
			
		||||
          meta_plugin_manager_kill_window_effects (plugin_mgr,
 | 
			
		||||
                                                   actor);
 | 
			
		||||
          klass->maximize (plugin, actor,
 | 
			
		||||
                           target_x, target_y,
 | 
			
		||||
                           target_width, target_height);
 | 
			
		||||
        }
 | 
			
		||||
      break;
 | 
			
		||||
    case META_PLUGIN_UNMAXIMIZE:
 | 
			
		||||
      if (klass->unmaximize)
 | 
			
		||||
        {
 | 
			
		||||
          retval = TRUE;
 | 
			
		||||
          meta_plugin_manager_kill_window_effects (plugin_mgr,
 | 
			
		||||
                                                   actor);
 | 
			
		||||
          klass->unmaximize (plugin, actor,
 | 
			
		||||
                             target_x, target_y,
 | 
			
		||||
                             target_width, target_height);
 | 
			
		||||
        }
 | 
			
		||||
      break;
 | 
			
		||||
    default:
 | 
			
		||||
      g_warning ("Incorrect handler called for event %lu", event);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  meta_plugin_manager_kill_window_effects (plugin_mgr, actor);
 | 
			
		||||
  klass->size_change (plugin, actor, which_change, old_frame_rect, old_buffer_rect);
 | 
			
		||||
  return TRUE;
 | 
			
		||||
  return retval;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 
 | 
			
		||||
@@ -24,17 +24,20 @@
 | 
			
		||||
 | 
			
		||||
#include <meta/types.h>
 | 
			
		||||
#include <meta/screen.h>
 | 
			
		||||
#include <meta/meta-plugin.h>
 | 
			
		||||
 | 
			
		||||
typedef enum {
 | 
			
		||||
  META_PLUGIN_NONE,
 | 
			
		||||
  META_PLUGIN_MINIMIZE,
 | 
			
		||||
  META_PLUGIN_MAP,
 | 
			
		||||
  META_PLUGIN_DESTROY,
 | 
			
		||||
  META_PLUGIN_SWITCH_WORKSPACE,
 | 
			
		||||
  META_PLUGIN_UNMINIMIZE,
 | 
			
		||||
  META_PLUGIN_SIZE_CHANGE,
 | 
			
		||||
} MetaPluginEffect;
 | 
			
		||||
#define  META_PLUGIN_FROM_MANAGER_
 | 
			
		||||
#include <meta/meta-plugin.h>
 | 
			
		||||
#undef   META_PLUGIN_FROM_MANAGER_
 | 
			
		||||
 | 
			
		||||
#define META_PLUGIN_MINIMIZE         (1<<0)
 | 
			
		||||
#define META_PLUGIN_MAXIMIZE         (1<<1)
 | 
			
		||||
#define META_PLUGIN_UNMAXIMIZE       (1<<2)
 | 
			
		||||
#define META_PLUGIN_MAP              (1<<3)
 | 
			
		||||
#define META_PLUGIN_DESTROY          (1<<4)
 | 
			
		||||
#define META_PLUGIN_SWITCH_WORKSPACE (1<<5)
 | 
			
		||||
#define META_PLUGIN_UNMINIMIZE       (1<<6)
 | 
			
		||||
 | 
			
		||||
#define META_PLUGIN_ALL_EFFECTS      (~0)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * MetaPluginManager: (skip)
 | 
			
		||||
@@ -48,13 +51,15 @@ void     meta_plugin_manager_load         (const gchar       *plugin_name);
 | 
			
		||||
 | 
			
		||||
gboolean meta_plugin_manager_event_simple (MetaPluginManager *mgr,
 | 
			
		||||
                                           MetaWindowActor   *actor,
 | 
			
		||||
                                           MetaPluginEffect   event);
 | 
			
		||||
                                           unsigned long      event);
 | 
			
		||||
 | 
			
		||||
gboolean meta_plugin_manager_event_size_change    (MetaPluginManager *mgr,
 | 
			
		||||
                                                   MetaWindowActor   *actor,
 | 
			
		||||
                                                   MetaSizeChange     which_change,
 | 
			
		||||
                                                   MetaRectangle     *old_frame_rect,
 | 
			
		||||
                                                   MetaRectangle     *old_buffer_rect);
 | 
			
		||||
gboolean meta_plugin_manager_event_maximize    (MetaPluginManager *mgr,
 | 
			
		||||
                                                MetaWindowActor   *actor,
 | 
			
		||||
                                                unsigned long      event,
 | 
			
		||||
                                                gint               target_x,
 | 
			
		||||
                                                gint               target_y,
 | 
			
		||||
                                                gint               target_width,
 | 
			
		||||
                                                gint               target_height);
 | 
			
		||||
 | 
			
		||||
gboolean meta_plugin_manager_switch_workspace (MetaPluginManager   *mgr,
 | 
			
		||||
                                               gint                 from,
 | 
			
		||||
 
 | 
			
		||||
@@ -118,10 +118,17 @@ meta_plugin_unminimize_completed (MetaPlugin      *plugin,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
meta_plugin_size_change_completed (MetaPlugin      *plugin,
 | 
			
		||||
                                   MetaWindowActor *actor)
 | 
			
		||||
meta_plugin_maximize_completed (MetaPlugin      *plugin,
 | 
			
		||||
                                MetaWindowActor *actor)
 | 
			
		||||
{
 | 
			
		||||
  meta_plugin_window_effect_completed (plugin, actor, META_PLUGIN_SIZE_CHANGE);
 | 
			
		||||
  meta_plugin_window_effect_completed (plugin, actor, META_PLUGIN_MAXIMIZE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
meta_plugin_unmaximize_completed (MetaPlugin      *plugin,
 | 
			
		||||
                                  MetaWindowActor *actor)
 | 
			
		||||
{
 | 
			
		||||
  meta_plugin_window_effect_completed (plugin, actor, META_PLUGIN_UNMAXIMIZE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										66
									
								
								src/compositor/meta-shadow-factory-private.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								src/compositor/meta-shadow-factory-private.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,66 @@
 | 
			
		||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
 | 
			
		||||
/*
 | 
			
		||||
 * MetaShadowFactory:
 | 
			
		||||
 *
 | 
			
		||||
 * Create and cache shadow textures for arbitrary window shapes
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (C) 2010 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, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef __META_SHADOW_FACTORY_PRIVATE_H__
 | 
			
		||||
#define __META_SHADOW_FACTORY_PRIVATE_H__
 | 
			
		||||
 | 
			
		||||
#include <cairo.h>
 | 
			
		||||
#include <clutter/clutter.h>
 | 
			
		||||
#include "meta-window-shape.h"
 | 
			
		||||
#include <meta/meta-shadow-factory.h>
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * MetaShadow:
 | 
			
		||||
 * #MetaShadow holds a shadow texture along with information about how to
 | 
			
		||||
 * apply that texture to draw a window texture. (E.g., it knows how big the
 | 
			
		||||
 * unscaled borders are on each side of the shadow texture.)
 | 
			
		||||
 */
 | 
			
		||||
typedef struct _MetaShadow MetaShadow;
 | 
			
		||||
 | 
			
		||||
MetaShadow *meta_shadow_ref         (MetaShadow            *shadow);
 | 
			
		||||
void        meta_shadow_unref       (MetaShadow            *shadow);
 | 
			
		||||
CoglTexture*meta_shadow_get_texture (MetaShadow            *shadow);
 | 
			
		||||
void        meta_shadow_paint       (MetaShadow            *shadow,
 | 
			
		||||
                                     int                    window_x,
 | 
			
		||||
                                     int                    window_y,
 | 
			
		||||
                                     int                    window_width,
 | 
			
		||||
                                     int                    window_height,
 | 
			
		||||
                                     guint8                 opacity,
 | 
			
		||||
                                     cairo_region_t        *clip,
 | 
			
		||||
                                     gboolean               clip_strictly);
 | 
			
		||||
void        meta_shadow_get_bounds  (MetaShadow            *shadow,
 | 
			
		||||
                                     int                    window_x,
 | 
			
		||||
                                     int                    window_y,
 | 
			
		||||
                                     int                    window_width,
 | 
			
		||||
                                     int                    window_height,
 | 
			
		||||
                                     cairo_rectangle_int_t *bounds);
 | 
			
		||||
 | 
			
		||||
MetaShadowFactory *meta_shadow_factory_new (void);
 | 
			
		||||
 | 
			
		||||
MetaShadow *meta_shadow_factory_get_shadow (MetaShadowFactory *factory,
 | 
			
		||||
                                            MetaWindowShape   *shape,
 | 
			
		||||
                                            int                width,
 | 
			
		||||
                                            int                height,
 | 
			
		||||
                                            const char        *class_name,
 | 
			
		||||
                                            gboolean           focused);
 | 
			
		||||
 | 
			
		||||
#endif /* __META_SHADOW_FACTORY_PRIVATE_H__ */
 | 
			
		||||
@@ -26,10 +26,8 @@
 | 
			
		||||
#include <math.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
#include <meta/meta-shadow-factory.h>
 | 
			
		||||
#include <meta/util.h>
 | 
			
		||||
 | 
			
		||||
#include "cogl-utils.h"
 | 
			
		||||
#include "meta-shadow-factory-private.h"
 | 
			
		||||
#include "region-utils.h"
 | 
			
		||||
 | 
			
		||||
/* This file implements blurring the shape of a window to produce a
 | 
			
		||||
@@ -708,7 +706,6 @@ make_shadow (MetaShadow     *shadow,
 | 
			
		||||
{
 | 
			
		||||
  ClutterBackend *backend = clutter_get_default_backend ();
 | 
			
		||||
  CoglContext *ctx = clutter_backend_get_cogl_context (backend);
 | 
			
		||||
  CoglError *error = NULL;
 | 
			
		||||
  int d = get_box_filter_size (shadow->key.radius);
 | 
			
		||||
  int spread = get_shadow_spread (shadow->key.radius);
 | 
			
		||||
  cairo_rectangle_int_t extents;
 | 
			
		||||
@@ -806,13 +803,7 @@ make_shadow (MetaShadow     *shadow,
 | 
			
		||||
                                                                 (buffer +
 | 
			
		||||
                                                                  (y_offset - shadow->outer_border_top) * buffer_width +
 | 
			
		||||
                                                                  (x_offset - shadow->outer_border_left)),
 | 
			
		||||
                                                                 &error));
 | 
			
		||||
 | 
			
		||||
  if (error)
 | 
			
		||||
    {
 | 
			
		||||
      meta_warning ("Failed to allocate shadow texture: %s\n", error->message);
 | 
			
		||||
      cogl_error_free (error);
 | 
			
		||||
    }
 | 
			
		||||
                                                                 NULL));
 | 
			
		||||
 | 
			
		||||
  cairo_region_destroy (row_convolve_region);
 | 
			
		||||
  cairo_region_destroy (column_convolve_region);
 | 
			
		||||
@@ -1057,6 +1048,3 @@ meta_shadow_factory_get_params (MetaShadowFactory *factory,
 | 
			
		||||
  if (params)
 | 
			
		||||
    *params = *stored_params;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
G_DEFINE_BOXED_TYPE (MetaShadow, meta_shadow,
 | 
			
		||||
                     meta_shadow_ref, meta_shadow_unref)
 | 
			
		||||
 
 | 
			
		||||
@@ -32,10 +32,6 @@
 | 
			
		||||
ClutterActor *meta_shaped_texture_new (void);
 | 
			
		||||
void meta_shaped_texture_set_texture (MetaShapedTexture *stex,
 | 
			
		||||
                                      CoglTexture       *texture);
 | 
			
		||||
void meta_shaped_texture_set_fallback_size (MetaShapedTexture *stex,
 | 
			
		||||
                                            guint              fallback_width,
 | 
			
		||||
                                            guint              fallback_height);
 | 
			
		||||
gboolean meta_shaped_texture_is_obscured (MetaShapedTexture *self);
 | 
			
		||||
cairo_region_t * meta_shaped_texture_get_opaque_region (MetaShapedTexture *stex);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -86,7 +86,6 @@ struct _MetaShapedTexturePrivate
 | 
			
		||||
  cairo_region_t *unobscured_region;
 | 
			
		||||
 | 
			
		||||
  guint tex_width, tex_height;
 | 
			
		||||
  guint fallback_width, fallback_height;
 | 
			
		||||
 | 
			
		||||
  guint create_mipmaps : 1;
 | 
			
		||||
};
 | 
			
		||||
@@ -137,20 +136,7 @@ set_unobscured_region (MetaShapedTexture *self,
 | 
			
		||||
  g_clear_pointer (&priv->unobscured_region, (GDestroyNotify) cairo_region_destroy);
 | 
			
		||||
  if (unobscured_region)
 | 
			
		||||
    {
 | 
			
		||||
      guint width, height;
 | 
			
		||||
 | 
			
		||||
      if (priv->texture)
 | 
			
		||||
        {
 | 
			
		||||
          width = priv->tex_width;
 | 
			
		||||
          height = priv->tex_height;
 | 
			
		||||
        }
 | 
			
		||||
      else
 | 
			
		||||
        {
 | 
			
		||||
          width = priv->fallback_width;
 | 
			
		||||
          height = priv->fallback_height;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      cairo_rectangle_int_t bounds = { 0, 0, width, height };
 | 
			
		||||
      cairo_rectangle_int_t bounds = { 0, 0, priv->tex_width, priv->tex_height };
 | 
			
		||||
      priv->unobscured_region = cairo_region_copy (unobscured_region);
 | 
			
		||||
      cairo_region_intersect_rectangle (priv->unobscured_region, &bounds);
 | 
			
		||||
    }
 | 
			
		||||
@@ -187,25 +173,10 @@ meta_shaped_texture_dispose (GObject *object)
 | 
			
		||||
  G_OBJECT_CLASS (meta_shaped_texture_parent_class)->dispose (object);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static CoglPipeline *
 | 
			
		||||
get_base_pipeline (CoglContext *ctx)
 | 
			
		||||
{
 | 
			
		||||
  static CoglPipeline *template = NULL;
 | 
			
		||||
  if (G_UNLIKELY (template == NULL))
 | 
			
		||||
    {
 | 
			
		||||
      template = cogl_pipeline_new (ctx);
 | 
			
		||||
      cogl_pipeline_set_layer_wrap_mode_s (template, 0, COGL_PIPELINE_WRAP_MODE_CLAMP_TO_EDGE);
 | 
			
		||||
      cogl_pipeline_set_layer_wrap_mode_t (template, 0, COGL_PIPELINE_WRAP_MODE_CLAMP_TO_EDGE);
 | 
			
		||||
      cogl_pipeline_set_layer_wrap_mode_s (template, 1, COGL_PIPELINE_WRAP_MODE_CLAMP_TO_EDGE);
 | 
			
		||||
      cogl_pipeline_set_layer_wrap_mode_t (template, 1, COGL_PIPELINE_WRAP_MODE_CLAMP_TO_EDGE);
 | 
			
		||||
    }
 | 
			
		||||
  return template;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static CoglPipeline *
 | 
			
		||||
get_unmasked_pipeline (CoglContext *ctx)
 | 
			
		||||
{
 | 
			
		||||
  return get_base_pipeline (ctx);
 | 
			
		||||
  return cogl_pipeline_new (ctx);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static CoglPipeline *
 | 
			
		||||
@@ -214,13 +185,13 @@ get_masked_pipeline (CoglContext *ctx)
 | 
			
		||||
  static CoglPipeline *template = NULL;
 | 
			
		||||
  if (G_UNLIKELY (template == NULL))
 | 
			
		||||
    {
 | 
			
		||||
      template = cogl_pipeline_copy (get_base_pipeline (ctx));
 | 
			
		||||
      template = cogl_pipeline_new (ctx);
 | 
			
		||||
      cogl_pipeline_set_layer_combine (template, 1,
 | 
			
		||||
                                       "RGBA = MODULATE (PREVIOUS, TEXTURE[A])",
 | 
			
		||||
                                       NULL);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  return template;
 | 
			
		||||
  return cogl_pipeline_copy (template);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static CoglPipeline *
 | 
			
		||||
@@ -230,7 +201,7 @@ get_unblended_pipeline (CoglContext *ctx)
 | 
			
		||||
  if (G_UNLIKELY (template == NULL))
 | 
			
		||||
    {
 | 
			
		||||
      CoglColor color;
 | 
			
		||||
      template = cogl_pipeline_copy (get_base_pipeline (ctx));
 | 
			
		||||
      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)",
 | 
			
		||||
@@ -238,7 +209,7 @@ get_unblended_pipeline (CoglContext *ctx)
 | 
			
		||||
      cogl_pipeline_set_color (template, &color);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  return template;
 | 
			
		||||
  return cogl_pipeline_copy (template);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -303,7 +274,6 @@ set_cogl_texture (MetaShapedTexture *stex,
 | 
			
		||||
    {
 | 
			
		||||
      priv->tex_width = width;
 | 
			
		||||
      priv->tex_height = height;
 | 
			
		||||
      meta_shaped_texture_set_mask_texture (stex, NULL);
 | 
			
		||||
      clutter_actor_queue_relayout (CLUTTER_ACTOR (stex));
 | 
			
		||||
      g_signal_emit (stex, signals[SIZE_CHANGED], 0);
 | 
			
		||||
    }
 | 
			
		||||
@@ -450,6 +420,8 @@ meta_shaped_texture_paint (ClutterActor *actor)
 | 
			
		||||
              cairo_region_get_rectangle (region, i, &rect);
 | 
			
		||||
              paint_clipped_rectangle (fb, opaque_pipeline, &rect, &alloc);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
          cogl_object_unref (opaque_pipeline);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      cairo_region_destroy (region);
 | 
			
		||||
@@ -512,6 +484,8 @@ meta_shaped_texture_paint (ClutterActor *actor)
 | 
			
		||||
                                           alloc.x2 - alloc.x1,
 | 
			
		||||
                                           alloc.y2 - alloc.y1);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      cogl_object_unref (blended_pipeline);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (blended_region != NULL)
 | 
			
		||||
@@ -524,18 +498,17 @@ meta_shaped_texture_get_preferred_width (ClutterActor *self,
 | 
			
		||||
                                         gfloat       *min_width_p,
 | 
			
		||||
                                         gfloat       *natural_width_p)
 | 
			
		||||
{
 | 
			
		||||
  MetaShapedTexturePrivate *priv = META_SHAPED_TEXTURE (self)->priv;
 | 
			
		||||
  guint width;
 | 
			
		||||
  MetaShapedTexturePrivate *priv;
 | 
			
		||||
 | 
			
		||||
  if (priv->texture)
 | 
			
		||||
    width = priv->tex_width;
 | 
			
		||||
  else
 | 
			
		||||
    width = priv->fallback_width;
 | 
			
		||||
  g_return_if_fail (META_IS_SHAPED_TEXTURE (self));
 | 
			
		||||
 | 
			
		||||
  priv = META_SHAPED_TEXTURE (self)->priv;
 | 
			
		||||
 | 
			
		||||
  if (min_width_p)
 | 
			
		||||
    *min_width_p = width;
 | 
			
		||||
    *min_width_p = priv->tex_width;
 | 
			
		||||
 | 
			
		||||
  if (natural_width_p)
 | 
			
		||||
    *natural_width_p = width;
 | 
			
		||||
    *natural_width_p = priv->tex_width;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -544,18 +517,17 @@ meta_shaped_texture_get_preferred_height (ClutterActor *self,
 | 
			
		||||
                                          gfloat       *min_height_p,
 | 
			
		||||
                                          gfloat       *natural_height_p)
 | 
			
		||||
{
 | 
			
		||||
  MetaShapedTexturePrivate *priv = META_SHAPED_TEXTURE (self)->priv;
 | 
			
		||||
  guint height;
 | 
			
		||||
  MetaShapedTexturePrivate *priv;
 | 
			
		||||
 | 
			
		||||
  if (priv->texture)
 | 
			
		||||
    height = priv->tex_height;
 | 
			
		||||
  else
 | 
			
		||||
    height = priv->fallback_height;
 | 
			
		||||
  g_return_if_fail (META_IS_SHAPED_TEXTURE (self));
 | 
			
		||||
 | 
			
		||||
  priv = META_SHAPED_TEXTURE (self)->priv;
 | 
			
		||||
 | 
			
		||||
  if (min_height_p)
 | 
			
		||||
    *min_height_p = height;
 | 
			
		||||
    *min_height_p = priv->tex_height;
 | 
			
		||||
 | 
			
		||||
  if (natural_height_p)
 | 
			
		||||
    *natural_height_p = height;
 | 
			
		||||
    *natural_height_p = priv->tex_height;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cairo_region_t *
 | 
			
		||||
@@ -790,13 +762,6 @@ meta_shaped_texture_set_opaque_region (MetaShapedTexture *stex,
 | 
			
		||||
    priv->opaque_region = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
cairo_region_t *
 | 
			
		||||
meta_shaped_texture_get_opaque_region (MetaShapedTexture *stex)
 | 
			
		||||
{
 | 
			
		||||
  MetaShapedTexturePrivate *priv = stex->priv;
 | 
			
		||||
  return priv->opaque_region;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * meta_shaped_texture_get_image:
 | 
			
		||||
 * @stex: A #MetaShapedTexture
 | 
			
		||||
@@ -895,17 +860,6 @@ meta_shaped_texture_get_image (MetaShapedTexture     *stex,
 | 
			
		||||
  return surface;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
meta_shaped_texture_set_fallback_size (MetaShapedTexture *self,
 | 
			
		||||
                                       guint              fallback_width,
 | 
			
		||||
                                       guint              fallback_height)
 | 
			
		||||
{
 | 
			
		||||
  MetaShapedTexturePrivate *priv = self->priv;
 | 
			
		||||
 | 
			
		||||
  priv->fallback_width = fallback_width;
 | 
			
		||||
  priv->fallback_height = fallback_height;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
meta_shaped_texture_cull_out (MetaCullable   *cullable,
 | 
			
		||||
                              cairo_region_t *unobscured_region,
 | 
			
		||||
 
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user