Compare commits
	
		
			220 Commits
		
	
	
		
			3.17.91
			...
			wip/jstpie
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					8c9aa2efd9 | ||
| 
						 | 
					ef18b7ea25 | ||
| 
						 | 
					0044e225aa | ||
| 
						 | 
					c25c143b24 | ||
| 
						 | 
					b87da87252 | ||
| 
						 | 
					f9258bb5e3 | ||
| 
						 | 
					3d747b00e6 | ||
| 
						 | 
					450345b4d0 | ||
| 
						 | 
					7563e1ebcd | ||
| 
						 | 
					f96cc4dd69 | ||
| 
						 | 
					c65a9c4d2e | ||
| 
						 | 
					c01bd37edc | ||
| 
						 | 
					021cecbce2 | ||
| 
						 | 
					2a0cb7ff05 | ||
| 
						 | 
					0085a94706 | ||
| 
						 | 
					5db38194dc | ||
| 
						 | 
					2a26143149 | ||
| 
						 | 
					62f22557aa | ||
| 
						 | 
					516ea5a02e | ||
| 
						 | 
					9154471aba | ||
| 
						 | 
					fbf6746acf | ||
| 
						 | 
					a36686a6aa | ||
| 
						 | 
					fd837d74d1 | ||
| 
						 | 
					fd57334395 | ||
| 
						 | 
					85100cb65f | ||
| 
						 | 
					c70f6278d6 | ||
| 
						 | 
					e573441bac | ||
| 
						 | 
					5ed9571b37 | ||
| 
						 | 
					9d203ddc0f | ||
| 
						 | 
					508a13ae72 | ||
| 
						 | 
					c0b50cbdf2 | ||
| 
						 | 
					06f78549bd | ||
| 
						 | 
					67afd7a6d8 | ||
| 
						 | 
					ffa8c2f2b1 | ||
| 
						 | 
					3803a880e8 | ||
| 
						 | 
					965aedb0bb | ||
| 
						 | 
					80911535a7 | ||
| 
						 | 
					ca401d5036 | ||
| 
						 | 
					a1c091d98d | ||
| 
						 | 
					e1e08f0a68 | ||
| 
						 | 
					1a4f629554 | ||
| 
						 | 
					4113be770b | ||
| 
						 | 
					cf3f4850b8 | ||
| 
						 | 
					14f374096a | ||
| 
						 | 
					6fef5c37f7 | ||
| 
						 | 
					6e7455aa1e | ||
| 
						 | 
					03bf6fa399 | ||
| 
						 | 
					f777e761c0 | ||
| 
						 | 
					31201d9618 | ||
| 
						 | 
					d95d78ac15 | ||
| 
						 | 
					bef4f17c49 | ||
| 
						 | 
					f4b7ab0cb6 | ||
| 
						 | 
					a180dde01c | ||
| 
						 | 
					385c918e2e | ||
| 
						 | 
					d7401c8646 | ||
| 
						 | 
					a456d5eb19 | ||
| 
						 | 
					6c08799c7b | ||
| 
						 | 
					8d7bb6496c | ||
| 
						 | 
					f0496a2d3c | ||
| 
						 | 
					6664553b7e | ||
| 
						 | 
					2a950ca3b3 | ||
| 
						 | 
					463cd6382c | ||
| 
						 | 
					78db025b10 | ||
| 
						 | 
					f3265c28a9 | ||
| 
						 | 
					a6e5e459d3 | ||
| 
						 | 
					9ba399bf18 | ||
| 
						 | 
					a52c91e9e5 | ||
| 
						 | 
					9a7b47c23f | ||
| 
						 | 
					18f7d20006 | ||
| 
						 | 
					3f0ee88657 | ||
| 
						 | 
					c634718dfa | ||
| 
						 | 
					df6b31de05 | ||
| 
						 | 
					b8e29ae8c7 | ||
| 
						 | 
					cdba8e5cea | ||
| 
						 | 
					4fccdaafb7 | ||
| 
						 | 
					df0b465e76 | ||
| 
						 | 
					aacdd4fd5e | ||
| 
						 | 
					5f68c3a324 | ||
| 
						 | 
					8ceae3b054 | ||
| 
						 | 
					3fc5afaff1 | ||
| 
						 | 
					8b7464c648 | ||
| 
						 | 
					3e602b1765 | ||
| 
						 | 
					5858028411 | ||
| 
						 | 
					2c682ace81 | ||
| 
						 | 
					45f3106814 | ||
| 
						 | 
					aa947f9948 | ||
| 
						 | 
					0c72d1fcbd | ||
| 
						 | 
					6d22670307 | ||
| 
						 | 
					0b9e68e305 | ||
| 
						 | 
					da8155cbe5 | ||
| 
						 | 
					5b7a052e18 | ||
| 
						 | 
					6f26e39082 | ||
| 
						 | 
					489b96a310 | ||
| 
						 | 
					e65d90d624 | ||
| 
						 | 
					9c74e22313 | ||
| 
						 | 
					48a1fce151 | ||
| 
						 | 
					83e7f6f496 | ||
| 
						 | 
					3c5c3a6597 | ||
| 
						 | 
					1c3ea1649f | ||
| 
						 | 
					48a54e8ac4 | ||
| 
						 | 
					113a854048 | ||
| 
						 | 
					882f5fa79e | ||
| 
						 | 
					9acdb8012c | ||
| 
						 | 
					731d64e0e4 | ||
| 
						 | 
					ccf1bd9f27 | ||
| 
						 | 
					c164a8fe03 | ||
| 
						 | 
					1a39666f7c | ||
| 
						 | 
					f2731d4d6a | ||
| 
						 | 
					3e63fb7abe | ||
| 
						 | 
					8b4249ef26 | ||
| 
						 | 
					bf0be6ef12 | ||
| 
						 | 
					294702d3f1 | ||
| 
						 | 
					58f3b7c748 | ||
| 
						 | 
					e25502aeb2 | ||
| 
						 | 
					ffe4eaf00d | ||
| 
						 | 
					2f88a7a1e1 | ||
| 
						 | 
					cd7d564125 | ||
| 
						 | 
					ede81017ec | ||
| 
						 | 
					a539e6236a | ||
| 
						 | 
					90b7710834 | ||
| 
						 | 
					f8cc8f1dc1 | ||
| 
						 | 
					f8e5e3e435 | ||
| 
						 | 
					508e751ffd | ||
| 
						 | 
					207c847762 | ||
| 
						 | 
					3c980566d3 | ||
| 
						 | 
					50b59e0ca6 | ||
| 
						 | 
					14c52bb00a | ||
| 
						 | 
					9720b32987 | ||
| 
						 | 
					674ae262c8 | ||
| 
						 | 
					db297e7fdb | ||
| 
						 | 
					d57c146514 | ||
| 
						 | 
					ec5a4328e3 | ||
| 
						 | 
					e4ee72c481 | ||
| 
						 | 
					31f1e9ff0a | ||
| 
						 | 
					d6c049a8c9 | ||
| 
						 | 
					44047ac881 | ||
| 
						 | 
					464d5d8a13 | ||
| 
						 | 
					29811a85dc | ||
| 
						 | 
					36ee4e6c3b | ||
| 
						 | 
					2036e4c85c | ||
| 
						 | 
					f24034de84 | ||
| 
						 | 
					522ff86081 | ||
| 
						 | 
					669e3c8ed9 | ||
| 
						 | 
					ce850f464c | ||
| 
						 | 
					03eaa61cef | ||
| 
						 | 
					e10e953d24 | ||
| 
						 | 
					2b47bb3d82 | ||
| 
						 | 
					73d819116c | ||
| 
						 | 
					c8dd984663 | ||
| 
						 | 
					6087eb6d0e | ||
| 
						 | 
					97b43d1d36 | ||
| 
						 | 
					57ebadbaf8 | ||
| 
						 | 
					cad7bb1151 | ||
| 
						 | 
					9a376d47c5 | ||
| 
						 | 
					b79adc05f4 | ||
| 
						 | 
					f765c5e319 | ||
| 
						 | 
					edc445c0c9 | ||
| 
						 | 
					ab6b0f3f7f | ||
| 
						 | 
					5e7902e733 | ||
| 
						 | 
					f9f821aa55 | ||
| 
						 | 
					9ed4b2a5ae | ||
| 
						 | 
					0130ced790 | ||
| 
						 | 
					8dab07af82 | ||
| 
						 | 
					f6cd3fa5ed | ||
| 
						 | 
					faae1a028e | ||
| 
						 | 
					f5e32184fe | ||
| 
						 | 
					18c7138237 | ||
| 
						 | 
					3f0fbae7e2 | ||
| 
						 | 
					7f1a258ff9 | ||
| 
						 | 
					35b38d5cb2 | ||
| 
						 | 
					09e8a437d4 | ||
| 
						 | 
					d2bedcc182 | ||
| 
						 | 
					84eda6e459 | ||
| 
						 | 
					f5e7530fc7 | ||
| 
						 | 
					f983b34784 | ||
| 
						 | 
					36bbe64898 | ||
| 
						 | 
					627a393ed6 | ||
| 
						 | 
					a025b151ef | ||
| 
						 | 
					18b6f13395 | ||
| 
						 | 
					051413550f | ||
| 
						 | 
					3e10574736 | ||
| 
						 | 
					9a3041004b | ||
| 
						 | 
					87f71b8ce1 | ||
| 
						 | 
					825146f1e3 | ||
| 
						 | 
					52995416fd | ||
| 
						 | 
					6c43d0247a | ||
| 
						 | 
					9aa98d9f0c | ||
| 
						 | 
					c3a29d6df1 | ||
| 
						 | 
					82f84416a9 | ||
| 
						 | 
					9dd3162dbe | ||
| 
						 | 
					7ef519756a | ||
| 
						 | 
					3bbe74d1c1 | ||
| 
						 | 
					409f6718b8 | ||
| 
						 | 
					9c0e179080 | ||
| 
						 | 
					b3b278d41f | ||
| 
						 | 
					0f466dbafb | ||
| 
						 | 
					fbb4a9a3a6 | ||
| 
						 | 
					8ddae5cd71 | ||
| 
						 | 
					b0915c7b60 | ||
| 
						 | 
					831bb4e334 | ||
| 
						 | 
					4e025506fa | ||
| 
						 | 
					abccf451bf | ||
| 
						 | 
					14954117c0 | ||
| 
						 | 
					629f408fe5 | ||
| 
						 | 
					86c6ab3c01 | ||
| 
						 | 
					4a6ff94701 | ||
| 
						 | 
					e480b08d58 | ||
| 
						 | 
					caf53861d1 | ||
| 
						 | 
					d0480648ba | ||
| 
						 | 
					eb8cfe799f | ||
| 
						 | 
					b9f2541880 | ||
| 
						 | 
					bde9b08bfe | ||
| 
						 | 
					8a4c862633 | ||
| 
						 | 
					785c90f4b8 | ||
| 
						 | 
					dd6a11e4c7 | ||
| 
						 | 
					64e9503adb | ||
| 
						 | 
					36c885bf34 | ||
| 
						 | 
					ad7cde805d | ||
| 
						 | 
					2c2c67f4dc | ||
| 
						 | 
					cc4f8dfab0 | 
							
								
								
									
										6
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -17,10 +17,8 @@ config.status
 | 
			
		||||
config
 | 
			
		||||
configure
 | 
			
		||||
data/50-gnome-shell-*.xml
 | 
			
		||||
data/gnome-shell.desktop
 | 
			
		||||
data/gnome-shell.desktop.in
 | 
			
		||||
data/gnome-shell-wayland.desktop
 | 
			
		||||
data/gnome-shell-wayland.desktop.in
 | 
			
		||||
data/org.gnome.Shell.desktop
 | 
			
		||||
data/org.gnome.Shell.desktop.in
 | 
			
		||||
data/gnome-shell-extension-prefs.desktop
 | 
			
		||||
data/gnome-shell-extension-prefs.desktop.in
 | 
			
		||||
data/gnome-shell-theme.gresource
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										109
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										109
									
								
								NEWS
									
									
									
									
									
								
							@@ -1,3 +1,112 @@
 | 
			
		||||
3.19.4
 | 
			
		||||
======
 | 
			
		||||
* gdm: Do not allow bypassing disabled Sign In button [Michael; #746180]
 | 
			
		||||
* Style week numbers in calendar [Jakub; #683245]
 | 
			
		||||
* Misc. bug fixes [Christophe, Jakub, Rui; #759708, #760577, #760945]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Michael Catanzaro, Marek Černocký, Christophe Fergeau, Rui Matos,
 | 
			
		||||
  Jakub Steiner
 | 
			
		||||
 | 
			
		||||
Translations:
 | 
			
		||||
  Aurimas Černius [lt], Enrico Nicoletto [pt_BR], Andika Triwidada [id],
 | 
			
		||||
  Mario Blättermann [de], Marek Černocký [cs], Kjartan Maraas [nb],
 | 
			
		||||
  Muhammet Kara [tr], Stas Solovey [ru]
 | 
			
		||||
 | 
			
		||||
3.19.3
 | 
			
		||||
======
 | 
			
		||||
* Fix thumbnail scaling in window switcher on HiDPI [Florian; #758676]
 | 
			
		||||
* Update animated backgrounds on timezone changes [Florian; #758939]
 | 
			
		||||
* loginDialog: Update user list on user changes [Michael; #758568]
 | 
			
		||||
* Fix touch interaction on wayland [Carlos; #756748]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Michael Catanzaro, Carlos Garnacho, Kalev Lember, Florian Müllner
 | 
			
		||||
 | 
			
		||||
Translations:
 | 
			
		||||
  Daniel Korostil [uk], Muhammet Kara [tr], Dušan Kazik [sk],
 | 
			
		||||
  Baurzhan Muftakhidinov [kk], Marek Černocký [cs]
 | 
			
		||||
 | 
			
		||||
3.19.2
 | 
			
		||||
======
 | 
			
		||||
* Make gnome-shell DBus activatable [Ray; #741666]
 | 
			
		||||
* Fix browser plugin crash in Firefox [Carlos; #737932, #757940]
 | 
			
		||||
* Optionally show battery percentage in system status area [Bastien; #735771]
 | 
			
		||||
* Misc. bug fixes [Kalev, Florian, Bastien; #757418, #757668, #757779, #757816,
 | 
			
		||||
  #745626, #758220]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Michael Biebl, Michael Catanzaro, Piotr Drąg, Carlos Garcia Campos,
 | 
			
		||||
  Kalev Lember, Florian Müllner, Bastien Nocera, Ray Strode
 | 
			
		||||
 | 
			
		||||
Translations:
 | 
			
		||||
  Pedro Albuquerque [pt], liushuyu [zh_CN], Yosef Or Boczko [he],
 | 
			
		||||
  Jiri Grönroos [fi], Kjartan Maraas [nb], GNOME Translation Robot [gd],
 | 
			
		||||
  Daniel Mustieles [es], Marek Černocký [cs], Kristjan SCHMIDT [eo],
 | 
			
		||||
  Stas Solovey [ru]
 | 
			
		||||
 | 
			
		||||
3.19.1
 | 
			
		||||
======
 | 
			
		||||
* Respect text-scaling factor under wayland [Owen; #756447]
 | 
			
		||||
* Show the Bluetooth submenu when there were setup devices [Bastien; #723848]
 | 
			
		||||
* Misc. bug fixes [Florian, Cosimo, Rui, Ray, Owen, Jakub, Bastien;
 | 
			
		||||
  #756697, #756714, #756605, #754814, #738942, #756983, #756925,
 | 
			
		||||
  #757011, #673235, #757150]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Cosimo Cecchi, Rui Matos, Florian Müllner, Bastien Nocera, Jakub Steiner,
 | 
			
		||||
  Ray Strode, Owen W. Taylor
 | 
			
		||||
 | 
			
		||||
Translations:
 | 
			
		||||
  Kjartan Maraas [nb], Khaled Hosny [ar], Balázs Meskó [hu],
 | 
			
		||||
  Daniel Șerbănescu [ro], Marek Černocký [cs]
 | 
			
		||||
 | 
			
		||||
3.18.1
 | 
			
		||||
======
 | 
			
		||||
* Fix screen freezes when a notification is pushed [Carlos; #755425]
 | 
			
		||||
* Fix overzealous ellipsization in system status menu [Adel, Florian; #708472]
 | 
			
		||||
* Hide app menu when disabled by setting [Florian; #745919]
 | 
			
		||||
* Fix lightbox effect when animations are disabled [Rui; #755827]
 | 
			
		||||
* Do not mark hotplug notifications as critical [Florian; #657923]
 | 
			
		||||
* Fix icons getting cut off in dash [Florian; #745649]
 | 
			
		||||
* Animate fullscreen/unfullscreen operations [Cosimo; #707248]
 | 
			
		||||
* Misc. bug fixes [Florian, Owen; #748919, #674799, #754581]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Emmanuele Bassi, Michael Catanzaro, Cosimo Cecchi, Matthias Clasen,
 | 
			
		||||
  Adel Gadllah, Carlos Garnacho, Ekaterina Gerasimova, Rui Matos,
 | 
			
		||||
  Florian Müllner, Owen W. Taylor
 | 
			
		||||
 | 
			
		||||
Translations:
 | 
			
		||||
  Марко Костић [sr], Милош Поповић [sr@latin], Khaled Hosny [ar],
 | 
			
		||||
  Trần Ngọc Quân [vi], Petr Kovar [cs], Alexandre Franke [fr],
 | 
			
		||||
  Fran Dieguez [gl], Anders Jonsson [sv], Piotr Drąg [pl], Dušan Kazik [sk],
 | 
			
		||||
  Milo Casagrande [it], Changwoo Ryu [ko], Stas Solovey [ru],
 | 
			
		||||
  Rafael Fontenelle [pt_BR], Tom Tryfonidis [el], Aurimas Černius [lt],
 | 
			
		||||
  Seán de Búrca [ga], Christian Kirbach [de], Jiri Grönroos [fi],
 | 
			
		||||
  Pedro Albuquerque [pt], Baurzhan Muftakhidinov [kk], Daniel Mustieles [es],
 | 
			
		||||
  Marek Černocký [cs], Ask Hjorth Larsen [da], Inaki Larranaga Murgoitio [eu]
 | 
			
		||||
 | 
			
		||||
3.18.0
 | 
			
		||||
======
 | 
			
		||||
 | 
			
		||||
Translations:
 | 
			
		||||
  Sendy Aditya Suryana [id], Kris Thomsen [da], Seán de Búrca [ga],
 | 
			
		||||
  Andika Triwidada [id], Enrico Nicoletto [pt_BR], Anders Jonsson [sv],
 | 
			
		||||
  Rūdolfs Mazurs [lv]
 | 
			
		||||
 | 
			
		||||
3.17.92
 | 
			
		||||
=======
 | 
			
		||||
* Fix race when loading multiple background animations [Josselin; #741453]
 | 
			
		||||
 | 
			
		||||
Contributors:
 | 
			
		||||
  Michael Biebl, Josselin Mouette, Florian Müllner
 | 
			
		||||
 | 
			
		||||
Translations:
 | 
			
		||||
  Baurzhan Muftakhidinov [kk], Changwoo Ryu [ko], Christian Kirbach [de],
 | 
			
		||||
  Kjartan Maraas [nb], Jiri Grönroos [fi], Arash Mousavi [fa],
 | 
			
		||||
  Jiro Matsuzawa [ja], Marek Černocký [cs], Milo Casagrande [it]
 | 
			
		||||
 | 
			
		||||
3.17.91
 | 
			
		||||
=======
 | 
			
		||||
* Fix login screen spinner causing wakeups while VT-switched away
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,10 @@ mozillalibdir = $(BROWSER_PLUGIN_DIR)
 | 
			
		||||
 | 
			
		||||
mozillalib_LTLIBRARIES = libgnome-shell-browser-plugin.la
 | 
			
		||||
 | 
			
		||||
libgnome_shell_browser_plugin_la_LDFLAGS = -module -avoid-version -no-undefined
 | 
			
		||||
# Browsers can unload and reload the module while browsing, which is not supported by GObject.
 | 
			
		||||
# We pass -Wl,-z,nodelete to the linker to ensure the module is never unloaded.
 | 
			
		||||
# https://bugzilla.gnome.org/show_bug.cgi?id=737932
 | 
			
		||||
libgnome_shell_browser_plugin_la_LDFLAGS = -module -avoid-version -no-undefined -Wl,-z,nodelete
 | 
			
		||||
 | 
			
		||||
libgnome_shell_browser_plugin_la_LIBADD = 	\
 | 
			
		||||
	$(BROWSER_PLUGIN_LIBS)
 | 
			
		||||
 
 | 
			
		||||
@@ -33,20 +33,16 @@
 | 
			
		||||
#include <json-glib/json-glib.h>
 | 
			
		||||
 | 
			
		||||
#define ORIGIN "extensions.gnome.org"
 | 
			
		||||
#define PLUGIN_NAME "Gnome Shell Integration"
 | 
			
		||||
#define PLUGIN_DESCRIPTION "This plugin provides integration with Gnome Shell " \
 | 
			
		||||
#define PLUGIN_NAME "GNOME Shell Integration"
 | 
			
		||||
#define PLUGIN_DESCRIPTION "This plugin provides integration with GNOME Shell " \
 | 
			
		||||
      "for live extension enabling and disabling. " \
 | 
			
		||||
      "It can be used only by extensions.gnome.org"
 | 
			
		||||
#define PLUGIN_MIME_STRING "application/x-gnome-shell-integration::Gnome Shell Integration Dummy Content-Type";
 | 
			
		||||
#define PLUGIN_MIME_STRING "application/x-gnome-shell-integration::GNOME Shell Integration Dummy Content-Type";
 | 
			
		||||
 | 
			
		||||
#define PLUGIN_API_VERSION 5
 | 
			
		||||
 | 
			
		||||
#define EXTENSION_DISABLE_VERSION_CHECK_KEY "disable-extension-version-validation"
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
  GDBusProxy *proxy;
 | 
			
		||||
} PluginData;
 | 
			
		||||
 | 
			
		||||
static NPNetscapeFuncs funcs;
 | 
			
		||||
 | 
			
		||||
static inline gchar *
 | 
			
		||||
@@ -145,121 +141,6 @@ check_origin_and_protocol (NPP instance)
 | 
			
		||||
  return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* =============== public entry points =================== */
 | 
			
		||||
 | 
			
		||||
NPError
 | 
			
		||||
NP_Initialize(NPNetscapeFuncs *pfuncs, NPPluginFuncs *plugin)
 | 
			
		||||
{
 | 
			
		||||
  /* global initialization routine, called once when plugin
 | 
			
		||||
     is loaded */
 | 
			
		||||
 | 
			
		||||
  g_debug ("plugin loaded");
 | 
			
		||||
 | 
			
		||||
  memcpy (&funcs, pfuncs, sizeof (funcs));
 | 
			
		||||
 | 
			
		||||
  plugin->size = sizeof(NPPluginFuncs);
 | 
			
		||||
  plugin->newp = NPP_New;
 | 
			
		||||
  plugin->destroy = NPP_Destroy;
 | 
			
		||||
  plugin->getvalue = NPP_GetValue;
 | 
			
		||||
  plugin->setwindow = NPP_SetWindow;
 | 
			
		||||
 | 
			
		||||
  return NPERR_NO_ERROR;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
NPError
 | 
			
		||||
NP_Shutdown(void)
 | 
			
		||||
{
 | 
			
		||||
  return NPERR_NO_ERROR;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const char*
 | 
			
		||||
NP_GetMIMEDescription(void)
 | 
			
		||||
{
 | 
			
		||||
  return PLUGIN_MIME_STRING;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
NPError
 | 
			
		||||
NP_GetValue(void         *instance,
 | 
			
		||||
            NPPVariable   variable,
 | 
			
		||||
            void         *value)
 | 
			
		||||
{
 | 
			
		||||
  switch (variable) {
 | 
			
		||||
  case NPPVpluginNameString:
 | 
			
		||||
    *(char**)value = PLUGIN_NAME;
 | 
			
		||||
    break;
 | 
			
		||||
  case NPPVpluginDescriptionString:
 | 
			
		||||
    *(char**)value = PLUGIN_DESCRIPTION;
 | 
			
		||||
    break;
 | 
			
		||||
  default:
 | 
			
		||||
    ;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return NPERR_NO_ERROR;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
NPError
 | 
			
		||||
NPP_New(NPMIMEType    mimetype,
 | 
			
		||||
        NPP           instance,
 | 
			
		||||
        uint16_t      mode,
 | 
			
		||||
        int16_t       argc,
 | 
			
		||||
        char        **argn,
 | 
			
		||||
        char        **argv,
 | 
			
		||||
        NPSavedData  *saved)
 | 
			
		||||
{
 | 
			
		||||
  /* instance initialization function */
 | 
			
		||||
  PluginData *data;
 | 
			
		||||
  GError *error = NULL;
 | 
			
		||||
 | 
			
		||||
  g_debug ("plugin created");
 | 
			
		||||
 | 
			
		||||
  if (!check_origin_and_protocol (instance))
 | 
			
		||||
    return NPERR_GENERIC_ERROR;
 | 
			
		||||
 | 
			
		||||
  data = g_slice_new (PluginData);
 | 
			
		||||
  instance->pdata = data;
 | 
			
		||||
 | 
			
		||||
  data->proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION,
 | 
			
		||||
                                               G_DBUS_PROXY_FLAGS_NONE,
 | 
			
		||||
                                               NULL, /* interface info */
 | 
			
		||||
                                               "org.gnome.Shell",
 | 
			
		||||
                                               "/org/gnome/Shell",
 | 
			
		||||
                                               "org.gnome.Shell.Extensions",
 | 
			
		||||
                                               NULL, /* GCancellable */
 | 
			
		||||
                                               &error);
 | 
			
		||||
  if (!data->proxy)
 | 
			
		||||
    {
 | 
			
		||||
      /* ignore error if the shell is not running, otherwise warn */
 | 
			
		||||
      if (error->domain != G_DBUS_ERROR ||
 | 
			
		||||
          error->code != G_DBUS_ERROR_NAME_HAS_NO_OWNER)
 | 
			
		||||
        {
 | 
			
		||||
          g_warning ("Failed to set up Shell proxy: %s", error->message);
 | 
			
		||||
        }
 | 
			
		||||
      g_clear_error (&error);
 | 
			
		||||
      return NPERR_GENERIC_ERROR;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  g_debug ("plugin created successfully");
 | 
			
		||||
 | 
			
		||||
  return NPERR_NO_ERROR;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
NPError
 | 
			
		||||
NPP_Destroy(NPP           instance,
 | 
			
		||||
	    NPSavedData **saved)
 | 
			
		||||
{
 | 
			
		||||
  /* instance finalization function */
 | 
			
		||||
 | 
			
		||||
  PluginData *data = instance->pdata;
 | 
			
		||||
 | 
			
		||||
  g_debug ("plugin destroyed");
 | 
			
		||||
 | 
			
		||||
  g_object_unref (data->proxy);
 | 
			
		||||
 | 
			
		||||
  g_slice_free (PluginData, data);
 | 
			
		||||
 | 
			
		||||
  return NPERR_NO_ERROR;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* =================== scripting interface =================== */
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
@@ -330,45 +211,18 @@ static NPObject *
 | 
			
		||||
plugin_object_allocate (NPP      instance,
 | 
			
		||||
                        NPClass *klass)
 | 
			
		||||
{
 | 
			
		||||
  PluginData *data = instance->pdata;
 | 
			
		||||
  PluginObject *obj = g_slice_new0 (PluginObject);
 | 
			
		||||
  PluginObject *obj = (PluginObject *) funcs.memalloc (sizeof (PluginObject));
 | 
			
		||||
 | 
			
		||||
  memset (obj, 0, sizeof (PluginObject));
 | 
			
		||||
  obj->instance = instance;
 | 
			
		||||
  obj->proxy = g_object_ref (data->proxy);
 | 
			
		||||
  obj->settings = g_settings_new (SHELL_SCHEMA);
 | 
			
		||||
  obj->signal_id = g_signal_connect (obj->proxy, "g-signal",
 | 
			
		||||
                                     G_CALLBACK (on_shell_signal), obj);
 | 
			
		||||
 | 
			
		||||
  obj->watch_name_id = g_bus_watch_name (G_BUS_TYPE_SESSION,
 | 
			
		||||
                                         "org.gnome.Shell",
 | 
			
		||||
                                         G_BUS_NAME_WATCHER_FLAGS_NONE,
 | 
			
		||||
                                         on_shell_appeared,
 | 
			
		||||
                                         NULL,
 | 
			
		||||
                                         obj,
 | 
			
		||||
                                         NULL);
 | 
			
		||||
 | 
			
		||||
  g_debug ("plugin object created");
 | 
			
		||||
 | 
			
		||||
  return (NPObject*)obj;
 | 
			
		||||
  return (NPObject*) obj;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
plugin_object_deallocate (NPObject *npobj)
 | 
			
		||||
{
 | 
			
		||||
  PluginObject *obj = (PluginObject*)npobj;
 | 
			
		||||
 | 
			
		||||
  g_signal_handler_disconnect (obj->proxy, obj->signal_id);
 | 
			
		||||
  g_object_unref (obj->proxy);
 | 
			
		||||
 | 
			
		||||
  if (obj->listener)
 | 
			
		||||
    funcs.releaseobject (obj->listener);
 | 
			
		||||
 | 
			
		||||
  if (obj->watch_name_id)
 | 
			
		||||
    g_bus_unwatch_name (obj->watch_name_id);
 | 
			
		||||
 | 
			
		||||
  g_debug ("plugin object destroyed");
 | 
			
		||||
 | 
			
		||||
  g_slice_free (PluginObject, obj);
 | 
			
		||||
  funcs.memfree (npobj);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline gboolean
 | 
			
		||||
@@ -1019,6 +873,149 @@ init_methods_and_properties (void)
 | 
			
		||||
  onextension_changed_id = funcs.getstringidentifier ("onchange");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* =============== public entry points =================== */
 | 
			
		||||
 | 
			
		||||
NPError
 | 
			
		||||
NP_Initialize(NPNetscapeFuncs *pfuncs, NPPluginFuncs *plugin)
 | 
			
		||||
{
 | 
			
		||||
  /* global initialization routine, called once when plugin
 | 
			
		||||
     is loaded */
 | 
			
		||||
 | 
			
		||||
  g_debug ("plugin loaded");
 | 
			
		||||
 | 
			
		||||
  memcpy (&funcs, pfuncs, sizeof (funcs));
 | 
			
		||||
 | 
			
		||||
  plugin->size = sizeof(NPPluginFuncs);
 | 
			
		||||
  plugin->newp = NPP_New;
 | 
			
		||||
  plugin->destroy = NPP_Destroy;
 | 
			
		||||
  plugin->getvalue = NPP_GetValue;
 | 
			
		||||
  plugin->setwindow = NPP_SetWindow;
 | 
			
		||||
  plugin->event = NPP_HandleEvent;
 | 
			
		||||
 | 
			
		||||
  return NPERR_NO_ERROR;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
NPError
 | 
			
		||||
NP_Shutdown(void)
 | 
			
		||||
{
 | 
			
		||||
  return NPERR_NO_ERROR;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const char*
 | 
			
		||||
NP_GetMIMEDescription(void)
 | 
			
		||||
{
 | 
			
		||||
  return PLUGIN_MIME_STRING;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
NPError
 | 
			
		||||
NP_GetValue(void         *instance,
 | 
			
		||||
            NPPVariable   variable,
 | 
			
		||||
            void         *value)
 | 
			
		||||
{
 | 
			
		||||
  switch (variable) {
 | 
			
		||||
  case NPPVpluginNameString:
 | 
			
		||||
    *(char**)value = PLUGIN_NAME;
 | 
			
		||||
    break;
 | 
			
		||||
  case NPPVpluginDescriptionString:
 | 
			
		||||
    *(char**)value = PLUGIN_DESCRIPTION;
 | 
			
		||||
    break;
 | 
			
		||||
  default:
 | 
			
		||||
    ;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return NPERR_NO_ERROR;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
NPError
 | 
			
		||||
NPP_New(NPMIMEType    mimetype,
 | 
			
		||||
        NPP           instance,
 | 
			
		||||
        uint16_t      mode,
 | 
			
		||||
        int16_t       argc,
 | 
			
		||||
        char        **argn,
 | 
			
		||||
        char        **argv,
 | 
			
		||||
        NPSavedData  *saved)
 | 
			
		||||
{
 | 
			
		||||
  /* instance initialization function */
 | 
			
		||||
  PluginObject *obj;
 | 
			
		||||
  GError *error = NULL;
 | 
			
		||||
 | 
			
		||||
  g_debug ("plugin created");
 | 
			
		||||
 | 
			
		||||
  if (!check_origin_and_protocol (instance))
 | 
			
		||||
    return NPERR_GENERIC_ERROR;
 | 
			
		||||
 | 
			
		||||
  /* set windowless mode */
 | 
			
		||||
  funcs.setvalue(instance, NPPVpluginWindowBool, NULL);
 | 
			
		||||
 | 
			
		||||
  g_debug ("creating scriptable object");
 | 
			
		||||
  init_methods_and_properties ();
 | 
			
		||||
  obj = (PluginObject *) funcs.createobject (instance, &plugin_class);
 | 
			
		||||
  instance->pdata = obj;
 | 
			
		||||
 | 
			
		||||
  obj->proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION,
 | 
			
		||||
                                              G_DBUS_PROXY_FLAGS_NONE,
 | 
			
		||||
                                              NULL, /* interface info */
 | 
			
		||||
                                              "org.gnome.Shell",
 | 
			
		||||
                                              "/org/gnome/Shell",
 | 
			
		||||
                                              "org.gnome.Shell.Extensions",
 | 
			
		||||
                                              NULL, /* GCancellable */
 | 
			
		||||
                                              &error);
 | 
			
		||||
  if (!obj->proxy)
 | 
			
		||||
    {
 | 
			
		||||
      /* ignore error if the shell is not running, otherwise warn */
 | 
			
		||||
      if (!g_error_matches (error, G_DBUS_ERROR, G_DBUS_ERROR_NAME_HAS_NO_OWNER))
 | 
			
		||||
        {
 | 
			
		||||
          g_warning ("Failed to set up Shell proxy: %s", error->message);
 | 
			
		||||
        }
 | 
			
		||||
      g_clear_error (&error);
 | 
			
		||||
      return NPERR_GENERIC_ERROR;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  obj->settings = g_settings_new (SHELL_SCHEMA);
 | 
			
		||||
  obj->signal_id = g_signal_connect (obj->proxy, "g-signal",
 | 
			
		||||
                                     G_CALLBACK (on_shell_signal), obj);
 | 
			
		||||
  obj->watch_name_id = g_bus_watch_name (G_BUS_TYPE_SESSION,
 | 
			
		||||
                                         "org.gnome.Shell",
 | 
			
		||||
                                         G_BUS_NAME_WATCHER_FLAGS_NONE,
 | 
			
		||||
                                         on_shell_appeared,
 | 
			
		||||
                                         NULL,
 | 
			
		||||
                                         obj,
 | 
			
		||||
                                         NULL);
 | 
			
		||||
 | 
			
		||||
  g_debug ("plugin created successfully");
 | 
			
		||||
 | 
			
		||||
  return NPERR_NO_ERROR;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
NPError
 | 
			
		||||
NPP_Destroy(NPP           instance,
 | 
			
		||||
	    NPSavedData **saved)
 | 
			
		||||
{
 | 
			
		||||
  /* instance finalization function */
 | 
			
		||||
  PluginObject *obj = (PluginObject *) instance->pdata;
 | 
			
		||||
 | 
			
		||||
  if (!obj)
 | 
			
		||||
    return NPERR_INVALID_INSTANCE_ERROR;
 | 
			
		||||
 | 
			
		||||
  g_debug ("plugin destroyed");
 | 
			
		||||
 | 
			
		||||
  g_signal_handler_disconnect (obj->proxy, obj->signal_id);
 | 
			
		||||
  g_object_unref (obj->proxy);
 | 
			
		||||
 | 
			
		||||
  if (obj->listener)
 | 
			
		||||
    funcs.releaseobject (obj->listener);
 | 
			
		||||
 | 
			
		||||
  if (obj->restart_listener)
 | 
			
		||||
    funcs.releaseobject (obj->restart_listener);
 | 
			
		||||
 | 
			
		||||
  if (obj->watch_name_id)
 | 
			
		||||
    g_bus_unwatch_name (obj->watch_name_id);
 | 
			
		||||
 | 
			
		||||
  funcs.releaseobject((NPObject *)obj);
 | 
			
		||||
 | 
			
		||||
  return NPERR_NO_ERROR;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
NPError
 | 
			
		||||
NPP_GetValue(NPP          instance,
 | 
			
		||||
	     NPPVariable  variable,
 | 
			
		||||
@@ -1029,13 +1026,10 @@ NPP_GetValue(NPP          instance,
 | 
			
		||||
  switch (variable) {
 | 
			
		||||
  case NPPVpluginScriptableNPObject:
 | 
			
		||||
    g_debug ("creating scriptable object");
 | 
			
		||||
    init_methods_and_properties ();
 | 
			
		||||
    if (!instance->pdata)
 | 
			
		||||
      return NPERR_INVALID_INSTANCE_ERROR;
 | 
			
		||||
 | 
			
		||||
    *(NPObject**)value = funcs.createobject (instance, &plugin_class);
 | 
			
		||||
    break;
 | 
			
		||||
 | 
			
		||||
  case NPPVpluginNeedsXEmbed:
 | 
			
		||||
    *(bool *)value = TRUE;
 | 
			
		||||
    *(NPObject**)value = instance->pdata;
 | 
			
		||||
    break;
 | 
			
		||||
 | 
			
		||||
  default:
 | 
			
		||||
@@ -1053,3 +1047,11 @@ NPP_SetWindow(NPP          instance,
 | 
			
		||||
{
 | 
			
		||||
  return NPERR_NO_ERROR;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int16_t
 | 
			
		||||
NPP_HandleEvent(NPP   instance,
 | 
			
		||||
                void *event)
 | 
			
		||||
{
 | 
			
		||||
  /* Ignore the event */
 | 
			
		||||
  return FALSE;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										15
									
								
								configure.ac
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								configure.ac
									
									
									
									
									
								
							@@ -1,5 +1,6 @@
 | 
			
		||||
AC_PREREQ(2.63)
 | 
			
		||||
AC_INIT([gnome-shell],[3.17.91],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
 | 
			
		||||
AC_INIT([gnome-shell],[3.19.4],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
 | 
			
		||||
AX_IS_RELEASE([git-directory])
 | 
			
		||||
 | 
			
		||||
AC_CONFIG_HEADERS([config.h])
 | 
			
		||||
AC_CONFIG_SRCDIR([src/shell-global.c])
 | 
			
		||||
@@ -74,9 +75,9 @@ AS_IF([test x$enable_systemd != xno], [
 | 
			
		||||
AC_MSG_RESULT($enable_systemd)
 | 
			
		||||
 | 
			
		||||
CLUTTER_MIN_VERSION=1.21.5
 | 
			
		||||
GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
 | 
			
		||||
GOBJECT_INTROSPECTION_MIN_VERSION=1.45.4
 | 
			
		||||
GJS_MIN_VERSION=1.39.0
 | 
			
		||||
MUTTER_MIN_VERSION=3.17.91
 | 
			
		||||
MUTTER_MIN_VERSION=3.19.4
 | 
			
		||||
GTK_MIN_VERSION=3.15.0
 | 
			
		||||
GIO_MIN_VERSION=2.45.3
 | 
			
		||||
LIBECAL_MIN_VERSION=3.5.3
 | 
			
		||||
@@ -116,9 +117,9 @@ PKG_CHECK_MODULES(GNOME_SHELL_JS, gio-2.0 gjs-internals-1.0 >= $GJS_MIN_VERSION)
 | 
			
		||||
PKG_CHECK_MODULES(ST, clutter-1.0 gtk+-3.0 libcroco-0.6 >= 0.6.8 x11)
 | 
			
		||||
PKG_CHECK_MODULES(SHELL_PERF_HELPER, gtk+-3.0 gio-2.0)
 | 
			
		||||
PKG_CHECK_MODULES(SHELL_HOTPLUG_SNIFFER, gio-2.0 gdk-pixbuf-2.0)
 | 
			
		||||
PKG_CHECK_MODULES(TRAY, gtk+-3.0)
 | 
			
		||||
PKG_CHECK_MODULES(TRAY, clutter-1.0 gtk+-3.0)
 | 
			
		||||
PKG_CHECK_MODULES(GVC, libpulse >= $PULSE_MIN_VERS libpulse-mainloop-glib gobject-2.0)
 | 
			
		||||
PKG_CHECK_MODULES(DESKTOP_SCHEMAS, gsettings-desktop-schemas >= 3.13.1)
 | 
			
		||||
PKG_CHECK_MODULES(DESKTOP_SCHEMAS, gsettings-desktop-schemas >= 3.19.2)
 | 
			
		||||
 | 
			
		||||
AC_ARG_ENABLE(browser-plugin,
 | 
			
		||||
              [AS_HELP_STRING([--enable-browser-plugin],
 | 
			
		||||
@@ -220,7 +221,7 @@ if test "$enable_man" != no; then
 | 
			
		||||
fi
 | 
			
		||||
AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no)
 | 
			
		||||
 | 
			
		||||
GNOME_COMPILE_WARNINGS([error])
 | 
			
		||||
AX_COMPILER_FLAGS()
 | 
			
		||||
case "$WARN_CFLAGS" in
 | 
			
		||||
    *-Werror*)
 | 
			
		||||
        WARN_CFLAGS="$WARN_CFLAGS -Wno-error=deprecated-declarations"
 | 
			
		||||
@@ -269,7 +270,7 @@ Build configuration:
 | 
			
		||||
       Prefix:                                 ${prefix}
 | 
			
		||||
       Source code location:                   ${srcdir}
 | 
			
		||||
       Compiler:                               ${CC}
 | 
			
		||||
       Compiler Warnings:                      $enable_compile_warnings
 | 
			
		||||
       Compiler Warnings:                      $ax_enable_compile_warnings
 | 
			
		||||
 | 
			
		||||
       Support for NetworkManager:             $have_networkmanager
 | 
			
		||||
       Support for GStreamer recording:        $build_recorder
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@ CLEANFILES =
 | 
			
		||||
NULL =
 | 
			
		||||
 | 
			
		||||
desktopdir=$(datadir)/applications
 | 
			
		||||
desktop_DATA = gnome-shell.desktop gnome-shell-wayland.desktop  gnome-shell-extension-prefs.desktop
 | 
			
		||||
desktop_DATA = org.gnome.Shell.desktop gnome-shell-extension-prefs.desktop
 | 
			
		||||
 | 
			
		||||
if HAVE_NETWORKMANAGER
 | 
			
		||||
desktop_DATA += org.gnome.Shell.PortalHelper.desktop
 | 
			
		||||
@@ -104,8 +104,7 @@ convertdir = $(datadir)/GConf/gsettings
 | 
			
		||||
convert_DATA = gnome-shell-overrides.convert
 | 
			
		||||
 | 
			
		||||
EXTRA_DIST =						\
 | 
			
		||||
	gnome-shell.desktop.in.in			\
 | 
			
		||||
	gnome-shell-wayland.desktop.in.in		\
 | 
			
		||||
	org.gnome.Shell.desktop.in.in			\
 | 
			
		||||
	gnome-shell-extension-prefs.desktop.in.in	\
 | 
			
		||||
	$(introspection_DATA)				\
 | 
			
		||||
	$(menu_DATA)					\
 | 
			
		||||
@@ -121,8 +120,7 @@ EXTRA_DIST =						\
 | 
			
		||||
	$(NULL)
 | 
			
		||||
 | 
			
		||||
CLEANFILES +=						\
 | 
			
		||||
	gnome-shell.desktop.in				\
 | 
			
		||||
	gnome-shell-wayland.desktop.in			\
 | 
			
		||||
	org.gnome.Shell.desktop.in			\
 | 
			
		||||
	gnome-shell-extension-prefs.in			\
 | 
			
		||||
	$(desktop_DATA)					\
 | 
			
		||||
	$(keys_DATA)					\
 | 
			
		||||
 
 | 
			
		||||
@@ -1,15 +0,0 @@
 | 
			
		||||
[Desktop Entry]
 | 
			
		||||
Type=Application
 | 
			
		||||
_Name=GNOME Shell (wayland compositor)
 | 
			
		||||
_Comment=Window management and application launching
 | 
			
		||||
Exec=@bindir@/gnome-shell --wayland --display-server
 | 
			
		||||
X-GNOME-Bugzilla-Bugzilla=GNOME
 | 
			
		||||
X-GNOME-Bugzilla-Product=gnome-shell
 | 
			
		||||
X-GNOME-Bugzilla-Component=general
 | 
			
		||||
X-GNOME-Bugzilla-Version=@VERSION@
 | 
			
		||||
Categories=GNOME;GTK;Core;
 | 
			
		||||
OnlyShowIn=GNOME;
 | 
			
		||||
NoDisplay=true
 | 
			
		||||
X-GNOME-Autostart-Phase=DisplayServer
 | 
			
		||||
X-GNOME-Autostart-Notify=true
 | 
			
		||||
X-GNOME-AutoRestart=false
 | 
			
		||||
@@ -10,7 +10,7 @@ X-GNOME-Bugzilla-Version=@VERSION@
 | 
			
		||||
Categories=GNOME;GTK;Core;
 | 
			
		||||
OnlyShowIn=GNOME;
 | 
			
		||||
NoDisplay=true
 | 
			
		||||
X-GNOME-Autostart-Phase=WindowManager
 | 
			
		||||
X-GNOME-Autostart-Phase=DisplayServer
 | 
			
		||||
X-GNOME-Provides=panel;windowmanager;
 | 
			
		||||
X-GNOME-Autostart-Notify=true
 | 
			
		||||
X-GNOME-AutoRestart=false
 | 
			
		||||
@@ -72,6 +72,16 @@
 | 
			
		||||
        This key sets the default state of the checkbox.
 | 
			
		||||
      </_description>
 | 
			
		||||
    </key>
 | 
			
		||||
    <key name="had-bluetooth-devices-setup" type="b">
 | 
			
		||||
      <default>false</default>
 | 
			
		||||
      <_summary>Whether the default Bluetooth adapter had set up devices associated to it</_summary>
 | 
			
		||||
      <_description>
 | 
			
		||||
        The shell will only show a Bluetooth menu item if a Bluetooth
 | 
			
		||||
        adapter is powered, or if there were devices set up associated
 | 
			
		||||
        with the default adapter. This will be reset if the default
 | 
			
		||||
        adapter is ever seen not to have devices associated to it.
 | 
			
		||||
      </_description>
 | 
			
		||||
    </key>
 | 
			
		||||
    <child name="calendar" schema="org.gnome.shell.calendar"/>
 | 
			
		||||
    <child name="keybindings" schema="org.gnome.shell.keybindings"/>
 | 
			
		||||
    <child name="keyboard" schema="org.gnome.shell.keyboard"/>
 | 
			
		||||
 
 | 
			
		||||
@@ -199,7 +199,7 @@ StScrollBar {
 | 
			
		||||
  border-radius: 9px;
 | 
			
		||||
  color: #eeeeec;
 | 
			
		||||
  background-color: rgba(23, 25, 26, 0.95);
 | 
			
		||||
  border: 3px solid rgba(238, 238, 236, 0.5); }
 | 
			
		||||
  border: 1px solid rgba(238, 238, 236, 0.2); }
 | 
			
		||||
  .modal-dialog .modal-dialog-content-box {
 | 
			
		||||
    padding: 24px; }
 | 
			
		||||
  .modal-dialog .run-dialog-entry {
 | 
			
		||||
@@ -224,7 +224,7 @@ StScrollBar {
 | 
			
		||||
/* End Session Dialog */
 | 
			
		||||
.end-session-dialog {
 | 
			
		||||
  spacing: 42px;
 | 
			
		||||
  border: 3px solid rgba(238, 238, 236, 0.2); }
 | 
			
		||||
  border: 1px solid rgba(238, 238, 236, 0.2); }
 | 
			
		||||
 | 
			
		||||
.end-session-dialog-list {
 | 
			
		||||
  padding-top: 20px; }
 | 
			
		||||
@@ -408,9 +408,9 @@ StScrollBar {
 | 
			
		||||
  spacing-rows: 15px;
 | 
			
		||||
  spacing-columns: 1em; }
 | 
			
		||||
 | 
			
		||||
/* Popvers/Menus */
 | 
			
		||||
/* Popovers/Menus */
 | 
			
		||||
.popup-menu {
 | 
			
		||||
  min-width: 200px; }
 | 
			
		||||
  min-width: 15em; }
 | 
			
		||||
  .popup-menu .popup-sub-menu {
 | 
			
		||||
    background-color: black;
 | 
			
		||||
    box-shadow: inset 0 -1px 0px #0d0d0d; }
 | 
			
		||||
@@ -625,6 +625,8 @@ StScrollBar {
 | 
			
		||||
  #panel .panel-status-indicators-box,
 | 
			
		||||
  #panel .panel-status-menu-box {
 | 
			
		||||
    spacing: 2px; }
 | 
			
		||||
  #panel .power-status.panel-status-indicators-box {
 | 
			
		||||
    spacing: 0; }
 | 
			
		||||
  #panel .screencast-indicator {
 | 
			
		||||
    color: #f57900; }
 | 
			
		||||
 | 
			
		||||
@@ -750,9 +752,20 @@ StScrollBar {
 | 
			
		||||
  color: rgba(255, 255, 255, 0.15);
 | 
			
		||||
  opacity: 0.5; }
 | 
			
		||||
 | 
			
		||||
.calendar-week-number {
 | 
			
		||||
  font-size: 70%;
 | 
			
		||||
  font-weight: bold;
 | 
			
		||||
  width: 2.8em;
 | 
			
		||||
  height: 2em;
 | 
			
		||||
  border-radius: 2px 1em 2px 2px;
 | 
			
		||||
  padding: 0.9em 0 0;
 | 
			
		||||
  margin: 3px;
 | 
			
		||||
  background-color: rgba(255, 255, 255, 0.1);
 | 
			
		||||
  color: #000; }
 | 
			
		||||
 | 
			
		||||
/* Message list */
 | 
			
		||||
.message-list {
 | 
			
		||||
  width: 420px; }
 | 
			
		||||
  width: 31.5em; }
 | 
			
		||||
 | 
			
		||||
.message-list-sections {
 | 
			
		||||
  spacing: 1.5em; }
 | 
			
		||||
@@ -808,9 +821,13 @@ StScrollBar {
 | 
			
		||||
  padding: 8px;
 | 
			
		||||
  font-size: .9em; }
 | 
			
		||||
 | 
			
		||||
.system-switch-user-submenu-icon {
 | 
			
		||||
  icon-size: 24px;
 | 
			
		||||
  border: 1px solid rgba(255, 255, 255, 0.4); }
 | 
			
		||||
.system-switch-user-submenu-icon.user-icon {
 | 
			
		||||
  icon-size: 20px;
 | 
			
		||||
  padding: 0 2px; }
 | 
			
		||||
 | 
			
		||||
.system-switch-user-submenu-icon.default-icon {
 | 
			
		||||
  icon-size: 16px;
 | 
			
		||||
  padding: 0 4px; }
 | 
			
		||||
 | 
			
		||||
#appMenu {
 | 
			
		||||
  spinner-image: url("resource:///org/gnome/shell/theme/process-working.svg");
 | 
			
		||||
@@ -819,7 +836,7 @@ StScrollBar {
 | 
			
		||||
    color: transparent; }
 | 
			
		||||
 | 
			
		||||
.aggregate-menu {
 | 
			
		||||
  width: 360px; }
 | 
			
		||||
  min-width: 21em; }
 | 
			
		||||
  .aggregate-menu .popup-menu-icon {
 | 
			
		||||
    padding: 0 4px; }
 | 
			
		||||
 | 
			
		||||
@@ -956,10 +973,14 @@ StScrollBar {
 | 
			
		||||
.search-entry {
 | 
			
		||||
  width: 320px;
 | 
			
		||||
  padding: 7px 9px;
 | 
			
		||||
  border-radius: 6px; }
 | 
			
		||||
  border-radius: 6px;
 | 
			
		||||
  border-color: #747467;
 | 
			
		||||
  color: #eeeeec;
 | 
			
		||||
  background-color: #2e3436; }
 | 
			
		||||
  .search-entry:focus {
 | 
			
		||||
    padding: 6px 8px;
 | 
			
		||||
    border-width: 2px; }
 | 
			
		||||
    border-width: 2px;
 | 
			
		||||
    border-color: #215d9c; }
 | 
			
		||||
  .search-entry .search-entry-icon {
 | 
			
		||||
    icon-size: 1em;
 | 
			
		||||
    padding: 0 4px;
 | 
			
		||||
 
 | 
			
		||||
 Submodule data/theme/gnome-shell-sass updated: 1726663941...1d35c2890a
									
								
							@@ -199,7 +199,7 @@ StScrollBar {
 | 
			
		||||
  border-radius: 9px;
 | 
			
		||||
  color: #eeeeec;
 | 
			
		||||
  background-color: rgba(23, 25, 26, 0.95);
 | 
			
		||||
  border: 3px solid rgba(238, 238, 236, 0.5); }
 | 
			
		||||
  border: 1px solid rgba(238, 238, 236, 0.2); }
 | 
			
		||||
  .modal-dialog .modal-dialog-content-box {
 | 
			
		||||
    padding: 24px; }
 | 
			
		||||
  .modal-dialog .run-dialog-entry {
 | 
			
		||||
@@ -224,7 +224,7 @@ StScrollBar {
 | 
			
		||||
/* End Session Dialog */
 | 
			
		||||
.end-session-dialog {
 | 
			
		||||
  spacing: 42px;
 | 
			
		||||
  border: 3px solid rgba(238, 238, 236, 0.2); }
 | 
			
		||||
  border: 1px solid rgba(238, 238, 236, 0.2); }
 | 
			
		||||
 | 
			
		||||
.end-session-dialog-list {
 | 
			
		||||
  padding-top: 20px; }
 | 
			
		||||
@@ -408,9 +408,9 @@ StScrollBar {
 | 
			
		||||
  spacing-rows: 15px;
 | 
			
		||||
  spacing-columns: 1em; }
 | 
			
		||||
 | 
			
		||||
/* Popvers/Menus */
 | 
			
		||||
/* Popovers/Menus */
 | 
			
		||||
.popup-menu {
 | 
			
		||||
  min-width: 200px; }
 | 
			
		||||
  min-width: 15em; }
 | 
			
		||||
  .popup-menu .popup-sub-menu {
 | 
			
		||||
    background-color: #343a3a;
 | 
			
		||||
    box-shadow: inset 0 -1px 0px #282c2c; }
 | 
			
		||||
@@ -625,6 +625,8 @@ StScrollBar {
 | 
			
		||||
  #panel .panel-status-indicators-box,
 | 
			
		||||
  #panel .panel-status-menu-box {
 | 
			
		||||
    spacing: 2px; }
 | 
			
		||||
  #panel .power-status.panel-status-indicators-box {
 | 
			
		||||
    spacing: 0; }
 | 
			
		||||
  #panel .screencast-indicator {
 | 
			
		||||
    color: #f57900; }
 | 
			
		||||
 | 
			
		||||
@@ -750,9 +752,20 @@ StScrollBar {
 | 
			
		||||
  color: rgba(238, 238, 236, 0.15);
 | 
			
		||||
  opacity: 0.5; }
 | 
			
		||||
 | 
			
		||||
.calendar-week-number {
 | 
			
		||||
  font-size: 70%;
 | 
			
		||||
  font-weight: bold;
 | 
			
		||||
  width: 2.8em;
 | 
			
		||||
  height: 2em;
 | 
			
		||||
  border-radius: 2px 1em 2px 2px;
 | 
			
		||||
  padding: 0.9em 0 0;
 | 
			
		||||
  margin: 3px;
 | 
			
		||||
  background-color: rgba(238, 238, 236, 0.1);
 | 
			
		||||
  color: #393f3f; }
 | 
			
		||||
 | 
			
		||||
/* Message list */
 | 
			
		||||
.message-list {
 | 
			
		||||
  width: 420px; }
 | 
			
		||||
  width: 31.5em; }
 | 
			
		||||
 | 
			
		||||
.message-list-sections {
 | 
			
		||||
  spacing: 1.5em; }
 | 
			
		||||
@@ -811,6 +824,7 @@ StScrollBar {
 | 
			
		||||
.system-switch-user-submenu-icon.user-icon {
 | 
			
		||||
  icon-size: 20px;
 | 
			
		||||
  padding: 0 2px; }
 | 
			
		||||
 | 
			
		||||
.system-switch-user-submenu-icon.default-icon {
 | 
			
		||||
  icon-size: 16px;
 | 
			
		||||
  padding: 0 4px; }
 | 
			
		||||
@@ -822,7 +836,7 @@ StScrollBar {
 | 
			
		||||
    color: transparent; }
 | 
			
		||||
 | 
			
		||||
.aggregate-menu {
 | 
			
		||||
  width: 280px; }
 | 
			
		||||
  min-width: 21em; }
 | 
			
		||||
  .aggregate-menu .popup-menu-icon {
 | 
			
		||||
    padding: 0 4px; }
 | 
			
		||||
 | 
			
		||||
@@ -959,10 +973,14 @@ StScrollBar {
 | 
			
		||||
.search-entry {
 | 
			
		||||
  width: 320px;
 | 
			
		||||
  padding: 7px 9px;
 | 
			
		||||
  border-radius: 6px; }
 | 
			
		||||
  border-radius: 6px;
 | 
			
		||||
  border-color: #747467;
 | 
			
		||||
  color: #eeeeec;
 | 
			
		||||
  background-color: #2e3436; }
 | 
			
		||||
  .search-entry:focus {
 | 
			
		||||
    padding: 6px 8px;
 | 
			
		||||
    border-width: 2px; }
 | 
			
		||||
    border-width: 2px;
 | 
			
		||||
    border-color: #215d9c; }
 | 
			
		||||
  .search-entry .search-entry-icon {
 | 
			
		||||
    icon-size: 1em;
 | 
			
		||||
    padding: 0 4px;
 | 
			
		||||
 
 | 
			
		||||
@@ -189,7 +189,8 @@ const AuthPrompt = new Lang.Class({
 | 
			
		||||
                                             this._updateNextButtonSensitivity(this._entry.text.length > 0);
 | 
			
		||||
                                         }));
 | 
			
		||||
        this._entry.clutter_text.connect('activate', Lang.bind(this, function() {
 | 
			
		||||
            this.emit('next');
 | 
			
		||||
            if (this.nextButton.reactive)
 | 
			
		||||
                this.emit('next');
 | 
			
		||||
        }));
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -16,6 +16,34 @@
 | 
			
		||||
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * In order for transformation animations to look good, they need to be
 | 
			
		||||
 * incremental and have some order to them (e.g., fade out hidden items,
 | 
			
		||||
 * then shrink to close the void left over). Chaining animations in this way can
 | 
			
		||||
 * be error-prone and wordy using just Tweener callbacks.
 | 
			
		||||
 *
 | 
			
		||||
 * The classes in this file help with this:
 | 
			
		||||
 *
 | 
			
		||||
 * - Task.  encapsulates schedulable work to be run in a specific scope.
 | 
			
		||||
 *
 | 
			
		||||
 * - ConsecutiveBatch.  runs a series of tasks in order and completes
 | 
			
		||||
 *                      when the last in the series finishes.
 | 
			
		||||
 *
 | 
			
		||||
 * - ConcurrentBatch.  runs a set of tasks at the same time and completes
 | 
			
		||||
 *                     when the last to finish completes.
 | 
			
		||||
 *
 | 
			
		||||
 * - Hold.  prevents a batch from completing the pending task until
 | 
			
		||||
 *          the hold is released.
 | 
			
		||||
 *
 | 
			
		||||
 * The tasks associated with a batch are specified in a list at batch
 | 
			
		||||
 * construction time as either task objects or plain functions.
 | 
			
		||||
 * Batches are task objects, themselves, so they can be nested.
 | 
			
		||||
 *
 | 
			
		||||
 * These classes aren't specific to GDM, but were found to be unintuitive and so
 | 
			
		||||
 * are not used elsewhere. These APIs may ultimately get dropped entirely and
 | 
			
		||||
 * replaced by something else.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
const Lang = imports.lang;
 | 
			
		||||
const Signals = imports.signals;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -96,7 +96,7 @@ const UserListItem = new Lang.Class({
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _onDestroy: function() {
 | 
			
		||||
        this._user.disconnect(this._userChangedId);
 | 
			
		||||
        this.user.disconnect(this._userChangedId);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _onClicked: function() {
 | 
			
		||||
@@ -212,6 +212,10 @@ const UserList = new Lang.Class({
 | 
			
		||||
        return item;
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    containsUser: function(user) {
 | 
			
		||||
        return this._items[user.get_user_name()] != null;
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    addUser: function(user) {
 | 
			
		||||
        if (!user.is_loaded)
 | 
			
		||||
            return;
 | 
			
		||||
@@ -924,11 +928,7 @@ const LoginDialog = new Lang.Class({
 | 
			
		||||
                           },
 | 
			
		||||
                           onUpdateScope: this,
 | 
			
		||||
                           onComplete: function() {
 | 
			
		||||
                               let id = Mainloop.idle_add(Lang.bind(this, function() {
 | 
			
		||||
                                   this._greeter.call_start_session_when_ready_sync(serviceName, true, null);
 | 
			
		||||
                                   return GLib.SOURCE_REMOVE;
 | 
			
		||||
                               }));
 | 
			
		||||
                               GLib.Source.set_name_by_id(id, '[gnome-shell] this._greeter.call_start_session_when_ready_sync');
 | 
			
		||||
                               this._greeter.call_start_session_when_ready_sync(serviceName, true, null);
 | 
			
		||||
                           },
 | 
			
		||||
                           onCompleteScope: this });
 | 
			
		||||
    },
 | 
			
		||||
@@ -1130,6 +1130,10 @@ const LoginDialog = new Lang.Class({
 | 
			
		||||
            this._userManager.disconnect(this._userRemovedId);
 | 
			
		||||
            this._userRemovedId = 0;
 | 
			
		||||
        }
 | 
			
		||||
        if (this._userChangedId) {
 | 
			
		||||
            this._userManager.disconnect(this._userChangedId);
 | 
			
		||||
            this._userChangedId = 0;
 | 
			
		||||
        }
 | 
			
		||||
        this._textureCache.disconnect(this._updateLogoTextureId);
 | 
			
		||||
        Main.layoutManager.disconnect(this._startupCompleteId);
 | 
			
		||||
        if (this._settings) {
 | 
			
		||||
@@ -1176,6 +1180,14 @@ const LoginDialog = new Lang.Class({
 | 
			
		||||
                                                            this._userList.removeUser(user);
 | 
			
		||||
                                                        }));
 | 
			
		||||
 | 
			
		||||
        this._userChangedId = this._userManager.connect('user-changed',
 | 
			
		||||
                                                        Lang.bind(this, function(userManager, user) {
 | 
			
		||||
                                                            if (this._userList.containsUser(user) && user.locked)
 | 
			
		||||
                                                                this._userList.removeUser(user);
 | 
			
		||||
                                                            else if (!this._userList.containsUser(user) && !user.locked)
 | 
			
		||||
                                                                this._userList.addUser(user);
 | 
			
		||||
                                                        }));
 | 
			
		||||
 | 
			
		||||
        return GLib.SOURCE_REMOVE;
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -448,8 +448,6 @@ const AppSwitcher = new Lang.Class({
 | 
			
		||||
            });
 | 
			
		||||
            if (appIcon.cachedWindows.length > 0)
 | 
			
		||||
                this._addIcon(appIcon);
 | 
			
		||||
            else if (workspace == null)
 | 
			
		||||
                throw new Error('%s appears to be running, but doesn\'t have any windows'.format(appIcon.app.get_name()));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        this._curApp = -1;
 | 
			
		||||
@@ -687,15 +685,17 @@ const WindowIcon = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
        this._icon.destroy_all_children();
 | 
			
		||||
 | 
			
		||||
        let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
 | 
			
		||||
 | 
			
		||||
        switch (mode) {
 | 
			
		||||
            case AppIconMode.THUMBNAIL_ONLY:
 | 
			
		||||
                size = WINDOW_PREVIEW_SIZE;
 | 
			
		||||
                this._icon.add_actor(_createWindowClone(mutterWindow, WINDOW_PREVIEW_SIZE));
 | 
			
		||||
                this._icon.add_actor(_createWindowClone(mutterWindow, size * scaleFactor));
 | 
			
		||||
                break;
 | 
			
		||||
 | 
			
		||||
            case AppIconMode.BOTH:
 | 
			
		||||
                size = WINDOW_PREVIEW_SIZE;
 | 
			
		||||
                this._icon.add_actor(_createWindowClone(mutterWindow, WINDOW_PREVIEW_SIZE));
 | 
			
		||||
                this._icon.add_actor(_createWindowClone(mutterWindow, size * scaleFactor));
 | 
			
		||||
 | 
			
		||||
                if (this.app)
 | 
			
		||||
                    this._icon.add_actor(this._createAppIcon(this.app,
 | 
			
		||||
@@ -707,7 +707,7 @@ const WindowIcon = new Lang.Class({
 | 
			
		||||
                this._icon.add_actor(this._createAppIcon(this.app, size));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        this._icon.set_size(size, size);
 | 
			
		||||
        this._icon.set_size(size * scaleFactor, size * scaleFactor);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _createAppIcon: function(app, size) {
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ const St = imports.gi.St;
 | 
			
		||||
const Signals = imports.signals;
 | 
			
		||||
const Atk = imports.gi.Atk;
 | 
			
		||||
 | 
			
		||||
const ANIMATED_ICON_UPDATE_TIMEOUT = 14;
 | 
			
		||||
const ANIMATED_ICON_UPDATE_TIMEOUT = 16;
 | 
			
		||||
 | 
			
		||||
const Animation = new Lang.Class({
 | 
			
		||||
    Name: 'Animation',
 | 
			
		||||
@@ -33,7 +33,7 @@ const Animation = new Lang.Class({
 | 
			
		||||
            if (this._frame == 0)
 | 
			
		||||
                this._showFrame(0);
 | 
			
		||||
 | 
			
		||||
            this._timeoutId = Mainloop.timeout_add(this._speed, Lang.bind(this, this._update));
 | 
			
		||||
            this._timeoutId = GLib.timeout_add(GLib.PRIORITY_LOW, this._speed, Lang.bind(this, this._update));
 | 
			
		||||
            GLib.Source.set_name_by_id(this._timeoutId, '[gnome-shell] this._update');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -26,6 +26,7 @@ const RENAMED_DESKTOP_IDS = {
 | 
			
		||||
    'gnome-photos.desktop': 'org.gnome.Photos.desktop',
 | 
			
		||||
    'gnome-screenshot.desktop': 'org.gnome.Screenshot.desktop',
 | 
			
		||||
    'gnome-software.desktop': 'org.gnome.Software.desktop',
 | 
			
		||||
    'gnome-terminal.desktop': 'org.gnome.Terminal.desktop',
 | 
			
		||||
    'gnome-weather.desktop': 'org.gnome.Weather.Application.desktop',
 | 
			
		||||
    'gnomine.desktop': 'gnome-mines.desktop',
 | 
			
		||||
    'gnotravex.desktop': 'gnome-tetravex.desktop',
 | 
			
		||||
 
 | 
			
		||||
@@ -144,6 +144,7 @@ const BackgroundCache = new Lang.Class({
 | 
			
		||||
        this._pendingFileLoads = [];
 | 
			
		||||
        this._fileMonitors = {};
 | 
			
		||||
        this._backgroundSources = {};
 | 
			
		||||
        this._animations = {};
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    monitorFile: function(file) {
 | 
			
		||||
@@ -162,12 +163,13 @@ const BackgroundCache = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
    getAnimation: function(params) {
 | 
			
		||||
        params = Params.parse(params, { file: null,
 | 
			
		||||
                                        settingsSchema: null,
 | 
			
		||||
                                        onLoaded: null });
 | 
			
		||||
 | 
			
		||||
        if (_fileEqual0(this._animationFile, params.file)) {
 | 
			
		||||
        if (this._animations[params.settingsSchema] && _fileEqual0(this._animationFile, params.file)) {
 | 
			
		||||
            if (params.onLoaded) {
 | 
			
		||||
                let id = GLib.idle_add(GLib.PRIORITY_DEFAULT, Lang.bind(this, function() {
 | 
			
		||||
                    params.onLoaded(this._animation);
 | 
			
		||||
                    params.onLoaded(this._animations[params.settingsSchema]);
 | 
			
		||||
                    return GLib.SOURCE_REMOVE;
 | 
			
		||||
                }));
 | 
			
		||||
                GLib.Source.set_name_by_id(id, '[gnome-shell] params.onLoaded');
 | 
			
		||||
@@ -178,12 +180,11 @@ const BackgroundCache = new Lang.Class({
 | 
			
		||||
        let animation = new Animation({ file: params.file });
 | 
			
		||||
 | 
			
		||||
        animation.load(Lang.bind(this, function() {
 | 
			
		||||
                           this._animationFile = params.file;
 | 
			
		||||
                           this._animation = animation;
 | 
			
		||||
                           this._animations[params.settingsSchema] = animation;
 | 
			
		||||
 | 
			
		||||
                           if (params.onLoaded) {
 | 
			
		||||
                               let id = GLib.idle_add(GLib.PRIORITY_DEFAULT, Lang.bind(this, function() {
 | 
			
		||||
                                   params.onLoaded(this._animation);
 | 
			
		||||
                                   params.onLoaded(this._animations[params.settingsSchema]);
 | 
			
		||||
                                   return GLib.SOURCE_REMOVE;
 | 
			
		||||
                               }));
 | 
			
		||||
                               GLib.Source.set_name_by_id(id, '[gnome-shell] params.onLoaded');
 | 
			
		||||
@@ -246,6 +247,13 @@ const Background = new Lang.Class({
 | 
			
		||||
        this._cancellable = new Gio.Cancellable();
 | 
			
		||||
        this.isLoaded = false;
 | 
			
		||||
 | 
			
		||||
        this._clock = new GnomeDesktop.WallClock();
 | 
			
		||||
        this._timezoneChangedId = this._clock.connect('notify::timezone',
 | 
			
		||||
            Lang.bind(this, function() {
 | 
			
		||||
                if (this._animation)
 | 
			
		||||
                    this._loadAnimation(this._animation.file);
 | 
			
		||||
            }));
 | 
			
		||||
 | 
			
		||||
        this._settingsChangedSignalId = this._settings.connect('changed', Lang.bind(this, function() {
 | 
			
		||||
                                            this.emit('changed');
 | 
			
		||||
                                        }));
 | 
			
		||||
@@ -264,6 +272,10 @@ const Background = new Lang.Class({
 | 
			
		||||
        }
 | 
			
		||||
        this._fileWatches = null;
 | 
			
		||||
 | 
			
		||||
        if (this._timezoneChangedId != 0)
 | 
			
		||||
            this._clock.disconnect(this._timezoneChangedId);
 | 
			
		||||
        this._timezoneChangedId = 0;
 | 
			
		||||
 | 
			
		||||
        if (this._settingsChangedSignalId != 0)
 | 
			
		||||
            this._settings.disconnect(this._settingsChangedSignalId);
 | 
			
		||||
        this._settingsChangedSignalId = 0;
 | 
			
		||||
@@ -403,17 +415,18 @@ const Background = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
    _loadAnimation: function(file) {
 | 
			
		||||
        this._cache.getAnimation({ file: file,
 | 
			
		||||
                                         onLoaded: Lang.bind(this, function(animation) {
 | 
			
		||||
                                             this._animation = animation;
 | 
			
		||||
                                   settingsSchema: this._settings.schema_id,
 | 
			
		||||
                                   onLoaded: Lang.bind(this, function(animation) {
 | 
			
		||||
                                       this._animation = animation;
 | 
			
		||||
 | 
			
		||||
                                             if (!this._animation || this._cancellable.is_cancelled()) {
 | 
			
		||||
                                                 this._setLoaded();
 | 
			
		||||
                                                 return;
 | 
			
		||||
                                             }
 | 
			
		||||
                                       if (!this._animation || this._cancellable.is_cancelled()) {
 | 
			
		||||
                                           this._setLoaded();
 | 
			
		||||
                                           return;
 | 
			
		||||
                                       }
 | 
			
		||||
 | 
			
		||||
                                             this._updateAnimation();
 | 
			
		||||
                                             this._watchFile(file);
 | 
			
		||||
                                         })
 | 
			
		||||
                                       this._updateAnimation();
 | 
			
		||||
                                       this._watchFile(file);
 | 
			
		||||
                                   })
 | 
			
		||||
                                 });
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -725,7 +725,8 @@ const Calendar = new Lang.Class({
 | 
			
		||||
        // nRows here means 6 weeks + one header + one navbar
 | 
			
		||||
        let nRows = 8;
 | 
			
		||||
        while (row < 8) {
 | 
			
		||||
            let button = new St.Button({ label: iter.getDate().toString(),
 | 
			
		||||
            // xgettext:no-javascript-format
 | 
			
		||||
            let button = new St.Button({ label: iter.toLocaleFormat(C_("date day number format", "%d")),
 | 
			
		||||
                                         can_focus: true });
 | 
			
		||||
            let rtl = button.get_text_direction() == Clutter.TextDirection.RTL;
 | 
			
		||||
 | 
			
		||||
@@ -1230,7 +1231,7 @@ const NotificationMessage = new Lang.Class({
 | 
			
		||||
                this._closed = true;
 | 
			
		||||
                this.notification.destroy(MessageTray.NotificationDestroyedReason.DISMISSED);
 | 
			
		||||
            }));
 | 
			
		||||
        notification.connect('destroy', Lang.bind(this,
 | 
			
		||||
        this._destroyId = notification.connect('destroy', Lang.bind(this,
 | 
			
		||||
            function() {
 | 
			
		||||
                if (!this._closed)
 | 
			
		||||
                    this.close();
 | 
			
		||||
@@ -1262,6 +1263,10 @@ const NotificationMessage = new Lang.Class({
 | 
			
		||||
        if (this._updatedId)
 | 
			
		||||
            this.notification.disconnect(this._updatedId);
 | 
			
		||||
        this._updatedId = 0;
 | 
			
		||||
 | 
			
		||||
        if (this._destroyId)
 | 
			
		||||
            this.notification.disconnect(this._destroyId);
 | 
			
		||||
        this._destroyId = 0;
 | 
			
		||||
    }
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -313,6 +313,10 @@ const AutorunSource = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
    getIcon: function() {
 | 
			
		||||
        return this.mount.get_icon();
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _createPolicy: function() {
 | 
			
		||||
        return new MessageTray.NotificationApplicationPolicy('org.gnome.Nautilus');
 | 
			
		||||
    }
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
@@ -325,9 +329,6 @@ const AutorunNotification = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
        this._manager = manager;
 | 
			
		||||
        this._mount = source.mount;
 | 
			
		||||
 | 
			
		||||
        // set the notification to urgent, so that it expands out
 | 
			
		||||
        this.setUrgency(MessageTray.Urgency.CRITICAL);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    createBanner: function() {
 | 
			
		||||
 
 | 
			
		||||
@@ -644,15 +644,14 @@ const Dash = new Lang.Class({
 | 
			
		||||
        let firstIcon = firstButton._delegate.icon;
 | 
			
		||||
 | 
			
		||||
        let minHeight, natHeight;
 | 
			
		||||
        let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
 | 
			
		||||
 | 
			
		||||
        // Enforce the current icon size during the size request
 | 
			
		||||
        firstIcon.setIconSize(this.iconSize);
 | 
			
		||||
        firstIcon.icon.ensure_style();
 | 
			
		||||
        let [currentWidth, currentHeight] = firstIcon.icon.get_size();
 | 
			
		||||
        firstIcon.icon.set_size(this.iconSize * scaleFactor, this.iconSize * scaleFactor);
 | 
			
		||||
        [minHeight, natHeight] = firstButton.get_preferred_height(-1);
 | 
			
		||||
 | 
			
		||||
        let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
 | 
			
		||||
        let iconSizes = baseIconSizes.map(function(s) {
 | 
			
		||||
            return s * scaleFactor;
 | 
			
		||||
        });
 | 
			
		||||
        firstIcon.icon.set_size(currentWidth, currentHeight);
 | 
			
		||||
 | 
			
		||||
        // Subtract icon padding and box spacing from the available height
 | 
			
		||||
        availHeight -= iconChildren.length * (natHeight - this.iconSize * scaleFactor) +
 | 
			
		||||
@@ -660,6 +659,10 @@ const Dash = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
        let availSize = availHeight / iconChildren.length;
 | 
			
		||||
 | 
			
		||||
        let iconSizes = baseIconSizes.map(function(s) {
 | 
			
		||||
            return s * scaleFactor;
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        let newIconSize = baseIconSizes[0];
 | 
			
		||||
        for (let i = 0; i < iconSizes.length; i++) {
 | 
			
		||||
            if (iconSizes[i] < availSize)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										71
									
								
								js/ui/dnd.js
									
									
									
									
									
								
							
							
						
						
									
										71
									
								
								js/ui/dnd.js
									
									
									
									
									
								
							@@ -79,9 +79,12 @@ const _Draggable = new Lang.Class({
 | 
			
		||||
                                        dragActorOpacity: undefined });
 | 
			
		||||
 | 
			
		||||
        this.actor = actor;
 | 
			
		||||
        if (!params.manualMode)
 | 
			
		||||
        if (!params.manualMode) {
 | 
			
		||||
            this.actor.connect('button-press-event',
 | 
			
		||||
                               Lang.bind(this, this._onButtonPress));
 | 
			
		||||
            this.actor.connect('touch-event',
 | 
			
		||||
                               Lang.bind(this, this._onTouchEvent));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        this.actor.connect('destroy', Lang.bind(this, function() {
 | 
			
		||||
            this._actorDestroyed = true;
 | 
			
		||||
@@ -121,8 +124,50 @@ const _Draggable = new Lang.Class({
 | 
			
		||||
        return Clutter.EVENT_PROPAGATE;
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _onTouchEvent: function (actor, event) {
 | 
			
		||||
        if (event.type() != Clutter.EventType.TOUCH_BEGIN ||
 | 
			
		||||
            !global.display.is_pointer_emulating_sequence(event.get_event_sequence()))
 | 
			
		||||
            return Clutter.EVENT_PROPAGATE;
 | 
			
		||||
 | 
			
		||||
        if (Tweener.getTweenCount(actor))
 | 
			
		||||
            return Clutter.EVENT_PROPAGATE;
 | 
			
		||||
 | 
			
		||||
        this._touchSequence = event.get_event_sequence();
 | 
			
		||||
 | 
			
		||||
        this._buttonDown = true;
 | 
			
		||||
        this._grabActor();
 | 
			
		||||
 | 
			
		||||
        let [stageX, stageY] = event.get_coords();
 | 
			
		||||
        this._dragStartX = stageX;
 | 
			
		||||
        this._dragStartY = stageY;
 | 
			
		||||
 | 
			
		||||
        return Clutter.EVENT_PROPAGATE;
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _grabDevice: function(actor) {
 | 
			
		||||
        let manager = Clutter.DeviceManager.get_default();
 | 
			
		||||
        let pointer = manager.get_core_device(Clutter.InputDeviceType.POINTER_DEVICE);
 | 
			
		||||
 | 
			
		||||
        if (pointer && this._touchSequence)
 | 
			
		||||
            pointer.sequence_grab(this._touchSequence, actor);
 | 
			
		||||
        else if (pointer)
 | 
			
		||||
            pointer.grab (actor);
 | 
			
		||||
 | 
			
		||||
        this._grabbedDevice = pointer;
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _ungrabDevice: function() {
 | 
			
		||||
        if (this._touchSequence)
 | 
			
		||||
            this._grabbedDevice.sequence_ungrab (this._touchSequence);
 | 
			
		||||
        else
 | 
			
		||||
            this._grabbedDevice.ungrab();
 | 
			
		||||
 | 
			
		||||
        this._touchSequence = null;
 | 
			
		||||
        this._grabbedDevice = null;
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _grabActor: function() {
 | 
			
		||||
        Clutter.grab_pointer(this.actor);
 | 
			
		||||
        this._grabDevice(this.actor);
 | 
			
		||||
        this._onEventId = this.actor.connect('event',
 | 
			
		||||
                                             Lang.bind(this, this._onEvent));
 | 
			
		||||
    },
 | 
			
		||||
@@ -131,7 +176,7 @@ const _Draggable = new Lang.Class({
 | 
			
		||||
        if (!this._onEventId)
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        Clutter.ungrab_pointer();
 | 
			
		||||
        this._ungrabDevice();
 | 
			
		||||
        this.actor.disconnect(this._onEventId);
 | 
			
		||||
        this._onEventId = null;
 | 
			
		||||
    },
 | 
			
		||||
@@ -140,13 +185,13 @@ const _Draggable = new Lang.Class({
 | 
			
		||||
        if (!this._eventsGrabbed) {
 | 
			
		||||
            this._eventsGrabbed = Main.pushModal(_getEventHandlerActor());
 | 
			
		||||
            if (this._eventsGrabbed)
 | 
			
		||||
                Clutter.grab_pointer(_getEventHandlerActor());
 | 
			
		||||
                this._grabDevice(_getEventHandlerActor());
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _ungrabEvents: function() {
 | 
			
		||||
        if (this._eventsGrabbed) {
 | 
			
		||||
            Clutter.ungrab_pointer();
 | 
			
		||||
            this._ungrabDevice();
 | 
			
		||||
            Main.popModal(_getEventHandlerActor());
 | 
			
		||||
            this._eventsGrabbed = false;
 | 
			
		||||
        }
 | 
			
		||||
@@ -157,7 +202,9 @@ const _Draggable = new Lang.Class({
 | 
			
		||||
        // didn't start the drag, to drop the draggable in case the drag was in progress, and
 | 
			
		||||
        // to complete the drag and ensure that whatever happens to be under the pointer does
 | 
			
		||||
        // not get triggered if the drag was cancelled with Esc.
 | 
			
		||||
        if (event.type() == Clutter.EventType.BUTTON_RELEASE) {
 | 
			
		||||
        if (event.type() == Clutter.EventType.BUTTON_RELEASE ||
 | 
			
		||||
            (event.type() == Clutter.EventType.TOUCH_END &&
 | 
			
		||||
             global.display.is_pointer_emulating_sequence(event.get_event_sequence()))) {
 | 
			
		||||
            this._buttonDown = false;
 | 
			
		||||
            if (this._dragInProgress) {
 | 
			
		||||
                return this._dragActorDropped(event);
 | 
			
		||||
@@ -172,7 +219,9 @@ const _Draggable = new Lang.Class({
 | 
			
		||||
            }
 | 
			
		||||
        // We intercept MOTION event to figure out if the drag has started and to draw
 | 
			
		||||
        // this._dragActor under the pointer when dragging is in progress
 | 
			
		||||
        } else if (event.type() == Clutter.EventType.MOTION) {
 | 
			
		||||
        } else if (event.type() == Clutter.EventType.MOTION ||
 | 
			
		||||
                   (event.type() == Clutter.EventType.TOUCH_UPDATE &&
 | 
			
		||||
                    global.display.is_pointer_emulating_sequence(event.get_event_sequence()))) {
 | 
			
		||||
            if (this._dragInProgress) {
 | 
			
		||||
                return this._updateDragPosition(event);
 | 
			
		||||
            } else if (this._dragActor == null) {
 | 
			
		||||
@@ -214,7 +263,7 @@ const _Draggable = new Lang.Class({
 | 
			
		||||
     * This function is useful to call if you've specified manualMode
 | 
			
		||||
     * for the draggable.
 | 
			
		||||
     */
 | 
			
		||||
    startDrag: function (stageX, stageY, time) {
 | 
			
		||||
    startDrag: function (stageX, stageY, time, sequence) {
 | 
			
		||||
        currentDraggable = this;
 | 
			
		||||
        this._dragInProgress = true;
 | 
			
		||||
 | 
			
		||||
@@ -228,6 +277,8 @@ const _Draggable = new Lang.Class({
 | 
			
		||||
        this.emit('drag-begin', time);
 | 
			
		||||
        if (this._onEventId)
 | 
			
		||||
            this._ungrabActor();
 | 
			
		||||
 | 
			
		||||
        this._touchSequence = sequence;
 | 
			
		||||
        this._grabEvents();
 | 
			
		||||
        global.screen.set_cursor(Meta.Cursor.DND_IN_DRAG);
 | 
			
		||||
 | 
			
		||||
@@ -338,8 +389,8 @@ const _Draggable = new Lang.Class({
 | 
			
		||||
        let threshold = Gtk.Settings.get_default().gtk_dnd_drag_threshold;
 | 
			
		||||
        if ((Math.abs(stageX - this._dragStartX) > threshold ||
 | 
			
		||||
             Math.abs(stageY - this._dragStartY) > threshold)) {
 | 
			
		||||
                this.startDrag(stageX, stageY, event.get_time());
 | 
			
		||||
                this._updateDragPosition(event);
 | 
			
		||||
            this.startDrag(stageX, stageY, event.get_time(), this._touchSequence);
 | 
			
		||||
            this._updateDragPosition(event);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return true;
 | 
			
		||||
 
 | 
			
		||||
@@ -334,7 +334,7 @@ function _sessionUpdated() {
 | 
			
		||||
    // from allowExtensions in the future
 | 
			
		||||
    if (Main.sessionMode.allowExtensions) {
 | 
			
		||||
        if (initted)
 | 
			
		||||
            onEnabledExtensionsChanged();
 | 
			
		||||
            enabledExtensions = getEnabledExtensions();
 | 
			
		||||
        enableAllExtensions();
 | 
			
		||||
    } else {
 | 
			
		||||
        disableAllExtensions();
 | 
			
		||||
 
 | 
			
		||||
@@ -78,6 +78,7 @@ let _startDate;
 | 
			
		||||
let _defaultCssStylesheet = null;
 | 
			
		||||
let _cssStylesheet = null;
 | 
			
		||||
let _a11ySettings = null;
 | 
			
		||||
let _themeResource = null;
 | 
			
		||||
 | 
			
		||||
function _sessionUpdated() {
 | 
			
		||||
    if (sessionMode.isPrimary)
 | 
			
		||||
@@ -137,9 +138,7 @@ function _initializeUI() {
 | 
			
		||||
    Shell.WindowTracker.get_default();
 | 
			
		||||
    Shell.AppUsage.get_default();
 | 
			
		||||
 | 
			
		||||
    let resource = Gio.Resource.load(global.datadir + '/gnome-shell-theme.gresource');
 | 
			
		||||
    resource._register();
 | 
			
		||||
 | 
			
		||||
    reloadThemeResource();
 | 
			
		||||
    _loadDefaultStylesheet();
 | 
			
		||||
 | 
			
		||||
    // Setup the stage hierarchy early
 | 
			
		||||
@@ -290,6 +289,14 @@ function setThemeStylesheet(cssStylesheet) {
 | 
			
		||||
    _cssStylesheet = cssStylesheet ? Gio.File.new_for_path(cssStylesheet) : null;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function reloadThemeResource() {
 | 
			
		||||
    if (_themeResource)
 | 
			
		||||
        _themeResource._unregister();
 | 
			
		||||
 | 
			
		||||
    _themeResource = Gio.Resource.load(global.datadir + '/gnome-shell-theme.gresource');
 | 
			
		||||
    _themeResource._register();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * loadTheme:
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -95,6 +95,7 @@ const AppMenuButton = new Lang.Class({
 | 
			
		||||
        this._startingApps = [];
 | 
			
		||||
 | 
			
		||||
        this._menuManager = panel.menuManager;
 | 
			
		||||
        this._gtkSettings = Gtk.Settings.get_default();
 | 
			
		||||
        this._targetApp = null;
 | 
			
		||||
        this._appMenuNotifyId = 0;
 | 
			
		||||
        this._actionGroupNotifyId = 0;
 | 
			
		||||
@@ -123,11 +124,14 @@ const AppMenuButton = new Lang.Class({
 | 
			
		||||
        this._arrow = PopupMenu.arrowIcon(St.Side.BOTTOM);
 | 
			
		||||
        this._container.add_actor(this._arrow);
 | 
			
		||||
 | 
			
		||||
        this._visible = !Main.overview.visible;
 | 
			
		||||
        this._visible = this._gtkSettings.gtk_shell_shows_app_menu &&
 | 
			
		||||
                        !Main.overview.visible;
 | 
			
		||||
        if (!this._visible)
 | 
			
		||||
            this.actor.hide();
 | 
			
		||||
        this._overviewHidingId = Main.overview.connect('hiding', Lang.bind(this, this._sync));
 | 
			
		||||
        this._overviewShowingId = Main.overview.connect('showing', Lang.bind(this, this._sync));
 | 
			
		||||
        this._showsAppMenuId = this._gtkSettings.connect('notify::gtk-shell-shows-app-menu',
 | 
			
		||||
                                                         Lang.bind(this, this._sync));
 | 
			
		||||
 | 
			
		||||
        this._stop = true;
 | 
			
		||||
 | 
			
		||||
@@ -305,7 +309,9 @@ const AppMenuButton = new Lang.Class({
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        let visible = (this._targetApp != null && !Main.overview.visibleTarget);
 | 
			
		||||
        let visible = (this._targetApp != null &&
 | 
			
		||||
                       this._gtkSettings.gtk_shell_shows_app_menu &&
 | 
			
		||||
                       !Main.overview.visibleTarget);
 | 
			
		||||
        if (visible)
 | 
			
		||||
            this.show();
 | 
			
		||||
        else
 | 
			
		||||
@@ -378,6 +384,10 @@ const AppMenuButton = new Lang.Class({
 | 
			
		||||
            Main.overview.disconnect(this._overviewShowingId);
 | 
			
		||||
            this._overviewShowingId = 0;
 | 
			
		||||
        }
 | 
			
		||||
        if (this._showsAppMenuId > 0) {
 | 
			
		||||
            this._gtkSettings.disconnect(this._showsAppMenuId);
 | 
			
		||||
            this._showsAppMenuId = 0;
 | 
			
		||||
        }
 | 
			
		||||
        if (this._switchWorkspaceNotifyId > 0) {
 | 
			
		||||
            global.window_manager.disconnect(this._switchWorkspaceNotifyId);
 | 
			
		||||
            this._switchWorkspaceNotifyId = 0;
 | 
			
		||||
@@ -449,7 +459,8 @@ const ActivitiesButton = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
        if (event.type() == Clutter.EventType.TOUCH_END ||
 | 
			
		||||
            event.type() == Clutter.EventType.BUTTON_RELEASE)
 | 
			
		||||
            Main.overview.toggle();
 | 
			
		||||
            if (Main.overview.shouldToggleByCornerOrButton())
 | 
			
		||||
                Main.overview.toggle();
 | 
			
		||||
 | 
			
		||||
        return Clutter.EVENT_PROPAGATE;
 | 
			
		||||
    },
 | 
			
		||||
@@ -457,7 +468,8 @@ const ActivitiesButton = new Lang.Class({
 | 
			
		||||
    _onKeyRelease: function(actor, event) {
 | 
			
		||||
        let symbol = event.get_key_symbol();
 | 
			
		||||
        if (symbol == Clutter.KEY_Return || symbol == Clutter.KEY_space) {
 | 
			
		||||
            Main.overview.toggle();
 | 
			
		||||
            if (Main.overview.shouldToggleByCornerOrButton())
 | 
			
		||||
                Main.overview.toggle();
 | 
			
		||||
        }
 | 
			
		||||
        return Clutter.EVENT_PROPAGATE;
 | 
			
		||||
    },
 | 
			
		||||
@@ -642,14 +654,50 @@ const PanelCorner = new Lang.Class({
 | 
			
		||||
    }
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
const AggregateLayout = new Lang.Class({
 | 
			
		||||
    Name: 'AggregateLayout',
 | 
			
		||||
    Extends: Clutter.BoxLayout,
 | 
			
		||||
 | 
			
		||||
    _init: function(params) {
 | 
			
		||||
        if (!params)
 | 
			
		||||
            params = {};
 | 
			
		||||
        params['orientation'] = Clutter.Orientation.VERTICAL;
 | 
			
		||||
        this.parent(params);
 | 
			
		||||
 | 
			
		||||
        this._sizeChildren = [];
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    addSizeChild: function(actor) {
 | 
			
		||||
        this._sizeChildren.push(actor);
 | 
			
		||||
        this.layout_changed();
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    vfunc_get_preferred_width: function(container, forHeight) {
 | 
			
		||||
        let themeNode = container.get_theme_node();
 | 
			
		||||
        let minWidth = themeNode.get_min_width();
 | 
			
		||||
        let natWidth = minWidth;
 | 
			
		||||
 | 
			
		||||
        for (let i = 0; i < this._sizeChildren.length; i++) {
 | 
			
		||||
            let child = this._sizeChildren[i];
 | 
			
		||||
            let [childMin, childNat] = child.get_preferred_width(forHeight);
 | 
			
		||||
            minWidth = Math.max(minWidth, childMin);
 | 
			
		||||
            natWidth = Math.max(minWidth, childNat);
 | 
			
		||||
        }
 | 
			
		||||
        return [minWidth, natWidth];
 | 
			
		||||
    }
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
const AggregateMenu = new Lang.Class({
 | 
			
		||||
    Name: 'AggregateMenu',
 | 
			
		||||
    Extends: PanelMenu.Button,
 | 
			
		||||
 | 
			
		||||
    _init: function() {
 | 
			
		||||
        this.parent(0.0, _("Settings"), false);
 | 
			
		||||
        this.parent(0.0, C_("System menu in the top bar", "System"), false);
 | 
			
		||||
        this.menu.actor.add_style_class_name('aggregate-menu');
 | 
			
		||||
 | 
			
		||||
        let menuLayout = new AggregateLayout();
 | 
			
		||||
        this.menu.box.set_layout_manager(menuLayout);
 | 
			
		||||
 | 
			
		||||
        this._indicators = new St.BoxLayout({ style_class: 'panel-status-indicators-box' });
 | 
			
		||||
        this.actor.add_child(this._indicators);
 | 
			
		||||
 | 
			
		||||
@@ -698,6 +746,11 @@ const AggregateMenu = new Lang.Class({
 | 
			
		||||
        this.menu.addMenuItem(this._rfkill.menu);
 | 
			
		||||
        this.menu.addMenuItem(this._power.menu);
 | 
			
		||||
        this.menu.addMenuItem(this._system.menu);
 | 
			
		||||
 | 
			
		||||
        menuLayout.addSizeChild(this._location.menu.actor);
 | 
			
		||||
        menuLayout.addSizeChild(this._rfkill.menu.actor);
 | 
			
		||||
        menuLayout.addSizeChild(this._power.menu.actor);
 | 
			
		||||
        menuLayout.addSizeChild(this._system.menu.actor);
 | 
			
		||||
    },
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,13 +7,6 @@ const Meta = imports.gi.Meta;
 | 
			
		||||
const GnomeDesktop = imports.gi.GnomeDesktop;
 | 
			
		||||
const Shell = imports.gi.Shell;
 | 
			
		||||
 | 
			
		||||
// We stop polling if the user is idle for more than this amount of time
 | 
			
		||||
const IDLE_TIME = 1000;
 | 
			
		||||
 | 
			
		||||
// This file implements a reasonably efficient system for tracking the position
 | 
			
		||||
// of the mouse pointer. We simply query the pointer from the X server in a loop,
 | 
			
		||||
// but we turn off the polling when the user is idle.
 | 
			
		||||
 | 
			
		||||
let _pointerWatcher = null;
 | 
			
		||||
function getPointerWatcher() {
 | 
			
		||||
    if (_pointerWatcher == null)
 | 
			
		||||
@@ -25,9 +18,8 @@ function getPointerWatcher() {
 | 
			
		||||
const PointerWatch = new Lang.Class({
 | 
			
		||||
    Name: 'PointerWatch',
 | 
			
		||||
 | 
			
		||||
    _init: function(watcher, interval, callback) {
 | 
			
		||||
    _init: function(watcher, callback) {
 | 
			
		||||
        this.watcher = watcher;
 | 
			
		||||
        this.interval = interval;
 | 
			
		||||
        this.callback = callback;
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
@@ -43,9 +35,9 @@ const PointerWatcher = new Lang.Class({
 | 
			
		||||
    Name: 'PointerWatcher',
 | 
			
		||||
 | 
			
		||||
    _init: function() {
 | 
			
		||||
        this._idleMonitor = Meta.IdleMonitor.get_core();
 | 
			
		||||
        this._idleMonitor.add_idle_watch(IDLE_TIME, Lang.bind(this, this._onIdleMonitorBecameIdle));
 | 
			
		||||
        this._idle = this._idleMonitor.get_idletime() > IDLE_TIME;
 | 
			
		||||
        this._cursorTracker = Meta.CursorTracker.get_for_screen(global.screen);
 | 
			
		||||
        this._cursorTracker.connect('position-changed', Lang.bind(this, this._updatePointer));
 | 
			
		||||
 | 
			
		||||
        this._watches = [];
 | 
			
		||||
        this.pointerX = null;
 | 
			
		||||
        this.pointerY = null;
 | 
			
		||||
@@ -61,60 +53,25 @@ const PointerWatcher = new Lang.Class({
 | 
			
		||||
    // Set up a watch on the position of the mouse pointer. Returns a
 | 
			
		||||
    // PointerWatch object which has a remove() method to remove the watch.
 | 
			
		||||
    addWatch: function(interval, callback) {
 | 
			
		||||
        this._cursorTracker.enable_track_position();
 | 
			
		||||
 | 
			
		||||
        // Avoid unreliably calling the watch for the current position
 | 
			
		||||
        this._updatePointer();
 | 
			
		||||
 | 
			
		||||
        let watch = new PointerWatch(this, interval, callback);
 | 
			
		||||
        this._watches.push(watch);
 | 
			
		||||
        this._updateTimeout();
 | 
			
		||||
        this._watches.push(callback);
 | 
			
		||||
        return watch;
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _removeWatch: function(watch) {
 | 
			
		||||
        for (let i = 0; i < this._watches.length; i++) {
 | 
			
		||||
            if (this._watches[i] == watch) {
 | 
			
		||||
                this._cursorTracker.disable_track_position();
 | 
			
		||||
                this._watches.splice(i, 1);
 | 
			
		||||
                this._updateTimeout();
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _onIdleMonitorBecameActive: function(monitor) {
 | 
			
		||||
        this._idle = false;
 | 
			
		||||
        this._updatePointer();
 | 
			
		||||
        this._updateTimeout();
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _onIdleMonitorBecameIdle: function(monitor) {
 | 
			
		||||
        this._idle = true;
 | 
			
		||||
        this._idleMonitor.add_user_active_watch(Lang.bind(this, this._onIdleMonitorBecameActive));
 | 
			
		||||
        this._updateTimeout();
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _updateTimeout: function() {
 | 
			
		||||
        if (this._timeoutId) {
 | 
			
		||||
            Mainloop.source_remove(this._timeoutId);
 | 
			
		||||
            this._timeoutId = 0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (this._idle || this._watches.length == 0)
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        let minInterval = this._watches[0].interval;
 | 
			
		||||
        for (let i = 1; i < this._watches.length; i++)
 | 
			
		||||
            minInterval = Math.min(this._watches[i].interval, minInterval);
 | 
			
		||||
 | 
			
		||||
        this._timeoutId = Mainloop.timeout_add(minInterval,
 | 
			
		||||
                                               Lang.bind(this, this._onTimeout));
 | 
			
		||||
        GLib.Source.set_name_by_id(this._timeoutId, '[gnome-shell] this._onTimeout');
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _onTimeout: function() {
 | 
			
		||||
        this._updatePointer();
 | 
			
		||||
        return GLib.SOURCE_CONTINUE;
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _updatePointer: function() {
 | 
			
		||||
        let [x, y, mods] = global.get_pointer();
 | 
			
		||||
        if (this.pointerX == x && this.pointerY == y)
 | 
			
		||||
 
 | 
			
		||||
@@ -396,6 +396,7 @@ const PopupImageMenuItem = new Lang.Class({
 | 
			
		||||
        this.actor.add_child(this.label);
 | 
			
		||||
        this._icon = new St.Icon({ style_class: 'popup-menu-icon' });
 | 
			
		||||
        this.actor.add_child(this._icon, { align: St.Align.END });
 | 
			
		||||
        this.actor.label_actor = this.label;
 | 
			
		||||
 | 
			
		||||
        this.setIcon(iconName);
 | 
			
		||||
    },
 | 
			
		||||
@@ -1145,6 +1146,16 @@ const PopupSubMenuMenuItem = new Lang.Class({
 | 
			
		||||
        this.actor.remove_style_pseudo_class ('active');
 | 
			
		||||
        this._setOpenState(!this._getOpenState());
 | 
			
		||||
        return Clutter.EVENT_PROPAGATE;
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _onTouchEvent: function(actor, event) {
 | 
			
		||||
        if (event.type() == Clutter.EventType.TOUCH_END) {
 | 
			
		||||
            // Since we override the parent, we need to manage what the parent does
 | 
			
		||||
            // with the active style class
 | 
			
		||||
            this.actor.remove_style_pseudo_class ('active');
 | 
			
		||||
            this._setOpenState(!this._getOpenState());
 | 
			
		||||
        }
 | 
			
		||||
        return Clutter.EVENT_PROPAGATE;
 | 
			
		||||
    }
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -61,6 +61,7 @@ const RunDialog = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
                                   // rt is short for "reload theme"
 | 
			
		||||
                                   'rt': Lang.bind(this, function() {
 | 
			
		||||
                                       Main.reloadThemeResource();
 | 
			
		||||
                                       Main.loadTheme();
 | 
			
		||||
                                   })
 | 
			
		||||
                                 };
 | 
			
		||||
 
 | 
			
		||||
@@ -1,11 +1,8 @@
 | 
			
		||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
 | 
			
		||||
 | 
			
		||||
const Clutter = imports.gi.Clutter;
 | 
			
		||||
const GLib = imports.gi.GLib;
 | 
			
		||||
const Gio = imports.gi.Gio;
 | 
			
		||||
const GnomeBluetooth = imports.gi.GnomeBluetooth;
 | 
			
		||||
const Lang = imports.lang;
 | 
			
		||||
const St = imports.gi.St;
 | 
			
		||||
 | 
			
		||||
const Main = imports.ui.main;
 | 
			
		||||
const PanelMenu = imports.ui.panelMenu;
 | 
			
		||||
@@ -23,6 +20,8 @@ const RfkillManagerInterface = '<node> \
 | 
			
		||||
 | 
			
		||||
const RfkillManagerProxy = Gio.DBusProxy.makeProxyWrapper(RfkillManagerInterface);
 | 
			
		||||
 | 
			
		||||
const HAD_BLUETOOTH_DEVICES_SETUP = 'had-bluetooth-devices-setup';
 | 
			
		||||
 | 
			
		||||
const Indicator = new Lang.Class({
 | 
			
		||||
    Name: 'BTIndicator',
 | 
			
		||||
    Extends: PanelMenu.SystemIndicator,
 | 
			
		||||
@@ -32,6 +31,7 @@ const Indicator = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
        this._indicator = this._addIndicator();
 | 
			
		||||
        this._indicator.icon_name = 'bluetooth-active-symbolic';
 | 
			
		||||
        this._hadSetupDevices = global.settings.get_boolean(HAD_BLUETOOTH_DEVICES_SETUP);
 | 
			
		||||
 | 
			
		||||
        this._proxy = new RfkillManagerProxy(Gio.DBus.session, BUS_NAME, OBJECT_PATH,
 | 
			
		||||
                                             Lang.bind(this, function(proxy, error) {
 | 
			
		||||
@@ -44,13 +44,15 @@ const Indicator = new Lang.Class({
 | 
			
		||||
                                             }));
 | 
			
		||||
        this._proxy.connect('g-properties-changed', Lang.bind(this, this._sync));
 | 
			
		||||
 | 
			
		||||
        // The Bluetooth menu only appears when Bluetooth is in use,
 | 
			
		||||
        // so just statically build it with a "Turn Off" menu item.
 | 
			
		||||
        this._item = new PopupMenu.PopupSubMenuMenuItem('', true);
 | 
			
		||||
        this._item = new PopupMenu.PopupSubMenuMenuItem(_("Bluetooth"), true);
 | 
			
		||||
        this._item.icon.icon_name = 'bluetooth-active-symbolic';
 | 
			
		||||
        this._item.menu.addAction(_("Turn Off"), Lang.bind(this, function() {
 | 
			
		||||
            this._proxy.BluetoothAirplaneMode = true;
 | 
			
		||||
 | 
			
		||||
        this._toggleItem = new PopupMenu.PopupMenuItem('');
 | 
			
		||||
        this._toggleItem.connect('activate', Lang.bind(this, function() {
 | 
			
		||||
            this._proxy.BluetoothAirplaneMode = !this._proxy.BluetoothAirplaneMode;
 | 
			
		||||
        }));
 | 
			
		||||
        this._item.menu.addMenuItem(this._toggleItem);
 | 
			
		||||
 | 
			
		||||
        this._item.menu.addSettingsAction(_("Bluetooth Settings"), 'gnome-bluetooth-panel.desktop');
 | 
			
		||||
        this.menu.addMenuItem(this._item);
 | 
			
		||||
 | 
			
		||||
@@ -68,42 +70,75 @@ const Indicator = new Lang.Class({
 | 
			
		||||
        while (ret) {
 | 
			
		||||
            let isDefault = this._model.get_value(iter,
 | 
			
		||||
                                                  GnomeBluetooth.Column.DEFAULT);
 | 
			
		||||
            if (isDefault)
 | 
			
		||||
            let isPowered = this._model.get_value(iter,
 | 
			
		||||
                                                  GnomeBluetooth.Column.POWERED);
 | 
			
		||||
            if (isDefault && isPowered)
 | 
			
		||||
                return iter;
 | 
			
		||||
            ret = this._model.iter_next(iter);
 | 
			
		||||
        }
 | 
			
		||||
        return null;
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _getNConnectedDevices: function() {
 | 
			
		||||
    // nDevices is the number of devices setup for the current default
 | 
			
		||||
    // adapter if one exists and is powered. If unpowered or unavailable,
 | 
			
		||||
    // nDevice is "1" if it had setup devices associated to it the last
 | 
			
		||||
    // time it was seen, and "-1" if not.
 | 
			
		||||
    //
 | 
			
		||||
    // nConnectedDevices is the number of devices connected to the default
 | 
			
		||||
    // adapter if one exists and is powered, or -1 if it's not available.
 | 
			
		||||
    _getNDevices: function() {
 | 
			
		||||
        let adapter = this._getDefaultAdapter();
 | 
			
		||||
        if (!adapter)
 | 
			
		||||
            return 0;
 | 
			
		||||
            return [ this._hadSetupDevices ? 1 : -1, -1 ];
 | 
			
		||||
 | 
			
		||||
        let nConnectedDevices = 0;
 | 
			
		||||
        let nDevices = 0;
 | 
			
		||||
        let [ret, iter] = this._model.iter_children(adapter);
 | 
			
		||||
        while (ret) {
 | 
			
		||||
            let isConnected = this._model.get_value(iter,
 | 
			
		||||
                                                    GnomeBluetooth.Column.CONNECTED);
 | 
			
		||||
            if (isConnected)
 | 
			
		||||
                nConnectedDevices++;
 | 
			
		||||
 | 
			
		||||
            let isPaired = this._model.get_value(iter,
 | 
			
		||||
                                                 GnomeBluetooth.Column.PAIRED);
 | 
			
		||||
            let isTrusted = this._model.get_value(iter,
 | 
			
		||||
                                                  GnomeBluetooth.Column.TRUSTED);
 | 
			
		||||
            if (isPaired || isTrusted)
 | 
			
		||||
                nDevices++;
 | 
			
		||||
            ret = this._model.iter_next(iter);
 | 
			
		||||
        }
 | 
			
		||||
        return nDevices;
 | 
			
		||||
 | 
			
		||||
        if (this._hadSetupDevices != (nDevices > 0)) {
 | 
			
		||||
            this._hadSetupDevices = !this._hadSetupDevices;
 | 
			
		||||
            global.settings.set_boolean(HAD_BLUETOOTH_DEVICES_SETUP, this._hadSetupDevices);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return [ nDevices, nConnectedDevices];
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _sync: function() {
 | 
			
		||||
        let nDevices = this._getNConnectedDevices();
 | 
			
		||||
        let [ nDevices, nConnectedDevices ] = this._getNDevices();
 | 
			
		||||
        let sensitive = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter;
 | 
			
		||||
 | 
			
		||||
        this.menu.setSensitive(sensitive);
 | 
			
		||||
        this._indicator.visible = nDevices > 0;
 | 
			
		||||
        this._item.actor.visible = this._proxy.BluetoothHasAirplaneMode && !this._proxy.BluetoothAirplaneMode;
 | 
			
		||||
        this._indicator.visible = nConnectedDevices > 0;
 | 
			
		||||
 | 
			
		||||
        // Remember if there were setup devices and show the menu
 | 
			
		||||
        // if we've seen setup devices and we're not hard blocked
 | 
			
		||||
        if (nDevices > 0)
 | 
			
		||||
            this._item.actor.visible = !this._proxy.BluetoothHardwareAirplaneMode;
 | 
			
		||||
        else
 | 
			
		||||
            this._item.actor.visible = this._proxy.BluetoothHasAirplaneMode && !this._proxy.BluetoothAirplaneMode;
 | 
			
		||||
 | 
			
		||||
        if (nConnectedDevices > 0)
 | 
			
		||||
            /* Translators: this is the number of connected bluetooth devices */
 | 
			
		||||
            this._item.label.text = ngettext("%d Connected", "%d Connected", nDevices).format(nDevices);
 | 
			
		||||
            this._item.label.text = ngettext("%d Connected", "%d Connected", nConnectedDevices).format(nConnectedDevices);
 | 
			
		||||
        else if (nConnectedDevices == -1)
 | 
			
		||||
            this._item.label.text = _("Off");
 | 
			
		||||
        else
 | 
			
		||||
            this._item.label.text = _("Not In Use");
 | 
			
		||||
 | 
			
		||||
        this._toggleItem.label.text = this._proxy.BluetoothAirplaneMode ? _("Turn On") : _("Turn Off");
 | 
			
		||||
    },
 | 
			
		||||
});
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,8 @@
 | 
			
		||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
 | 
			
		||||
 | 
			
		||||
const Gio = imports.gi.Gio;
 | 
			
		||||
const Clutter = imports.gi.Clutter;
 | 
			
		||||
const St = imports.gi.St;
 | 
			
		||||
const Lang = imports.lang;
 | 
			
		||||
const UPower = imports.gi.UPowerGlib;
 | 
			
		||||
 | 
			
		||||
@@ -25,6 +27,8 @@ const DisplayDeviceInterface = '<node> \
 | 
			
		||||
 | 
			
		||||
const PowerManagerProxy = Gio.DBusProxy.makeProxyWrapper(DisplayDeviceInterface);
 | 
			
		||||
 | 
			
		||||
const SHOW_BATTERY_PERCENTAGE       = 'show-battery-percentage';
 | 
			
		||||
 | 
			
		||||
const Indicator = new Lang.Class({
 | 
			
		||||
    Name: 'PowerIndicator',
 | 
			
		||||
    Extends: PanelMenu.SystemIndicator,
 | 
			
		||||
@@ -32,7 +36,15 @@ const Indicator = new Lang.Class({
 | 
			
		||||
    _init: function() {
 | 
			
		||||
        this.parent();
 | 
			
		||||
 | 
			
		||||
        this._desktopSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.interface' });
 | 
			
		||||
        this._desktopSettings.connect('changed::' + SHOW_BATTERY_PERCENTAGE,
 | 
			
		||||
                                      Lang.bind(this, this._sync));
 | 
			
		||||
 | 
			
		||||
        this._indicator = this._addIndicator();
 | 
			
		||||
        this._percentageLabel = new St.Label({ y_expand: true,
 | 
			
		||||
                                               y_align: Clutter.ActorAlign.CENTER });
 | 
			
		||||
        this.indicators.add(this._percentageLabel, { expand: true, y_fill: true });
 | 
			
		||||
        this.indicators.add_style_class_name('power-status');
 | 
			
		||||
 | 
			
		||||
        this._proxy = new PowerManagerProxy(Gio.DBus.system, BUS_NAME, OBJECT_PATH,
 | 
			
		||||
                                            Lang.bind(this, function(proxy, error) {
 | 
			
		||||
@@ -83,12 +95,12 @@ const Indicator = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
        if (this._proxy.State == UPower.DeviceState.DISCHARGING) {
 | 
			
		||||
            // Translators: this is <hours>:<minutes> Remaining (<percentage>)
 | 
			
		||||
            return _("%d\u2236%02d Remaining (%d%%)").format(hours, minutes, this._proxy.Percentage);
 | 
			
		||||
            return _("%d\u2236%02d Remaining (%d\u2009%%)").format(hours, minutes, this._proxy.Percentage);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (this._proxy.State == UPower.DeviceState.CHARGING) {
 | 
			
		||||
            // Translators: this is <hours>:<minutes> Until Full (<percentage>)
 | 
			
		||||
            return _("%d\u2236%02d Until Full (%d%%)").format(hours, minutes, this._proxy.Percentage);
 | 
			
		||||
            return _("%d\u2236%02d Until Full (%d\u2009%%)").format(hours, minutes, this._proxy.Percentage);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return null;
 | 
			
		||||
@@ -99,10 +111,12 @@ const Indicator = new Lang.Class({
 | 
			
		||||
        let visible = this._proxy.IsPresent;
 | 
			
		||||
        if (visible) {
 | 
			
		||||
            this._item.actor.show();
 | 
			
		||||
            this._percentageLabel.visible = this._desktopSettings.get_boolean(SHOW_BATTERY_PERCENTAGE);
 | 
			
		||||
        } else {
 | 
			
		||||
            // If there's no battery, then we use the power icon.
 | 
			
		||||
            this._item.actor.hide();
 | 
			
		||||
            this._indicator.icon_name = 'system-shutdown-symbolic';
 | 
			
		||||
            this._percentageLabel.hide();
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -111,6 +125,14 @@ const Indicator = new Lang.Class({
 | 
			
		||||
        this._indicator.icon_name = icon;
 | 
			
		||||
        this._item.icon.icon_name = icon;
 | 
			
		||||
 | 
			
		||||
        // The icon label
 | 
			
		||||
        let label
 | 
			
		||||
        if (this._proxy.State == UPower.DeviceState.FULLY_CHARGED)
 | 
			
		||||
          label = _("%d\u2009%%").format(100);
 | 
			
		||||
        else
 | 
			
		||||
          label = _("%d\u2009%%").format(this._proxy.Percentage);
 | 
			
		||||
        this._percentageLabel.clutter_text.set_markup('<span size="smaller">' + label + '</span>');
 | 
			
		||||
 | 
			
		||||
        // The status label
 | 
			
		||||
        this._item.label.text = this._getStatus();
 | 
			
		||||
    },
 | 
			
		||||
 
 | 
			
		||||
@@ -677,6 +677,7 @@ const WindowManager = new Lang.Class({
 | 
			
		||||
        this._minimizing = [];
 | 
			
		||||
        this._unminimizing = [];
 | 
			
		||||
        this._mapping = [];
 | 
			
		||||
        this._resizing = [];
 | 
			
		||||
        this._destroying = [];
 | 
			
		||||
        this._movingWindow = null;
 | 
			
		||||
 | 
			
		||||
@@ -692,6 +693,7 @@ const WindowManager = new Lang.Class({
 | 
			
		||||
            this._minimizeWindowDone(shellwm, actor);
 | 
			
		||||
            this._mapWindowDone(shellwm, actor);
 | 
			
		||||
            this._destroyWindowDone(shellwm, actor);
 | 
			
		||||
            this._sizeChangeWindowDone(shellwm, actor);
 | 
			
		||||
        }));
 | 
			
		||||
 | 
			
		||||
        this._shellwm.connect('switch-workspace', Lang.bind(this, this._switchWorkspace));
 | 
			
		||||
@@ -1218,9 +1220,120 @@ const WindowManager = new Lang.Class({
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _sizeChangeWindow : function(shellwm, actor, whichChange, oldFrameRect, oldBufferRect) {
 | 
			
		||||
        let types = [Meta.WindowType.NORMAL];
 | 
			
		||||
        if (!this._shouldAnimateActor(actor, types)) {
 | 
			
		||||
            shellwm.completed_size_change(actor);
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (whichChange == Meta.SizeChange.FULLSCREEN)
 | 
			
		||||
            this._fullscreenWindow(shellwm, actor, oldFrameRect, oldBufferRect);
 | 
			
		||||
        else if (whichChange == Meta.SizeChange.UNFULLSCREEN)
 | 
			
		||||
            this._unfullscreenWindow(shellwm, actor, oldFrameRect, oldBufferRect);
 | 
			
		||||
        else
 | 
			
		||||
            shellwm.completed_size_change(actor);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _fullscreenWindow: function(shellwm, actor, oldFrameRect, oldBufferRect) {
 | 
			
		||||
        let monitor = Main.layoutManager.monitors[actor.meta_window.get_monitor()];
 | 
			
		||||
        actor.translation_x = oldFrameRect.x - monitor.x;
 | 
			
		||||
        actor.translation_y = oldFrameRect.y - monitor.y;
 | 
			
		||||
        this._fullscreenAnimation(shellwm, actor, oldFrameRect);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _unfullscreenWindow: function(shellwm, actor, oldFrameRect, oldBufferRect) {
 | 
			
		||||
        let targetRect = actor.meta_window.get_frame_rect();
 | 
			
		||||
        let monitor = Main.layoutManager.monitors[actor.meta_window.get_monitor()];
 | 
			
		||||
        actor.translation_x = -(targetRect.x - monitor.x);
 | 
			
		||||
        actor.translation_y = -(targetRect.y - monitor.y);
 | 
			
		||||
        this._fullscreenAnimation(shellwm, actor, oldFrameRect);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _fullscreenAnimation: function(shellwm, actor, oldFrameRect) {
 | 
			
		||||
        this._resizing.push(actor);
 | 
			
		||||
 | 
			
		||||
        // Position a clone of the window on top of the old position,
 | 
			
		||||
        // while actor updates are frozen.
 | 
			
		||||
        // Note that the MetaWindow has up to date sizing information for
 | 
			
		||||
        // the new geometry already.
 | 
			
		||||
        let targetRect = actor.meta_window.get_frame_rect();
 | 
			
		||||
        let actorContent = Shell.util_get_content_for_window_actor(actor, oldFrameRect);
 | 
			
		||||
        let actorClone = new St.Widget({ content: actorContent });
 | 
			
		||||
        actorClone.set_offscreen_redirect(Clutter.OffscreenRedirect.ALWAYS);
 | 
			
		||||
        actorClone.set_position(oldFrameRect.x, oldFrameRect.y);
 | 
			
		||||
        actorClone.set_size(oldFrameRect.width, oldFrameRect.height);
 | 
			
		||||
        Main.uiGroup.add_actor(actorClone);
 | 
			
		||||
 | 
			
		||||
        actor.__fullscreenClone = actorClone;
 | 
			
		||||
 | 
			
		||||
        let scaleX = targetRect.width / oldFrameRect.width;
 | 
			
		||||
        let scaleY = targetRect.height / oldFrameRect.height;
 | 
			
		||||
 | 
			
		||||
        // Now scale and fade out the clone
 | 
			
		||||
        Tweener.addTween(actorClone,
 | 
			
		||||
                         { x: targetRect.x,
 | 
			
		||||
                           y: targetRect.y,
 | 
			
		||||
                           scale_x: scaleX,
 | 
			
		||||
                           scale_y: scaleY,
 | 
			
		||||
                           opacity: 0,
 | 
			
		||||
                           time: WINDOW_ANIMATION_TIME,
 | 
			
		||||
                           transition: 'easeOutQuad'
 | 
			
		||||
                         });
 | 
			
		||||
 | 
			
		||||
        // Now set scale the actor to size it as the clone.
 | 
			
		||||
        // Note that the caller of this function already set a translation
 | 
			
		||||
        // on the actor.
 | 
			
		||||
        actor.scale_x = 1 / scaleX;
 | 
			
		||||
        actor.scale_y = 1 / scaleY;
 | 
			
		||||
 | 
			
		||||
        // Scale it to its actual new size
 | 
			
		||||
        Tweener.addTween(actor,
 | 
			
		||||
                         { scale_x: 1.0,
 | 
			
		||||
                           scale_y: 1.0,
 | 
			
		||||
                           translation_x: 0,
 | 
			
		||||
                           translation_y: 0,
 | 
			
		||||
                           time: WINDOW_ANIMATION_TIME,
 | 
			
		||||
                           transition: 'easeOutQuad',
 | 
			
		||||
                           onComplete: this._sizeChangeWindowDone,
 | 
			
		||||
                           onCompleteScope: this,
 | 
			
		||||
                           onCompleteParams: [shellwm, actor],
 | 
			
		||||
                           onOverwrite: this._sizeChangeWindowOverwritten,
 | 
			
		||||
                           onOverwriteScope: this,
 | 
			
		||||
                           onOverwriteParams: [shellwm, actor]
 | 
			
		||||
                         });
 | 
			
		||||
 | 
			
		||||
        // Now unfreeze actor updates, to get it to the new size.
 | 
			
		||||
        // It's important that we don't wait until the animation is completed to
 | 
			
		||||
        // do this, otherwise our scale will be applied to the old texture size.
 | 
			
		||||
        shellwm.completed_size_change(actor);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _sizeChangeWindowDone: function(shellwm, actor) {
 | 
			
		||||
        if (this._removeEffect(this._resizing, actor)) {
 | 
			
		||||
            Tweener.removeTweens(actor);
 | 
			
		||||
            actor.scale_x = 1.0;
 | 
			
		||||
            actor.scale_y = 1.0;
 | 
			
		||||
            actor.translation_x = 0;
 | 
			
		||||
            actor.translation_y = 0;
 | 
			
		||||
 | 
			
		||||
            let actorClone = actor.__fullscreenClone;
 | 
			
		||||
            if (actorClone) {
 | 
			
		||||
                actorClone.destroy();
 | 
			
		||||
                delete actor.__fullscreenClone;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _sizeChangeWindowOverwritten: function(shellwm, actor) {
 | 
			
		||||
        if (this._removeEffect(this._resizing, actor)) {
 | 
			
		||||
            let actorClone = actor.__fullscreenClone;
 | 
			
		||||
            if (actorClone) {
 | 
			
		||||
                actorClone.destroy();
 | 
			
		||||
                delete actor.__fullscreenClone;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _hasAttachedDialogs: function(window, ignoreWindow) {
 | 
			
		||||
        var count = 0;
 | 
			
		||||
        window.foreach_transient(function(win) {
 | 
			
		||||
 
 | 
			
		||||
@@ -214,7 +214,7 @@ const WindowMenuManager = new Lang.Class({
 | 
			
		||||
                menu.close();
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
        this._sourceActor.set_size(rect.width, rect.height);
 | 
			
		||||
        this._sourceActor.set_size(Math.max(1, rect.width), Math.max(1, rect.height));
 | 
			
		||||
        this._sourceActor.set_position(rect.x, rect.y);
 | 
			
		||||
        this._sourceActor.show();
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -361,6 +361,9 @@ const WindowClone = new Lang.Class({
 | 
			
		||||
        // a long-press canceled when the pointer movement
 | 
			
		||||
        // exceeds dnd-drag-threshold to manually start the drag
 | 
			
		||||
        if (state == Clutter.LongPressState.CANCEL) {
 | 
			
		||||
            let event = Clutter.get_current_event();
 | 
			
		||||
            this._dragTouchSequence = event.get_event_sequence();
 | 
			
		||||
 | 
			
		||||
            // A click cancels a long-press before any click handler is
 | 
			
		||||
            // run - make sure to not start a drag in that case
 | 
			
		||||
            Meta.later_add(Meta.LaterType.BEFORE_REDRAW, Lang.bind(this,
 | 
			
		||||
@@ -369,7 +372,7 @@ const WindowClone = new Lang.Class({
 | 
			
		||||
                        return;
 | 
			
		||||
                    let [x, y] = action.get_coords();
 | 
			
		||||
                    action.release();
 | 
			
		||||
                    this._draggable.startDrag(x, y, global.get_current_time());
 | 
			
		||||
                    this._draggable.startDrag(x, y, global.get_current_time(), this._dragTouchSequence);
 | 
			
		||||
                }));
 | 
			
		||||
        }
 | 
			
		||||
        return true;
 | 
			
		||||
 
 | 
			
		||||
@@ -80,6 +80,8 @@ const WindowClone = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
        this.actor.connect('button-release-event',
 | 
			
		||||
                           Lang.bind(this, this._onButtonRelease));
 | 
			
		||||
        this.actor.connect('touch-event',
 | 
			
		||||
                           Lang.bind(this, this._onTouchEvent));
 | 
			
		||||
 | 
			
		||||
        this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
 | 
			
		||||
 | 
			
		||||
@@ -200,6 +202,15 @@ const WindowClone = new Lang.Class({
 | 
			
		||||
        return Clutter.EVENT_STOP;
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _onTouchEvent : function (actor, event) {
 | 
			
		||||
        if (event.type() != Clutter.EventType.TOUCH_END ||
 | 
			
		||||
            !global.display.is_pointer_emulating_sequence(event.get_event_sequence()))
 | 
			
		||||
            return Clutter.EVENT_PROPAGATE;
 | 
			
		||||
 | 
			
		||||
        this.emit('selected', event.get_time());
 | 
			
		||||
        return Clutter.EVENT_STOP;
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _onDragBegin : function (draggable, time) {
 | 
			
		||||
        this.inDrag = true;
 | 
			
		||||
        this.emit('drag-begin');
 | 
			
		||||
@@ -642,6 +653,7 @@ const ThumbnailsBox = new Lang.Class({
 | 
			
		||||
 | 
			
		||||
        this.actor.connect('button-press-event', function() { return Clutter.EVENT_STOP; });
 | 
			
		||||
        this.actor.connect('button-release-event', Lang.bind(this, this._onButtonRelease));
 | 
			
		||||
        this.actor.connect('touch-event', Lang.bind(this, this._onTouchEvent));
 | 
			
		||||
 | 
			
		||||
        Main.overview.connect('showing',
 | 
			
		||||
                              Lang.bind(this, this._createThumbnails));
 | 
			
		||||
@@ -672,18 +684,31 @@ const ThumbnailsBox = new Lang.Class({
 | 
			
		||||
                global.screen.n_workspaces > 1;
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _onButtonRelease: function(actor, event) {
 | 
			
		||||
        let [stageX, stageY] = event.get_coords();
 | 
			
		||||
    _activateThumbnailAtPoint: function (stageX, stageY, time) {
 | 
			
		||||
        let [r, x, y] = this.actor.transform_stage_point(stageX, stageY);
 | 
			
		||||
 | 
			
		||||
        for (let i = 0; i < this._thumbnails.length; i++) {
 | 
			
		||||
            let thumbnail = this._thumbnails[i]
 | 
			
		||||
            let [w, h] = thumbnail.actor.get_transformed_size();
 | 
			
		||||
            if (y >= thumbnail.actor.y && y <= thumbnail.actor.y + h) {
 | 
			
		||||
                thumbnail.activate(event.get_time());
 | 
			
		||||
                thumbnail.activate(time);
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _onButtonRelease: function(actor, event) {
 | 
			
		||||
        let [stageX, stageY] = event.get_coords();
 | 
			
		||||
        this._activateThumbnailAtPoint(stageX, stageY, event.get_time());
 | 
			
		||||
        return Clutter.EVENT_STOP;
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _onTouchEvent: function (actor, event) {
 | 
			
		||||
        if (event.type() == Clutter.EventType.TOUCH_END &&
 | 
			
		||||
            global.display.is_pointer_emulating_sequence(event.get_event_sequence())) {
 | 
			
		||||
            let [stageX, stageY] = event.get_coords();
 | 
			
		||||
            this._activateThumbnailAtPoint(stageX, stageY, event.get_time());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return Clutter.EVENT_STOP;
 | 
			
		||||
    },
 | 
			
		||||
 
 | 
			
		||||
@@ -421,7 +421,7 @@ const WorkspacesDisplay = new Lang.Class({
 | 
			
		||||
            // Only switch to the workspace when there's no application
 | 
			
		||||
            // windows open. The problem is that it's too easy to miss
 | 
			
		||||
            // an app window and get the wrong one focused.
 | 
			
		||||
            if (action.get_button() == 1 &&
 | 
			
		||||
            if ((action.get_button() == 1 || action.get_button() == 0) &&
 | 
			
		||||
                this._getPrimaryView().getActiveWorkspace().isEmpty())
 | 
			
		||||
                Main.overview.hide();
 | 
			
		||||
        }));
 | 
			
		||||
 
 | 
			
		||||
@@ -140,7 +140,7 @@
 | 
			
		||||
 | 
			
		||||
                <para>
 | 
			
		||||
                        <filename>/usr/share/gnome-session/sessions/gnome.session</filename>,
 | 
			
		||||
                        <filename>/usr/share/applications/gnome-shell.desktop</filename>.</para>
 | 
			
		||||
                        <filename>/usr/share/applications/org.gnome.Shell.desktop</filename>.</para>
 | 
			
		||||
        </refsect1>
 | 
			
		||||
 | 
			
		||||
        <refsect1>
 | 
			
		||||
 
 | 
			
		||||
@@ -24,6 +24,7 @@ fi
 | 
			
		||||
fr
 | 
			
		||||
fur
 | 
			
		||||
ga
 | 
			
		||||
gd
 | 
			
		||||
gl
 | 
			
		||||
gu
 | 
			
		||||
he
 | 
			
		||||
 
 | 
			
		||||
@@ -2,9 +2,8 @@
 | 
			
		||||
# Please keep this file sorted alphabetically.
 | 
			
		||||
[encoding: UTF-8]
 | 
			
		||||
data/50-gnome-shell-system.xml.in
 | 
			
		||||
data/gnome-shell.desktop.in.in
 | 
			
		||||
data/gnome-shell-extension-prefs.desktop.in.in
 | 
			
		||||
data/gnome-shell-wayland.desktop.in.in
 | 
			
		||||
data/org.gnome.Shell.desktop.in.in
 | 
			
		||||
data/org.gnome.shell.gschema.xml.in.in
 | 
			
		||||
data/org.gnome.Shell.PortalHelper.desktop.in
 | 
			
		||||
js/extensionPrefs/main.js
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										194
									
								
								po/el.po
									
									
									
									
									
								
							
							
						
						
									
										194
									
								
								po/el.po
									
									
									
									
									
								
							@@ -7,8 +7,8 @@ msgstr ""
 | 
			
		||||
"Project-Id-Version: gnome-shell.po.master\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
 | 
			
		||||
"shell&keywords=I18N+L10N&component=general\n"
 | 
			
		||||
"POT-Creation-Date: 2015-08-28 20:12+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2015-08-29 01:20+0300\n"
 | 
			
		||||
"POT-Creation-Date: 2015-09-29 20:37+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2015-09-30 10:37+0300\n"
 | 
			
		||||
"Last-Translator: Tom Tryfonidis <tomtryf@gmail.com>\n"
 | 
			
		||||
"Language-Team: www.gnome.gr\n"
 | 
			
		||||
"Language: el\n"
 | 
			
		||||
@@ -332,7 +332,7 @@ msgid "Cancel"
 | 
			
		||||
msgstr "Ακύρωση"
 | 
			
		||||
 | 
			
		||||
#: ../js/gdm/authPrompt.js:169 ../js/gdm/authPrompt.js:215
 | 
			
		||||
#: ../js/gdm/authPrompt.js:435
 | 
			
		||||
#: ../js/gdm/authPrompt.js:447
 | 
			
		||||
msgid "Next"
 | 
			
		||||
msgstr "Επόμενο"
 | 
			
		||||
 | 
			
		||||
@@ -350,21 +350,29 @@ msgstr "Σύνδεση"
 | 
			
		||||
msgid "Choose Session"
 | 
			
		||||
msgstr "Επιλογή συνεδρίας"
 | 
			
		||||
 | 
			
		||||
#. translators: this message is shown below the user list on the
 | 
			
		||||
#. login screen. It can be activated to reveal an entry for
 | 
			
		||||
#. manually entering the username.
 | 
			
		||||
#: ../js/gdm/loginDialog.js:431
 | 
			
		||||
msgid "Not listed?"
 | 
			
		||||
msgstr "Δεν είστε στη λίστα;"
 | 
			
		||||
 | 
			
		||||
#: ../js/gdm/loginDialog.js:847
 | 
			
		||||
#. Translators: this message is shown below the username entry field
 | 
			
		||||
#. to clue the user in on how to login to the local network realm
 | 
			
		||||
#: ../js/gdm/loginDialog.js:850
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "(e.g., user or %s)"
 | 
			
		||||
msgstr "(π.χ, χρήστης ή %s)"
 | 
			
		||||
 | 
			
		||||
#: ../js/gdm/loginDialog.js:852 ../js/ui/components/networkAgent.js:271
 | 
			
		||||
#. TTLS and PEAP are actually much more complicated, but this complication
 | 
			
		||||
#. is not visible here since we only care about phase2 authentication
 | 
			
		||||
#. (and don't even care of which one)
 | 
			
		||||
#: ../js/gdm/loginDialog.js:855 ../js/ui/components/networkAgent.js:271
 | 
			
		||||
#: ../js/ui/components/networkAgent.js:289
 | 
			
		||||
msgid "Username: "
 | 
			
		||||
msgstr "Όνομα χρήστη: "
 | 
			
		||||
 | 
			
		||||
#: ../js/gdm/loginDialog.js:1181
 | 
			
		||||
#: ../js/gdm/loginDialog.js:1184
 | 
			
		||||
msgid "Login Window"
 | 
			
		||||
msgstr "Παράθυρο σύνδεσης"
 | 
			
		||||
 | 
			
		||||
@@ -372,6 +380,11 @@ msgstr "Παράθυρο σύνδεσης"
 | 
			
		||||
msgid "Authentication error"
 | 
			
		||||
msgstr "Σφάλμα πιστοποίησης"
 | 
			
		||||
 | 
			
		||||
#. We don't show fingerprint messages directly since it's
 | 
			
		||||
#. not the main auth service. Instead we use the messages
 | 
			
		||||
#. as a cue to display our own message.
 | 
			
		||||
#. Translators: this message is shown below the password entry field
 | 
			
		||||
#. to indicate the user can swipe their finger instead
 | 
			
		||||
#: ../js/gdm/util.js:473
 | 
			
		||||
msgid "(or swipe finger)"
 | 
			
		||||
msgstr "(ή περάστε το δάκτυλο σας)"
 | 
			
		||||
@@ -380,6 +393,8 @@ msgstr "(ή περάστε το δάκτυλο σας)"
 | 
			
		||||
msgid "Command not found"
 | 
			
		||||
msgstr "Δε βρέθηκε η εντολή"
 | 
			
		||||
 | 
			
		||||
#. Replace "Error invoking GLib.shell_parse_argv: " with
 | 
			
		||||
#. something nicer
 | 
			
		||||
#: ../js/misc/util.js:152
 | 
			
		||||
msgid "Could not parse command:"
 | 
			
		||||
msgstr "Δεν ήταν δυνατό να γίνει ανάλυση της εντολής:"
 | 
			
		||||
@@ -389,70 +404,78 @@ msgstr "Δεν ήταν δυνατό να γίνει ανάλυση της εν
 | 
			
		||||
msgid "Execution of “%s” failed:"
 | 
			
		||||
msgstr "Απέτυχε η εκτέλεση του “%s”:"
 | 
			
		||||
 | 
			
		||||
#. Translators: Time in 24h format */
 | 
			
		||||
#. Translators: Time in 24h format
 | 
			
		||||
#: ../js/misc/util.js:191
 | 
			
		||||
msgid "%H∶%M"
 | 
			
		||||
msgstr "%H∶%M"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is the word "Yesterday" followed by a
 | 
			
		||||
#. time string in 24h format. i.e. "Yesterday, 14:30" */
 | 
			
		||||
#. time string in 24h format. i.e. "Yesterday, 14:30"
 | 
			
		||||
#: ../js/misc/util.js:197
 | 
			
		||||
#, no-c-format
 | 
			
		||||
msgid "Yesterday, %H∶%M"
 | 
			
		||||
msgstr "Χθες, %H∶%M"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is the week day name followed by a time
 | 
			
		||||
#. string in 24h format. i.e. "Monday, 14:30" */
 | 
			
		||||
#. string in 24h format. i.e. "Monday, 14:30"
 | 
			
		||||
#: ../js/misc/util.js:203
 | 
			
		||||
#, no-c-format
 | 
			
		||||
msgid "%A, %H∶%M"
 | 
			
		||||
msgstr "%A, %H∶%M"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is the month name and day number
 | 
			
		||||
#. followed by a time string in 24h format.
 | 
			
		||||
#. i.e. "May 25, 14:30" */
 | 
			
		||||
#. i.e. "May 25, 14:30"
 | 
			
		||||
#: ../js/misc/util.js:209
 | 
			
		||||
#, no-c-format
 | 
			
		||||
msgid "%B %d, %H∶%M"
 | 
			
		||||
msgstr "%B %d, %H∶%M"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is the month name, day number, year
 | 
			
		||||
#. number followed by a time string in 24h format.
 | 
			
		||||
#. i.e. "May 25 2012, 14:30" */
 | 
			
		||||
#. i.e. "May 25 2012, 14:30"
 | 
			
		||||
#: ../js/misc/util.js:215
 | 
			
		||||
#, no-c-format
 | 
			
		||||
msgid "%B %d %Y, %H∶%M"
 | 
			
		||||
msgstr "%B %d %Y, %H∶%M"
 | 
			
		||||
 | 
			
		||||
#. Translators: Time in 12h format */
 | 
			
		||||
#. Translators: Time in 12h format
 | 
			
		||||
#: ../js/misc/util.js:220
 | 
			
		||||
msgid "%l∶%M %p"
 | 
			
		||||
msgstr "%l∶%M %p"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is the word "Yesterday" followed by a
 | 
			
		||||
#. time string in 12h format. i.e. "Yesterday, 2:30 pm" */
 | 
			
		||||
#. time string in 12h format. i.e. "Yesterday, 2:30 pm"
 | 
			
		||||
#: ../js/misc/util.js:226
 | 
			
		||||
#, no-c-format
 | 
			
		||||
msgid "Yesterday, %l∶%M %p"
 | 
			
		||||
msgstr "Χθες %l:%M %p"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is the week day name followed by a time
 | 
			
		||||
#. string in 12h format. i.e. "Monday, 2:30 pm" */
 | 
			
		||||
#. string in 12h format. i.e. "Monday, 2:30 pm"
 | 
			
		||||
#: ../js/misc/util.js:232
 | 
			
		||||
#, no-c-format
 | 
			
		||||
msgid "%A, %l∶%M %p"
 | 
			
		||||
msgstr "%A, %l∶%M %p"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is the month name and day number
 | 
			
		||||
#. followed by a time string in 12h format.
 | 
			
		||||
#. i.e. "May 25, 2:30 pm" */
 | 
			
		||||
#. i.e. "May 25, 2:30 pm"
 | 
			
		||||
#: ../js/misc/util.js:238
 | 
			
		||||
#, no-c-format
 | 
			
		||||
msgid "%B %d, %l∶%M %p"
 | 
			
		||||
msgstr "%B %d, %l∶%M %p"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is the month name, day number, year
 | 
			
		||||
#. number followed by a time string in 12h format.
 | 
			
		||||
#. i.e. "May 25 2012, 2:30 pm"*/
 | 
			
		||||
#. i.e. "May 25 2012, 2:30 pm"
 | 
			
		||||
#: ../js/misc/util.js:244
 | 
			
		||||
#, no-c-format
 | 
			
		||||
msgid "%B %d %Y, %l∶%M %p"
 | 
			
		||||
msgstr "%B %d %Y, %l∶%M %p"
 | 
			
		||||
 | 
			
		||||
#. TRANSLATORS: this is the title of the wifi captive portal login
 | 
			
		||||
#. * window, until we know the title of the actual login page */
 | 
			
		||||
#. * window, until we know the title of the actual login page
 | 
			
		||||
#: ../js/portalHelper/main.js:85
 | 
			
		||||
msgid "Web Authentication Redirect"
 | 
			
		||||
msgstr "Ανακατεύθυνση πιστοποίησης ιστού"
 | 
			
		||||
@@ -503,12 +526,11 @@ msgstr "Αλλαγή παρασκηνίου…"
 | 
			
		||||
msgid "Display Settings"
 | 
			
		||||
msgstr "Ρυθμίσεις οθόνης"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/backgroundMenu.js:22 ../js/ui/panel.js:650
 | 
			
		||||
#: ../js/ui/status/system.js:366
 | 
			
		||||
#: ../js/ui/backgroundMenu.js:22 ../js/ui/status/system.js:366
 | 
			
		||||
msgid "Settings"
 | 
			
		||||
msgstr "Ρυθμίσεις"
 | 
			
		||||
 | 
			
		||||
#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday). */
 | 
			
		||||
#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday).
 | 
			
		||||
#: ../js/ui/calendar.js:55
 | 
			
		||||
msgctxt "calendar-no-work"
 | 
			
		||||
msgid "06"
 | 
			
		||||
@@ -518,43 +540,43 @@ msgstr "06"
 | 
			
		||||
#. *
 | 
			
		||||
#. * NOTE: These grid abbreviations are always shown together
 | 
			
		||||
#. * and in order, e.g. "S M T W T F S".
 | 
			
		||||
#. */
 | 
			
		||||
#.
 | 
			
		||||
#: ../js/ui/calendar.js:84
 | 
			
		||||
msgctxt "grid sunday"
 | 
			
		||||
msgid "S"
 | 
			
		||||
msgstr "Κυ"
 | 
			
		||||
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Monday */
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Monday
 | 
			
		||||
#: ../js/ui/calendar.js:86
 | 
			
		||||
msgctxt "grid monday"
 | 
			
		||||
msgid "M"
 | 
			
		||||
msgstr "Δε"
 | 
			
		||||
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Tuesday */
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Tuesday
 | 
			
		||||
#: ../js/ui/calendar.js:88
 | 
			
		||||
msgctxt "grid tuesday"
 | 
			
		||||
msgid "T"
 | 
			
		||||
msgstr "Τρ"
 | 
			
		||||
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Wednesday */
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Wednesday
 | 
			
		||||
#: ../js/ui/calendar.js:90
 | 
			
		||||
msgctxt "grid wednesday"
 | 
			
		||||
msgid "W"
 | 
			
		||||
msgstr "Τε"
 | 
			
		||||
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Thursday */
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Thursday
 | 
			
		||||
#: ../js/ui/calendar.js:92
 | 
			
		||||
msgctxt "grid thursday"
 | 
			
		||||
msgid "T"
 | 
			
		||||
msgstr "Πε"
 | 
			
		||||
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Friday */
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Friday
 | 
			
		||||
#: ../js/ui/calendar.js:94
 | 
			
		||||
msgctxt "grid friday"
 | 
			
		||||
msgid "F"
 | 
			
		||||
msgstr "Πα"
 | 
			
		||||
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Saturday */
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Saturday
 | 
			
		||||
#: ../js/ui/calendar.js:96
 | 
			
		||||
msgctxt "grid saturday"
 | 
			
		||||
msgid "S"
 | 
			
		||||
@@ -574,39 +596,39 @@ msgstr "Εβδομάδα %V"
 | 
			
		||||
 | 
			
		||||
#. Translators: Shown in calendar event list for all day events
 | 
			
		||||
#. * Keep it short, best if you can use less then 10 characters
 | 
			
		||||
#. */
 | 
			
		||||
#.
 | 
			
		||||
#: ../js/ui/calendar.js:1188
 | 
			
		||||
msgctxt "event list time"
 | 
			
		||||
msgid "All Day"
 | 
			
		||||
msgstr "Όλη μέρα"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1291
 | 
			
		||||
#: ../js/ui/calendar.js:1295
 | 
			
		||||
msgid "Clear section"
 | 
			
		||||
msgstr "Εκκαθάριση περιοχής"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1518
 | 
			
		||||
#: ../js/ui/calendar.js:1522
 | 
			
		||||
msgid "Events"
 | 
			
		||||
msgstr "Συμβάντα"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1527
 | 
			
		||||
#: ../js/ui/calendar.js:1531
 | 
			
		||||
msgctxt "calendar heading"
 | 
			
		||||
msgid "%A, %B %d"
 | 
			
		||||
msgstr "%A, %B %d"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1531
 | 
			
		||||
#: ../js/ui/calendar.js:1535
 | 
			
		||||
msgctxt "calendar heading"
 | 
			
		||||
msgid "%A, %B %d, %Y"
 | 
			
		||||
msgstr "%A, %d %B, %Y"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1616
 | 
			
		||||
#: ../js/ui/calendar.js:1620
 | 
			
		||||
msgid "Notifications"
 | 
			
		||||
msgstr "Ειδοποιήσεις"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1767
 | 
			
		||||
#: ../js/ui/calendar.js:1771
 | 
			
		||||
msgid "No Notifications"
 | 
			
		||||
msgstr "Καμία ειδοποίηση"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1770
 | 
			
		||||
#: ../js/ui/calendar.js:1774
 | 
			
		||||
msgid "No Events"
 | 
			
		||||
msgstr "Κανένα συμβάν"
 | 
			
		||||
 | 
			
		||||
@@ -636,6 +658,7 @@ msgstr "Πληκτρολογήστε ξανά:"
 | 
			
		||||
msgid "Connect"
 | 
			
		||||
msgstr "Σύνδεση"
 | 
			
		||||
 | 
			
		||||
#. Cisco LEAP
 | 
			
		||||
#: ../js/ui/components/networkAgent.js:233
 | 
			
		||||
#: ../js/ui/components/networkAgent.js:245
 | 
			
		||||
#: ../js/ui/components/networkAgent.js:273
 | 
			
		||||
@@ -644,6 +667,7 @@ msgstr "Σύνδεση"
 | 
			
		||||
msgid "Password: "
 | 
			
		||||
msgstr "Κωδικός πρόσβασης: "
 | 
			
		||||
 | 
			
		||||
#. static WEP
 | 
			
		||||
#: ../js/ui/components/networkAgent.js:238
 | 
			
		||||
msgid "Key: "
 | 
			
		||||
msgstr "Κλειδί: "
 | 
			
		||||
@@ -735,13 +759,13 @@ msgstr "Πιστοποίηση"
 | 
			
		||||
#. Translators: "that didn't work" refers to the fact that the
 | 
			
		||||
#. * requested authentication was not gained; this can happen
 | 
			
		||||
#. * because of an authentication error (like invalid password),
 | 
			
		||||
#. * for instance. */
 | 
			
		||||
#. * for instance.
 | 
			
		||||
#: ../js/ui/components/polkitAgent.js:301 ../js/ui/shellMountOperation.js:383
 | 
			
		||||
msgid "Sorry, that didn't work. Please try again."
 | 
			
		||||
msgstr "Συγνώμη, αυτό δεν λειτούργησε. Παρακαλούμε προσπαθήστε ξανά."
 | 
			
		||||
 | 
			
		||||
#. Translators: this is the other person changing their old IM name to their new
 | 
			
		||||
#. IM name. */
 | 
			
		||||
#. IM name.
 | 
			
		||||
#: ../js/ui/components/telepathyClient.js:759
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s is now known as %s"
 | 
			
		||||
@@ -755,13 +779,15 @@ msgstr "Παράθυρα"
 | 
			
		||||
msgid "Show Applications"
 | 
			
		||||
msgstr "Εμφάνιση εφαρμογών"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is the name of the dock/favorites area on
 | 
			
		||||
#. the left of the overview
 | 
			
		||||
#: ../js/ui/dash.js:449
 | 
			
		||||
msgid "Dash"
 | 
			
		||||
msgstr "Ταμπλό"
 | 
			
		||||
 | 
			
		||||
#. Translators: This is the date format to use when the calendar popup is
 | 
			
		||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
 | 
			
		||||
#. */
 | 
			
		||||
#.
 | 
			
		||||
#: ../js/ui/dateMenu.js:73
 | 
			
		||||
msgid "%B %e %Y"
 | 
			
		||||
msgstr "%B %e %Y"
 | 
			
		||||
@@ -769,7 +795,7 @@ msgstr "%B %e %Y"
 | 
			
		||||
#. Translators: This is the accessible name of the date button shown
 | 
			
		||||
#. * below the time in the shell; it should combine the weekday and the
 | 
			
		||||
#. * date, e.g. "Tuesday February 17 2015".
 | 
			
		||||
#. */
 | 
			
		||||
#.
 | 
			
		||||
#: ../js/ui/dateMenu.js:80
 | 
			
		||||
msgid "%A %B %e %Y"
 | 
			
		||||
msgstr "%A %e %B %Y"
 | 
			
		||||
@@ -903,13 +929,13 @@ msgstr ""
 | 
			
		||||
msgid "Other users are logged in."
 | 
			
		||||
msgstr "Είναι συνδεδεμένοι άλλοι χρήστες."
 | 
			
		||||
 | 
			
		||||
#. Translators: Remote here refers to a remote session, like a ssh login */
 | 
			
		||||
#. Translators: Remote here refers to a remote session, like a ssh login
 | 
			
		||||
#: ../js/ui/endSessionDialog.js:640
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s (remote)"
 | 
			
		||||
msgstr "%s (απομακρυσμένο)"
 | 
			
		||||
 | 
			
		||||
#. Translators: Console here refers to a tty like a VT console */
 | 
			
		||||
#. Translators: Console here refers to a tty like a VT console
 | 
			
		||||
#: ../js/ui/endSessionDialog.js:643
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s (console)"
 | 
			
		||||
@@ -928,7 +954,7 @@ msgstr "Λήψη και εγκατάσταση του “%s” από το exten
 | 
			
		||||
msgid "Keyboard"
 | 
			
		||||
msgstr "Πληκτρολόγιο"
 | 
			
		||||
 | 
			
		||||
#. translators: 'Hide' is a verb */
 | 
			
		||||
#. translators: 'Hide' is a verb
 | 
			
		||||
#: ../js/ui/legacyTray.js:66
 | 
			
		||||
msgid "Hide tray"
 | 
			
		||||
msgstr "Απόκρυψη περιοχής ειδοποιήσεων"
 | 
			
		||||
@@ -941,7 +967,7 @@ msgstr "Εικονίδια κατάστασης"
 | 
			
		||||
msgid "No extensions installed"
 | 
			
		||||
msgstr "Δεν υπάρχουν εγκατεστημένες επεκτάσεις"
 | 
			
		||||
 | 
			
		||||
#. Translators: argument is an extension UUID. */
 | 
			
		||||
#. Translators: argument is an extension UUID.
 | 
			
		||||
#: ../js/ui/lookingGlass.js:697
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s has not emitted any errors."
 | 
			
		||||
@@ -961,7 +987,7 @@ msgstr "Ενεργοποιημένο"
 | 
			
		||||
 | 
			
		||||
#. translators:
 | 
			
		||||
#. * The device has been disabled
 | 
			
		||||
#: ../js/ui/lookingGlass.js:719 ../src/gvc/gvc-mixer-control.c:1830
 | 
			
		||||
#: ../js/ui/lookingGlass.js:719 ../src/gvc/gvc-mixer-control.c:1828
 | 
			
		||||
msgid "Disabled"
 | 
			
		||||
msgstr "Απενεργοποιημένο"
 | 
			
		||||
 | 
			
		||||
@@ -1000,7 +1026,7 @@ msgstr "Επισκόπηση"
 | 
			
		||||
#. Translators: this is the text displayed
 | 
			
		||||
#. in the search entry when no search is
 | 
			
		||||
#. active; it should not exceed ~30
 | 
			
		||||
#. characters. */
 | 
			
		||||
#. characters.
 | 
			
		||||
#: ../js/ui/overview.js:244
 | 
			
		||||
msgid "Type to search…"
 | 
			
		||||
msgstr "Πληκτρολογήστε για αναζήτηση…"
 | 
			
		||||
@@ -1010,15 +1036,25 @@ msgid "Quit"
 | 
			
		||||
msgstr "Έξοδος"
 | 
			
		||||
 | 
			
		||||
#. Translators: If there is no suitable word for "Activities"
 | 
			
		||||
#. in your language, you can use the word for "Overview". */
 | 
			
		||||
#. in your language, you can use the word for "Overview".
 | 
			
		||||
#: ../js/ui/panel.js:404
 | 
			
		||||
msgid "Activities"
 | 
			
		||||
msgstr "Δραστηριότητες"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/panel.js:650
 | 
			
		||||
msgctxt "System menu in the top bar"
 | 
			
		||||
msgid "System"
 | 
			
		||||
msgstr "Σύστημα"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/panel.js:754
 | 
			
		||||
msgid "Top Bar"
 | 
			
		||||
msgstr "Πάνω μπάρα"
 | 
			
		||||
 | 
			
		||||
#. Translators: this MUST be either "toggle-switch-us"
 | 
			
		||||
#. (for toggle switches containing the English words
 | 
			
		||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
 | 
			
		||||
#. switches containing "◯" and "|"). Other values will
 | 
			
		||||
#. simply result in invisible toggle switches.
 | 
			
		||||
#: ../js/ui/popupMenu.js:289
 | 
			
		||||
msgid "toggle-switch-us"
 | 
			
		||||
msgstr "toggle-switch-intl"
 | 
			
		||||
@@ -1036,7 +1072,7 @@ msgid "Restarting…"
 | 
			
		||||
msgstr "Επανεκκίνηση…"
 | 
			
		||||
 | 
			
		||||
#. Translators: This is a time format for a date in
 | 
			
		||||
#. long format */
 | 
			
		||||
#. long format
 | 
			
		||||
#: ../js/ui/screenShield.js:85
 | 
			
		||||
msgid "%A, %B %d"
 | 
			
		||||
msgstr "%A, %B %d"
 | 
			
		||||
@@ -1063,6 +1099,13 @@ msgstr "Κλείδωμα"
 | 
			
		||||
msgid "GNOME needs to lock the screen"
 | 
			
		||||
msgstr "Το GNOME χρειάζεται να κλειδώσει την οθόνη"
 | 
			
		||||
 | 
			
		||||
#. We could not become modal, so we can't activate the
 | 
			
		||||
#. screenshield. The user is probably very upset at this
 | 
			
		||||
#. point, but any application using global grabs is broken
 | 
			
		||||
#. Just tell him to stop using this app
 | 
			
		||||
#.
 | 
			
		||||
#. XXX: another option is to kick the user into the gdm login
 | 
			
		||||
#. screen, where we're not affected by grabs
 | 
			
		||||
#: ../js/ui/screenShield.js:805 ../js/ui/screenShield.js:1271
 | 
			
		||||
msgid "Unable to lock"
 | 
			
		||||
msgstr "Αδυναμία κλειδώματος"
 | 
			
		||||
@@ -1158,7 +1201,7 @@ msgstr "Σβήσιμο"
 | 
			
		||||
msgid "Bluetooth Settings"
 | 
			
		||||
msgstr "Ρυθμίσεις Bluetooth"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is the number of connected bluetooth devices */
 | 
			
		||||
#. Translators: this is the number of connected bluetooth devices
 | 
			
		||||
#: ../js/ui/status/bluetooth.js:105
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%d Connected"
 | 
			
		||||
@@ -1206,59 +1249,59 @@ msgstr "Ενεργοποίηση"
 | 
			
		||||
msgid "<unknown>"
 | 
			
		||||
msgstr "<άγνωστο>"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a network identifier */
 | 
			
		||||
#. Translators: %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:451 ../js/ui/status/network.js:1308
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Off"
 | 
			
		||||
msgstr "Απενεργοποιημένο %s"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a network identifier */
 | 
			
		||||
#. Translators: %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:454
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Connected"
 | 
			
		||||
msgstr "Συνδέθηκε το %s"
 | 
			
		||||
msgstr "%s συνδεδεμένο"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is for network devices that are physically present but are not
 | 
			
		||||
#. under NetworkManager's control (and thus cannot be used in the menu);
 | 
			
		||||
#. %s is a network identifier */
 | 
			
		||||
#. %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:459
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Unmanaged"
 | 
			
		||||
msgstr "Χωρίς διαχείριση %s"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a network identifier */
 | 
			
		||||
#. Translators: %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:462
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Disconnecting"
 | 
			
		||||
msgstr "Γίνεται αποσύνδεση %s"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a network identifier */
 | 
			
		||||
#. Translators: %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:469 ../js/ui/status/network.js:1300
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Connecting"
 | 
			
		||||
msgstr "Γίνεται σύνδεση %s"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is for network connections that require some kind of key or password; %s is a network identifier */
 | 
			
		||||
#. Translators: this is for network connections that require some kind of key or password; %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:472
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Requires Authentication"
 | 
			
		||||
msgstr "Το %s απαιτεί πιστοποίηση"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is for devices that require some kind of firmware or kernel
 | 
			
		||||
#. module, which is missing; %s is a network identifier */
 | 
			
		||||
#. module, which is missing; %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:480
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "Firmware Missing For %s"
 | 
			
		||||
msgstr "Λείπει υλικολογισμικό για το %s"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is for a network device that cannot be activated (for example it
 | 
			
		||||
#. is disabled by rfkill, or it has no coverage; %s is a network identifier */
 | 
			
		||||
#. is disabled by rfkill, or it has no coverage; %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:484
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Unavailable"
 | 
			
		||||
msgstr "Το %s δεν είναι διαθέσιμο"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a network identifier */
 | 
			
		||||
#. Translators: %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:487
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Connection Failed"
 | 
			
		||||
@@ -1272,14 +1315,14 @@ msgstr "Ενσύρματες ρυθμίσεις"
 | 
			
		||||
msgid "Mobile Broadband Settings"
 | 
			
		||||
msgstr "Ρυθμίσεις ευρυζωνικής σύνδεσης"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a network identifier */
 | 
			
		||||
#. Translators: %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:588 ../js/ui/status/network.js:1305
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Hardware Disabled"
 | 
			
		||||
msgstr "Το υλικό απενεργοποιήθηκε για το %s"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is for a network device that cannot be activated
 | 
			
		||||
#. because it's disabled by rfkill (airplane mode); %s is a network identifier */
 | 
			
		||||
#. because it's disabled by rfkill (airplane mode); %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:592
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Disabled"
 | 
			
		||||
@@ -1342,13 +1385,13 @@ msgstr "Ρυθμίσεις Wi-Fi"
 | 
			
		||||
msgid "Turn On"
 | 
			
		||||
msgstr "Ενεργοποίηση"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a network identifier */
 | 
			
		||||
#. Translators: %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:1296
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Hotspot Active"
 | 
			
		||||
msgstr "Ενεργό σημείο πρόσβασης %s"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a network identifier */
 | 
			
		||||
#. Translators: %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:1311
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Not Connected"
 | 
			
		||||
@@ -1358,7 +1401,7 @@ msgstr "Χωρίς σύνδεση το %s"
 | 
			
		||||
msgid "connecting..."
 | 
			
		||||
msgstr "σύνδεση..."
 | 
			
		||||
 | 
			
		||||
#. Translators: this is for network connections that require some kind of key or password */
 | 
			
		||||
#. Translators: this is for network connections that require some kind of key or password
 | 
			
		||||
#: ../js/ui/status/network.js:1414
 | 
			
		||||
msgid "authentication required"
 | 
			
		||||
msgstr "απαιτείται πιστοποίηση"
 | 
			
		||||
@@ -1399,20 +1442,27 @@ msgstr "Ρυθμίσεις τροφοδοσίας"
 | 
			
		||||
msgid "Fully Charged"
 | 
			
		||||
msgstr "Πλήρως φορτισμένη"
 | 
			
		||||
 | 
			
		||||
#. 0 is reported when UPower does not have enough data
 | 
			
		||||
#. to estimate battery life
 | 
			
		||||
#: ../js/ui/status/power.js:72 ../js/ui/status/power.js:78
 | 
			
		||||
msgid "Estimating…"
 | 
			
		||||
msgstr "Εκτίμηση…"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is <hours>:<minutes> Remaining (<percentage>)
 | 
			
		||||
#: ../js/ui/status/power.js:86
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%d∶%02d Remaining (%d%%)"
 | 
			
		||||
msgstr "%d∶%02d Απομένει (%d%%)"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is <hours>:<minutes> Until Full (<percentage>)
 | 
			
		||||
#: ../js/ui/status/power.js:91
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%d∶%02d Until Full (%d%%)"
 | 
			
		||||
msgstr "%d∶%02d Πλήρης μέχρι (%d%%)"
 | 
			
		||||
 | 
			
		||||
#. The menu only appears when airplane mode is on, so just
 | 
			
		||||
#. statically build it as if it was on, rather than dynamically
 | 
			
		||||
#. changing the menu contents.
 | 
			
		||||
#: ../js/ui/status/rfkill.js:88
 | 
			
		||||
msgid "Airplane Mode On"
 | 
			
		||||
msgstr "Λειτουργία αεροπλάνου ενεργή"
 | 
			
		||||
@@ -1480,7 +1530,7 @@ msgstr "Θέλετε να κρατήσετε αυτές τις ρυθμίσει
 | 
			
		||||
 | 
			
		||||
#. Translators: this and the following message should be limited in lenght,
 | 
			
		||||
#. to avoid ellipsizing the labels.
 | 
			
		||||
#. */
 | 
			
		||||
#.
 | 
			
		||||
#: ../js/ui/windowManager.js:82
 | 
			
		||||
msgid "Revert Settings"
 | 
			
		||||
msgstr "Επαναφορά ρυθμίσεων"
 | 
			
		||||
@@ -1497,7 +1547,7 @@ msgstr[0] "Οι αλλαγές ρυθμίσεων θα επανέλθουν σε
 | 
			
		||||
msgstr[1] "Οι αλλαγές ρυθμίσεων θα επανέλθουν σε %d δευτερόλεπτα"
 | 
			
		||||
 | 
			
		||||
#. Translators: This represents the size of a window. The first number is
 | 
			
		||||
#. * the width of the window and the second is the height. */
 | 
			
		||||
#. * the width of the window and the second is the height.
 | 
			
		||||
#: ../js/ui/windowManager.js:658
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%d x %d"
 | 
			
		||||
@@ -1573,7 +1623,7 @@ msgstr "Ημερολόγιο Evolution"
 | 
			
		||||
 | 
			
		||||
#. translators:
 | 
			
		||||
#. * The number of sound outputs on a particular device
 | 
			
		||||
#: ../src/gvc/gvc-mixer-control.c:1837
 | 
			
		||||
#: ../src/gvc/gvc-mixer-control.c:1835
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%u Output"
 | 
			
		||||
msgid_plural "%u Outputs"
 | 
			
		||||
@@ -1582,31 +1632,31 @@ msgstr[1] "%u έξοδοι"
 | 
			
		||||
 | 
			
		||||
#. translators:
 | 
			
		||||
#. * The number of sound inputs on a particular device
 | 
			
		||||
#: ../src/gvc/gvc-mixer-control.c:1847
 | 
			
		||||
#: ../src/gvc/gvc-mixer-control.c:1845
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%u Input"
 | 
			
		||||
msgid_plural "%u Inputs"
 | 
			
		||||
msgstr[0] "%u είσοδος"
 | 
			
		||||
msgstr[1] "%u είσοδοι"
 | 
			
		||||
 | 
			
		||||
#: ../src/gvc/gvc-mixer-control.c:2373
 | 
			
		||||
#: ../src/gvc/gvc-mixer-control.c:2371
 | 
			
		||||
msgid "System Sounds"
 | 
			
		||||
msgstr "Ήχοι συστήματος"
 | 
			
		||||
 | 
			
		||||
#: ../src/main.c:373
 | 
			
		||||
#: ../src/main.c:381
 | 
			
		||||
msgid "Print version"
 | 
			
		||||
msgstr "Εμφάνιση έκδοσης"
 | 
			
		||||
 | 
			
		||||
#: ../src/main.c:379
 | 
			
		||||
#: ../src/main.c:387
 | 
			
		||||
msgid "Mode used by GDM for login screen"
 | 
			
		||||
msgstr "Λειτουργία που χρησιμοποιείται από το GDM για την οθόνη σύνδεσης"
 | 
			
		||||
 | 
			
		||||
#: ../src/main.c:385
 | 
			
		||||
#: ../src/main.c:393
 | 
			
		||||
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Χρήση μιας συγκεκριμένης λειτουργίας, π.χ. \"gdm\" για την οθόνη σύνδεσης"
 | 
			
		||||
 | 
			
		||||
#: ../src/main.c:391
 | 
			
		||||
#: ../src/main.c:399
 | 
			
		||||
msgid "List possible modes"
 | 
			
		||||
msgstr "Λίστα πιθανών λειτουργιών"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										190
									
								
								po/fr.po
									
									
									
									
									
								
							
							
						
						
									
										190
									
								
								po/fr.po
									
									
									
									
									
								
							@@ -19,8 +19,8 @@ msgstr ""
 | 
			
		||||
"Project-Id-Version: gnome-shell master fr\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
 | 
			
		||||
"shell&keywords=I18N+L10N&component=general\n"
 | 
			
		||||
"POT-Creation-Date: 2015-08-31 19:25+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2015-09-01 11:03+0200\n"
 | 
			
		||||
"POT-Creation-Date: 2015-09-28 20:46+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2015-09-28 23:39+0200\n"
 | 
			
		||||
"Last-Translator: Alexandre Franke <alexandre.franke@gmail.com>\n"
 | 
			
		||||
"Language-Team: français <gnomefr@traduc.org>\n"
 | 
			
		||||
"Language: French\n"
 | 
			
		||||
@@ -362,21 +362,29 @@ msgstr "Se connecter"
 | 
			
		||||
msgid "Choose Session"
 | 
			
		||||
msgstr "Choisir une session"
 | 
			
		||||
 | 
			
		||||
#. translators: this message is shown below the user list on the
 | 
			
		||||
#. login screen. It can be activated to reveal an entry for
 | 
			
		||||
#. manually entering the username.
 | 
			
		||||
#: ../js/gdm/loginDialog.js:431
 | 
			
		||||
msgid "Not listed?"
 | 
			
		||||
msgstr "Absent de la liste ?"
 | 
			
		||||
 | 
			
		||||
#: ../js/gdm/loginDialog.js:847
 | 
			
		||||
#. Translators: this message is shown below the username entry field
 | 
			
		||||
#. to clue the user in on how to login to the local network realm
 | 
			
		||||
#: ../js/gdm/loginDialog.js:850
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "(e.g., user or %s)"
 | 
			
		||||
msgstr "(par ex. utilisateur ou %s)"
 | 
			
		||||
 | 
			
		||||
#: ../js/gdm/loginDialog.js:852 ../js/ui/components/networkAgent.js:271
 | 
			
		||||
#. TTLS and PEAP are actually much more complicated, but this complication
 | 
			
		||||
#. is not visible here since we only care about phase2 authentication
 | 
			
		||||
#. (and don't even care of which one)
 | 
			
		||||
#: ../js/gdm/loginDialog.js:855 ../js/ui/components/networkAgent.js:271
 | 
			
		||||
#: ../js/ui/components/networkAgent.js:289
 | 
			
		||||
msgid "Username: "
 | 
			
		||||
msgstr "Nom d'utilisateur : "
 | 
			
		||||
 | 
			
		||||
#: ../js/gdm/loginDialog.js:1181
 | 
			
		||||
#: ../js/gdm/loginDialog.js:1184
 | 
			
		||||
msgid "Login Window"
 | 
			
		||||
msgstr "Fenêtre de connexion"
 | 
			
		||||
 | 
			
		||||
@@ -384,6 +392,11 @@ msgstr "Fenêtre de connexion"
 | 
			
		||||
msgid "Authentication error"
 | 
			
		||||
msgstr "Erreur d'authentification"
 | 
			
		||||
 | 
			
		||||
#. We don't show fingerprint messages directly since it's
 | 
			
		||||
#. not the main auth service. Instead we use the messages
 | 
			
		||||
#. as a cue to display our own message.
 | 
			
		||||
#. Translators: this message is shown below the password entry field
 | 
			
		||||
#. to indicate the user can swipe their finger instead
 | 
			
		||||
#: ../js/gdm/util.js:473
 | 
			
		||||
msgid "(or swipe finger)"
 | 
			
		||||
msgstr "(ou faites glisser le doigt)"
 | 
			
		||||
@@ -392,6 +405,8 @@ msgstr "(ou faites glisser le doigt)"
 | 
			
		||||
msgid "Command not found"
 | 
			
		||||
msgstr "Commande non trouvée"
 | 
			
		||||
 | 
			
		||||
#. Replace "Error invoking GLib.shell_parse_argv: " with
 | 
			
		||||
#. something nicer
 | 
			
		||||
#: ../js/misc/util.js:152
 | 
			
		||||
msgid "Could not parse command:"
 | 
			
		||||
msgstr "Impossible d'analyser la commande :"
 | 
			
		||||
@@ -401,70 +416,78 @@ msgstr "Impossible d'analyser la commande :"
 | 
			
		||||
msgid "Execution of “%s” failed:"
 | 
			
		||||
msgstr "Exécution de « %s » impossible :"
 | 
			
		||||
 | 
			
		||||
#. Translators: Time in 24h format */
 | 
			
		||||
#. Translators: Time in 24h format
 | 
			
		||||
#: ../js/misc/util.js:191
 | 
			
		||||
msgid "%H∶%M"
 | 
			
		||||
msgstr "%H∶%M"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is the word "Yesterday" followed by a
 | 
			
		||||
#. time string in 24h format. i.e. "Yesterday, 14:30" */
 | 
			
		||||
#. time string in 24h format. i.e. "Yesterday, 14:30"
 | 
			
		||||
#: ../js/misc/util.js:197
 | 
			
		||||
#, no-c-format
 | 
			
		||||
msgid "Yesterday, %H∶%M"
 | 
			
		||||
msgstr "Hier, %H∶%M"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is the week day name followed by a time
 | 
			
		||||
#. string in 24h format. i.e. "Monday, 14:30" */
 | 
			
		||||
#. string in 24h format. i.e. "Monday, 14:30"
 | 
			
		||||
#: ../js/misc/util.js:203
 | 
			
		||||
#, no-c-format
 | 
			
		||||
msgid "%A, %H∶%M"
 | 
			
		||||
msgstr "%A, %H∶%M"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is the month name and day number
 | 
			
		||||
#. followed by a time string in 24h format.
 | 
			
		||||
#. i.e. "May 25, 14:30" */
 | 
			
		||||
#. i.e. "May 25, 14:30"
 | 
			
		||||
#: ../js/misc/util.js:209
 | 
			
		||||
#, no-c-format
 | 
			
		||||
msgid "%B %d, %H∶%M"
 | 
			
		||||
msgstr "%d %B, %H∶%M"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is the month name, day number, year
 | 
			
		||||
#. number followed by a time string in 24h format.
 | 
			
		||||
#. i.e. "May 25 2012, 14:30" */
 | 
			
		||||
#. i.e. "May 25 2012, 14:30"
 | 
			
		||||
#: ../js/misc/util.js:215
 | 
			
		||||
#, no-c-format
 | 
			
		||||
msgid "%B %d %Y, %H∶%M"
 | 
			
		||||
msgstr "%d %B %Y, %H∶%M"
 | 
			
		||||
 | 
			
		||||
#. Translators: Time in 12h format */
 | 
			
		||||
#. Translators: Time in 12h format
 | 
			
		||||
#: ../js/misc/util.js:220
 | 
			
		||||
msgid "%l∶%M %p"
 | 
			
		||||
msgstr "%l∶%M %p"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is the word "Yesterday" followed by a
 | 
			
		||||
#. time string in 12h format. i.e. "Yesterday, 2:30 pm" */
 | 
			
		||||
#. time string in 12h format. i.e. "Yesterday, 2:30 pm"
 | 
			
		||||
#: ../js/misc/util.js:226
 | 
			
		||||
#, no-c-format
 | 
			
		||||
msgid "Yesterday, %l∶%M %p"
 | 
			
		||||
msgstr "Hier, %l∶%M %p"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is the week day name followed by a time
 | 
			
		||||
#. string in 12h format. i.e. "Monday, 2:30 pm" */
 | 
			
		||||
#. string in 12h format. i.e. "Monday, 2:30 pm"
 | 
			
		||||
#: ../js/misc/util.js:232
 | 
			
		||||
#, no-c-format
 | 
			
		||||
msgid "%A, %l∶%M %p"
 | 
			
		||||
msgstr "%A, %l∶%M %p"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is the month name and day number
 | 
			
		||||
#. followed by a time string in 12h format.
 | 
			
		||||
#. i.e. "May 25, 2:30 pm" */
 | 
			
		||||
#. i.e. "May 25, 2:30 pm"
 | 
			
		||||
#: ../js/misc/util.js:238
 | 
			
		||||
#, no-c-format
 | 
			
		||||
msgid "%B %d, %l∶%M %p"
 | 
			
		||||
msgstr "%d %B, %l∶%M %p"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is the month name, day number, year
 | 
			
		||||
#. number followed by a time string in 12h format.
 | 
			
		||||
#. i.e. "May 25 2012, 2:30 pm"*/
 | 
			
		||||
#. i.e. "May 25 2012, 2:30 pm"
 | 
			
		||||
#: ../js/misc/util.js:244
 | 
			
		||||
#, no-c-format
 | 
			
		||||
msgid "%B %d %Y, %l∶%M %p"
 | 
			
		||||
msgstr "%d %B %Y, %l∶%M %p"
 | 
			
		||||
 | 
			
		||||
#. TRANSLATORS: this is the title of the wifi captive portal login
 | 
			
		||||
#. * window, until we know the title of the actual login page */
 | 
			
		||||
#. * window, until we know the title of the actual login page
 | 
			
		||||
#: ../js/portalHelper/main.js:85
 | 
			
		||||
msgid "Web Authentication Redirect"
 | 
			
		||||
msgstr "Redirection de l'authentification Web"
 | 
			
		||||
@@ -515,12 +538,11 @@ msgstr "Modifier l'arrière-plan…"
 | 
			
		||||
msgid "Display Settings"
 | 
			
		||||
msgstr "Paramètres d'affichage"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/backgroundMenu.js:22 ../js/ui/panel.js:650
 | 
			
		||||
#: ../js/ui/status/system.js:366
 | 
			
		||||
#: ../js/ui/backgroundMenu.js:22 ../js/ui/status/system.js:366
 | 
			
		||||
msgid "Settings"
 | 
			
		||||
msgstr "Paramètres"
 | 
			
		||||
 | 
			
		||||
#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday). */
 | 
			
		||||
#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday).
 | 
			
		||||
#: ../js/ui/calendar.js:55
 | 
			
		||||
msgctxt "calendar-no-work"
 | 
			
		||||
msgid "06"
 | 
			
		||||
@@ -530,43 +552,43 @@ msgstr "06"
 | 
			
		||||
#. *
 | 
			
		||||
#. * NOTE: These grid abbreviations are always shown together
 | 
			
		||||
#. * and in order, e.g. "S M T W T F S".
 | 
			
		||||
#. */
 | 
			
		||||
#.
 | 
			
		||||
#: ../js/ui/calendar.js:84
 | 
			
		||||
msgctxt "grid sunday"
 | 
			
		||||
msgid "S"
 | 
			
		||||
msgstr "D"
 | 
			
		||||
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Monday */
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Monday
 | 
			
		||||
#: ../js/ui/calendar.js:86
 | 
			
		||||
msgctxt "grid monday"
 | 
			
		||||
msgid "M"
 | 
			
		||||
msgstr "L"
 | 
			
		||||
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Tuesday */
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Tuesday
 | 
			
		||||
#: ../js/ui/calendar.js:88
 | 
			
		||||
msgctxt "grid tuesday"
 | 
			
		||||
msgid "T"
 | 
			
		||||
msgstr "M"
 | 
			
		||||
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Wednesday */
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Wednesday
 | 
			
		||||
#: ../js/ui/calendar.js:90
 | 
			
		||||
msgctxt "grid wednesday"
 | 
			
		||||
msgid "W"
 | 
			
		||||
msgstr "M"
 | 
			
		||||
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Thursday */
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Thursday
 | 
			
		||||
#: ../js/ui/calendar.js:92
 | 
			
		||||
msgctxt "grid thursday"
 | 
			
		||||
msgid "T"
 | 
			
		||||
msgstr "J"
 | 
			
		||||
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Friday */
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Friday
 | 
			
		||||
#: ../js/ui/calendar.js:94
 | 
			
		||||
msgctxt "grid friday"
 | 
			
		||||
msgid "F"
 | 
			
		||||
msgstr "V"
 | 
			
		||||
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Saturday */
 | 
			
		||||
#. Translators: Calendar grid abbreviation for Saturday
 | 
			
		||||
#: ../js/ui/calendar.js:96
 | 
			
		||||
msgctxt "grid saturday"
 | 
			
		||||
msgid "S"
 | 
			
		||||
@@ -601,39 +623,39 @@ msgstr "Semaine %V"
 | 
			
		||||
#
 | 
			
		||||
#. Translators: Shown in calendar event list for all day events
 | 
			
		||||
#. * Keep it short, best if you can use less then 10 characters
 | 
			
		||||
#. */
 | 
			
		||||
#.
 | 
			
		||||
#: ../js/ui/calendar.js:1188
 | 
			
		||||
msgctxt "event list time"
 | 
			
		||||
msgid "All Day"
 | 
			
		||||
msgstr "Journée"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1291
 | 
			
		||||
#: ../js/ui/calendar.js:1295
 | 
			
		||||
msgid "Clear section"
 | 
			
		||||
msgstr "Effacer la section"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1518
 | 
			
		||||
#: ../js/ui/calendar.js:1522
 | 
			
		||||
msgid "Events"
 | 
			
		||||
msgstr "Évènements"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1527
 | 
			
		||||
#: ../js/ui/calendar.js:1531
 | 
			
		||||
msgctxt "calendar heading"
 | 
			
		||||
msgid "%A, %B %d"
 | 
			
		||||
msgstr "%A %d %B"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1531
 | 
			
		||||
#: ../js/ui/calendar.js:1535
 | 
			
		||||
msgctxt "calendar heading"
 | 
			
		||||
msgid "%A, %B %d, %Y"
 | 
			
		||||
msgstr "%A %d %B, %Y"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1616
 | 
			
		||||
#: ../js/ui/calendar.js:1620
 | 
			
		||||
msgid "Notifications"
 | 
			
		||||
msgstr "Notifications"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1767
 | 
			
		||||
#: ../js/ui/calendar.js:1771
 | 
			
		||||
msgid "No Notifications"
 | 
			
		||||
msgstr "Aucune notification"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1770
 | 
			
		||||
#: ../js/ui/calendar.js:1774
 | 
			
		||||
msgid "No Events"
 | 
			
		||||
msgstr "Aucun évènement"
 | 
			
		||||
 | 
			
		||||
@@ -663,6 +685,7 @@ msgstr "Saisissez à nouveau :"
 | 
			
		||||
msgid "Connect"
 | 
			
		||||
msgstr "Se connecter"
 | 
			
		||||
 | 
			
		||||
#. Cisco LEAP
 | 
			
		||||
#: ../js/ui/components/networkAgent.js:233
 | 
			
		||||
#: ../js/ui/components/networkAgent.js:245
 | 
			
		||||
#: ../js/ui/components/networkAgent.js:273
 | 
			
		||||
@@ -671,6 +694,7 @@ msgstr "Se connecter"
 | 
			
		||||
msgid "Password: "
 | 
			
		||||
msgstr "Mot de passe : "
 | 
			
		||||
 | 
			
		||||
#. static WEP
 | 
			
		||||
#: ../js/ui/components/networkAgent.js:238
 | 
			
		||||
msgid "Key: "
 | 
			
		||||
msgstr "Clé : "
 | 
			
		||||
@@ -762,13 +786,13 @@ msgstr "S'authentifier"
 | 
			
		||||
#. Translators: "that didn't work" refers to the fact that the
 | 
			
		||||
#. * requested authentication was not gained; this can happen
 | 
			
		||||
#. * because of an authentication error (like invalid password),
 | 
			
		||||
#. * for instance. */
 | 
			
		||||
#. * for instance.
 | 
			
		||||
#: ../js/ui/components/polkitAgent.js:301 ../js/ui/shellMountOperation.js:383
 | 
			
		||||
msgid "Sorry, that didn't work. Please try again."
 | 
			
		||||
msgstr "Échec de l'authentification. Essayez à nouveau."
 | 
			
		||||
 | 
			
		||||
#. Translators: this is the other person changing their old IM name to their new
 | 
			
		||||
#. IM name. */
 | 
			
		||||
#. IM name.
 | 
			
		||||
#: ../js/ui/components/telepathyClient.js:759
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s is now known as %s"
 | 
			
		||||
@@ -782,6 +806,8 @@ msgstr "Fenêtres"
 | 
			
		||||
msgid "Show Applications"
 | 
			
		||||
msgstr "Afficher les applications"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is the name of the dock/favorites area on
 | 
			
		||||
#. the left of the overview
 | 
			
		||||
#: ../js/ui/dash.js:449
 | 
			
		||||
msgid "Dash"
 | 
			
		||||
msgstr "Dash"
 | 
			
		||||
@@ -794,7 +820,7 @@ msgstr "Dash"
 | 
			
		||||
#                                                L  M  M  J  V  S  D
 | 
			
		||||
#. Translators: This is the date format to use when the calendar popup is
 | 
			
		||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
 | 
			
		||||
#. */
 | 
			
		||||
#.
 | 
			
		||||
#: ../js/ui/dateMenu.js:73
 | 
			
		||||
msgid "%B %e %Y"
 | 
			
		||||
msgstr "%-e %B %Y"
 | 
			
		||||
@@ -808,7 +834,7 @@ msgstr "%-e %B %Y"
 | 
			
		||||
#. Translators: This is the accessible name of the date button shown
 | 
			
		||||
#. * below the time in the shell; it should combine the weekday and the
 | 
			
		||||
#. * date, e.g. "Tuesday February 17 2015".
 | 
			
		||||
#. */
 | 
			
		||||
#.
 | 
			
		||||
#: ../js/ui/dateMenu.js:80
 | 
			
		||||
msgid "%A %B %e %Y"
 | 
			
		||||
msgstr "%A %e %B %Y"
 | 
			
		||||
@@ -938,13 +964,13 @@ msgstr ""
 | 
			
		||||
msgid "Other users are logged in."
 | 
			
		||||
msgstr "D'autres utilisateurs sont connectés."
 | 
			
		||||
 | 
			
		||||
#. Translators: Remote here refers to a remote session, like a ssh login */
 | 
			
		||||
#. Translators: Remote here refers to a remote session, like a ssh login
 | 
			
		||||
#: ../js/ui/endSessionDialog.js:640
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s (remote)"
 | 
			
		||||
msgstr "%s (distant)"
 | 
			
		||||
 | 
			
		||||
#. Translators: Console here refers to a tty like a VT console */
 | 
			
		||||
#. Translators: Console here refers to a tty like a VT console
 | 
			
		||||
#: ../js/ui/endSessionDialog.js:643
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s (console)"
 | 
			
		||||
@@ -963,7 +989,7 @@ msgstr "Télécharger et installer « %s » à partir de extensions.gnome.org
 | 
			
		||||
msgid "Keyboard"
 | 
			
		||||
msgstr "Clavier"
 | 
			
		||||
 | 
			
		||||
#. translators: 'Hide' is a verb */
 | 
			
		||||
#. translators: 'Hide' is a verb
 | 
			
		||||
#: ../js/ui/legacyTray.js:66
 | 
			
		||||
msgid "Hide tray"
 | 
			
		||||
msgstr "Masquer le tiroir"
 | 
			
		||||
@@ -976,7 +1002,7 @@ msgstr "Icônes d'état"
 | 
			
		||||
msgid "No extensions installed"
 | 
			
		||||
msgstr "Aucune extension installée"
 | 
			
		||||
 | 
			
		||||
#. Translators: argument is an extension UUID. */
 | 
			
		||||
#. Translators: argument is an extension UUID.
 | 
			
		||||
#: ../js/ui/lookingGlass.js:697
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s has not emitted any errors."
 | 
			
		||||
@@ -996,7 +1022,7 @@ msgstr "Activé"
 | 
			
		||||
 | 
			
		||||
#. translators:
 | 
			
		||||
#. * The device has been disabled
 | 
			
		||||
#: ../js/ui/lookingGlass.js:719 ../src/gvc/gvc-mixer-control.c:1830
 | 
			
		||||
#: ../js/ui/lookingGlass.js:719 ../src/gvc/gvc-mixer-control.c:1828
 | 
			
		||||
msgid "Disabled"
 | 
			
		||||
msgstr "Désactivé"
 | 
			
		||||
 | 
			
		||||
@@ -1035,7 +1061,7 @@ msgstr "Vue d'ensemble"
 | 
			
		||||
#. Translators: this is the text displayed
 | 
			
		||||
#. in the search entry when no search is
 | 
			
		||||
#. active; it should not exceed ~30
 | 
			
		||||
#. characters. */
 | 
			
		||||
#. characters.
 | 
			
		||||
#: ../js/ui/overview.js:244
 | 
			
		||||
msgid "Type to search…"
 | 
			
		||||
msgstr "Rechercher…"
 | 
			
		||||
@@ -1045,15 +1071,25 @@ msgid "Quit"
 | 
			
		||||
msgstr "Quitter"
 | 
			
		||||
 | 
			
		||||
#. Translators: If there is no suitable word for "Activities"
 | 
			
		||||
#. in your language, you can use the word for "Overview". */
 | 
			
		||||
#. in your language, you can use the word for "Overview".
 | 
			
		||||
#: ../js/ui/panel.js:404
 | 
			
		||||
msgid "Activities"
 | 
			
		||||
msgstr "Activités"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/panel.js:650
 | 
			
		||||
msgctxt "System menu in the top bar"
 | 
			
		||||
msgid "System"
 | 
			
		||||
msgstr "Système"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/panel.js:754
 | 
			
		||||
msgid "Top Bar"
 | 
			
		||||
msgstr "Barre supérieure"
 | 
			
		||||
 | 
			
		||||
#. Translators: this MUST be either "toggle-switch-us"
 | 
			
		||||
#. (for toggle switches containing the English words
 | 
			
		||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
 | 
			
		||||
#. switches containing "◯" and "|"). Other values will
 | 
			
		||||
#. simply result in invisible toggle switches.
 | 
			
		||||
#: ../js/ui/popupMenu.js:289
 | 
			
		||||
msgid "toggle-switch-us"
 | 
			
		||||
msgstr "toggle-switch-intl"
 | 
			
		||||
@@ -1071,7 +1107,7 @@ msgid "Restarting…"
 | 
			
		||||
msgstr "Redémarrage en cours…"
 | 
			
		||||
 | 
			
		||||
#. Translators: This is a time format for a date in
 | 
			
		||||
#. long format */
 | 
			
		||||
#. long format
 | 
			
		||||
#: ../js/ui/screenShield.js:85
 | 
			
		||||
msgid "%A, %B %d"
 | 
			
		||||
msgstr "%A %d %B"
 | 
			
		||||
@@ -1098,6 +1134,13 @@ msgstr "Verrouiller"
 | 
			
		||||
msgid "GNOME needs to lock the screen"
 | 
			
		||||
msgstr "GNOME a besoin de verrouiller l'écran"
 | 
			
		||||
 | 
			
		||||
#. We could not become modal, so we can't activate the
 | 
			
		||||
#. screenshield. The user is probably very upset at this
 | 
			
		||||
#. point, but any application using global grabs is broken
 | 
			
		||||
#. Just tell him to stop using this app
 | 
			
		||||
#.
 | 
			
		||||
#. XXX: another option is to kick the user into the gdm login
 | 
			
		||||
#. screen, where we're not affected by grabs
 | 
			
		||||
#: ../js/ui/screenShield.js:805 ../js/ui/screenShield.js:1271
 | 
			
		||||
msgid "Unable to lock"
 | 
			
		||||
msgstr "Impossible de verrouiller"
 | 
			
		||||
@@ -1193,7 +1236,7 @@ msgstr "Éteindre"
 | 
			
		||||
msgid "Bluetooth Settings"
 | 
			
		||||
msgstr "Paramètres Bluetooth"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is the number of connected bluetooth devices */
 | 
			
		||||
#. Translators: this is the number of connected bluetooth devices
 | 
			
		||||
#: ../js/ui/status/bluetooth.js:105
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%d Connected"
 | 
			
		||||
@@ -1241,13 +1284,13 @@ msgstr "Activer"
 | 
			
		||||
msgid "<unknown>"
 | 
			
		||||
msgstr "<inconnu>"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a network identifier */
 | 
			
		||||
#. Translators: %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:451 ../js/ui/status/network.js:1308
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Off"
 | 
			
		||||
msgstr "%s éteint"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a network identifier */
 | 
			
		||||
#. Translators: %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:454
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Connected"
 | 
			
		||||
@@ -1255,45 +1298,45 @@ msgstr "%s connecté"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is for network devices that are physically present but are not
 | 
			
		||||
#. under NetworkManager's control (and thus cannot be used in the menu);
 | 
			
		||||
#. %s is a network identifier */
 | 
			
		||||
#. %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:459
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Unmanaged"
 | 
			
		||||
msgstr "%s non géré"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a network identifier */
 | 
			
		||||
#. Translators: %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:462
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Disconnecting"
 | 
			
		||||
msgstr "Déconnexion de %s en cours"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a network identifier */
 | 
			
		||||
#. Translators: %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:469 ../js/ui/status/network.js:1300
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Connecting"
 | 
			
		||||
msgstr "Connexion de %s en cours"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is for network connections that require some kind of key or password; %s is a network identifier */
 | 
			
		||||
#. Translators: this is for network connections that require some kind of key or password; %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:472
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Requires Authentication"
 | 
			
		||||
msgstr "Authentification nécessaire pour %s"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is for devices that require some kind of firmware or kernel
 | 
			
		||||
#. module, which is missing; %s is a network identifier */
 | 
			
		||||
#. module, which is missing; %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:480
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "Firmware Missing For %s"
 | 
			
		||||
msgstr "Micrologiciel manquant pour %s"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is for a network device that cannot be activated (for example it
 | 
			
		||||
#. is disabled by rfkill, or it has no coverage; %s is a network identifier */
 | 
			
		||||
#. is disabled by rfkill, or it has no coverage; %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:484
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Unavailable"
 | 
			
		||||
msgstr "%s non disponible"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a network identifier */
 | 
			
		||||
#. Translators: %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:487
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Connection Failed"
 | 
			
		||||
@@ -1307,14 +1350,14 @@ msgstr "Paramètres filaire"
 | 
			
		||||
msgid "Mobile Broadband Settings"
 | 
			
		||||
msgstr "Paramètres connexion mobile"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a network identifier */
 | 
			
		||||
#. Translators: %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:588 ../js/ui/status/network.js:1305
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Hardware Disabled"
 | 
			
		||||
msgstr "Équipement %s désactivé"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is for a network device that cannot be activated
 | 
			
		||||
#. because it's disabled by rfkill (airplane mode); %s is a network identifier */
 | 
			
		||||
#. because it's disabled by rfkill (airplane mode); %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:592
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Disabled"
 | 
			
		||||
@@ -1376,13 +1419,13 @@ msgstr "Paramètres Wi-Fi"
 | 
			
		||||
msgid "Turn On"
 | 
			
		||||
msgstr "Activer"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a network identifier */
 | 
			
		||||
#. Translators: %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:1296
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Hotspot Active"
 | 
			
		||||
msgstr "Hotspot %s actif"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a network identifier */
 | 
			
		||||
#. Translators: %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:1311
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s Not Connected"
 | 
			
		||||
@@ -1392,7 +1435,7 @@ msgstr "%s non connecté"
 | 
			
		||||
msgid "connecting..."
 | 
			
		||||
msgstr "connexion..."
 | 
			
		||||
 | 
			
		||||
#. Translators: this is for network connections that require some kind of key or password */
 | 
			
		||||
#. Translators: this is for network connections that require some kind of key or password
 | 
			
		||||
#: ../js/ui/status/network.js:1414
 | 
			
		||||
msgid "authentication required"
 | 
			
		||||
msgstr "authentification nécessaire"
 | 
			
		||||
@@ -1433,20 +1476,27 @@ msgstr "Paramètres de gestion de l'énergie"
 | 
			
		||||
msgid "Fully Charged"
 | 
			
		||||
msgstr "Charge complète"
 | 
			
		||||
 | 
			
		||||
#. 0 is reported when UPower does not have enough data
 | 
			
		||||
#. to estimate battery life
 | 
			
		||||
#: ../js/ui/status/power.js:72 ../js/ui/status/power.js:78
 | 
			
		||||
msgid "Estimating…"
 | 
			
		||||
msgstr "Estimation en cours…"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is <hours>:<minutes> Remaining (<percentage>)
 | 
			
		||||
#: ../js/ui/status/power.js:86
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%d∶%02d Remaining (%d%%)"
 | 
			
		||||
msgstr "%d∶%02d restant (%d%%)"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is <hours>:<minutes> Until Full (<percentage>)
 | 
			
		||||
#: ../js/ui/status/power.js:91
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%d∶%02d Until Full (%d%%)"
 | 
			
		||||
msgstr "%d∶%02d avant chargement complet (%d%%)"
 | 
			
		||||
 | 
			
		||||
#. The menu only appears when airplane mode is on, so just
 | 
			
		||||
#. statically build it as if it was on, rather than dynamically
 | 
			
		||||
#. changing the menu contents.
 | 
			
		||||
#: ../js/ui/status/rfkill.js:88
 | 
			
		||||
msgid "Airplane Mode On"
 | 
			
		||||
msgstr "Mode avion activé"
 | 
			
		||||
@@ -1514,7 +1564,7 @@ msgstr "Voulez-vous conserver ces paramètres d'affichage ?"
 | 
			
		||||
 | 
			
		||||
#. Translators: this and the following message should be limited in lenght,
 | 
			
		||||
#. to avoid ellipsizing the labels.
 | 
			
		||||
#. */
 | 
			
		||||
#.
 | 
			
		||||
#: ../js/ui/windowManager.js:82
 | 
			
		||||
msgid "Revert Settings"
 | 
			
		||||
msgstr "Restaurer les paramètres"
 | 
			
		||||
@@ -1531,7 +1581,7 @@ msgstr[0] "Les paramètres seront restaurés dans %d seconde"
 | 
			
		||||
msgstr[1] "Les paramètres seront restaurés dans %d secondes"
 | 
			
		||||
 | 
			
		||||
#. Translators: This represents the size of a window. The first number is
 | 
			
		||||
#. * the width of the window and the second is the height. */
 | 
			
		||||
#. * the width of the window and the second is the height.
 | 
			
		||||
#: ../js/ui/windowManager.js:658
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%d x %d"
 | 
			
		||||
@@ -1607,7 +1657,7 @@ msgstr "Agenda d'Evolution"
 | 
			
		||||
 | 
			
		||||
#. translators:
 | 
			
		||||
#. * The number of sound outputs on a particular device
 | 
			
		||||
#: ../src/gvc/gvc-mixer-control.c:1837
 | 
			
		||||
#: ../src/gvc/gvc-mixer-control.c:1835
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%u Output"
 | 
			
		||||
msgid_plural "%u Outputs"
 | 
			
		||||
@@ -1616,31 +1666,31 @@ msgstr[1] "%u sorties"
 | 
			
		||||
 | 
			
		||||
#. translators:
 | 
			
		||||
#. * The number of sound inputs on a particular device
 | 
			
		||||
#: ../src/gvc/gvc-mixer-control.c:1847
 | 
			
		||||
#: ../src/gvc/gvc-mixer-control.c:1845
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%u Input"
 | 
			
		||||
msgid_plural "%u Inputs"
 | 
			
		||||
msgstr[0] "%u entrée"
 | 
			
		||||
msgstr[1] "%u entrées"
 | 
			
		||||
 | 
			
		||||
#: ../src/gvc/gvc-mixer-control.c:2373
 | 
			
		||||
#: ../src/gvc/gvc-mixer-control.c:2371
 | 
			
		||||
msgid "System Sounds"
 | 
			
		||||
msgstr "Sons système"
 | 
			
		||||
 | 
			
		||||
#: ../src/main.c:373
 | 
			
		||||
#: ../src/main.c:381
 | 
			
		||||
msgid "Print version"
 | 
			
		||||
msgstr "Affiche la version"
 | 
			
		||||
 | 
			
		||||
#: ../src/main.c:379
 | 
			
		||||
#: ../src/main.c:387
 | 
			
		||||
msgid "Mode used by GDM for login screen"
 | 
			
		||||
msgstr "Mode utilisé par GDM pour l'écran de connexion"
 | 
			
		||||
 | 
			
		||||
#: ../src/main.c:385
 | 
			
		||||
#: ../src/main.c:393
 | 
			
		||||
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Utiliser un mode particulier, par ex. « gdm » pour l'écran de connexion"
 | 
			
		||||
 | 
			
		||||
#: ../src/main.c:391
 | 
			
		||||
#: ../src/main.c:399
 | 
			
		||||
msgid "List possible modes"
 | 
			
		||||
msgstr "Lister les modes possibles"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										54
									
								
								po/gl.po
									
									
									
									
									
								
							
							
						
						
									
										54
									
								
								po/gl.po
									
									
									
									
									
								
							@@ -10,9 +10,10 @@
 | 
			
		||||
msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: gnome-shell master\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2015-08-26 00:05+0200\n"
 | 
			
		||||
"PO-Revision-Date: 2015-08-26 00:10+0200\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
 | 
			
		||||
"shell&keywords=I18N+L10N&component=general\n"
 | 
			
		||||
"POT-Creation-Date: 2015-09-28 20:46+0000\n"
 | 
			
		||||
"PO-Revision-Date: 2015-09-29 00:34+0200\n"
 | 
			
		||||
"Last-Translator: Fran Dieguez <frandieguez@gnome.org>\n"
 | 
			
		||||
"Language-Team: gnome-l10n-gl@gnome.org\n"
 | 
			
		||||
"Language: gl\n"
 | 
			
		||||
@@ -320,7 +321,7 @@ msgid "Cancel"
 | 
			
		||||
msgstr "Cancelar"
 | 
			
		||||
 | 
			
		||||
#: ../js/gdm/authPrompt.js:169 ../js/gdm/authPrompt.js:215
 | 
			
		||||
#: ../js/gdm/authPrompt.js:435
 | 
			
		||||
#: ../js/gdm/authPrompt.js:447
 | 
			
		||||
msgid "Next"
 | 
			
		||||
msgstr "Seguinte"
 | 
			
		||||
 | 
			
		||||
@@ -347,7 +348,7 @@ msgstr "Non está na lista?"
 | 
			
		||||
 | 
			
		||||
#. Translators: this message is shown below the username entry field
 | 
			
		||||
#. to clue the user in on how to login to the local network realm
 | 
			
		||||
#: ../js/gdm/loginDialog.js:847
 | 
			
		||||
#: ../js/gdm/loginDialog.js:850
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "(e.g., user or %s)"
 | 
			
		||||
msgstr "(p.ex., usuario ou %s)"
 | 
			
		||||
@@ -355,12 +356,12 @@ msgstr "(p.ex., usuario ou %s)"
 | 
			
		||||
#. TTLS and PEAP are actually much more complicated, but this complication
 | 
			
		||||
#. is not visible here since we only care about phase2 authentication
 | 
			
		||||
#. (and don't even care of which one)
 | 
			
		||||
#: ../js/gdm/loginDialog.js:852 ../js/ui/components/networkAgent.js:271
 | 
			
		||||
#: ../js/gdm/loginDialog.js:855 ../js/ui/components/networkAgent.js:271
 | 
			
		||||
#: ../js/ui/components/networkAgent.js:289
 | 
			
		||||
msgid "Username: "
 | 
			
		||||
msgstr "Nome de usuario: "
 | 
			
		||||
 | 
			
		||||
#: ../js/gdm/loginDialog.js:1181
 | 
			
		||||
#: ../js/gdm/loginDialog.js:1184
 | 
			
		||||
msgid "Login Window"
 | 
			
		||||
msgstr "Xanela de inicio de sesión"
 | 
			
		||||
 | 
			
		||||
@@ -514,8 +515,7 @@ msgstr "Cambiar fondo de escritorio…"
 | 
			
		||||
msgid "Display Settings"
 | 
			
		||||
msgstr "Preferencias da pantalla"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/backgroundMenu.js:22 ../js/ui/panel.js:650
 | 
			
		||||
#: ../js/ui/status/system.js:366
 | 
			
		||||
#: ../js/ui/backgroundMenu.js:22 ../js/ui/status/system.js:366
 | 
			
		||||
msgid "Settings"
 | 
			
		||||
msgstr "Preferencias"
 | 
			
		||||
 | 
			
		||||
@@ -591,33 +591,33 @@ msgctxt "event list time"
 | 
			
		||||
msgid "All Day"
 | 
			
		||||
msgstr "Todo o día"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1291
 | 
			
		||||
#: ../js/ui/calendar.js:1295
 | 
			
		||||
msgid "Clear section"
 | 
			
		||||
msgstr "Limpar sección"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1518
 | 
			
		||||
#: ../js/ui/calendar.js:1522
 | 
			
		||||
msgid "Events"
 | 
			
		||||
msgstr "Eventos"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1527
 | 
			
		||||
#: ../js/ui/calendar.js:1531
 | 
			
		||||
msgctxt "calendar heading"
 | 
			
		||||
msgid "%A, %B %d"
 | 
			
		||||
msgstr "%A, %d de %B"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1531
 | 
			
		||||
#: ../js/ui/calendar.js:1535
 | 
			
		||||
msgctxt "calendar heading"
 | 
			
		||||
msgid "%A, %B %d, %Y"
 | 
			
		||||
msgstr "%A, %d de %B de %Y"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1616
 | 
			
		||||
#: ../js/ui/calendar.js:1620
 | 
			
		||||
msgid "Notifications"
 | 
			
		||||
msgstr "Notificacións"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1767
 | 
			
		||||
#: ../js/ui/calendar.js:1771
 | 
			
		||||
msgid "No Notifications"
 | 
			
		||||
msgstr "Non hai notificacións"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1770
 | 
			
		||||
#: ../js/ui/calendar.js:1774
 | 
			
		||||
msgid "No Events"
 | 
			
		||||
msgstr "Non hai eventos"
 | 
			
		||||
 | 
			
		||||
@@ -973,7 +973,7 @@ msgstr "Activado"
 | 
			
		||||
 | 
			
		||||
#. translators:
 | 
			
		||||
#. * The device has been disabled
 | 
			
		||||
#: ../js/ui/lookingGlass.js:719 ../src/gvc/gvc-mixer-control.c:1830
 | 
			
		||||
#: ../js/ui/lookingGlass.js:719 ../src/gvc/gvc-mixer-control.c:1828
 | 
			
		||||
msgid "Disabled"
 | 
			
		||||
msgstr "Desactivado"
 | 
			
		||||
 | 
			
		||||
@@ -1027,6 +1027,12 @@ msgstr "Saír"
 | 
			
		||||
msgid "Activities"
 | 
			
		||||
msgstr "Actividades"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/panel.js:650
 | 
			
		||||
#| msgid "System"
 | 
			
		||||
msgctxt "System menu in the top bar"
 | 
			
		||||
msgid "System"
 | 
			
		||||
msgstr "Sistema"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/panel.js:754
 | 
			
		||||
msgid "Top Bar"
 | 
			
		||||
msgstr "Barra superior"
 | 
			
		||||
@@ -1603,7 +1609,7 @@ msgstr "Calendario de Evolution"
 | 
			
		||||
 | 
			
		||||
#. translators:
 | 
			
		||||
#. * The number of sound outputs on a particular device
 | 
			
		||||
#: ../src/gvc/gvc-mixer-control.c:1837
 | 
			
		||||
#: ../src/gvc/gvc-mixer-control.c:1835
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%u Output"
 | 
			
		||||
msgid_plural "%u Outputs"
 | 
			
		||||
@@ -1612,32 +1618,32 @@ msgstr[1] "%u saídas"
 | 
			
		||||
 | 
			
		||||
#. translators:
 | 
			
		||||
#. * The number of sound inputs on a particular device
 | 
			
		||||
#: ../src/gvc/gvc-mixer-control.c:1847
 | 
			
		||||
#: ../src/gvc/gvc-mixer-control.c:1845
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%u Input"
 | 
			
		||||
msgid_plural "%u Inputs"
 | 
			
		||||
msgstr[0] "%u entrada"
 | 
			
		||||
msgstr[1] "%u entradas"
 | 
			
		||||
 | 
			
		||||
#: ../src/gvc/gvc-mixer-control.c:2373
 | 
			
		||||
#: ../src/gvc/gvc-mixer-control.c:2371
 | 
			
		||||
msgid "System Sounds"
 | 
			
		||||
msgstr "Sons do sistema"
 | 
			
		||||
 | 
			
		||||
#: ../src/main.c:373
 | 
			
		||||
#: ../src/main.c:381
 | 
			
		||||
msgid "Print version"
 | 
			
		||||
msgstr "Imprimir versión"
 | 
			
		||||
 | 
			
		||||
#: ../src/main.c:379
 | 
			
		||||
#: ../src/main.c:387
 | 
			
		||||
msgid "Mode used by GDM for login screen"
 | 
			
		||||
msgstr "Modo usado por GDM para a pantalla de inicio"
 | 
			
		||||
 | 
			
		||||
#: ../src/main.c:385
 | 
			
		||||
#: ../src/main.c:393
 | 
			
		||||
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Usar un modo específico, por exemplo, «gdm» para a pantalla de inicio de "
 | 
			
		||||
"sesión"
 | 
			
		||||
 | 
			
		||||
#: ../src/main.c:391
 | 
			
		||||
#: ../src/main.c:399
 | 
			
		||||
msgid "List possible modes"
 | 
			
		||||
msgstr "Listar os modos posíbeis"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										267
									
								
								po/he.po
									
									
									
									
									
								
							
							
						
						
									
										267
									
								
								po/he.po
									
									
									
									
									
								
							@@ -10,8 +10,8 @@ msgid ""
 | 
			
		||||
msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: gnome-shell master\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2015-08-30 21:15+0300\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2015-11-19 20:37+0200\n"
 | 
			
		||||
"PO-Revision-Date: 2015-11-19 20:37+0200\n"
 | 
			
		||||
"Last-Translator: Yosef Or Boczko <yoseforb@gmail.com>\n"
 | 
			
		||||
"Language-Team: עברית <>\n"
 | 
			
		||||
@@ -47,15 +47,6 @@ msgstr "הצגת כל היישומים"
 | 
			
		||||
#: ../data/50-gnome-shell-system.xml.in.h:6
 | 
			
		||||
msgid "Open the application menu"
 | 
			
		||||
msgstr "פתיחת תפריט היישום"
 | 
			
		||||
 | 
			
		||||
#: ../data/gnome-shell.desktop.in.in.h:1
 | 
			
		||||
msgid "GNOME Shell"
 | 
			
		||||
msgstr "מעטפת GNOME"
 | 
			
		||||
 | 
			
		||||
#: ../data/gnome-shell.desktop.in.in.h:2
 | 
			
		||||
#: ../data/gnome-shell-wayland.desktop.in.in.h:2
 | 
			
		||||
msgid "Window management and application launching"
 | 
			
		||||
msgstr "ניהול חלונות והרצת יישומים"
 | 
			
		||||
 | 
			
		||||
#: ../data/gnome-shell-extension-prefs.desktop.in.in.h:1
 | 
			
		||||
msgid "GNOME Shell Extension Preferences"
 | 
			
		||||
@@ -64,9 +55,13 @@ msgstr "העדפות ההרחבות של GNOME Shell"
 | 
			
		||||
#: ../data/gnome-shell-extension-prefs.desktop.in.in.h:2
 | 
			
		||||
msgid "Configure GNOME Shell Extensions"
 | 
			
		||||
msgstr "הגדרת הרחבות GNOME Shell"
 | 
			
		||||
 | 
			
		||||
#: ../data/gnome-shell-wayland.desktop.in.in.h:1
 | 
			
		||||
msgid "GNOME Shell (wayland compositor)"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.Shell.desktop.in.in.h:1
 | 
			
		||||
msgid "GNOME Shell"
 | 
			
		||||
msgstr "מעטפת GNOME"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.Shell.desktop.in.in.h:2
 | 
			
		||||
msgid "Window management and application launching"
 | 
			
		||||
msgstr "ניהול חלונות והרצת יישומים"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:1
 | 
			
		||||
@@ -170,74 +165,92 @@ msgstr ""
 | 
			
		||||
"'Remember Password' checkbox will be present. This key sets the default "
 | 
			
		||||
"state of the checkbox."
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
 | 
			
		||||
msgid ""
 | 
			
		||||
"Whether the default Bluetooth adapter had set up devices associated to it"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Whether the default Bluetooth adapter had set up devices associated to it"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
 | 
			
		||||
msgid ""
 | 
			
		||||
"The shell will only show a Bluetooth menu item if a Bluetooth adapter is "
 | 
			
		||||
"powered, or if there were devices set up associated with the default "
 | 
			
		||||
"adapter. This will be reset if the default adapter is ever seen not to have "
 | 
			
		||||
"devices associated to it."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"The shell will only show a Bluetooth menu item if a Bluetooth adapter is "
 | 
			
		||||
"powered, or if there were devices set up associated with the default "
 | 
			
		||||
"adapter. This will be reset if the default adapter is ever seen not to have "
 | 
			
		||||
"devices associated to it."
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
 | 
			
		||||
msgid "Show the week date in the calendar"
 | 
			
		||||
msgstr "Show the week date in the calendar"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
 | 
			
		||||
msgid "If true, display the ISO week date in the calendar."
 | 
			
		||||
msgstr "If true, display the ISO week date in the calendar."
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
 | 
			
		||||
msgid "Keybinding to open the application menu"
 | 
			
		||||
msgstr "Keybinding to open the application menu"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
 | 
			
		||||
msgid "Keybinding to open the application menu."
 | 
			
		||||
msgstr "Keybinding to open the application menu."
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
 | 
			
		||||
msgid "Keybinding to open the \"Show Applications\" view"
 | 
			
		||||
msgstr "Keybinding to open the \"Show Applications\" view"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
 | 
			
		||||
msgid ""
 | 
			
		||||
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
 | 
			
		||||
msgid "Keybinding to open the overview"
 | 
			
		||||
msgstr "Keybinding to open the overview"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
 | 
			
		||||
msgid "Keybinding to open the Activities Overview."
 | 
			
		||||
msgstr "Keybinding to open the Activities Overview."
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
 | 
			
		||||
msgid "Keybinding to toggle the visibility of the notification list"
 | 
			
		||||
msgstr "Keybinding to toggle the visibility of the notification list"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
 | 
			
		||||
msgid "Keybinding to toggle the visibility of the notification list."
 | 
			
		||||
msgstr "Keybinding to toggle the visibility of the notification list."
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
 | 
			
		||||
msgid "Keybinding to focus the active notification"
 | 
			
		||||
msgstr "Keybinding to focus the active notification"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
 | 
			
		||||
msgid "Keybinding to focus the active notification."
 | 
			
		||||
msgstr "Keybinding to focus the active notification."
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
 | 
			
		||||
msgid ""
 | 
			
		||||
"Keybinding that pauses and resumes all running tweens, for debugging purposes"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Keybinding that pauses and resumes all running tweens, for debugging purposes"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
 | 
			
		||||
msgid "Which keyboard to use"
 | 
			
		||||
msgstr "Which keyboard to use"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34
 | 
			
		||||
msgid "The type of keyboard to use."
 | 
			
		||||
msgstr "The type of keyboard to use."
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
 | 
			
		||||
msgid "Limit switcher to current workspace."
 | 
			
		||||
msgstr "Limit switcher to current workspace."
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
 | 
			
		||||
msgid ""
 | 
			
		||||
"If true, only applications that have windows on the current workspace are "
 | 
			
		||||
@@ -245,51 +258,51 @@ msgstr ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"If true, only applications that have windows on the current workspace are "
 | 
			
		||||
"shown in the switcher. Otherwise, all applications are included."
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
 | 
			
		||||
msgid "The application icon mode."
 | 
			
		||||
msgstr "The application icon mode."
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
 | 
			
		||||
msgid ""
 | 
			
		||||
"Configures how the windows are shown in the switcher. Valid possibilities "
 | 
			
		||||
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
 | 
			
		||||
"only' (shows only the application icon) or 'both'."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Configures how the windows are shown in the switcher. Valid possibilities "
 | 
			
		||||
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
 | 
			
		||||
"only' (shows only the application icon) or 'both'."
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
 | 
			
		||||
msgid ""
 | 
			
		||||
"If true, only windows from the current workspace are shown in the switcher. "
 | 
			
		||||
"Otherwise, all windows are included."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"If true, only windows from the current workspace are shown in the switcher. "
 | 
			
		||||
"Otherwise, all windows are included."
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38
 | 
			
		||||
msgid "Attach modal dialog to the parent window"
 | 
			
		||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38
 | 
			
		||||
msgid ""
 | 
			
		||||
"Configures how the windows are shown in the switcher. Valid possibilities "
 | 
			
		||||
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
 | 
			
		||||
"only' (shows only the application icon) or 'both'."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Configures how the windows are shown in the switcher. Valid possibilities "
 | 
			
		||||
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
 | 
			
		||||
"only' (shows only the application icon) or 'both'."
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:39
 | 
			
		||||
msgid ""
 | 
			
		||||
"If true, only windows from the current workspace are shown in the switcher. "
 | 
			
		||||
"Otherwise, all windows are included."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"If true, only windows from the current workspace are shown in the switcher. "
 | 
			
		||||
"Otherwise, all windows are included."
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:40
 | 
			
		||||
msgid "Attach modal dialog to the parent window"
 | 
			
		||||
msgstr "Attach modal dialog to the parent window"
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:41
 | 
			
		||||
msgid ""
 | 
			
		||||
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
 | 
			
		||||
msgstr ""
 | 
			
		||||
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:42
 | 
			
		||||
msgid "Enable edge tiling when dropping windows on screen edges"
 | 
			
		||||
msgstr "Enable edge tiling when dropping windows on screen edges"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:43
 | 
			
		||||
msgid "Workspaces are managed dynamically"
 | 
			
		||||
msgstr "Workspaces are managed dynamically"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:44
 | 
			
		||||
msgid "Workspaces only on primary monitor"
 | 
			
		||||
msgstr "Workspaces only on primary monitor"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:45
 | 
			
		||||
msgid "Delay focus changes in mouse mode until the pointer stops moving"
 | 
			
		||||
msgstr "Delay focus changes in mouse mode until the pointer stops moving"
 | 
			
		||||
@@ -314,7 +327,7 @@ msgid "Cancel"
 | 
			
		||||
msgid "Cancel"
 | 
			
		||||
msgstr "ביטול"
 | 
			
		||||
 | 
			
		||||
#: ../js/gdm/authPrompt.js:169 ../js/gdm/authPrompt.js:215
 | 
			
		||||
#: ../js/gdm/authPrompt.js:169 ../js/gdm/authPrompt.js:215
 | 
			
		||||
#: ../js/gdm/authPrompt.js:447
 | 
			
		||||
msgid "Next"
 | 
			
		||||
msgstr "הבא"
 | 
			
		||||
@@ -341,7 +354,7 @@ msgstr "לא רשום?"
 | 
			
		||||
msgstr "לא רשום?"
 | 
			
		||||
 | 
			
		||||
#. Translators: this message is shown below the username entry field
 | 
			
		||||
#. to clue the user in on how to login to the local network realm
 | 
			
		||||
#. to clue the user in on how to login to the local network realm
 | 
			
		||||
#: ../js/gdm/loginDialog.js:850
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "(e.g., user or %s)"
 | 
			
		||||
@@ -349,12 +362,12 @@ msgstr "(משתמש או %s לדוגמה)"
 | 
			
		||||
 | 
			
		||||
#. TTLS and PEAP are actually much more complicated, but this complication
 | 
			
		||||
#. is not visible here since we only care about phase2 authentication
 | 
			
		||||
#. (and don't even care of which one)
 | 
			
		||||
#. (and don't even care of which one)
 | 
			
		||||
#: ../js/gdm/loginDialog.js:855 ../js/ui/components/networkAgent.js:271
 | 
			
		||||
#: ../js/ui/components/networkAgent.js:289
 | 
			
		||||
msgid "Username: "
 | 
			
		||||
msgstr "שם משתמש:"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/gdm/loginDialog.js:1180
 | 
			
		||||
msgid "Login Window"
 | 
			
		||||
msgstr "חלון כניסה"
 | 
			
		||||
@@ -490,12 +503,12 @@ msgstr "הוספה למועדפים"
 | 
			
		||||
#: ../js/ui/appDisplay.js:1897
 | 
			
		||||
msgid "Show Details"
 | 
			
		||||
msgstr "הצגת פרטים"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/appFavorites.js:133
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s has been added to your favorites."
 | 
			
		||||
msgstr "%s נוסף למועדפים שלך."
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/appFavorites.js:167
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%s has been removed from your favorites."
 | 
			
		||||
@@ -508,8 +521,7 @@ msgstr "החלפת הרקע…"
 | 
			
		||||
#: ../js/ui/backgroundMenu.js:21
 | 
			
		||||
msgid "Display Settings"
 | 
			
		||||
msgstr "הגדרות תצוגה"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/backgroundMenu.js:22 ../js/ui/panel.js:650
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/backgroundMenu.js:22 ../js/ui/status/system.js:366
 | 
			
		||||
msgid "Settings"
 | 
			
		||||
msgstr "הגדרות"
 | 
			
		||||
@@ -573,6 +585,12 @@ msgstr "חודש קודם"
 | 
			
		||||
#: ../js/ui/calendar.js:576
 | 
			
		||||
msgid "Next month"
 | 
			
		||||
msgstr "חודש הבא"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:728
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgctxt "date day number format"
 | 
			
		||||
msgid "%d"
 | 
			
		||||
msgstr "%d"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:783
 | 
			
		||||
msgid "Week %V"
 | 
			
		||||
@@ -585,33 +603,33 @@ msgctxt "event list time"
 | 
			
		||||
msgctxt "event list time"
 | 
			
		||||
msgid "All Day"
 | 
			
		||||
msgstr "יום שלם"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1295
 | 
			
		||||
msgid "Clear section"
 | 
			
		||||
msgstr "ניקוי מקטע"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1522
 | 
			
		||||
msgid "Events"
 | 
			
		||||
msgstr "אירועים"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1531
 | 
			
		||||
msgctxt "calendar heading"
 | 
			
		||||
msgid "%A, %B %d"
 | 
			
		||||
msgstr "%A, ה־%e ב%B"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1535
 | 
			
		||||
msgctxt "calendar heading"
 | 
			
		||||
msgid "%A, %B %d, %Y"
 | 
			
		||||
msgstr "%A, ה־%e ב%B, %Y"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1620
 | 
			
		||||
msgid "Notifications"
 | 
			
		||||
msgstr "התרעות"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1771
 | 
			
		||||
msgid "No Notifications"
 | 
			
		||||
msgstr "אין התרעות"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1774
 | 
			
		||||
msgid "No Events"
 | 
			
		||||
msgstr "אין אירועים"
 | 
			
		||||
@@ -623,7 +641,7 @@ msgstr "חובר כונן חיצוני"
 | 
			
		||||
#: ../js/ui/components/automountManager.js:102
 | 
			
		||||
msgid "External drive disconnected"
 | 
			
		||||
msgstr "נותק כונן חיצוני"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/components/autorunManager.js:355
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "Open with %s"
 | 
			
		||||
@@ -961,7 +979,7 @@ msgstr "פעיל"
 | 
			
		||||
msgstr "פעיל"
 | 
			
		||||
 | 
			
		||||
#. translators:
 | 
			
		||||
#. * The device has been disabled
 | 
			
		||||
#. * The device has been disabled
 | 
			
		||||
#: ../js/ui/lookingGlass.js:719 ../src/gvc/gvc-mixer-control.c:1828
 | 
			
		||||
msgid "Disabled"
 | 
			
		||||
msgstr "מנוטרל"
 | 
			
		||||
@@ -1005,17 +1023,22 @@ msgstr "סקירה"
 | 
			
		||||
#: ../js/ui/overview.js:244
 | 
			
		||||
msgid "Type to search…"
 | 
			
		||||
msgstr "יש להקליד כדי לחפש…"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/panel.js:358
 | 
			
		||||
msgid "Quit"
 | 
			
		||||
msgstr "יציאה"
 | 
			
		||||
 | 
			
		||||
#. Translators: If there is no suitable word for "Activities"
 | 
			
		||||
#. in your language, you can use the word for "Overview".
 | 
			
		||||
#. in your language, you can use the word for "Overview".
 | 
			
		||||
#: ../js/ui/panel.js:414
 | 
			
		||||
msgid "Activities"
 | 
			
		||||
msgstr "פעילויות"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/panel.js:695
 | 
			
		||||
msgctxt "System menu in the top bar"
 | 
			
		||||
msgid "System"
 | 
			
		||||
msgstr "מערכת"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/panel.js:807
 | 
			
		||||
msgid "Top Bar"
 | 
			
		||||
msgstr "הסרגל העליון"
 | 
			
		||||
@@ -1028,15 +1051,15 @@ msgstr "הסרגל העליון"
 | 
			
		||||
#: ../js/ui/popupMenu.js:289
 | 
			
		||||
msgid "toggle-switch-us"
 | 
			
		||||
msgstr "toggle-switch-intl"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/runDialog.js:71
 | 
			
		||||
msgid "Enter a Command"
 | 
			
		||||
msgstr "נא להזין פקודה"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/runDialog.js:111 ../js/ui/windowMenu.js:162
 | 
			
		||||
msgid "Close"
 | 
			
		||||
msgstr "סגירה"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/runDialog.js:282
 | 
			
		||||
msgid "Restarting…"
 | 
			
		||||
msgstr "מופעל מחדש…"
 | 
			
		||||
@@ -1161,29 +1184,41 @@ msgstr "ניגודיות גבוהה"
 | 
			
		||||
#: ../js/ui/status/accessibility.js:202
 | 
			
		||||
msgid "Large Text"
 | 
			
		||||
msgstr "טקסט גדול"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:178
 | 
			
		||||
#: ../js/ui/status/network.js:353 ../js/ui/status/network.js:1279
 | 
			
		||||
#: ../js/ui/status/network.js:1394 ../js/ui/status/rfkill.js:90
 | 
			
		||||
#: ../js/ui/status/rfkill.js:117
 | 
			
		||||
msgid "Turn Off"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/bluetooth.js:47
 | 
			
		||||
msgid "Bluetooth"
 | 
			
		||||
msgstr "Bluetooth"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/bluetooth.js:56
 | 
			
		||||
msgid "Bluetooth Settings"
 | 
			
		||||
msgstr "הגדרות Bluetooth"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is the number of connected bluetooth devices
 | 
			
		||||
#. Translators: this is the number of connected bluetooth devices
 | 
			
		||||
#: ../js/ui/status/bluetooth.js:136
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%d Connected"
 | 
			
		||||
msgid_plural "%d Connected"
 | 
			
		||||
msgstr[0] "אחד מחובר"
 | 
			
		||||
msgstr[1] "%d מחוברים"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/bluetooth.js:138
 | 
			
		||||
msgid "Off"
 | 
			
		||||
msgstr "כבוי"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/bluetooth.js:140
 | 
			
		||||
msgid "Not In Use"
 | 
			
		||||
msgstr "לא בשימוש"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/bluetooth.js:142 ../js/ui/status/network.js:1279
 | 
			
		||||
msgid "Turn On"
 | 
			
		||||
msgstr "הפעלה"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/bluetooth.js:142 ../js/ui/status/network.js:178
 | 
			
		||||
#: ../js/ui/status/network.js:353 ../js/ui/status/network.js:1279
 | 
			
		||||
#: ../js/ui/status/network.js:1394 ../js/ui/status/rfkill.js:90
 | 
			
		||||
#: ../js/ui/status/rfkill.js:117
 | 
			
		||||
msgid "Turn Off"
 | 
			
		||||
msgstr "כיבוי"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/brightness.js:44
 | 
			
		||||
msgid "Brightness"
 | 
			
		||||
@@ -1351,10 +1386,6 @@ msgstr "בחירת רשת"
 | 
			
		||||
#: ../js/ui/status/network.js:1177
 | 
			
		||||
msgid "Wi-Fi Settings"
 | 
			
		||||
msgstr "הגדרות רשת אלחוטית"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/network.js:1279
 | 
			
		||||
msgid "Turn On"
 | 
			
		||||
msgstr "הפעלה"
 | 
			
		||||
 | 
			
		||||
#. Translators: %s is a network identifier
 | 
			
		||||
#: ../js/ui/status/network.js:1296
 | 
			
		||||
@@ -1404,32 +1435,37 @@ msgstr "ההתחברות נכשלה"
 | 
			
		||||
#: ../js/ui/status/network.js:1698
 | 
			
		||||
msgid "Activation of network connection failed"
 | 
			
		||||
msgstr "הפעלת חיבור הרשת נכשלה"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/power.js:61
 | 
			
		||||
msgid "Power Settings"
 | 
			
		||||
msgstr "הגדרות צריכת החשמל"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/power.js:77
 | 
			
		||||
msgid "Fully Charged"
 | 
			
		||||
msgstr "בטעינה מלאה"
 | 
			
		||||
 | 
			
		||||
#. 0 is reported when UPower does not have enough data
 | 
			
		||||
#. to estimate battery life
 | 
			
		||||
#. to estimate battery life
 | 
			
		||||
#: ../js/ui/status/power.js:84 ../js/ui/status/power.js:90
 | 
			
		||||
msgid "Estimating…"
 | 
			
		||||
msgstr "מתבצע שערוך…"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is <hours>:<minutes> Remaining (<percentage>)
 | 
			
		||||
#. Translators: this is <hours>:<minutes> Remaining (<percentage>)
 | 
			
		||||
#: ../js/ui/status/power.js:98
 | 
			
		||||
#, javascript-format
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%d∶%02d Remaining (%d %%)"
 | 
			
		||||
msgstr "%d∶%02d נותרו (%d%%)"
 | 
			
		||||
 | 
			
		||||
#. Translators: this is <hours>:<minutes> Until Full (<percentage>)
 | 
			
		||||
#. Translators: this is <hours>:<minutes> Until Full (<percentage>)
 | 
			
		||||
#: ../js/ui/status/power.js:103
 | 
			
		||||
#, javascript-format
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%d∶%02d Until Full (%d %%)"
 | 
			
		||||
msgstr "%d:%02d עד לטעינה מלאה (%d%%)"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/status/power.js:131 ../js/ui/status/power.js:133
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "%d %%"
 | 
			
		||||
msgstr "%d %%"
 | 
			
		||||
 | 
			
		||||
#. The menu only appears when airplane mode is on, so just
 | 
			
		||||
#. statically build it as if it was on, rather than dynamically
 | 
			
		||||
@@ -1594,7 +1630,7 @@ msgstr "יומן אבולושן"
 | 
			
		||||
msgstr "יומן אבולושן"
 | 
			
		||||
 | 
			
		||||
#. translators:
 | 
			
		||||
#. * The number of sound outputs on a particular device
 | 
			
		||||
#. * The number of sound outputs on a particular device
 | 
			
		||||
#: ../src/gvc/gvc-mixer-control.c:1835
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%u Output"
 | 
			
		||||
@@ -1603,57 +1639,57 @@ msgstr[1] "%u פלטים"
 | 
			
		||||
msgstr[1] "%u פלטים"
 | 
			
		||||
 | 
			
		||||
#. translators:
 | 
			
		||||
#. * The number of sound inputs on a particular device
 | 
			
		||||
#. * The number of sound inputs on a particular device
 | 
			
		||||
#: ../src/gvc/gvc-mixer-control.c:1845
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%u Input"
 | 
			
		||||
msgid_plural "%u Inputs"
 | 
			
		||||
msgstr[0] "קלט אחד"
 | 
			
		||||
msgstr[1] "%u קלטים"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../src/gvc/gvc-mixer-control.c:2371
 | 
			
		||||
msgid "System Sounds"
 | 
			
		||||
msgstr "צלילי מערכת"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../src/main.c:381
 | 
			
		||||
msgid "Print version"
 | 
			
		||||
msgstr "Print version"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../src/main.c:387
 | 
			
		||||
msgid "Mode used by GDM for login screen"
 | 
			
		||||
msgstr "המצב בו GDM יעשה שימוש לצורך מסך הכניסה"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../src/main.c:393
 | 
			
		||||
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
 | 
			
		||||
msgstr "שימוש במצב מסוים, לדוגמה: „gdm“ למסך הכניסה"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../src/main.c:399
 | 
			
		||||
msgid "List possible modes"
 | 
			
		||||
msgstr "הצגת המצבים האפשריים"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../src/shell-app.c:246
 | 
			
		||||
msgctxt "program"
 | 
			
		||||
msgid "Unknown"
 | 
			
		||||
msgstr "לא ידוע"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../src/shell-app.c:487
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Failed to launch “%s”"
 | 
			
		||||
msgstr "אירע כשל בטעינת „%s”"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../src/shell-keyring-prompt.c:730
 | 
			
		||||
msgid "Passwords do not match."
 | 
			
		||||
msgstr "הססמאות אינן תואמות."
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../src/shell-keyring-prompt.c:738
 | 
			
		||||
msgid "Password cannot be blank"
 | 
			
		||||
msgstr "הססמה אינה יכולה להישאר ריקה"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#: ../src/shell-polkit-authentication-agent.c:353
 | 
			
		||||
msgid "Authentication dialog was dismissed by the user"
 | 
			
		||||
msgstr "המשתמש בחר להתעלם מתיבת דו־שיח האימות"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Bluetooth"
 | 
			
		||||
 | 
			
		||||
#~ msgid "GNOME Shell (wayland compositor)"
 | 
			
		||||
#~ msgstr "GNOME Shell (מסדר wayland)"
 | 
			
		||||
 | 
			
		||||
# javascript-format
 | 
			
		||||
@@ -1661,9 +1697,6 @@ msgstr "המשתמש בחר להתעלם מתיבת דו־שיח האימות"
 | 
			
		||||
#~ msgid_plural "%d Connected Devices"
 | 
			
		||||
#~ msgstr[0] "התקן אחד מחובר"
 | 
			
		||||
#~ msgstr[1] "%d התקנים מחוברים"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Off"
 | 
			
		||||
#~ msgstr "כבוי"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Authentication required"
 | 
			
		||||
#~ msgstr "נדרש אימות"
 | 
			
		||||
@@ -2257,10 +2290,6 @@ msgstr "המשתמש בחר להתעלם מתיבת דו־שיח האימות"
 | 
			
		||||
#~ msgstr[0] "דקה אחת נותרה"
 | 
			
		||||
#~ msgstr[1] "%d דקות נותרו"
 | 
			
		||||
#~ msgstr[2] "שתי דקות נותרו"
 | 
			
		||||
 | 
			
		||||
#~ msgctxt "percent of battery remaining"
 | 
			
		||||
#~ msgid "%d%%"
 | 
			
		||||
#~ msgstr "%d%%"
 | 
			
		||||
 | 
			
		||||
#~ msgid "AC Adapter"
 | 
			
		||||
#~ msgstr "מתאם חשמל"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										50
									
								
								po/pl.po
									
									
									
									
									
								
							
							
						
						
									
										50
									
								
								po/pl.po
									
									
									
									
									
								
							@@ -12,8 +12,8 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: gnome-shell\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: \n"
 | 
			
		||||
"POT-Creation-Date: 2015-08-24 15:27+0200\n"
 | 
			
		||||
"PO-Revision-Date: 2015-08-24 15:28+0200\n"
 | 
			
		||||
"POT-Creation-Date: 2015-09-29 00:50+0200\n"
 | 
			
		||||
"PO-Revision-Date: 2015-09-29 00:52+0200\n"
 | 
			
		||||
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
 | 
			
		||||
"Language-Team: Polish <gnomepl@aviary.pl>\n"
 | 
			
		||||
"Language: pl\n"
 | 
			
		||||
@@ -331,7 +331,7 @@ msgid "Cancel"
 | 
			
		||||
msgstr "Anuluj"
 | 
			
		||||
 | 
			
		||||
#: ../js/gdm/authPrompt.js:169 ../js/gdm/authPrompt.js:215
 | 
			
		||||
#: ../js/gdm/authPrompt.js:435
 | 
			
		||||
#: ../js/gdm/authPrompt.js:447
 | 
			
		||||
msgid "Next"
 | 
			
		||||
msgstr "Dalej"
 | 
			
		||||
 | 
			
		||||
@@ -358,7 +358,7 @@ msgstr "Inny użytkownik?"
 | 
			
		||||
 | 
			
		||||
#. Translators: this message is shown below the username entry field
 | 
			
		||||
#. to clue the user in on how to login to the local network realm
 | 
			
		||||
#: ../js/gdm/loginDialog.js:847
 | 
			
		||||
#: ../js/gdm/loginDialog.js:850
 | 
			
		||||
#, javascript-format
 | 
			
		||||
msgid "(e.g., user or %s)"
 | 
			
		||||
msgstr "(np. użytkownik lub %s)"
 | 
			
		||||
@@ -366,12 +366,12 @@ msgstr "(np. użytkownik lub %s)"
 | 
			
		||||
#. TTLS and PEAP are actually much more complicated, but this complication
 | 
			
		||||
#. is not visible here since we only care about phase2 authentication
 | 
			
		||||
#. (and don't even care of which one)
 | 
			
		||||
#: ../js/gdm/loginDialog.js:852 ../js/ui/components/networkAgent.js:271
 | 
			
		||||
#: ../js/gdm/loginDialog.js:855 ../js/ui/components/networkAgent.js:271
 | 
			
		||||
#: ../js/ui/components/networkAgent.js:289
 | 
			
		||||
msgid "Username: "
 | 
			
		||||
msgstr "Nazwa użytkownika: "
 | 
			
		||||
 | 
			
		||||
#: ../js/gdm/loginDialog.js:1181
 | 
			
		||||
#: ../js/gdm/loginDialog.js:1184
 | 
			
		||||
msgid "Login Window"
 | 
			
		||||
msgstr "Okno logowania"
 | 
			
		||||
 | 
			
		||||
@@ -525,8 +525,7 @@ msgstr "Zmień tło…"
 | 
			
		||||
msgid "Display Settings"
 | 
			
		||||
msgstr "Ustawienia ekranu"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/backgroundMenu.js:22 ../js/ui/panel.js:650
 | 
			
		||||
#: ../js/ui/status/system.js:366
 | 
			
		||||
#: ../js/ui/backgroundMenu.js:22 ../js/ui/status/system.js:366
 | 
			
		||||
msgid "Settings"
 | 
			
		||||
msgstr "Ustawienia"
 | 
			
		||||
 | 
			
		||||
@@ -602,33 +601,33 @@ msgctxt "event list time"
 | 
			
		||||
msgid "All Day"
 | 
			
		||||
msgstr "Cały dzień"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1291
 | 
			
		||||
#: ../js/ui/calendar.js:1295
 | 
			
		||||
msgid "Clear section"
 | 
			
		||||
msgstr "Wyczyść"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1518
 | 
			
		||||
#: ../js/ui/calendar.js:1522
 | 
			
		||||
msgid "Events"
 | 
			
		||||
msgstr "Wydarzenia"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1527
 | 
			
		||||
#: ../js/ui/calendar.js:1531
 | 
			
		||||
msgctxt "calendar heading"
 | 
			
		||||
msgid "%A, %B %d"
 | 
			
		||||
msgstr "%A, %e %B"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1531
 | 
			
		||||
#: ../js/ui/calendar.js:1535
 | 
			
		||||
msgctxt "calendar heading"
 | 
			
		||||
msgid "%A, %B %d, %Y"
 | 
			
		||||
msgstr "%A, %e %B %Y"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1616
 | 
			
		||||
#: ../js/ui/calendar.js:1620
 | 
			
		||||
msgid "Notifications"
 | 
			
		||||
msgstr "Powiadomienia"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1767
 | 
			
		||||
#: ../js/ui/calendar.js:1771
 | 
			
		||||
msgid "No Notifications"
 | 
			
		||||
msgstr "Brak powiadomień"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/calendar.js:1770
 | 
			
		||||
#: ../js/ui/calendar.js:1774
 | 
			
		||||
msgid "No Events"
 | 
			
		||||
msgstr "Brak wydarzeń"
 | 
			
		||||
 | 
			
		||||
@@ -991,7 +990,7 @@ msgstr "Włączone"
 | 
			
		||||
 | 
			
		||||
#. translators:
 | 
			
		||||
#. * The device has been disabled
 | 
			
		||||
#: ../js/ui/lookingGlass.js:719 ../src/gvc/gvc-mixer-control.c:1830
 | 
			
		||||
#: ../js/ui/lookingGlass.js:719 ../src/gvc/gvc-mixer-control.c:1828
 | 
			
		||||
msgid "Disabled"
 | 
			
		||||
msgstr "Wyłączone"
 | 
			
		||||
 | 
			
		||||
@@ -1045,6 +1044,11 @@ msgstr "Zakończ"
 | 
			
		||||
msgid "Activities"
 | 
			
		||||
msgstr "Podgląd"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/panel.js:650
 | 
			
		||||
msgctxt "System menu in the top bar"
 | 
			
		||||
msgid "System"
 | 
			
		||||
msgstr "Menu systemowe"
 | 
			
		||||
 | 
			
		||||
#: ../js/ui/panel.js:754
 | 
			
		||||
msgid "Top Bar"
 | 
			
		||||
msgstr "Górny pasek"
 | 
			
		||||
@@ -1625,7 +1629,7 @@ msgstr "Kalendarz programu Evolution"
 | 
			
		||||
 | 
			
		||||
#. translators:
 | 
			
		||||
#. * The number of sound outputs on a particular device
 | 
			
		||||
#: ../src/gvc/gvc-mixer-control.c:1837
 | 
			
		||||
#: ../src/gvc/gvc-mixer-control.c:1835
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%u Output"
 | 
			
		||||
msgid_plural "%u Outputs"
 | 
			
		||||
@@ -1635,7 +1639,7 @@ msgstr[2] "%u wyjść"
 | 
			
		||||
 | 
			
		||||
#. translators:
 | 
			
		||||
#. * The number of sound inputs on a particular device
 | 
			
		||||
#: ../src/gvc/gvc-mixer-control.c:1847
 | 
			
		||||
#: ../src/gvc/gvc-mixer-control.c:1845
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%u Input"
 | 
			
		||||
msgid_plural "%u Inputs"
 | 
			
		||||
@@ -1643,23 +1647,23 @@ msgstr[0] "%u wejście"
 | 
			
		||||
msgstr[1] "%u wejścia"
 | 
			
		||||
msgstr[2] "%u wejść"
 | 
			
		||||
 | 
			
		||||
#: ../src/gvc/gvc-mixer-control.c:2373
 | 
			
		||||
#: ../src/gvc/gvc-mixer-control.c:2371
 | 
			
		||||
msgid "System Sounds"
 | 
			
		||||
msgstr "Dźwięki systemowe"
 | 
			
		||||
 | 
			
		||||
#: ../src/main.c:373
 | 
			
		||||
#: ../src/main.c:381
 | 
			
		||||
msgid "Print version"
 | 
			
		||||
msgstr "Wyświetla wersję"
 | 
			
		||||
 | 
			
		||||
#: ../src/main.c:379
 | 
			
		||||
#: ../src/main.c:387
 | 
			
		||||
msgid "Mode used by GDM for login screen"
 | 
			
		||||
msgstr "Tryb używany przez GDM dla ekranu logowania"
 | 
			
		||||
 | 
			
		||||
#: ../src/main.c:385
 | 
			
		||||
#: ../src/main.c:393
 | 
			
		||||
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
 | 
			
		||||
msgstr "Używa podanego trybu, np. „gdm” dla ekranu logowania"
 | 
			
		||||
 | 
			
		||||
#: ../src/main.c:391
 | 
			
		||||
#: ../src/main.c:399
 | 
			
		||||
msgid "List possible modes"
 | 
			
		||||
msgstr "Wyświetla listę możliwych trybów"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										820
									
								
								po/pt_BR.po
									
									
									
									
									
								
							
							
						
						
									
										820
									
								
								po/pt_BR.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										747
									
								
								po/sr@latin.po
									
									
									
									
									
								
							
							
						
						
									
										747
									
								
								po/sr@latin.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										680
									
								
								po/zh_CN.po
									
									
									
									
									
								
							
							
						
						
									
										680
									
								
								po/zh_CN.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -41,8 +41,6 @@
 | 
			
		||||
#define N_(x) x
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define CALENDAR_SOURCES_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), CALENDAR_TYPE_SOURCES, CalendarSourcesPrivate))
 | 
			
		||||
 | 
			
		||||
typedef struct _ClientData ClientData;
 | 
			
		||||
typedef struct _CalendarSourceData CalendarSourceData;
 | 
			
		||||
 | 
			
		||||
@@ -66,6 +64,14 @@ struct _CalendarSourceData
 | 
			
		||||
  guint            loaded : 1;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
typedef struct _CalendarSourcesPrivate CalendarSourcesPrivate;
 | 
			
		||||
 | 
			
		||||
struct _CalendarSources
 | 
			
		||||
{
 | 
			
		||||
  GObject                 parent;
 | 
			
		||||
  CalendarSourcesPrivate *priv;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _CalendarSourcesPrivate
 | 
			
		||||
{
 | 
			
		||||
  ESourceRegistry    *registry;
 | 
			
		||||
@@ -77,8 +83,8 @@ struct _CalendarSourcesPrivate
 | 
			
		||||
  CalendarSourceData  task_sources;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static void calendar_sources_class_init (CalendarSourcesClass *klass);
 | 
			
		||||
static void calendar_sources_init       (CalendarSources      *sources);
 | 
			
		||||
G_DEFINE_TYPE_WITH_PRIVATE (CalendarSources, calendar_sources, G_TYPE_OBJECT)
 | 
			
		||||
 | 
			
		||||
static void calendar_sources_finalize   (GObject             *object);
 | 
			
		||||
 | 
			
		||||
static void backend_died_cb (EClient *client, CalendarSourceData *source_data);
 | 
			
		||||
@@ -108,34 +114,6 @@ client_data_free (ClientData *data)
 | 
			
		||||
  g_slice_free (ClientData, data);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
GType
 | 
			
		||||
calendar_sources_get_type (void)
 | 
			
		||||
{
 | 
			
		||||
  static GType sources_type = 0;
 | 
			
		||||
  
 | 
			
		||||
  if (!sources_type)
 | 
			
		||||
    {
 | 
			
		||||
      static const GTypeInfo sources_info =
 | 
			
		||||
      {
 | 
			
		||||
	sizeof (CalendarSourcesClass),
 | 
			
		||||
	NULL,		/* base_init */
 | 
			
		||||
	NULL,		/* base_finalize */
 | 
			
		||||
	(GClassInitFunc) calendar_sources_class_init,
 | 
			
		||||
	NULL,           /* class_finalize */
 | 
			
		||||
	NULL,		/* class_data */
 | 
			
		||||
	sizeof (CalendarSources),
 | 
			
		||||
	0,		/* n_preallocs */
 | 
			
		||||
	(GInstanceInitFunc) calendar_sources_init,
 | 
			
		||||
      };
 | 
			
		||||
      
 | 
			
		||||
      sources_type = g_type_register_static (G_TYPE_OBJECT,
 | 
			
		||||
					     "CalendarSources",
 | 
			
		||||
					     &sources_info, 0);
 | 
			
		||||
    }
 | 
			
		||||
  
 | 
			
		||||
  return sources_type;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
calendar_sources_class_init (CalendarSourcesClass *klass)
 | 
			
		||||
{
 | 
			
		||||
@@ -145,14 +123,11 @@ calendar_sources_class_init (CalendarSourcesClass *klass)
 | 
			
		||||
 | 
			
		||||
  gobject_class->finalize = calendar_sources_finalize;
 | 
			
		||||
 | 
			
		||||
  g_type_class_add_private (klass, sizeof (CalendarSourcesPrivate));
 | 
			
		||||
 | 
			
		||||
  signals [APPOINTMENT_SOURCES_CHANGED] =
 | 
			
		||||
    g_signal_new ("appointment-sources-changed",
 | 
			
		||||
		  G_TYPE_FROM_CLASS (gobject_class),
 | 
			
		||||
		  G_SIGNAL_RUN_LAST,
 | 
			
		||||
		  G_STRUCT_OFFSET (CalendarSourcesClass,
 | 
			
		||||
				   appointment_sources_changed),
 | 
			
		||||
		  0,
 | 
			
		||||
		  NULL,
 | 
			
		||||
		  NULL,
 | 
			
		||||
                  NULL,
 | 
			
		||||
@@ -163,8 +138,7 @@ calendar_sources_class_init (CalendarSourcesClass *klass)
 | 
			
		||||
    g_signal_new ("task-sources-changed",
 | 
			
		||||
		  G_TYPE_FROM_CLASS (gobject_class),
 | 
			
		||||
		  G_SIGNAL_RUN_LAST,
 | 
			
		||||
		  G_STRUCT_OFFSET (CalendarSourcesClass,
 | 
			
		||||
				   task_sources_changed),
 | 
			
		||||
		  0,
 | 
			
		||||
		  NULL,
 | 
			
		||||
		  NULL,
 | 
			
		||||
                  NULL,
 | 
			
		||||
@@ -179,7 +153,7 @@ calendar_sources_init (CalendarSources *sources)
 | 
			
		||||
  GDBusConnection *session_bus;
 | 
			
		||||
  GVariant *result;
 | 
			
		||||
 | 
			
		||||
  sources->priv = CALENDAR_SOURCES_GET_PRIVATE (sources);
 | 
			
		||||
  sources->priv = calendar_sources_get_instance_private (sources);
 | 
			
		||||
 | 
			
		||||
  /* WORKAROUND: the hardcoded timeout for e_source_registry_new_sync()
 | 
			
		||||
     (and other library calls that eventually call g_dbus_proxy_new[_sync]())
 | 
			
		||||
 
 | 
			
		||||
@@ -28,33 +28,10 @@
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
#define CALENDAR_TYPE_SOURCES        (calendar_sources_get_type ())
 | 
			
		||||
#define CALENDAR_SOURCES(o)          (G_TYPE_CHECK_INSTANCE_CAST ((o), CALENDAR_TYPE_SOURCES, CalendarSources))
 | 
			
		||||
#define CALENDAR_SOURCES_CLASS(k)    (G_TYPE_CHECK_CLASS_CAST ((k), CALENDAR_TYPE_SOURCES, CalendarSourcesClass))
 | 
			
		||||
#define CALENDAR_IS_SOURCES(o)       (G_TYPE_CHECK_INSTANCE_TYPE ((o), CALENDAR_TYPE_SOURCES))
 | 
			
		||||
#define CALENDAR_IS_SOURCES_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), CALENDAR_TYPE_SOURCES))
 | 
			
		||||
#define CALENDAR_SOURCES_GET_CLASS(o)(G_TYPE_INSTANCE_GET_CLASS ((o), CALENDAR_TYPE_SOURCES, CalendarSourcesClass))
 | 
			
		||||
#define CALENDAR_TYPE_SOURCES (calendar_sources_get_type ())
 | 
			
		||||
G_DECLARE_FINAL_TYPE (CalendarSources, calendar_sources,
 | 
			
		||||
                      CALENDAR, SOURCES, GObject)
 | 
			
		||||
 | 
			
		||||
typedef struct _CalendarSources        CalendarSources;
 | 
			
		||||
typedef struct _CalendarSourcesClass   CalendarSourcesClass;
 | 
			
		||||
typedef struct _CalendarSourcesPrivate CalendarSourcesPrivate;
 | 
			
		||||
 | 
			
		||||
struct _CalendarSources
 | 
			
		||||
{
 | 
			
		||||
  GObject                 parent;
 | 
			
		||||
  CalendarSourcesPrivate *priv;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _CalendarSourcesClass
 | 
			
		||||
{
 | 
			
		||||
  GObjectClass    parent_class;
 | 
			
		||||
 | 
			
		||||
  void         (* appointment_sources_changed) (CalendarSources *sources);
 | 
			
		||||
  void         (* task_sources_changed)        (CalendarSources *sources);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
GType            calendar_sources_get_type                (void) G_GNUC_CONST;
 | 
			
		||||
CalendarSources *calendar_sources_get                     (void);
 | 
			
		||||
GList           *calendar_sources_get_appointment_clients (CalendarSources *sources);
 | 
			
		||||
GList           *calendar_sources_get_task_clients        (CalendarSources *sources);
 | 
			
		||||
 
 | 
			
		||||
@@ -45,8 +45,8 @@ static void gnome_shell_plugin_unminimize       (MetaPlugin          *plugin,
 | 
			
		||||
static void gnome_shell_plugin_size_change      (MetaPlugin          *plugin,
 | 
			
		||||
                                                 MetaWindowActor     *actor,
 | 
			
		||||
                                                 MetaSizeChange       which_change,
 | 
			
		||||
                                                 MetaRectangle       *old_rect,
 | 
			
		||||
                                                 MetaRectangle       *new_rect);
 | 
			
		||||
                                                 MetaRectangle       *old_frame_rect,
 | 
			
		||||
                                                 MetaRectangle       *old_buffer_rect);
 | 
			
		||||
static void gnome_shell_plugin_map              (MetaPlugin          *plugin,
 | 
			
		||||
                                                 MetaWindowActor     *actor);
 | 
			
		||||
static void gnome_shell_plugin_destroy          (MetaPlugin          *plugin,
 | 
			
		||||
 
 | 
			
		||||
@@ -176,15 +176,15 @@ gtk_menu_tracker_section_sync_separators (GtkMenuTrackerSection *section,
 | 
			
		||||
 | 
			
		||||
      if (subsection)
 | 
			
		||||
        {
 | 
			
		||||
          gboolean could_have_separator;
 | 
			
		||||
          gboolean section_could_have_separator;
 | 
			
		||||
 | 
			
		||||
          could_have_separator = (section->with_separators && n_items > 0) || subsection->separator_label;
 | 
			
		||||
          section_could_have_separator = (section->with_separators && n_items > 0) || subsection->separator_label;
 | 
			
		||||
 | 
			
		||||
          /* Only pass the parent_model and parent_index in case they may be used to create the separator. */
 | 
			
		||||
          n_items += gtk_menu_tracker_section_sync_separators (subsection, tracker, offset + n_items,
 | 
			
		||||
                                                               could_have_separator,
 | 
			
		||||
                                                               could_have_separator ? section->model : NULL,
 | 
			
		||||
                                                               could_have_separator ? i : 0);
 | 
			
		||||
                                                               section_could_have_separator,
 | 
			
		||||
                                                               section_could_have_separator ? section->model : NULL,
 | 
			
		||||
                                                               section_could_have_separator ? i : 0);
 | 
			
		||||
        }
 | 
			
		||||
      else
 | 
			
		||||
        n_items++;
 | 
			
		||||
@@ -197,11 +197,11 @@ gtk_menu_tracker_section_sync_separators (GtkMenuTrackerSection *section,
 | 
			
		||||
  if (should_have_separator > section->has_separator)
 | 
			
		||||
    {
 | 
			
		||||
      /* Add a separator */
 | 
			
		||||
      GtkMenuTrackerItem *item;
 | 
			
		||||
      GtkMenuTrackerItem *menuitem;
 | 
			
		||||
 | 
			
		||||
      item = _gtk_menu_tracker_item_new (tracker->observable, parent_model, parent_index, NULL, TRUE);
 | 
			
		||||
      (* tracker->insert_func) (item, offset, tracker->user_data);
 | 
			
		||||
      g_object_unref (item);
 | 
			
		||||
      menuitem = _gtk_menu_tracker_item_new (tracker->observable, parent_model, parent_index, NULL, TRUE);
 | 
			
		||||
      (* tracker->insert_func) (menuitem, offset, tracker->user_data);
 | 
			
		||||
      g_object_unref (menuitem);
 | 
			
		||||
 | 
			
		||||
      section->has_separator = TRUE;
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								src/gvc
									
									
									
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								src/gvc
									
									
									
									
									
								
							 Submodule src/gvc updated: fac3a900e5...0a79019088
									
								
							@@ -43,8 +43,6 @@
 | 
			
		||||
#define DIRECTORY_LOAD_ITEMS_PER_CALLBACK 100
 | 
			
		||||
#define HIGH_SCORE_RATIO 0.10
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE (ShellMimeSniffer, shell_mime_sniffer, G_TYPE_OBJECT);
 | 
			
		||||
 | 
			
		||||
enum {
 | 
			
		||||
  PROP_FILE = 1,
 | 
			
		||||
  NUM_PROPERTIES
 | 
			
		||||
@@ -72,16 +70,26 @@ typedef struct {
 | 
			
		||||
  gint total_items;
 | 
			
		||||
} DeepCountState;
 | 
			
		||||
 | 
			
		||||
typedef struct _ShellMimeSnifferPrivate   ShellMimeSnifferPrivate;
 | 
			
		||||
 | 
			
		||||
struct _ShellMimeSniffer
 | 
			
		||||
{
 | 
			
		||||
  GObject parent_instance;
 | 
			
		||||
 | 
			
		||||
  ShellMimeSnifferPrivate *priv;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _ShellMimeSnifferPrivate {
 | 
			
		||||
  GFile *file;
 | 
			
		||||
 | 
			
		||||
  GCancellable *cancellable;
 | 
			
		||||
  guint watchdog_id;
 | 
			
		||||
 | 
			
		||||
  GSimpleAsyncResult *async_result;
 | 
			
		||||
  gchar **sniffed_mime;
 | 
			
		||||
  GTask *task;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE_WITH_PRIVATE (ShellMimeSniffer, shell_mime_sniffer, G_TYPE_OBJECT);
 | 
			
		||||
 | 
			
		||||
static void deep_count_load (DeepCountState *state,
 | 
			
		||||
                             GFile *file);
 | 
			
		||||
 | 
			
		||||
@@ -179,6 +187,7 @@ prepare_async_result (DeepCountState *state)
 | 
			
		||||
  GArray *results;
 | 
			
		||||
  GPtrArray *sniffed_mime;
 | 
			
		||||
  SniffedResult result;
 | 
			
		||||
  char **mimes;
 | 
			
		||||
 | 
			
		||||
  sniffed_mime = g_ptr_array_new ();
 | 
			
		||||
  results = g_array_new (TRUE, TRUE, sizeof (SniffedResult));
 | 
			
		||||
@@ -220,10 +229,10 @@ prepare_async_result (DeepCountState *state)
 | 
			
		||||
 | 
			
		||||
 out:
 | 
			
		||||
  g_ptr_array_add (sniffed_mime, NULL);
 | 
			
		||||
  self->priv->sniffed_mime = (gchar **) g_ptr_array_free (sniffed_mime, FALSE);
 | 
			
		||||
  mimes = (gchar **) g_ptr_array_free (sniffed_mime, FALSE);
 | 
			
		||||
 | 
			
		||||
  g_array_free (results, TRUE);
 | 
			
		||||
  g_simple_async_result_complete_in_idle (self->priv->async_result);
 | 
			
		||||
  g_task_return_pointer (self->priv->task, mimes, (GDestroyNotify)g_strfreev);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* adapted from nautilus/libnautilus-private/nautilus-directory-async.c */
 | 
			
		||||
@@ -416,20 +425,17 @@ query_info_async_ready_cb (GObject *source,
 | 
			
		||||
 | 
			
		||||
  if (error != NULL)
 | 
			
		||||
    {
 | 
			
		||||
      g_simple_async_result_take_error (self->priv->async_result,
 | 
			
		||||
                                        error);
 | 
			
		||||
      g_simple_async_result_complete_in_idle (self->priv->async_result);
 | 
			
		||||
      g_task_return_error (self->priv->task, error);
 | 
			
		||||
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (g_file_info_get_file_type (info) != G_FILE_TYPE_DIRECTORY)
 | 
			
		||||
    {
 | 
			
		||||
      g_simple_async_result_set_error (self->priv->async_result,
 | 
			
		||||
                                       G_IO_ERROR,
 | 
			
		||||
                                       G_IO_ERROR_NOT_DIRECTORY,
 | 
			
		||||
                                       "Not a directory");
 | 
			
		||||
      g_simple_async_result_complete_in_idle (self->priv->async_result);
 | 
			
		||||
      g_task_return_new_error (self->priv->task,
 | 
			
		||||
                               G_IO_ERROR,
 | 
			
		||||
                               G_IO_ERROR_NOT_DIRECTORY,
 | 
			
		||||
                               "Not a directory");
 | 
			
		||||
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
@@ -475,7 +481,7 @@ shell_mime_sniffer_dispose (GObject *object)
 | 
			
		||||
 | 
			
		||||
  g_clear_object (&self->priv->file);
 | 
			
		||||
  g_clear_object (&self->priv->cancellable);
 | 
			
		||||
  g_clear_object (&self->priv->async_result);
 | 
			
		||||
  g_clear_object (&self->priv->task);
 | 
			
		||||
 | 
			
		||||
  if (self->priv->watchdog_id != 0)
 | 
			
		||||
    {
 | 
			
		||||
@@ -486,16 +492,6 @@ shell_mime_sniffer_dispose (GObject *object)
 | 
			
		||||
  G_OBJECT_CLASS (shell_mime_sniffer_parent_class)->dispose (object);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
shell_mime_sniffer_finalize (GObject *object)
 | 
			
		||||
{
 | 
			
		||||
  ShellMimeSniffer *self = SHELL_MIME_SNIFFER (object);
 | 
			
		||||
 | 
			
		||||
  g_strfreev (self->priv->sniffed_mime);
 | 
			
		||||
 | 
			
		||||
  G_OBJECT_CLASS (shell_mime_sniffer_parent_class)->finalize (object);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
shell_mime_sniffer_get_property (GObject *object,
 | 
			
		||||
                                guint       prop_id,
 | 
			
		||||
@@ -539,7 +535,6 @@ shell_mime_sniffer_class_init (ShellMimeSnifferClass *klass)
 | 
			
		||||
 | 
			
		||||
  oclass = G_OBJECT_CLASS (klass);
 | 
			
		||||
  oclass->dispose = shell_mime_sniffer_dispose;
 | 
			
		||||
  oclass->finalize = shell_mime_sniffer_finalize;
 | 
			
		||||
  oclass->get_property = shell_mime_sniffer_get_property;
 | 
			
		||||
  oclass->set_property = shell_mime_sniffer_set_property;
 | 
			
		||||
 | 
			
		||||
@@ -550,17 +545,13 @@ shell_mime_sniffer_class_init (ShellMimeSnifferClass *klass)
 | 
			
		||||
                         G_TYPE_FILE,
 | 
			
		||||
                         G_PARAM_READWRITE);
 | 
			
		||||
 | 
			
		||||
  g_type_class_add_private (klass, sizeof (ShellMimeSnifferPrivate));
 | 
			
		||||
  g_object_class_install_properties (oclass, NUM_PROPERTIES, properties);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
shell_mime_sniffer_init (ShellMimeSniffer *self)
 | 
			
		||||
{
 | 
			
		||||
  self->priv =
 | 
			
		||||
    G_TYPE_INSTANCE_GET_PRIVATE (self,
 | 
			
		||||
                                 SHELL_TYPE_MIME_SNIFFER,
 | 
			
		||||
                                 ShellMimeSnifferPrivate);
 | 
			
		||||
  self->priv = shell_mime_sniffer_get_instance_private (self);
 | 
			
		||||
  init_mimetypes ();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -578,14 +569,11 @@ shell_mime_sniffer_sniff_async (ShellMimeSniffer *self,
 | 
			
		||||
                                gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
  g_assert (self->priv->watchdog_id == 0);
 | 
			
		||||
  g_assert (self->priv->async_result == NULL);
 | 
			
		||||
  g_assert (self->priv->task == NULL);
 | 
			
		||||
 | 
			
		||||
  self->priv->async_result = 
 | 
			
		||||
    g_simple_async_result_new (G_OBJECT (self),
 | 
			
		||||
                               callback, user_data,
 | 
			
		||||
                               shell_mime_sniffer_sniff_finish);
 | 
			
		||||
  
 | 
			
		||||
  self->priv->cancellable = g_cancellable_new ();
 | 
			
		||||
  self->priv->task = g_task_new (self, self->priv->cancellable,
 | 
			
		||||
                                 callback, user_data);
 | 
			
		||||
 | 
			
		||||
  self->priv->watchdog_id =
 | 
			
		||||
    g_timeout_add (WATCHDOG_TIMEOUT,
 | 
			
		||||
@@ -600,8 +588,5 @@ shell_mime_sniffer_sniff_finish (ShellMimeSniffer *self,
 | 
			
		||||
                                 GAsyncResult *res,
 | 
			
		||||
                                 GError **error)
 | 
			
		||||
{
 | 
			
		||||
  if (g_simple_async_result_propagate_error (self->priv->async_result, error))
 | 
			
		||||
    return NULL;
 | 
			
		||||
 | 
			
		||||
  return g_strdupv (self->priv->sniffed_mime);
 | 
			
		||||
  return g_task_propagate_pointer (self->priv->task, error);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -27,30 +27,9 @@
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
#define SHELL_TYPE_MIME_SNIFFER            (shell_mime_sniffer_get_type ())
 | 
			
		||||
#define SHELL_MIME_SNIFFER(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), SHELL_TYPE_MIME_SNIFFER, ShellMimeSniffer))
 | 
			
		||||
#define SHELL_IS_MIME_SNIFFER(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SHELL_TYPE_MIME_SNIFFER))
 | 
			
		||||
#define SHELL_MIME_SNIFFER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass),  SHELL_TYPE_MIME_SNIFFER, ShellMimeSnifferClass))
 | 
			
		||||
#define SHELL_IS_MIME_SNIFFER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),  SHELL_TYPE_MIME_SNIFFER))
 | 
			
		||||
#define SHELL_MIME_SNIFFER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj),  SHELL_TYPE_MIME_SNIFFER, ShellMimeSnifferClass))
 | 
			
		||||
 | 
			
		||||
typedef struct _ShellMimeSniffer          ShellMimeSniffer;
 | 
			
		||||
typedef struct _ShellMimeSnifferPrivate   ShellMimeSnifferPrivate;
 | 
			
		||||
typedef struct _ShellMimeSnifferClass     ShellMimeSnifferClass;
 | 
			
		||||
 | 
			
		||||
struct _ShellMimeSniffer
 | 
			
		||||
{
 | 
			
		||||
  GObject parent_instance;
 | 
			
		||||
 | 
			
		||||
  ShellMimeSnifferPrivate *priv;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _ShellMimeSnifferClass
 | 
			
		||||
{
 | 
			
		||||
  GObjectClass parent_class;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
GType    shell_mime_sniffer_get_type     (void) G_GNUC_CONST;
 | 
			
		||||
#define SHELL_TYPE_MIME_SNIFFER (shell_mime_sniffer_get_type ())
 | 
			
		||||
G_DECLARE_FINAL_TYPE (ShellMimeSniffer, shell_mime_sniffer,
 | 
			
		||||
                      SHELL, MIME_SNIFFER, GObject)
 | 
			
		||||
 | 
			
		||||
ShellMimeSniffer *shell_mime_sniffer_new (GFile *file);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										36
									
								
								src/main.c
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								src/main.c
									
									
									
									
									
								
							@@ -51,11 +51,11 @@ enum {
 | 
			
		||||
static int _shell_debug;
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
shell_dbus_acquire_name (GDBusProxy *bus,
 | 
			
		||||
                         guint32     request_name_flags,
 | 
			
		||||
                         guint32    *request_name_result,
 | 
			
		||||
                         gchar      *name,
 | 
			
		||||
                         gboolean    fatal)
 | 
			
		||||
shell_dbus_acquire_name (GDBusProxy  *bus,
 | 
			
		||||
                         guint32      request_name_flags,
 | 
			
		||||
                         guint32     *request_name_result,
 | 
			
		||||
                         const gchar *name,
 | 
			
		||||
                         gboolean     fatal)
 | 
			
		||||
{
 | 
			
		||||
  GError *error = NULL;
 | 
			
		||||
  GVariant *request_name_variant;
 | 
			
		||||
@@ -69,24 +69,26 @@ shell_dbus_acquire_name (GDBusProxy *bus,
 | 
			
		||||
                                                       &error)))
 | 
			
		||||
    {
 | 
			
		||||
      g_printerr ("failed to acquire %s: %s\n", name, error->message);
 | 
			
		||||
      g_clear_error (&error);
 | 
			
		||||
      if (!fatal)
 | 
			
		||||
        return;
 | 
			
		||||
      exit (1);
 | 
			
		||||
    }
 | 
			
		||||
  g_variant_get (request_name_variant, "(u)", request_name_result);
 | 
			
		||||
  g_variant_unref (request_name_variant);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
shell_dbus_acquire_names (GDBusProxy *bus,
 | 
			
		||||
                          guint32     request_name_flags,
 | 
			
		||||
                          gchar      *name,
 | 
			
		||||
                          gboolean    fatal, ...) G_GNUC_NULL_TERMINATED;
 | 
			
		||||
shell_dbus_acquire_names (GDBusProxy  *bus,
 | 
			
		||||
                          guint32      request_name_flags,
 | 
			
		||||
                          const gchar *name,
 | 
			
		||||
                          gboolean     fatal, ...) G_GNUC_NULL_TERMINATED;
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
shell_dbus_acquire_names (GDBusProxy *bus,
 | 
			
		||||
                          guint32     request_name_flags,
 | 
			
		||||
                          gchar      *name,
 | 
			
		||||
                          gboolean    fatal, ...)
 | 
			
		||||
shell_dbus_acquire_names (GDBusProxy  *bus,
 | 
			
		||||
                          guint32      request_name_flags,
 | 
			
		||||
                          const gchar *name,
 | 
			
		||||
                          gboolean     fatal, ...)
 | 
			
		||||
{
 | 
			
		||||
  va_list al;
 | 
			
		||||
  guint32 request_name_result;
 | 
			
		||||
@@ -130,6 +132,12 @@ shell_dbus_init (gboolean replace)
 | 
			
		||||
                               NULL, /* cancellable */
 | 
			
		||||
                               &error);
 | 
			
		||||
 | 
			
		||||
  if (!bus)
 | 
			
		||||
    {
 | 
			
		||||
      g_printerr ("Failed to get a session bus proxy: %s", error->message);
 | 
			
		||||
      exit (1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  request_name_flags = G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT;
 | 
			
		||||
  if (replace)
 | 
			
		||||
    request_name_flags |= DBUS_NAME_FLAG_REPLACE_EXISTING;
 | 
			
		||||
@@ -454,7 +462,7 @@ main (int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
  /* Initialize the global object */
 | 
			
		||||
  if (session_mode == NULL)
 | 
			
		||||
    session_mode = is_gdm_mode ? "gdm" : "user";
 | 
			
		||||
    session_mode = is_gdm_mode ? (char *)"gdm" : (char *)"user";
 | 
			
		||||
 | 
			
		||||
  _shell_global_init ("session-mode", session_mode, NULL);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -37,6 +37,15 @@ enum {
 | 
			
		||||
 | 
			
		||||
static guint signals[LAST_SIGNAL] = { 0 };
 | 
			
		||||
 | 
			
		||||
typedef struct _ShellAppSystemPrivate ShellAppSystemPrivate;
 | 
			
		||||
 | 
			
		||||
struct _ShellAppSystem
 | 
			
		||||
{
 | 
			
		||||
  GObject parent;
 | 
			
		||||
 | 
			
		||||
  ShellAppSystemPrivate *priv;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _ShellAppSystemPrivate {
 | 
			
		||||
  GHashTable *running_apps;
 | 
			
		||||
  GHashTable *id_to_app;
 | 
			
		||||
@@ -45,7 +54,7 @@ struct _ShellAppSystemPrivate {
 | 
			
		||||
 | 
			
		||||
static void shell_app_system_finalize (GObject *object);
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE(ShellAppSystem, shell_app_system, G_TYPE_OBJECT);
 | 
			
		||||
G_DEFINE_TYPE_WITH_PRIVATE (ShellAppSystem, shell_app_system, G_TYPE_OBJECT);
 | 
			
		||||
 | 
			
		||||
static void shell_app_system_class_init(ShellAppSystemClass *klass)
 | 
			
		||||
{
 | 
			
		||||
@@ -64,11 +73,9 @@ static void shell_app_system_class_init(ShellAppSystemClass *klass)
 | 
			
		||||
    g_signal_new ("installed-changed",
 | 
			
		||||
		  SHELL_TYPE_APP_SYSTEM,
 | 
			
		||||
		  G_SIGNAL_RUN_LAST,
 | 
			
		||||
		  G_STRUCT_OFFSET (ShellAppSystemClass, installed_changed),
 | 
			
		||||
          NULL, NULL, NULL,
 | 
			
		||||
                  0,
 | 
			
		||||
                  NULL, NULL, NULL,
 | 
			
		||||
		  G_TYPE_NONE, 0);
 | 
			
		||||
 | 
			
		||||
  g_type_class_add_private (gobject_class, sizeof (ShellAppSystemPrivate));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -147,9 +154,7 @@ shell_app_system_init (ShellAppSystem *self)
 | 
			
		||||
  ShellAppSystemPrivate *priv;
 | 
			
		||||
  GAppInfoMonitor *monitor;
 | 
			
		||||
 | 
			
		||||
  self->priv = priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
 | 
			
		||||
                                                   SHELL_TYPE_APP_SYSTEM,
 | 
			
		||||
                                                   ShellAppSystemPrivate);
 | 
			
		||||
  self->priv = priv = shell_app_system_get_instance_private (self);
 | 
			
		||||
 | 
			
		||||
  priv->running_apps = g_hash_table_new_full (NULL, NULL, (GDestroyNotify) g_object_unref, NULL);
 | 
			
		||||
  priv->id_to_app = g_hash_table_new_full (g_str_hash, g_str_equal,
 | 
			
		||||
@@ -182,7 +187,7 @@ shell_app_system_finalize (GObject *object)
 | 
			
		||||
 * Return Value: (transfer none): The global #ShellAppSystem singleton
 | 
			
		||||
 */
 | 
			
		||||
ShellAppSystem *
 | 
			
		||||
shell_app_system_get_default ()
 | 
			
		||||
shell_app_system_get_default (void)
 | 
			
		||||
{
 | 
			
		||||
  static ShellAppSystem *instance = NULL;
 | 
			
		||||
 | 
			
		||||
@@ -348,6 +353,9 @@ _shell_app_system_notify_app_state_changed (ShellAppSystem *self,
 | 
			
		||||
    case SHELL_APP_STATE_STOPPED:
 | 
			
		||||
      g_hash_table_remove (self->priv->running_apps, app);
 | 
			
		||||
      break;
 | 
			
		||||
    default:
 | 
			
		||||
      g_warn_if_reached();
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
  g_signal_emit (self, signals[APP_STATE_CHANGED], 0, app);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -8,33 +8,10 @@
 | 
			
		||||
 | 
			
		||||
#include "shell-app.h"
 | 
			
		||||
 | 
			
		||||
#define SHELL_TYPE_APP_SYSTEM                 (shell_app_system_get_type ())
 | 
			
		||||
#define SHELL_APP_SYSTEM(obj)                 (G_TYPE_CHECK_INSTANCE_CAST ((obj), SHELL_TYPE_APP_SYSTEM, ShellAppSystem))
 | 
			
		||||
#define SHELL_APP_SYSTEM_CLASS(klass)         (G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_APP_SYSTEM, ShellAppSystemClass))
 | 
			
		||||
#define SHELL_IS_APP_SYSTEM(obj)              (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SHELL_TYPE_APP_SYSTEM))
 | 
			
		||||
#define SHELL_IS_APP_SYSTEM_CLASS(klass)      (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_APP_SYSTEM))
 | 
			
		||||
#define SHELL_APP_SYSTEM_GET_CLASS(obj)       (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_APP_SYSTEM, ShellAppSystemClass))
 | 
			
		||||
#define SHELL_TYPE_APP_SYSTEM (shell_app_system_get_type ())
 | 
			
		||||
G_DECLARE_FINAL_TYPE (ShellAppSystem, shell_app_system,
 | 
			
		||||
                      SHELL, APP_SYSTEM, GObject)
 | 
			
		||||
 | 
			
		||||
typedef struct _ShellAppSystem ShellAppSystem;
 | 
			
		||||
typedef struct _ShellAppSystemClass ShellAppSystemClass;
 | 
			
		||||
typedef struct _ShellAppSystemPrivate ShellAppSystemPrivate;
 | 
			
		||||
 | 
			
		||||
struct _ShellAppSystem
 | 
			
		||||
{
 | 
			
		||||
  GObject parent;
 | 
			
		||||
 | 
			
		||||
  ShellAppSystemPrivate *priv;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _ShellAppSystemClass
 | 
			
		||||
{
 | 
			
		||||
  GObjectClass parent_class;
 | 
			
		||||
 | 
			
		||||
  void (*installed_changed)(ShellAppSystem *appsys, gpointer user_data);
 | 
			
		||||
  void (*favorites_changed)(ShellAppSystem *appsys, gpointer user_data);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
GType           shell_app_system_get_type    (void) G_GNUC_CONST;
 | 
			
		||||
ShellAppSystem *shell_app_system_get_default (void);
 | 
			
		||||
 | 
			
		||||
ShellApp       *shell_app_system_lookup_app                   (ShellAppSystem  *system,
 | 
			
		||||
 
 | 
			
		||||
@@ -996,7 +996,7 @@ on_enable_monitoring_key_changed (GSettings     *settings,
 | 
			
		||||
 * Return Value: (transfer none): The global #ShellAppUsage instance
 | 
			
		||||
 */
 | 
			
		||||
ShellAppUsage *
 | 
			
		||||
shell_app_usage_get_default ()
 | 
			
		||||
shell_app_usage_get_default (void)
 | 
			
		||||
{
 | 
			
		||||
  static ShellAppUsage *instance;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,23 +7,9 @@
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
typedef struct _ShellAppUsage ShellAppUsage;
 | 
			
		||||
typedef struct _ShellAppUsageClass ShellAppUsageClass;
 | 
			
		||||
typedef struct _ShellAppUsagePrivate ShellAppUsagePrivate;
 | 
			
		||||
 | 
			
		||||
#define SHELL_TYPE_APP_USAGE              (shell_app_usage_get_type ())
 | 
			
		||||
#define SHELL_APP_USAGE(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), SHELL_TYPE_APP_USAGE, ShellAppUsage))
 | 
			
		||||
#define SHELL_APP_USAGE_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_APP_USAGE, ShellAppUsageClass))
 | 
			
		||||
#define SHELL_IS_APP_USAGE(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), SHELL_TYPE_APP_USAGE))
 | 
			
		||||
#define SHELL_IS_APP_USAGE_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_APP_USAGE))
 | 
			
		||||
#define SHELL_APP_USAGE_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_APP_USAGE, ShellAppUsageClass))
 | 
			
		||||
 | 
			
		||||
struct _ShellAppUsageClass
 | 
			
		||||
{
 | 
			
		||||
  GObjectClass parent_class;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
GType shell_app_usage_get_type (void) G_GNUC_CONST;
 | 
			
		||||
G_DECLARE_FINAL_TYPE (ShellAppUsage, shell_app_usage,
 | 
			
		||||
                      SHELL, APP_USAGE, GObject)
 | 
			
		||||
 | 
			
		||||
ShellAppUsage* shell_app_usage_get_default(void);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -156,16 +156,20 @@ static MetaWindow *
 | 
			
		||||
window_backed_app_get_window (ShellApp     *app)
 | 
			
		||||
{
 | 
			
		||||
  g_assert (app->info == NULL);
 | 
			
		||||
  g_assert (app->running_state);
 | 
			
		||||
  g_assert (app->running_state->windows);
 | 
			
		||||
  return app->running_state->windows->data;
 | 
			
		||||
  if (app->running_state)
 | 
			
		||||
    {
 | 
			
		||||
      g_assert (app->running_state->windows);
 | 
			
		||||
      return app->running_state->windows->data;
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static ClutterActor *
 | 
			
		||||
window_backed_app_get_icon (ShellApp *app,
 | 
			
		||||
                            int       size)
 | 
			
		||||
{
 | 
			
		||||
  MetaWindow *window;
 | 
			
		||||
  MetaWindow *window = NULL;
 | 
			
		||||
  ClutterActor *actor;
 | 
			
		||||
  gint scale;
 | 
			
		||||
  ShellGlobal *global;
 | 
			
		||||
@@ -181,14 +185,16 @@ window_backed_app_get_icon (ShellApp *app,
 | 
			
		||||
   * window-backend apps, it's possible we get a request for the icon.
 | 
			
		||||
   * Avoid asserting here and just return an empty image.
 | 
			
		||||
   */
 | 
			
		||||
  if (app->running_state == NULL)
 | 
			
		||||
  if (app->running_state != NULL)
 | 
			
		||||
    window = window_backed_app_get_window (app);
 | 
			
		||||
 | 
			
		||||
  if (window == NULL)
 | 
			
		||||
    {
 | 
			
		||||
      actor = clutter_texture_new ();
 | 
			
		||||
      g_object_set (actor, "opacity", 0, "width", (float) size, "height", (float) size, NULL);
 | 
			
		||||
      return actor;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  window = window_backed_app_get_window (app);
 | 
			
		||||
  actor = st_texture_cache_bind_cairo_surface_property (st_texture_cache_get_default (),
 | 
			
		||||
                                                        G_OBJECT (window),
 | 
			
		||||
                                                        "icon");
 | 
			
		||||
@@ -232,9 +238,10 @@ shell_app_get_name (ShellApp *app)
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      MetaWindow *window = window_backed_app_get_window (app);
 | 
			
		||||
      const char *name;
 | 
			
		||||
      const char *name = NULL;
 | 
			
		||||
 | 
			
		||||
      name = meta_window_get_wm_class (window);
 | 
			
		||||
      if (window)
 | 
			
		||||
        name = meta_window_get_wm_class (window);
 | 
			
		||||
      if (!name)
 | 
			
		||||
        name = C_("program", "Unknown");
 | 
			
		||||
      return name;
 | 
			
		||||
@@ -491,6 +498,9 @@ shell_app_activate_full (ShellApp      *app,
 | 
			
		||||
      case SHELL_APP_STATE_RUNNING:
 | 
			
		||||
        shell_app_activate_window (app, NULL, timestamp);
 | 
			
		||||
        break;
 | 
			
		||||
      default:
 | 
			
		||||
        g_assert_not_reached();
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -699,7 +709,7 @@ static int
 | 
			
		||||
shell_app_get_last_user_time (ShellApp *app)
 | 
			
		||||
{
 | 
			
		||||
  GSList *iter;
 | 
			
		||||
  int last_user_time;
 | 
			
		||||
  guint32 last_user_time;
 | 
			
		||||
 | 
			
		||||
  last_user_time = 0;
 | 
			
		||||
 | 
			
		||||
@@ -709,7 +719,7 @@ shell_app_get_last_user_time (ShellApp *app)
 | 
			
		||||
        last_user_time = MAX (last_user_time, meta_window_get_user_time (iter->data));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  return last_user_time;
 | 
			
		||||
  return (int)last_user_time;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -1151,7 +1161,13 @@ shell_app_launch (ShellApp     *app,
 | 
			
		||||
  if (app->info == NULL)
 | 
			
		||||
    {
 | 
			
		||||
      MetaWindow *window = window_backed_app_get_window (app);
 | 
			
		||||
      meta_window_activate (window, timestamp);
 | 
			
		||||
      /* We don't use an error return if there no longer any windows, because the
 | 
			
		||||
       * user attempting to activate a stale window backed app isn't something
 | 
			
		||||
       * we would expect the caller to meaningfully handle or display an error
 | 
			
		||||
       * message to the user.
 | 
			
		||||
       */
 | 
			
		||||
      if (window)
 | 
			
		||||
        meta_window_activate (window, timestamp);
 | 
			
		||||
      return TRUE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -9,23 +9,8 @@
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
typedef struct _ShellApp ShellApp;
 | 
			
		||||
typedef struct _ShellAppClass ShellAppClass;
 | 
			
		||||
typedef struct _ShellAppPrivate ShellAppPrivate;
 | 
			
		||||
typedef struct _ShellAppAction ShellAppAction;
 | 
			
		||||
 | 
			
		||||
#define SHELL_TYPE_APP              (shell_app_get_type ())
 | 
			
		||||
#define SHELL_APP(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), SHELL_TYPE_APP, ShellApp))
 | 
			
		||||
#define SHELL_APP_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_APP, ShellAppClass))
 | 
			
		||||
#define SHELL_IS_APP(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), SHELL_TYPE_APP))
 | 
			
		||||
#define SHELL_IS_APP_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_APP))
 | 
			
		||||
#define SHELL_APP_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_APP, ShellAppClass))
 | 
			
		||||
 | 
			
		||||
struct _ShellAppClass
 | 
			
		||||
{
 | 
			
		||||
  GObjectClass parent_class;
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
#define SHELL_TYPE_APP (shell_app_get_type ())
 | 
			
		||||
G_DECLARE_FINAL_TYPE (ShellApp, shell_app, SHELL, APP, GObject)
 | 
			
		||||
 | 
			
		||||
typedef enum {
 | 
			
		||||
  SHELL_APP_STATE_STOPPED,
 | 
			
		||||
@@ -33,8 +18,6 @@ typedef enum {
 | 
			
		||||
  SHELL_APP_STATE_RUNNING
 | 
			
		||||
} ShellAppState;
 | 
			
		||||
 | 
			
		||||
GType shell_app_get_type (void) G_GNUC_CONST;
 | 
			
		||||
 | 
			
		||||
const char *shell_app_get_id (ShellApp *app);
 | 
			
		||||
 | 
			
		||||
GDesktopAppInfo *shell_app_get_app_info (ShellApp *app);
 | 
			
		||||
 
 | 
			
		||||
@@ -23,18 +23,22 @@
 | 
			
		||||
 * - Actor is mapped [actor and all parents visible, actor in stage]
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE (ShellEmbeddedWindow, shell_embedded_window, GTK_TYPE_WINDOW);
 | 
			
		||||
 | 
			
		||||
enum {
 | 
			
		||||
   PROP_0
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
typedef struct _ShellEmbeddedWindowPrivate ShellEmbeddedWindowPrivate;
 | 
			
		||||
 | 
			
		||||
struct _ShellEmbeddedWindowPrivate {
 | 
			
		||||
  ShellGtkEmbed *actor;
 | 
			
		||||
 | 
			
		||||
  GdkRectangle position;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE_WITH_PRIVATE (ShellEmbeddedWindow,
 | 
			
		||||
                            shell_embedded_window,
 | 
			
		||||
                            GTK_TYPE_WINDOW);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * The normal gtk_window_show() starts all of the complicated asynchronous
 | 
			
		||||
 * window resizing code running; we don't want or need any of that.
 | 
			
		||||
@@ -47,19 +51,22 @@ static void
 | 
			
		||||
shell_embedded_window_show (GtkWidget *widget)
 | 
			
		||||
{
 | 
			
		||||
  ShellEmbeddedWindow *window = SHELL_EMBEDDED_WINDOW (widget);
 | 
			
		||||
  ShellEmbeddedWindowPrivate *priv;
 | 
			
		||||
  GtkWidgetClass *widget_class;
 | 
			
		||||
 | 
			
		||||
  priv = shell_embedded_window_get_instance_private (window);
 | 
			
		||||
 | 
			
		||||
  /* Skip GtkWindow, but run the default GtkWidget handling which
 | 
			
		||||
   * marks the widget visible */
 | 
			
		||||
  widget_class = g_type_class_peek (GTK_TYPE_WIDGET);
 | 
			
		||||
  widget_class->show (widget);
 | 
			
		||||
 | 
			
		||||
  if (window->priv->actor)
 | 
			
		||||
  if (priv->actor)
 | 
			
		||||
    {
 | 
			
		||||
      /* Size is 0x0 if the GtkWindow is not shown */
 | 
			
		||||
      clutter_actor_queue_relayout (CLUTTER_ACTOR (window->priv->actor));
 | 
			
		||||
      clutter_actor_queue_relayout (CLUTTER_ACTOR (priv->actor));
 | 
			
		||||
 | 
			
		||||
      if (clutter_actor_is_realized (CLUTTER_ACTOR (window->priv->actor)))
 | 
			
		||||
      if (clutter_actor_is_realized (CLUTTER_ACTOR (priv->actor)))
 | 
			
		||||
        gtk_widget_map (widget);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -68,9 +75,12 @@ static void
 | 
			
		||||
shell_embedded_window_hide (GtkWidget *widget)
 | 
			
		||||
{
 | 
			
		||||
  ShellEmbeddedWindow *window = SHELL_EMBEDDED_WINDOW (widget);
 | 
			
		||||
  ShellEmbeddedWindowPrivate *priv;
 | 
			
		||||
 | 
			
		||||
  if (window->priv->actor)
 | 
			
		||||
    clutter_actor_queue_relayout (CLUTTER_ACTOR (window->priv->actor));
 | 
			
		||||
  priv = shell_embedded_window_get_instance_private (window);
 | 
			
		||||
 | 
			
		||||
  if (priv->actor)
 | 
			
		||||
    clutter_actor_queue_relayout (CLUTTER_ACTOR (priv->actor));
 | 
			
		||||
 | 
			
		||||
  GTK_WIDGET_CLASS (shell_embedded_window_parent_class)->hide (widget);
 | 
			
		||||
}
 | 
			
		||||
@@ -90,6 +100,9 @@ static void
 | 
			
		||||
shell_embedded_window_check_resize (GtkContainer *container)
 | 
			
		||||
{
 | 
			
		||||
  ShellEmbeddedWindow *window = SHELL_EMBEDDED_WINDOW (container);
 | 
			
		||||
  ShellEmbeddedWindowPrivate *priv;
 | 
			
		||||
 | 
			
		||||
  priv = shell_embedded_window_get_instance_private (window);
 | 
			
		||||
 | 
			
		||||
  /* Check resize is called when a resize is queued on something
 | 
			
		||||
   * inside the GtkWindow; we need to make sure that in response
 | 
			
		||||
@@ -97,8 +110,8 @@ shell_embedded_window_check_resize (GtkContainer *container)
 | 
			
		||||
   * gtk_widget_size_allocate() are called; we defer to the Clutter
 | 
			
		||||
   * logic and assume it will do the right thing.
 | 
			
		||||
   */
 | 
			
		||||
  if (window->priv->actor)
 | 
			
		||||
    clutter_actor_queue_relayout (CLUTTER_ACTOR (window->priv->actor));
 | 
			
		||||
  if (priv->actor)
 | 
			
		||||
    clutter_actor_queue_relayout (CLUTTER_ACTOR (priv->actor));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static GObject *
 | 
			
		||||
@@ -134,8 +147,6 @@ shell_embedded_window_class_init (ShellEmbeddedWindowClass *klass)
 | 
			
		||||
  GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
 | 
			
		||||
  GtkContainerClass *container_class = GTK_CONTAINER_CLASS (klass);
 | 
			
		||||
 | 
			
		||||
  g_type_class_add_private (klass, sizeof (ShellEmbeddedWindowPrivate));
 | 
			
		||||
 | 
			
		||||
  object_class->constructor     = shell_embedded_window_constructor;
 | 
			
		||||
 | 
			
		||||
  widget_class->show            = shell_embedded_window_show;
 | 
			
		||||
@@ -148,8 +159,6 @@ shell_embedded_window_class_init (ShellEmbeddedWindowClass *klass)
 | 
			
		||||
static void
 | 
			
		||||
shell_embedded_window_init (ShellEmbeddedWindow *window)
 | 
			
		||||
{
 | 
			
		||||
  window->priv = G_TYPE_INSTANCE_GET_PRIVATE (window, SHELL_TYPE_EMBEDDED_WINDOW,
 | 
			
		||||
                                              ShellEmbeddedWindowPrivate);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
@@ -161,9 +170,12 @@ _shell_embedded_window_set_actor (ShellEmbeddedWindow  *window,
 | 
			
		||||
                                  ShellGtkEmbed        *actor)
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
  ShellEmbeddedWindowPrivate *priv;
 | 
			
		||||
 | 
			
		||||
  g_return_if_fail (SHELL_IS_EMBEDDED_WINDOW (window));
 | 
			
		||||
 | 
			
		||||
  window->priv->actor = actor;
 | 
			
		||||
  priv = shell_embedded_window_get_instance_private (window);
 | 
			
		||||
  priv->actor = actor;
 | 
			
		||||
 | 
			
		||||
  if (actor &&
 | 
			
		||||
      clutter_actor_is_mapped (CLUTTER_ACTOR (actor)) &&
 | 
			
		||||
@@ -178,20 +190,23 @@ _shell_embedded_window_allocate (ShellEmbeddedWindow *window,
 | 
			
		||||
                                 int                  width,
 | 
			
		||||
                                 int                  height)
 | 
			
		||||
{
 | 
			
		||||
  ShellEmbeddedWindowPrivate *priv;
 | 
			
		||||
  GtkAllocation allocation;
 | 
			
		||||
 | 
			
		||||
  g_return_if_fail (SHELL_IS_EMBEDDED_WINDOW (window));
 | 
			
		||||
 | 
			
		||||
  if (window->priv->position.x == x &&
 | 
			
		||||
      window->priv->position.y == y &&
 | 
			
		||||
      window->priv->position.width == width &&
 | 
			
		||||
      window->priv->position.height == height)
 | 
			
		||||
  priv = shell_embedded_window_get_instance_private (window);
 | 
			
		||||
 | 
			
		||||
  if (priv->position.x == x &&
 | 
			
		||||
      priv->position.y == y &&
 | 
			
		||||
      priv->position.width == width &&
 | 
			
		||||
      priv->position.height == height)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  window->priv->position.x = x;
 | 
			
		||||
  window->priv->position.y = y;
 | 
			
		||||
  window->priv->position.width = width;
 | 
			
		||||
  window->priv->position.height = height;
 | 
			
		||||
  priv->position.x = x;
 | 
			
		||||
  priv->position.y = y;
 | 
			
		||||
  priv->position.width = width;
 | 
			
		||||
  priv->position.height = height;
 | 
			
		||||
 | 
			
		||||
  if (gtk_widget_get_realized (GTK_WIDGET (window)))
 | 
			
		||||
    gdk_window_move_resize (gtk_widget_get_window (GTK_WIDGET (window)),
 | 
			
		||||
 
 | 
			
		||||
@@ -5,31 +5,15 @@
 | 
			
		||||
#include <gtk/gtk.h>
 | 
			
		||||
#include <clutter/clutter.h>
 | 
			
		||||
 | 
			
		||||
#define SHELL_TYPE_EMBEDDED_WINDOW                 (shell_embedded_window_get_type ())
 | 
			
		||||
#define SHELL_EMBEDDED_WINDOW(obj)                 (G_TYPE_CHECK_INSTANCE_CAST ((obj), SHELL_TYPE_EMBEDDED_WINDOW, ShellEmbeddedWindow))
 | 
			
		||||
#define SHELL_EMBEDDED_WINDOW_CLASS(klass)         (G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_EMBEDDED_WINDOW, ShellEmbeddedWindowClass))
 | 
			
		||||
#define SHELL_IS_EMBEDDED_WINDOW(obj)              (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SHELL_TYPE_EMBEDDED_WINDOW))
 | 
			
		||||
#define SHELL_IS_EMBEDDED_WINDOW_CLASS(klass)      (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_EMBEDDED_WINDOW))
 | 
			
		||||
#define SHELL_EMBEDDED_WINDOW_GET_CLASS(obj)       (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_EMBEDDED_WINDOW, ShellEmbeddedWindowClass))
 | 
			
		||||
 | 
			
		||||
typedef struct _ShellEmbeddedWindow        ShellEmbeddedWindow;
 | 
			
		||||
typedef struct _ShellEmbeddedWindowClass   ShellEmbeddedWindowClass;
 | 
			
		||||
 | 
			
		||||
typedef struct _ShellEmbeddedWindowPrivate ShellEmbeddedWindowPrivate;
 | 
			
		||||
 | 
			
		||||
struct _ShellEmbeddedWindow
 | 
			
		||||
{
 | 
			
		||||
  GtkWindow parent;
 | 
			
		||||
 | 
			
		||||
  ShellEmbeddedWindowPrivate *priv;
 | 
			
		||||
};
 | 
			
		||||
#define SHELL_TYPE_EMBEDDED_WINDOW (shell_embedded_window_get_type ())
 | 
			
		||||
G_DECLARE_DERIVABLE_TYPE (ShellEmbeddedWindow, shell_embedded_window,
 | 
			
		||||
                          SHELL, EMBEDDED_WINDOW, GtkWindow)
 | 
			
		||||
 | 
			
		||||
struct _ShellEmbeddedWindowClass
 | 
			
		||||
{
 | 
			
		||||
  GtkWindowClass parent_class;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
GType shell_embedded_window_get_type (void) G_GNUC_CONST;
 | 
			
		||||
GtkWidget *shell_embedded_window_new (void);
 | 
			
		||||
 | 
			
		||||
#endif /* __SHELL_EMBEDDED_WINDOW_H__ */
 | 
			
		||||
 
 | 
			
		||||
@@ -23,16 +23,26 @@
 | 
			
		||||
 | 
			
		||||
static void shell_generic_container_iface_init (ClutterContainerIface *iface);
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE_WITH_CODE(ShellGenericContainer,
 | 
			
		||||
                        shell_generic_container,
 | 
			
		||||
                        ST_TYPE_WIDGET,
 | 
			
		||||
                        G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_CONTAINER,
 | 
			
		||||
                                               shell_generic_container_iface_init));
 | 
			
		||||
typedef struct _ShellGenericContainerPrivate ShellGenericContainerPrivate;
 | 
			
		||||
 | 
			
		||||
struct _ShellGenericContainer
 | 
			
		||||
{
 | 
			
		||||
    StWidget parent;
 | 
			
		||||
 | 
			
		||||
    ShellGenericContainerPrivate *priv;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _ShellGenericContainerPrivate {
 | 
			
		||||
  GHashTable *skip_paint;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE_WITH_CODE(ShellGenericContainer,
 | 
			
		||||
                        shell_generic_container,
 | 
			
		||||
                        ST_TYPE_WIDGET,
 | 
			
		||||
                        G_ADD_PRIVATE (ShellGenericContainer)
 | 
			
		||||
                        G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_CONTAINER,
 | 
			
		||||
                                               shell_generic_container_iface_init));
 | 
			
		||||
 | 
			
		||||
/* Signals */
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
@@ -385,8 +395,6 @@ shell_generic_container_class_init (ShellGenericContainerClass *klass)
 | 
			
		||||
                  0,
 | 
			
		||||
                  NULL, NULL, NULL,
 | 
			
		||||
                  G_TYPE_NONE, 2, CLUTTER_TYPE_ACTOR_BOX, CLUTTER_TYPE_ALLOCATION_FLAGS);
 | 
			
		||||
 | 
			
		||||
  g_type_class_add_private (gobject_class, sizeof (ShellGenericContainerPrivate));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -407,8 +415,7 @@ shell_generic_container_iface_init (ClutterContainerIface *iface)
 | 
			
		||||
static void
 | 
			
		||||
shell_generic_container_init (ShellGenericContainer *area)
 | 
			
		||||
{
 | 
			
		||||
  area->priv = G_TYPE_INSTANCE_GET_PRIVATE (area, SHELL_TYPE_GENERIC_CONTAINER,
 | 
			
		||||
                                            ShellGenericContainerPrivate);
 | 
			
		||||
  area->priv = shell_generic_container_get_instance_private (area);
 | 
			
		||||
  area->priv->skip_paint = g_hash_table_new (NULL, NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -4,12 +4,9 @@
 | 
			
		||||
 | 
			
		||||
#include "st.h"
 | 
			
		||||
 | 
			
		||||
#define SHELL_TYPE_GENERIC_CONTAINER                 (shell_generic_container_get_type ())
 | 
			
		||||
#define SHELL_GENERIC_CONTAINER(obj)                 (G_TYPE_CHECK_INSTANCE_CAST ((obj), SHELL_TYPE_GENERIC_CONTAINER, ShellGenericContainer))
 | 
			
		||||
#define SHELL_GENERIC_CONTAINER_CLASS(klass)         (G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_GENERIC_CONTAINER, ShellGenericContainerClass))
 | 
			
		||||
#define SHELL_IS_GENERIC_CONTAINER(obj)              (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SHELL_TYPE_GENERIC_CONTAINER))
 | 
			
		||||
#define SHELL_IS_GENERIC_CONTAINER_CLASS(klass)      (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_GENERIC_CONTAINER))
 | 
			
		||||
#define SHELL_GENERIC_CONTAINER_GET_CLASS(obj)       (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_GENERIC_CONTAINER, ShellGenericContainerClass))
 | 
			
		||||
#define SHELL_TYPE_GENERIC_CONTAINER (shell_generic_container_get_type ())
 | 
			
		||||
G_DECLARE_FINAL_TYPE (ShellGenericContainer, shell_generic_container,
 | 
			
		||||
                      SHELL, GENERIC_CONTAINER, StWidget)
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
  float min_size;
 | 
			
		||||
@@ -22,25 +19,6 @@ typedef struct {
 | 
			
		||||
#define SHELL_TYPE_GENERIC_CONTAINER_ALLOCATION (shell_generic_container_allocation_get_type ())
 | 
			
		||||
GType shell_generic_container_allocation_get_type (void);
 | 
			
		||||
 | 
			
		||||
typedef struct _ShellGenericContainer        ShellGenericContainer;
 | 
			
		||||
typedef struct _ShellGenericContainerClass   ShellGenericContainerClass;
 | 
			
		||||
 | 
			
		||||
typedef struct _ShellGenericContainerPrivate ShellGenericContainerPrivate;
 | 
			
		||||
 | 
			
		||||
struct _ShellGenericContainer
 | 
			
		||||
{
 | 
			
		||||
    StWidget parent;
 | 
			
		||||
 | 
			
		||||
    ShellGenericContainerPrivate *priv;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _ShellGenericContainerClass
 | 
			
		||||
{
 | 
			
		||||
    StWidgetClass parent_class;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
GType    shell_generic_container_get_type         (void) G_GNUC_CONST;
 | 
			
		||||
 | 
			
		||||
guint    shell_generic_container_get_n_skip_paint (ShellGenericContainer *self);
 | 
			
		||||
 | 
			
		||||
gboolean shell_generic_container_get_skip_paint   (ShellGenericContainer *self,
 | 
			
		||||
 
 | 
			
		||||
@@ -867,7 +867,12 @@ update_scale_factor (GtkSettings *settings,
 | 
			
		||||
    {
 | 
			
		||||
      g_object_set (context, "scale-factor", g_value_get_int (&value), NULL);
 | 
			
		||||
      if (meta_is_wayland_compositor ())
 | 
			
		||||
        g_object_set (clutter_settings_get_default (), "font-dpi", 96 * 1024 * g_value_get_int (&value), NULL);
 | 
			
		||||
        {
 | 
			
		||||
          int xft_dpi;
 | 
			
		||||
          g_object_get (settings, "gtk-xft-dpi", &xft_dpi, NULL);
 | 
			
		||||
 | 
			
		||||
          g_object_set (clutter_settings_get_default (), "font-dpi", xft_dpi, NULL);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  /* Make sure clutter and gdk scaling stays disabled */
 | 
			
		||||
 
 | 
			
		||||
@@ -10,22 +10,8 @@
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
typedef struct _ShellGlobal      ShellGlobal;
 | 
			
		||||
typedef struct _ShellGlobalClass ShellGlobalClass;
 | 
			
		||||
 | 
			
		||||
#define SHELL_TYPE_GLOBAL              (shell_global_get_type ())
 | 
			
		||||
#define SHELL_GLOBAL(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), SHELL_TYPE_GLOBAL, ShellGlobal))
 | 
			
		||||
#define SHELL_GLOBAL_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_GLOBAL, ShellGlobalClass))
 | 
			
		||||
#define SHELL_IS_GLOBAL(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), SHELL_TYPE_GLOBAL))
 | 
			
		||||
#define SHELL_IS_GLOBAL_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_GLOBAL))
 | 
			
		||||
#define SHELL_GLOBAL_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_GLOBAL, ShellGlobalClass))
 | 
			
		||||
 | 
			
		||||
struct _ShellGlobalClass
 | 
			
		||||
{
 | 
			
		||||
  GObjectClass parent_class;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
GType shell_global_get_type (void) G_GNUC_CONST;
 | 
			
		||||
#define SHELL_TYPE_GLOBAL (shell_global_get_type ())
 | 
			
		||||
G_DECLARE_FINAL_TYPE (ShellGlobal, shell_global, SHELL, GLOBAL, GObject)
 | 
			
		||||
 | 
			
		||||
ShellGlobal   *shell_global_get                       (void);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -16,13 +16,14 @@
 | 
			
		||||
#include <cogl/cogl.h>
 | 
			
		||||
#include "shell-glsl-quad.h"
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE (ShellGLSLQuad, shell_glsl_quad, CLUTTER_TYPE_ACTOR);
 | 
			
		||||
 | 
			
		||||
typedef struct _ShellGLSLQuadPrivate ShellGLSLQuadPrivate;
 | 
			
		||||
struct _ShellGLSLQuadPrivate
 | 
			
		||||
{
 | 
			
		||||
  CoglPipeline  *pipeline;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE_WITH_PRIVATE (ShellGLSLQuad, shell_glsl_quad, CLUTTER_TYPE_ACTOR);
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
shell_glsl_quad_get_paint_volume (ClutterActor       *actor,
 | 
			
		||||
                                  ClutterPaintVolume *volume)
 | 
			
		||||
@@ -38,7 +39,7 @@ shell_glsl_quad_paint (ClutterActor *actor)
 | 
			
		||||
  guint8 paint_opacity;
 | 
			
		||||
  ClutterActorBox box;
 | 
			
		||||
 | 
			
		||||
  priv = self->priv;
 | 
			
		||||
  priv = shell_glsl_quad_get_instance_private (self);
 | 
			
		||||
 | 
			
		||||
  paint_opacity = clutter_actor_get_paint_opacity (actor);
 | 
			
		||||
  clutter_actor_get_allocation_box (actor, &box);
 | 
			
		||||
@@ -106,7 +107,7 @@ shell_glsl_quad_dispose (GObject *gobject)
 | 
			
		||||
  ShellGLSLQuad *self = SHELL_GLSL_QUAD (gobject);
 | 
			
		||||
  ShellGLSLQuadPrivate *priv;
 | 
			
		||||
 | 
			
		||||
  priv = self->priv;
 | 
			
		||||
  priv = shell_glsl_quad_get_instance_private (self);
 | 
			
		||||
 | 
			
		||||
  g_clear_pointer (&priv->pipeline, cogl_object_unref);
 | 
			
		||||
 | 
			
		||||
@@ -116,7 +117,6 @@ shell_glsl_quad_dispose (GObject *gobject)
 | 
			
		||||
static void
 | 
			
		||||
shell_glsl_quad_init (ShellGLSLQuad *quad)
 | 
			
		||||
{
 | 
			
		||||
  quad->priv = G_TYPE_INSTANCE_GET_PRIVATE (quad, SHELL_TYPE_GLSL_QUAD, ShellGLSLQuadPrivate);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -124,6 +124,7 @@ shell_glsl_quad_constructed (GObject *object)
 | 
			
		||||
{
 | 
			
		||||
  ShellGLSLQuad *self;
 | 
			
		||||
  ShellGLSLQuadClass *klass;
 | 
			
		||||
  ShellGLSLQuadPrivate *priv;
 | 
			
		||||
  CoglContext *ctx =
 | 
			
		||||
    clutter_backend_get_cogl_context (clutter_get_default_backend ());
 | 
			
		||||
 | 
			
		||||
@@ -135,18 +136,20 @@ shell_glsl_quad_constructed (GObject *object)
 | 
			
		||||
  */
 | 
			
		||||
  klass = SHELL_GLSL_QUAD_GET_CLASS (object);
 | 
			
		||||
  self = SHELL_GLSL_QUAD (object);
 | 
			
		||||
  priv = shell_glsl_quad_get_instance_private (self);
 | 
			
		||||
 | 
			
		||||
  if (G_UNLIKELY (klass->base_pipeline == NULL))
 | 
			
		||||
    {
 | 
			
		||||
      klass->base_pipeline = cogl_pipeline_new (ctx);
 | 
			
		||||
      cogl_pipeline_set_blend (klass->base_pipeline, "RGBA = ADD (SRC_COLOR * (SRC_COLOR[A]), DST_COLOR * (1-SRC_COLOR[A]))", NULL);
 | 
			
		||||
 | 
			
		||||
      if (klass->build_pipeline != NULL)
 | 
			
		||||
        klass->build_pipeline (self);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  self->priv->pipeline = cogl_pipeline_copy (klass->base_pipeline);
 | 
			
		||||
  priv->pipeline = cogl_pipeline_copy (klass->base_pipeline);
 | 
			
		||||
 | 
			
		||||
  cogl_pipeline_set_layer_null_texture (self->priv->pipeline, 0, COGL_TEXTURE_TYPE_2D);
 | 
			
		||||
  cogl_pipeline_set_layer_null_texture (priv->pipeline, 0, COGL_TEXTURE_TYPE_2D);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -160,8 +163,6 @@ shell_glsl_quad_class_init (ShellGLSLQuadClass *klass)
 | 
			
		||||
 | 
			
		||||
  actor_class->get_paint_volume = shell_glsl_quad_get_paint_volume;
 | 
			
		||||
  actor_class->paint = shell_glsl_quad_paint;
 | 
			
		||||
 | 
			
		||||
  g_type_class_add_private (klass, sizeof (ShellGLSLQuadPrivate));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -176,7 +177,8 @@ int
 | 
			
		||||
shell_glsl_quad_get_uniform_location (ShellGLSLQuad *quad,
 | 
			
		||||
                                      const char    *name)
 | 
			
		||||
{
 | 
			
		||||
  return cogl_pipeline_get_uniform_location (quad->priv->pipeline, name);
 | 
			
		||||
  ShellGLSLQuadPrivate *priv = shell_glsl_quad_get_instance_private (quad);
 | 
			
		||||
  return cogl_pipeline_get_uniform_location (priv->pipeline, name);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -194,7 +196,8 @@ shell_glsl_quad_set_uniform_float (ShellGLSLQuad *quad,
 | 
			
		||||
                                   int            total_count,
 | 
			
		||||
                                   const float   *value)
 | 
			
		||||
{
 | 
			
		||||
  cogl_pipeline_set_uniform_float (quad->priv->pipeline, uniform,
 | 
			
		||||
  ShellGLSLQuadPrivate *priv = shell_glsl_quad_get_instance_private (quad);
 | 
			
		||||
  cogl_pipeline_set_uniform_float (priv->pipeline, uniform,
 | 
			
		||||
                                   n_components, total_count / n_components,
 | 
			
		||||
                                   value);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -26,23 +26,9 @@ typedef enum {
 | 
			
		||||
  SHELL_SNIPPET_HOOK_TEXTURE_LOOKUP
 | 
			
		||||
} ShellSnippetHook;
 | 
			
		||||
 | 
			
		||||
#define SHELL_TYPE_GLSL_QUAD                 (shell_glsl_quad_get_type ())
 | 
			
		||||
#define SHELL_GLSL_QUAD(obj)                 (G_TYPE_CHECK_INSTANCE_CAST ((obj), SHELL_TYPE_GLSL_QUAD, ShellGLSLQuad))
 | 
			
		||||
#define SHELL_GLSL_QUAD_CLASS(klass)         (G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_GLSL_QUAD, ShellGLSLQuadClass))
 | 
			
		||||
#define SHELL_IS_GLSL_QUAD(obj)              (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SHELL_TYPE_GLSL_QUAD))
 | 
			
		||||
#define SHELL_IS_GLSL_QUAD_CLASS(klass)      (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_GLSL_QUAD))
 | 
			
		||||
#define SHELL_GLSL_QUAD_GET_CLASS(obj)       (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_GLSL_QUAD, ShellGLSLQuadClass))
 | 
			
		||||
 | 
			
		||||
typedef struct _ShellGLSLQuad        ShellGLSLQuad;
 | 
			
		||||
typedef struct _ShellGLSLQuadClass   ShellGLSLQuadClass;
 | 
			
		||||
typedef struct _ShellGLSLQuadPrivate ShellGLSLQuadPrivate;
 | 
			
		||||
 | 
			
		||||
struct _ShellGLSLQuad
 | 
			
		||||
{
 | 
			
		||||
  ClutterActor parent;
 | 
			
		||||
 | 
			
		||||
  ShellGLSLQuadPrivate *priv;
 | 
			
		||||
};
 | 
			
		||||
#define SHELL_TYPE_GLSL_QUAD (shell_glsl_quad_get_type ())
 | 
			
		||||
G_DECLARE_DERIVABLE_TYPE (ShellGLSLQuad, shell_glsl_quad,
 | 
			
		||||
                          SHELL, GLSL_QUAD, ClutterActor)
 | 
			
		||||
 | 
			
		||||
struct _ShellGLSLQuadClass
 | 
			
		||||
{
 | 
			
		||||
@@ -53,8 +39,6 @@ struct _ShellGLSLQuadClass
 | 
			
		||||
  void (*build_pipeline) (ShellGLSLQuad *effect);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
GType shell_glsl_quad_get_type (void) G_GNUC_CONST;
 | 
			
		||||
 | 
			
		||||
void shell_glsl_quad_add_glsl_snippet (ShellGLSLQuad    *quad,
 | 
			
		||||
                                       ShellSnippetHook  hook,
 | 
			
		||||
                                       const char       *declarations,
 | 
			
		||||
 
 | 
			
		||||
@@ -15,6 +15,8 @@ enum {
 | 
			
		||||
   PROP_WINDOW
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
typedef struct _ShellGtkEmbedPrivate ShellGtkEmbedPrivate;
 | 
			
		||||
 | 
			
		||||
struct _ShellGtkEmbedPrivate
 | 
			
		||||
{
 | 
			
		||||
  ShellEmbeddedWindow *window;
 | 
			
		||||
@@ -25,7 +27,7 @@ struct _ShellGtkEmbedPrivate
 | 
			
		||||
  guint window_created_handler;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE (ShellGtkEmbed, shell_gtk_embed, CLUTTER_TYPE_CLONE);
 | 
			
		||||
G_DEFINE_TYPE_WITH_PRIVATE (ShellGtkEmbed, shell_gtk_embed, CLUTTER_TYPE_CLONE);
 | 
			
		||||
 | 
			
		||||
static void shell_gtk_embed_set_window (ShellGtkEmbed       *embed,
 | 
			
		||||
                                        ShellEmbeddedWindow *window);
 | 
			
		||||
@@ -40,7 +42,7 @@ shell_gtk_embed_on_window_destroy (GtkWidget     *object,
 | 
			
		||||
static void
 | 
			
		||||
shell_gtk_embed_remove_window_actor (ShellGtkEmbed *embed)
 | 
			
		||||
{
 | 
			
		||||
  ShellGtkEmbedPrivate *priv = embed->priv;
 | 
			
		||||
  ShellGtkEmbedPrivate *priv = shell_gtk_embed_get_instance_private (embed);
 | 
			
		||||
 | 
			
		||||
  if (priv->window_actor)
 | 
			
		||||
    {
 | 
			
		||||
@@ -60,7 +62,7 @@ shell_gtk_embed_window_created_cb (MetaDisplay   *display,
 | 
			
		||||
                                   MetaWindow    *window,
 | 
			
		||||
                                   ShellGtkEmbed *embed)
 | 
			
		||||
{
 | 
			
		||||
  ShellGtkEmbedPrivate *priv = embed->priv;
 | 
			
		||||
  ShellGtkEmbedPrivate *priv = shell_gtk_embed_get_instance_private (embed);
 | 
			
		||||
  Window xwindow = meta_window_get_xwindow (window);
 | 
			
		||||
  GdkWindow *gdk_window = gtk_widget_get_window (GTK_WIDGET (priv->window));
 | 
			
		||||
 | 
			
		||||
@@ -68,7 +70,6 @@ shell_gtk_embed_window_created_cb (MetaDisplay   *display,
 | 
			
		||||
    {
 | 
			
		||||
      ClutterActor *window_actor =
 | 
			
		||||
        CLUTTER_ACTOR (meta_window_get_compositor_private (window));
 | 
			
		||||
      MetaDisplay *display = shell_global_get_display (shell_global_get ());
 | 
			
		||||
      GCallback remove_cb = G_CALLBACK (shell_gtk_embed_remove_window_actor);
 | 
			
		||||
      cairo_region_t *empty_region;
 | 
			
		||||
 | 
			
		||||
@@ -120,11 +121,12 @@ static void
 | 
			
		||||
shell_gtk_embed_on_window_mapped (GtkWidget     *object,
 | 
			
		||||
                                  ShellGtkEmbed *embed)
 | 
			
		||||
{
 | 
			
		||||
  ShellGtkEmbedPrivate *priv = shell_gtk_embed_get_instance_private (embed);
 | 
			
		||||
  MetaDisplay *display = shell_global_get_display (shell_global_get ());
 | 
			
		||||
 | 
			
		||||
  /* Listen for new windows so we can detect when Mutter has
 | 
			
		||||
     created a MutterWindow for this window */
 | 
			
		||||
  embed->priv->window_created_handler =
 | 
			
		||||
  priv->window_created_handler =
 | 
			
		||||
    g_signal_connect (display,
 | 
			
		||||
                      "window-created",
 | 
			
		||||
                      G_CALLBACK (shell_gtk_embed_window_created_cb),
 | 
			
		||||
@@ -135,44 +137,45 @@ static void
 | 
			
		||||
shell_gtk_embed_set_window (ShellGtkEmbed       *embed,
 | 
			
		||||
                            ShellEmbeddedWindow *window)
 | 
			
		||||
{
 | 
			
		||||
  ShellGtkEmbedPrivate *priv = shell_gtk_embed_get_instance_private (embed);
 | 
			
		||||
  MetaDisplay *display = shell_global_get_display (shell_global_get ());
 | 
			
		||||
 | 
			
		||||
  if (embed->priv->window)
 | 
			
		||||
  if (priv->window)
 | 
			
		||||
    {
 | 
			
		||||
      if (embed->priv->window_created_handler)
 | 
			
		||||
      if (priv->window_created_handler)
 | 
			
		||||
        {
 | 
			
		||||
          g_signal_handler_disconnect (display,
 | 
			
		||||
                                       embed->priv->window_created_handler);
 | 
			
		||||
          embed->priv->window_created_handler = 0;
 | 
			
		||||
                                       priv->window_created_handler);
 | 
			
		||||
          priv->window_created_handler = 0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      shell_gtk_embed_remove_window_actor (embed);
 | 
			
		||||
 | 
			
		||||
      _shell_embedded_window_set_actor (embed->priv->window, NULL);
 | 
			
		||||
      _shell_embedded_window_set_actor (priv->window, NULL);
 | 
			
		||||
 | 
			
		||||
      g_object_unref (embed->priv->window);
 | 
			
		||||
      g_object_unref (priv->window);
 | 
			
		||||
 | 
			
		||||
      g_signal_handlers_disconnect_by_func (embed->priv->window,
 | 
			
		||||
      g_signal_handlers_disconnect_by_func (priv->window,
 | 
			
		||||
                                            (gpointer)shell_gtk_embed_on_window_destroy,
 | 
			
		||||
                                            embed);
 | 
			
		||||
 | 
			
		||||
      g_signal_handlers_disconnect_by_func (embed->priv->window,
 | 
			
		||||
      g_signal_handlers_disconnect_by_func (priv->window,
 | 
			
		||||
                                            (gpointer)shell_gtk_embed_on_window_mapped,
 | 
			
		||||
                                            embed);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  embed->priv->window = window;
 | 
			
		||||
  priv->window = window;
 | 
			
		||||
 | 
			
		||||
  if (embed->priv->window)
 | 
			
		||||
  if (priv->window)
 | 
			
		||||
    {
 | 
			
		||||
      g_object_ref (embed->priv->window);
 | 
			
		||||
      g_object_ref (priv->window);
 | 
			
		||||
 | 
			
		||||
      _shell_embedded_window_set_actor (embed->priv->window, embed);
 | 
			
		||||
      _shell_embedded_window_set_actor (priv->window, embed);
 | 
			
		||||
 | 
			
		||||
      g_signal_connect (embed->priv->window, "destroy",
 | 
			
		||||
      g_signal_connect (priv->window, "destroy",
 | 
			
		||||
                        G_CALLBACK (shell_gtk_embed_on_window_destroy), embed);
 | 
			
		||||
 | 
			
		||||
      g_signal_connect (embed->priv->window, "map",
 | 
			
		||||
      g_signal_connect (priv->window, "map",
 | 
			
		||||
                        G_CALLBACK (shell_gtk_embed_on_window_mapped), embed);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -206,11 +209,12 @@ shell_gtk_embed_get_property (GObject         *object,
 | 
			
		||||
                              GParamSpec      *pspec)
 | 
			
		||||
{
 | 
			
		||||
  ShellGtkEmbed *embed = SHELL_GTK_EMBED (object);
 | 
			
		||||
  ShellGtkEmbedPrivate *priv = shell_gtk_embed_get_instance_private (embed);
 | 
			
		||||
 | 
			
		||||
  switch (prop_id)
 | 
			
		||||
    {
 | 
			
		||||
    case PROP_WINDOW:
 | 
			
		||||
      g_value_set_object (value, embed->priv->window);
 | 
			
		||||
      g_value_set_object (value, priv->window);
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    default:
 | 
			
		||||
@@ -226,12 +230,13 @@ shell_gtk_embed_get_preferred_width (ClutterActor *actor,
 | 
			
		||||
                                     float        *natural_width_p)
 | 
			
		||||
{
 | 
			
		||||
  ShellGtkEmbed *embed = SHELL_GTK_EMBED (actor);
 | 
			
		||||
  ShellGtkEmbedPrivate *priv = shell_gtk_embed_get_instance_private (embed);
 | 
			
		||||
 | 
			
		||||
  if (embed->priv->window
 | 
			
		||||
      && gtk_widget_get_visible (GTK_WIDGET (embed->priv->window)))
 | 
			
		||||
  if (priv->window
 | 
			
		||||
      && gtk_widget_get_visible (GTK_WIDGET (priv->window)))
 | 
			
		||||
    {
 | 
			
		||||
      GtkRequisition min_req, natural_req;
 | 
			
		||||
      gtk_widget_get_preferred_size (GTK_WIDGET (embed->priv->window), &min_req, &natural_req);
 | 
			
		||||
      gtk_widget_get_preferred_size (GTK_WIDGET (priv->window), &min_req, &natural_req);
 | 
			
		||||
 | 
			
		||||
      *min_width_p = min_req.width;
 | 
			
		||||
      *natural_width_p = natural_req.width;
 | 
			
		||||
@@ -247,12 +252,13 @@ shell_gtk_embed_get_preferred_height (ClutterActor *actor,
 | 
			
		||||
                                      float        *natural_height_p)
 | 
			
		||||
{
 | 
			
		||||
  ShellGtkEmbed *embed = SHELL_GTK_EMBED (actor);
 | 
			
		||||
  ShellGtkEmbedPrivate *priv = shell_gtk_embed_get_instance_private (embed);
 | 
			
		||||
 | 
			
		||||
  if (embed->priv->window
 | 
			
		||||
      && gtk_widget_get_visible (GTK_WIDGET (embed->priv->window)))
 | 
			
		||||
  if (priv->window
 | 
			
		||||
      && gtk_widget_get_visible (GTK_WIDGET (priv->window)))
 | 
			
		||||
    {
 | 
			
		||||
      GtkRequisition min_req, natural_req;
 | 
			
		||||
      gtk_widget_get_preferred_size (GTK_WIDGET (embed->priv->window), &min_req, &natural_req);
 | 
			
		||||
      gtk_widget_get_preferred_size (GTK_WIDGET (priv->window), &min_req, &natural_req);
 | 
			
		||||
 | 
			
		||||
      *min_height_p = min_req.height;
 | 
			
		||||
      *natural_height_p = natural_req.height;
 | 
			
		||||
@@ -267,6 +273,7 @@ shell_gtk_embed_allocate (ClutterActor          *actor,
 | 
			
		||||
                          ClutterAllocationFlags flags)
 | 
			
		||||
{
 | 
			
		||||
  ShellGtkEmbed *embed = SHELL_GTK_EMBED (actor);
 | 
			
		||||
  ShellGtkEmbedPrivate *priv = shell_gtk_embed_get_instance_private (embed);
 | 
			
		||||
  float wx = 0.0, wy = 0.0, x, y, ax, ay;
 | 
			
		||||
 | 
			
		||||
  CLUTTER_ACTOR_CLASS (shell_gtk_embed_parent_class)->
 | 
			
		||||
@@ -286,7 +293,7 @@ shell_gtk_embed_allocate (ClutterActor          *actor,
 | 
			
		||||
      actor = clutter_actor_get_parent (actor);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  _shell_embedded_window_allocate (embed->priv->window,
 | 
			
		||||
  _shell_embedded_window_allocate (priv->window,
 | 
			
		||||
                                   (int)(0.5 + wx), (int)(0.5 + wy),
 | 
			
		||||
                                   box->x2 - box->x1,
 | 
			
		||||
                                   box->y2 - box->y1);
 | 
			
		||||
@@ -296,8 +303,9 @@ static void
 | 
			
		||||
shell_gtk_embed_map (ClutterActor *actor)
 | 
			
		||||
{
 | 
			
		||||
  ShellGtkEmbed *embed = SHELL_GTK_EMBED (actor);
 | 
			
		||||
  ShellGtkEmbedPrivate *priv = shell_gtk_embed_get_instance_private (embed);
 | 
			
		||||
 | 
			
		||||
  _shell_embedded_window_map (embed->priv->window);
 | 
			
		||||
  _shell_embedded_window_map (priv->window);
 | 
			
		||||
 | 
			
		||||
  CLUTTER_ACTOR_CLASS (shell_gtk_embed_parent_class)->map (actor);
 | 
			
		||||
}
 | 
			
		||||
@@ -306,8 +314,9 @@ static void
 | 
			
		||||
shell_gtk_embed_unmap (ClutterActor *actor)
 | 
			
		||||
{
 | 
			
		||||
  ShellGtkEmbed *embed = SHELL_GTK_EMBED (actor);
 | 
			
		||||
  ShellGtkEmbedPrivate *priv = shell_gtk_embed_get_instance_private (embed);
 | 
			
		||||
 | 
			
		||||
  _shell_embedded_window_unmap (embed->priv->window);
 | 
			
		||||
  _shell_embedded_window_unmap (priv->window);
 | 
			
		||||
 | 
			
		||||
  CLUTTER_ACTOR_CLASS (shell_gtk_embed_parent_class)->unmap (actor);
 | 
			
		||||
}
 | 
			
		||||
@@ -328,8 +337,6 @@ shell_gtk_embed_class_init (ShellGtkEmbedClass *klass)
 | 
			
		||||
  GObjectClass *object_class = G_OBJECT_CLASS (klass);
 | 
			
		||||
  ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass);
 | 
			
		||||
 | 
			
		||||
  g_type_class_add_private (klass, sizeof (ShellGtkEmbedPrivate));
 | 
			
		||||
 | 
			
		||||
  object_class->get_property = shell_gtk_embed_get_property;
 | 
			
		||||
  object_class->set_property = shell_gtk_embed_set_property;
 | 
			
		||||
  object_class->dispose      = shell_gtk_embed_dispose;
 | 
			
		||||
@@ -352,8 +359,6 @@ shell_gtk_embed_class_init (ShellGtkEmbedClass *klass)
 | 
			
		||||
static void
 | 
			
		||||
shell_gtk_embed_init (ShellGtkEmbed *embed)
 | 
			
		||||
{
 | 
			
		||||
  embed->priv = G_TYPE_INSTANCE_GET_PRIVATE (embed, SHELL_TYPE_GTK_EMBED,
 | 
			
		||||
                                             ShellGtkEmbedPrivate);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user