Compare commits
	
		
			1 Commits
		
	
	
		
			3.15.4
			...
			wip/wobbly
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | e7f82c66de | 
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -23,7 +23,6 @@ data/gnome-shell-wayland.desktop | ||||
| data/gnome-shell-wayland.desktop.in | ||||
| data/gnome-shell-extension-prefs.desktop | ||||
| data/gnome-shell-extension-prefs.desktop.in | ||||
| data/gnome-shell-theme.gresource | ||||
| data/gschemas.compiled | ||||
| data/perf-background.xml | ||||
| data/org.gnome.shell.gschema.xml | ||||
| @@ -86,7 +85,6 @@ src/gnome-shell-perf-helper | ||||
| src/gnome-shell-perf-tool | ||||
| src/gnome-shell-portal-helper | ||||
| src/hotplug-sniffer/org.gnome.Shell.HotplugSniffer.service | ||||
| src/org-gtk-application.[ch] | ||||
| src/run-js-test | ||||
| src/test-recorder | ||||
| src/test-recorder.ogg | ||||
|   | ||||
							
								
								
									
										164
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										164
									
								
								NEWS
									
									
									
									
									
								
							| @@ -1,167 +1,3 @@ | ||||
| 3.15.4 | ||||
| ====== | ||||
| * Add mode parameter to AcceleratorActivated signal [Florian; #711682] | ||||
| * Fix PID based window/app association [Sebastian; #736527] | ||||
| * Fix current day highlight on day change [Sebastian; #742492] | ||||
| * Switch to vp9 for screencast recordings [Adel; #742744] | ||||
| * Disable IBus input sources on password entries [Takao; #730628] | ||||
| * Make slider scrolling smoother [Adel; #742648] | ||||
| * Allow move-up shortcut to move window above top workspace [Florian; #665764] | ||||
| * Misc. bug fixes [Adel, Rui; #742748, #742824, #741114] | ||||
|  | ||||
| Contributors: | ||||
|   Cosimo Cecchi, Takao Fujiwara, Adel Gadllah, Sebastian Keller, Rui Matos, | ||||
|   Florian Müllner, Jasper St. Pierre | ||||
|  | ||||
| Translations: | ||||
|   Andika Triwidada [id], Matej Urbančič [sl], Saibal Ray [bn_IN], | ||||
|   Inaki Larranaga Murgoitio [eu], Stas Solovey [ru], Kjartan Maraas [nb], | ||||
|   Balázs Úr [hu], Marek Černocký [cs], Rafael Ferreira [pt_BR], | ||||
|   Bernd Homuth [de], Daniel Mustieles [es], Fabio Tomat [fur] | ||||
|  | ||||
| 3.15.3 | ||||
| ====== | ||||
| * Add support for high-contrast themes [Florian; #740447] | ||||
| * Fix banner message on login screen without user list [Ray; #703972] | ||||
| * Fix flicker when activating windows on another workspace [Florian; #741680] | ||||
| * Misc. bug fixes [Giovanni, Florian; #735308, #740237] | ||||
|  | ||||
| Contributors: | ||||
|   Giovanni Campagna, Florian Müllner, Jasper St. Pierre, Ray Strode | ||||
|  | ||||
| Translations: | ||||
|   Balázs Úr [hu], Josef Andersson [sv], Muhammet Kara [tr], | ||||
|   Baurzhan Muftakhidinov [kk], Inaki Larranaga Murgoitio [eu] | ||||
|  | ||||
| 3.15.2 | ||||
| ====== | ||||
| * Fix visual glitch of window preview outline in overview [Chris; #699044] | ||||
| * Change user facing name of "Captive Portal" to "Network Login" [Elad; #737198] | ||||
| * Port to Python 3 [Slavek; #732478] | ||||
| * Hide Airplane mode indicator when g-s-d says so [Cosimo; #736292] | ||||
| * Allow translators to change non-work days [Lavi; #664645] | ||||
| * Delay invocation of caribou daemon until really needed [Daiki; #739712] | ||||
| * Don't lock screen after crash if locking is disabled [Adel; #704884] | ||||
| * Improve layout of extension installation dialog [William; #739888] | ||||
| * Fix workspace changes from app picker [Yuki; #737534] | ||||
| * Preload all ibus input sources in user configuration [Takao; #695428] | ||||
| * Properly remove network connections from list [Ryan; #740227] | ||||
| * Support CSS margin property [Carlos; #728437] | ||||
| * Improve handling of BUSY application state [Phillip; #736492] | ||||
| * Fix erroneous week numbers in calendar [Florian; #736722] | ||||
| * Misc. bugfixes and cleanups [Darcy, Yuki, Alexander, Eskild, Bastien, Cosimo, Colin, | ||||
|   Ray; #738725, #739497, #739241, #672500, #739822, #740074, #704163, #740141] | ||||
|  | ||||
| Contributors: | ||||
|   Yuki, Lavi .A, Elad Alfassa, Cosimo Cecchi, Takao Fujiwara, Adel Gadllah, | ||||
|   Eskild Hustvedt, Chris Johns, William Jon McCann, Slavek Kabrda, Ryan Lortie, | ||||
|   Florian Müllner, Bastien Nocera, Christian Persch, Carlos Soriano, | ||||
|   Jasper St. Pierre, Ray Strode, Alexander Tsoy, Daiki Ueno, Colin Walters, | ||||
|   Phillip Wood | ||||
|  | ||||
| Translations: | ||||
|   Jorge Perez Perez [an], Daniel Martinez [an], Daniel Mustieles [es], | ||||
|   Trần Ngọc Quân [vi], Changwoo Ryu [ko], Kjartan Maraas [nb], | ||||
|   Yosef Or Boczko [he], Marek Černocký [cs] | ||||
|  | ||||
| 3.15.1 | ||||
| ====== | ||||
| * Use GResources for theme loading [Cosimo; #736936] | ||||
| * Reset the OSK to primary on monitor changes [Rui; #738536] | ||||
| * Use LC_TIME locale for format string translations [Florian; #738640] | ||||
| * Summarize queued up notifications [Devyani; #702460] | ||||
| * Improve handling of multi-day events [Andreas; #727302] | ||||
| * Support EXTERNAL scroll policy type [Florian; #739379] | ||||
| * Misc. bugfixes [Owen, Rui; #738652, #739252] | ||||
|  | ||||
| Contributors: | ||||
|   Andreas Brauchli, Cosimo Cecchi, Devyani Kota, Rui Matos, Florian Müllner, | ||||
|   Jasper St. Pierre, Owen W. Taylor | ||||
|  | ||||
| Translations: | ||||
|   Bahodir Mansurov [uz@cyrillic] | ||||
|  | ||||
| 3.14.1 | ||||
| ====== | ||||
| * Fix pulse animation for scrolled app folders [Florian; #736885] | ||||
| * Fix updating background on file changes [Owen; #710756] | ||||
| * Obtain keyboard variant from IBus [Jinkyu; #735066] | ||||
| * Implement Ctrl-u / Ctrl-k keybindings in entries [Florian; #737346] | ||||
| * Pass VPN hints to auth dialog [Dan; #737592] | ||||
| * Only allow one screenshot request at a time [Adel; #737456] | ||||
| * Respect disable-save-to-disc lockdown setting [Florian; #737846] | ||||
| * Respect scaling-factor for profile pictures [Darcy; #735419] | ||||
| * Focus login screen after lifting the lock screen shield [Ray; #708105] | ||||
| * Speed up pulse animation for few items [Carlos S.; #737017] | ||||
| * Fix gap between workspace switcher and screen edge [Florian; #728899] | ||||
| * Disable unredirection during recordings [Adel; #738226] | ||||
| * Ensure there's always at least one input source [Rui; #738303] | ||||
| * Restrict width of dash icons' context menus [Adel; #738054] | ||||
| * Misc. bug fixes [Jasper, Florian, Carlos G., Owen; #736999, #737382, #737001, | ||||
|   #738314, #738256, #738147] | ||||
|  | ||||
| Contributors: | ||||
|   Darcy Beurle, Cosimo Cecchi, Adel Gadllah, Carlos Garnacho, Rui Matos, | ||||
|   Florian Müllner, Carlos Soriano, Jasper St. Pierre, Ray Strode, Patrick Ward, | ||||
|   Dan Williams, Owen W. Taylor, Jinkyu Yi | ||||
|  | ||||
| Translations: | ||||
|   Мирослав Николић po/sr, sr@latin.po, Fran Diéguez [gl], Marek Černocký [cs], | ||||
|   Saibal Ray [bn_IN], Rajesh Ranjan [hi], Friedel Wolff [af], | ||||
|   Zhou Fang [zh_CN], Krishnababu Krothapalli [te], Kjartan Maraas [nb], | ||||
|   Rūdolfs Mazurs [lv], Sweta Kothari [gu], Christian Kirbach [de], | ||||
|   Cheng-Chia Tseng [zh_TW], Pedro Albuquerque [pt], Daniel Mustieles [es], | ||||
|   Luca Ferretti [it], Baurzhan Muftakhidinov [kk], Arash Mousavi [fa], | ||||
|   Milo Casagrande [it] | ||||
|  | ||||
| 3.14.0 | ||||
| ====== | ||||
| * Fix exposure of the accessible tree [Alejandro; #736821] | ||||
| * Hide empty app folders in app picker [Florian; #736910] | ||||
|  | ||||
| Contributors: | ||||
|   Florian Müllner, Alejandro Piñeiro | ||||
|  | ||||
| Translations: | ||||
|   Yuri Myasoedov [ru], Pawan Chitrakar [ne], Manoj Kumar Giri [or], | ||||
|   Daniel Mustieles [es], GNOME Translation Robot [de], Rajesh Ranjan [hi], | ||||
|   Shankar Prasad [kn], Kenneth Nielsen [da], Daniel Korostil [uk], | ||||
|   Changwoo Ryu [ko], A S Alam [pa], Tom Tryfonidis [el], Petr Kovar [cs] | ||||
|  | ||||
| 3.13.92 | ||||
| ======= | ||||
| * Fix submenu arrow animations [Hashem; #728927] | ||||
| * Always initialize clutter accessibility [Alejandro; #735908] | ||||
| * Adapt to mutter background changes [Owen; #735638] | ||||
| * Improve handling of outOfDate extensions in prefs [Florian; #736185] | ||||
| * Port offline updates to PackageKit's DBus interface [Kalev; #736337] | ||||
| * location: Translate accuracy levels for geoclue [Zeeshan; #736479] | ||||
| * Implement input source switching [Rui; #736435] | ||||
| * Fix crash when dragging window from workspace switcher [Carlos G.; #735972] | ||||
| * Clean out list of default favorites [Elad; #735682] | ||||
| * Add settings link to location submenu [Florian; #736542] | ||||
| * Fix keynav of message tray menu button [Florian; #707799] | ||||
| * Misc. bug fixes [Carlos G., Florian, Rui; #736110, #736329, #736343, | ||||
|   #735927, #735976] | ||||
|  | ||||
| Contributors: | ||||
|   Elad Alfassa, Zeeshan Ali (Khattak), Michael Catanzaro, Adel Gadllah, | ||||
|   Carlos Garnacho, Kalev Lember, Rui Matos, Florian Müllner, Hashem Nasarat, | ||||
|   Alejandro Piñeiro, Carlos Soriano, Jasper St. Pierre, Owen W. Taylor | ||||
|  | ||||
| Translations: | ||||
|   Piotr Drąg [pl], Changwoo Ryu [ko], Yuri Myasoedov [ru], Zhou Fang [ja], | ||||
|   Peter Mráz [sk], Ville-Pekka Vainio [fi], Sweta Kothari [gu], | ||||
|   Marek Černocký [cs], A S Alam [pa], Christian Kirbach [de], | ||||
|   Alexandre Franke [fr], Aurimas Černius [lt], Khaled Hosny [ar], | ||||
|   Enrico Nicoletto [pt_BR], Andika Triwidada [id], Shantha kumar [ta], | ||||
|   Matej Urbančič [sl], Pawan Chitrakar [ne], Yosef Or Boczko [he], | ||||
|   Balázs Úr [hu], Dušan Kazik [sk], Gil Forcada [ca], | ||||
|   Carles Ferrando [ca@valencia], Nilamdyuti Goswami [as], Ivaylo Valkov [bg], | ||||
|   Sandeep Sheshrao Shedmake [mr], Umarzuki Bin Mochlis Moktar [ms], | ||||
|   Muhammet Kara [tr], Jiro Matsuzawa [ja], Kris Thomsen [da], | ||||
|   Mattias Eriksson [sv] | ||||
|  | ||||
| 3.13.91 | ||||
| ======= | ||||
| * Fix keynav into session menu on login screen [Florian; #735614] | ||||
|   | ||||
							
								
								
									
										21
									
								
								configure.ac
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								configure.ac
									
									
									
									
									
								
							| @@ -1,5 +1,5 @@ | ||||
| AC_PREREQ(2.63) | ||||
| AC_INIT([gnome-shell],[3.15.4],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell]) | ||||
| AC_INIT([gnome-shell],[3.13.91],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell]) | ||||
|  | ||||
| AC_CONFIG_HEADERS([config.h]) | ||||
| AC_CONFIG_SRCDIR([src/shell-global.c]) | ||||
| @@ -37,7 +37,7 @@ AC_PATH_PROG([XSLTPROC], [xsltproc]) | ||||
| GLIB_GSETTINGS | ||||
|  | ||||
| # Get a value to substitute into gnome-shell.in | ||||
| AM_PATH_PYTHON([3]) | ||||
| AM_PATH_PYTHON([2.5]) | ||||
| AC_SUBST(PYTHON) | ||||
|  | ||||
| # We need at least this, since gst_plugin_register_static() was added | ||||
| @@ -76,8 +76,8 @@ AC_MSG_RESULT($enable_systemd) | ||||
| CLUTTER_MIN_VERSION=1.15.90 | ||||
| GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1 | ||||
| GJS_MIN_VERSION=1.39.0 | ||||
| MUTTER_MIN_VERSION=3.15.4 | ||||
| GTK_MIN_VERSION=3.15.0 | ||||
| MUTTER_MIN_VERSION=3.13.91 | ||||
| GTK_MIN_VERSION=3.7.9 | ||||
| GIO_MIN_VERSION=2.37.0 | ||||
| LIBECAL_MIN_VERSION=3.5.3 | ||||
| LIBEDATASERVER_MIN_VERSION=3.5.3 | ||||
| @@ -97,6 +97,7 @@ SHARED_PCS="gio-unix-2.0 >= $GIO_MIN_VERSION | ||||
|             gjs-internals-1.0 >= $GJS_MIN_VERSION | ||||
|             $recorder_modules | ||||
|             gdk-x11-3.0 libsoup-2.4 | ||||
|             xtst | ||||
|             clutter-x11-1.0 >= $CLUTTER_MIN_VERSION | ||||
|             clutter-glx-1.0 >= $CLUTTER_MIN_VERSION | ||||
|             libstartup-notification-1.0 >= $STARTUP_NOTIFICATION_MIN_VERSION | ||||
| @@ -118,7 +119,7 @@ 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(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.7.4) | ||||
| PKG_CHECK_MODULES(CARIBOU, caribou-1.0 >= 0.4.8) | ||||
|  | ||||
| AC_ARG_ENABLE(browser-plugin, | ||||
| @@ -231,17 +232,9 @@ esac | ||||
| AM_CFLAGS="$AM_CFLAGS $WARN_CFLAGS" | ||||
| AC_SUBST(AM_CFLAGS) | ||||
|  | ||||
| if test -z "${BROWSER_PLUGIN_DIR}"; then | ||||
|   BROWSER_PLUGIN_DIR="\${libdir}/mozilla/plugins" | ||||
| fi | ||||
| BROWSER_PLUGIN_DIR="${BROWSER_PLUGIN_DIR:-"\${libdir}/mozilla/plugins"}" | ||||
| AC_ARG_VAR([BROWSER_PLUGIN_DIR],[Where to install the plugin to]) | ||||
|  | ||||
| AC_ARG_VAR([GDBUS_CODEGEN],[the gdbus-codegen programme]) | ||||
| AC_PATH_PROG([GDBUS_CODEGEN],[gdbus-codegen],[]) | ||||
| if test -z "$GDBUS_CODEGEN"; then | ||||
|   AC_MSG_ERROR([gdbus-codegen not found]) | ||||
| fi | ||||
|  | ||||
| AC_CONFIG_FILES([ | ||||
|   Makefile | ||||
|   data/Makefile | ||||
|   | ||||
| @@ -35,11 +35,44 @@ introspection_DATA =				\ | ||||
| 	org.gnome.ShellSearchProvider.xml	\ | ||||
| 	org.gnome.ShellSearchProvider2.xml | ||||
|  | ||||
| resource_files = $(shell $(GLIB_COMPILE_RESOURCES) --sourcedir=$(srcdir)/theme --generate-dependencies $(srcdir)/gnome-shell-theme.gresource.xml) | ||||
| gnome-shell-theme.gresource: gnome-shell-theme.gresource.xml $(resource_files) | ||||
| 	$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir)/theme $< | ||||
| resourcedir = $(pkgdatadir) | ||||
| resource_DATA = gnome-shell-theme.gresource | ||||
| themedir = $(pkgdatadir)/theme | ||||
| dist_theme_DATA =				\ | ||||
| 	theme/calendar-arrow-left.svg		\ | ||||
| 	theme/calendar-arrow-right.svg		\ | ||||
| 	theme/calendar-today.svg		\ | ||||
| 	theme/checkbox-focused.svg		\ | ||||
| 	theme/checkbox-off-focused.svg		\ | ||||
| 	theme/checkbox-off.svg			\ | ||||
| 	theme/checkbox.svg			\ | ||||
| 	theme/close-window.svg			\ | ||||
| 	theme/close.svg				\ | ||||
| 	theme/corner-ripple-ltr.png		\ | ||||
| 	theme/corner-ripple-rtl.png		\ | ||||
| 	theme/dash-placeholder.svg		\ | ||||
| 	theme/filter-selected-ltr.svg		\ | ||||
| 	theme/filter-selected-rtl.svg		\ | ||||
| 	theme/gnome-shell.css			\ | ||||
| 	theme/logged-in-indicator.svg		\ | ||||
| 	theme/message-tray-background.png	\ | ||||
| 	theme/more-results.svg			\ | ||||
| 	theme/noise-texture.png			\ | ||||
| 	theme/page-indicator-active.svg		\ | ||||
| 	theme/page-indicator-inactive.svg	\ | ||||
| 	theme/page-indicator-checked.svg	\ | ||||
| 	theme/page-indicator-hover.svg		\ | ||||
| 	theme/panel-button-border.svg		\ | ||||
| 	theme/panel-button-highlight-narrow.svg	\ | ||||
| 	theme/panel-button-highlight-wide.svg	\ | ||||
| 	theme/process-working.svg		\ | ||||
| 	theme/running-indicator.svg		\ | ||||
| 	theme/source-button-border.svg		\ | ||||
| 	theme/summary-counter.svg		\ | ||||
| 	theme/toggle-off-us.svg			\ | ||||
| 	theme/toggle-off-intl.svg		\ | ||||
| 	theme/toggle-on-us.svg			\ | ||||
| 	theme/toggle-on-intl.svg		\ | ||||
| 	theme/ws-switch-arrow-up.png		\ | ||||
| 	theme/ws-switch-arrow-down.png | ||||
|  | ||||
| backgrounddir = $(pkgdatadir) | ||||
| background_DATA = perf-background.xml | ||||
| @@ -83,9 +116,7 @@ EXTRA_DIST =						\ | ||||
| 	perf-background.xml.in				\ | ||||
| 	org.gnome.Shell.PortalHelper.desktop.in		\ | ||||
| 	org.gnome.Shell.PortalHelper.service.in		\ | ||||
| 	org.gnome.shell.gschema.xml.in.in		\ | ||||
| 	gnome-shell-theme.gresource.xml 		\ | ||||
| 	$(resource_files) | ||||
| 	org.gnome.shell.gschema.xml.in.in | ||||
|  | ||||
| CLEANFILES +=						\ | ||||
| 	gnome-shell.desktop.in				\ | ||||
| @@ -97,5 +128,4 @@ CLEANFILES +=						\ | ||||
| 	perf-background.xml				\ | ||||
| 	gschemas.compiled				\ | ||||
| 	org.gnome.shell.gschema.valid			\ | ||||
| 	org.gnome.shell.gschema.xml.in			\ | ||||
| 	gnome-shell-theme.gresource | ||||
| 	org.gnome.shell.gschema.xml.in | ||||
|   | ||||
| @@ -1,42 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <gresources> | ||||
|   <gresource prefix="/org/gnome/shell/theme"> | ||||
|     <file>calendar-arrow-left.svg</file> | ||||
|     <file>calendar-arrow-right.svg</file> | ||||
|     <file>calendar-today.svg</file> | ||||
|     <file>checkbox-focused.svg</file> | ||||
|     <file>checkbox-off-focused.svg</file> | ||||
|     <file>checkbox-off.svg</file> | ||||
|     <file>checkbox.svg</file> | ||||
|     <file>close-window.svg</file> | ||||
|     <file>close.svg</file> | ||||
|     <file>corner-ripple-ltr.png</file> | ||||
|     <file>corner-ripple-rtl.png</file> | ||||
|     <file>dash-placeholder.svg</file> | ||||
|     <file>filter-selected-ltr.svg</file> | ||||
|     <file>filter-selected-rtl.svg</file> | ||||
|     <file>gnome-shell.css</file> | ||||
|     <file>gnome-shell-high-contrast.css</file> | ||||
|     <file>logged-in-indicator.svg</file> | ||||
|     <file>message-tray-background.png</file> | ||||
|     <file>more-results.svg</file> | ||||
|     <file>noise-texture.png</file> | ||||
|     <file>page-indicator-active.svg</file> | ||||
|     <file>page-indicator-inactive.svg</file> | ||||
|     <file>page-indicator-checked.svg</file> | ||||
|     <file>page-indicator-hover.svg</file> | ||||
|     <file>panel-button-border.svg</file> | ||||
|     <file>panel-button-highlight-narrow.svg</file> | ||||
|     <file>panel-button-highlight-wide.svg</file> | ||||
|     <file>process-working.svg</file> | ||||
|     <file>running-indicator.svg</file> | ||||
|     <file>source-button-border.svg</file> | ||||
|     <file>summary-counter.svg</file> | ||||
|     <file>toggle-off-us.svg</file> | ||||
|     <file>toggle-off-intl.svg</file> | ||||
|     <file>toggle-on-us.svg</file> | ||||
|     <file>toggle-on-intl.svg</file> | ||||
|     <file>ws-switch-arrow-up.png</file> | ||||
|     <file>ws-switch-arrow-down.png</file> | ||||
|   </gresource> | ||||
| </gresources> | ||||
| @@ -1,5 +1,5 @@ | ||||
| [Desktop Entry] | ||||
| _Name=Network Login | ||||
| _Name=Captive Portal | ||||
| Type=Application | ||||
| Exec=gapplication launch org.gnome.Shell.PortalHelper | ||||
| DBusActivatable=true | ||||
|   | ||||
| @@ -31,7 +31,7 @@ | ||||
|       </_description> | ||||
|     </key> | ||||
|     <key name="favorite-apps" type="as"> | ||||
|       <default>[ 'epiphany.desktop', 'evolution.desktop', 'rhythmbox.desktop', 'shotwell.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Software.desktop' ]</default> | ||||
|       <default>[ 'epiphany.desktop', 'evolution.desktop', 'empathy.desktop', 'rhythmbox.desktop', 'shotwell.desktop', 'libreoffice-writer.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Documents.desktop', 'org.gnome.Software.desktop' ]</default> | ||||
|       <_summary>List of desktop file IDs for favorite applications</_summary> | ||||
|       <_description> | ||||
|         The applications corresponding to these identifiers | ||||
|   | ||||
| @@ -1,20 +0,0 @@ | ||||
| /* Copyright 2014, Red Hat, Inc. | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or modify it | ||||
|  * under the terms and conditions of the GNU Lesser General Public License, | ||||
|  * version 2.1, as published by the Free Software Foundation. | ||||
|  * | ||||
|  * This program is distributed in the hope it will be useful, but WITHOUT ANY | ||||
|  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | ||||
|  * FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for | ||||
|  * more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU Lesser General Public License | ||||
|  * along with this program; if not, write to the Free Software Foundation, | ||||
|  * Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||||
|  */ | ||||
| @import url("resource:///org/gnome/shell/theme/gnome-shell.css"); | ||||
|  | ||||
| stage { | ||||
|   -st-icon-style: symbolic; | ||||
| } | ||||
| @@ -232,10 +232,6 @@ StScrollBar StButton#vhandle:active { | ||||
|     border-width: 0px; | ||||
| } | ||||
|  | ||||
| .app-well-menu { | ||||
|     max-width: 400px; | ||||
| } | ||||
|  | ||||
| /* The remaining popup-menu sizing is all done in ems, so that if you | ||||
|  * override .popup-menu.font-size, everything else will scale with it. | ||||
|  */ | ||||
| @@ -829,7 +825,6 @@ StScrollBar StButton#vhandle:active { | ||||
| .window-clone-border { | ||||
|     border: 4px solid rgba(255, 255, 255, 0.5); | ||||
|     border-radius: 4px; | ||||
|     box-shadow: inset 0px 0px 0px 1px rgba(255, 255, 255, 0.5); | ||||
| } | ||||
|  | ||||
| .notification-close { | ||||
| @@ -1495,10 +1490,6 @@ StScrollBar StButton#vhandle:active { | ||||
|     text-align: right; | ||||
| } | ||||
|  | ||||
| .events-day-time-ellipses { | ||||
|     color: rgba(153, 153, 153, 1.0); | ||||
| } | ||||
|  | ||||
| .events-day-time:rtl { | ||||
|     text-align: left; | ||||
| } | ||||
| @@ -2107,15 +2098,6 @@ StScrollBar StButton#vhandle:active { | ||||
|     font-size: 14pt; | ||||
| } | ||||
|  | ||||
| /* Resize popup */ | ||||
| .resize-popup { | ||||
|     border-radius: 10px; | ||||
|     background-color: rgba(0.0, 0.0, 0.0, 0.9); | ||||
|     border: 2px solid #868686; | ||||
|     padding: 16px; | ||||
|     font-size: 14pt; | ||||
| } | ||||
|  | ||||
| /* ShellMountOperation Dialogs */ | ||||
| .shell-mount-operation-icon { | ||||
|     icon-size: 48px; | ||||
| @@ -2397,10 +2379,6 @@ StScrollBar StButton#vhandle:active { | ||||
| } | ||||
|  | ||||
| /* Login Dialog */ | ||||
| .login-dialog-banner-view { | ||||
|     padding-top: 24px; | ||||
|     max-width: 23em; | ||||
| } | ||||
|  | ||||
| .framed-user-icon { | ||||
|     border: 2px solid #8b8b8b; | ||||
| @@ -2413,7 +2391,11 @@ StScrollBar StButton#vhandle:active { | ||||
| } | ||||
|  | ||||
| .login-dialog-banner { | ||||
|     font-size: 10pt; | ||||
|     font-weight: bold; | ||||
|     text-align: center; | ||||
|     color: #666666; | ||||
|     padding-bottom: 1em; | ||||
| } | ||||
|  | ||||
| .login-dialog { | ||||
|   | ||||
| @@ -59,10 +59,14 @@ const Application = new Lang.Class({ | ||||
|  | ||||
|     _extensionAvailable: function(uuid) { | ||||
|         let extension = ExtensionUtils.extensions[uuid]; | ||||
|         let checkVersion = !this._settings.get_boolean('disable-extension-version-validation'); | ||||
|  | ||||
|         if (!extension) | ||||
|             return false; | ||||
|  | ||||
|         if (checkVersion && ExtensionUtils.isOutOfDate(extension)) | ||||
|             return false; | ||||
|  | ||||
|         if (!extension.dir.get_child('prefs.js').query_exists(null)) | ||||
|             return false; | ||||
|  | ||||
| @@ -281,10 +285,6 @@ const ExtensionRow = new Lang.Class({ | ||||
|             function() { | ||||
|                 this._switch.state = this._isEnabled(); | ||||
|             })); | ||||
|         this._settings.connect('changed::disable-extension-version-validation', | ||||
|             Lang.bind(this, function() { | ||||
|                 this._switch.sensitive = this._canEnable(); | ||||
|             })); | ||||
|  | ||||
|         this._buildUI(); | ||||
|     }, | ||||
| @@ -323,7 +323,6 @@ const ExtensionRow = new Lang.Class({ | ||||
|         this.prefsButton = button; | ||||
|  | ||||
|         this._switch = new Gtk.Switch({ valign: Gtk.Align.CENTER, | ||||
|                                         sensitive: this._canEnable(), | ||||
|                                         state: this._isEnabled() }); | ||||
|         this._switch.connect('notify::active', Lang.bind(this, | ||||
|             function() { | ||||
| @@ -336,13 +335,6 @@ const ExtensionRow = new Lang.Class({ | ||||
|         hbox.add(this._switch); | ||||
|     }, | ||||
|  | ||||
|     _canEnable: function() { | ||||
|         let extension = ExtensionUtils.extensions[this.uuid]; | ||||
|         let checkVersion = !this._settings.get_boolean('disable-extension-version-validation'); | ||||
|  | ||||
|         return !(checkVersion && ExtensionUtils.isOutOfDate(extension)); | ||||
|     }, | ||||
|  | ||||
|     _isEnabled: function() { | ||||
|         let extensions = this._settings.get_strv('enabled-extensions'); | ||||
|         return extensions.indexOf(this.uuid) != -1; | ||||
|   | ||||
| @@ -1,7 +1,6 @@ | ||||
| // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- | ||||
|  | ||||
| const Clutter = imports.gi.Clutter; | ||||
| const Gio = imports.gi.Gio; | ||||
| const Lang = imports.lang; | ||||
| const Signals = imports.signals; | ||||
| const St = imports.gi.St; | ||||
| @@ -127,7 +126,7 @@ const AuthPrompt = new Lang.Class({ | ||||
|  | ||||
|         this._initButtons(); | ||||
|  | ||||
|         let spinnerIcon = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/process-working.svg'); | ||||
|         let spinnerIcon = global.datadir + '/theme/process-working.svg'; | ||||
|         this._spinner = new Animation.AnimatedIcon(spinnerIcon, DEFAULT_BUTTON_WELL_ICON_SIZE); | ||||
|         this._spinner.actor.opacity = 0; | ||||
|         this._spinner.actor.show(); | ||||
| @@ -135,7 +134,8 @@ const AuthPrompt = new Lang.Class({ | ||||
|     }, | ||||
|  | ||||
|     _onDestroy: function() { | ||||
|         this._userVerifier.destroy(); | ||||
|         this._userVerifier.clear(); | ||||
|         this._userVerifier.disconnectAll(); | ||||
|         this._userVerifier = null; | ||||
|     }, | ||||
|  | ||||
| @@ -261,7 +261,6 @@ const AuthPrompt = new Lang.Class({ | ||||
|  | ||||
|     _onVerificationComplete: function() { | ||||
|         this.verificationStatus = AuthPromptStatus.VERIFICATION_SUCCEEDED; | ||||
| 	this.cancelButton.reactive = false; | ||||
|     }, | ||||
|  | ||||
|     _onReset: function() { | ||||
| @@ -420,20 +419,17 @@ const AuthPrompt = new Lang.Class({ | ||||
|     }, | ||||
|  | ||||
|     setUser: function(user) { | ||||
|         let oldChild = this._userWell.get_child(); | ||||
|         if (oldChild) | ||||
|             oldChild.destroy(); | ||||
|  | ||||
|         if (user) { | ||||
|             let userWidget = new UserWidget.UserWidget(user); | ||||
|             this._userWell.set_child(userWidget.actor); | ||||
|         } else { | ||||
|             this._userWell.set_child(null); | ||||
|         } | ||||
|     }, | ||||
|  | ||||
|     reset: function() { | ||||
|         let oldStatus = this.verificationStatus; | ||||
|         this.verificationStatus = AuthPromptStatus.NOT_VERIFYING; | ||||
|         this.cancelButton.reactive = true; | ||||
|  | ||||
|         if (oldStatus == AuthPromptStatus.VERIFYING) | ||||
|             this._userVerifier.cancel(); | ||||
| @@ -502,9 +498,6 @@ const AuthPrompt = new Lang.Class({ | ||||
|     }, | ||||
|  | ||||
|     cancel: function() { | ||||
|         if (this.verificationStatus == AuthPromptStatus.NOT_VERIFYING || this.verificationStatus == AuthPromptStatus.VERIFICATION_SUCCEEDED) { | ||||
|             return; | ||||
|         } | ||||
|         this.reset(); | ||||
|         this.emit('cancelled'); | ||||
|     } | ||||
|   | ||||
| @@ -26,7 +26,6 @@ const Gtk = imports.gi.Gtk; | ||||
| const Lang = imports.lang; | ||||
| const Mainloop = imports.mainloop; | ||||
| const Meta = imports.gi.Meta; | ||||
| const Pango = imports.gi.Pango; | ||||
| const Shell = imports.gi.Shell; | ||||
| const Signals = imports.signals; | ||||
| const St = imports.gi.St; | ||||
| @@ -65,8 +64,6 @@ const UserListItem = new Lang.Class({ | ||||
|                                      reactive: true, | ||||
|                                      x_align: St.Align.START, | ||||
|                                      x_fill: true }); | ||||
|         this.actor.connect('destroy', | ||||
|                            Lang.bind(this, this._onDestroy)); | ||||
|  | ||||
|         this._userWidget = new UserWidget.UserWidget(this.user); | ||||
|         layout.add(this._userWidget.actor); | ||||
| @@ -90,10 +87,6 @@ const UserListItem = new Lang.Class({ | ||||
|             this.actor.remove_style_pseudo_class('logged-in'); | ||||
|     }, | ||||
|  | ||||
|     _onDestroy: function() { | ||||
|         this._user.disconnect(this._userChangedId); | ||||
|     }, | ||||
|  | ||||
|     _onClicked: function() { | ||||
|         this.emit('activate'); | ||||
|     }, | ||||
| @@ -365,12 +358,12 @@ const LoginDialog = new Lang.Class({ | ||||
|     Name: 'LoginDialog', | ||||
|  | ||||
|     _init: function(parentActor) { | ||||
|         this.actor = new Shell.GenericContainer({ style_class: 'login-dialog', | ||||
|         this.actor = new St.Widget({ accessible_role: Atk.Role.WINDOW, | ||||
|                                      layout_manager: new Clutter.BinLayout(), | ||||
|                                      style_class: 'login-dialog', | ||||
|                                      visible: false }); | ||||
|         this.actor.get_accessible().set_role(Atk.Role.WINDOW); | ||||
|  | ||||
|         this.actor.add_constraint(new Layout.MonitorConstraint({ primary: true })); | ||||
|         this.actor.connect('allocate', Lang.bind(this, this._onAllocate)); | ||||
|         this.actor.connect('destroy', Lang.bind(this, this._onDestroy)); | ||||
|         parentActor.add_child(this.actor); | ||||
|  | ||||
| @@ -380,11 +373,12 @@ const LoginDialog = new Lang.Class({ | ||||
|         if (GLib.getenv('GDM_GREETER_TEST') != '1') { | ||||
|             this._greeter = gdmClient.get_greeter_sync(null); | ||||
|  | ||||
|             this._defaultSessionChangedId = this._greeter.connect('default-session-name-changed', | ||||
|             this._greeter.connect('default-session-name-changed', | ||||
|                                   Lang.bind(this, this._onDefaultSessionChanged)); | ||||
|             this._sessionOpenedId = this._greeter.connect('session-opened', | ||||
|  | ||||
|             this._greeter.connect('session-opened', | ||||
|                                   Lang.bind(this, this._onSessionOpened)); | ||||
|             this._timedLoginRequestedId = this._greeter.connect('timed-login-requested', | ||||
|             this._greeter.connect('timed-login-requested', | ||||
|                                   Lang.bind(this, this._onTimedLoginRequested)); | ||||
|         } | ||||
|  | ||||
| @@ -400,16 +394,23 @@ const LoginDialog = new Lang.Class({ | ||||
|                                Lang.bind(this, this._updateLogo)); | ||||
|  | ||||
|         this._textureCache = St.TextureCache.get_default(); | ||||
|         this._updateLogoTextureId = this._textureCache.connect('texture-file-changed', | ||||
|         this._textureCache.connect('texture-file-changed', | ||||
|                                    Lang.bind(this, this._updateLogoTexture)); | ||||
|  | ||||
|         this._userSelectionBox = new St.BoxLayout({ style_class: 'login-dialog-user-selection-box', | ||||
|                                                     x_align: Clutter.ActorAlign.CENTER, | ||||
|                                                     y_align: Clutter.ActorAlign.CENTER, | ||||
|                                                     x_expand: true, | ||||
|                                                     y_expand: true, | ||||
|                                                     vertical: true, | ||||
|                                                     visible: false }); | ||||
|         this.actor.add_child(this._userSelectionBox); | ||||
|  | ||||
|         this._bannerLabel = new St.Label({ style_class: 'login-dialog-banner', | ||||
|                                            text: '' }); | ||||
|         this._userSelectionBox.add(this._bannerLabel); | ||||
|         this._updateBanner(); | ||||
|  | ||||
|         this._userList = new UserList(); | ||||
|         this._userSelectionBox.add(this._userList.actor, | ||||
|                                    { expand: true, | ||||
| @@ -444,25 +445,11 @@ const LoginDialog = new Lang.Class({ | ||||
|                                      x_align: St.Align.START, | ||||
|                                      x_fill: true }); | ||||
|  | ||||
|         this._bannerView = new St.ScrollView({ style_class: 'login-dialog-banner-view', | ||||
|                                                opacity: 0, | ||||
|                                                vscrollbar_policy: Gtk.PolicyType.AUTOMATIC, | ||||
|                                                hscrollbar_policy: Gtk.PolicyType.NEVER }); | ||||
|         this.actor.add_child(this._bannerView); | ||||
|  | ||||
|         let bannerBox = new St.BoxLayout({ vertical: true }); | ||||
|  | ||||
|         this._bannerView.add_actor(bannerBox); | ||||
|         this._bannerLabel = new St.Label({ style_class: 'login-dialog-banner', | ||||
|                                            text: '' }); | ||||
|         this._bannerLabel.clutter_text.line_wrap = true; | ||||
|         this._bannerLabel.clutter_text.ellipsize = Pango.EllipsizeMode.NONE; | ||||
|         bannerBox.add_child(this._bannerLabel); | ||||
|         this._updateBanner(); | ||||
|  | ||||
|         this._logoBin = new St.Widget({ style_class: 'login-dialog-logo-bin', | ||||
|                                         x_align: Clutter.ActorAlign.CENTER, | ||||
|                                         y_align: Clutter.ActorAlign.END }); | ||||
|                                         y_align: Clutter.ActorAlign.END, | ||||
|                                         x_expand: true, | ||||
|                                         y_expand: true }); | ||||
|         this.actor.add_child(this._logoBin); | ||||
|         this._updateLogo(); | ||||
|  | ||||
| @@ -489,184 +476,10 @@ const LoginDialog = new Lang.Class({ | ||||
|         // If the user list is enabled, it should take key focus; make sure the | ||||
|         // screen shield is initialized first to prevent it from stealing the | ||||
|         // focus later | ||||
|         this._startupCompleteId = Main.layoutManager.connect('startup-complete', | ||||
|         Main.layoutManager.connect('startup-complete', | ||||
|                                    Lang.bind(this, this._updateDisableUserList)); | ||||
|     }, | ||||
|  | ||||
|     _getBannerAllocation: function (dialogBox) { | ||||
|         let actorBox = new Clutter.ActorBox(); | ||||
|  | ||||
|         let [minWidth, minHeight, natWidth, natHeight] = this._bannerView.get_preferred_size(); | ||||
|         let centerX = dialogBox.x1 + (dialogBox.x2 - dialogBox.x1) / 2; | ||||
|  | ||||
|         actorBox.x1 = centerX - natWidth / 2; | ||||
|         actorBox.y1 = dialogBox.y1 + Main.layoutManager.panelBox.height; | ||||
|         actorBox.x2 = actorBox.x1 + natWidth; | ||||
|         actorBox.y2 = actorBox.y1 + natHeight; | ||||
|  | ||||
|         return actorBox; | ||||
|     }, | ||||
|  | ||||
|     _getLogoBinAllocation: function (dialogBox) { | ||||
|         let actorBox = new Clutter.ActorBox(); | ||||
|  | ||||
|         let [minWidth, minHeight, natWidth, natHeight] = this._logoBin.get_preferred_size(); | ||||
|         let centerX = dialogBox.x1 + (dialogBox.x2 - dialogBox.x1) / 2; | ||||
|  | ||||
|         actorBox.x1 = centerX - natWidth / 2; | ||||
|         actorBox.y1 = dialogBox.y2 - natHeight; | ||||
|         actorBox.x2 = actorBox.x1 + natWidth; | ||||
|         actorBox.y2 = actorBox.y1 + natHeight; | ||||
|  | ||||
|         return actorBox; | ||||
|     }, | ||||
|  | ||||
|     _getCenterActorAllocation: function (dialogBox, actor) { | ||||
|         let actorBox = new Clutter.ActorBox(); | ||||
|  | ||||
|         let [minWidth, minHeight, natWidth, natHeight] = actor.get_preferred_size(); | ||||
|         let centerX = dialogBox.x1 + (dialogBox.x2 - dialogBox.x1) / 2; | ||||
|         let centerY = dialogBox.y1 + (dialogBox.y2 - dialogBox.y1) / 2; | ||||
|  | ||||
|         actorBox.x1 = centerX - natWidth / 2; | ||||
|         actorBox.y1 = centerY - natHeight / 2; | ||||
|         actorBox.x2 = actorBox.x1 + natWidth; | ||||
|         actorBox.y2 = actorBox.y1 + natHeight; | ||||
|  | ||||
|         return actorBox; | ||||
|     }, | ||||
|  | ||||
|     _onAllocate: function (actor, dialogBox, flags) { | ||||
|         let dialogWidth = dialogBox.x2 - dialogBox.x1; | ||||
|         let dialogHeight = dialogBox.y2 - dialogBox.y1; | ||||
|  | ||||
|         // First find out what space the children require | ||||
|         let bannerAllocation = null; | ||||
|         let bannerHeight = 0; | ||||
|         let bannerWidth = 0; | ||||
|         if (this._bannerView.visible) { | ||||
|             bannerAllocation = this._getBannerAllocation(dialogBox, this._bannerView); | ||||
|             bannerHeight = bannerAllocation.y2 - bannerAllocation.y1; | ||||
|             bannerWidth = bannerAllocation.x2 - bannerAllocation.x1; | ||||
|         } | ||||
|  | ||||
|         let authPromptAllocation = null; | ||||
|         let authPromptHeight = 0; | ||||
|         let authPromptWidth = 0; | ||||
|         if (this._authPrompt.actor.visible) { | ||||
|             authPromptAllocation = this._getCenterActorAllocation(dialogBox, this._authPrompt.actor); | ||||
|             authPromptHeight = authPromptAllocation.y2 - authPromptAllocation.y1; | ||||
|             authPromptWidth = authPromptAllocation.x2 - authPromptAllocation.x1; | ||||
|         } | ||||
|  | ||||
|         let userSelectionAllocation = null; | ||||
|         let userSelectionHeight = 0; | ||||
|         if (this._userSelectionBox.visible) { | ||||
|             userSelectionAllocation = this._getCenterActorAllocation(dialogBox, this._userSelectionBox); | ||||
|             userSelectionHeight = userSelectionAllocation.y2 - userSelectionAllocation.y1; | ||||
|         } | ||||
|  | ||||
|         let logoAllocation = null; | ||||
|         let logoHeight = 0; | ||||
|         if (this._logoBin.visible) { | ||||
|             logoAllocation = this._getLogoBinAllocation(dialogBox); | ||||
|             logoHeight = logoAllocation.y2 - logoAllocation.y1; | ||||
|         } | ||||
|  | ||||
|         // Then figure out if we're overly constrained and need to | ||||
|         // try a different layout, or if we have what extra space we | ||||
|         // can hand out | ||||
|         if (bannerAllocation) { | ||||
|             let leftOverYSpace = dialogHeight - bannerHeight - authPromptHeight - logoHeight; | ||||
|  | ||||
|             if (leftOverYSpace > 0) { | ||||
|                  // First figure out how much left over space is up top | ||||
|                  let leftOverTopSpace = leftOverYSpace / 2; | ||||
|  | ||||
|                  // Then, shift the banner into the middle of that extra space | ||||
|                  let yShift = leftOverTopSpace / 2; | ||||
|  | ||||
|                  bannerAllocation.y1 += yShift; | ||||
|                  bannerAllocation.y2 += yShift; | ||||
|             } else { | ||||
|                  // Then figure out how much space there would be if we switched to a | ||||
|                  // wide layout with banner on one side and authprompt on the other. | ||||
|                  let leftOverXSpace = dialogWidth - authPromptWidth; | ||||
|  | ||||
|                  // In a wide view, half of the available space goes to the banner, | ||||
|                  // and the other half goes to the margins. | ||||
|                  let wideBannerWidth = leftOverXSpace / 2; | ||||
|                  let wideSpacing  = leftOverXSpace - wideBannerWidth; | ||||
|  | ||||
|                  // If we do go with a wide layout, we need there to be at least enough | ||||
|                  // space for the banner and the auth prompt to be the same width, | ||||
|                  // so it doesn't look unbalanced. | ||||
|                  if (authPromptWidth > 0 && wideBannerWidth > authPromptWidth) { | ||||
|                      let centerX = dialogBox.x1 + dialogWidth / 2; | ||||
|                      let centerY = dialogBox.y1 + dialogHeight / 2; | ||||
|  | ||||
|                      // A small portion of the spacing goes down the center of the | ||||
|                      // screen to help delimit the two columns of the wide view | ||||
|                      let centerGap = wideSpacing / 8; | ||||
|  | ||||
|                      // place the banner along the left edge of the center margin | ||||
|                      bannerAllocation.x2 = centerX - centerGap / 2; | ||||
|                      bannerAllocation.x1 = bannerAllocation.x2 - wideBannerWidth; | ||||
|  | ||||
|                      // figure out how tall it would like to be and try to accomodate | ||||
|                      // but don't let it get too close to the logo | ||||
|                      let [wideMinHeight, wideBannerHeight] = this._bannerView.get_preferred_height(wideBannerWidth); | ||||
|  | ||||
|                      let maxWideHeight = dialogHeight - 3 * logoHeight; | ||||
|                      wideBannerHeight = Math.min(maxWideHeight, wideBannerHeight); | ||||
|                      bannerAllocation.y1 = centerY - wideBannerHeight / 2; | ||||
|                      bannerAllocation.y2 = bannerAllocation.y1 + wideBannerHeight; | ||||
|  | ||||
|                      // place the auth prompt along the right edge of the center margin | ||||
|                      authPromptAllocation.x1 = centerX + centerGap / 2; | ||||
|                      authPromptAllocation.x2 = authPromptAllocation.x1 + authPromptWidth; | ||||
|                  } else { | ||||
|                      // If we aren't going to do a wide view, then we need to limit | ||||
|                      // the height of the banner so it will present scrollbars | ||||
|  | ||||
|                      // First figure out how much space there is without the banner | ||||
|                      leftOverYSpace += bannerHeight; | ||||
|  | ||||
|                      // Then figure out how much of that space is up top | ||||
|                      let availableTopSpace = leftOverYSpace / 2; | ||||
|  | ||||
|                      // Then give all of that space to the banner | ||||
|                      bannerAllocation.y2 = bannerAllocation.y1 + availableTopSpace; | ||||
|                  } | ||||
|             } | ||||
|         } else if (userSelectionAllocation) { | ||||
|             // Grow the user list to fill the space | ||||
|             let leftOverYSpace = dialogHeight - userSelectionHeight - logoHeight; | ||||
|  | ||||
|             if (leftOverYSpace > 0) { | ||||
|                 let topExpansion = leftOverYSpace / 2; | ||||
|                 let bottomExpansion = topExpansion; | ||||
|  | ||||
|                 userSelectionAllocation.y1 -= topExpansion; | ||||
|                 userSelectionAllocation.y2 += bottomExpansion; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         // Finally hand out the allocations | ||||
|         if (bannerAllocation) { | ||||
|             this._bannerView.allocate(bannerAllocation, flags); | ||||
|         } | ||||
|  | ||||
|         if (authPromptAllocation) | ||||
|             this._authPrompt.actor.allocate(authPromptAllocation, flags); | ||||
|  | ||||
|         if (userSelectionAllocation) | ||||
|             this._userSelectionBox.allocate(userSelectionAllocation, flags); | ||||
|  | ||||
|         if (logoAllocation) | ||||
|             this._logoBin.allocate(logoAllocation, flags); | ||||
|     }, | ||||
|  | ||||
|     _ensureUserListLoaded: function() { | ||||
|         if (!this._userManager.is_loaded) { | ||||
|             this._userManagerLoadedId = this._userManager.connect('notify::is-loaded', | ||||
| @@ -719,26 +532,14 @@ const LoginDialog = new Lang.Class({ | ||||
|         } | ||||
|     }, | ||||
|  | ||||
|     _fadeInBannerView: function() { | ||||
|         Tweener.addTween(this._bannerView, | ||||
|                          { opacity: 255, | ||||
|                            time: _FADE_ANIMATION_TIME, | ||||
|                            transition: 'easeOutQuad' }); | ||||
|     }, | ||||
|  | ||||
|     _hideBannerView: function() { | ||||
|         Tweener.removeTweens(this._bannerView); | ||||
|         this._bannerView.opacity = 0; | ||||
|     }, | ||||
|  | ||||
|     _updateLogoTexture: function(cache, file) { | ||||
|         if (this._logoFile && !this._logoFile.equal(file)) | ||||
|     _updateLogoTexture: function(cache, uri) { | ||||
|         if (this._logoFileUri != uri) | ||||
|             return; | ||||
|  | ||||
|         this._logoBin.destroy_all_children(); | ||||
|         if (this._logoFile) { | ||||
|         if (this._logoFileUri) { | ||||
|             let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor; | ||||
|             this._logoBin.add_child(this._textureCache.load_file_async(this._logoFile, | ||||
|             this._logoBin.add_child(this._textureCache.load_uri_async(this._logoFileUri, | ||||
|                                                                       -1, _LOGO_ICON_HEIGHT, | ||||
|                                                                       scaleFactor)); | ||||
|         } | ||||
| @@ -747,8 +548,8 @@ const LoginDialog = new Lang.Class({ | ||||
|     _updateLogo: function() { | ||||
|         let path = this._settings.get_string(GdmUtil.LOGO_KEY); | ||||
|  | ||||
|         this._logoFile = path ? Gio.file_new_for_path(path) : null; | ||||
|         this._updateLogoTexture(this._textureCache, this._logoFile); | ||||
|         this._logoFileUri = path ? Gio.file_new_for_path(path).get_uri() : null; | ||||
|         this._updateLogoTexture(this._textureCache, this._logoFileUri); | ||||
|     }, | ||||
|  | ||||
|     _onPrompted: function() { | ||||
| @@ -798,7 +599,6 @@ const LoginDialog = new Lang.Class({ | ||||
|                          { opacity: 255, | ||||
|                            time: _FADE_ANIMATION_TIME, | ||||
|                            transition: 'easeOutQuad' }); | ||||
|         this._fadeInBannerView(); | ||||
|     }, | ||||
|  | ||||
|     _showRealmLoginHint: function(realmManager, hint) { | ||||
| @@ -838,8 +638,6 @@ const LoginDialog = new Lang.Class({ | ||||
|                                                         realmManager.release(); | ||||
|                                                     })); | ||||
|         this._updateCancelButton(); | ||||
|  | ||||
|         this._authPrompt.updateSensitivity(true); | ||||
|         this._showPrompt(); | ||||
|     }, | ||||
|  | ||||
| @@ -867,8 +665,6 @@ const LoginDialog = new Lang.Class({ | ||||
|     }, | ||||
|  | ||||
|     _gotGreeterSessionProxy: function(proxy) { | ||||
|         this._greeterSessionProxy = proxy; | ||||
|         this._greeterSessionProxyChangedId = | ||||
|         proxy.connect('g-properties-changed', Lang.bind(this, function() { | ||||
|             if (proxy.Active) | ||||
|                 this._loginScreenSessionActivated(); | ||||
| @@ -1055,7 +851,6 @@ const LoginDialog = new Lang.Class({ | ||||
|     _showUserList: function() { | ||||
|         this._ensureUserListLoaded(); | ||||
|         this._authPrompt.hide(); | ||||
|         this._hideBannerView(); | ||||
|         this._sessionMenuButton.close(); | ||||
|         this._setUserListExpanded(true); | ||||
|         this._notListedButton.show(); | ||||
| @@ -1095,30 +890,6 @@ const LoginDialog = new Lang.Class({ | ||||
|             this._userManager.disconnect(this._userManagerLoadedId); | ||||
|             this._userManagerLoadedId = 0; | ||||
|         } | ||||
|         if (this._userAddedId) { | ||||
|             this._userManager.disconnect(this._userAddedId); | ||||
|             this._userAddedId = 0; | ||||
|         } | ||||
|         if (this._userRemovedId) { | ||||
|             this._userManager.disconnect(this._userRemovedId); | ||||
|             this._userRemovedId = 0; | ||||
|         } | ||||
|         this._textureCache.disconnect(this._updateLogoTextureId); | ||||
|         Main.layoutManager.disconnect(this._startupCompleteId); | ||||
|         if (this._settings) { | ||||
|             this._settings.run_dispose(); | ||||
|             this._settings = null; | ||||
|         } | ||||
|         if (this._greeter) { | ||||
|             this._greeter.disconnect(this._defaultSessionChangedId); | ||||
|             this._greeter.disconnect(this._sessionOpenedId); | ||||
|             this._greeter.disconnect(this._timedLoginRequestedId); | ||||
|             this._greeter = null; | ||||
|         } | ||||
|         if (this._greeterSessionProxy) { | ||||
|             this._greeterSessionProxy.disconnect(this._greeterSessionProxyChangedId); | ||||
|             this._greeterSessionProxy = null; | ||||
|         } | ||||
|     }, | ||||
|  | ||||
|     _loadUserList: function() { | ||||
| @@ -1133,12 +904,12 @@ const LoginDialog = new Lang.Class({ | ||||
|             this._userList.addUser(users[i]); | ||||
|         } | ||||
|  | ||||
|         this._userAddedId = this._userManager.connect('user-added', | ||||
|         this._userManager.connect('user-added', | ||||
|                                   Lang.bind(this, function(userManager, user) { | ||||
|                                       this._userList.addUser(user); | ||||
|                                   })); | ||||
|  | ||||
|         this._userRemovedId = this._userManager.connect('user-removed', | ||||
|         this._userManager.connect('user-removed', | ||||
|                                   Lang.bind(this, function(userManager, user) { | ||||
|                                       this._userList.removeUser(user); | ||||
|                                   })); | ||||
| @@ -1155,7 +926,7 @@ const LoginDialog = new Lang.Class({ | ||||
|         this.actor.show(); | ||||
|         this.actor.opacity = 0; | ||||
|  | ||||
|         Main.pushModal(this.actor, { actionMode: Shell.ActionMode.LOGIN_SCREEN }); | ||||
|         Main.pushModal(this.actor, { keybindingMode: Shell.KeyBindingMode.LOGIN_SCREEN }); | ||||
|  | ||||
|         Tweener.addTween(this.actor, | ||||
|                          { opacity: 255, | ||||
|   | ||||
| @@ -142,9 +142,9 @@ const ShellUserVerifier = new Lang.Class({ | ||||
|         // after a user has been picked. | ||||
|         this._checkForSmartcard(); | ||||
|  | ||||
|         this._smartcardInsertedId = this._smartcardManager.connect('smartcard-inserted', | ||||
|         this._smartcardManager.connect('smartcard-inserted', | ||||
|                                        Lang.bind(this, this._checkForSmartcard)); | ||||
|         this._smartcardRemovedId = this._smartcardManager.connect('smartcard-removed', | ||||
|         this._smartcardManager.connect('smartcard-removed', | ||||
|                                        Lang.bind(this, this._checkForSmartcard)); | ||||
|  | ||||
|         this._messageQueue = []; | ||||
| @@ -159,7 +159,7 @@ const ShellUserVerifier = new Lang.Class({ | ||||
|         if (this._oVirtCredentialsManager.hasToken()) | ||||
|             this._oVirtUserAuthenticated(this._oVirtCredentialsManager.getToken()); | ||||
|  | ||||
|         this._oVirtUserAuthenticatedId = this._oVirtCredentialsManager.connect('user-authenticated', | ||||
|         this._oVirtCredentialsManager.connect('user-authenticated', | ||||
|                                               Lang.bind(this, this._oVirtUserAuthenticated)); | ||||
|     }, | ||||
|  | ||||
| @@ -191,37 +191,20 @@ const ShellUserVerifier = new Lang.Class({ | ||||
|         } | ||||
|     }, | ||||
|  | ||||
|     _clearUserVerifier: function() { | ||||
|         if (this._userVerifier) { | ||||
|             this._userVerifier.run_dispose(); | ||||
|             this._userVerifier = null; | ||||
|         } | ||||
|     }, | ||||
|  | ||||
|     clear: function() { | ||||
|         if (this._cancellable) { | ||||
|             this._cancellable.cancel(); | ||||
|             this._cancellable = null; | ||||
|         } | ||||
|  | ||||
|         this._clearUserVerifier(); | ||||
|         if (this._userVerifier) { | ||||
|             this._userVerifier.run_dispose(); | ||||
|             this._userVerifier = null; | ||||
|         } | ||||
|  | ||||
|         this._clearMessageQueue(); | ||||
|     }, | ||||
|  | ||||
|     destroy: function() { | ||||
|         this.clear(); | ||||
|  | ||||
|         this._settings.run_dispose(); | ||||
|         this._settings = null; | ||||
|  | ||||
|         this._smartcardManager.disconnect(this._smartcardInsertedId); | ||||
|         this._smartcardManager.disconnect(this._smartcardRemovedId); | ||||
|         this._smartcardManager = null; | ||||
|  | ||||
|         this._oVirtCredentialsManager.disconnect(this._oVirtUserAuthenticatedId); | ||||
|         this._oVirtCredentialsManager = null; | ||||
|     }, | ||||
|  | ||||
|     answerQuery: function(serviceName, answer) { | ||||
|         if (!this.hasPendingMessages) { | ||||
|             this._userVerifier.call_answer_query(serviceName, answer, this._cancellable, null); | ||||
| @@ -300,10 +283,9 @@ const ShellUserVerifier = new Lang.Class({ | ||||
|  | ||||
|         this._fprintManager.GetDefaultDeviceRemote(Gio.DBusCallFlags.NONE, this._cancellable, Lang.bind(this, | ||||
|             function(device, error) { | ||||
|                 if (!error && device) { | ||||
|                 if (!error && device) | ||||
|                     this._haveFingerprintReader = true; | ||||
|                     this._updateDefaultService(); | ||||
|                 } | ||||
|             })); | ||||
|     }, | ||||
|  | ||||
| @@ -344,7 +326,6 @@ const ShellUserVerifier = new Lang.Class({ | ||||
|  | ||||
|     _reauthenticationChannelOpened: function(client, result) { | ||||
|         try { | ||||
|             this._clearUserVerifier(); | ||||
|             this._userVerifier = client.open_reauthentication_channel_finish(result); | ||||
|         } catch(e if e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED)) { | ||||
|             return; | ||||
| @@ -368,7 +349,6 @@ const ShellUserVerifier = new Lang.Class({ | ||||
|  | ||||
|     _userVerifierGot: function(client, result) { | ||||
|         try { | ||||
|             this._clearUserVerifier(); | ||||
|             this._userVerifier = client.get_user_verifier_finish(result); | ||||
|         } catch(e if e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED)) { | ||||
|             return; | ||||
|   | ||||
| @@ -16,9 +16,7 @@ | ||||
|     <file>misc/fileUtils.js</file> | ||||
|     <file>misc/gnomeSession.js</file> | ||||
|     <file>misc/history.js</file> | ||||
|     <file>misc/ibusManager.js</file> | ||||
|     <file>misc/jsParse.js</file> | ||||
|     <file>misc/keyboardManager.js</file> | ||||
|     <file>misc/loginManager.js</file> | ||||
|     <file>misc/modemManager.js</file> | ||||
|     <file>misc/objectManager.js</file> | ||||
| @@ -92,6 +90,7 @@ | ||||
|     <file>ui/windowAttentionHandler.js</file> | ||||
|     <file>ui/windowMenu.js</file> | ||||
|     <file>ui/windowManager.js</file> | ||||
|     <file>ui/wobbly.js</file> | ||||
|     <file>ui/workspace.js</file> | ||||
|     <file>ui/workspaceSwitcherPopup.js</file> | ||||
|     <file>ui/workspaceThumbnail.js</file> | ||||
|   | ||||
| @@ -43,7 +43,7 @@ function getCurrentExtension() { | ||||
|     let path = match[1]; | ||||
|     let file = Gio.File.new_for_path(path); | ||||
|  | ||||
|     // Walk up the directory tree, looking for an extension with | ||||
|     // Walk up the directory tree, looking for an extesion with | ||||
|     // the same UUID as a directory name. | ||||
|     while (file != null) { | ||||
|         let extension = extensions[file.get_basename()]; | ||||
|   | ||||
| @@ -1,234 +0,0 @@ | ||||
| // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- | ||||
|  | ||||
| const Gio = imports.gi.Gio; | ||||
| const GLib = imports.gi.GLib; | ||||
| const Lang = imports.lang; | ||||
| const Mainloop = imports.mainloop; | ||||
| const Signals = imports.signals; | ||||
|  | ||||
| try { | ||||
|     var IBus = imports.gi.IBus; | ||||
|     _checkIBusVersion(1, 5, 2); | ||||
|     const IBusCandidatePopup = imports.ui.ibusCandidatePopup; | ||||
| } catch (e) { | ||||
|     var IBus = null; | ||||
|     log(e); | ||||
| } | ||||
|  | ||||
| let _ibusManager = null; | ||||
|  | ||||
| function _checkIBusVersion(requiredMajor, requiredMinor, requiredMicro) { | ||||
|     if ((IBus.MAJOR_VERSION > requiredMajor) || | ||||
|         (IBus.MAJOR_VERSION == requiredMajor && IBus.MINOR_VERSION > requiredMinor) || | ||||
|         (IBus.MAJOR_VERSION == requiredMajor && IBus.MINOR_VERSION == requiredMinor && | ||||
|          IBus.MICRO_VERSION >= requiredMicro)) | ||||
|         return; | ||||
|  | ||||
|     throw "Found IBus version %d.%d.%d but required is %d.%d.%d". | ||||
|         format(IBus.MAJOR_VERSION, IBus.MINOR_VERSION, IBus.MINOR_VERSION, | ||||
|                requiredMajor, requiredMinor, requiredMicro); | ||||
| } | ||||
|  | ||||
| function getIBusManager() { | ||||
|     if (_ibusManager == null) | ||||
|         _ibusManager = new IBusManager(); | ||||
|     return _ibusManager; | ||||
| } | ||||
|  | ||||
| const IBusManager = new Lang.Class({ | ||||
|     Name: 'IBusManager', | ||||
|  | ||||
|     // This is the longest we'll keep the keyboard frozen until an input | ||||
|     // source is active. | ||||
|     _MAX_INPUT_SOURCE_ACTIVATION_TIME: 4000, // ms | ||||
|     _PRELOAD_ENGINES_DELAY_TIME: 30, // sec | ||||
|  | ||||
|     _init: function() { | ||||
|         if (!IBus) | ||||
|             return; | ||||
|  | ||||
|         IBus.init(); | ||||
|  | ||||
|         this._candidatePopup = new IBusCandidatePopup.CandidatePopup(); | ||||
|  | ||||
|         this._panelService = null; | ||||
|         this._engines = {}; | ||||
|         this._ready = false; | ||||
|         this._registerPropertiesId = 0; | ||||
|         this._currentEngineName = null; | ||||
|         this._preloadEnginesId = 0; | ||||
|  | ||||
|         this._ibus = IBus.Bus.new_async(); | ||||
|         this._ibus.connect('connected', Lang.bind(this, this._onConnected)); | ||||
|         this._ibus.connect('disconnected', Lang.bind(this, this._clear)); | ||||
|         // Need to set this to get 'global-engine-changed' emitions | ||||
|         this._ibus.set_watch_ibus_signal(true); | ||||
|         this._ibus.connect('global-engine-changed', Lang.bind(this, this._engineChanged)); | ||||
|  | ||||
|         this._spawn(); | ||||
|     }, | ||||
|  | ||||
|     _spawn: function() { | ||||
|         try { | ||||
|             Gio.Subprocess.new(['ibus-daemon', '--xim', '--panel', 'disable'], | ||||
|                                Gio.SubprocessFlags.NONE); | ||||
|         } catch(e) { | ||||
|             log('Failed to launch ibus-daemon: ' + e.message); | ||||
|         } | ||||
|     }, | ||||
|  | ||||
|     _clear: function() { | ||||
|         if (this._panelService) | ||||
|             this._panelService.destroy(); | ||||
|  | ||||
|         this._panelService = null; | ||||
|         this._candidatePopup.setPanelService(null); | ||||
|         this._engines = {}; | ||||
|         this._ready = false; | ||||
|         this._registerPropertiesId = 0; | ||||
|         this._currentEngineName = null; | ||||
|  | ||||
|         this.emit('ready', false); | ||||
|  | ||||
|         this._spawn(); | ||||
|     }, | ||||
|  | ||||
|     _onConnected: function() { | ||||
|         this._ibus.list_engines_async(-1, null, Lang.bind(this, this._initEngines)); | ||||
|         this._ibus.request_name_async(IBus.SERVICE_PANEL, | ||||
|                                       IBus.BusNameFlag.REPLACE_EXISTING, | ||||
|                                       -1, null, | ||||
|                                       Lang.bind(this, this._initPanelService)); | ||||
|     }, | ||||
|  | ||||
|     _initEngines: function(ibus, result) { | ||||
|         let enginesList = this._ibus.list_engines_async_finish(result); | ||||
|         if (enginesList) { | ||||
|             for (let i = 0; i < enginesList.length; ++i) { | ||||
|                 let name = enginesList[i].get_name(); | ||||
|                 this._engines[name] = enginesList[i]; | ||||
|             } | ||||
|             this._updateReadiness(); | ||||
|         } else { | ||||
|             this._clear(); | ||||
|         } | ||||
|     }, | ||||
|  | ||||
|     _initPanelService: function(ibus, result) { | ||||
|         let success = this._ibus.request_name_async_finish(result); | ||||
|         if (success) { | ||||
|             this._panelService = new IBus.PanelService({ connection: this._ibus.get_connection(), | ||||
|                                                          object_path: IBus.PATH_PANEL }); | ||||
|             this._candidatePopup.setPanelService(this._panelService); | ||||
|             this._panelService.connect('update-property', Lang.bind(this, this._updateProperty)); | ||||
|             try { | ||||
|                 // IBus versions older than 1.5.10 have a bug which | ||||
|                 // causes spurious set-content-type emissions when | ||||
|                 // switching input focus that temporarily lose purpose | ||||
|                 // and hints defeating its intended semantics and | ||||
|                 // confusing users. We thus don't use it in that case. | ||||
|                 _checkIBusVersion(1, 5, 10); | ||||
|                 this._panelService.connect('set-content-type', Lang.bind(this, this._setContentType)); | ||||
|             } catch (e) { | ||||
|             } | ||||
|             // If an engine is already active we need to get its properties | ||||
|             this._ibus.get_global_engine_async(-1, null, Lang.bind(this, function(i, result) { | ||||
|                 let engine; | ||||
|                 try { | ||||
|                     engine = this._ibus.get_global_engine_async_finish(result); | ||||
|                     if (!engine) | ||||
|                         return; | ||||
|                 } catch(e) { | ||||
|                     return; | ||||
|                 } | ||||
|                 this._engineChanged(this._ibus, engine.get_name()); | ||||
|             })); | ||||
|             this._updateReadiness(); | ||||
|         } else { | ||||
|             this._clear(); | ||||
|         } | ||||
|     }, | ||||
|  | ||||
|     _updateReadiness: function() { | ||||
|         this._ready = (Object.keys(this._engines).length > 0 && | ||||
|                        this._panelService != null); | ||||
|         this.emit('ready', this._ready); | ||||
|     }, | ||||
|  | ||||
|     _engineChanged: function(bus, engineName) { | ||||
|         if (!this._ready) | ||||
|             return; | ||||
|  | ||||
|         this._currentEngineName = engineName; | ||||
|  | ||||
|         if (this._registerPropertiesId != 0) | ||||
|             return; | ||||
|  | ||||
|         this._registerPropertiesId = | ||||
|             this._panelService.connect('register-properties', Lang.bind(this, function(p, props) { | ||||
|                 if (!props.get(0)) | ||||
|                     return; | ||||
|  | ||||
|                 this._panelService.disconnect(this._registerPropertiesId); | ||||
|                 this._registerPropertiesId = 0; | ||||
|  | ||||
|                 this.emit('properties-registered', this._currentEngineName, props); | ||||
|             })); | ||||
|     }, | ||||
|  | ||||
|     _updateProperty: function(panel, prop) { | ||||
|         this.emit('property-updated', this._currentEngineName, prop); | ||||
|     }, | ||||
|  | ||||
|     _setContentType: function(panel, purpose, hints) { | ||||
|         this.emit('set-content-type', purpose, hints); | ||||
|     }, | ||||
|  | ||||
|     activateProperty: function(key, state) { | ||||
|         this._panelService.property_activate(key, state); | ||||
|     }, | ||||
|  | ||||
|     getEngineDesc: function(id) { | ||||
|         if (!IBus || !this._ready) | ||||
|             return null; | ||||
|  | ||||
|         return this._engines[id]; | ||||
|     }, | ||||
|  | ||||
|     setEngine: function(id, callback) { | ||||
|         // Send id even if id == this._currentEngineName | ||||
|         // because 'properties-registered' signal can be emitted | ||||
|         // while this._ibusSources == null on a lock screen. | ||||
|         if (!IBus || !this._ready) { | ||||
|             if (callback) | ||||
|                 callback(); | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         this._ibus.set_global_engine_async(id, this._MAX_INPUT_SOURCE_ACTIVATION_TIME, | ||||
|                                            null, callback); | ||||
|     }, | ||||
|  | ||||
|     preloadEngines: function(ids) { | ||||
|         if (!IBus || !this._ibus || ids.length == 0) | ||||
|             return; | ||||
|  | ||||
|         if (this._preloadEnginesId != 0) { | ||||
|             Mainloop.source_remove(this._preloadEnginesId); | ||||
|             this._preloadEnginesId = 0; | ||||
|         } | ||||
|  | ||||
|         this._preloadEnginesId = | ||||
|             Mainloop.timeout_add_seconds(this._PRELOAD_ENGINES_DELAY_TIME, | ||||
|                                          Lang.bind(this, function() { | ||||
|                                              this._ibus.preload_engines_async( | ||||
|                                                  ids, | ||||
|                                                  -1, | ||||
|                                                  null, | ||||
|                                                  null); | ||||
|                                              this._preloadEnginesId = 0; | ||||
|                                              return GLib.SOURCE_REMOVE; | ||||
|                                          })); | ||||
|     }, | ||||
| }); | ||||
| Signals.addSignalMethods(IBusManager.prototype); | ||||
| @@ -1,153 +0,0 @@ | ||||
| // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- | ||||
|  | ||||
| const GLib = imports.gi.GLib; | ||||
| const GnomeDesktop = imports.gi.GnomeDesktop; | ||||
| const Lang = imports.lang; | ||||
| const Meta = imports.gi.Meta; | ||||
|  | ||||
| const Main = imports.ui.main; | ||||
|  | ||||
| const DEFAULT_LOCALE = 'en_US'; | ||||
| const DEFAULT_LAYOUT = 'us'; | ||||
| const DEFAULT_VARIANT = ''; | ||||
|  | ||||
| let _xkbInfo = null; | ||||
|  | ||||
| function getXkbInfo() { | ||||
|     if (_xkbInfo == null) | ||||
|         _xkbInfo = new GnomeDesktop.XkbInfo(); | ||||
|     return _xkbInfo; | ||||
| } | ||||
|  | ||||
| let _keyboardManager = null; | ||||
|  | ||||
| function getKeyboardManager() { | ||||
|     if (_keyboardManager == null) | ||||
|         _keyboardManager = new KeyboardManager(); | ||||
|     return _keyboardManager; | ||||
| } | ||||
|  | ||||
| function releaseKeyboard() { | ||||
|     if (Main.modalCount > 0) | ||||
|         global.display.unfreeze_keyboard(global.get_current_time()); | ||||
|     else | ||||
|         global.display.ungrab_keyboard(global.get_current_time()); | ||||
| } | ||||
|  | ||||
| function holdKeyboard() { | ||||
|     global.display.freeze_keyboard(global.get_current_time()); | ||||
| } | ||||
|  | ||||
| const KeyboardManager = new Lang.Class({ | ||||
|     Name: 'KeyboardManager', | ||||
|  | ||||
|     // The XKB protocol doesn't allow for more that 4 layouts in a | ||||
|     // keymap. Wayland doesn't impose this limit and libxkbcommon can | ||||
|     // handle up to 32 layouts but since we need to support X clients | ||||
|     // even as a Wayland compositor, we can't bump this. | ||||
|     MAX_LAYOUTS_PER_GROUP: 4, | ||||
|  | ||||
|     _init: function() { | ||||
|         this._xkbInfo = getXkbInfo(); | ||||
|         this._current = null; | ||||
|         this._localeLayoutInfo = this._getLocaleLayout(); | ||||
|         this._layoutInfos = {}; | ||||
|     }, | ||||
|  | ||||
|     _applyLayoutGroup: function(group) { | ||||
|         let options = this._buildOptionsString(); | ||||
|         let [layouts, variants] = this._buildGroupStrings(group); | ||||
|         Meta.get_backend().set_keymap(layouts, variants, options); | ||||
|     }, | ||||
|  | ||||
|     _applyLayoutGroupIndex: function(idx) { | ||||
|         Meta.get_backend().lock_layout_group(idx); | ||||
|     }, | ||||
|  | ||||
|     apply: function(id) { | ||||
|         let info = this._layoutInfos[id]; | ||||
|         if (!info) | ||||
|             return; | ||||
|  | ||||
|         if (this._current && this._current.group == info.group) { | ||||
|             if (this._current.groupIndex != info.groupIndex) | ||||
|                 this._applyLayoutGroupIndex(info.groupIndex); | ||||
|         } else { | ||||
|             this._applyLayoutGroup(info.group); | ||||
|             this._applyLayoutGroupIndex(info.groupIndex); | ||||
|         } | ||||
|  | ||||
|         this._current = info; | ||||
|     }, | ||||
|  | ||||
|     reapply: function() { | ||||
|         if (!this._current) | ||||
|             return; | ||||
|  | ||||
|         this._applyLayoutGroup(this._current.group); | ||||
|         this._applyLayoutGroupIndex(this._current.groupIndex); | ||||
|     }, | ||||
|  | ||||
|     setUserLayouts: function(ids) { | ||||
|         this._current = null; | ||||
|         this._layoutInfos = {}; | ||||
|  | ||||
|         for (let i = 0; i < ids.length; ++i) { | ||||
|             let [found, , , _layout, _variant] = this._xkbInfo.get_layout_info(ids[i]); | ||||
|             if (found) | ||||
|                 this._layoutInfos[ids[i]] = { id: ids[i], layout: _layout, variant: _variant }; | ||||
|         } | ||||
|  | ||||
|         let i = 0; | ||||
|         let group = []; | ||||
|         for (let id in this._layoutInfos) { | ||||
|             // We need to leave one slot on each group free so that we | ||||
|             // can add a layout containing the symbols for the | ||||
|             // language used in UI strings to ensure that toolkits can | ||||
|             // handle mnemonics like Alt+Ф even if the user is | ||||
|             // actually typing in a different layout. | ||||
|             let groupIndex = i % (this.MAX_LAYOUTS_PER_GROUP - 1); | ||||
|             if (groupIndex == 0) | ||||
|                 group = []; | ||||
|  | ||||
|             let info = this._layoutInfos[id]; | ||||
|             group[groupIndex] = info; | ||||
|             info.group = group; | ||||
|             info.groupIndex = groupIndex; | ||||
|  | ||||
|             i += 1; | ||||
|         } | ||||
|     }, | ||||
|  | ||||
|     _getLocaleLayout: function() { | ||||
|         let locale = GLib.get_language_names()[0]; | ||||
|         if (locale.indexOf('_') == -1) | ||||
|             locale = DEFAULT_LOCALE; | ||||
|  | ||||
|         let [found, , id] = GnomeDesktop.get_input_source_from_locale(locale); | ||||
|         if (!found) | ||||
|             [, , id] = GnomeDesktop.get_input_source_from_locale(DEFAULT_LOCALE); | ||||
|  | ||||
|         let [found, , , _layout, _variant] = this._xkbInfo.get_layout_info(id); | ||||
|         if (found) | ||||
|             return { layout: _layout, variant: _variant }; | ||||
|         else | ||||
|             return { layout: DEFAULT_LAYOUT, variant: DEFAULT_VARIANT }; | ||||
|     }, | ||||
|  | ||||
|     _buildGroupStrings: function(_group) { | ||||
|         let group = _group.concat(this._localeLayoutInfo); | ||||
|         let layouts = group.map(function(g) { return g.layout; }).join(','); | ||||
|         let variants = group.map(function(g) { return g.variant; }).join(','); | ||||
|         return [layouts, variants]; | ||||
|     }, | ||||
|  | ||||
|     setKeyboardOptions: function(options) { | ||||
|         this._xkbOptions = options; | ||||
|     }, | ||||
|  | ||||
|     _buildOptionsString: function() { | ||||
|         let options = this._xkbOptions.join(','); | ||||
|         return options; | ||||
|     } | ||||
| }); | ||||
| @@ -58,14 +58,6 @@ const AppSwitcherPopup = new Lang.Class({ | ||||
|         this._currentWindow = -1; | ||||
|  | ||||
|         this.thumbnailsVisible = false; | ||||
|  | ||||
|         let apps = Shell.AppSystem.get_default().get_running (); | ||||
|  | ||||
|         if (apps.length == 0) | ||||
|             return; | ||||
|  | ||||
|         this._switcherList = new AppSwitcher(apps, this); | ||||
|         this._items = this._switcherList.icons; | ||||
|     }, | ||||
|  | ||||
|     _allocate: function (actor, box, flags) { | ||||
| @@ -81,6 +73,7 @@ const AppSwitcherPopup = new Lang.Class({ | ||||
|             let leftPadding = this.actor.get_theme_node().get_padding(St.Side.LEFT); | ||||
|             let rightPadding = this.actor.get_theme_node().get_padding(St.Side.RIGHT); | ||||
|             let bottomPadding = this.actor.get_theme_node().get_padding(St.Side.BOTTOM); | ||||
|             let vPadding = this.actor.get_theme_node().get_vertical_padding(); | ||||
|             let hPadding = leftPadding + rightPadding; | ||||
|  | ||||
|             let icon = this._items[this._selectedIndex].actor; | ||||
| @@ -106,6 +99,20 @@ const AppSwitcherPopup = new Lang.Class({ | ||||
|         } | ||||
|     }, | ||||
|  | ||||
|     _createSwitcher: function() { | ||||
|         let apps = Shell.AppSystem.get_default().get_running (); | ||||
|  | ||||
|         if (apps.length == 0) | ||||
|             return false; | ||||
|  | ||||
|         this._switcherList = new AppSwitcher(apps, this); | ||||
|         this._items = this._switcherList.icons; | ||||
|         if (this._items.length == 0) | ||||
|             return false; | ||||
|  | ||||
|         return true; | ||||
|     }, | ||||
|  | ||||
|     _initialSelection: function(backward, binding) { | ||||
|         if (binding == 'switch-group') { | ||||
|             if (backward) { | ||||
| @@ -358,18 +365,9 @@ const WindowSwitcherPopup = new Lang.Class({ | ||||
|     Name: 'WindowSwitcherPopup', | ||||
|     Extends: SwitcherPopup.SwitcherPopup, | ||||
|  | ||||
|     _init: function() { | ||||
|         this.parent(); | ||||
|     _init: function(items) { | ||||
|         this.parent(items); | ||||
|         this._settings = new Gio.Settings({ schema_id: 'org.gnome.shell.window-switcher' }); | ||||
|  | ||||
|         let windows = this._getWindowList(); | ||||
|  | ||||
|         if (windows.length == 0) | ||||
|             return; | ||||
|  | ||||
|         let mode = this._settings.get_enum('app-icon-mode'); | ||||
|         this._switcherList = new WindowList(windows, mode); | ||||
|         this._items = this._switcherList.icons; | ||||
|     }, | ||||
|  | ||||
|     _getWindowList: function() { | ||||
| @@ -377,6 +375,31 @@ const WindowSwitcherPopup = new Lang.Class({ | ||||
|         return global.display.get_tab_list(Meta.TabList.NORMAL, workspace); | ||||
|     }, | ||||
|  | ||||
|     _createSwitcher: function() { | ||||
|         let windows = this._getWindowList(); | ||||
|  | ||||
|         if (windows.length == 0) | ||||
|             return false; | ||||
|  | ||||
|         let mode = this._settings.get_enum('app-icon-mode'); | ||||
|         this._switcherList = new WindowList(windows, mode); | ||||
|         this._items = this._switcherList.icons; | ||||
|  | ||||
|         if (this._items.length == 0) | ||||
|             return false; | ||||
|  | ||||
|         return true; | ||||
|     }, | ||||
|  | ||||
|     _initialSelection: function(backward, binding) { | ||||
|         if (binding == 'switch-windows-backward' || backward) | ||||
|             this._select(this._items.length - 1); | ||||
|         else if (this._items.length == 1) | ||||
|             this._select(0); | ||||
|         else | ||||
|             this._select(1); | ||||
|     }, | ||||
|  | ||||
|     _keyPressHandler: function(keysym, action) { | ||||
|         if (action == Meta.KeyBindingAction.SWITCH_WINDOWS) { | ||||
|             this._select(this._next()); | ||||
|   | ||||
| @@ -12,7 +12,7 @@ const ANIMATED_ICON_UPDATE_TIMEOUT = 100; | ||||
| const Animation = new Lang.Class({ | ||||
|     Name: 'Animation', | ||||
|  | ||||
|     _init: function(file, width, height, speed) { | ||||
|     _init: function(filename, width, height, speed) { | ||||
|         this.actor = new St.Bin(); | ||||
|         this.actor.connect('destroy', Lang.bind(this, this._onDestroy)); | ||||
|         this._speed = speed; | ||||
| @@ -23,7 +23,7 @@ const Animation = new Lang.Class({ | ||||
|         this._frame = 0; | ||||
|  | ||||
|         let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor; | ||||
|         this._animations = St.TextureCache.get_default().load_sliced_image (file, width, height, scaleFactor, | ||||
|         this._animations = St.TextureCache.get_default().load_sliced_image (filename, width, height, scaleFactor, | ||||
|                                                                             Lang.bind(this, this._animationsLoaded)); | ||||
|         this.actor.set_child(this._animations); | ||||
|     }, | ||||
| @@ -82,7 +82,7 @@ const AnimatedIcon = new Lang.Class({ | ||||
|     Name: 'AnimatedIcon', | ||||
|     Extends: Animation, | ||||
|  | ||||
|     _init: function(file, size) { | ||||
|         this.parent(file, size, size, ANIMATED_ICON_UPDATE_TIMEOUT); | ||||
|     _init: function(filename, size) { | ||||
|         this.parent(filename, size, size, ANIMATED_ICON_UPDATE_TIMEOUT); | ||||
|     } | ||||
| }); | ||||
|   | ||||
| @@ -379,7 +379,9 @@ const AllView = new Lang.Class({ | ||||
|         this.actor.add_actor(this._scrollView); | ||||
|  | ||||
|         this._scrollView.set_policy(Gtk.PolicyType.NEVER, | ||||
|                                     Gtk.PolicyType.EXTERNAL); | ||||
|                                     Gtk.PolicyType.AUTOMATIC); | ||||
|         // we are only using ScrollView for the fade effect, hide scrollbars | ||||
|         this._scrollView.vscroll.hide(); | ||||
|         this._adjustment = this._scrollView.vscroll.adjustment; | ||||
|  | ||||
|         this._pageIndicators = new PageIndicators(); | ||||
| @@ -1265,7 +1267,6 @@ const FolderIcon = new Lang.Class({ | ||||
|             addAppId(appInfo.get_id()); | ||||
|         }); | ||||
|  | ||||
|         this.actor.visible = this.view.getAllItems().length > 0; | ||||
|         this.view.loadGrid(); | ||||
|         this.emit('apps-changed'); | ||||
|     }, | ||||
| @@ -1562,11 +1563,10 @@ const AppIcon = new Lang.Class({ | ||||
|         this.actor.connect('destroy', Lang.bind(this, this._onDestroy)); | ||||
|  | ||||
|         this._menuTimeoutId = 0; | ||||
|         this._stateChangedId = this.app.connect('notify::state', Lang.bind(this, | ||||
|             function () { | ||||
|                 this._updateRunningStyle(); | ||||
|             })); | ||||
|         this._updateRunningStyle(); | ||||
|         this._stateChangedId = this.app.connect('notify::state', | ||||
|                                                 Lang.bind(this, | ||||
|                                                           this._onStateChanged)); | ||||
|         this._onStateChanged(); | ||||
|     }, | ||||
|  | ||||
|     _onDestroy: function() { | ||||
| @@ -1587,7 +1587,7 @@ const AppIcon = new Lang.Class({ | ||||
|         } | ||||
|     }, | ||||
|  | ||||
|     _updateRunningStyle: function() { | ||||
|     _onStateChanged: function() { | ||||
|         if (this.app.state != Shell.AppState.STOPPED) | ||||
|             this.actor.add_style_class_name('running'); | ||||
|         else | ||||
| @@ -1687,8 +1687,7 @@ const AppIcon = new Lang.Class({ | ||||
|     activate: function (button) { | ||||
|         let event = Clutter.get_current_event(); | ||||
|         let modifiers = event ? event.get_state() : 0; | ||||
|         let openNewWindow = this.app.can_open_new_window () && | ||||
|                             modifiers & Clutter.ModifierType.CONTROL_MASK && | ||||
|         let openNewWindow = modifiers & Clutter.ModifierType.CONTROL_MASK && | ||||
|                             this.app.state == Shell.AppState.RUNNING || | ||||
|                             button && button == 2; | ||||
|  | ||||
|   | ||||
| @@ -14,11 +14,6 @@ const RENAMED_DESKTOP_IDS = { | ||||
|     'gcalctool.desktop': 'gnome-calculator.desktop', | ||||
|     'gedit.desktop': 'org.gnome.gedit.desktop', | ||||
|     'glchess.desktop': 'gnome-chess.desktop', | ||||
|     'glines.desktop': 'five-or-more.desktop', | ||||
|     'gnect.desktop': 'four-in-a-row.desktop', | ||||
|     'gnibbles.desktop': 'gnome-nibbles.desktop', | ||||
|     'gnobots2.desktop': 'gnome-robots.desktop', | ||||
|     'gnome-boxes.desktop': 'org.gnome.Boxes.desktop', | ||||
|     'gnome-clocks.desktop': 'org.gnome.clocks.desktop', | ||||
|     'gnome-contacts.desktop': 'org.gnome.Contacts.desktop', | ||||
|     'gnome-documents.desktop': 'org.gnome.Documents.desktop', | ||||
| @@ -28,9 +23,6 @@ const RENAMED_DESKTOP_IDS = { | ||||
|     'gnome-software.desktop': 'org.gnome.Software.desktop', | ||||
|     'gnome-weather.desktop': 'org.gnome.Weather.Application.desktop', | ||||
|     'gnomine.desktop': 'gnome-mines.desktop', | ||||
|     'gnotravex.desktop': 'gnome-tetravex.desktop', | ||||
|     'gnotski.desktop': 'gnome-klotski.desktop', | ||||
|     'gtali.desktop': 'tali.desktop', | ||||
|     'nautilus.desktop': 'org.gnome.Nautilus.desktop', | ||||
|     'polari.desktop': 'org.gnome.Polari.desktop', | ||||
|     'totem.desktop': 'org.gnome.Totem.desktop', | ||||
|   | ||||
| @@ -106,8 +106,6 @@ const Main = imports.ui.main; | ||||
| const Params = imports.misc.params; | ||||
| const Tweener = imports.ui.tweener; | ||||
|  | ||||
| const DEFAULT_BACKGROUND_COLOR = Clutter.Color.from_pixel(0x2e3436ff); | ||||
|  | ||||
| const BACKGROUND_SCHEMA = 'org.gnome.desktop.background'; | ||||
| const PRIMARY_COLOR_KEY = 'primary-color'; | ||||
| const SECONDARY_COLOR_KEY = 'secondary-color'; | ||||
| @@ -127,16 +125,6 @@ const ANIMATION_MIN_WAKEUP_INTERVAL = 1.0; | ||||
|  | ||||
| let _backgroundCache = null; | ||||
|  | ||||
| function _fileEqual0(file1, file2) { | ||||
|     if (file1 == file2) | ||||
|         return true; | ||||
|  | ||||
|     if (!file1 || !file2) | ||||
|         return false; | ||||
|  | ||||
|     return file1.equal(file2); | ||||
| } | ||||
|  | ||||
| const BackgroundCache = new Lang.Class({ | ||||
|     Name: 'BackgroundCache', | ||||
|  | ||||
| @@ -146,25 +134,25 @@ const BackgroundCache = new Lang.Class({ | ||||
|         this._backgroundSources = {}; | ||||
|     }, | ||||
|  | ||||
|     monitorFile: function(file) { | ||||
|         let key = file.hash(); | ||||
|         if (this._fileMonitors[key]) | ||||
|     monitorFile: function(filename) { | ||||
|         if (this._fileMonitors[filename]) | ||||
|             return; | ||||
|  | ||||
|         let file = Gio.File.new_for_path(filename); | ||||
|         let monitor = file.monitor(Gio.FileMonitorFlags.NONE, null); | ||||
|         monitor.connect('changed', | ||||
|                         Lang.bind(this, function() { | ||||
|                             this.emit('file-changed', file); | ||||
|                             this.emit('file-changed', filename); | ||||
|                         })); | ||||
|  | ||||
|         this._fileMonitors[key] = monitor; | ||||
|         this._fileMonitors[filename] = monitor; | ||||
|     }, | ||||
|  | ||||
|     getAnimation: function(params) { | ||||
|         params = Params.parse(params, { file: null, | ||||
|         params = Params.parse(params, { filename: null, | ||||
|                                         onLoaded: null }); | ||||
|  | ||||
|         if (_fileEqual0(this._animationFile, params.file)) { | ||||
|         if (this._animationFilename == params.filename) { | ||||
|             if (params.onLoaded) { | ||||
|                 let id = GLib.idle_add(GLib.PRIORITY_DEFAULT, Lang.bind(this, function() { | ||||
|                     params.onLoaded(this._animation); | ||||
| @@ -172,13 +160,12 @@ const BackgroundCache = new Lang.Class({ | ||||
|                 })); | ||||
|                 GLib.Source.set_name_by_id(id, '[gnome-shell] params.onLoaded'); | ||||
|             } | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         let animation = new Animation({ file: params.file }); | ||||
|         let animation = new Animation({ filename: params.filename }); | ||||
|  | ||||
|         animation.load(Lang.bind(this, function() { | ||||
|                            this._animationFile = params.file; | ||||
|                            this._animationFilename = params.filename; | ||||
|                            this._animation = animation; | ||||
|  | ||||
|                            if (params.onLoaded) { | ||||
| @@ -231,14 +218,14 @@ const Background = new Lang.Class({ | ||||
|         params = Params.parse(params, { monitorIndex: 0, | ||||
|                                         layoutManager: Main.layoutManager, | ||||
|                                         settings: null, | ||||
|                                         file: null, | ||||
|                                         filename: null, | ||||
|                                         style: null }); | ||||
|  | ||||
|         this.background = new Meta.Background({ meta_screen: global.screen }); | ||||
|         this.background._delegate = this; | ||||
|  | ||||
|         this._settings = params.settings; | ||||
|         this._file = params.file; | ||||
|         this._filename = params.filename; | ||||
|         this._style = params.style; | ||||
|         this._monitorIndex = params.monitorIndex; | ||||
|         this._layoutManager = params.layoutManager; | ||||
| @@ -255,7 +242,11 @@ const Background = new Lang.Class({ | ||||
|  | ||||
|     destroy: function() { | ||||
|         this._cancellable.cancel(); | ||||
|         this._removeAnimationTimeout(); | ||||
|  | ||||
|         if (this._updateAnimationTimeoutId) { | ||||
|             GLib.source_remove (this._updateAnimationTimeoutId); | ||||
|             this._updateAnimationTimeoutId = 0; | ||||
|         } | ||||
|  | ||||
|         let i; | ||||
|         let keys = Object.keys(this._fileWatches); | ||||
| @@ -269,13 +260,6 @@ const Background = new Lang.Class({ | ||||
|         this._settingsChangedSignalId = 0; | ||||
|     }, | ||||
|  | ||||
|     updateResolution: function() { | ||||
|         if (this._animation) { | ||||
|             this._removeAnimationTimeout(); | ||||
|             this._updateAnimation(); | ||||
|         } | ||||
|     }, | ||||
|  | ||||
|     _setLoaded: function() { | ||||
|         if (this.isLoaded) | ||||
|             return; | ||||
| @@ -305,28 +289,18 @@ const Background = new Lang.Class({ | ||||
|             this.background.set_gradient(shadingType, color, secondColor); | ||||
|     }, | ||||
|  | ||||
|     _watchFile: function(file) { | ||||
|         let key = file.hash(); | ||||
|         if (this._fileWatches[key]) | ||||
|     _watchFile: function(filename) { | ||||
|         if (this._fileWatches[filename]) | ||||
|             return; | ||||
|  | ||||
|         this._cache.monitorFile(file); | ||||
|         this._cache.monitorFile(filename); | ||||
|         let signalId = this._cache.connect('file-changed', | ||||
|                                            Lang.bind(this, function(cache, changedFile) { | ||||
|                                                if (changedFile.equal(file)) { | ||||
|                                                    let imageCache = Meta.BackgroundImageCache.get_default(); | ||||
|                                                    imageCache.purge(changedFile); | ||||
|                                                if (changedFile == filename) { | ||||
|                                                    this.emit('changed'); | ||||
|                                                } | ||||
|                                            })); | ||||
|         this._fileWatches[key] = signalId; | ||||
|     }, | ||||
|  | ||||
|     _removeAnimationTimeout: function() { | ||||
|         if (this._updateAnimationTimeoutId) { | ||||
|             GLib.source_remove(this._updateAnimationTimeoutId); | ||||
|             this._updateAnimationTimeoutId = 0; | ||||
|         } | ||||
|         this._fileWatches[filename] = signalId; | ||||
|     }, | ||||
|  | ||||
|     _updateAnimation: function() { | ||||
| @@ -342,9 +316,9 @@ const Background = new Lang.Class({ | ||||
|                                           this._animation.transitionProgress, | ||||
|                                           this._style); | ||||
|             } else if (files.length > 0) { | ||||
|                 this.background.set_file(files[0], this._style); | ||||
|                 this.background.set_filename(files[0], this._style); | ||||
|             } else { | ||||
|                 this.background.set_file(null, this._style); | ||||
|                 this.background.set_filename(null, this._style); | ||||
|             } | ||||
|             this._queueUpdateAnimation(); | ||||
|         }); | ||||
| @@ -401,8 +375,8 @@ const Background = new Lang.Class({ | ||||
|         GLib.Source.set_name_by_id(this._updateAnimationTimeoutId, '[gnome-shell] this._updateAnimation'); | ||||
|     }, | ||||
|  | ||||
|     _loadAnimation: function(file) { | ||||
|         this._cache.getAnimation({ file: file, | ||||
|     _loadAnimation: function(filename) { | ||||
|         this._cache.getAnimation({ filename: filename, | ||||
|                                              onLoaded: Lang.bind(this, function(animation) { | ||||
|                                                  this._animation = animation; | ||||
|  | ||||
| @@ -412,17 +386,17 @@ const Background = new Lang.Class({ | ||||
|                                                  } | ||||
|  | ||||
|                                                  this._updateAnimation(); | ||||
|                                              this._watchFile(file); | ||||
|                                                  this._watchFile(filename); | ||||
|                                              }) | ||||
|                                            }); | ||||
|     }, | ||||
|  | ||||
|     _loadImage: function(file) { | ||||
|         this.background.set_file(file, this._style); | ||||
|         this._watchFile(file); | ||||
|     _loadImage: function(filename) { | ||||
|         this.background.set_filename(filename, this._style); | ||||
|         this._watchFile(filename); | ||||
|  | ||||
|         let cache = Meta.BackgroundImageCache.get_default(); | ||||
|         let image = cache.load(file); | ||||
|         let image = cache.load(filename); | ||||
|         if (image.is_loaded()) | ||||
|             this._setLoaded(); | ||||
|         else { | ||||
| @@ -434,11 +408,11 @@ const Background = new Lang.Class({ | ||||
|         } | ||||
|     }, | ||||
|  | ||||
|     _loadFile: function(file) { | ||||
|         if (file.get_basename().endsWith('.xml')) | ||||
|             this._loadAnimation(file); | ||||
|     _loadFile: function(filename) { | ||||
|         if (filename.endsWith('.xml')) | ||||
|             this._loadAnimation(filename); | ||||
|         else | ||||
|             this._loadImage(file); | ||||
|             this._loadImage(filename); | ||||
|     }, | ||||
|  | ||||
|     _load: function () { | ||||
| @@ -446,12 +420,12 @@ const Background = new Lang.Class({ | ||||
|  | ||||
|         this._loadPattern(); | ||||
|  | ||||
|         if (!this._file) { | ||||
|         if (!this._filename) { | ||||
|             this._setLoaded(); | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         this._loadFile(this._file); | ||||
|         this._loadFile(this._filename); | ||||
|     }, | ||||
| }); | ||||
| Signals.addSignalMethods(Background.prototype); | ||||
| @@ -462,12 +436,11 @@ const SystemBackground = new Lang.Class({ | ||||
|     Name: 'SystemBackground', | ||||
|  | ||||
|     _init: function() { | ||||
|         let file = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/noise-texture.png'); | ||||
|         let filename = global.datadir + '/theme/noise-texture.png'; | ||||
|  | ||||
|         if (_systemBackground == null) { | ||||
|             _systemBackground = new Meta.Background({ meta_screen: global.screen }); | ||||
|             _systemBackground.set_color(DEFAULT_BACKGROUND_COLOR); | ||||
|             _systemBackground.set_file(file, GDesktopEnums.BackgroundStyle.WALLPAPER); | ||||
|             _systemBackground.set_filename(filename, GDesktopEnums.BackgroundStyle.WALLPAPER); | ||||
|         } | ||||
|  | ||||
|         this.actor = new Meta.BackgroundActor({ meta_screen: global.screen, | ||||
| @@ -475,7 +448,7 @@ const SystemBackground = new Lang.Class({ | ||||
|                                                 background: _systemBackground }); | ||||
|  | ||||
|         let cache = Meta.BackgroundImageCache.get_default(); | ||||
|         let image = cache.load(file); | ||||
|         let image = cache.load(filename); | ||||
|         if (image.is_loaded()) { | ||||
|             image = null; | ||||
|             let id = GLib.idle_add(GLib.PRIORITY_DEFAULT, Lang.bind(this, function() { | ||||
| @@ -504,37 +477,23 @@ const BackgroundSource = new Lang.Class({ | ||||
|         this._overrideImage = GLib.getenv('SHELL_BACKGROUND_IMAGE'); | ||||
|         this._settings = new Gio.Settings({ schema_id: settingsSchema }); | ||||
|         this._backgrounds = []; | ||||
|  | ||||
|         this._monitorsChangedId = global.screen.connect('monitors-changed', | ||||
|                                                         Lang.bind(this, this._onMonitorsChanged)); | ||||
|     }, | ||||
|  | ||||
|     _onMonitorsChanged: function() { | ||||
|         for (let monitorIndex in this._backgrounds) { | ||||
|             let background = this._backgrounds[monitorIndex]; | ||||
|  | ||||
|             if (monitorIndex < this._layoutManager.monitors.length) { | ||||
|                 background.updateResolution(); | ||||
|             } else { | ||||
|                 background.disconnect(background._changedId); | ||||
|                 background.destroy(); | ||||
|                 delete this._backgrounds[monitorIndex]; | ||||
|             } | ||||
|         } | ||||
|     }, | ||||
|  | ||||
|     getBackground: function(monitorIndex) { | ||||
|         let file = null; | ||||
|         let filename = null; | ||||
|         let style; | ||||
|  | ||||
|         if (this._overrideImage != null) { | ||||
|             file = Gio.File.new_for_path(this._overrideImage); | ||||
|             filename = this._overrideImage; | ||||
|             style = GDesktopEnums.BackgroundStyle.ZOOM; // Hardcode | ||||
|         } else { | ||||
|             style = this._settings.get_enum(BACKGROUND_STYLE_KEY); | ||||
|             if (style != GDesktopEnums.BackgroundStyle.NONE) { | ||||
|                 let uri = this._settings.get_string(PICTURE_URI_KEY); | ||||
|                 file = Gio.File.new_for_commandline_arg(uri); | ||||
|                 if (GLib.uri_parse_scheme(uri) != null) | ||||
|                     filename = Gio.File.new_for_uri(uri).get_path(); | ||||
|                 else | ||||
|                     filename = uri; | ||||
|             } | ||||
|         } | ||||
|  | ||||
| @@ -542,7 +501,7 @@ const BackgroundSource = new Lang.Class({ | ||||
|         // they can have variants that depend on the aspect ratio and | ||||
|         // size of the monitor; for other backgrounds we can use the | ||||
|         // same background object for all monitors. | ||||
|         if (file == null || !file.get_basename().endsWith('.xml')) | ||||
|         if (filename == null || !filename.endsWith('.xml')) | ||||
|             monitorIndex = 0; | ||||
|  | ||||
|         if (!(monitorIndex in this._backgrounds)) { | ||||
| @@ -550,12 +509,12 @@ const BackgroundSource = new Lang.Class({ | ||||
|                 monitorIndex: monitorIndex, | ||||
|                 layoutManager: this._layoutManager, | ||||
|                 settings: this._settings, | ||||
|                 file: file, | ||||
|                 filename: filename, | ||||
|                 style: style | ||||
|             }); | ||||
|  | ||||
|             background._changedId = background.connect('changed', Lang.bind(this, function() { | ||||
|                 background.disconnect(background._changedId); | ||||
|             let changedId = background.connect('changed', Lang.bind(this, function() { | ||||
|                 background.disconnect(changedId); | ||||
|                 background.destroy(); | ||||
|                 delete this._backgrounds[monitorIndex]; | ||||
|             })); | ||||
| @@ -567,13 +526,8 @@ const BackgroundSource = new Lang.Class({ | ||||
|     }, | ||||
|  | ||||
|     destroy: function() { | ||||
|         global.screen.disconnect(this._monitorsChangedId); | ||||
|  | ||||
|         for (let monitorIndex in this._backgrounds) { | ||||
|             let background = this._backgrounds[monitorIndex]; | ||||
|             background.disconnect(background._changedId); | ||||
|             background.destroy(); | ||||
|         } | ||||
|         for (let monitorIndex in this._backgrounds) | ||||
|             this._backgrounds[monitorIndex].destroy(); | ||||
|  | ||||
|         this._backgrounds = null; | ||||
|     } | ||||
| @@ -583,9 +537,9 @@ const Animation = new Lang.Class({ | ||||
|     Name: 'Animation', | ||||
|  | ||||
|     _init: function(params) { | ||||
|         params = Params.parse(params, { file: null }); | ||||
|         params = Params.parse(params, { filename: null }); | ||||
|  | ||||
|         this.file = params.file; | ||||
|         this.filename = params.filename; | ||||
|         this.keyFrameFiles = []; | ||||
|         this.transitionProgress = 0.0; | ||||
|         this.transitionDuration = 0.0; | ||||
| @@ -593,7 +547,9 @@ const Animation = new Lang.Class({ | ||||
|     }, | ||||
|  | ||||
|     load: function(callback) { | ||||
|         this._show = new GnomeDesktop.BGSlideShow({ filename: this.file.get_path() }); | ||||
|         let file = Gio.File.new_for_path(this.filename); | ||||
|  | ||||
|         this._show = new GnomeDesktop.BGSlideShow({ filename: this.filename }); | ||||
|  | ||||
|         this._show.load_async(null, | ||||
|                               Lang.bind(this, | ||||
| @@ -613,16 +569,16 @@ const Animation = new Lang.Class({ | ||||
|         if (this._show.get_num_slides() < 1) | ||||
|             return; | ||||
|  | ||||
|         let [progress, duration, isFixed, filename1, filename2] = this._show.get_current_slide(monitor.width, monitor.height); | ||||
|         let [progress, duration, isFixed, file1, file2] = this._show.get_current_slide(monitor.width, monitor.height); | ||||
|  | ||||
|         this.transitionDuration = duration; | ||||
|         this.transitionProgress = progress; | ||||
|  | ||||
|         if (filename1) | ||||
|             this.keyFrameFiles.push(Gio.File.new_for_path(filename1)); | ||||
|         if (file1) | ||||
|             this.keyFrameFiles.push(file1); | ||||
|  | ||||
|         if (filename2) | ||||
|             this.keyFrameFiles.push(Gio.File.new_for_path(filename2)); | ||||
|         if (file2) | ||||
|             this.keyFrameFiles.push(file2); | ||||
|     }, | ||||
| }); | ||||
| Signals.addSignalMethods(Animation.prototype); | ||||
| @@ -745,7 +701,7 @@ const BackgroundManager = new Lang.Class({ | ||||
|                 background.disconnect(changeSignalId); | ||||
|  | ||||
|             if (backgroundActor.loadedSignalId) | ||||
|                 background.disconnect(backgroundActor.loadedSignalId); | ||||
|                 backgroundActor.background._delegate.disconnect(backgroundActor.loadedSignalId); | ||||
|         })); | ||||
|  | ||||
|         return backgroundActor; | ||||
|   | ||||
| @@ -13,11 +13,9 @@ const Shell = imports.gi.Shell; | ||||
|  | ||||
| const MSECS_IN_DAY = 24 * 60 * 60 * 1000; | ||||
| const SHOW_WEEKDATE_KEY = 'show-weekdate'; | ||||
| const ELLIPSIS_CHAR = '\u2026'; | ||||
|  | ||||
| // alias to prevent xgettext from picking up strings translated in GTK+ | ||||
| const gtk30_ = Gettext_gtk30.gettext; | ||||
| const NC_ = function(context, str) { return str; }; | ||||
|  | ||||
| // in org.gnome.desktop.interface | ||||
| const CLOCK_FORMAT_KEY        = 'clock-format'; | ||||
| @@ -34,10 +32,12 @@ function _sameDay(dateA, dateB) { | ||||
|     return _sameMonth(dateA, dateB) && (dateA.getDate() == dateB.getDate()); | ||||
| } | ||||
|  | ||||
| /* TODO: maybe needs config - right now we assume that Saturday and | ||||
|  * Sunday are non-work days (not true in e.g. Israel, it's Sunday and | ||||
|  * Monday there) | ||||
|  */ | ||||
| function _isWorkDay(date) { | ||||
|     /* Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday). */ | ||||
|     let days = C_('calendar-no-work', "06"); | ||||
|     return days.indexOf(date.getDay().toString()) == -1; | ||||
|     return date.getDay() != 0 && date.getDay() != 6; | ||||
| } | ||||
|  | ||||
| function _getBeginningOfDay(date) { | ||||
| @@ -58,21 +58,19 @@ function _getEndOfDay(date) { | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| function _formatEventTime(event, clockFormat, periodBegin, periodEnd) { | ||||
| function _formatEventTime(event, clockFormat) { | ||||
|     let ret; | ||||
|     let allDay = (event.allDay || (event.date <= periodBegin && event.end >= periodEnd)); | ||||
|     if (allDay) { | ||||
|     if (event.allDay) { | ||||
|         /* Translators: Shown in calendar event list for all day events | ||||
|          * Keep it short, best if you can use less then 10 characters | ||||
|          */ | ||||
|         ret = C_("event list time", "All Day"); | ||||
|     } else { | ||||
|         let date = event.date >= periodBegin ? event.date : event.end; | ||||
|         switch (clockFormat) { | ||||
|         case '24h': | ||||
|             /* Translators: Shown in calendar event list, if 24h format, | ||||
|                \u2236 is a ratio character, similar to : */ | ||||
|             ret = date.toLocaleFormat(C_("event list time", "%H\u2236%M")); | ||||
|             ret = event.date.toLocaleFormat(C_("event list time", "%H\u2236%M")); | ||||
|             break; | ||||
|  | ||||
|         default: | ||||
| @@ -81,13 +79,30 @@ function _formatEventTime(event, clockFormat, periodBegin, periodEnd) { | ||||
|             /* Translators: Shown in calendar event list, if 12h format, | ||||
|                \u2236 is a ratio character, similar to : and \u2009 is | ||||
|                a thin space */ | ||||
|             ret = date.toLocaleFormat(C_("event list time", "%l\u2236%M\u2009%p")); | ||||
|             ret = event.date.toLocaleFormat(C_("event list time", "%l\u2236%M\u2009%p")); | ||||
|             break; | ||||
|         } | ||||
|     } | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| function _getCalendarWeekForDate(date) { | ||||
|     // Based on the algorithms found here: | ||||
|     // http://en.wikipedia.org/wiki/Talk:ISO_week_date | ||||
|     let midnightDate = new Date(date.getFullYear(), date.getMonth(), date.getDate()); | ||||
|     // Need to get Monday to be 1 ... Sunday to be 7 | ||||
|     let dayOfWeek = 1 + ((midnightDate.getDay() + 6) % 7); | ||||
|     let nearestThursday = new Date(midnightDate.getFullYear(), midnightDate.getMonth(), | ||||
|                                    midnightDate.getDate() + (4 - dayOfWeek)); | ||||
|  | ||||
|     let jan1st = new Date(nearestThursday.getFullYear(), 0, 1); | ||||
|     let diffDate = nearestThursday - jan1st; | ||||
|     let dayNumber = Math.floor(Math.abs(diffDate) / MSECS_IN_DAY); | ||||
|     let weekNumber = Math.floor(dayNumber / 7) + 1; | ||||
|  | ||||
|     return weekNumber; | ||||
| } | ||||
|  | ||||
| function _getCalendarDayAbbreviation(dayNumber) { | ||||
|     let abbreviations = [ | ||||
|         /* Translators: Calendar grid abbreviation for Sunday. | ||||
| @@ -233,25 +248,12 @@ const DBusEventSource = new Lang.Class({ | ||||
|         this._initialized = false; | ||||
|         this._dbusProxy = new CalendarServer(); | ||||
|         this._dbusProxy.init_async(GLib.PRIORITY_DEFAULT, null, Lang.bind(this, function(object, result) { | ||||
|             let loaded = false; | ||||
|  | ||||
|             try { | ||||
|                 this._dbusProxy.init_finish(result); | ||||
|                 loaded = true; | ||||
|             } catch(e) { | ||||
|                 if (e.matches(Gio.DBusError, Gio.DBusError.TIMED_OUT)) { | ||||
|                     // Ignore timeouts and install signals as normal, because with high | ||||
|                     // probability the service will appear later on, and we will get a | ||||
|                     // NameOwnerChanged which will finish loading | ||||
|                     // | ||||
|                     // (But still _initialized to false, because the proxy does not know | ||||
|                     // about the HasCalendars property and would cause an exception trying | ||||
|                     // to read it) | ||||
|                 } else { | ||||
|                 log('Error loading calendars: ' + e.message); | ||||
|                 return; | ||||
|             } | ||||
|             } | ||||
|  | ||||
|             this._dbusProxy.connectSignal('Changed', Lang.bind(this, this._onChanged)); | ||||
|  | ||||
| @@ -266,11 +268,9 @@ const DBusEventSource = new Lang.Class({ | ||||
|                 this.emit('notify::has-calendars'); | ||||
|             })); | ||||
|  | ||||
|             this._initialized = loaded; | ||||
|             if (loaded) { | ||||
|             this._initialized = true; | ||||
|             this.emit('notify::has-calendars'); | ||||
|             this._onNameAppeared(); | ||||
|             } | ||||
|         })); | ||||
|     }, | ||||
|  | ||||
| @@ -292,7 +292,6 @@ const DBusEventSource = new Lang.Class({ | ||||
|     }, | ||||
|  | ||||
|     _onNameAppeared: function(owner) { | ||||
|         this._initialized = true; | ||||
|         this._resetCache(); | ||||
|         this._loadEvents(true); | ||||
|     }, | ||||
| @@ -362,12 +361,6 @@ const DBusEventSource = new Lang.Class({ | ||||
|                 result.push(event); | ||||
|             } | ||||
|         } | ||||
|         result.sort(function(event1, event2) { | ||||
|             // sort events by end time on ending day | ||||
|             let d1 = event1.date < begin && event1.end <= end ? event1.end : event1.date; | ||||
|             let d2 = event2.date < begin && event2.end <= end ? event2.end : event2.date; | ||||
|             return d1.getTime() - d2.getTime(); | ||||
|         }); | ||||
|         return result; | ||||
|     }, | ||||
|  | ||||
| @@ -601,7 +594,6 @@ const Calendar = new Lang.Class({ | ||||
|         beginDate.setHours(12); | ||||
|  | ||||
|         this._calendarBegin = new Date(beginDate); | ||||
|         this._markedAsToday = now; | ||||
|  | ||||
|         let year = beginDate.getYear(); | ||||
|  | ||||
| @@ -669,7 +661,7 @@ const Calendar = new Lang.Class({ | ||||
|             this._buttons.push(button); | ||||
|  | ||||
|             if (this._useWeekdate && iter.getDay() == 4) { | ||||
|                 let label = new St.Label({ text: iter.toLocaleFormat('%V'), | ||||
|                 let label = new St.Label({ text: _getCalendarWeekForDate(iter).toString(), | ||||
|                                            style_class: 'calendar-day-base calendar-week-number'}); | ||||
|                 layout.attach(label, rtl ? 7 : 0, row, 1, 1); | ||||
|             } | ||||
| @@ -693,7 +685,7 @@ const Calendar = new Lang.Class({ | ||||
|         else | ||||
|             this._monthLabel.text = this._selectedDate.toLocaleFormat(this._headerFormat); | ||||
|  | ||||
|         if (!this._calendarBegin || !_sameMonth(this._selectedDate, this._calendarBegin) || !_sameDay(now, this._markedAsToday)) | ||||
|         if (!this._calendarBegin || !_sameMonth(this._selectedDate, this._calendarBegin)) | ||||
|             this._rebuildCalendar(); | ||||
|  | ||||
|         this._buttons.forEach(Lang.bind(this, function(button) { | ||||
| @@ -729,16 +721,12 @@ const EventsList = new Lang.Class({ | ||||
|         this._eventSource.connect('changed', Lang.bind(this, this._update)); | ||||
|     }, | ||||
|  | ||||
|     _addEvent: function(event, index, includeDayName, periodBegin, periodEnd) { | ||||
|     _addEvent: function(event, index, includeDayName) { | ||||
|         let dayString; | ||||
|         if (includeDayName) { | ||||
|             if (event.date >= periodBegin) | ||||
|         if (includeDayName) | ||||
|             dayString = _getEventDayAbbreviation(event.date.getDay()); | ||||
|             else /* show event end day if it began earlier */ | ||||
|                 dayString = _getEventDayAbbreviation(event.end.getDay()); | ||||
|         } else { | ||||
|         else | ||||
|             dayString = ''; | ||||
|         } | ||||
|  | ||||
|         let dayLabel = new St.Label({ style_class: 'events-day-dayname', | ||||
|                                       text: dayString, | ||||
| @@ -751,30 +739,16 @@ const EventsList = new Lang.Class({ | ||||
|  | ||||
|         let layout = this.actor.layout_manager; | ||||
|         layout.attach(dayLabel, rtl ? 2 : 0, index, 1, 1); | ||||
|  | ||||
|         let clockFormat = this._desktopSettings.get_string(CLOCK_FORMAT_KEY); | ||||
|         let timeString = _formatEventTime(event, clockFormat, periodBegin, periodEnd); | ||||
|         let timeString = _formatEventTime(event, clockFormat); | ||||
|         let timeLabel = new St.Label({ style_class: 'events-day-time', | ||||
|                                        text: timeString, | ||||
|                                        y_align: Clutter.ActorAlign.START }); | ||||
|         timeLabel.clutter_text.line_wrap = false; | ||||
|         timeLabel.clutter_text.ellipsize = false; | ||||
|  | ||||
|         let preEllipsisLabel = new St.Label({ style_class: 'events-day-time-ellipses', | ||||
|                                               text: ELLIPSIS_CHAR, | ||||
|                                               y_align: Clutter.ActorAlign.START }); | ||||
|         let postEllipsisLabel = new St.Label({ style_class: 'events-day-time-ellipses', | ||||
|                                                text: ELLIPSIS_CHAR, | ||||
|                                                y_align: Clutter.ActorAlign.START }); | ||||
|         if (event.allDay || event.date >= periodBegin) | ||||
|             preEllipsisLabel.opacity = 0; | ||||
|         if (event.allDay || event.end <= periodEnd) | ||||
|             postEllipsisLabel.opacity = 0; | ||||
|  | ||||
|         let timeLabelBoxLayout = new St.BoxLayout(); | ||||
|         timeLabelBoxLayout.add(preEllipsisLabel); | ||||
|         timeLabelBoxLayout.add(timeLabel); | ||||
|         timeLabelBoxLayout.add(postEllipsisLabel); | ||||
|         layout.attach(timeLabelBoxLayout, 1, index, 1, 1); | ||||
|         layout.attach(timeLabel, 1, index, 1, 1); | ||||
|  | ||||
|         let titleLabel = new St.Label({ style_class: 'events-day-task', | ||||
|                                         text: event.summary, | ||||
| @@ -785,8 +759,8 @@ const EventsList = new Lang.Class({ | ||||
|         layout.attach(titleLabel, rtl ? 0 : 2, index, 1, 1); | ||||
|     }, | ||||
|  | ||||
|     _addPeriod: function(header, index, periodBegin, periodEnd, includeDayName, showNothingScheduled) { | ||||
|         let events = this._eventSource.getEvents(periodBegin, periodEnd); | ||||
|     _addPeriod: function(header, index, begin, end, includeDayName, showNothingScheduled) { | ||||
|         let events = this._eventSource.getEvents(begin, end); | ||||
|  | ||||
|         if (events.length == 0 && !showNothingScheduled) | ||||
|             return index; | ||||
| @@ -797,14 +771,15 @@ const EventsList = new Lang.Class({ | ||||
|         index++; | ||||
|  | ||||
|         for (let n = 0; n < events.length; n++) { | ||||
|             this._addEvent(events[n], index, includeDayName, periodBegin, periodEnd); | ||||
|             this._addEvent(events[n], index, includeDayName); | ||||
|             index++; | ||||
|         } | ||||
|  | ||||
|         if (events.length == 0 && showNothingScheduled) { | ||||
|             let now = new Date(); | ||||
|             /* Translators: Text to show if there are no events */ | ||||
|             let nothingEvent = new CalendarEvent(periodBegin, periodBegin, _("Nothing Scheduled"), true); | ||||
|             this._addEvent(nothingEvent, index, false, periodBegin, periodEnd); | ||||
|             let nothingEvent = new CalendarEvent(now, now, _("Nothing Scheduled"), true); | ||||
|             this._addEvent(nothingEvent, index, false); | ||||
|             index++; | ||||
|         } | ||||
|  | ||||
| @@ -817,17 +792,14 @@ const EventsList = new Lang.Class({ | ||||
|         let dayBegin = _getBeginningOfDay(day); | ||||
|         let dayEnd = _getEndOfDay(day); | ||||
|  | ||||
|         let dayFormat; | ||||
|         let dayString; | ||||
|         let now = new Date(); | ||||
|         if (_sameYear(day, now)) | ||||
|             /* Translators: Shown on calendar heading when selected day occurs on current year */ | ||||
|             dayFormat = Shell.util_translate_time_string(NC_("calendar heading", | ||||
|                                                              "%A, %B %d")); | ||||
|             dayString = day.toLocaleFormat(C_("calendar heading", "%A, %B %d")); | ||||
|         else | ||||
|             /* Translators: Shown on calendar heading when selected day occurs on different year */ | ||||
|             dayFormat = Shell.util_translate_time_string(NC_("calendar heading", | ||||
|                                                              "%A, %B %d, %Y")); | ||||
|         let dayString = day.toLocaleFormat(dayFormat); | ||||
|             dayString = day.toLocaleFormat(C_("calendar heading", "%A, %B %d, %Y")); | ||||
|         this._addPeriod(dayString, 0, dayBegin, dayEnd, false, true); | ||||
|     }, | ||||
|  | ||||
|   | ||||
| @@ -84,7 +84,6 @@ const KeyringDialog = new Lang.Class({ | ||||
|         let table = new St.Widget({ style_class: 'keyring-dialog-control-table', | ||||
|                                     layout_manager: layout }); | ||||
|         layout.hookup_style(table); | ||||
|         let rtl = table.get_text_direction() == Clutter.TextDirection.RTL; | ||||
|         let row = 0; | ||||
|  | ||||
|         if (this.prompt.password_visible) { | ||||
| @@ -93,6 +92,7 @@ const KeyringDialog = new Lang.Class({ | ||||
|                                        y_align: Clutter.ActorAlign.CENTER }); | ||||
|             label.set_text(_("Password:")); | ||||
|             label.clutter_text.ellipsize = Pango.EllipsizeMode.NONE; | ||||
|             layout.attach(label, 0, row, 1, 1); | ||||
|             this._passwordEntry = new St.Entry({ style_class: 'prompt-dialog-password-entry', | ||||
|                                                  text: '', | ||||
|                                                  can_focus: true, | ||||
| @@ -100,14 +100,7 @@ const KeyringDialog = new Lang.Class({ | ||||
|             this._passwordEntry.clutter_text.set_password_char('\u25cf'); // ● U+25CF BLACK CIRCLE | ||||
|             ShellEntry.addContextMenu(this._passwordEntry, { isPassword: true }); | ||||
|             this._passwordEntry.clutter_text.connect('activate', Lang.bind(this, this._onPasswordActivate)); | ||||
|  | ||||
|             if (rtl) { | ||||
|                 layout.attach(this._passwordEntry, 0, row, 1, 1); | ||||
|                 layout.attach(label, 1, row, 1, 1); | ||||
|             } else { | ||||
|                 layout.attach(label, 0, row, 1, 1); | ||||
|             layout.attach(this._passwordEntry, 1, row, 1, 1); | ||||
|             } | ||||
|             row++; | ||||
|         } else { | ||||
|             this._passwordEntry = null; | ||||
| @@ -118,6 +111,7 @@ const KeyringDialog = new Lang.Class({ | ||||
|                                         x_align: Clutter.ActorAlign.START, | ||||
|                                         y_align: Clutter.ActorAlign.CENTER })); | ||||
|             label.set_text(_("Type again:")); | ||||
|             layout.attach(label, 0, row, 1, 1); | ||||
|             this._confirmEntry = new St.Entry({ style_class: 'prompt-dialog-password-entry', | ||||
|                                                 text: '', | ||||
|                                                 can_focus: true, | ||||
| @@ -125,13 +119,7 @@ const KeyringDialog = new Lang.Class({ | ||||
|             this._confirmEntry.clutter_text.set_password_char('\u25cf'); // ● U+25CF BLACK CIRCLE | ||||
|             ShellEntry.addContextMenu(this._confirmEntry, { isPassword: true }); | ||||
|             this._confirmEntry.clutter_text.connect('activate', Lang.bind(this, this._onConfirmActivate)); | ||||
|             if (rtl) { | ||||
|                 layout.attach(this._confirmEntry, 0, row, 1, 1); | ||||
|                 layout.attach(label, 1, row, 1, 1); | ||||
|             } else { | ||||
|                 layout.attach(label, 0, row, 1, 1); | ||||
|             layout.attach(this._confirmEntry, 1, row, 1, 1); | ||||
|             } | ||||
|             row++; | ||||
|         } else { | ||||
|             this._confirmEntry = null; | ||||
| @@ -144,7 +132,7 @@ const KeyringDialog = new Lang.Class({ | ||||
|             let choice = new CheckBox.CheckBox(); | ||||
|             this.prompt.bind_property('choice-label', choice.getLabelActor(), 'text', GObject.BindingFlags.SYNC_CREATE); | ||||
|             this.prompt.bind_property('choice-chosen', choice.actor, 'checked', GObject.BindingFlags.SYNC_CREATE | GObject.BindingFlags.BIDIRECTIONAL); | ||||
|             layout.attach(choice.actor, rtl ? 0 : 1, row, 1, 1); | ||||
|             layout.attach(choice.actor, 1, row, 1, 1); | ||||
|             row++; | ||||
|         } | ||||
|  | ||||
| @@ -152,7 +140,7 @@ const KeyringDialog = new Lang.Class({ | ||||
|                                      x_align: Clutter.ActorAlign.START }); | ||||
|         warning.clutter_text.ellipsize = Pango.EllipsizeMode.NONE; | ||||
|         warning.clutter_text.line_wrap = true; | ||||
|         layout.attach(warning, rtl ? 0 : 1, row, 1, 1); | ||||
|         layout.attach(warning, 1, row, 1, 1); | ||||
|         this.prompt.bind_property('warning-visible', warning, 'visible', GObject.BindingFlags.SYNC_CREATE); | ||||
|         this.prompt.bind_property('warning', warning, 'text', GObject.BindingFlags.SYNC_CREATE); | ||||
|  | ||||
|   | ||||
| @@ -380,12 +380,6 @@ const VPNRequestHandler = new Lang.Class({ | ||||
|             argv.push('-i'); | ||||
|         if (flags & NMClient.SecretAgentGetSecretsFlags.REQUEST_NEW) | ||||
|             argv.push('-r'); | ||||
|         if (authHelper.supportsHints) { | ||||
|             for (let i = 0; i < hints.length; i++) { | ||||
|                 argv.push('-t'); | ||||
|                 argv.push(hints[i]); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         this._newStylePlugin = authHelper.externalUIMode; | ||||
|  | ||||
| @@ -604,9 +598,7 @@ const NetworkAgent = new Lang.Class({ | ||||
|     Name: 'NetworkAgent', | ||||
|  | ||||
|     _init: function() { | ||||
|         this._native = new Shell.NetworkAgent({ identifier: 'org.gnome.Shell.NetworkAgent', | ||||
|                                                 capabilities: NMClient.SecretAgentCapabilities.VPN_HINTS | ||||
|                                               }); | ||||
|         this._native = new Shell.NetworkAgent({ identifier: 'org.gnome.Shell.NetworkAgent' }); | ||||
|  | ||||
|         this._dialogs = { }; | ||||
|         this._vpnRequests = { }; | ||||
| @@ -706,23 +698,16 @@ const NetworkAgent = new Lang.Class({ | ||||
|                     let service = keyfile.get_string('VPN Connection', 'service'); | ||||
|                     let binary = keyfile.get_string('GNOME', 'auth-dialog'); | ||||
|                     let externalUIMode = false; | ||||
|                     let hints = false; | ||||
|  | ||||
|                     try { | ||||
|                         externalUIMode = keyfile.get_boolean('GNOME', 'supports-external-ui-mode'); | ||||
|                     } catch(e) { } // ignore errors if key does not exist | ||||
|  | ||||
|                     try { | ||||
|                         hints = keyfile.get_boolean('GNOME', 'supports-hints'); | ||||
|                     } catch(e) { } // ignore errors if key does not exist | ||||
|  | ||||
|                     let path = binary; | ||||
|                     if (!GLib.path_is_absolute(path)) { | ||||
|                         path = GLib.build_filenamev([Config.LIBEXECDIR, path]); | ||||
|                     } | ||||
|  | ||||
|                     if (GLib.file_test(path, GLib.FileTest.IS_EXECUTABLE)) | ||||
|                         this._vpnBinaries[service] = { fileName: path, externalUIMode: externalUIMode, supportsHints: hints }; | ||||
|                         this._vpnBinaries[service] = { fileName: path, externalUIMode: externalUIMode }; | ||||
|                     else | ||||
|                         throw new Error('VPN plugin at %s is not executable'.format(path)); | ||||
|                 } catch(e) { | ||||
|   | ||||
| @@ -36,8 +36,6 @@ const NotificationDirection = { | ||||
|     RECEIVED: 'chat-received' | ||||
| }; | ||||
|  | ||||
| const N_ = function(s) { return s; }; | ||||
|  | ||||
| function makeMessageFromTpMessage(tpMessage, direction) { | ||||
|     let [text, flags] = tpMessage.to_text(); | ||||
|  | ||||
| @@ -952,70 +950,70 @@ const ChatNotification = new Lang.Class({ | ||||
|             // Show only the time if date is on today | ||||
|             if(daysAgo < 1){ | ||||
|                 /* Translators: Time in 24h format */ | ||||
|                 format = N_("%H\u2236%M"); | ||||
|                 format = _("%H\u2236%M"); | ||||
|             } | ||||
|             // Show the word "Yesterday" and time if date is on yesterday | ||||
|             else if(daysAgo <2){ | ||||
|                 /* Translators: this is the word "Yesterday" followed by a | ||||
|                  time string in 24h format. i.e. "Yesterday, 14:30" */ | ||||
|                 // xgettext:no-c-format | ||||
|                 format = N_("Yesterday, %H\u2236%M"); | ||||
|                 format = _("Yesterday, %H\u2236%M"); | ||||
|             } | ||||
|             // Show a week day and time if date is in the last week | ||||
|             else if (daysAgo < 7) { | ||||
|                 /* Translators: this is the week day name followed by a time | ||||
|                  string in 24h format. i.e. "Monday, 14:30" */ | ||||
|                 // xgettext:no-c-format | ||||
|                 format = N_("%A, %H\u2236%M"); | ||||
|                 format = _("%A, %H\u2236%M"); | ||||
|  | ||||
|             } else if (date.getYear() == now.getYear()) { | ||||
|                 /* Translators: this is the month name and day number | ||||
|                  followed by a time string in 24h format. | ||||
|                  i.e. "May 25, 14:30" */ | ||||
|                 // xgettext:no-c-format | ||||
|                 format = N_("%B %d, %H\u2236%M"); | ||||
|                 format = _("%B %d, %H\u2236%M"); | ||||
|             } else { | ||||
|                 /* 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" */ | ||||
|                 // xgettext:no-c-format | ||||
|                 format = N_("%B %d %Y, %H\u2236%M"); | ||||
|                 format = _("%B %d %Y, %H\u2236%M"); | ||||
|             } | ||||
|         } else { | ||||
|             // Show only the time if date is on today | ||||
|             if(daysAgo < 1){ | ||||
|                 /* Translators: Time in 24h format */ | ||||
|                 format = N_("%l\u2236%M %p"); | ||||
|                 format = _("%l\u2236%M %p"); | ||||
|             } | ||||
|             // Show the word "Yesterday" and time if date is on yesterday | ||||
|             else if(daysAgo <2){ | ||||
|                 /* Translators: this is the word "Yesterday" followed by a | ||||
|                  time string in 12h format. i.e. "Yesterday, 2:30 pm" */ | ||||
|                 // xgettext:no-c-format | ||||
|                 format = N_("Yesterday, %l\u2236%M %p"); | ||||
|                 format = _("Yesterday, %l\u2236%M %p"); | ||||
|             } | ||||
|             // Show a week day and time if date is in the last week | ||||
|             else if (daysAgo < 7) { | ||||
|                 /* Translators: this is the week day name followed by a time | ||||
|                  string in 12h format. i.e. "Monday, 2:30 pm" */ | ||||
|                 // xgettext:no-c-format | ||||
|                 format = N_("%A, %l\u2236%M %p"); | ||||
|                 format = _("%A, %l\u2236%M %p"); | ||||
|  | ||||
|             } else if (date.getYear() == now.getYear()) { | ||||
|                 /* Translators: this is the month name and day number | ||||
|                  followed by a time string in 12h format. | ||||
|                  i.e. "May 25, 2:30 pm" */ | ||||
|                 // xgettext:no-c-format | ||||
|                 format = N_("%B %d, %l\u2236%M %p"); | ||||
|                 format = _("%B %d, %l\u2236%M %p"); | ||||
|             } else { | ||||
|                 /* 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"*/ | ||||
|                 // xgettext:no-c-format | ||||
|                 format = N_("%B %d %Y, %l\u2236%M %p"); | ||||
|                 format = _("%B %d %Y, %l\u2236%M %p"); | ||||
|             } | ||||
|         } | ||||
|         return date.toLocaleFormat(Shell.util_translate_time_string(format)); | ||||
|         return date.toLocaleFormat(format); | ||||
|     }, | ||||
|  | ||||
|     appendTimestamp: function() { | ||||
| @@ -1266,8 +1264,9 @@ const SubscriptionRequestNotification = new Lang.Class({ | ||||
|         let file = contact.get_avatar_file(); | ||||
|  | ||||
|         if (file) { | ||||
|             let uri = file.get_uri(); | ||||
|             let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor; | ||||
|             iconBox.child = textureCache.load_file_async(file, iconBox._size, iconBox._size, scaleFactor); | ||||
|             iconBox.child = textureCache.load_uri_async(uri, iconBox._size, iconBox._size, scaleFactor); | ||||
|         } | ||||
|         else { | ||||
|             iconBox.child = new St.Icon({ icon_name: 'avatar-default', | ||||
|   | ||||
| @@ -100,7 +100,7 @@ const CtrlAltTabManager = new Lang.Class({ | ||||
|                     if (app) | ||||
|                         icon = app.create_icon_texture(POPUP_APPICON_SIZE); | ||||
|                     else | ||||
|                         icon = textureCache.bind_cairo_surface_property(windows[i], 'icon'); | ||||
|                         icon = textureCache.bind_pixbuf_property(windows[i], 'icon'); | ||||
|                 } | ||||
|  | ||||
|                 items.push({ name: windows[i].title, | ||||
| @@ -140,10 +140,20 @@ const CtrlAltTabPopup = new Lang.Class({ | ||||
|     Name: 'CtrlAltTabPopup', | ||||
|     Extends: SwitcherPopup.SwitcherPopup, | ||||
|  | ||||
|     _init: function(items) { | ||||
|         this.parent(items); | ||||
|  | ||||
|     _createSwitcher: function() { | ||||
|         this._switcherList = new CtrlAltTabSwitcher(this._items); | ||||
|         return true; | ||||
|     }, | ||||
|  | ||||
|     _initialSelection: function(backward, binding) { | ||||
|         if (binding == 'switch-panels') { | ||||
|             if (backward) | ||||
|                 this._selectedIndex = this._items.length - 1; | ||||
|         } else if (binding == 'switch-panels-backward') { | ||||
|             if (!backward) | ||||
|                 this._selectedIndex = this._items.length - 1; | ||||
|         } | ||||
|         this._select(this._selectedIndex); | ||||
|     }, | ||||
|  | ||||
|     _keyPressHandler: function(keysym, action) { | ||||
|   | ||||
| @@ -3,7 +3,6 @@ | ||||
| const GLib = imports.gi.GLib; | ||||
| const Gio = imports.gi.Gio; | ||||
| const GnomeDesktop = imports.gi.GnomeDesktop; | ||||
| const GObject = imports.gi.GObject; | ||||
| const Lang = imports.lang; | ||||
| const Mainloop = imports.mainloop; | ||||
| const Cairo = imports.cairo; | ||||
| @@ -125,19 +124,14 @@ const DateMenuButton = new Lang.Class({ | ||||
|             if (isOpen) { | ||||
|                 let now = new Date(); | ||||
|                 this._calendar.setDate(now); | ||||
|  | ||||
|                 /* 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"). | ||||
|                  */ | ||||
|                 let dateFormat = Shell.util_translate_time_string (N_("%A %B %e, %Y")); | ||||
|                 this._date.set_label(now.toLocaleFormat(dateFormat)); | ||||
|             } | ||||
|         })); | ||||
|  | ||||
|         // Done with hbox for calendar and event list | ||||
|  | ||||
|         this._clock = new GnomeDesktop.WallClock(); | ||||
|         this._clock.bind_property('clock', this._clockDisplay, 'text', GObject.BindingFlags.SYNC_CREATE); | ||||
|         this._clock.connect('notify::clock', Lang.bind(this, this._updateClockAndDate)); | ||||
|         this._updateClockAndDate(); | ||||
|  | ||||
|         Main.sessionMode.connect('updated', Lang.bind(this, this._sessionUpdated)); | ||||
|         this._sessionUpdated(); | ||||
| @@ -147,7 +141,7 @@ const DateMenuButton = new Lang.Class({ | ||||
|         let now = new Date(); | ||||
|         return now.getYear() == date.getYear() && | ||||
|                now.getMonth() == date.getMonth() && | ||||
|                now.getDate() == date.getDate(); | ||||
|                now.getDay() == date.getDay(); | ||||
|     }, | ||||
|  | ||||
|     _appInstalledChanged: function() { | ||||
| @@ -173,10 +167,6 @@ const DateMenuButton = new Lang.Class({ | ||||
|         } | ||||
|     }, | ||||
|  | ||||
|     _getEventSource: function() { | ||||
|         return new Calendar.DBusEventSource(); | ||||
|     }, | ||||
|  | ||||
|     _setEventSource: function(eventSource) { | ||||
|         if (this._eventSource) | ||||
|             this._eventSource.destroy(); | ||||
| @@ -194,7 +184,7 @@ const DateMenuButton = new Lang.Class({ | ||||
|         let eventSource; | ||||
|         let showEvents = Main.sessionMode.showCalendarEvents; | ||||
|         if (showEvents) { | ||||
|             eventSource = this._getEventSource(); | ||||
|             eventSource = new Calendar.DBusEventSource(); | ||||
|         } else { | ||||
|             eventSource = new Calendar.EmptyEventSource(); | ||||
|         } | ||||
| @@ -206,6 +196,16 @@ const DateMenuButton = new Lang.Class({ | ||||
|         this._dateAndTimeSeparator.actor.visible = Main.sessionMode.allowSettings; | ||||
|     }, | ||||
|  | ||||
|     _updateClockAndDate: function() { | ||||
|         this._clockDisplay.set_text(this._clock.clock); | ||||
|         /* 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"). | ||||
|          */ | ||||
|         let dateFormat = _("%A %B %e, %Y"); | ||||
|         let displayDate = new Date(); | ||||
|         this._date.set_label(displayDate.toLocaleFormat(dateFormat)); | ||||
|     }, | ||||
|  | ||||
|     _getCalendarApp: function() { | ||||
|         if (this._calendarApp !== undefined) | ||||
|             return this._calendarApp; | ||||
|   | ||||
| @@ -6,8 +6,6 @@ const Meta = imports.gi.Meta; | ||||
| const Clutter = imports.gi.Clutter; | ||||
| const St = imports.gi.St; | ||||
|  | ||||
| const Main = imports.ui.main; | ||||
|  | ||||
| const EDGE_THRESHOLD = 20; | ||||
| const DRAG_DISTANCE = 80; | ||||
|  | ||||
| @@ -15,10 +13,9 @@ const EdgeDragAction = new Lang.Class({ | ||||
|     Name: 'EdgeDragAction', | ||||
|     Extends: Clutter.GestureAction, | ||||
|  | ||||
|     _init : function(side, allowedModes) { | ||||
|     _init : function(side) { | ||||
|         this.parent(); | ||||
|         this._side = side; | ||||
|         this._allowedModes = allowedModes; | ||||
|         this.set_n_touch_points(1); | ||||
|  | ||||
|         global.display.connect('grab-op-begin', Lang.bind(this, function() { | ||||
| @@ -37,9 +34,6 @@ const EdgeDragAction = new Lang.Class({ | ||||
|         if (this.get_n_current_points() == 0) | ||||
|             return false; | ||||
|  | ||||
|         if (!(this._allowedModes & Main.actionMode)) | ||||
|             return false; | ||||
|  | ||||
|         let [x, y] = this.get_press_coords(0); | ||||
|         let monitorRect = this._getMonitorRect(x, y); | ||||
|  | ||||
|   | ||||
| @@ -38,6 +38,8 @@ const UserWidget = imports.ui.userWidget; | ||||
|  | ||||
| let _endSessionDialog = null; | ||||
|  | ||||
| const TRIGGER_OFFLINE_UPDATE = '/usr/libexec/pk-trigger-offline-update'; | ||||
|  | ||||
| const _ITEM_ICON_SIZE = 48; | ||||
| const _DIALOG_ICON_SIZE = 48; | ||||
|  | ||||
| @@ -132,18 +134,11 @@ const restartInstallDialogContent = { | ||||
|     showOtherSessions: true, | ||||
| }; | ||||
|  | ||||
| const DialogType = { | ||||
|   LOGOUT: 0 /* GSM_SHELL_END_SESSION_DIALOG_TYPE_LOGOUT */, | ||||
|   SHUTDOWN: 1 /* GSM_SHELL_END_SESSION_DIALOG_TYPE_SHUTDOWN */, | ||||
|   RESTART: 2 /* GSM_SHELL_END_SESSION_DIALOG_TYPE_RESTART */, | ||||
|   UPDATE_RESTART: 3 | ||||
| }; | ||||
|  | ||||
| const DialogContent = { | ||||
|     0 /* DialogType.LOGOUT */: logoutDialogContent, | ||||
|     1 /* DialogType.SHUTDOWN */: shutdownDialogContent, | ||||
|     2 /* DialogType.RESTART */: restartDialogContent, | ||||
|     3 /* DialogType.UPDATE_RESTART */: restartInstallDialogContent | ||||
|     0 /* GSM_SHELL_END_SESSION_DIALOG_TYPE_LOGOUT */: logoutDialogContent, | ||||
|     1 /* GSM_SHELL_END_SESSION_DIALOG_TYPE_SHUTDOWN */: shutdownDialogContent, | ||||
|     2 /* GSM_SHELL_END_SESSION_DIALOG_TYPE_RESTART */: restartDialogContent, | ||||
|     3: restartInstallDialogContent | ||||
| }; | ||||
|  | ||||
| const MAX_USERS_IN_SESSION_DIALOG = 5; | ||||
| @@ -160,19 +155,6 @@ const LogindSessionIface = '<node> \ | ||||
|  | ||||
| const LogindSession = Gio.DBusProxy.makeProxyWrapper(LogindSessionIface); | ||||
|  | ||||
| const PkOfflineIface = '<node> \ | ||||
| <interface name="org.freedesktop.PackageKit.Offline"> \ | ||||
|     <property name="UpdatePrepared" type="b" access="read"/> \ | ||||
|     <property name="TriggerAction" type="s" access="read"/> \ | ||||
|     <method name="Trigger"> \ | ||||
|         <arg type="s" name="action" direction="in"/> \ | ||||
|     </method> \ | ||||
|     <method name="Cancel"/> \ | ||||
| </interface> \ | ||||
| </node>'; | ||||
|  | ||||
| const PkOfflineProxy = Gio.DBusProxy.makeProxyWrapper(PkOfflineIface); | ||||
|  | ||||
| const UPowerIface = '<node> \ | ||||
| <interface name="org.freedesktop.UPower"> \ | ||||
|     <property name="OnBattery" type="b" access="read"/> \ | ||||
| @@ -263,14 +245,9 @@ const EndSessionDialog = new Lang.Class({ | ||||
|         this._loginManager = LoginManager.getLoginManager(); | ||||
|         this._userManager = AccountsService.UserManager.get_default(); | ||||
|         this._user = this._userManager.get_user(GLib.get_user_name()); | ||||
|         this._updatesFile = Gio.File.new_for_path('/system-update'); | ||||
|         this._preparedUpdateFile = Gio.File.new_for_path('/var/lib/PackageKit/prepared-update'); | ||||
|  | ||||
|         this._pkOfflineProxy = new PkOfflineProxy(Gio.DBus.system, | ||||
|                                                   'org.freedesktop.PackageKit', | ||||
|                                                   '/org/freedesktop/PackageKit', | ||||
|                                                   Lang.bind(this, function(proxy, error) { | ||||
|                                                       if (error) | ||||
|                                                           log(error.message); | ||||
|                                                   })); | ||||
|         this._powerProxy = new UPowerProxy(Gio.DBus.system, | ||||
|                                            'org.freedesktop.UPower', | ||||
|                                            '/org/freedesktop/UPower', | ||||
| @@ -522,29 +499,31 @@ const EndSessionDialog = new Lang.Class({ | ||||
|     }, | ||||
|  | ||||
|     _triggerOfflineUpdateReboot: function(callback) { | ||||
|         this._pkOfflineProxy.TriggerRemote('reboot', | ||||
|                                            function (result, error) { | ||||
|             if (error) | ||||
|                 log(error.message); | ||||
|  | ||||
|             callback(); | ||||
|         }); | ||||
|         this._pkexecSpawn([TRIGGER_OFFLINE_UPDATE, 'reboot'], callback); | ||||
|     }, | ||||
|  | ||||
|     _triggerOfflineUpdateShutdown: function(callback) { | ||||
|         this._pkOfflineProxy.TriggerRemote('power-off', | ||||
|                                            function (result, error) { | ||||
|             if (error) | ||||
|                 log(error.message); | ||||
|  | ||||
|             callback(); | ||||
|         }); | ||||
|         this._pkexecSpawn([TRIGGER_OFFLINE_UPDATE, 'power-off'], callback); | ||||
|     }, | ||||
|  | ||||
|     _triggerOfflineUpdateCancel: function(callback) { | ||||
|         this._pkOfflineProxy.CancelRemote(function (result, error) { | ||||
|             if (error) | ||||
|                 log(error.message); | ||||
|         this._pkexecSpawn([TRIGGER_OFFLINE_UPDATE, '--cancel'], callback); | ||||
|     }, | ||||
|  | ||||
|     _pkexecSpawn: function(argv, callback) { | ||||
|         let ret, pid; | ||||
|         try { | ||||
|             [ret, pid] = GLib.spawn_async(null, ['pkexec'].concat(argv), null, | ||||
|                                           GLib.SpawnFlags.DO_NOT_REAP_CHILD | GLib.SpawnFlags.SEARCH_PATH, | ||||
|                                           null); | ||||
|         } catch (e) { | ||||
|             log('Error spawning "pkexec %s": %s'.format(argv.join(' '), e.toString())); | ||||
|             callback(); | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         GLib.child_watch_add(GLib.PRIORITY_DEFAULT, pid, function(pid, status) { | ||||
|             GLib.spawn_close_pid(pid); | ||||
|  | ||||
|             callback(); | ||||
|         }); | ||||
| @@ -698,9 +677,8 @@ const EndSessionDialog = new Lang.Class({ | ||||
|         this._totalSecondsToStayOpen = totalSecondsToStayOpen; | ||||
|         this._type = type; | ||||
|  | ||||
|         if (this._type == DialogType.RESTART && | ||||
|             this._pkOfflineProxy.TriggerAction == 'reboot') | ||||
|             this._type = DialogType.UPDATE_RESTART; | ||||
|         if (this._type == 2 && this._updatesFile.query_exists(null)) | ||||
|             this._type = 3; | ||||
|  | ||||
|         this._applications = []; | ||||
|         this._applicationList.destroy_all_children(); | ||||
| @@ -727,19 +705,19 @@ const EndSessionDialog = new Lang.Class({ | ||||
|         if (dialogContent.showOtherSessions) | ||||
|             this._loadSessions(); | ||||
|  | ||||
|         let updateAlreadyTriggered = this._pkOfflineProxy.TriggerAction == 'power-off' || this._pkOfflineProxy.TriggerAction == 'reboot'; | ||||
|         let updatePrepared = this._pkOfflineProxy.UpdatePrepared; | ||||
|         let preparedUpdate = this._preparedUpdateFile.query_exists(null); | ||||
|         let updateAlreadyTriggered = this._updatesFile.query_exists(null); | ||||
|         let updatesAllowed = this._updatesPermission && this._updatesPermission.allowed; | ||||
|  | ||||
|         _setCheckBoxLabel(this._checkBox, dialogContent.checkBoxText); | ||||
|         this._checkBox.actor.visible = (dialogContent.checkBoxText && updatePrepared && updatesAllowed); | ||||
|         this._checkBox.actor.checked = (updatePrepared && updateAlreadyTriggered); | ||||
|         this._checkBox.actor.visible = (dialogContent.checkBoxText && preparedUpdate && updatesAllowed); | ||||
|         this._checkBox.actor.checked = (preparedUpdate && updateAlreadyTriggered); | ||||
|  | ||||
|         // We show the warning either together with the checkbox, or when | ||||
|         // updates have already been triggered, but the user doesn't have | ||||
|         // enough permissions to cancel them. | ||||
|         this._batteryWarning.visible = (dialogContent.showBatteryWarning && | ||||
|                                         (this._checkBox.actor.visible || updatePrepared && updateAlreadyTriggered && !updatesAllowed)); | ||||
|                                         (this._checkBox.actor.visible || preparedUpdate && updateAlreadyTriggered && !updatesAllowed)); | ||||
|  | ||||
|         this._updateButtons(); | ||||
|  | ||||
|   | ||||
| @@ -77,7 +77,6 @@ function init() { | ||||
|     window._ = Gettext.gettext; | ||||
|     window.C_ = Gettext.pgettext; | ||||
|     window.ngettext = Gettext.ngettext; | ||||
|     window.N_ = function(s) { return s; }; | ||||
|  | ||||
|     // Miscellaneous monkeypatching | ||||
|     _patchContainerClass(St.BoxLayout); | ||||
|   | ||||
| @@ -203,16 +203,14 @@ const InstallExtensionDialog = new Lang.Class({ | ||||
|  | ||||
|         let message = _("Download and install “%s” from extensions.gnome.org?").format(info.name); | ||||
|  | ||||
|         let box = new St.BoxLayout({ style_class: 'prompt-dialog-main-layout', | ||||
|                                      vertical: false }); | ||||
|         let box = new St.BoxLayout(); | ||||
|         this.contentLayout.add(box); | ||||
|  | ||||
|         let gicon = new Gio.FileIcon({ file: Gio.File.new_for_uri(REPOSITORY_URL_BASE + info.icon) }) | ||||
|         let icon = new St.Icon({ gicon: gicon }); | ||||
|         box.add(icon); | ||||
|  | ||||
|         let label = new St.Label({ style_class: 'prompt-dialog-headline', | ||||
|                                    text: message }); | ||||
|         let label = new St.Label({ text: message }); | ||||
|         box.add(label); | ||||
|     }, | ||||
|  | ||||
|   | ||||
| @@ -74,7 +74,7 @@ function disableExtension(uuid) { | ||||
|  | ||||
|     if (extension.stylesheet) { | ||||
|         let theme = St.ThemeContext.get_for_stage(global.stage).get_theme(); | ||||
|         theme.unload_stylesheet(extension.stylesheet); | ||||
|         theme.unload_stylesheet(extension.stylesheet.get_path()); | ||||
|     } | ||||
|  | ||||
|     try { | ||||
| @@ -118,7 +118,7 @@ function enableExtension(uuid) { | ||||
|         let stylesheetFile = extension.dir.get_child(stylesheetNames[i]); | ||||
|         if (stylesheetFile.query_exists(null)) { | ||||
|             let theme = St.ThemeContext.get_for_stage(global.stage).get_theme(); | ||||
|             theme.load_stylesheet(stylesheetFile); | ||||
|             theme.load_stylesheet(stylesheetFile.get_path()); | ||||
|             extension.stylesheet = stylesheetFile; | ||||
|             break; | ||||
|         } | ||||
| @@ -271,17 +271,10 @@ function onEnabledExtensionsChanged() { | ||||
| } | ||||
|  | ||||
| function _onVersionValidationChanged() { | ||||
|     // we want to reload all extensions, but only enable | ||||
|     // extensions when allowed by the sessionMode, so | ||||
|     // temporarily disable them all | ||||
|     enabledExtensions = []; | ||||
|     for (let uuid in ExtensionUtils.extensions) | ||||
|         reloadExtension(ExtensionUtils.extensions[uuid]); | ||||
|     enabledExtensions = getEnabledExtensions(); | ||||
|  | ||||
|     if (Main.sessionMode.allowExtensions) { | ||||
|         enabledExtensions.forEach(function(uuid) { | ||||
|             enableExtension(uuid); | ||||
|             if (ExtensionUtils.extensions[uuid]) | ||||
|                 reloadExtension(ExtensionUtils.extensions[uuid]); | ||||
|         }); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -20,7 +20,6 @@ const EXTRA_SPACE_ANIMATION_TIME = 0.25; | ||||
| const ANIMATION_TIME_IN = 0.350; | ||||
| const ANIMATION_TIME_OUT = 1/2 * ANIMATION_TIME_IN; | ||||
| const ANIMATION_MAX_DELAY_FOR_ITEM = 2/3 * ANIMATION_TIME_IN; | ||||
| const ANIMATION_BASE_DELAY_FOR_ITEM = 1/4 * ANIMATION_MAX_DELAY_FOR_ITEM; | ||||
| const ANIMATION_MAX_DELAY_OUT_FOR_ITEM = 2/3 * ANIMATION_TIME_OUT; | ||||
| const ANIMATION_FADE_IN_TIME_FOR_ITEM = 1/4 * ANIMATION_TIME_IN; | ||||
|  | ||||
| @@ -430,30 +429,34 @@ const IconGrid = new Lang.Class({ | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         // For few items the animation can be slow, so use a smaller | ||||
|         // delay when there are less than 4 items | ||||
|         // (ANIMATION_BASE_DELAY_FOR_ITEM = 1/4 * | ||||
|         // ANIMATION_MAX_DELAY_FOR_ITEM) | ||||
|         let maxDelay = Math.min(ANIMATION_BASE_DELAY_FOR_ITEM * actors.length, | ||||
|                                 ANIMATION_MAX_DELAY_FOR_ITEM); | ||||
|  | ||||
|         for (let index = 0; index < actors.length; index++) { | ||||
|             let actor = actors[index]; | ||||
|             actor.opacity = 0; | ||||
|             actor.reactive = false; | ||||
|             actor.set_scale(0, 0); | ||||
|             actor.set_pivot_point(0.5, 0.5); | ||||
|  | ||||
|             let delay = index / actors.length * maxDelay; | ||||
|             let delay = index / actors.length * ANIMATION_MAX_DELAY_FOR_ITEM; | ||||
|             let [originalX, originalY] = actor.get_transformed_position(); | ||||
|             let [originalWidth, originalHeight,,] = this._getAllocatedChildSizeAndSpacing(actor); | ||||
|  | ||||
|             let actorClone = new Clutter.Clone({ source: actor }); | ||||
|             Main.uiGroup.add_actor(actorClone); | ||||
|  | ||||
|             actorClone.set_position(originalX, originalY); | ||||
|             actorClone.set_scale(0, 0); | ||||
|             actorClone.set_pivot_point(0.5, 0.5); | ||||
|             actorClone.set_size(originalWidth, originalHeight); | ||||
|  | ||||
|             let bounceUpTime = ANIMATION_TIME_IN / 4; | ||||
|             // Defeat onComplete anonymous function closure | ||||
|             let isLastItem = index == actors.length - 1; | ||||
|             Tweener.addTween(actor, | ||||
|             Tweener.addTween(actorClone, | ||||
|                             { time: bounceUpTime, | ||||
|                               transition: 'easeInOutQuad', | ||||
|                               delay: delay, | ||||
|                               scale_x: ANIMATION_BOUNCE_ICON_SCALE, | ||||
|                               scale_y: ANIMATION_BOUNCE_ICON_SCALE, | ||||
|                               onComplete: Lang.bind(this, function() { | ||||
|                                   Tweener.addTween(actor, | ||||
|                                   Tweener.addTween(actorClone, | ||||
|                                                    { time: ANIMATION_TIME_IN - bounceUpTime, | ||||
|                                                      transition: 'easeInOutQuad', | ||||
|                                                      scale_x: 1, | ||||
| @@ -461,7 +464,10 @@ const IconGrid = new Lang.Class({ | ||||
|                                                      onComplete: Lang.bind(this, function() { | ||||
|                                                         if (isLastItem) | ||||
|                                                             this._animationDone(); | ||||
|  | ||||
|                                                         actor.opacity = 255; | ||||
|                                                         actor.reactive = true; | ||||
|                                                         actorClone.destroy(); | ||||
|                                                     }) | ||||
|                                                    }); | ||||
|                               }) | ||||
| @@ -515,10 +521,11 @@ const IconGrid = new Lang.Class({ | ||||
|             let scaleY = sourceScaledHeight / height; | ||||
|             let [adjustedSourcePositionX, adjustedSourcePositionY] = [sourceCenterX - sourceScaledWidth / 2, sourceCenterY - sourceScaledHeight / 2]; | ||||
|  | ||||
|             // Defeat onComplete anonymous function closure | ||||
|             let isLastItem = index == actors.length - 1; | ||||
|  | ||||
|             let movementParams, fadeParams; | ||||
|             if (animationDirection == AnimationDirection.IN) { | ||||
|                 let isLastItem = actor._distance == minDist; | ||||
|  | ||||
|                 actorClone.opacity = 0; | ||||
|                 actorClone.set_scale(scaleX, scaleY); | ||||
|  | ||||
| @@ -546,8 +553,6 @@ const IconGrid = new Lang.Class({ | ||||
|                                delay: delay, | ||||
|                                opacity: 255 }; | ||||
|             } else { | ||||
|                 let isLastItem = actor._distance == maxDist; | ||||
|  | ||||
|                 let [startX, startY]  = actor._transformedPosition; | ||||
|                 actorClone.set_position(startX, startY); | ||||
|  | ||||
| @@ -564,7 +569,6 @@ const IconGrid = new Lang.Class({ | ||||
|                                            this._animationDone(); | ||||
|                                            this._restoreItemsOpacity(); | ||||
|                                        } | ||||
|                                        actor.reactive = true; | ||||
|                                        actorClone.destroy(); | ||||
|                                    })}; | ||||
|                 fadeParams = { time: ANIMATION_FADE_IN_TIME_FOR_ITEM, | ||||
|   | ||||
| @@ -75,7 +75,6 @@ const Key = new Lang.Class({ | ||||
|     _init : function(key) { | ||||
|         this._key = key; | ||||
|         this.actor = this._makeKey(key, GLib.markup_escape_text(key.label, -1)); | ||||
|         this.actor.connect('destroy', Lang.bind(this, this._onDestroy)); | ||||
|  | ||||
|         this._extended_keys = this._key.get_extended_keys(); | ||||
|         this._extended_keyboard = null; | ||||
| @@ -98,13 +97,6 @@ const Key = new Lang.Class({ | ||||
|         } | ||||
|     }, | ||||
|  | ||||
|     _onDestroy: function() { | ||||
|         if (this._boxPointer) { | ||||
|             this._boxPointer.actor.destroy(); | ||||
|             this._boxPointer = null; | ||||
|         } | ||||
|     }, | ||||
|  | ||||
|     _makeKey: function (key, label) { | ||||
|         let button = new St.Button ({ label: label, | ||||
|                                       style_class: 'keyboard-key' }); | ||||
| @@ -187,7 +179,14 @@ const Keyboard = new Lang.Class({ | ||||
|         this._watchNameId = Gio.bus_watch_name(Gio.BusType.SESSION, CURSOR_BUS_NAME, 0, | ||||
|                                                Lang.bind(this, this._sync), | ||||
|                                                Lang.bind(this, this._sync)); | ||||
|         this._daemonProxy = null; | ||||
|         this._daemonProxy = new CaribouDaemonProxy(Gio.DBus.session, CARIBOU_BUS_NAME, | ||||
|                                                    CARIBOU_OBJECT_PATH, | ||||
|                                                    Lang.bind(this, function(proxy, error) { | ||||
|                                                        if (error) { | ||||
|                                                            log(error.message); | ||||
|                                                            return; | ||||
|                                                        } | ||||
|                                                    })); | ||||
|         this._cursorProxy = new CursorManagerProxy(Gio.DBus.session, CURSOR_BUS_NAME, | ||||
|                                                    CURSOR_OBJECT_PATH, | ||||
|                                                    Lang.bind(this, function(proxy, error) { | ||||
| @@ -249,28 +248,15 @@ const Keyboard = new Lang.Class({ | ||||
|         this.actor = null; | ||||
|  | ||||
|         this._destroySource(); | ||||
|         if (this._daemonProxy) { | ||||
|         this._daemonProxy.QuitRemote(function (result, error) { | ||||
|             if (error) { | ||||
|                 log(error.message); | ||||
|                 return; | ||||
|             } | ||||
|         }); | ||||
|             this._daemonProxy = null; | ||||
|         } | ||||
|     }, | ||||
|  | ||||
|     _setupKeyboard: function() { | ||||
|         if (!this._daemonProxy) { | ||||
|             this._daemonProxy = new CaribouDaemonProxy(Gio.DBus.session, CARIBOU_BUS_NAME, | ||||
|                                                        CARIBOU_OBJECT_PATH, | ||||
|                                                        Lang.bind(this, function(proxy, error) { | ||||
|                                                            if (error) { | ||||
|                                                                log(error.message); | ||||
|                                                                return; | ||||
|                                                            } | ||||
|                                                        })); | ||||
|         } | ||||
|         this._daemonProxy.RunRemote(function (result, error) { | ||||
|             if (error) { | ||||
|                 log(error.message); | ||||
| @@ -616,7 +602,7 @@ const Keyboard = new Lang.Class({ | ||||
|  | ||||
|     _moveTemporarily: function () { | ||||
|         let currentWindow = global.screen.get_display().focus_window; | ||||
|         let rect = currentWindow.get_frame_rect(); | ||||
|         let rect = currentWindow.get_outer_rect(); | ||||
|  | ||||
|         let newX = rect.x; | ||||
|         let newY = 3 * this.actor.height / 2; | ||||
|   | ||||
| @@ -20,6 +20,7 @@ const Tweener = imports.ui.tweener; | ||||
| const STARTUP_ANIMATION_TIME = 0.5; | ||||
| const KEYBOARD_ANIMATION_TIME = 0.15; | ||||
| const BACKGROUND_FADE_ANIMATION_TIME = 1.0; | ||||
| const DEFAULT_BACKGROUND_COLOR = Clutter.Color.from_pixel(0x2e3436ff); | ||||
|  | ||||
| // The message tray takes this much pressure | ||||
| // in the pressure barrier at once to release it. | ||||
| @@ -159,10 +160,10 @@ const LayoutManager = new Lang.Class({ | ||||
|         this._isPopupWindowVisible = false; | ||||
|         this._startingUp = true; | ||||
|  | ||||
|         // We don't want to paint the stage background color because either | ||||
|         // the SystemBackground we create or the MetaBackgroundActor inside | ||||
|         // global.window_group covers the entirety of the screen. | ||||
|         global.stage.no_clear_hint = true; | ||||
|         // Normally, the stage is always covered so Clutter doesn't need to clear | ||||
|         // it; however it becomes visible during the startup animation | ||||
|         // See the comment below for a longer explanation | ||||
|         global.stage.background_color = DEFAULT_BACKGROUND_COLOR; | ||||
|  | ||||
|         // Set up stage hierarchy to group all UI actors under one container. | ||||
|         this.uiGroup = new Shell.GenericContainer({ name: 'uiGroup' }); | ||||
| @@ -229,10 +230,6 @@ const LayoutManager = new Lang.Class({ | ||||
|         global.stage.remove_actor(global.top_window_group); | ||||
|         this.uiGroup.add_actor(global.top_window_group); | ||||
|  | ||||
|         let feedbackGroup = Meta.get_feedback_group_for_screen(global.screen); | ||||
|         global.stage.remove_actor(feedbackGroup); | ||||
|         this.uiGroup.add_actor(feedbackGroup); | ||||
|  | ||||
|         this._backgroundGroup = new Meta.BackgroundGroup(); | ||||
|         global.window_group.add_child(this._backgroundGroup); | ||||
|         this._backgroundGroup.lower_bottom(); | ||||
| @@ -262,6 +259,7 @@ const LayoutManager = new Lang.Class({ | ||||
|  | ||||
|         this._inOverview = true; | ||||
|         this._updateVisibility(); | ||||
|         this._updateRegions(); | ||||
|     }, | ||||
|  | ||||
|     hideOverview: function() { | ||||
| @@ -269,6 +267,7 @@ const LayoutManager = new Lang.Class({ | ||||
|  | ||||
|         this._inOverview = false; | ||||
|         this._updateVisibility(); | ||||
|         this._queueUpdateRegions(); | ||||
|     }, | ||||
|  | ||||
|     _sessionUpdated: function() { | ||||
| @@ -422,7 +421,10 @@ const LayoutManager = new Lang.Class({ | ||||
|         this.panelBox.set_position(this.primaryMonitor.x, this.primaryMonitor.y); | ||||
|         this.panelBox.set_size(this.primaryMonitor.width, -1); | ||||
|  | ||||
|         if (this.keyboardIndex < 0) | ||||
|             this.keyboardIndex = this.primaryIndex; | ||||
|         else | ||||
|             this._updateKeyboardBox(); | ||||
|  | ||||
|         this.trayBox.set_position(this.bottomMonitor.x, | ||||
|                                   this.bottomMonitor.y + this.bottomMonitor.height); | ||||
| @@ -458,8 +460,8 @@ const LayoutManager = new Lang.Class({ | ||||
|     _setupTrayPressure: function() { | ||||
|         this._trayPressure = new PressureBarrier(MESSAGE_TRAY_PRESSURE_THRESHOLD, | ||||
|                                                  MESSAGE_TRAY_PRESSURE_TIMEOUT, | ||||
|                                                  Shell.ActionMode.NORMAL | | ||||
|                                                  Shell.ActionMode.OVERVIEW); | ||||
|                                                  Shell.KeyBindingMode.NORMAL | | ||||
|                                                  Shell.KeyBindingMode.OVERVIEW); | ||||
|         this._trayPressure.setEventFilter(this._trayBarrierEventFilter); | ||||
|         this._trayPressure.connect('trigger', function(barrier) { | ||||
|             if (Main.layoutManager.bottomMonitor.inFullscreen) | ||||
| @@ -587,6 +589,10 @@ const LayoutManager = new Lang.Class({ | ||||
|     // | ||||
|     // When starting a normal user session, we want to grow it out of the middle | ||||
|     // of the screen. | ||||
|     // | ||||
|     // Usually, we don't want to paint the stage background color because the | ||||
|     // MetaBackgroundActor inside global.window_group covers the entirety of the | ||||
|     // screen. So, we set no_clear_hint at the end of the animation. | ||||
|  | ||||
|     _prepareStartupAnimation: function() { | ||||
|         // During the initial transition, add a simple actor to block all events, | ||||
| @@ -667,6 +673,10 @@ const LayoutManager = new Lang.Class({ | ||||
|     }, | ||||
|  | ||||
|     _startupAnimationComplete: function() { | ||||
|         // At this point, the UI group is covering everything, so | ||||
|         // we no longer need to clear the stage | ||||
|         global.stage.no_clear_hint = true; | ||||
|  | ||||
|         this._coverPane.destroy(); | ||||
|         this._coverPane = null; | ||||
|  | ||||
| @@ -905,6 +915,9 @@ const LayoutManager = new Lang.Class({ | ||||
|     }, | ||||
|  | ||||
|     _queueUpdateRegions: function() { | ||||
|         if (Main.sessionMode.isGreeter) | ||||
|             return; | ||||
|  | ||||
|         if (this._startingUp) | ||||
|             return; | ||||
|  | ||||
| @@ -938,16 +951,13 @@ const LayoutManager = new Lang.Class({ | ||||
|     }, | ||||
|  | ||||
|     _updateRegions: function() { | ||||
|         let rects = [], struts = [], i; | ||||
|  | ||||
|         if (this._updateRegionIdle) { | ||||
|             Meta.later_remove(this._updateRegionIdle); | ||||
|             delete this._updateRegionIdle; | ||||
|         } | ||||
|  | ||||
|         // No need to update when we have a modal. | ||||
|         if (Main.modalCount > 0) | ||||
|             return GLib.SOURCE_REMOVE; | ||||
|  | ||||
|         let rects = [], struts = [], i; | ||||
|         let isPopupMenuVisible = global.top_window_group.get_children().some(isPopupMetaWindow); | ||||
|         let wantsInputRegion = !isPopupMenuVisible; | ||||
|  | ||||
| @@ -1033,13 +1043,7 @@ const LayoutManager = new Lang.Class({ | ||||
|         } | ||||
|  | ||||
|         return GLib.SOURCE_REMOVE; | ||||
|     }, | ||||
|  | ||||
|     modalEnded: function() { | ||||
|         // We don't update the stage input region while in a modal, | ||||
|         // so queue an update now. | ||||
|         this._queueUpdateRegions(); | ||||
|     }, | ||||
|     } | ||||
| }); | ||||
| Signals.addSignalMethods(LayoutManager.prototype); | ||||
|  | ||||
| @@ -1067,8 +1071,8 @@ const HotCorner = new Lang.Class({ | ||||
|  | ||||
|         this._pressureBarrier = new PressureBarrier(HOT_CORNER_PRESSURE_THRESHOLD, | ||||
|                                                     HOT_CORNER_PRESSURE_TIMEOUT, | ||||
|                                                     Shell.ActionMode.NORMAL | | ||||
|                                                     Shell.ActionMode.OVERVIEW); | ||||
|                                                     Shell.KeyBindingMode.NORMAL | | ||||
|                                                     Shell.KeyBindingMode.OVERVIEW); | ||||
|         this._pressureBarrier.connect('trigger', Lang.bind(this, this._toggleOverview)); | ||||
|  | ||||
|         // Cache the three ripples instead of dynamically creating and destroying them. | ||||
| @@ -1245,10 +1249,10 @@ const HotCorner = new Lang.Class({ | ||||
| const PressureBarrier = new Lang.Class({ | ||||
|     Name: 'PressureBarrier', | ||||
|  | ||||
|     _init: function(threshold, timeout, actionMode) { | ||||
|     _init: function(threshold, timeout, keybindingMode) { | ||||
|         this._threshold = threshold; | ||||
|         this._timeout = timeout; | ||||
|         this._actionMode = actionMode; | ||||
|         this._keybindingMode = keybindingMode; | ||||
|         this._barriers = []; | ||||
|         this._eventFilter = null; | ||||
|  | ||||
| @@ -1351,7 +1355,7 @@ const PressureBarrier = new Lang.Class({ | ||||
|             return; | ||||
|  | ||||
|         // Throw out all events not in the proper keybinding mode | ||||
|         if (!(this._actionMode & Main.actionMode)) | ||||
|         if (!(this._keybindingMode & Main.keybindingMode)) | ||||
|             return; | ||||
|  | ||||
|         let slide = this._getDistanceAlongBarrier(barrier, event); | ||||
|   | ||||
| @@ -1086,7 +1086,7 @@ const LookingGlass = new Lang.Class({ | ||||
|         if (this._open) | ||||
|             return; | ||||
|  | ||||
|         if (!Main.pushModal(this._entry, { actionMode: Shell.ActionMode.LOOKING_GLASS })) | ||||
|         if (!Main.pushModal(this._entry, { keybindingMode: Shell.KeyBindingMode.LOOKING_GLASS })) | ||||
|             return; | ||||
|  | ||||
|         this._notebook.selectIndex(0); | ||||
|   | ||||
| @@ -1198,7 +1198,12 @@ const ZoomRegion = new Lang.Class({ | ||||
|  | ||||
|         // Add a background for when the magnified uiGroup is scrolled | ||||
|         // out of view (don't want to see desktop showing through). | ||||
|         this._background = (new Background.SystemBackground()).actor; | ||||
|         this._background = new Clutter.Actor({ background_color: Main.DEFAULT_BACKGROUND_COLOR, | ||||
|                                                layout_manager: new Clutter.BinLayout(), | ||||
|                                                width: global.screen_width, | ||||
|                                                height: global.screen_height }); | ||||
|         let noiseTexture = (new Background.SystemBackground()).actor; | ||||
|         this._background.add_actor(noiseTexture); | ||||
|         mainGroup.add_actor(this._background); | ||||
|  | ||||
|         // Clone the group that contains all of UI on the screen.  This is the | ||||
|   | ||||
| @@ -4,7 +4,6 @@ const Clutter = imports.gi.Clutter; | ||||
| const Gdk = imports.gi.Gdk; | ||||
| const Gio = imports.gi.Gio; | ||||
| const GLib = imports.gi.GLib; | ||||
| const Gtk = imports.gi.Gtk; | ||||
| const Lang = imports.lang; | ||||
| const Mainloop = imports.mainloop; | ||||
| const Meta = imports.gi.Meta; | ||||
| @@ -41,6 +40,8 @@ const Magnifier = imports.ui.magnifier; | ||||
| const XdndHandler = imports.ui.xdndHandler; | ||||
| const Util = imports.misc.util; | ||||
|  | ||||
| const DEFAULT_BACKGROUND_COLOR = Clutter.Color.from_pixel(0x2e3436ff); | ||||
|  | ||||
| const A11Y_SCHEMA = 'org.gnome.desktop.a11y.keyboard'; | ||||
| const STICKY_KEYS_ENABLE = 'stickykeys-enable'; | ||||
| const GNOMESHELL_STARTED_MESSAGE_ID = 'f3ea493c22934e26811cd62abe8e203a'; | ||||
| @@ -63,7 +64,7 @@ let shellMountOpDBusService = null; | ||||
| let screenSaverDBus = null; | ||||
| let screencastService = null; | ||||
| let modalCount = 0; | ||||
| let actionMode = Shell.ActionMode.NONE; | ||||
| let keybindingMode = Shell.KeyBindingMode.NONE; | ||||
| let modalActorFocusStack = []; | ||||
| let uiGroup = null; | ||||
| let magnifier = null; | ||||
| @@ -76,19 +77,18 @@ let _cssStylesheet = null; | ||||
| let _a11ySettings = null; | ||||
|  | ||||
| function _sessionUpdated() { | ||||
|     if (sessionMode.isPrimary) | ||||
|     _loadDefaultStylesheet(); | ||||
|  | ||||
|     wm.setCustomKeybindingHandler('panel-main-menu', | ||||
|                                   Shell.ActionMode.NORMAL | | ||||
|                                   Shell.ActionMode.OVERVIEW, | ||||
|                                   Shell.KeyBindingMode.NORMAL | | ||||
|                                   Shell.KeyBindingMode.OVERVIEW, | ||||
|                                   sessionMode.hasOverview ? Lang.bind(overview, overview.toggle) : null); | ||||
|     wm.allowKeybinding('overlay-key', Shell.ActionMode.NORMAL | | ||||
|                                       Shell.ActionMode.OVERVIEW); | ||||
|     wm.allowKeybinding('overlay-key', Shell.KeyBindingMode.NORMAL | | ||||
|                                       Shell.KeyBindingMode.OVERVIEW); | ||||
|  | ||||
|     wm.setCustomKeybindingHandler('panel-run-dialog', | ||||
|                                   Shell.ActionMode.NORMAL | | ||||
|                                   Shell.ActionMode.OVERVIEW, | ||||
|                                   Shell.KeyBindingMode.NORMAL | | ||||
|                                   Shell.KeyBindingMode.OVERVIEW, | ||||
|                                   sessionMode.hasRunDialog ? openRunDialog : null); | ||||
|  | ||||
|     if (!sessionMode.hasRunDialog) { | ||||
| @@ -111,8 +111,6 @@ function start() { | ||||
|  | ||||
|     sessionMode = new SessionMode.SessionMode(); | ||||
|     sessionMode.connect('updated', _sessionUpdated); | ||||
|     Gtk.Settings.get_default().connect('notify::gtk-theme-name', | ||||
|                                        _loadDefaultStylesheet); | ||||
|     _initializeUI(); | ||||
|  | ||||
|     shellDBusService = new ShellDBus.GnomeShell(); | ||||
| @@ -133,9 +131,6 @@ function _initializeUI() { | ||||
|     Shell.WindowTracker.get_default(); | ||||
|     Shell.AppUsage.get_default(); | ||||
|  | ||||
|     let resource = Gio.Resource.load(global.datadir + '/gnome-shell-theme.gresource'); | ||||
|     resource._register(); | ||||
|  | ||||
|     _loadDefaultStylesheet(); | ||||
|  | ||||
|     // Setup the stage hierarchy early | ||||
| @@ -209,8 +204,8 @@ function _initializeUI() { | ||||
|     } | ||||
|  | ||||
|     layoutManager.connect('startup-complete', function() { | ||||
|         if (actionMode == Shell.ActionMode.NONE) { | ||||
|             actionMode = Shell.ActionMode.NORMAL; | ||||
|                               if (keybindingMode == Shell.KeyBindingMode.NONE) { | ||||
|                                   keybindingMode = Shell.KeyBindingMode.NORMAL; | ||||
|                               } | ||||
|                               if (screenShield) { | ||||
|                                   screenShield.lockIfWasLocked(); | ||||
| @@ -229,38 +224,12 @@ function _initializeUI() { | ||||
|                           }); | ||||
| } | ||||
|  | ||||
| function _getStylesheet(name) { | ||||
|     let stylesheet; | ||||
|  | ||||
|     stylesheet = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/' + name); | ||||
|     if (stylesheet.query_exists(null)) | ||||
|         return stylesheet; | ||||
|  | ||||
|     stylesheet = Gio.File.new_for_path(global.datadir + '/theme/' + name); | ||||
|     if (stylesheet.query_exists(null)) | ||||
|         return stylesheet; | ||||
|  | ||||
|     return null; | ||||
| } | ||||
|  | ||||
| function _getDefaultStylesheet() { | ||||
|     let stylesheet = null; | ||||
|     let name = sessionMode.stylesheetName; | ||||
|  | ||||
|     // Look for a high-contrast variant first when using GTK+'s HighContrast | ||||
|     // theme | ||||
|     if (Gtk.Settings.get_default().gtk_theme_name == 'HighContrast') | ||||
|         stylesheet = _getStylesheet(name.replace('.css', '-high-contrast.css')); | ||||
|  | ||||
|     if (stylesheet == null) | ||||
|         stylesheet = _getStylesheet(sessionMode.stylesheetName); | ||||
|  | ||||
|     return stylesheet; | ||||
| } | ||||
|  | ||||
| function _loadDefaultStylesheet() { | ||||
|     let stylesheet = _getDefaultStylesheet(); | ||||
|     if (_defaultCssStylesheet && _defaultCssStylesheet.equal(stylesheet)) | ||||
|     if (!sessionMode.isPrimary) | ||||
|         return; | ||||
|  | ||||
|     let stylesheet = global.datadir + '/theme/' + sessionMode.stylesheetName; | ||||
|     if (_defaultCssStylesheet == stylesheet) | ||||
|         return; | ||||
|  | ||||
|     _defaultCssStylesheet = stylesheet; | ||||
| @@ -272,7 +241,7 @@ function _loadDefaultStylesheet() { | ||||
|  * | ||||
|  * Get the theme CSS file that the shell will load | ||||
|  * | ||||
|  * Returns: A #GFile that contains the theme CSS, | ||||
|  * Returns: A file path that contains the theme CSS, | ||||
|  *          null if using the default | ||||
|  */ | ||||
| function getThemeStylesheet() { | ||||
| @@ -287,7 +256,7 @@ function getThemeStylesheet() { | ||||
|  * Set the theme CSS file that the shell will load | ||||
|  */ | ||||
| function setThemeStylesheet(cssStylesheet) { | ||||
|     _cssStylesheet = cssStylesheet ? Gio.File.new_for_path(cssStylesheet) : null; | ||||
|     _cssStylesheet = cssStylesheet; | ||||
| } | ||||
|  | ||||
| /** | ||||
| @@ -372,7 +341,7 @@ function _findModal(actor) { | ||||
|  *  - options: Meta.ModalOptions flags to indicate that the pointer is | ||||
|  *             already grabbed | ||||
|  * | ||||
|  *  - actionMode: used to set the current Shell.ActionMode to filter | ||||
|  *  - keybindingMode: used to set the current Shell.KeyBindingMode to filter | ||||
|  *                    global keybindings; the default of NONE will filter | ||||
|  *                    out all keybindings | ||||
|  * | ||||
| @@ -381,7 +350,7 @@ function _findModal(actor) { | ||||
| function pushModal(actor, params) { | ||||
|     params = Params.parse(params, { timestamp: global.get_current_time(), | ||||
|                                     options: 0, | ||||
|                                     actionMode: Shell.ActionMode.NONE }); | ||||
|                                     keybindingMode: Shell.KeyBindingMode.NONE }); | ||||
|  | ||||
|     if (modalCount == 0) { | ||||
|         if (!global.begin_modal(params.timestamp, params.options)) { | ||||
| @@ -411,9 +380,9 @@ function pushModal(actor, params) { | ||||
|                                 destroyId: actorDestroyId, | ||||
|                                 prevFocus: prevFocus, | ||||
|                                 prevFocusDestroyId: prevFocusDestroyId, | ||||
|                                 actionMode: actionMode }); | ||||
|                                 keybindingMode: keybindingMode }); | ||||
|  | ||||
|     actionMode = params.actionMode; | ||||
|     keybindingMode = params.keybindingMode; | ||||
|     global.stage.set_key_focus(actor); | ||||
|     return true; | ||||
| } | ||||
| @@ -439,7 +408,7 @@ function popModal(actor, timestamp) { | ||||
|     if (focusIndex < 0) { | ||||
|         global.stage.set_key_focus(null); | ||||
|         global.end_modal(timestamp); | ||||
|         actionMode = Shell.ActionMode.NORMAL; | ||||
|         keybindingMode = Shell.KeyBindingMode.NORMAL; | ||||
|  | ||||
|         throw new Error('incorrect pop'); | ||||
|     } | ||||
| @@ -452,7 +421,7 @@ function popModal(actor, timestamp) { | ||||
|     if (focusIndex == modalActorFocusStack.length - 1) { | ||||
|         if (record.prevFocus) | ||||
|             record.prevFocus.disconnect(record.prevFocusDestroyId); | ||||
|         actionMode = record.actionMode; | ||||
|         keybindingMode = record.keybindingMode; | ||||
|         global.stage.set_key_focus(record.prevFocus); | ||||
|     } else { | ||||
|         // If we have: | ||||
| @@ -477,7 +446,7 @@ function popModal(actor, timestamp) { | ||||
|         for (let i = modalActorFocusStack.length - 1; i > focusIndex; i--) { | ||||
|             modalActorFocusStack[i].prevFocus = modalActorFocusStack[i - 1].prevFocus; | ||||
|             modalActorFocusStack[i].prevFocusDestroyId = modalActorFocusStack[i - 1].prevFocusDestroyId; | ||||
|             modalActorFocusStack[i].actionMode = modalActorFocusStack[i - 1].actionMode; | ||||
|             modalActorFocusStack[i].keybindingMode = modalActorFocusStack[i - 1].keybindingMode; | ||||
|         } | ||||
|     } | ||||
|     modalActorFocusStack.splice(focusIndex, 1); | ||||
| @@ -485,10 +454,9 @@ function popModal(actor, timestamp) { | ||||
|     if (modalCount > 0) | ||||
|         return; | ||||
|  | ||||
|     layoutManager.modalEnded(); | ||||
|     global.end_modal(timestamp); | ||||
|     Meta.enable_unredirect_for_screen(global.screen); | ||||
|     actionMode = Shell.ActionMode.NORMAL; | ||||
|     keybindingMode = Shell.KeyBindingMode.NORMAL; | ||||
| } | ||||
|  | ||||
| function createLookingGlass() { | ||||
|   | ||||
| @@ -27,7 +27,6 @@ const PopupMenu = imports.ui.popupMenu; | ||||
| const Params = imports.misc.params; | ||||
| const Tweener = imports.ui.tweener; | ||||
| const Util = imports.misc.util; | ||||
| const ViewSelector = imports.ui.viewSelector; | ||||
|  | ||||
| const SHELL_KEYBINDINGS_SCHEMA = 'org.gnome.shell.keybindings'; | ||||
|  | ||||
| @@ -1159,7 +1158,6 @@ const SourceActor = new Lang.Class({ | ||||
|         this.actor.connect('get-preferred-height', Lang.bind(this, this._getPreferredHeight)); | ||||
|         this.actor.connect('allocate', Lang.bind(this, this._allocate)); | ||||
|         this.actor.connect('destroy', Lang.bind(this, function() { | ||||
|             this._source.disconnect(this._iconUpdatedId); | ||||
|             this._actorDestroyed = true; | ||||
|         })); | ||||
|         this._actorDestroyed = false; | ||||
| @@ -1171,7 +1169,7 @@ const SourceActor = new Lang.Class({ | ||||
|  | ||||
|         this.actor.add_actor(this._iconBin); | ||||
|  | ||||
|         this._iconUpdatedId = this._source.connect('icon-updated', Lang.bind(this, this._updateIcon)); | ||||
|         this._source.connect('icon-updated', Lang.bind(this, this._updateIcon)); | ||||
|         this._updateIcon(); | ||||
|     }, | ||||
|  | ||||
| @@ -1229,12 +1227,8 @@ const SourceActorWithLabel = new Lang.Class({ | ||||
|  | ||||
|         this.actor.add_actor(this._counterBin); | ||||
|  | ||||
|         this._countUpdatedId = this._source.connect('count-updated', Lang.bind(this, this._updateCount)); | ||||
|         this._source.connect('count-updated', Lang.bind(this, this._updateCount)); | ||||
|         this._updateCount(); | ||||
|  | ||||
|         this.actor.connect('destroy', function() { | ||||
|             this._source.disconnect(this._countUpdatedId); | ||||
|         }); | ||||
|     }, | ||||
|  | ||||
|     _allocate: function(actor, box, flags) { | ||||
| @@ -1817,13 +1811,6 @@ const MessageTray = new Lang.Class({ | ||||
|                                            y_expand: true }); | ||||
|         this.actor.add_actor(this._summary); | ||||
|  | ||||
|         this._focusTrap = new ViewSelector.FocusTrap({ can_focus: true }); | ||||
|         this._focusTrap.connect('key-focus-in', Lang.bind(this, | ||||
|             function() { | ||||
|                 this._messageTrayMenuButton.actor.grab_key_focus(); | ||||
|             })); | ||||
|         this._summary.add_actor(this._focusTrap); | ||||
|  | ||||
|         this._summaryMotionId = 0; | ||||
|  | ||||
|         this._summaryBoxPointer = new BoxPointer.BoxPointer(St.Side.BOTTOM, | ||||
| @@ -1852,7 +1839,7 @@ const MessageTray = new Lang.Class({ | ||||
|         this.idleMonitor = Meta.IdleMonitor.get_core(); | ||||
|  | ||||
|         this._grabHelper = new GrabHelper.GrabHelper(this.actor, | ||||
|                                                      { actionMode: Shell.ActionMode.MESSAGE_TRAY }); | ||||
|                                                      { keybindingMode: Shell.KeyBindingMode.MESSAGE_TRAY }); | ||||
|         this._grabHelper.addActor(this._summaryBoxPointer.actor); | ||||
|         this._grabHelper.addActor(this.actor); | ||||
|  | ||||
| @@ -1916,16 +1903,16 @@ const MessageTray = new Lang.Class({ | ||||
|         Main.wm.addKeybinding('toggle-message-tray', | ||||
|                               new Gio.Settings({ schema_id: SHELL_KEYBINDINGS_SCHEMA }), | ||||
|                               Meta.KeyBindingFlags.NONE, | ||||
|                               Shell.ActionMode.NORMAL | | ||||
|                               Shell.ActionMode.MESSAGE_TRAY | | ||||
|                               Shell.ActionMode.OVERVIEW, | ||||
|                               Shell.KeyBindingMode.NORMAL | | ||||
|                               Shell.KeyBindingMode.MESSAGE_TRAY | | ||||
|                               Shell.KeyBindingMode.OVERVIEW, | ||||
|                               Lang.bind(this, this.toggleAndNavigate)); | ||||
|         Main.wm.addKeybinding('focus-active-notification', | ||||
|                               new Gio.Settings({ schema_id: SHELL_KEYBINDINGS_SCHEMA }), | ||||
|                               Meta.KeyBindingFlags.NONE, | ||||
|                               Shell.ActionMode.NORMAL | | ||||
|                               Shell.ActionMode.MESSAGE_TRAY | | ||||
|                               Shell.ActionMode.OVERVIEW, | ||||
|                               Shell.KeyBindingMode.NORMAL | | ||||
|                               Shell.KeyBindingMode.MESSAGE_TRAY | | ||||
|                               Shell.KeyBindingMode.OVERVIEW, | ||||
|                               Lang.bind(this, this._expandActiveNotification)); | ||||
|  | ||||
|         this._sources = new Map(); | ||||
| @@ -1948,12 +1935,7 @@ const MessageTray = new Lang.Class({ | ||||
|         this._messageTrayMenuButton = new MessageTrayMenuButton(this); | ||||
|         this.actor.add_actor(this._messageTrayMenuButton.actor); | ||||
|  | ||||
|         this._messageTrayMenuButton.actor.connect('key-press-event', | ||||
|                                                   Lang.bind(this, this._onTrayButtonKeyPress)); | ||||
|  | ||||
|         let gesture = new EdgeDragAction.EdgeDragAction(St.Side.BOTTOM, | ||||
|                                                         Shell.ActionMode.NORMAL | | ||||
|                                                         Shell.ActionMode.OVERVIEW); | ||||
|         let gesture = new EdgeDragAction.EdgeDragAction(St.Side.BOTTOM); | ||||
|         gesture.connect('activated', Lang.bind(this, this.toggle)); | ||||
|         global.stage.add_action(gesture); | ||||
|     }, | ||||
| @@ -2048,16 +2030,6 @@ const MessageTray = new Lang.Class({ | ||||
|         return GLib.SOURCE_REMOVE; | ||||
|     }, | ||||
|  | ||||
|     _onTrayButtonKeyPress: function(actor, event) { | ||||
|         if (event.get_key_symbol() == Clutter.ISO_Left_Tab) { | ||||
|             this._focusTrap.can_focus = false; | ||||
|             this._summary.navigate_focus(null, Gtk.DirectionType.TAB_BACKWARD, false); | ||||
|             this._focusTrap.can_focus = true; | ||||
|             return Clutter.EVENT_STOP; | ||||
|         } | ||||
|         return Clutter.EVENT_PROPAGATE; | ||||
|     }, | ||||
|  | ||||
|     _onNotificationKeyRelease: function(actor, event) { | ||||
|         if (event.get_key_symbol() == Clutter.KEY_Escape && event.get_state() == 0) { | ||||
|             this._expireNotification(); | ||||
| @@ -2434,23 +2406,9 @@ const MessageTray = new Lang.Class({ | ||||
|             if (shouldShowNotification && nextNotification) { | ||||
|                 let limited = this._busy || Main.layoutManager.bottomMonitor.inFullscreen; | ||||
|                 let showNextNotification = (!limited || nextNotification.forFeedback || nextNotification.urgency == Urgency.CRITICAL); | ||||
|                 if (showNextNotification) { | ||||
|                     let len = this._notificationQueue.length; | ||||
|                     if (len > 1) { | ||||
|                         this._notificationQueue.length = 0; | ||||
|                         let source = new SystemNotificationSource(); | ||||
|                         this.add(source); | ||||
|                         let notification = new Notification(source, ngettext("%d new message", "%d new messages", len).format(len)); | ||||
|                         notification.setTransient(true); | ||||
|                         notification.connect('clicked', Lang.bind(this, function() { | ||||
|                             this.openTray(); | ||||
|                         })); | ||||
|                         source.notify(notification); | ||||
|                     } else { | ||||
|                 if (showNextNotification) | ||||
|                     this._showNotification(); | ||||
|             } | ||||
|                 } | ||||
|             } | ||||
|         } else if (this._notificationState == State.SHOWN) { | ||||
|             let expired = (this._userActiveWhileNotificationShown && | ||||
|                            this._notificationTimeoutId == 0 && | ||||
|   | ||||
| @@ -41,14 +41,14 @@ const ModalDialog = new Lang.Class({ | ||||
|     _init: function(params) { | ||||
|         params = Params.parse(params, { shellReactive: false, | ||||
|                                         styleClass: null, | ||||
|                                         actionMode: Shell.ActionMode.SYSTEM_MODAL, | ||||
|                                         keybindingMode: Shell.KeyBindingMode.SYSTEM_MODAL, | ||||
|                                         shouldFadeIn: true, | ||||
|                                         shouldFadeOut: true, | ||||
|                                         destroyOnClose: true }); | ||||
|  | ||||
|         this.state = State.CLOSED; | ||||
|         this._hasModal = false; | ||||
|         this._actionMode = params.actionMode; | ||||
|         this._keybindingMode = params.keybindingMode; | ||||
|         this._shellReactive = params.shellReactive; | ||||
|         this._shouldFadeIn = params.shouldFadeIn; | ||||
|         this._shouldFadeOut = params.shouldFadeOut; | ||||
| @@ -194,7 +194,7 @@ const ModalDialog = new Lang.Class({ | ||||
|     }, | ||||
|  | ||||
|     placeSpinner: function(layoutInfo) { | ||||
|         let spinnerIcon = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/process-working.svg'); | ||||
|         let spinnerIcon = global.datadir + '/theme/process-working.svg'; | ||||
|         this._workSpinner = new Animation.AnimatedIcon(spinnerIcon, WORK_SPINNER_ICON_SIZE); | ||||
|         this._workSpinner.actor.opacity = 0; | ||||
|         this._workSpinner.actor.show(); | ||||
| @@ -362,7 +362,7 @@ const ModalDialog = new Lang.Class({ | ||||
|         if (this._hasModal) | ||||
|             return true; | ||||
|         if (!Main.pushModal(this._group, { timestamp: timestamp, | ||||
|                                            actionMode: this._actionMode })) | ||||
|                                            keybindingMode: this._keybindingMode })) | ||||
|             return false; | ||||
|  | ||||
|         this._hasModal = true; | ||||
|   | ||||
| @@ -435,17 +435,17 @@ const Overview = new Lang.Class({ | ||||
|         this._inDrag = false; | ||||
|     }, | ||||
|  | ||||
|     beginWindowDrag: function(window) { | ||||
|         this.emit('window-drag-begin', window); | ||||
|     beginWindowDrag: function(clone) { | ||||
|         this.emit('window-drag-begin', clone); | ||||
|         this._inDrag = true; | ||||
|     }, | ||||
|  | ||||
|     cancelledWindowDrag: function(window) { | ||||
|         this.emit('window-drag-cancelled', window); | ||||
|     cancelledWindowDrag: function(clone) { | ||||
|         this.emit('window-drag-cancelled', clone); | ||||
|     }, | ||||
|  | ||||
|     endWindowDrag: function(window) { | ||||
|         this.emit('window-drag-end', window); | ||||
|     endWindowDrag: function(clone) { | ||||
|         this.emit('window-drag-end', clone); | ||||
|         this._inDrag = false; | ||||
|     }, | ||||
|  | ||||
| @@ -509,7 +509,7 @@ const Overview = new Lang.Class({ | ||||
|             if (shouldBeModal) { | ||||
|                 if (!this._modal) { | ||||
|                     if (Main.pushModal(this._overview, | ||||
|                                        { actionMode: Shell.ActionMode.OVERVIEW })) { | ||||
|                                        { keybindingMode: Shell.KeyBindingMode.OVERVIEW })) { | ||||
|                         this._modal = true; | ||||
|                     } else { | ||||
|                         this.hide(); | ||||
| @@ -605,9 +605,9 @@ const Overview = new Lang.Class({ | ||||
|                 return; | ||||
|         } | ||||
|  | ||||
|         this._shown = false; | ||||
|  | ||||
|         this._animateNotVisible(); | ||||
|  | ||||
|         this._shown = false; | ||||
|         this._syncGrab(); | ||||
|     }, | ||||
|  | ||||
|   | ||||
| @@ -64,8 +64,7 @@ const SlideLayout = new Lang.Class({ | ||||
|         // flags only determine what to do if the allocated box is bigger | ||||
|         // than the actor's box. | ||||
|         let realDirection = getRtlSlideDirection(this._direction, child); | ||||
|         let alignX = (realDirection == SlideDirection.LEFT) ? (availWidth - natWidth) | ||||
|                                                             : (availWidth - natWidth * this._slideX); | ||||
|         let alignX = (realDirection == SlideDirection.LEFT) ? (availWidth - natWidth) : 0; | ||||
|  | ||||
|         let actorBox = new Clutter.ActorBox(); | ||||
|         actorBox.x1 = box.x1 + alignX + this._translationX; | ||||
|   | ||||
| @@ -181,7 +181,6 @@ const AppMenuButton = new Lang.Class({ | ||||
|         this._targetApp = null; | ||||
|         this._appMenuNotifyId = 0; | ||||
|         this._actionGroupNotifyId = 0; | ||||
|         this._busyNotifyId = 0; | ||||
|  | ||||
|         let bin = new St.Bin({ name: 'appMenu' }); | ||||
|         bin.connect('style-changed', Lang.bind(this, this._onStyleChanged)); | ||||
| @@ -274,7 +273,7 @@ const AppMenuButton = new Lang.Class({ | ||||
|     _onStyleChanged: function(actor) { | ||||
|         let node = actor.get_theme_node(); | ||||
|         let [success, icon] = node.lookup_url('spinner-image', false); | ||||
|         if (!success || (this._spinnerIcon && this._spinnerIcon.equal(icon))) | ||||
|         if (!success || this._spinnerIcon == icon) | ||||
|             return; | ||||
|         this._spinnerIcon = icon; | ||||
|         this._spinner = new Animation.AnimatedIcon(this._spinnerIcon, PANEL_ICON_SIZE); | ||||
| @@ -458,17 +457,12 @@ const AppMenuButton = new Lang.Class({ | ||||
|                 this._targetApp.disconnect(this._actionGroupNotifyId); | ||||
|                 this._actionGroupNotifyId = 0; | ||||
|             } | ||||
|             if (this._busyNotifyId) { | ||||
|                 this._targetApp.disconnect(this._busyNotifyId); | ||||
|                 this._busyNotifyId = 0; | ||||
|             } | ||||
|  | ||||
|             this._targetApp = targetApp; | ||||
|  | ||||
|             if (this._targetApp) { | ||||
|                 this._appMenuNotifyId = this._targetApp.connect('notify::menu', Lang.bind(this, this._sync)); | ||||
|                 this._actionGroupNotifyId = this._targetApp.connect('notify::action-group', Lang.bind(this, this._sync)); | ||||
|                 this._busyNotifyId = this._targetApp.connect('notify::busy', Lang.bind(this, this._sync)); | ||||
|                 this._label.setText(this._targetApp.get_name()); | ||||
|                 this.actor.set_accessible_name(this._targetApp.get_name()); | ||||
|             } | ||||
| @@ -482,7 +476,7 @@ const AppMenuButton = new Lang.Class({ | ||||
|  | ||||
|         let isBusy = (this._targetApp != null && | ||||
|                       (this._targetApp.get_state() == Shell.AppState.STARTING || | ||||
|                        this._targetApp.get_busy())); | ||||
|                        this._targetApp.get_state() == Shell.AppState.BUSY)); | ||||
|         if (isBusy) | ||||
|             this.startAnimation(); | ||||
|         else | ||||
| @@ -893,7 +887,7 @@ const Panel = new Lang.Class({ | ||||
|  | ||||
|         this.statusArea = {}; | ||||
|  | ||||
|         this.menuManager = new PopupMenu.PopupMenuManager(this, { actionMode: Shell.ActionMode.TOPBAR_POPUP }); | ||||
|         this.menuManager = new PopupMenu.PopupMenuManager(this, { keybindingMode: Shell.KeyBindingMode.TOPBAR_POPUP }); | ||||
|  | ||||
|         this._leftBox = new St.BoxLayout({ name: 'panelLeft' }); | ||||
|         this.actor.add_actor(this._leftBox); | ||||
| @@ -1025,7 +1019,7 @@ const Panel = new Lang.Class({ | ||||
|         if (!dragWindow) | ||||
|             return Clutter.EVENT_PROPAGATE; | ||||
|  | ||||
|         let rect = dragWindow.get_frame_rect(); | ||||
|         let rect = dragWindow.get_outer_rect(); | ||||
|         let [stageX, stageY] = event.get_coords(); | ||||
|  | ||||
|         let allowDrag = dragWindow.maximized_vertically && | ||||
|   | ||||
| @@ -918,14 +918,14 @@ const PopupSubMenu = new Lang.Class({ | ||||
|         if (animate && needsScrollbar) | ||||
|             animate = false; | ||||
|  | ||||
|         let targetAngle = this.actor.text_direction == Clutter.TextDirection.RTL ? -90 : 90; | ||||
|  | ||||
|         if (animate) { | ||||
|             let [minHeight, naturalHeight] = this.actor.get_preferred_height(-1); | ||||
|             this.actor.height = 0; | ||||
|             this.actor._arrowRotation = this._arrow.rotation_angle_z; | ||||
|             let angle = this.actor._arrowRotation; | ||||
|             // animate to the first multiple of 90 greater than current angle | ||||
|             Tweener.addTween(this.actor, | ||||
|                              { _arrowRotation: targetAngle, | ||||
|                              { _arrowRotation: angle - angle % 90 + 90, | ||||
|                                height: naturalHeight, | ||||
|                                time: 0.25, | ||||
|                                onUpdateScope: this, | ||||
| @@ -938,7 +938,7 @@ const PopupSubMenu = new Lang.Class({ | ||||
|                                } | ||||
|                              }); | ||||
|         } else { | ||||
|             this._arrow.rotation_angle_z = targetAngle; | ||||
|             this._arrow.rotation_angle_z = this.actor._arrowRotation + 90; | ||||
|         } | ||||
|     }, | ||||
|  | ||||
| @@ -957,8 +957,10 @@ const PopupSubMenu = new Lang.Class({ | ||||
|  | ||||
|         if (animate) { | ||||
|             this.actor._arrowRotation = this._arrow.rotation_angle_z; | ||||
|             let angle = this.actor._arrowRotation; | ||||
|             // animate to the first multiple of 90 less than current angle | ||||
|             Tweener.addTween(this.actor, | ||||
|                              { _arrowRotation: 0, | ||||
|                              { _arrowRotation: (angle - 1) - (angle - 1) % 90, | ||||
|                                height: 0, | ||||
|                                time: 0.25, | ||||
|                                onUpdateScope: this, | ||||
| @@ -972,7 +974,7 @@ const PopupSubMenu = new Lang.Class({ | ||||
|                                }, | ||||
|                              }); | ||||
|         } else { | ||||
|             this._arrow.rotation_angle_z = 0; | ||||
|             this._arrow.rotation_angle_z = this.actor._arrowRotation - 90; | ||||
|             this.actor.hide(); | ||||
|         } | ||||
|     }, | ||||
| @@ -1050,6 +1052,8 @@ const PopupSubMenuMenuItem = new Lang.Class({ | ||||
|         this._triangleBin = new St.Widget({ y_expand: true, | ||||
|                                             y_align: Clutter.ActorAlign.CENTER }); | ||||
|         this._triangleBin.add_child(this._triangle); | ||||
|         if (this._triangleBin.get_text_direction() == Clutter.TextDirection.RTL) | ||||
|             this._triangleBin.set_scale(-1.0, 1.0); | ||||
|  | ||||
|         this.actor.add_child(this._triangleBin); | ||||
|         this.actor.add_accessible_state (Atk.StateType.EXPANDABLE); | ||||
|   | ||||
| @@ -85,8 +85,7 @@ const Clock = new Lang.Class({ | ||||
|         let date = new Date(); | ||||
|         /* Translators: This is a time format for a date in | ||||
|            long format */ | ||||
|         let dateFormat = Shell.util_translate_time_string(N_("%A, %B %d")); | ||||
|         this._date.text = date.toLocaleFormat(dateFormat); | ||||
|         this._date.text = date.toLocaleFormat(_("%A, %B %d")); | ||||
|     }, | ||||
|  | ||||
|     destroy: function() { | ||||
| @@ -647,14 +646,14 @@ const ScreenShield = new Lang.Class({ | ||||
|         if (this._isModal) | ||||
|             return true; | ||||
|  | ||||
|         this._isModal = Main.pushModal(this.actor, { actionMode: Shell.ActionMode.LOCK_SCREEN }); | ||||
|         this._isModal = Main.pushModal(this.actor, { keybindingMode: Shell.KeyBindingMode.LOCK_SCREEN }); | ||||
|         if (this._isModal) | ||||
|             return true; | ||||
|  | ||||
|         // We failed to get a pointer grab, it means that | ||||
|         // something else has it. Try with a keyboard grab only | ||||
|         this._isModal = Main.pushModal(this.actor, { options: Meta.ModalOptions.POINTER_ALREADY_GRABBED, | ||||
|                                                      actionMode: Shell.ActionMode.LOCK_SCREEN }); | ||||
|                                                      keybindingMode: Shell.KeyBindingMode.LOCK_SCREEN }); | ||||
|         return this._isModal; | ||||
|     }, | ||||
|  | ||||
| @@ -670,9 +669,7 @@ const ScreenShield = new Lang.Class({ | ||||
|         if (this._lockScreenState != MessageTray.State.SHOWN) | ||||
|             return Clutter.EVENT_PROPAGATE; | ||||
|  | ||||
|         let isEnter = (symbol == Clutter.KEY_Return || | ||||
|                        symbol == Clutter.KEY_KP_Enter || | ||||
|                        symbol == Clutter.KEY_ISO_Enter); | ||||
|         let isEnter = (symbol == Clutter.KEY_Return || symbol == Clutter.KEY_KP_Enter); | ||||
|         if (!isEnter && !(GLib.unichar_isprint(unichar) || symbol == Clutter.KEY_Escape)) | ||||
|             return Clutter.EVENT_PROPAGATE; | ||||
|  | ||||
| @@ -922,11 +919,6 @@ const ScreenShield = new Lang.Class({ | ||||
|  | ||||
|         this._lockScreenState = MessageTray.State.HIDDEN; | ||||
|         this._lockScreenGroup.hide(); | ||||
|  | ||||
|         if (this._dialog) { | ||||
|             this._dialog.actor.grab_key_focus(); | ||||
|             this._dialog.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false); | ||||
|         } | ||||
|     }, | ||||
|  | ||||
|     _hideLockScreen: function(animate, velocity) { | ||||
| @@ -1335,8 +1327,6 @@ const ScreenShield = new Lang.Class({ | ||||
|  | ||||
|     // If the previous shell crashed, and gnome-session restarted us, then re-lock | ||||
|     lockIfWasLocked: function() { | ||||
|         if (!this._settings.get_boolean(LOCK_ENABLED_KEY)) | ||||
|             return; | ||||
|         let wasLocked = global.get_runtime_state('b', LOCKED_STATE_STR); | ||||
|         if (wasLocked === null) | ||||
|             return; | ||||
|   | ||||
| @@ -43,8 +43,6 @@ const ScreencastService = new Lang.Class({ | ||||
|  | ||||
|         this._recorders = new Map(); | ||||
|  | ||||
|         this._lockdownSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.lockdown' }); | ||||
|  | ||||
|         Main.sessionMode.connect('updated', Lang.bind(this, this._sessionUpdated)); | ||||
|     }, | ||||
|  | ||||
| @@ -70,8 +68,8 @@ const ScreencastService = new Lang.Class({ | ||||
|         if (Main.sessionMode.allowScreencast) | ||||
|             return; | ||||
|  | ||||
|         for (let sender of this._recorders.keys()) | ||||
|             this._stopRecordingForSender(sender); | ||||
|         this._recorders.clear(); | ||||
|         this.emit('updated'); | ||||
|     }, | ||||
|  | ||||
|     _onNameVanished: function(connection, name) { | ||||
| @@ -105,8 +103,7 @@ const ScreencastService = new Lang.Class({ | ||||
|  | ||||
|     ScreencastAsync: function(params, invocation) { | ||||
|         let returnValue = [false, '']; | ||||
|         if (!Main.sessionMode.allowScreencast || | ||||
|             this._lockdownSettings.get_boolean('disable-save-to-disk')) { | ||||
|         if (!Main.sessionMode.allowScreencast) { | ||||
|             invocation.return_value(GLib.Variant.new('(bs)', returnValue)); | ||||
|             return; | ||||
|         } | ||||
| @@ -120,8 +117,6 @@ const ScreencastService = new Lang.Class({ | ||||
|             this._applyOptionalParameters(recorder, options); | ||||
|             let [success, fileName] = recorder.record(); | ||||
|             returnValue = [success, fileName ? fileName : '']; | ||||
|             if (!success) | ||||
|                 this._stopRecordingForSender(sender); | ||||
|         } | ||||
|  | ||||
|         invocation.return_value(GLib.Variant.new('(bs)', returnValue)); | ||||
| @@ -129,8 +124,7 @@ const ScreencastService = new Lang.Class({ | ||||
|  | ||||
|     ScreencastAreaAsync: function(params, invocation) { | ||||
|         let returnValue = [false, '']; | ||||
|         if (!Main.sessionMode.allowScreencast || | ||||
|             this._lockdownSettings.get_boolean('disable-save-to-disk')) { | ||||
|         if (!Main.sessionMode.allowScreencast) { | ||||
|             invocation.return_value(GLib.Variant.new('(bs)', returnValue)); | ||||
|             return; | ||||
|         } | ||||
| @@ -156,8 +150,6 @@ const ScreencastService = new Lang.Class({ | ||||
|             this._applyOptionalParameters(recorder, options); | ||||
|             let [success, fileName] = recorder.record(); | ||||
|             returnValue = [success, fileName ? fileName : '']; | ||||
|             if (!success) | ||||
|                 this._stopRecordingForSender(sender); | ||||
|         } | ||||
|  | ||||
|         invocation.return_value(GLib.Variant.new('(bs)', returnValue)); | ||||
|   | ||||
| @@ -65,44 +65,9 @@ const ScreenshotService = new Lang.Class({ | ||||
|         this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(ScreenshotIface, this); | ||||
|         this._dbusImpl.export(Gio.DBus.session, '/org/gnome/Shell/Screenshot'); | ||||
|  | ||||
|         this._screenShooter = new Map(); | ||||
|  | ||||
|         this._lockdownSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.lockdown' }); | ||||
|  | ||||
|         Gio.DBus.session.own_name('org.gnome.Shell.Screenshot', Gio.BusNameOwnerFlags.REPLACE, null, null); | ||||
|     }, | ||||
|  | ||||
|     _createScreenshot: function(invocation) { | ||||
|         let sender = invocation.get_sender(); | ||||
|         if (this._screenShooter.has(sender) || | ||||
|             this._lockdownSettings.get_boolean('disable-save-to-disk')) { | ||||
|             invocation.return_value(GLib.Variant.new('(bs)', [false, ''])); | ||||
|             return null; | ||||
|         } | ||||
|  | ||||
|         let shooter = new Shell.Screenshot(); | ||||
|         shooter._watchNameId = | ||||
|                         Gio.bus_watch_name(Gio.BusType.SESSION, sender, 0, null, | ||||
|                                            Lang.bind(this, this._onNameVanished)); | ||||
|  | ||||
|         this._screenShooter.set(sender, shooter); | ||||
|  | ||||
|         return shooter; | ||||
|     }, | ||||
|  | ||||
|     _onNameVanished: function(connection, name) { | ||||
|         this._removeShooterForSender(name); | ||||
|     }, | ||||
|  | ||||
|     _removeShooterForSender: function(sender) { | ||||
|         let shooter = this._screenShooter.get(sender); | ||||
|         if (!shooter) | ||||
|             return; | ||||
|  | ||||
|         Gio.bus_unwatch_name(shooter._watchNameId); | ||||
|         this._screenShooter.delete(sender); | ||||
|     }, | ||||
|  | ||||
|     _checkArea: function(x, y, width, height) { | ||||
|         return x >= 0 && y >= 0 && | ||||
|                width > 0 && height > 0 && | ||||
| @@ -111,15 +76,9 @@ const ScreenshotService = new Lang.Class({ | ||||
|     }, | ||||
|  | ||||
|     _onScreenshotComplete: function(obj, result, area, filenameUsed, flash, invocation) { | ||||
|         if (result) { | ||||
|             if (flash) { | ||||
|         if (flash && result) { | ||||
|             let flashspot = new Flashspot(area); | ||||
|                 flashspot.fire(Lang.bind(this, function() { | ||||
|                     this._removeShooterForSender(invocation.get_sender()); | ||||
|                 })); | ||||
|             } | ||||
|             else | ||||
|                 this._removeShooterForSender(invocation.get_sender()); | ||||
|             flashspot.fire(); | ||||
|         } | ||||
|  | ||||
|         let retval = GLib.Variant.new('(bs)', [result, filenameUsed]); | ||||
| @@ -153,9 +112,7 @@ const ScreenshotService = new Lang.Class({ | ||||
|                                             "Invalid params"); | ||||
|             return; | ||||
|         } | ||||
|         let screenshot = this._createScreenshot(invocation); | ||||
|         if (!screenshot) | ||||
|             return; | ||||
|         let screenshot = new Shell.Screenshot(); | ||||
|         screenshot.screenshot_area (x, y, width, height, filename, | ||||
|                                 Lang.bind(this, this._onScreenshotComplete, | ||||
|                                           flash, invocation)); | ||||
| @@ -163,9 +120,7 @@ const ScreenshotService = new Lang.Class({ | ||||
|  | ||||
|     ScreenshotWindowAsync : function (params, invocation) { | ||||
|         let [include_frame, include_cursor, flash, filename] = params; | ||||
|         let screenshot = this._createScreenshot(invocation); | ||||
|         if (!screenshot) | ||||
|             return; | ||||
|         let screenshot = new Shell.Screenshot(); | ||||
|         screenshot.screenshot_window (include_frame, include_cursor, filename, | ||||
|                                   Lang.bind(this, this._onScreenshotComplete, | ||||
|                                             flash, invocation)); | ||||
| @@ -173,9 +128,7 @@ const ScreenshotService = new Lang.Class({ | ||||
|  | ||||
|     ScreenshotAsync : function (params, invocation) { | ||||
|         let [include_cursor, flash, filename] = params; | ||||
|         let screenshot = this._createScreenshot(invocation); | ||||
|         if (!screenshot) | ||||
|             return; | ||||
|         let screenshot = new Shell.Screenshot(); | ||||
|         screenshot.screenshot(include_cursor, filename, | ||||
|                           Lang.bind(this, this._onScreenshotComplete, | ||||
|                                     flash, invocation)); | ||||
| @@ -349,7 +302,7 @@ const Flashspot = new Lang.Class({ | ||||
|         this.actor.set_position(area.x, area.y); | ||||
|     }, | ||||
|  | ||||
|     fire: function(doneCallback) { | ||||
|     fire: function() { | ||||
|         this.actor.show(); | ||||
|         this.actor.opacity = 255; | ||||
|         Tweener.addTween(this.actor, | ||||
| @@ -357,8 +310,6 @@ const Flashspot = new Lang.Class({ | ||||
|                            time: FLASHSPOT_ANIMATION_OUT_TIME, | ||||
|                            transition: 'easeOutQuad', | ||||
|                            onComplete: Lang.bind(this, function() { | ||||
|                                if (doneCallback) | ||||
|                                    doneCallback(); | ||||
|                                this.destroy(); | ||||
|                            }) | ||||
|                          }); | ||||
|   | ||||
							
								
								
									
										307
									
								
								js/ui/search.js
									
									
									
									
									
								
							
							
						
						
									
										307
									
								
								js/ui/search.js
									
									
									
									
									
								
							| @@ -2,7 +2,6 @@ | ||||
|  | ||||
| const Clutter = imports.gi.Clutter; | ||||
| const Lang = imports.lang; | ||||
| const GLib = imports.gi.GLib; | ||||
| const Gio = imports.gi.Gio; | ||||
| const Gtk = imports.gi.Gtk; | ||||
| const Meta = imports.gi.Meta; | ||||
| @@ -25,6 +24,108 @@ const SEARCH_PROVIDERS_SCHEMA = 'org.gnome.desktop.search-providers'; | ||||
| const MAX_LIST_SEARCH_RESULTS_ROWS = 3; | ||||
| const MAX_GRID_SEARCH_RESULTS_ROWS = 1; | ||||
|  | ||||
| const SearchSystem = new Lang.Class({ | ||||
|     Name: 'SearchSystem', | ||||
|  | ||||
|     _init: function() { | ||||
|         this._providers = []; | ||||
|  | ||||
|         this._registerProvider(new AppDisplay.AppSearchProvider()); | ||||
|  | ||||
|         this._searchSettings = new Gio.Settings({ schema_id: SEARCH_PROVIDERS_SCHEMA }); | ||||
|         this._searchSettings.connect('changed::enabled', Lang.bind(this, this._reloadRemoteProviders)); | ||||
|         this._searchSettings.connect('changed::disabled', Lang.bind(this, this._reloadRemoteProviders)); | ||||
|         this._searchSettings.connect('changed::disable-external', Lang.bind(this, this._reloadRemoteProviders)); | ||||
|         this._searchSettings.connect('changed::sort-order', Lang.bind(this, this._reloadRemoteProviders)); | ||||
|  | ||||
|         this._reloadRemoteProviders(); | ||||
|  | ||||
|         this._cancellable = new Gio.Cancellable(); | ||||
|     }, | ||||
|  | ||||
|     addProvider: function(provider) { | ||||
|         this._providers.push(provider); | ||||
|         this.emit('providers-changed'); | ||||
|     }, | ||||
|  | ||||
|     _reloadRemoteProviders: function() { | ||||
|         let remoteProviders = this._providers.filter(function(provider) { | ||||
|             return provider.isRemoteProvider; | ||||
|         }); | ||||
|         remoteProviders.forEach(Lang.bind(this, function(provider) { | ||||
|             this._unregisterProvider(provider); | ||||
|         })); | ||||
|  | ||||
|         RemoteSearch.loadRemoteSearchProviders(Lang.bind(this, function(providers) { | ||||
|             providers.forEach(Lang.bind(this, this._registerProvider)); | ||||
|         })); | ||||
|  | ||||
|         this.emit('providers-changed'); | ||||
|     }, | ||||
|  | ||||
|     _registerProvider: function (provider) { | ||||
|         this._providers.push(provider); | ||||
|     }, | ||||
|  | ||||
|     _unregisterProvider: function (provider) { | ||||
|         let index = this._providers.indexOf(provider); | ||||
|         this._providers.splice(index, 1); | ||||
|  | ||||
|         if (provider.display) | ||||
|             provider.display.destroy(); | ||||
|     }, | ||||
|  | ||||
|     getProviders: function() { | ||||
|         return this._providers; | ||||
|     }, | ||||
|  | ||||
|     getTerms: function() { | ||||
|         return this._terms; | ||||
|     }, | ||||
|  | ||||
|     reset: function() { | ||||
|         this._terms = []; | ||||
|         this._results = {}; | ||||
|     }, | ||||
|  | ||||
|     _gotResults: function(results, provider) { | ||||
|         this._results[provider.id] = results; | ||||
|         this.emit('search-updated', provider, results); | ||||
|     }, | ||||
|  | ||||
|     setTerms: function(terms) { | ||||
|         this._cancellable.cancel(); | ||||
|         this._cancellable.reset(); | ||||
|  | ||||
|         let previousResults = this._results; | ||||
|         let previousTerms = this._terms; | ||||
|         this.reset(); | ||||
|  | ||||
|         if (!terms) | ||||
|             return; | ||||
|  | ||||
|         let searchString = terms.join(' '); | ||||
|         let previousSearchString = previousTerms.join(' '); | ||||
|         if (searchString == previousSearchString) | ||||
|             return; | ||||
|  | ||||
|         let isSubSearch = false; | ||||
|         if (previousTerms.length > 0) | ||||
|             isSubSearch = searchString.indexOf(previousSearchString) == 0; | ||||
|  | ||||
|         this._terms = terms; | ||||
|  | ||||
|         this._providers.forEach(Lang.bind(this, function(provider) { | ||||
|             let previousProviderResults = previousResults[provider.id]; | ||||
|             if (isSubSearch && previousProviderResults) | ||||
|                 provider.getSubsearchResultSet(previousProviderResults, terms, Lang.bind(this, this._gotResults, provider), this._cancellable); | ||||
|             else | ||||
|                 provider.getInitialResultSet(terms, Lang.bind(this, this._gotResults, provider), this._cancellable); | ||||
|         })); | ||||
|     } | ||||
| }); | ||||
| Signals.addSignalMethods(SearchSystem.prototype); | ||||
|  | ||||
| const MaxWidthBin = new Lang.Class({ | ||||
|     Name: 'MaxWidthBin', | ||||
|     Extends: St.Bin, | ||||
| @@ -199,9 +300,12 @@ const SearchResultsBase = new Lang.Class({ | ||||
|             this._cancellable.reset(); | ||||
|  | ||||
|             this.provider.getResultMetas(metasNeeded, Lang.bind(this, function(metas) { | ||||
|                 if (metas.length == 0) { | ||||
|                     callback(false); | ||||
|                     return; | ||||
|                 } | ||||
|                 if (metas.length != metasNeeded.length) { | ||||
|                     log('Wrong number of result metas returned by search provider ' + this.provider.id + | ||||
|                         ': expected ' + metasNeeded.length + ' but got ' + metas.length); | ||||
|                     log('Wrong number of result metas returned by search provider'); | ||||
|                     callback(false); | ||||
|                     return; | ||||
|                 } | ||||
| @@ -231,11 +335,9 @@ const SearchResultsBase = new Lang.Class({ | ||||
|             let hasMoreResults = results.length < providerResults.length; | ||||
|  | ||||
|             this._ensureResultActors(results, Lang.bind(this, function(successful) { | ||||
|                 if (!successful) { | ||||
|                 this._clearResultDisplay(); | ||||
|                     callback(); | ||||
|                 if (!successful) | ||||
|                     return; | ||||
|                 } | ||||
|  | ||||
|                 // To avoid CSS transitions causing flickering when | ||||
|                 // the first search result stays the same, we hide the | ||||
| @@ -395,136 +497,16 @@ const SearchResults = new Lang.Class({ | ||||
|         this._statusText = new St.Label({ style_class: 'search-statustext' }); | ||||
|         this._statusBin = new St.Bin({ x_align: St.Align.MIDDLE, | ||||
|                                        y_align: St.Align.MIDDLE }); | ||||
|         this.actor.add(this._statusBin, { expand: true }); | ||||
|         this._content.add(this._statusBin, { expand: true }); | ||||
|         this._statusBin.add_actor(this._statusText); | ||||
|  | ||||
|         this._highlightDefault = false; | ||||
|         this._defaultResult = null; | ||||
|         this._startingSearch = false; | ||||
|  | ||||
|         this._terms = []; | ||||
|         this._results = {}; | ||||
|  | ||||
|         this._providers = []; | ||||
|  | ||||
|         this._searchSettings = new Gio.Settings({ schema_id: SEARCH_PROVIDERS_SCHEMA }); | ||||
|         this._searchSettings.connect('changed::disabled', Lang.bind(this, this._reloadRemoteProviders)); | ||||
|         this._searchSettings.connect('changed::disable-external', Lang.bind(this, this._reloadRemoteProviders)); | ||||
|         this._searchSettings.connect('changed::sort-order', Lang.bind(this, this._reloadRemoteProviders)); | ||||
|  | ||||
|         this._searchTimeoutId = 0; | ||||
|         this._cancellable = new Gio.Cancellable(); | ||||
|  | ||||
|         this._registerProvider(new AppDisplay.AppSearchProvider()); | ||||
|         this._reloadRemoteProviders(); | ||||
|     }, | ||||
|  | ||||
|     _reloadRemoteProviders: function() { | ||||
|         let remoteProviders = this._providers.filter(function(provider) { | ||||
|             return provider.isRemoteProvider; | ||||
|         }); | ||||
|         remoteProviders.forEach(Lang.bind(this, function(provider) { | ||||
|             this._unregisterProvider(provider); | ||||
|         })); | ||||
|  | ||||
|         RemoteSearch.loadRemoteSearchProviders(Lang.bind(this, function(providers) { | ||||
|             providers.forEach(Lang.bind(this, this._registerProvider)); | ||||
|         })); | ||||
|     }, | ||||
|  | ||||
|     _registerProvider: function (provider) { | ||||
|         this._providers.push(provider); | ||||
|         this._ensureProviderDisplay(provider); | ||||
|     }, | ||||
|  | ||||
|     _unregisterProvider: function (provider) { | ||||
|         let index = this._providers.indexOf(provider); | ||||
|         this._providers.splice(index, 1); | ||||
|  | ||||
|         if (provider.display) | ||||
|             provider.display.destroy(); | ||||
|     }, | ||||
|  | ||||
|     _gotResults: function(results, provider) { | ||||
|         this._results[provider.id] = results; | ||||
|         this._updateResults(provider, results); | ||||
|     }, | ||||
|  | ||||
|     _clearSearchTimeout: function() { | ||||
|         if (this._searchTimeoutId > 0) { | ||||
|             GLib.source_remove(this._searchTimeoutId); | ||||
|             this._searchTimeoutId = 0; | ||||
|         } | ||||
|     }, | ||||
|  | ||||
|     _reset: function() { | ||||
|         this._terms = []; | ||||
|         this._results = {}; | ||||
|         this._clearDisplay(); | ||||
|         this._clearSearchTimeout(); | ||||
|         this._defaultResult = null; | ||||
|         this._startingSearch = false; | ||||
|  | ||||
|         this._updateSearchProgress(); | ||||
|     }, | ||||
|  | ||||
|     _doSearch: function() { | ||||
|         this._startingSearch = false; | ||||
|  | ||||
|         let previousResults = this._results; | ||||
|         this._results = {}; | ||||
|  | ||||
|         this._providers.forEach(Lang.bind(this, function(provider) { | ||||
|             provider.searchInProgress = true; | ||||
|  | ||||
|             let previousProviderResults = previousResults[provider.id]; | ||||
|             if (this._isSubSearch && previousProviderResults) | ||||
|                 provider.getSubsearchResultSet(previousProviderResults, this._terms, Lang.bind(this, this._gotResults, provider), this._cancellable); | ||||
|             else | ||||
|                 provider.getInitialResultSet(this._terms, Lang.bind(this, this._gotResults, provider), this._cancellable); | ||||
|         })); | ||||
|  | ||||
|         this._updateSearchProgress(); | ||||
|  | ||||
|         this._clearSearchTimeout(); | ||||
|     }, | ||||
|  | ||||
|     _onSearchTimeout: function() { | ||||
|         this._searchTimeoutId = 0; | ||||
|         this._doSearch(); | ||||
|         return GLib.SOURCE_REMOVE; | ||||
|     }, | ||||
|  | ||||
|     setTerms: function(terms) { | ||||
|         // Check for the case of making a duplicate previous search before | ||||
|         // setting state of the current search or cancelling the search. | ||||
|         // This will prevent incorrect state being as a result of a duplicate | ||||
|         // search while the previous search is still active. | ||||
|         let searchString = terms.join(' '); | ||||
|         let previousSearchString = this._terms.join(' '); | ||||
|         if (searchString == previousSearchString) | ||||
|             return; | ||||
|  | ||||
|         this._startingSearch = true; | ||||
|  | ||||
|         this._cancellable.cancel(); | ||||
|         this._cancellable.reset(); | ||||
|  | ||||
|         if (terms.length == 0) { | ||||
|             this._reset(); | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         let isSubSearch = false; | ||||
|         if (this._terms.length > 0) | ||||
|             isSubSearch = searchString.indexOf(previousSearchString) == 0; | ||||
|  | ||||
|         this._terms = terms; | ||||
|         this._isSubSearch = isSubSearch; | ||||
|         this._updateSearchProgress(); | ||||
|  | ||||
|         if (this._searchTimeoutId == 0) | ||||
|             this._searchTimeoutId = GLib.timeout_add(GLib.PRIORITY_DEFAULT, 150, Lang.bind(this, this._onSearchTimeout)); | ||||
|         this._searchSystem = new SearchSystem(); | ||||
|         this._searchSystem.connect('search-updated', Lang.bind(this, this._updateResults)); | ||||
|         this._searchSystem.connect('providers-changed', Lang.bind(this, this._updateProviderDisplays)); | ||||
|         this._updateProviderDisplays(); | ||||
|     }, | ||||
|  | ||||
|     _onPan: function(action) { | ||||
| @@ -546,24 +528,44 @@ const SearchResults = new Lang.Class({ | ||||
|         if (provider.appInfo) | ||||
|             providerDisplay = new ListSearchResults(provider); | ||||
|         else | ||||
|             providerDisplay = new GridSearchResults(provider, this.actor); | ||||
|             providerDisplay = new GridSearchResults(provider, this._content); | ||||
|  | ||||
|         providerDisplay.connect('key-focus-in', Lang.bind(this, this._keyFocusIn)); | ||||
|         providerDisplay.actor.hide(); | ||||
|         this._content.add(providerDisplay.actor); | ||||
|         provider.display = providerDisplay; | ||||
|     }, | ||||
|  | ||||
|     _updateProviderDisplays: function() { | ||||
|         this._searchSystem.getProviders().forEach(Lang.bind(this, this._ensureProviderDisplay)); | ||||
|     }, | ||||
|  | ||||
|     _clearDisplay: function() { | ||||
|         this._providers.forEach(function(provider) { | ||||
|         this._searchSystem.getProviders().forEach(function(provider) { | ||||
|             provider.display.clear(); | ||||
|         }); | ||||
|     }, | ||||
|  | ||||
|     reset: function() { | ||||
|         this._searchSystem.reset(); | ||||
|         this._statusBin.hide(); | ||||
|         this._clearDisplay(); | ||||
|         this._defaultResult = null; | ||||
|     }, | ||||
|  | ||||
|     startingSearch: function() { | ||||
|         this.reset(); | ||||
|         this._statusText.set_text(_("Searching…")); | ||||
|         this._statusBin.show(); | ||||
|     }, | ||||
|  | ||||
|     setTerms: function(terms) { | ||||
|         this._searchSystem.setTerms(terms); | ||||
|     }, | ||||
|  | ||||
|     _maybeSetInitialSelection: function() { | ||||
|         let newDefaultResult = null; | ||||
|  | ||||
|         let providers = this._providers; | ||||
|         let providers = this._searchSystem.getProviders(); | ||||
|         for (let i = 0; i < providers.length; i++) { | ||||
|             let provider = providers[i]; | ||||
|             let display = provider.display; | ||||
| @@ -586,50 +588,31 @@ const SearchResults = new Lang.Class({ | ||||
|         } | ||||
|     }, | ||||
|  | ||||
|     get searchInProgress() { | ||||
|         if (this._startingSearch) | ||||
|             return true; | ||||
|  | ||||
|         return this._providers.some(function(provider) { | ||||
|             return provider.searchInProgress; | ||||
|         }); | ||||
|     }, | ||||
|  | ||||
|     _updateSearchProgress: function () { | ||||
|         let haveResults = this._providers.some(function(provider) { | ||||
|     _updateStatusText: function () { | ||||
|         let haveResults = this._searchSystem.getProviders().some(function(provider) { | ||||
|             let display = provider.display; | ||||
|             return (display.getFirstResult() != null); | ||||
|         }); | ||||
|  | ||||
|         this._scrollView.visible = haveResults; | ||||
|         this._statusBin.visible = !haveResults; | ||||
|  | ||||
|         if (!haveResults) { | ||||
|             if (this.searchInProgress) { | ||||
|                 this._statusText.set_text(_("Searching…")); | ||||
|             } else { | ||||
|             this._statusText.set_text(_("No results.")); | ||||
|             } | ||||
|             this._statusBin.show(); | ||||
|         } else { | ||||
|             this._statusBin.hide(); | ||||
|         } | ||||
|     }, | ||||
|  | ||||
|     _updateResults: function(provider, results) { | ||||
|         let terms = this._terms; | ||||
|     _updateResults: function(searchSystem, provider, results) { | ||||
|         let terms = searchSystem.getTerms(); | ||||
|         let display = provider.display; | ||||
|  | ||||
|         display.updateSearch(results, terms, Lang.bind(this, function() { | ||||
|             provider.searchInProgress = false; | ||||
|  | ||||
|             this._maybeSetInitialSelection(); | ||||
|             this._updateSearchProgress(); | ||||
|             this._updateStatusText(); | ||||
|         })); | ||||
|     }, | ||||
|  | ||||
|     activateDefault: function() { | ||||
|         // If we have a search queued up, force the search now. | ||||
|         if (this._searchTimeoutId > 0) | ||||
|             this._doSearch(); | ||||
|  | ||||
|         if (this._defaultResult) | ||||
|             this._defaultResult.activate(); | ||||
|     }, | ||||
|   | ||||
| @@ -44,7 +44,8 @@ const GnomeShellIface = '<node> \ | ||||
| </method> \ | ||||
| <signal name="AcceleratorActivated"> \ | ||||
|     <arg name="action" type="u" /> \ | ||||
|     <arg name="parameters" type="a{sv}" /> \ | ||||
|     <arg name="deviceid" type="u" /> \ | ||||
|     <arg name="timestamp" type="u" /> \ | ||||
| </signal> \ | ||||
| <property name="Mode" type="s" access="read" /> \ | ||||
| <property name="OverviewActive" type="b" access="readwrite" /> \ | ||||
| @@ -89,12 +90,6 @@ const GnomeShell = new Lang.Class({ | ||||
|             function(display, action, deviceid, timestamp) { | ||||
|                 this._emitAcceleratorActivated(action, deviceid, timestamp); | ||||
|             })); | ||||
|  | ||||
|         this._cachedOverviewVisible = false; | ||||
|         Main.overview.connect('showing', | ||||
|                               Lang.bind(this, this._checkOverviewVisibleChanged)); | ||||
|         Main.overview.connect('hidden', | ||||
|                               Lang.bind(this, this._checkOverviewVisibleChanged)); | ||||
|     }, | ||||
|  | ||||
|     /** | ||||
| @@ -139,7 +134,7 @@ const GnomeShell = new Lang.Class({ | ||||
|             params[param] = params[param].deep_unpack(); | ||||
|  | ||||
|         let monitorIndex = -1; | ||||
|         if (params['monitor'] >= 0) | ||||
|         if (params['monitor']) | ||||
|             monitorIndex = params['monitor']; | ||||
|  | ||||
|         let icon = null; | ||||
| @@ -195,14 +190,11 @@ const GnomeShell = new Lang.Class({ | ||||
|  | ||||
|         let connection = this._dbusImpl.get_connection(); | ||||
|         let info = this._dbusImpl.get_info(); | ||||
|         let params = { 'device-id': GLib.Variant.new('u', deviceid), | ||||
|                        'timestamp': GLib.Variant.new('u', timestamp), | ||||
|                        'action-mode': GLib.Variant.new('u', Main.actionMode) }; | ||||
|         connection.emit_signal(destination, | ||||
|                                this._dbusImpl.get_object_path(), | ||||
|                                info ? info.name : null, | ||||
|                                'AcceleratorActivated', | ||||
|                                GLib.Variant.new('(ua{sv})', [action, params])); | ||||
|                                GLib.Variant.new('(uuu)', [action, deviceid, timestamp])); | ||||
|     }, | ||||
|  | ||||
|     _grabAcceleratorForSender: function(accelerator, flags, sender) { | ||||
| @@ -243,15 +235,8 @@ const GnomeShell = new Lang.Class({ | ||||
|  | ||||
|     Mode: global.session_mode, | ||||
|  | ||||
|     _checkOverviewVisibleChanged: function() { | ||||
|         if (Main.overview.visible !== this._cachedOverviewVisible) { | ||||
|             this._cachedOverviewVisible = Main.overview.visible; | ||||
|             this._dbusImpl.emit_property_changed('OverviewActive', new GLib.Variant('b', this._cachedOverviewVisible)); | ||||
|         } | ||||
|     }, | ||||
|  | ||||
|     get OverviewActive() { | ||||
|         return this._cachedOverviewVisible; | ||||
|         return Main.overview.visible; | ||||
|     }, | ||||
|  | ||||
|     set OverviewActive(visible) { | ||||
|   | ||||
| @@ -17,6 +17,8 @@ const EntryMenu = new Lang.Class({ | ||||
|     _init: function(entry) { | ||||
|         this.parent(entry, 0, St.Side.TOP); | ||||
|  | ||||
|         this.actor.add_style_class_name('entry-context-menu'); | ||||
|  | ||||
|         this._entry = entry; | ||||
|         this._clipboard = St.Clipboard.get_default(); | ||||
|  | ||||
|   | ||||
| @@ -7,7 +7,7 @@ const Lang = imports.lang; | ||||
| const St = imports.gi.St; | ||||
| const Signals = imports.signals; | ||||
|  | ||||
| const SLIDER_SCROLL_STEP = 0.02; /* Slider scrolling step in % */ | ||||
| const SLIDER_SCROLL_STEP = 0.05; /* Slider scrolling step in % */ | ||||
|  | ||||
| const Slider = new Lang.Class({ | ||||
|     Name: "Slider", | ||||
| @@ -197,7 +197,7 @@ const Slider = new Lang.Class({ | ||||
|             let [dx, dy] = event.get_scroll_delta(); | ||||
|             // Even though the slider is horizontal, use dy to match | ||||
|             // the UP/DOWN above. | ||||
|             delta = -dy * SLIDER_SCROLL_STEP; | ||||
|             delta = -dy / 10; | ||||
|         } | ||||
|  | ||||
|         this._value = Math.min(Math.max(0, this._value + delta), 1); | ||||
|   | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -13,15 +13,6 @@ const LOCATION_SCHEMA = 'org.gnome.system.location'; | ||||
| const MAX_ACCURACY_LEVEL = 'max-accuracy-level'; | ||||
| const ENABLED = 'enabled'; | ||||
|  | ||||
| const GeoclueAccuracyLevel = { | ||||
|     NONE: 0, | ||||
|     COUNTRY: 1, | ||||
|     CITY: 4, | ||||
|     NEIGHBORHOOD: 5, | ||||
|     STREET: 6, | ||||
|     EXACT: 8 | ||||
| }; | ||||
|  | ||||
| var GeoclueIface = '<node> \ | ||||
|   <interface name="org.freedesktop.GeoClue2.Manager"> \ | ||||
|     <property name="InUse" type="b" access="read"/> \ | ||||
| @@ -70,7 +61,6 @@ const Indicator = new Lang.Class({ | ||||
|  | ||||
|         this._item.status.text = _("Enabled"); | ||||
|         this._onOffAction = this._item.menu.addAction(_("Disable"), Lang.bind(this, this._onOnOffAction)); | ||||
|         this._item.menu.addSettingsAction(_("Privacy Settings"), 'gnome-privacy-panel.desktop'); | ||||
|  | ||||
|         this.menu.addMenuItem(this._item); | ||||
|  | ||||
| @@ -191,14 +181,10 @@ const Indicator = new Lang.Class({ | ||||
|     }, | ||||
|  | ||||
|     _getMaxAccuracyLevel: function() { | ||||
|         if (this._settings.get_boolean(ENABLED)) { | ||||
|             let level = this._settings.get_string(MAX_ACCURACY_LEVEL); | ||||
|  | ||||
|             return GeoclueAccuracyLevel[level.toUpperCase()] || | ||||
|                    GeoclueAccuracyLevel.NONE; | ||||
|         } else { | ||||
|             return GeoclueAccuracyLevel.NONE; | ||||
|         } | ||||
|         if (this._settings.get_boolean(ENABLED)) | ||||
|             return this._settings.get_enum(MAX_ACCURACY_LEVEL); | ||||
|         else | ||||
|             return 0; | ||||
|     }, | ||||
|  | ||||
|     _notifyMaxAccuracyLevel: function() { | ||||
|   | ||||
| @@ -876,8 +876,7 @@ const NMWirelessDialog = new Lang.Class({ | ||||
|                                                  x_align: Clutter.ActorAlign.CENTER, | ||||
|                                                  y_align: Clutter.ActorAlign.CENTER }); | ||||
|  | ||||
|         let file = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/process-working.svg'); | ||||
|         this._noNetworksSpinner = new Animation.AnimatedIcon(file, 24, 24); | ||||
|         this._noNetworksSpinner = new Animation.AnimatedIcon(global.datadir + '/theme/process-working.svg', 24, 24); | ||||
|         this._noNetworksBox.add_actor(this._noNetworksSpinner.actor); | ||||
|         this._noNetworksBox.add_actor(new St.Label({ style_class: 'no-networks-label', | ||||
|                                                      text: _("No Networks") })); | ||||
| @@ -1867,7 +1866,7 @@ const NMApplet = new Lang.Class({ | ||||
|     _connectionRemoved: function(connection) { | ||||
|         let pos = this._connections.indexOf(connection); | ||||
|         if (pos != -1) | ||||
|             this._connections.splice(pos, 1); | ||||
|             this._connections.splice(connection, 1); | ||||
|  | ||||
|         let section = connection._section; | ||||
|  | ||||
|   | ||||
| @@ -15,7 +15,6 @@ const RfkillManagerInterface = '<node> \ | ||||
| <interface name="org.gnome.SettingsDaemon.Rfkill"> \ | ||||
| <property name="AirplaneMode" type="b" access="readwrite" /> \ | ||||
| <property name="HardwareAirplaneMode" type="b" access="read" /> \ | ||||
| <property name="ShouldShowAirplaneMode" type="b" access="read" /> \ | ||||
| </interface> \ | ||||
| </node>'; | ||||
|  | ||||
| @@ -49,10 +48,6 @@ const RfkillManager = new Lang.Class({ | ||||
|         return this._proxy.HardwareAirplaneMode; | ||||
|     }, | ||||
|  | ||||
|     get shouldShowAirplaneMode() { | ||||
|         return this._proxy.ShouldShowAirplaneMode; | ||||
|     }, | ||||
|  | ||||
|     _changed: function() { | ||||
|         this.emit('airplane-mode-changed'); | ||||
|     } | ||||
| @@ -106,10 +101,11 @@ const Indicator = new Lang.Class({ | ||||
|     _sync: function() { | ||||
|         let airplaneMode = this._manager.airplaneMode; | ||||
|         let hwAirplaneMode = this._manager.hwAirplaneMode; | ||||
|         let showAirplaneMode = this._manager.shouldShowAirplaneMode; | ||||
|         let changed = (airplaneMode != this._indicator.visible) || | ||||
|             (hwAirplaneMode != this._offItem.actor.visible); | ||||
|  | ||||
|         this._indicator.visible = (airplaneMode && showAirplaneMode); | ||||
|         this._item.actor.visible = (airplaneMode && showAirplaneMode); | ||||
|         this._indicator.visible = airplaneMode; | ||||
|         this._item.actor.visible = airplaneMode; | ||||
|         this._offItem.setSensitive(!hwAirplaneMode); | ||||
|  | ||||
|         if (hwAirplaneMode) | ||||
|   | ||||
| @@ -87,6 +87,8 @@ const SwitcherPopup = new Lang.Class({ | ||||
|  | ||||
|         let leftPadding = this.actor.get_theme_node().get_padding(St.Side.LEFT); | ||||
|         let rightPadding = this.actor.get_theme_node().get_padding(St.Side.RIGHT); | ||||
|         let bottomPadding = this.actor.get_theme_node().get_padding(St.Side.BOTTOM); | ||||
|         let vPadding = this.actor.get_theme_node().get_vertical_padding(); | ||||
|         let hPadding = leftPadding + rightPadding; | ||||
|  | ||||
|         // Allocate the switcherList | ||||
| @@ -100,17 +102,16 @@ const SwitcherPopup = new Lang.Class({ | ||||
|         this._switcherList.actor.allocate(childBox, flags); | ||||
|     }, | ||||
|  | ||||
|     _createSwitcher: function() { | ||||
|         throw new Error('Not implemented'); | ||||
|     }, | ||||
|  | ||||
|     _initialSelection: function(backward, binding) { | ||||
|         if (backward) | ||||
|             this._select(this._items.length - 1); | ||||
|         else if (this._items.length == 1) | ||||
|             this._select(0); | ||||
|         else | ||||
|             this._select(1); | ||||
|         throw new Error('Not implemented'); | ||||
|     }, | ||||
|  | ||||
|     show: function(backward, binding, mask) { | ||||
|         if (this._items.length == 0) | ||||
|         if (!this._createSwitcher()) | ||||
|             return false; | ||||
|  | ||||
|         if (!Main.pushModal(this.actor)) { | ||||
| @@ -138,6 +139,11 @@ const SwitcherPopup = new Lang.Class({ | ||||
|         this.actor.show(); | ||||
|         this.actor.get_allocation_box(); | ||||
|  | ||||
|         if (this._items.length > 1) | ||||
|             this._selectedIndex = 1; | ||||
|         else | ||||
|             this._selectedIndex = 0; | ||||
|  | ||||
|         this._initialSelection(backward, binding); | ||||
|  | ||||
|         // There's a race condition; if the user released Alt before | ||||
|   | ||||
| @@ -154,7 +154,7 @@ const UnlockDialog = new Lang.Class({ | ||||
|             return true; | ||||
|  | ||||
|         if (!Main.pushModal(this.actor, { timestamp: timestamp, | ||||
|                                           actionMode: Shell.ActionMode.UNLOCK_SCREEN })) | ||||
|                                           keybindingMode: Shell.KeyBindingMode.UNLOCK_SCREEN })) | ||||
|             return false; | ||||
|  | ||||
|         this._isModal = true; | ||||
|   | ||||
| @@ -28,12 +28,11 @@ const Avatar = new Lang.Class({ | ||||
|                                         styleClass: 'framed-user-icon' }); | ||||
|         this._iconSize = params.iconSize; | ||||
|  | ||||
|         let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor; | ||||
|         this.actor = new St.Bin({ style_class: params.styleClass, | ||||
|                                   track_hover: params.reactive, | ||||
|                                   reactive: params.reactive, | ||||
|                                   width: this._iconSize * scaleFactor, | ||||
|                                   height: this._iconSize * scaleFactor }); | ||||
|                                   width: this._iconSize, | ||||
|                                   height: this._iconSize }); | ||||
|     }, | ||||
|  | ||||
|     setSensitive: function(sensitive) { | ||||
|   | ||||
| @@ -65,8 +65,7 @@ const ShowOverviewAction = new Lang.Class({ | ||||
|     }, | ||||
|  | ||||
|     vfunc_gesture_prepare : function(action, actor) { | ||||
|         return Main.actionMode == Shell.ActionMode.NORMAL && | ||||
|                this.get_n_current_points() == this.get_n_touch_points(); | ||||
|         return this.get_n_current_points() == this.get_n_touch_points(); | ||||
|     }, | ||||
|  | ||||
|     _getBoundingRect : function(motion) { | ||||
| @@ -126,6 +125,7 @@ const ViewSelector = new Lang.Class({ | ||||
|         this._activePage = null; | ||||
|  | ||||
|         this._searchActive = false; | ||||
|         this._searchTimeoutId = 0; | ||||
|  | ||||
|         this._entry = searchEntry; | ||||
|         ShellEntry.addContextMenu(this._entry); | ||||
| @@ -144,8 +144,12 @@ const ViewSelector = new Lang.Class({ | ||||
|  | ||||
|         this._entry.set_primary_icon(new St.Icon({ style_class: 'search-entry-icon', | ||||
|                                                    icon_name: 'edit-find-symbolic' })); | ||||
|         if (this._entry.get_text_direction() == Clutter.TextDirection.RTL) | ||||
|             this._clearIcon = new St.Icon({ style_class: 'search-entry-icon', | ||||
|                                         icon_name: 'edit-clear-symbolic' }); | ||||
|                                             icon_name: 'edit-clear-symbolic-rtl' }); | ||||
|         else | ||||
|             this._clearIcon = new St.Icon({ style_class: 'search-entry-icon', | ||||
|                                             icon_name: 'edit-clear-symbolic-ltr' }); | ||||
|  | ||||
|         this._iconClickedId = 0; | ||||
|         this._capturedEventId = 0; | ||||
| @@ -194,30 +198,27 @@ const ViewSelector = new Lang.Class({ | ||||
|                 // the windows to animate, but now we no longer want to | ||||
|                 // show it given that we are now on the apps page or | ||||
|                 // search page. | ||||
|                 if (this._activePage != this._workspacesPage) { | ||||
|                 if (this._activePage != this._workspacesPage) | ||||
|                     this._workspacesPage.opacity = 0; | ||||
|                     this._workspacesPage.hide(); | ||||
|                 } | ||||
|             })); | ||||
|  | ||||
|         Main.wm.addKeybinding('toggle-application-view', | ||||
|                               new Gio.Settings({ schema_id: SHELL_KEYBINDINGS_SCHEMA }), | ||||
|                               Meta.KeyBindingFlags.NONE, | ||||
|                               Shell.ActionMode.NORMAL | | ||||
|                               Shell.ActionMode.OVERVIEW, | ||||
|                               Shell.KeyBindingMode.NORMAL | | ||||
|                               Shell.KeyBindingMode.OVERVIEW, | ||||
|                               Lang.bind(this, this._toggleAppsPage)); | ||||
|  | ||||
|         Main.wm.addKeybinding('toggle-overview', | ||||
|                               new Gio.Settings({ schema_id: SHELL_KEYBINDINGS_SCHEMA }), | ||||
|                               Meta.KeyBindingFlags.NONE, | ||||
|                               Shell.ActionMode.NORMAL | | ||||
|                               Shell.ActionMode.OVERVIEW, | ||||
|                               Shell.KeyBindingMode.NORMAL | | ||||
|                               Shell.KeyBindingMode.OVERVIEW, | ||||
|                               Lang.bind(Main.overview, Main.overview.toggle)); | ||||
|  | ||||
|         let gesture; | ||||
|  | ||||
|         gesture = new EdgeDragAction.EdgeDragAction(St.Side.LEFT, | ||||
|                                                     Shell.ActionMode.NORMAL); | ||||
|         gesture = new EdgeDragAction.EdgeDragAction(St.Side.LEFT); | ||||
|         gesture.connect('activated', Lang.bind(this, function() { | ||||
|             if (Main.overview.visible) | ||||
|                 Main.overview.hide(); | ||||
| @@ -488,23 +489,36 @@ const ViewSelector = new Lang.Class({ | ||||
|     _onTextChanged: function (se, prop) { | ||||
|         let terms = getTermsForSearchString(this._entry.get_text()); | ||||
|  | ||||
|         let searchPreviouslyActive = this._searchActive; | ||||
|         this._searchActive = (terms.length > 0); | ||||
|         this._searchResults.setTerms(terms); | ||||
|  | ||||
|         let startSearch = this._searchActive && !searchPreviouslyActive; | ||||
|         if (startSearch) | ||||
|             this._searchResults.startingSearch(); | ||||
|  | ||||
|         if (this._searchActive) { | ||||
|             this._showPage(this._searchPage); | ||||
|  | ||||
|             this._entry.set_secondary_icon(this._clearIcon); | ||||
|  | ||||
|             if (this._iconClickedId == 0) | ||||
|                 this._iconClickedId = this._entry.connect('secondary-icon-clicked', | ||||
|                     Lang.bind(this, this.reset)); | ||||
|  | ||||
|             if (this._searchTimeoutId == 0) { | ||||
|                 this._searchTimeoutId = Mainloop.timeout_add(150, | ||||
|                     Lang.bind(this, this._doSearch)); | ||||
|                 GLib.Source.set_name_by_id(this._searchTimeoutId, '[gnome-shell] this._doSearch'); | ||||
|             } | ||||
|         } else { | ||||
|             if (this._iconClickedId > 0) { | ||||
|                 this._entry.disconnect(this._iconClickedId); | ||||
|                 this._iconClickedId = 0; | ||||
|             } | ||||
|  | ||||
|             if (this._searchTimeoutId > 0) { | ||||
|                 Mainloop.source_remove(this._searchTimeoutId); | ||||
|                 this._searchTimeoutId = 0; | ||||
|             } | ||||
|  | ||||
|             this._entry.set_secondary_icon(null); | ||||
|             this._searchCancelled(); | ||||
|         } | ||||
| @@ -542,6 +556,12 @@ const ViewSelector = new Lang.Class({ | ||||
|                 this._searchResults.navigateFocus(nextDirection); | ||||
|                 return Clutter.EVENT_STOP; | ||||
|             } else if (symbol == Clutter.Return || symbol == Clutter.KP_Enter) { | ||||
|                 // We can't connect to 'activate' here because search providers | ||||
|                 // might want to do something with the modifiers in activateDefault. | ||||
|                 if (this._searchTimeoutId > 0) { | ||||
|                     Mainloop.source_remove(this._searchTimeoutId); | ||||
|                     this._doSearch(); | ||||
|                 } | ||||
|                 this._searchResults.activateDefault(); | ||||
|                 return Clutter.EVENT_STOP; | ||||
|             } | ||||
| @@ -564,6 +584,17 @@ const ViewSelector = new Lang.Class({ | ||||
|         return Clutter.EVENT_PROPAGATE; | ||||
|     }, | ||||
|  | ||||
|     _doSearch: function () { | ||||
|         this._searchTimeoutId = 0; | ||||
|  | ||||
|         let terms = getTermsForSearchString(this._entry.get_text()); | ||||
|  | ||||
|         this._searchResults.setTerms(terms); | ||||
|         this._showPage(this._searchPage); | ||||
|  | ||||
|         return GLib.SOURCE_REMOVE; | ||||
|     }, | ||||
|  | ||||
|     getActivePage: function() { | ||||
|         if (this._activePage == this._workspacesPage) | ||||
|             return ViewPage.WINDOWS; | ||||
|   | ||||
| @@ -17,6 +17,7 @@ const Main = imports.ui.main; | ||||
| const ModalDialog = imports.ui.modalDialog; | ||||
| const Tweener = imports.ui.tweener; | ||||
| const WindowMenu = imports.ui.windowMenu; | ||||
| const Wobbly = imports.ui.wobbly; | ||||
|  | ||||
| const SHELL_KEYBINDINGS_SCHEMA = 'org.gnome.shell.keybindings'; | ||||
| const MAXIMIZE_WINDOW_ANIMATION_TIME = 0.15; | ||||
| @@ -413,7 +414,7 @@ const TilePreview = new Lang.Class({ | ||||
|                                                    y: monitor.y, | ||||
|                                                    width: monitor.width, | ||||
|                                                    height: monitor.height }); | ||||
|             let [, rect] = window.get_frame_rect().intersect(monitorRect); | ||||
|             let [, rect] = window.get_outer_rect().intersect(monitorRect); | ||||
|             this.actor.set_size(rect.width, rect.height); | ||||
|             this.actor.set_position(rect.x, rect.y); | ||||
|             this.actor.opacity = 0; | ||||
| @@ -478,9 +479,7 @@ const WorkspaceSwitchAction = new Lang.Class({ | ||||
|     }, | ||||
|  | ||||
|     vfunc_gesture_prepare : function(action, actor) { | ||||
|         let allowedModes = Shell.ActionMode.NORMAL | Shell.ActionMode.OVERVIEW; | ||||
|         return this.get_n_current_points() == this.get_n_touch_points() && | ||||
|                (allowedModes & Main.actionMode); | ||||
|         return this.get_n_current_points() == this.get_n_touch_points(); | ||||
|     }, | ||||
|  | ||||
|     vfunc_gesture_end : function(action, actor) { | ||||
| @@ -528,11 +527,6 @@ const AppSwitchAction = new Lang.Class({ | ||||
|     }, | ||||
|  | ||||
|     vfunc_gesture_prepare : function(action, actor) { | ||||
|         if (Main.actionMode != Shell.ActionMode.NORMAL) { | ||||
|             this.cancel(); | ||||
|             return false; | ||||
|         } | ||||
|  | ||||
|         return this.get_n_current_points() <= 4; | ||||
|     }, | ||||
|  | ||||
| @@ -580,35 +574,6 @@ const AppSwitchAction = new Lang.Class({ | ||||
| }); | ||||
| Signals.addSignalMethods(AppSwitchAction.prototype); | ||||
|  | ||||
| const ResizePopup = new Lang.Class({ | ||||
|     Name: 'ResizePopup', | ||||
|  | ||||
|     _init: function() { | ||||
|         this._widget = new St.Widget({ layout_manager: new Clutter.BinLayout() }); | ||||
|         this._label = new St.Label({ style_class: 'resize-popup', | ||||
|                                      x_align: Clutter.ActorAlign.CENTER, | ||||
|                                      y_align: Clutter.ActorAlign.CENTER, | ||||
|                                      x_expand: true, y_expand: true }); | ||||
|         this._widget.add_child(this._label); | ||||
|         Main.uiGroup.add_actor(this._widget); | ||||
|     }, | ||||
|  | ||||
|     set: function(rect, displayW, displayH) { | ||||
|         /* Translators: This represents the size of a window. The first number is | ||||
|          * the width of the window and the second is the height. */ | ||||
|         let text = _("%d x %d").format(displayW, displayH); | ||||
|         this._label.set_text(text); | ||||
|  | ||||
|         this._widget.set_position(rect.x, rect.y); | ||||
|         this._widget.set_size(rect.width, rect.height); | ||||
|     }, | ||||
|  | ||||
|     destroy: function() { | ||||
|         this._widget.destroy(); | ||||
|         this._widget = null; | ||||
|     }, | ||||
| }); | ||||
|  | ||||
| const WindowManager = new Lang.Class({ | ||||
|     Name: 'WindowManager', | ||||
|  | ||||
| @@ -647,182 +612,179 @@ const WindowManager = new Lang.Class({ | ||||
|         this._shellwm.connect('destroy', Lang.bind(this, this._destroyWindow)); | ||||
|         this._shellwm.connect('filter-keybinding', Lang.bind(this, this._filterKeybinding)); | ||||
|         this._shellwm.connect('confirm-display-change', Lang.bind(this, this._confirmDisplayChange)); | ||||
|         global.screen.connect('restacked', Lang.bind(this, this._syncStacking)); | ||||
|  | ||||
|         this._workspaceSwitcherPopup = null; | ||||
|         this._tilePreview = null; | ||||
|  | ||||
|         this.setCustomKeybindingHandler('switch-to-workspace-left', | ||||
|                                         Shell.ActionMode.NORMAL | | ||||
|                                         Shell.ActionMode.OVERVIEW, | ||||
|                                         Shell.KeyBindingMode.NORMAL | | ||||
|                                         Shell.KeyBindingMode.OVERVIEW, | ||||
|                                         Lang.bind(this, this._showWorkspaceSwitcher)); | ||||
|         this.setCustomKeybindingHandler('switch-to-workspace-right', | ||||
|                                         Shell.ActionMode.NORMAL | | ||||
|                                         Shell.ActionMode.OVERVIEW, | ||||
|                                         Shell.KeyBindingMode.NORMAL | | ||||
|                                         Shell.KeyBindingMode.OVERVIEW, | ||||
|                                         Lang.bind(this, this._showWorkspaceSwitcher)); | ||||
|         this.setCustomKeybindingHandler('switch-to-workspace-up', | ||||
|                                         Shell.ActionMode.NORMAL | | ||||
|                                         Shell.ActionMode.OVERVIEW, | ||||
|                                         Shell.KeyBindingMode.NORMAL | | ||||
|                                         Shell.KeyBindingMode.OVERVIEW, | ||||
|                                         Lang.bind(this, this._showWorkspaceSwitcher)); | ||||
|         this.setCustomKeybindingHandler('switch-to-workspace-down', | ||||
|                                         Shell.ActionMode.NORMAL | | ||||
|                                         Shell.ActionMode.OVERVIEW, | ||||
|                                         Shell.KeyBindingMode.NORMAL | | ||||
|                                         Shell.KeyBindingMode.OVERVIEW, | ||||
|                                         Lang.bind(this, this._showWorkspaceSwitcher)); | ||||
|         this.setCustomKeybindingHandler('switch-to-workspace-last', | ||||
|                                         Shell.ActionMode.NORMAL | | ||||
|                                         Shell.ActionMode.OVERVIEW, | ||||
|                                         Shell.KeyBindingMode.NORMAL | | ||||
|                                         Shell.KeyBindingMode.OVERVIEW, | ||||
|                                         Lang.bind(this, this._showWorkspaceSwitcher)); | ||||
|         this.setCustomKeybindingHandler('move-to-workspace-left', | ||||
|                                         Shell.ActionMode.NORMAL | | ||||
|                                         Shell.ActionMode.OVERVIEW, | ||||
|                                         Shell.KeyBindingMode.NORMAL | | ||||
|                                         Shell.KeyBindingMode.OVERVIEW, | ||||
|                                         Lang.bind(this, this._showWorkspaceSwitcher)); | ||||
|         this.setCustomKeybindingHandler('move-to-workspace-right', | ||||
|                                         Shell.ActionMode.NORMAL | | ||||
|                                         Shell.ActionMode.OVERVIEW, | ||||
|                                         Shell.KeyBindingMode.NORMAL | | ||||
|                                         Shell.KeyBindingMode.OVERVIEW, | ||||
|                                         Lang.bind(this, this._showWorkspaceSwitcher)); | ||||
|         this.setCustomKeybindingHandler('move-to-workspace-up', | ||||
|                                         Shell.ActionMode.NORMAL | | ||||
|                                         Shell.ActionMode.OVERVIEW, | ||||
|                                         Shell.KeyBindingMode.NORMAL | | ||||
|                                         Shell.KeyBindingMode.OVERVIEW, | ||||
|                                         Lang.bind(this, this._showWorkspaceSwitcher)); | ||||
|         this.setCustomKeybindingHandler('move-to-workspace-down', | ||||
|                                         Shell.ActionMode.NORMAL | | ||||
|                                         Shell.ActionMode.OVERVIEW, | ||||
|                                         Shell.KeyBindingMode.NORMAL | | ||||
|                                         Shell.KeyBindingMode.OVERVIEW, | ||||
|                                         Lang.bind(this, this._showWorkspaceSwitcher)); | ||||
|         this.setCustomKeybindingHandler('switch-to-workspace-1', | ||||
|                                         Shell.ActionMode.NORMAL | | ||||
|                                         Shell.ActionMode.OVERVIEW, | ||||
|                                         Shell.KeyBindingMode.NORMAL | | ||||
|                                         Shell.KeyBindingMode.OVERVIEW, | ||||
|                                         Lang.bind(this, this._showWorkspaceSwitcher)); | ||||
|         this.setCustomKeybindingHandler('switch-to-workspace-2', | ||||
|                                         Shell.ActionMode.NORMAL | | ||||
|                                         Shell.ActionMode.OVERVIEW, | ||||
|                                         Shell.KeyBindingMode.NORMAL | | ||||
|                                         Shell.KeyBindingMode.OVERVIEW, | ||||
|                                         Lang.bind(this, this._showWorkspaceSwitcher)); | ||||
|         this.setCustomKeybindingHandler('switch-to-workspace-3', | ||||
|                                         Shell.ActionMode.NORMAL | | ||||
|                                         Shell.ActionMode.OVERVIEW, | ||||
|                                         Shell.KeyBindingMode.NORMAL | | ||||
|                                         Shell.KeyBindingMode.OVERVIEW, | ||||
|                                         Lang.bind(this, this._showWorkspaceSwitcher)); | ||||
|         this.setCustomKeybindingHandler('switch-to-workspace-4', | ||||
|                                         Shell.ActionMode.NORMAL | | ||||
|                                         Shell.ActionMode.OVERVIEW, | ||||
|                                         Shell.KeyBindingMode.NORMAL | | ||||
|                                         Shell.KeyBindingMode.OVERVIEW, | ||||
|                                         Lang.bind(this, this._showWorkspaceSwitcher)); | ||||
|         this.setCustomKeybindingHandler('switch-to-workspace-5', | ||||
|                                         Shell.ActionMode.NORMAL | | ||||
|                                         Shell.ActionMode.OVERVIEW, | ||||
|                                         Shell.KeyBindingMode.NORMAL | | ||||
|                                         Shell.KeyBindingMode.OVERVIEW, | ||||
|                                         Lang.bind(this, this._showWorkspaceSwitcher)); | ||||
|         this.setCustomKeybindingHandler('switch-to-workspace-6', | ||||
|                                         Shell.ActionMode.NORMAL | | ||||
|                                         Shell.ActionMode.OVERVIEW, | ||||
|                                         Shell.KeyBindingMode.NORMAL | | ||||
|                                         Shell.KeyBindingMode.OVERVIEW, | ||||
|                                         Lang.bind(this, this._showWorkspaceSwitcher)); | ||||
|         this.setCustomKeybindingHandler('switch-to-workspace-7', | ||||
|                                         Shell.ActionMode.NORMAL | | ||||
|                                         Shell.ActionMode.OVERVIEW, | ||||
|                                         Shell.KeyBindingMode.NORMAL | | ||||
|                                         Shell.KeyBindingMode.OVERVIEW, | ||||
|                                         Lang.bind(this, this._showWorkspaceSwitcher)); | ||||
|         this.setCustomKeybindingHandler('switch-to-workspace-8', | ||||
|                                         Shell.ActionMode.NORMAL | | ||||
|                                         Shell.ActionMode.OVERVIEW, | ||||
|                                         Shell.KeyBindingMode.NORMAL | | ||||
|                                         Shell.KeyBindingMode.OVERVIEW, | ||||
|                                         Lang.bind(this, this._showWorkspaceSwitcher)); | ||||
|         this.setCustomKeybindingHandler('switch-to-workspace-9', | ||||
|                                         Shell.ActionMode.NORMAL | | ||||
|                                         Shell.ActionMode.OVERVIEW, | ||||
|                                         Shell.KeyBindingMode.NORMAL | | ||||
|                                         Shell.KeyBindingMode.OVERVIEW, | ||||
|                                         Lang.bind(this, this._showWorkspaceSwitcher)); | ||||
|         this.setCustomKeybindingHandler('switch-to-workspace-10', | ||||
|                                         Shell.ActionMode.NORMAL | | ||||
|                                         Shell.ActionMode.OVERVIEW, | ||||
|                                         Shell.KeyBindingMode.NORMAL | | ||||
|                                         Shell.KeyBindingMode.OVERVIEW, | ||||
|                                         Lang.bind(this, this._showWorkspaceSwitcher)); | ||||
|         this.setCustomKeybindingHandler('switch-to-workspace-11', | ||||
|                                         Shell.ActionMode.NORMAL | | ||||
|                                         Shell.ActionMode.OVERVIEW, | ||||
|                                         Shell.KeyBindingMode.NORMAL | | ||||
|                                         Shell.KeyBindingMode.OVERVIEW, | ||||
|                                         Lang.bind(this, this._showWorkspaceSwitcher)); | ||||
|         this.setCustomKeybindingHandler('switch-to-workspace-12', | ||||
|                                         Shell.ActionMode.NORMAL | | ||||
|                                         Shell.ActionMode.OVERVIEW, | ||||
|                                         Shell.KeyBindingMode.NORMAL | | ||||
|                                         Shell.KeyBindingMode.OVERVIEW, | ||||
|                                         Lang.bind(this, this._showWorkspaceSwitcher)); | ||||
|         this.setCustomKeybindingHandler('move-to-workspace-1', | ||||
|                                         Shell.ActionMode.NORMAL, | ||||
|                                         Shell.KeyBindingMode.NORMAL, | ||||
|                                         Lang.bind(this, this._showWorkspaceSwitcher)); | ||||
|         this.setCustomKeybindingHandler('move-to-workspace-2', | ||||
|                                         Shell.ActionMode.NORMAL, | ||||
|                                         Shell.KeyBindingMode.NORMAL, | ||||
|                                         Lang.bind(this, this._showWorkspaceSwitcher)); | ||||
|         this.setCustomKeybindingHandler('move-to-workspace-3', | ||||
|                                         Shell.ActionMode.NORMAL, | ||||
|                                         Shell.KeyBindingMode.NORMAL, | ||||
|                                         Lang.bind(this, this._showWorkspaceSwitcher)); | ||||
|         this.setCustomKeybindingHandler('move-to-workspace-4', | ||||
|                                         Shell.ActionMode.NORMAL, | ||||
|                                         Shell.KeyBindingMode.NORMAL, | ||||
|                                         Lang.bind(this, this._showWorkspaceSwitcher)); | ||||
|         this.setCustomKeybindingHandler('move-to-workspace-5', | ||||
|                                         Shell.ActionMode.NORMAL, | ||||
|                                         Shell.KeyBindingMode.NORMAL, | ||||
|                                         Lang.bind(this, this._showWorkspaceSwitcher)); | ||||
|         this.setCustomKeybindingHandler('move-to-workspace-6', | ||||
|                                         Shell.ActionMode.NORMAL, | ||||
|                                         Shell.KeyBindingMode.NORMAL, | ||||
|                                         Lang.bind(this, this._showWorkspaceSwitcher)); | ||||
|         this.setCustomKeybindingHandler('move-to-workspace-7', | ||||
|                                         Shell.ActionMode.NORMAL, | ||||
|                                         Shell.KeyBindingMode.NORMAL, | ||||
|                                         Lang.bind(this, this._showWorkspaceSwitcher)); | ||||
|         this.setCustomKeybindingHandler('move-to-workspace-8', | ||||
|                                         Shell.ActionMode.NORMAL, | ||||
|                                         Shell.KeyBindingMode.NORMAL, | ||||
|                                         Lang.bind(this, this._showWorkspaceSwitcher)); | ||||
|         this.setCustomKeybindingHandler('move-to-workspace-9', | ||||
|                                         Shell.ActionMode.NORMAL, | ||||
|                                         Shell.KeyBindingMode.NORMAL, | ||||
|                                         Lang.bind(this, this._showWorkspaceSwitcher)); | ||||
|         this.setCustomKeybindingHandler('move-to-workspace-10', | ||||
|                                         Shell.ActionMode.NORMAL, | ||||
|                                         Shell.KeyBindingMode.NORMAL, | ||||
|                                         Lang.bind(this, this._showWorkspaceSwitcher)); | ||||
|         this.setCustomKeybindingHandler('move-to-workspace-11', | ||||
|                                         Shell.ActionMode.NORMAL, | ||||
|                                         Shell.KeyBindingMode.NORMAL, | ||||
|                                         Lang.bind(this, this._showWorkspaceSwitcher)); | ||||
|         this.setCustomKeybindingHandler('move-to-workspace-12', | ||||
|                                         Shell.ActionMode.NORMAL, | ||||
|                                         Shell.KeyBindingMode.NORMAL, | ||||
|                                         Lang.bind(this, this._showWorkspaceSwitcher)); | ||||
|         this.setCustomKeybindingHandler('move-to-workspace-last', | ||||
|                                         Shell.ActionMode.NORMAL, | ||||
|                                         Shell.KeyBindingMode.NORMAL, | ||||
|                                         Lang.bind(this, this._showWorkspaceSwitcher)); | ||||
|         this.setCustomKeybindingHandler('switch-applications', | ||||
|                                         Shell.ActionMode.NORMAL, | ||||
|                                         Shell.KeyBindingMode.NORMAL, | ||||
|                                         Lang.bind(this, this._startAppSwitcher)); | ||||
|         this.setCustomKeybindingHandler('switch-group', | ||||
|                                         Shell.ActionMode.NORMAL, | ||||
|                                         Shell.KeyBindingMode.NORMAL, | ||||
|                                         Lang.bind(this, this._startAppSwitcher)); | ||||
|         this.setCustomKeybindingHandler('switch-applications-backward', | ||||
|                                         Shell.ActionMode.NORMAL, | ||||
|                                         Shell.KeyBindingMode.NORMAL, | ||||
|                                         Lang.bind(this, this._startAppSwitcher)); | ||||
|         this.setCustomKeybindingHandler('switch-group-backward', | ||||
|                                         Shell.ActionMode.NORMAL, | ||||
|                                         Shell.KeyBindingMode.NORMAL, | ||||
|                                         Lang.bind(this, this._startAppSwitcher)); | ||||
|         this.setCustomKeybindingHandler('switch-windows', | ||||
|                                         Shell.ActionMode.NORMAL, | ||||
|                                         Shell.KeyBindingMode.NORMAL, | ||||
|                                         Lang.bind(this, this._startWindowSwitcher)); | ||||
|         this.setCustomKeybindingHandler('switch-windows-backward', | ||||
|                                         Shell.ActionMode.NORMAL, | ||||
|                                         Shell.KeyBindingMode.NORMAL, | ||||
|                                         Lang.bind(this, this._startWindowSwitcher)); | ||||
|         this.setCustomKeybindingHandler('switch-panels', | ||||
|                                         Shell.ActionMode.NORMAL | | ||||
|                                         Shell.ActionMode.OVERVIEW | | ||||
|                                         Shell.ActionMode.LOCK_SCREEN | | ||||
|                                         Shell.ActionMode.UNLOCK_SCREEN | | ||||
|                                         Shell.ActionMode.LOGIN_SCREEN, | ||||
|                                         Shell.KeyBindingMode.NORMAL | | ||||
|                                         Shell.KeyBindingMode.OVERVIEW | | ||||
|                                         Shell.KeyBindingMode.LOCK_SCREEN | | ||||
|                                         Shell.KeyBindingMode.UNLOCK_SCREEN | | ||||
|                                         Shell.KeyBindingMode.LOGIN_SCREEN, | ||||
|                                         Lang.bind(this, this._startA11ySwitcher)); | ||||
|         this.setCustomKeybindingHandler('switch-panels-backward', | ||||
|                                         Shell.ActionMode.NORMAL | | ||||
|                                         Shell.ActionMode.OVERVIEW | | ||||
|                                         Shell.ActionMode.LOCK_SCREEN | | ||||
|                                         Shell.ActionMode.UNLOCK_SCREEN | | ||||
|                                         Shell.ActionMode.LOGIN_SCREEN, | ||||
|                                         Shell.KeyBindingMode.NORMAL | | ||||
|                                         Shell.KeyBindingMode.OVERVIEW | | ||||
|                                         Shell.KeyBindingMode.LOCK_SCREEN | | ||||
|                                         Shell.KeyBindingMode.UNLOCK_SCREEN | | ||||
|                                         Shell.KeyBindingMode.LOGIN_SCREEN, | ||||
|                                         Lang.bind(this, this._startA11ySwitcher)); | ||||
|  | ||||
|         this.addKeybinding('pause-resume-tweens', | ||||
|                            new Gio.Settings({ schema_id: SHELL_KEYBINDINGS_SCHEMA }), | ||||
|                            Meta.KeyBindingFlags.NONE, | ||||
|                            Shell.ActionMode.ALL, | ||||
|                            Shell.KeyBindingMode.ALL, | ||||
|                            Lang.bind(this, this._toggleTweens)); | ||||
|  | ||||
|         this.addKeybinding('open-application-menu', | ||||
|                            new Gio.Settings({ schema_id: SHELL_KEYBINDINGS_SCHEMA }), | ||||
|                            Meta.KeyBindingFlags.NONE, | ||||
|                            Shell.ActionMode.NORMAL | | ||||
|                            Shell.ActionMode.TOPBAR_POPUP, | ||||
|                            Shell.KeyBindingMode.NORMAL | | ||||
|                            Shell.KeyBindingMode.TOPBAR_POPUP, | ||||
|                            Lang.bind(this, this._toggleAppMenu)); | ||||
|  | ||||
|         global.display.connect('show-resize-popup', Lang.bind(this, this._showResizePopup)); | ||||
|  | ||||
|         Main.overview.connect('showing', Lang.bind(this, function() { | ||||
|             for (let i = 0; i < this._dimmedWindows.length; i++) | ||||
|                 this._undimWindow(this._dimmedWindows[i]); | ||||
| @@ -850,6 +812,8 @@ const WindowManager = new Lang.Class({ | ||||
|         gesture = new AppSwitchAction(); | ||||
|         gesture.connect('activated', Lang.bind(this, this._switchApp)); | ||||
|         global.stage.add_action(gesture); | ||||
|  | ||||
|         this._wobblyWindows = new Wobbly.WobblyWindowManager(); | ||||
|     }, | ||||
|  | ||||
|     _lookupIndex: function (windows, metaWindow) { | ||||
| @@ -888,44 +852,6 @@ const WindowManager = new Lang.Class({ | ||||
|         Main.activateWindow(nextWindow); | ||||
|     }, | ||||
|  | ||||
|     insertWorkspace: function(pos) { | ||||
|         if (!Meta.prefs_get_dynamic_workspaces()) | ||||
|             return; | ||||
|  | ||||
|         let windows = global.get_window_actors().map(function(winActor) { | ||||
|             return winActor.meta_window; | ||||
|         }); | ||||
|  | ||||
|         // To create a new workspace, we slide all the windows on workspaces | ||||
|         // below us to the next workspace, leaving a blank workspace for us | ||||
|         // to recycle. | ||||
|         windows.forEach(function(window) { | ||||
|             // If the window is attached to an ancestor, we don't need/want | ||||
|             // to move it | ||||
|             if (window.get_transient_for() != null) | ||||
|                 return; | ||||
|             // Same for OR windows | ||||
|             if (window.is_override_redirect()) | ||||
|                 return; | ||||
|             // Windows on workspaces below pos don't need moving | ||||
|             let index = window.get_workspace().index(); | ||||
|             if (index < pos) | ||||
|                 return; | ||||
|             window.change_workspace_by_index(index + 1, true); | ||||
|         }); | ||||
|  | ||||
|         // If the new workspace was inserted before the active workspace, | ||||
|         // activate the workspace to which its windows went | ||||
|         let activeIndex = global.screen.get_active_workspace_index(); | ||||
|         if (activeIndex >= pos) { | ||||
|             let newWs = global.screen.get_workspace_by_index(activeIndex + 1); | ||||
|             this._blockAnimations = true; | ||||
|             newWs.activate(global.get_current_time()); | ||||
|             this._blockAnimations = false; | ||||
|         } | ||||
|     }, | ||||
|  | ||||
|  | ||||
|     keepWorkspaceAlive: function(workspace, duration) { | ||||
|         if (!this._workspaceTracker) | ||||
|             return; | ||||
| @@ -947,7 +873,7 @@ const WindowManager = new Lang.Class({ | ||||
|  | ||||
|     removeKeybinding: function(name) { | ||||
|         if (global.display.remove_keybinding(name)) | ||||
|             this.allowKeybinding(name, Shell.ActionMode.NONE); | ||||
|             this.allowKeybinding(name, Shell.KeyBindingMode.NONE); | ||||
|     }, | ||||
|  | ||||
|     allowKeybinding: function(name, modes) { | ||||
| @@ -955,7 +881,7 @@ const WindowManager = new Lang.Class({ | ||||
|     }, | ||||
|  | ||||
|     _shouldAnimate: function() { | ||||
|         return !(Main.overview.visible || this._blockAnimations); | ||||
|         return !Main.overview.visible; | ||||
|     }, | ||||
|  | ||||
|     _shouldAnimateActor: function(actor, types) { | ||||
| @@ -1146,8 +1072,10 @@ const WindowManager = new Lang.Class({ | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         if (actor.meta_window.is_attached_dialog()) | ||||
|         if (actor.meta_window.is_attached_dialog()) { | ||||
|             /* Scale the window from the center of the parent */ | ||||
|             this._checkDimming(actor.get_meta_window().get_transient_for()); | ||||
|         } | ||||
|  | ||||
|         switch (actor._windowType) { | ||||
|         case Meta.WindowType.NORMAL: | ||||
| @@ -1302,36 +1230,18 @@ const WindowManager = new Lang.Class({ | ||||
|     }, | ||||
|  | ||||
|     _filterKeybinding: function(shellwm, binding) { | ||||
|         if (Main.actionMode == Shell.ActionMode.NONE) | ||||
|         if (Main.keybindingMode == Shell.KeyBindingMode.NONE) | ||||
|             return true; | ||||
|  | ||||
|         // There's little sense in implementing a keybinding in mutter and | ||||
|         // not having it work in NORMAL mode; handle this case generically | ||||
|         // so we don't have to explicitly allow all builtin keybindings in | ||||
|         // NORMAL mode. | ||||
|         if (Main.actionMode == Shell.ActionMode.NORMAL && | ||||
|         if (Main.keybindingMode == Shell.KeyBindingMode.NORMAL && | ||||
|             binding.is_builtin()) | ||||
|             return false; | ||||
|  | ||||
|         return !(this._allowedKeybindings[binding.get_name()] & Main.actionMode); | ||||
|     }, | ||||
|  | ||||
|     _syncStacking: function() { | ||||
|         if (this._switchData == null) | ||||
|             return; | ||||
|  | ||||
|         // Update stacking of windows in inGroup (aka the workspace we are | ||||
|         // switching to). Windows in outGroup are about to be hidden anyway, | ||||
|         // so we just ignore them here. | ||||
|         let windows = global.get_window_actors(); | ||||
|         let sibling = null; | ||||
|         for (let i = 0; i < windows.length; i++) { | ||||
|             if (windows[i].get_parent() != this._switchData.inGroup) | ||||
|                 continue; | ||||
|  | ||||
|             this._switchData.inGroup.set_child_above_sibling(windows[i], sibling); | ||||
|             sibling = windows[i]; | ||||
|         } | ||||
|         return !(this._allowedKeybindings[binding.get_name()] & Main.keybindingMode); | ||||
|     }, | ||||
|  | ||||
|     _switchWorkspace : function(shellwm, from, to, direction) { | ||||
| @@ -1525,11 +1435,6 @@ const WindowManager = new Lang.Class({ | ||||
|             direction = Meta.MotionDirection.DOWN; | ||||
|             newWs = screen.get_workspace_by_index(screen.n_workspaces - 1); | ||||
|         } else if (isNaN(target)) { | ||||
|             // Prepend a new workspace dynamically | ||||
|             if (screen.get_active_workspace_index() == 0 && | ||||
|                 action == 'move' && target == 'up') | ||||
|                 this.insertWorkspace(0); | ||||
|  | ||||
|             direction = Meta.MotionDirection[target.toUpperCase()]; | ||||
|             newWs = screen.get_active_workspace().get_neighbor(direction); | ||||
|         } else if (target > 0) { | ||||
| @@ -1594,18 +1499,4 @@ const WindowManager = new Lang.Class({ | ||||
|         let dialog = new DisplayChangeDialog(this._shellwm); | ||||
|         dialog.open(); | ||||
|     }, | ||||
|  | ||||
|     _showResizePopup: function(display, show, rect, displayW, displayH) { | ||||
|         if (show) { | ||||
|             if (!this._resizePopup) | ||||
|                 this._resizePopup = new ResizePopup(); | ||||
|  | ||||
|             this._resizePopup.set(rect, displayW, displayH); | ||||
|         } else { | ||||
|             if (this._resizePopup) { | ||||
|                 this._resizePopup.destroy(); | ||||
|                 this._resizePopup = null; | ||||
|             } | ||||
|         } | ||||
|     }, | ||||
| }); | ||||
|   | ||||
| @@ -75,7 +75,7 @@ const WindowMenu = new Lang.Class({ | ||||
|         })); | ||||
|         if (window.is_above()) | ||||
|             item.setOrnament(PopupMenu.Ornament.DOT); | ||||
|         if (window.get_maximized() == Meta.MaximizeFlags.BOTH || | ||||
|         if (window.get_maximized() || | ||||
|             type == Meta.WindowType.DOCK || | ||||
|             type == Meta.WindowType.DESKTOP || | ||||
|             type == Meta.WindowType.SPLASHSCREEN) | ||||
|   | ||||
							
								
								
									
										130
									
								
								js/ui/wobbly.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										130
									
								
								js/ui/wobbly.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,130 @@ | ||||
| // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- | ||||
|  | ||||
| const Clutter = imports.gi.Clutter; | ||||
| const Lang = imports.lang; | ||||
| const Meta = imports.gi.Meta; | ||||
| const Shell = imports.gi.Shell; | ||||
|  | ||||
| function clampAbs(v, cap) { | ||||
|     if (v > cap) | ||||
|         v = cap; | ||||
|     if (v < -cap) | ||||
|         v = -cap; | ||||
|     return v; | ||||
| } | ||||
|  | ||||
| const ActorWobbler = new Lang.Class({ | ||||
|     Name: 'ActorWobbler', | ||||
|  | ||||
|     _init: function(actor) { | ||||
|         this._actor = actor; | ||||
|         this._effect = new Shell.WobblyEffect(); | ||||
|         this._actor.add_effect(this._effect); | ||||
|         this._actor._wobbler = this; | ||||
|  | ||||
|         this._currentBend = 0; | ||||
|         this._currentHeightOffset = 0; | ||||
|         this._running = false; | ||||
|  | ||||
|         this._allocationChangedId = this._actor.connect('allocation-changed', Lang.bind(this, this._allocationChanged)); | ||||
|  | ||||
|         this._timeline = new Clutter.Timeline({ duration: 100, repeat_count: -1 }); | ||||
|         this._timeline.connect('new-frame', Lang.bind(this, this._newFrame)); | ||||
|         this._timeline.start(); | ||||
|     }, | ||||
|  | ||||
|     start: function() { | ||||
|         this._running = true; | ||||
|     }, | ||||
|  | ||||
|     stop: function() { | ||||
|         this._running = false; | ||||
|     }, | ||||
|  | ||||
|     _destroy: function() { | ||||
|         this._timeline.run_dispose(); | ||||
|         this._timeline = null; | ||||
|  | ||||
|         this._actor.disconnect(this._allocationChangedId); | ||||
|         this._actor.scale_y = 1.0; | ||||
|         this._actor.remove_effect(this._effect); | ||||
|         this._actor._wobbler = null; | ||||
|     }, | ||||
|  | ||||
|     _newFrame: function() { | ||||
|         this._step(); | ||||
|     }, | ||||
|  | ||||
|     _step: function() { | ||||
|         const DAMPEN = 0.8; | ||||
|         this._currentBend *= DAMPEN; | ||||
|         if (Math.abs(this._currentBend) < 1) | ||||
|             this._currentBend = 0; | ||||
|         this._currentHeightOffset *= DAMPEN; | ||||
|         if (Math.abs(this._currentHeightOffset) < 1) | ||||
|             this._currentHeightOffset = 0; | ||||
|  | ||||
|         // Cap the bend to a 100px shift. | ||||
|         const BEND_CAP = 50; | ||||
|         this._currentBend = clampAbs(this._currentBend, BEND_CAP); | ||||
|         this._effect.set_bend_x(this._currentBend); | ||||
|  | ||||
|         // Cap the height change to 25px in either direction. | ||||
|         const HEIGHT_OFFSET_CAP = 25; | ||||
|         this._currentHeightOffset = clampAbs(this._currentHeightOffset, HEIGHT_OFFSET_CAP); | ||||
|         let [minHeight, natHeight] = this._actor.get_preferred_height(-1); | ||||
|         let scale = (natHeight + this._currentHeightOffset) / natHeight; | ||||
|         this._actor.scale_y = scale; | ||||
|  | ||||
|         if (!this._running && this._currentBend == 0 && this._currentHeightOffset == 0) | ||||
|             this._destroy(); | ||||
|     }, | ||||
|  | ||||
|     _allocationChanged: function(actor, box, flags) { | ||||
|         if (!this._running) | ||||
|             return; | ||||
|  | ||||
|         if (this._oldX) { | ||||
|             let deltaX = box.x1 - this._oldX; | ||||
|             // Every 2px the user moves the window, we bend it by 1px. | ||||
|             this._currentBend -= deltaX / 2; | ||||
|         } | ||||
|  | ||||
|         if (this._oldY) { | ||||
|             let deltaY = box.y1 - this._oldY; | ||||
|             // Every 2px the user moves the window, we scale it by 1px. | ||||
|             this._currentHeightOffset -= deltaY / 2; | ||||
|         } | ||||
|  | ||||
|         this._oldX = box.x1; | ||||
|         this._oldY = box.y1; | ||||
|     }, | ||||
| }); | ||||
|  | ||||
| const WobblyWindowManager = new Lang.Class({ | ||||
|     Name: 'WobblyWindowManager', | ||||
|  | ||||
|     _init: function() { | ||||
|         global.display.connect('grab-op-begin', Lang.bind(this, this._grabOpBegin)); | ||||
|         global.display.connect('grab-op-end', Lang.bind(this, this._grabOpEnd)); | ||||
|     }, | ||||
|  | ||||
|     _grabOpBegin: function(display, screen, window, op) { | ||||
|         if (op != Meta.GrabOp.MOVING) | ||||
|             return; | ||||
|  | ||||
|         let actor = window.get_compositor_private(); | ||||
|         if (!actor._wobbler) | ||||
|             new ActorWobbler(actor); | ||||
|         actor._wobbler.start(); | ||||
|     }, | ||||
|  | ||||
|     _grabOpEnd: function(display, screen, window, op) { | ||||
|         if (!window) | ||||
|             return; | ||||
|  | ||||
|         let actor = window.get_compositor_private(); | ||||
|         if (actor._wobbler) | ||||
|             actor._wobbler.stop(); | ||||
|     }, | ||||
| }); | ||||
| @@ -254,7 +254,7 @@ const WindowClone = new Lang.Class({ | ||||
|     }, | ||||
|  | ||||
|     _computeBoundingBox: function() { | ||||
|         let rect = this.metaWindow.get_frame_rect(); | ||||
|         let rect = this.metaWindow.get_outer_rect(); | ||||
|  | ||||
|         this.actor.get_children().forEach(function (child) { | ||||
|             let realWindow; | ||||
| @@ -264,7 +264,7 @@ const WindowClone = new Lang.Class({ | ||||
|                 realWindow = child.source; | ||||
|  | ||||
|             let metaWindow = realWindow.meta_window; | ||||
|             rect = rect.union(metaWindow.get_frame_rect()); | ||||
|             rect = rect.union(metaWindow.get_outer_rect()); | ||||
|         }, this); | ||||
|  | ||||
|         // Convert from a MetaRectangle to a native JS object | ||||
| @@ -1209,18 +1209,14 @@ const Workspace = new Lang.Class({ | ||||
|         return this._windows.length == 0; | ||||
|     }, | ||||
|  | ||||
|     setReservedSlot: function(metaWindow) { | ||||
|         if (this._reservedSlotWindow == metaWindow) | ||||
|     setReservedSlot: function(clone) { | ||||
|         if (this._reservedSlot == clone) | ||||
|             return; | ||||
|  | ||||
|         if (!metaWindow || this.containsMetaWindow(metaWindow)) { | ||||
|             this._reservedSlotWindow = null; | ||||
|             this._reservedSlot = null; | ||||
|         } else { | ||||
|             this._reservedSlotWindow = metaWindow; | ||||
|             this._reservedSlot = this._windows[this._lookupIndex(metaWindow)]; | ||||
|         } | ||||
|         if (clone && this.containsMetaWindow(clone.metaWindow)) | ||||
|             clone = null; | ||||
|  | ||||
|         this._reservedSlot = clone; | ||||
|         this._recalculateWindowPositions(WindowPositionFlags.ANIMATE); | ||||
|     }, | ||||
|  | ||||
| @@ -1818,16 +1814,16 @@ const Workspace = new Lang.Class({ | ||||
|                       Lang.bind(this, this._onCloneSelected)); | ||||
|         clone.connect('drag-begin', | ||||
|                       Lang.bind(this, function() { | ||||
|                           Main.overview.beginWindowDrag(clone.metaWindow); | ||||
|                           Main.overview.beginWindowDrag(clone); | ||||
|                           overlay.hide(); | ||||
|                       })); | ||||
|         clone.connect('drag-cancelled', | ||||
|                       Lang.bind(this, function() { | ||||
|                           Main.overview.cancelledWindowDrag(clone.metaWindow); | ||||
|                           Main.overview.cancelledWindowDrag(clone); | ||||
|                       })); | ||||
|         clone.connect('drag-end', | ||||
|                       Lang.bind(this, function() { | ||||
|                           Main.overview.endWindowDrag(clone.metaWindow); | ||||
|                           Main.overview.endWindowDrag(clone); | ||||
|                           overlay.show(); | ||||
|                       })); | ||||
|         clone.connect('size-changed', | ||||
|   | ||||
| @@ -161,14 +161,14 @@ const WindowClone = new Lang.Class({ | ||||
|  | ||||
|     _updateDialogPosition: function(realDialog, cloneDialog) { | ||||
|         let metaDialog = realDialog.meta_window; | ||||
|         let dialogRect = metaDialog.get_frame_rect(); | ||||
|         let rect = this.metaWindow.get_frame_rect(); | ||||
|         let dialogRect = metaDialog.get_outer_rect(); | ||||
|         let rect = this.metaWindow.get_outer_rect(); | ||||
|  | ||||
|         cloneDialog.set_position(dialogRect.x - rect.x, dialogRect.y - rect.y); | ||||
|     }, | ||||
|  | ||||
|     _onPositionChanged: function() { | ||||
|         let rect = this.metaWindow.get_frame_rect(); | ||||
|         let rect = this.metaWindow.get_outer_rect(); | ||||
|         this.actor.set_position(this.realWindow.x, this.realWindow.y); | ||||
|     }, | ||||
|  | ||||
| @@ -518,15 +518,15 @@ const WorkspaceThumbnail = new Lang.Class({ | ||||
|                       })); | ||||
|         clone.connect('drag-begin', | ||||
|                       Lang.bind(this, function() { | ||||
|                           Main.overview.beginWindowDrag(clone.metaWindow); | ||||
|                           Main.overview.beginWindowDrag(clone); | ||||
|                       })); | ||||
|         clone.connect('drag-cancelled', | ||||
|                       Lang.bind(this, function() { | ||||
|                           Main.overview.cancelledWindowDrag(clone.metaWindow); | ||||
|                           Main.overview.cancelledWindowDrag(clone); | ||||
|                       })); | ||||
|         clone.connect('drag-end', | ||||
|                       Lang.bind(this, function() { | ||||
|                           Main.overview.endWindowDrag(clone.metaWindow); | ||||
|                           Main.overview.endWindowDrag(clone); | ||||
|                       })); | ||||
|         this._contents.add_actor(clone.actor); | ||||
|  | ||||
| @@ -795,13 +795,35 @@ const ThumbnailsBox = new Lang.Class({ | ||||
|  | ||||
|             let isWindow = !!source.realWindow; | ||||
|  | ||||
|             // To create a new workspace, we first slide all the windows on workspaces | ||||
|             // below us to the next workspace, leaving a blank workspace for us to recycle. | ||||
|             let newWorkspaceIndex; | ||||
|             [newWorkspaceIndex, this._dropPlaceholderPos] = [this._dropPlaceholderPos, -1]; | ||||
|  | ||||
|             // Nab all the windows below us. | ||||
|             let windows = global.get_window_actors().filter(function(winActor) { | ||||
|                 // If the window is attached to an ancestor, we don't need/want to move it | ||||
|                 let window = winActor.meta_window; | ||||
|  | ||||
|                 if (window.get_transient_for() != null) | ||||
|                     return false; | ||||
|  | ||||
|                 if (isWindow) | ||||
|                     return window.get_workspace().index() >= newWorkspaceIndex && winActor != source; | ||||
|                 else | ||||
|                     return window.get_workspace().index() >= newWorkspaceIndex; | ||||
|             }); | ||||
|  | ||||
|             this._spliceIndex = newWorkspaceIndex; | ||||
|  | ||||
|             Main.wm.insertWorkspace(newWorkspaceIndex); | ||||
|             // ... move them down one. | ||||
|             windows.forEach(function(winActor) { | ||||
|                 let window = winActor.meta_window; | ||||
|                 window.change_workspace_by_index(window.get_workspace().index() + 1, true); | ||||
|             }); | ||||
|  | ||||
|             if (isWindow) { | ||||
|                 // ... and bam, a workspace, good as new. | ||||
|                 // Move the window to our monitor first if necessary. | ||||
|                 let thumbMonitor = this._thumbnails[newWorkspaceIndex].monitorIndex; | ||||
|                 if (source.metaWindow.get_monitor() != thumbMonitor) | ||||
|   | ||||
| @@ -18,6 +18,8 @@ const Workspace = imports.ui.workspace; | ||||
| const WorkspaceThumbnail = imports.ui.workspaceThumbnail; | ||||
|  | ||||
| const WORKSPACE_SWITCH_TIME = 0.25; | ||||
| // Note that mutter has a compile-time limit of 36 | ||||
| const MAX_WORKSPACES = 16; | ||||
|  | ||||
| const AnimationType = { | ||||
|     ZOOM: 0, | ||||
| @@ -61,9 +63,9 @@ const WorkspacesViewBase = new Lang.Class({ | ||||
|         } | ||||
|     }, | ||||
|  | ||||
|     _dragBegin: function(overview, window) { | ||||
|     _dragBegin: function(overview, clone) { | ||||
|         this._inDrag = true; | ||||
|         this._setReservedSlot(window); | ||||
|         this._setReservedSlot(clone); | ||||
|     }, | ||||
|  | ||||
|     _dragEnd: function() { | ||||
| @@ -125,9 +127,9 @@ const WorkspacesView = new Lang.Class({ | ||||
|                                           Lang.bind(this, this._activeWorkspaceChanged)); | ||||
|     }, | ||||
|  | ||||
|     _setReservedSlot: function(window) { | ||||
|     _setReservedSlot: function(clone) { | ||||
|         for (let i = 0; i < this._workspaces.length; i++) | ||||
|             this._workspaces[i].setReservedSlot(window); | ||||
|             this._workspaces[i].setReservedSlot(clone); | ||||
|     }, | ||||
|  | ||||
|     _syncFullGeometry: function() { | ||||
| @@ -364,8 +366,8 @@ const ExtraWorkspaceView = new Lang.Class({ | ||||
|         this.actor.add_actor(this._workspace.actor); | ||||
|     }, | ||||
|  | ||||
|     _setReservedSlot: function(window) { | ||||
|         this._workspace.setReservedSlot(window); | ||||
|     _setReservedSlot: function(clone) { | ||||
|         this._workspace.setReservedSlot(clone); | ||||
|     }, | ||||
|  | ||||
|     _syncFullGeometry: function() { | ||||
|   | ||||
| @@ -45,7 +45,6 @@ mk | ||||
| mr | ||||
| ms | ||||
| nb | ||||
| ne | ||||
| nl | ||||
| nn | ||||
| or | ||||
| @@ -68,7 +67,6 @@ th | ||||
| tr | ||||
| ug  | ||||
| uk | ||||
| uz@cyrillic | ||||
| vi | ||||
| zh_CN | ||||
| zh_HK | ||||
|   | ||||
							
								
								
									
										332
									
								
								po/as.po
									
									
									
									
									
								
							
							
						
						
									
										332
									
								
								po/as.po
									
									
									
									
									
								
							| @@ -9,8 +9,8 @@ msgstr "" | ||||
| "Project-Id-Version: gnome-shell 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: 2014-09-15 07:36+0000\n" | ||||
| "PO-Revision-Date: 2014-09-15 14:59+0530\n" | ||||
| "POT-Creation-Date: 2014-08-13 07:33+0000\n" | ||||
| "PO-Revision-Date: 2014-08-13 17:32+0530\n" | ||||
| "Last-Translator: Nilamdyuti Goswami <ngoswami@redhat.com>\n" | ||||
| "Language-Team: Assamese <kde-i18n-doc@kde.org>\n" | ||||
| "Language: as_IN\n" | ||||
| @@ -110,9 +110,8 @@ msgid "" | ||||
| "load all extensions regardless of the versions they claim to support." | ||||
| msgstr "" | ||||
| "GNOME শ্বেলে কেৱল বৰ্তমান চলি থকা সংস্কৰণক সমৰ্থন কৰা সম্প্ৰসাৰনসমূহ ল'ড " | ||||
| "কৰিব। এই " | ||||
| "বিকল্প সামৰ্থবান কৰিলে এই নিৰীক্ষণ অসামৰ্থবান কৰা হব আৰু সিহতে সমৰ্থন কৰা " | ||||
| "সংস্কৰণসমূহৰ নিৰপেক্ষে সকলো সম্প্ৰসাৰন ল'ড কৰিব।" | ||||
| "কৰিব। এই বিকল্প সামৰ্থবান কৰিলে এই নিৰীক্ষণ অসামৰ্থবান কৰা হব আৰু সিহতে " | ||||
| "সমৰ্থন কৰা সংস্কৰণসমূহৰ নিৰপেক্ষে সকলো সম্প্ৰসাৰন ল'ড কৰিব।" | ||||
|  | ||||
| #: ../data/org.gnome.shell.gschema.xml.in.in.h:7 | ||||
| msgid "List of desktop file IDs for favorite applications" | ||||
| @@ -158,8 +157,8 @@ msgstr "" | ||||
| msgid "" | ||||
| "Whether to remember password for mounting encrypted or remote filesystems" | ||||
| msgstr "" | ||||
| "ইনক্ৰিপ্টেড অথবা দূৰৱৰ্তী ফাইলচিস্টেমসমূহ মাউণ্ট কৰাৰ বাবে পাছৱৰ্ড মনত ৰখা হব " | ||||
| "নে" | ||||
| "ইনক্ৰিপ্টেড অথবা দূৰৱৰ্তী ফাইলচিস্টেমসমূহ মাউন্ট কৰাৰ বাবে পাছৱৰ্ড মনত ৰখা " | ||||
| "হব নে" | ||||
|  | ||||
| #: ../data/org.gnome.shell.gschema.xml.in.in.h:16 | ||||
| msgid "" | ||||
| @@ -170,11 +169,10 @@ msgid "" | ||||
| msgstr "" | ||||
| "শ্বেলে এটা পাছৱৰ্ড অনুৰোধ কৰিব যেতিয়া এটা ইনক্ৰিপ্টেড ডিভাইচ অথবা এটা " | ||||
| "দূৰৱৰ্তী " | ||||
| "ফাইলচিস্টেম মাউণ্ট কৰা হয়। যদি পাছৱৰ্ডক ভৱিষ্যত ব্যৱহাৰৰ বাবে সংৰক্ষণ কৰিব " | ||||
| "ফাইলচিস্টেম মাউন্ট কৰা হয়। যদি পাছৱৰ্ডক ভৱিষ্যত ব্যৱহাৰৰ বাবে সংৰক্ষণ কৰিব " | ||||
| "পাৰি " | ||||
| "তেন্তে এটা 'পাছৱৰ্ড মনত ৰাখক' চেকবাকচ উপস্থিত থাকিব। এই কি'য়ে চেকবাকচৰ " | ||||
| "অবিকল্পিত " | ||||
| "অৱস্থা সংহতি কৰে।" | ||||
| "অবিকল্পিত অৱস্থা সংহতি কৰে।" | ||||
|  | ||||
| #: ../data/org.gnome.shell.gschema.xml.in.in.h:17 | ||||
| msgid "Show the week date in the calendar" | ||||
| @@ -250,8 +248,7 @@ msgid "" | ||||
| "shown in the switcher. Otherwise, all applications are included." | ||||
| msgstr "" | ||||
| "যদি সত্য, কেৱল বৰ্তমান কাৰ্য্যস্থানক উইন্ডো থকা এপ্লিকেচনসমূক চুইচাৰত দেখুৱা " | ||||
| "হব। নহলে, " | ||||
| "সকলো এপ্লিকেচন অন্তৰ্ভুক্ত কৰা হয়।" | ||||
| "হব। নহলে, সকলো এপ্লিকেচন অন্তৰ্ভুক্ত কৰা হয়।" | ||||
|  | ||||
| #: ../data/org.gnome.shell.gschema.xml.in.in.h:34 | ||||
| msgid "The application icon mode." | ||||
| @@ -274,8 +271,7 @@ msgid "" | ||||
| "Otherwise, all windows are included." | ||||
| msgstr "" | ||||
| "যদি সত্য, কেৱল বৰ্তমান কাৰ্য্যস্থানৰ পৰা উইন্ডোসমূহক চুইচাৰত দেখুৱা হব। নহলে, " | ||||
| "সকলো " | ||||
| "উইন্ডো অন্তৰ্ভুক্ত কৰা হব।" | ||||
| "সকলো উইন্ডো অন্তৰ্ভুক্ত কৰা হব।" | ||||
|  | ||||
| #: ../data/org.gnome.shell.gschema.xml.in.in.h:37 | ||||
| msgid "Attach modal dialog to the parent window" | ||||
| @@ -307,17 +303,18 @@ msgstr "" | ||||
| msgid "Captive Portal" | ||||
| msgstr "কেপটিভ পৰ্টেল" | ||||
|  | ||||
| #: ../js/extensionPrefs/main.js:123 | ||||
| #: ../js/extensionPrefs/main.js:127 | ||||
| #, javascript-format | ||||
| msgid "There was an error loading the preferences dialog for %s:" | ||||
| msgstr "%s ৰ বাবে পছন্দসমূহ ডাইলগ ল'ড কৰোতে এটা ত্ৰুটি হৈছিল:" | ||||
|  | ||||
| #: ../js/extensionPrefs/main.js:155 | ||||
| #: ../js/extensionPrefs/main.js:159 | ||||
| #| msgid "Configure GNOME Shell Extensions" | ||||
| msgid "GNOME Shell Extensions" | ||||
| msgstr "GNOME শ্বেল সম্প্ৰসাৰনসমূহ" | ||||
|  | ||||
| #: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:143 | ||||
| #: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:452 | ||||
| #: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:429 | ||||
| #: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399 | ||||
| #: ../js/ui/status/network.js:915 | ||||
| msgid "Cancel" | ||||
| @@ -380,44 +377,46 @@ msgstr "কমান্ড বিশ্লেষন কৰিব নোৱাৰ | ||||
| msgid "Execution of “%s” failed:" | ||||
| msgstr "“%s” ৰ প্ৰেৰণ ব্যৰ্থ হল:" | ||||
|  | ||||
| #: ../js/portalHelper/main.js:85 | ||||
| #: ../js/portalHelper/main.js:84 | ||||
| #| msgid "Authentication Required" | ||||
| msgid "Web Authentication Redirect" | ||||
| msgstr "ৱেব প্ৰমাণীকৰণৰ পুনৰনিৰ্দেশ" | ||||
|  | ||||
| #: ../js/ui/appDisplay.js:772 | ||||
| #: ../js/ui/appDisplay.js:659 | ||||
| msgid "Frequently used applications will appear here" | ||||
| msgstr "সঘনে ব্যৱহাৰ কৰা এপ্লিকেচনসমূহ ইয়াত উপস্থিত হব" | ||||
|  | ||||
| #: ../js/ui/appDisplay.js:883 | ||||
| #: ../js/ui/appDisplay.js:770 | ||||
| msgid "Frequent" | ||||
| msgstr "সঘন" | ||||
|  | ||||
| #: ../js/ui/appDisplay.js:890 | ||||
| #: ../js/ui/appDisplay.js:777 | ||||
| msgid "All" | ||||
| msgstr "সকলো" | ||||
|  | ||||
| #: ../js/ui/appDisplay.js:1789 | ||||
| #: ../js/ui/appDisplay.js:1649 | ||||
| msgid "New Window" | ||||
| msgstr "নতুন উইন্ডো" | ||||
|  | ||||
| #: ../js/ui/appDisplay.js:1815 ../js/ui/dash.js:285 | ||||
| #: ../js/ui/appDisplay.js:1672 ../js/ui/dash.js:285 | ||||
| msgid "Remove from Favorites" | ||||
| msgstr "পছন্দৰ পৰা আতৰাওক" | ||||
|  | ||||
| #: ../js/ui/appDisplay.js:1821 | ||||
| #: ../js/ui/appDisplay.js:1678 | ||||
| msgid "Add to Favorites" | ||||
| msgstr "পছন্দলে যোগ কৰক" | ||||
|  | ||||
| #: ../js/ui/appDisplay.js:1830 | ||||
| #: ../js/ui/appDisplay.js:1687 | ||||
| #| msgid "Show Text" | ||||
| msgid "Show Details" | ||||
| msgstr "বিৱৰণসমূহ দেখুৱাওক" | ||||
|  | ||||
| #: ../js/ui/appFavorites.js:124 | ||||
| #: ../js/ui/appFavorites.js:122 | ||||
| #, javascript-format | ||||
| msgid "%s has been added to your favorites." | ||||
| msgstr "%s ক আপোনাৰ পছন্দলে যোগ কৰা হৈছে।" | ||||
|  | ||||
| #: ../js/ui/appFavorites.js:158 | ||||
| #: ../js/ui/appFavorites.js:156 | ||||
| #, javascript-format | ||||
| msgid "%s has been removed from your favorites." | ||||
| msgstr "%s ক আপোনাৰ পছন্দৰ পৰা আতৰোৱা হৈছে।" | ||||
| @@ -609,11 +608,11 @@ msgstr "%s ৰ সৈতে খোলক" | ||||
| msgid "Eject" | ||||
| msgstr "উলিৱাওক" | ||||
|  | ||||
| #: ../js/ui/components/keyring.js:94 ../js/ui/components/polkitAgent.js:285 | ||||
| #: ../js/ui/components/keyring.js:93 ../js/ui/components/polkitAgent.js:285 | ||||
| msgid "Password:" | ||||
| msgstr "পাছৱৰ্ড:" | ||||
|  | ||||
| #: ../js/ui/components/keyring.js:120 | ||||
| #: ../js/ui/components/keyring.js:113 | ||||
| msgid "Type again:" | ||||
| msgstr "আকৌ টাইপ কৰক:" | ||||
|  | ||||
| @@ -656,7 +655,8 @@ msgid "" | ||||
| "Passwords or encryption keys are required to access the wireless network " | ||||
| "“%s”." | ||||
| msgstr "" | ||||
| "বেতাঁৰ নেটৱৰ্ক “%s” অভিগম কৰিবলে পাছৱৰ্ডসমূহ অথবা ইনক্ৰিপষণ কি'সমূহৰ প্ৰয়োজন।" | ||||
| "বেতাঁৰ নেটৱৰ্ক “%s” অভিগম কৰিবলে পাছৱৰ্ডসমূহ অথবা ইনক্ৰিপষণ কি'সমূহৰ " | ||||
| "প্ৰয়োজন।" | ||||
|  | ||||
| #: ../js/ui/components/networkAgent.js:323 | ||||
| msgid "Wired 802.1X authentication" | ||||
| @@ -736,77 +736,89 @@ msgid "Mute" | ||||
| msgstr "মোন কৰক" | ||||
|  | ||||
| #. Translators: Time in 24h format */ | ||||
| #: ../js/ui/components/telepathyClient.js:953 | ||||
| #: ../js/ui/components/telepathyClient.js:957 | ||||
| #| msgctxt "event list time" | ||||
| #| msgid "%H∶%M" | ||||
| 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" */ | ||||
| #: ../js/ui/components/telepathyClient.js:960 | ||||
| #: ../js/ui/components/telepathyClient.js:964 | ||||
| #| msgid "<b>Yesterday</b>, <b>%H:%M</b>" | ||||
| 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" */ | ||||
| #: ../js/ui/components/telepathyClient.js:967 | ||||
| #: ../js/ui/components/telepathyClient.js:971 | ||||
| #| msgctxt "event list time" | ||||
| #| msgid "%H∶%M" | ||||
| 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" */ | ||||
| #: ../js/ui/components/telepathyClient.js:974 | ||||
| #: ../js/ui/components/telepathyClient.js:978 | ||||
| #| msgctxt "event list time" | ||||
| #| msgid "%H∶%M" | ||||
| 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" */ | ||||
| #: ../js/ui/components/telepathyClient.js:980 | ||||
| #: ../js/ui/components/telepathyClient.js:984 | ||||
| msgid "%B %d %Y, %H∶%M" | ||||
| msgstr "%B %d %Y, %H∶%M" | ||||
|  | ||||
| #. Translators: Time in 24h format */ | ||||
| #: ../js/ui/components/telepathyClient.js:986 | ||||
| #: ../js/ui/components/telepathyClient.js:990 | ||||
| #| msgctxt "event list time" | ||||
| #| msgid "%l∶%M %p" | ||||
| 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" */ | ||||
| #: ../js/ui/components/telepathyClient.js:993 | ||||
| #: ../js/ui/components/telepathyClient.js:997 | ||||
| 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" */ | ||||
| #: ../js/ui/components/telepathyClient.js:1000 | ||||
| #: ../js/ui/components/telepathyClient.js:1004 | ||||
| #| msgid "%a %l:%M %p" | ||||
| 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" */ | ||||
| #: ../js/ui/components/telepathyClient.js:1007 | ||||
| #: ../js/ui/components/telepathyClient.js:1011 | ||||
| #| msgid "%a %b %e, %l:%M %p" | ||||
| 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"*/ | ||||
| #: ../js/ui/components/telepathyClient.js:1013 | ||||
| #: ../js/ui/components/telepathyClient.js:1017 | ||||
| #| msgid "%a %b %e, %l:%M %p" | ||||
| msgid "%B %d %Y, %l∶%M %p" | ||||
| msgstr "%B %d %Y, %l∶%M %p" | ||||
|  | ||||
| #. Translators: this is the other person changing their old IM name to their new | ||||
| #. IM name. */ | ||||
| #: ../js/ui/components/telepathyClient.js:1045 | ||||
| #: ../js/ui/components/telepathyClient.js:1049 | ||||
| #, javascript-format | ||||
| msgid "%s is now known as %s" | ||||
| msgstr "%s এতিয়া %s হিচাপে জনাজাত" | ||||
|  | ||||
| #. translators: argument is a room name like | ||||
| #. * room@jabber.org for example. */ | ||||
| #: ../js/ui/components/telepathyClient.js:1149 | ||||
| #: ../js/ui/components/telepathyClient.js:1153 | ||||
| #, javascript-format | ||||
| msgid "Invitation to %s" | ||||
| msgstr "%s লে নিমন্ত্ৰণ" | ||||
| @@ -814,38 +826,38 @@ msgstr "%s লে নিমন্ত্ৰণ" | ||||
| #. translators: first argument is the name of a contact and the second | ||||
| #. * one the name of a room. "Alice is inviting you to join room@jabber.org | ||||
| #. * for example. */ | ||||
| #: ../js/ui/components/telepathyClient.js:1157 | ||||
| #: ../js/ui/components/telepathyClient.js:1161 | ||||
| #, javascript-format | ||||
| msgid "%s is inviting you to join %s" | ||||
| msgstr "%s এ আপোনাক %s ত অংশগ্ৰহণ কৰিবলে আমন্ত্ৰণ জনাইছে" | ||||
|  | ||||
| #: ../js/ui/components/telepathyClient.js:1159 | ||||
| #: ../js/ui/components/telepathyClient.js:1194 | ||||
| #: ../js/ui/components/telepathyClient.js:1228 | ||||
| #: ../js/ui/components/telepathyClient.js:1286 | ||||
| #: ../js/ui/components/telepathyClient.js:1163 | ||||
| #: ../js/ui/components/telepathyClient.js:1198 | ||||
| #: ../js/ui/components/telepathyClient.js:1232 | ||||
| #: ../js/ui/components/telepathyClient.js:1290 | ||||
| msgid "Decline" | ||||
| msgstr "নাকচ কৰক" | ||||
|  | ||||
| #: ../js/ui/components/telepathyClient.js:1165 | ||||
| #: ../js/ui/components/telepathyClient.js:1234 | ||||
| #: ../js/ui/components/telepathyClient.js:1291 | ||||
| #: ../js/ui/components/telepathyClient.js:1169 | ||||
| #: ../js/ui/components/telepathyClient.js:1238 | ||||
| #: ../js/ui/components/telepathyClient.js:1295 | ||||
| msgid "Accept" | ||||
| msgstr "গ্ৰহন কৰক" | ||||
|  | ||||
| #. translators: argument is a contact name like Alice for example. */ | ||||
| #: ../js/ui/components/telepathyClient.js:1184 | ||||
| #: ../js/ui/components/telepathyClient.js:1188 | ||||
| #, javascript-format | ||||
| msgid "Video call from %s" | ||||
| msgstr "%s ৰ পৰা ভিডিঅ' কল" | ||||
|  | ||||
| #. translators: argument is a contact name like Alice for example. */ | ||||
| #: ../js/ui/components/telepathyClient.js:1187 | ||||
| #: ../js/ui/components/telepathyClient.js:1191 | ||||
| #, javascript-format | ||||
| msgid "Call from %s" | ||||
| msgstr "%s ৰ পৰা কল" | ||||
|  | ||||
| #. translators: this is a button label (verb), not a noun */ | ||||
| #: ../js/ui/components/telepathyClient.js:1201 | ||||
| #: ../js/ui/components/telepathyClient.js:1205 | ||||
| msgid "Answer" | ||||
| msgstr "উত্তৰ দিয়ক" | ||||
|  | ||||
| @@ -854,110 +866,110 @@ msgstr "উত্তৰ দিয়ক" | ||||
| #. * file name. The string will be something | ||||
| #. * like: "Alice is sending you test.ogg" | ||||
| #. */ | ||||
| #: ../js/ui/components/telepathyClient.js:1222 | ||||
| #: ../js/ui/components/telepathyClient.js:1226 | ||||
| #, javascript-format | ||||
| msgid "%s is sending you %s" | ||||
| msgstr "%s এ আপোনাক %s পঠাই আছে" | ||||
|  | ||||
| #. To translators: The parameter is the contact's alias */ | ||||
| #: ../js/ui/components/telepathyClient.js:1251 | ||||
| #: ../js/ui/components/telepathyClient.js:1255 | ||||
| #, javascript-format | ||||
| msgid "%s would like permission to see when you are online" | ||||
| msgstr "আপুনি কেতিয়া অনলাইন আছে চাবলে %s এ অনুমতি বিচাৰিব" | ||||
|  | ||||
| #: ../js/ui/components/telepathyClient.js:1337 | ||||
| #: ../js/ui/components/telepathyClient.js:1341 | ||||
| msgid "Network error" | ||||
| msgstr "নেটৱৰ্ক ত্ৰুটি" | ||||
|  | ||||
| #: ../js/ui/components/telepathyClient.js:1339 | ||||
| #: ../js/ui/components/telepathyClient.js:1343 | ||||
| msgid "Authentication failed" | ||||
| msgstr "প্ৰমাণীকৰণ ব্যৰ্থ" | ||||
|  | ||||
| #: ../js/ui/components/telepathyClient.js:1341 | ||||
| #: ../js/ui/components/telepathyClient.js:1345 | ||||
| msgid "Encryption error" | ||||
| msgstr "ইনক্ৰিপষণ ত্ৰুটি" | ||||
|  | ||||
| #: ../js/ui/components/telepathyClient.js:1343 | ||||
| #: ../js/ui/components/telepathyClient.js:1347 | ||||
| msgid "Certificate not provided" | ||||
| msgstr "প্ৰমাণপত্ৰ প্ৰদান কৰা হোৱা নাই" | ||||
|  | ||||
| #: ../js/ui/components/telepathyClient.js:1345 | ||||
| #: ../js/ui/components/telepathyClient.js:1349 | ||||
| msgid "Certificate untrusted" | ||||
| msgstr "প্ৰমাণপত্ৰক ভৰষা কৰিব নোৱাৰি" | ||||
|  | ||||
| #: ../js/ui/components/telepathyClient.js:1347 | ||||
| #: ../js/ui/components/telepathyClient.js:1351 | ||||
| msgid "Certificate expired" | ||||
| msgstr "প্ৰমাণপত্ৰৰ অৱসান ঘটিছে" | ||||
|  | ||||
| #: ../js/ui/components/telepathyClient.js:1349 | ||||
| #: ../js/ui/components/telepathyClient.js:1353 | ||||
| msgid "Certificate not activated" | ||||
| msgstr "প্ৰমাণপত্ৰ সক্ৰিয় কৰা হোৱা নাই" | ||||
|  | ||||
| #: ../js/ui/components/telepathyClient.js:1351 | ||||
| #: ../js/ui/components/telepathyClient.js:1355 | ||||
| msgid "Certificate hostname mismatch" | ||||
| msgstr "প্ৰমাণপত্ৰ হস্টনাম অমিল" | ||||
|  | ||||
| #: ../js/ui/components/telepathyClient.js:1353 | ||||
| #: ../js/ui/components/telepathyClient.js:1357 | ||||
| msgid "Certificate fingerprint mismatch" | ||||
| msgstr "প্ৰমাণপত্ৰ ফিংগাৰপ্ৰিণ্ট অমিল" | ||||
| msgstr "প্ৰমাণপত্ৰ ফিংগাৰপ্ৰিন্ট অমিল" | ||||
|  | ||||
| #: ../js/ui/components/telepathyClient.js:1355 | ||||
| #: ../js/ui/components/telepathyClient.js:1359 | ||||
| msgid "Certificate self-signed" | ||||
| msgstr "প্ৰমাণপত্ৰ স্ব-স্বাক্ষৰীত" | ||||
|  | ||||
| #: ../js/ui/components/telepathyClient.js:1357 | ||||
| #: ../js/ui/components/telepathyClient.js:1361 | ||||
| msgid "Status is set to offline" | ||||
| msgstr "অৱস্থা অফলাইনলে সংহতি কৰা হৈছে" | ||||
|  | ||||
| #: ../js/ui/components/telepathyClient.js:1359 | ||||
| #: ../js/ui/components/telepathyClient.js:1363 | ||||
| msgid "Encryption is not available" | ||||
| msgstr "ইনক্ৰিপষণ উপলব্ধ নহয়" | ||||
|  | ||||
| #: ../js/ui/components/telepathyClient.js:1361 | ||||
| #: ../js/ui/components/telepathyClient.js:1365 | ||||
| msgid "Certificate is invalid" | ||||
| msgstr "প্ৰমাণপত্ৰ অবৈধ" | ||||
|  | ||||
| #: ../js/ui/components/telepathyClient.js:1363 | ||||
| #: ../js/ui/components/telepathyClient.js:1367 | ||||
| msgid "Connection has been refused" | ||||
| msgstr "সংযোগ নাকচ কৰা হৈছে" | ||||
|  | ||||
| #: ../js/ui/components/telepathyClient.js:1365 | ||||
| #: ../js/ui/components/telepathyClient.js:1369 | ||||
| msgid "Connection can't be established" | ||||
| msgstr "সংযোগ স্থাপন কৰিব নোৱাৰি" | ||||
|  | ||||
| #: ../js/ui/components/telepathyClient.js:1367 | ||||
| #: ../js/ui/components/telepathyClient.js:1371 | ||||
| msgid "Connection has been lost" | ||||
| msgstr "সংযোগ হেৰাইছে" | ||||
|  | ||||
| #: ../js/ui/components/telepathyClient.js:1369 | ||||
| #: ../js/ui/components/telepathyClient.js:1373 | ||||
| msgid "This account is already connected to the server" | ||||
| msgstr "এই একাওণ্ট ইতিমধ্যে চাৰ্ভাৰৰ সৈতে সংযোগিত" | ||||
| msgstr "এই একাওন্ট ইতিমধ্যে চাৰ্ভাৰৰ সৈতে সংযোগিত" | ||||
|  | ||||
| #: ../js/ui/components/telepathyClient.js:1371 | ||||
| #: ../js/ui/components/telepathyClient.js:1375 | ||||
| msgid "" | ||||
| "Connection has been replaced by a new connection using the same resource" | ||||
| msgstr "সংযোগক একে সম্পদ ব্যৱহাৰ কৰি এটা নতুন সংযোগৰে প্ৰতিস্থাপন কৰা হৈছে" | ||||
|  | ||||
| #: ../js/ui/components/telepathyClient.js:1373 | ||||
| #: ../js/ui/components/telepathyClient.js:1377 | ||||
| msgid "The account already exists on the server" | ||||
| msgstr "একাওণ্ট ইতিমধ্যে চাৰ্ভাৰত উপস্থিত" | ||||
| msgstr "একাওন্ট ইতিমধ্যে চাৰ্ভাৰত উপস্থিত" | ||||
|  | ||||
| #: ../js/ui/components/telepathyClient.js:1375 | ||||
| #: ../js/ui/components/telepathyClient.js:1379 | ||||
| msgid "Server is currently too busy to handle the connection" | ||||
| msgstr "চাৰ্ভাৰ সংযোগ ব্যৱস্থাপনা কৰিবলে বৰ্তমানে অতি ব্যস্ত" | ||||
|  | ||||
| #: ../js/ui/components/telepathyClient.js:1377 | ||||
| #: ../js/ui/components/telepathyClient.js:1381 | ||||
| msgid "Certificate has been revoked" | ||||
| msgstr "প্ৰমাণপত্ৰ প্ৰত্যাহাৰ কৰা হৈছে" | ||||
|  | ||||
| #: ../js/ui/components/telepathyClient.js:1379 | ||||
| #: ../js/ui/components/telepathyClient.js:1383 | ||||
| msgid "" | ||||
| "Certificate uses an insecure cipher algorithm or is cryptographically weak" | ||||
| msgstr "" | ||||
| "প্ৰমাণপত্ৰয় এটা অসুৰক্ষিত চিফাৰ এলগৰিথম ব্যৱহাৰ কৰে অথবা ক্ৰিপ্টোগ্ৰাফিয়ভাৱে " | ||||
| "দুৰ্বল" | ||||
|  | ||||
| #: ../js/ui/components/telepathyClient.js:1381 | ||||
| #: ../js/ui/components/telepathyClient.js:1385 | ||||
| msgid "" | ||||
| "The length of the server certificate, or the depth of the server certificate " | ||||
| "chain, exceed the limits imposed by the cryptography library" | ||||
| @@ -966,26 +978,26 @@ msgstr "" | ||||
| "ক্ৰিপ্টোগ্ৰাফী " | ||||
| "লাইব্ৰেৰীয়ে প্ৰণয়ন কৰা সীমাসমূহত অতিক্ৰম কৰে" | ||||
|  | ||||
| #: ../js/ui/components/telepathyClient.js:1383 | ||||
| #: ../js/ui/components/telepathyClient.js:1387 | ||||
| msgid "Internal error" | ||||
| msgstr "অভ্যন্তৰীক ত্ৰুটি" | ||||
|  | ||||
| #. translators: argument is the account name, like | ||||
| #. * name@jabber.org for example. */ | ||||
| #: ../js/ui/components/telepathyClient.js:1393 | ||||
| #: ../js/ui/components/telepathyClient.js:1397 | ||||
| #, javascript-format | ||||
| msgid "Unable to connect to %s" | ||||
| msgstr "%s ৰ সৈতে সংযোগ কৰিবলে অক্ষম" | ||||
|  | ||||
| #: ../js/ui/components/telepathyClient.js:1398 | ||||
| #: ../js/ui/components/telepathyClient.js:1402 | ||||
| msgid "View account" | ||||
| msgstr "একাওণ্ট দৰ্শন কৰক" | ||||
| msgstr "একাওন্ট দৰ্শন কৰক" | ||||
|  | ||||
| #: ../js/ui/components/telepathyClient.js:1435 | ||||
| #: ../js/ui/components/telepathyClient.js:1439 | ||||
| msgid "Unknown reason" | ||||
| msgstr "অজ্ঞাত কাৰণ" | ||||
|  | ||||
| #: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:154 | ||||
| #: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:228 | ||||
| msgid "Windows" | ||||
| msgstr "উইন্ডোসমূহ" | ||||
|  | ||||
| @@ -1016,86 +1028,86 @@ msgstr "তাৰিখ আৰু সময সংহতিসমূহ" | ||||
| msgid "%A %B %e, %Y" | ||||
| msgstr "%A %B %e, %Y" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:64 | ||||
| #: ../js/ui/endSessionDialog.js:66 | ||||
| #, javascript-format | ||||
| msgctxt "title" | ||||
| msgid "Log Out %s" | ||||
| msgstr "%s ক লগ আউট কৰক" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:65 | ||||
| #: ../js/ui/endSessionDialog.js:67 | ||||
| msgctxt "title" | ||||
| msgid "Log Out" | ||||
| msgstr "লগ আউট কৰক" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:67 | ||||
| #: ../js/ui/endSessionDialog.js:69 | ||||
| #, javascript-format | ||||
| msgid "%s will be logged out automatically in %d second." | ||||
| msgid_plural "%s will be logged out automatically in %d seconds." | ||||
| msgstr[0] "%s স্বচালিতভাৱে %d ছেকেণ্ডৰ পিছত লগ আউট হৈ যাব।" | ||||
| msgstr[1] "%s স্বচালিতভাৱে %d ছেকেণ্ডৰ পিছত লগ আউট হৈ যাব।" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:72 | ||||
| #: ../js/ui/endSessionDialog.js:74 | ||||
| #, javascript-format | ||||
| msgid "You will be logged out automatically in %d second." | ||||
| msgid_plural "You will be logged out automatically in %d seconds." | ||||
| msgstr[0] "আপুনি স্বচালিতভাৱে %d ছেকেণ্ড পিছত লগ আউট হৈ যাব।" | ||||
| msgstr[1] "আপুনি স্বচালিতভাৱে %d ছেকেণ্ড পিছত লগ আউট হৈ যাব।" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:78 | ||||
| #: ../js/ui/endSessionDialog.js:80 | ||||
| msgctxt "button" | ||||
| msgid "Log Out" | ||||
| msgstr "লগ আউট কৰক" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:84 | ||||
| #: ../js/ui/endSessionDialog.js:86 | ||||
| msgctxt "title" | ||||
| msgid "Power Off" | ||||
| msgstr "বন্ধ কৰক" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:85 | ||||
| #: ../js/ui/endSessionDialog.js:87 | ||||
| msgctxt "title" | ||||
| msgid "Install Updates & Power Off" | ||||
| msgstr "আপডেইটসমূহ ইনস্টল কৰি চিস্টেম বন্ধ কৰক" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:87 | ||||
| #: ../js/ui/endSessionDialog.js:89 | ||||
| #, javascript-format | ||||
| msgid "The system will power off automatically in %d second." | ||||
| msgid_plural "The system will power off automatically in %d seconds." | ||||
| msgstr[0] "চিস্টেম %d ছেকেণ্ড পিছত স্বচালিতভাৱে বন্ধ কৰক হব। " | ||||
| msgstr[1] "চিস্টেম %d ছেকেণ্ডৰ পিছত স্বচালিতভাৱে বন্ধ হব। " | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:91 | ||||
| #: ../js/ui/endSessionDialog.js:93 | ||||
| msgctxt "checkbox" | ||||
| msgid "Install pending software updates" | ||||
| msgstr "বাকি থকা চফ্টৱেৰ আপডেইটসমূহ ইনস্টল কৰক" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:94 ../js/ui/endSessionDialog.js:111 | ||||
| #: ../js/ui/endSessionDialog.js:96 ../js/ui/endSessionDialog.js:113 | ||||
| msgctxt "button" | ||||
| msgid "Restart" | ||||
| msgstr "পুনৰাম্ভ কৰক" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:96 | ||||
| #: ../js/ui/endSessionDialog.js:98 | ||||
| msgctxt "button" | ||||
| msgid "Power Off" | ||||
| msgstr "বন্ধ কৰক" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:103 | ||||
| #: ../js/ui/endSessionDialog.js:105 | ||||
| msgctxt "title" | ||||
| msgid "Restart" | ||||
| msgstr "পুনৰাম্ভ কৰক" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:105 | ||||
| #: ../js/ui/endSessionDialog.js:107 | ||||
| #, javascript-format | ||||
| msgid "The system will restart automatically in %d second." | ||||
| msgid_plural "The system will restart automatically in %d seconds." | ||||
| msgstr[0] "চিস্টেম %d ছেকেণ্ডত স্বচালিতভাৱে পুনৰাম্ভ হব।" | ||||
| msgstr[1] "চিস্টেম %d ছেকেণ্ডত স্বচালিতভাৱে পুনৰাম্ভ হব।" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:119 | ||||
| #: ../js/ui/endSessionDialog.js:121 | ||||
| msgctxt "title" | ||||
| msgid "Restart & Install Updates" | ||||
| msgstr "পুনাৰম্ভ কৰক আৰু আপডেইটসমূহ ইনস্টল কৰক" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:121 | ||||
| #: ../js/ui/endSessionDialog.js:123 | ||||
| #, javascript-format | ||||
| msgid "The system will automatically restart and install updates in %d second." | ||||
| msgid_plural "" | ||||
| @@ -1105,44 +1117,46 @@ msgstr[0] "" | ||||
| msgstr[1] "" | ||||
| "চিস্টেম %d ছেকেণ্ডত স্বচালিতভাৱে পুনৰাম্ভ হব আৰু আপডেইটসমূহ ইনস্টল কৰিব।" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:127 | ||||
| #: ../js/ui/endSessionDialog.js:129 | ||||
| #| msgctxt "button" | ||||
| #| msgid "Restart & Install" | ||||
| msgctxt "button" | ||||
| msgid "Restart & Install" | ||||
| msgstr "পুনৰাম্ভ কৰক & ইনস্টল কৰক" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:128 | ||||
| #: ../js/ui/endSessionDialog.js:130 | ||||
| msgctxt "button" | ||||
| msgid "Install & Power Off" | ||||
| msgstr "ইনস্টল কৰক & চিস্টেম বন্ধ কৰক" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:129 | ||||
| #: ../js/ui/endSessionDialog.js:131 | ||||
| msgctxt "checkbox" | ||||
| msgid "Power off after updates are installed" | ||||
| msgstr "আপডেইটসমূহ ইনস্টল কৰাৰ পিছত চিস্টেম বন্ধ কৰক" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:338 | ||||
| #: ../js/ui/endSessionDialog.js:315 | ||||
| msgid "Running on battery power: please plug in before installing updates." | ||||
| msgstr "" | ||||
| "বেটাৰি শক্তিত চলি আছে: অনুগ্ৰহ কৰি আপডেইটসমূহ ইনস্টল কৰাৰ আগত চাৰ্জাৰ লগাওক।" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:355 | ||||
| #: ../js/ui/endSessionDialog.js:332 | ||||
| msgid "Some applications are busy or have unsaved work." | ||||
| msgstr "" | ||||
| "কিছুমান এপ্লিকেচন ব্যস্ত হব পাৰে অথবা সিহতৰ কিছুমান অসংৰক্ষিত কাৰ্য্য থাকিব " | ||||
| "পাৰে।" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:362 | ||||
| #: ../js/ui/endSessionDialog.js:339 | ||||
| msgid "Other users are logged in." | ||||
| msgstr "অন্য ব্যৱহাৰকাৰীসকল লগ্ড ইন আছে।" | ||||
|  | ||||
| #. Translators: Remote here refers to a remote session, like a ssh login */ | ||||
| #: ../js/ui/endSessionDialog.js:640 | ||||
| #: ../js/ui/endSessionDialog.js:619 | ||||
| #, javascript-format | ||||
| msgid "%s (remote)" | ||||
| msgstr "%s (দূৰৱৰ্তী)" | ||||
|  | ||||
| #. Translators: Console here refers to a tty like a VT console */ | ||||
| #: ../js/ui/endSessionDialog.js:643 | ||||
| #: ../js/ui/endSessionDialog.js:622 | ||||
| #, javascript-format | ||||
| msgid "%s (console)" | ||||
| msgstr "%s (কনচৌল)" | ||||
| @@ -1156,7 +1170,7 @@ msgstr "ইনস্টল কৰক" | ||||
| msgid "Download and install “%s” from extensions.gnome.org?" | ||||
| msgstr "extensions.gnome.org ৰ পৰা  “%s” ক ডাউনল'ড আৰু ইনস্টল কৰিব নে?" | ||||
|  | ||||
| #: ../js/ui/keyboard.js:692 ../js/ui/status/keyboard.js:523 | ||||
| #: ../js/ui/keyboard.js:653 ../js/ui/status/keyboard.js:339 | ||||
| msgid "Keyboard" | ||||
| msgstr "কিবৰ্ড" | ||||
|  | ||||
| @@ -1178,8 +1192,8 @@ msgstr "ত্ৰুটিসমূহ লুকুৱাওক" | ||||
| msgid "Show Errors" | ||||
| msgstr "ত্ৰুটিসমূহ দেখুৱাওক" | ||||
|  | ||||
| #: ../js/ui/lookingGlass.js:716 ../js/ui/status/location.js:71 | ||||
| #: ../js/ui/status/location.js:176 | ||||
| #: ../js/ui/lookingGlass.js:716 ../js/ui/status/location.js:62 | ||||
| #: ../js/ui/status/location.js:164 | ||||
| msgid "Enabled" | ||||
| msgstr "সামৰ্থবান কৰা আছে" | ||||
|  | ||||
| @@ -1187,7 +1201,7 @@ msgstr "সামৰ্থবান কৰা আছে" | ||||
| #. because it's disabled by rfkill (airplane mode) */ | ||||
| #. translators: | ||||
| #. * The device has been disabled | ||||
| #: ../js/ui/lookingGlass.js:719 ../js/ui/status/location.js:179 | ||||
| #: ../js/ui/lookingGlass.js:719 ../js/ui/status/location.js:167 | ||||
| #: ../js/ui/status/network.js:592 ../src/gvc/gvc-mixer-control.c:1830 | ||||
| msgid "Disabled" | ||||
| msgstr "অসামৰ্থবান কৰা আছে" | ||||
| @@ -1212,39 +1226,39 @@ msgstr "উৎস দৰ্শন কৰক" | ||||
| msgid "Web Page" | ||||
| msgstr "ৱেব পৃষ্ঠা" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:1326 | ||||
| #: ../js/ui/messageTray.js:1325 | ||||
| msgid "Open" | ||||
| msgstr "খোলক" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:1333 | ||||
| #: ../js/ui/messageTray.js:1332 | ||||
| msgid "Remove" | ||||
| msgstr "আতৰাওক" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:1630 | ||||
| #: ../js/ui/messageTray.js:1629 | ||||
| msgid "Notifications" | ||||
| msgstr "অধিসূচনাসমূহ" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:1637 | ||||
| #: ../js/ui/messageTray.js:1636 | ||||
| msgid "Clear Messages" | ||||
| msgstr "বাৰ্তাসমূহ পৰিষ্কাৰ কৰক" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:1656 | ||||
| #: ../js/ui/messageTray.js:1655 | ||||
| msgid "Notification Settings" | ||||
| msgstr "অধিসূচনা সংহতিসমূহ" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:1709 | ||||
| #: ../js/ui/messageTray.js:1708 | ||||
| msgid "Tray Menu" | ||||
| msgstr "ট্ৰে মেনু" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:1926 | ||||
| #: ../js/ui/messageTray.js:1925 | ||||
| msgid "No Messages" | ||||
| msgstr "কোনো বাৰ্তা নাই" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:1968 | ||||
| #: ../js/ui/messageTray.js:1963 | ||||
| msgid "Message Tray" | ||||
| msgstr "বাৰ্তা ট্ৰে" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:2971 | ||||
| #: ../js/ui/messageTray.js:2966 | ||||
| msgid "System Information" | ||||
| msgstr "চিস্টেম তথ্য" | ||||
|  | ||||
| @@ -1272,7 +1286,7 @@ msgstr "অভাৰভিউ" | ||||
| #. in the search entry when no search is | ||||
| #. active; it should not exceed ~30 | ||||
| #. characters. */ | ||||
| #: ../js/ui/overview.js:246 | ||||
| #: ../js/ui/overview.js:250 | ||||
| msgid "Type to search…" | ||||
| msgstr "সন্ধান কৰিবলে টাইপ কৰক…" | ||||
|  | ||||
| @@ -1290,7 +1304,7 @@ msgstr "কাৰ্য্যসমূহ" | ||||
| msgid "Top Bar" | ||||
| msgstr "উপৰৰ বাৰ" | ||||
|  | ||||
| #: ../js/ui/popupMenu.js:269 | ||||
| #: ../js/ui/popupMenu.js:280 | ||||
| msgid "toggle-switch-us" | ||||
| msgstr "toggle-switch-us" | ||||
|  | ||||
| @@ -1302,7 +1316,8 @@ msgstr "এটা কমান্ড সুমুৱাওক" | ||||
| msgid "Close" | ||||
| msgstr "বন্ধ কৰক" | ||||
|  | ||||
| #: ../js/ui/runDialog.js:277 | ||||
| #: ../js/ui/runDialog.js:273 | ||||
| #| msgid "Estimating…" | ||||
| msgid "Restarting…" | ||||
| msgstr "পুনাৰম্ভ কৰা হৈছে…" | ||||
|  | ||||
| @@ -1319,43 +1334,43 @@ msgid_plural "%d new notifications" | ||||
| msgstr[0] "%d নতুন অধিসূচনা" | ||||
| msgstr[1] "%d নতুন অধিসূচনাসমূহ" | ||||
|  | ||||
| #: ../js/ui/screenShield.js:472 ../js/ui/status/system.js:345 | ||||
| #: ../js/ui/screenShield.js:474 ../js/ui/status/system.js:345 | ||||
| msgid "Lock" | ||||
| msgstr "লক কৰক" | ||||
|  | ||||
| #: ../js/ui/screenShield.js:706 | ||||
| #: ../js/ui/screenShield.js:708 | ||||
| msgid "GNOME needs to lock the screen" | ||||
| msgstr "GNOME এ পৰ্দা লক কৰিব লাগিব" | ||||
|  | ||||
| #: ../js/ui/screenShield.js:833 ../js/ui/screenShield.js:1304 | ||||
| #: ../js/ui/screenShield.js:835 ../js/ui/screenShield.js:1306 | ||||
| msgid "Unable to lock" | ||||
| msgstr "লক কৰিবলে অক্ষম" | ||||
|  | ||||
| #: ../js/ui/screenShield.js:834 ../js/ui/screenShield.js:1305 | ||||
| #: ../js/ui/screenShield.js:836 ../js/ui/screenShield.js:1307 | ||||
| msgid "Lock was blocked by an application" | ||||
| msgstr "লক কাৰ্য্য এটা এপ্লিকেচন দ্বাৰা প্ৰতিৰোধ কৰা হৈছিল" | ||||
|  | ||||
| #: ../js/ui/search.js:594 | ||||
| #: ../js/ui/search.js:614 | ||||
| msgid "Searching…" | ||||
| msgstr "সন্ধান কৰা হৈছে…" | ||||
|  | ||||
| #: ../js/ui/search.js:596 | ||||
| #: ../js/ui/search.js:660 | ||||
| msgid "No results." | ||||
| msgstr "কোনো ফলাফল নাই।" | ||||
|  | ||||
| #: ../js/ui/shellEntry.js:25 | ||||
| #: ../js/ui/shellEntry.js:27 | ||||
| msgid "Copy" | ||||
| msgstr "কপি কৰক" | ||||
|  | ||||
| #: ../js/ui/shellEntry.js:30 | ||||
| #: ../js/ui/shellEntry.js:32 | ||||
| msgid "Paste" | ||||
| msgstr "পেইস্ট কৰক" | ||||
|  | ||||
| #: ../js/ui/shellEntry.js:97 | ||||
| #: ../js/ui/shellEntry.js:99 | ||||
| msgid "Show Text" | ||||
| msgstr "লিখনি দেখুৱাওক" | ||||
|  | ||||
| #: ../js/ui/shellEntry.js:99 | ||||
| #: ../js/ui/shellEntry.js:101 | ||||
| msgid "Hide Text" | ||||
| msgstr "লিখনি লুকুৱাওক" | ||||
|  | ||||
| @@ -1441,28 +1456,26 @@ msgstr "সংযুক্ত নহয়" | ||||
| msgid "Brightness" | ||||
| msgstr "উজ্জ্বলতা" | ||||
|  | ||||
| #: ../js/ui/status/keyboard.js:547 | ||||
| #: ../js/ui/status/keyboard.js:407 | ||||
| msgid "Show Keyboard Layout" | ||||
| msgstr "কিবৰ্ড বিন্যাস দেখুৱাওক" | ||||
|  | ||||
| #: ../js/ui/status/location.js:65 | ||||
| #: ../js/ui/status/location.js:56 | ||||
| #| msgid "Notifications" | ||||
| msgid "Location" | ||||
| msgstr "অবস্থান" | ||||
|  | ||||
| #: ../js/ui/status/location.js:72 ../js/ui/status/location.js:177 | ||||
| #: ../js/ui/status/location.js:63 ../js/ui/status/location.js:165 | ||||
| #| msgid "Disabled" | ||||
| msgid "Disable" | ||||
| msgstr "অসামৰ্থবান কৰক" | ||||
|  | ||||
| #: ../js/ui/status/location.js:73 | ||||
| #| msgid "Power Settings" | ||||
| msgid "Privacy Settings" | ||||
| msgstr "গোপনীয়তা সংহতিসমূহ" | ||||
|  | ||||
| #: ../js/ui/status/location.js:176 | ||||
| #: ../js/ui/status/location.js:164 | ||||
| msgid "In Use" | ||||
| msgstr "ব্যৱহৃত" | ||||
|  | ||||
| #: ../js/ui/status/location.js:180 | ||||
| #: ../js/ui/status/location.js:168 | ||||
| #| msgid "Enabled" | ||||
| msgid "Enable" | ||||
| msgstr "সামৰ্থবান কৰক" | ||||
|  | ||||
| @@ -1476,31 +1489,37 @@ msgid "Off" | ||||
| msgstr "অফ" | ||||
|  | ||||
| #: ../js/ui/status/network.js:459 | ||||
| #| msgid "Connect" | ||||
| msgid "Connected" | ||||
| msgstr "সংযুক্ত" | ||||
|  | ||||
| #. 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) */ | ||||
| #: ../js/ui/status/network.js:463 | ||||
| #| msgid "unmanaged" | ||||
| msgid "Unmanaged" | ||||
| msgstr "অব্যৱস্থাপিত" | ||||
|  | ||||
| #: ../js/ui/status/network.js:465 | ||||
| #| msgid "disconnecting..." | ||||
| msgid "Disconnecting" | ||||
| msgstr "বিচ্ছিনিত কৰা হৈছে" | ||||
|  | ||||
| #: ../js/ui/status/network.js:471 ../js/ui/status/network.js:1301 | ||||
| #| msgid "Connection" | ||||
| msgid "Connecting" | ||||
| msgstr "সংযোগ কৰা হৈছে" | ||||
|  | ||||
| #. Translators: this is for network connections that require some kind of key or password */ | ||||
| #: ../js/ui/status/network.js:474 | ||||
| #| msgid "authentication required" | ||||
| msgid "Authentication required" | ||||
| msgstr "প্ৰমাণীকৰণৰ প্ৰয়োজন" | ||||
|  | ||||
| #. Translators: this is for devices that require some kind of firmware or kernel | ||||
| #. module, which is missing */ | ||||
| #: ../js/ui/status/network.js:482 | ||||
| #| msgid "firmware missing" | ||||
| msgid "Firmware missing" | ||||
| msgstr "ফাৰ্মৱেৰ সন্ধানহীন" | ||||
|  | ||||
| @@ -1604,6 +1623,7 @@ msgid "Network Settings" | ||||
| msgstr "নেটৱৰ্ক সংহতিসমূহ" | ||||
|  | ||||
| #: ../js/ui/status/network.js:1482 | ||||
| #| msgid "Settings" | ||||
| msgid "VPN Settings" | ||||
| msgstr "VPN সংহতিসমূহ" | ||||
|  | ||||
| @@ -1697,11 +1717,11 @@ msgstr "অন্য ব্যৱহাৰকাৰী হিচাপে লগ | ||||
| msgid "Unlock Window" | ||||
| msgstr "উইন্ডো আনলক কৰক" | ||||
|  | ||||
| #: ../js/ui/viewSelector.js:158 | ||||
| #: ../js/ui/viewSelector.js:232 | ||||
| msgid "Applications" | ||||
| msgstr "এপ্লিকেচনসমূহ" | ||||
|  | ||||
| #: ../js/ui/viewSelector.js:162 | ||||
| #: ../js/ui/viewSelector.js:236 | ||||
| msgid "Search" | ||||
| msgstr "সন্ধান কৰক" | ||||
|  | ||||
| @@ -1798,19 +1818,19 @@ msgstr[1] "%u ইনপুটসমূহ" | ||||
| msgid "System Sounds" | ||||
| msgstr "চিস্টেম শব্দসমূহ" | ||||
|  | ||||
| #: ../src/main.c:373 | ||||
| #: ../src/main.c:371 | ||||
| msgid "Print version" | ||||
| msgstr "প্ৰিণ্ট সংস্কৰণ" | ||||
| msgstr "প্ৰিন্ট সংস্কৰণ" | ||||
|  | ||||
| #: ../src/main.c:379 | ||||
| #: ../src/main.c:377 | ||||
| msgid "Mode used by GDM for login screen" | ||||
| msgstr "লগিন স্ক্ৰিনৰ বাবে GDM দ্বাৰা ব্যৱহাৰ কৰা অৱস্থা" | ||||
|  | ||||
| #: ../src/main.c:385 | ||||
| #: ../src/main.c:383 | ||||
| msgid "Use a specific mode, e.g. \"gdm\" for login screen" | ||||
| msgstr "লগিন পৰ্দাৰ বাবে এটা বিশেষ অৱস্থা, উদাহৰণস্বৰূপ \"gdm\" ব্যৱহাৰ কৰক" | ||||
|  | ||||
| #: ../src/main.c:391 | ||||
| #: ../src/main.c:389 | ||||
| msgid "List possible modes" | ||||
| msgstr "সম্ভাব্য অৱস্থাসমূহ তালিকাভুক্ত কৰক" | ||||
|  | ||||
| @@ -2014,7 +2034,7 @@ msgstr "প্ৰমাণীকৰণ ডাইলগ ব্যৱহাৰক | ||||
| #~ "সংহিত, অবিকল্পিত পাইপলাইন ব্যৱহাৰ কৰা হব। এইটো বৰ্তমানত 'vp8enc " | ||||
| #~ "min_quantizer=13 max_quantizer=13 cpu-used=5 deadline=1000000 threads=" | ||||
| #~ "%T ! queue ! webmmux' আৰু VP8 কডেক ব্যৱহাৰ কৰি WEBM ত ৰেকৰ্ড কৰে। %T ক " | ||||
| #~ "চিস্টেমত অনুকূলিত থ্ৰেড কাওণ্টত এটা অনুমানৰ প্লেইচহল্ডাৰ হিচাপে ব্যৱহাৰ কৰা হয়।" | ||||
| #~ "চিস্টেমত অনুকূলিত থ্ৰেড কাওন্টত এটা অনুমানৰ প্লেইচহল্ডাৰ হিচাপে ব্যৱহাৰ কৰা হয়।" | ||||
|  | ||||
| #~ msgid "File extension used for storing the screencast" | ||||
| #~ msgstr "screencast সংৰক্ষণ কৰাৰ কাৰণে লথিপত্ৰ সম্প্ৰসাৰন" | ||||
| @@ -2297,7 +2317,7 @@ msgstr "প্ৰমাণীকৰণ ডাইলগ ব্যৱহাৰক | ||||
| #~ msgstr "চিস্টেম সংহতিসমূহ" | ||||
|  | ||||
| #~ msgid "Failed to unmount '%s'" | ||||
| #~ msgstr "'%s' আনমাউণ্ট কৰিবলে ব্যৰ্থ" | ||||
| #~ msgstr "'%s' আনমাউন্ট কৰিবলে ব্যৰ্থ" | ||||
|  | ||||
| #~ msgid "Retry" | ||||
| #~ msgstr "পুনৰ চেষ্টা কৰক" | ||||
| @@ -2375,7 +2395,7 @@ msgstr "প্ৰমাণীকৰণ ডাইলগ ব্যৱহাৰক | ||||
| #~ msgstr "বন্ধ কৰক" | ||||
|  | ||||
| #~ msgid "Online Accounts" | ||||
| #~ msgstr "অনলাইন একাওণ্টসমূহ" | ||||
| #~ msgstr "অনলাইন একাওন্টসমূহ" | ||||
|  | ||||
| #~ msgid "Lock Screen" | ||||
| #~ msgstr "পৰ্দা লক কৰক" | ||||
|   | ||||
							
								
								
									
										2542
									
								
								po/bn_IN.po
									
									
									
									
									
								
							
							
						
						
									
										2542
									
								
								po/bn_IN.po
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										207
									
								
								po/fa.po
									
									
									
									
									
								
							
							
						
						
									
										207
									
								
								po/fa.po
									
									
									
									
									
								
							| @@ -9,8 +9,8 @@ msgstr "" | ||||
| "Project-Id-Version: gnome-shell 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: 2014-10-06 19:42+0000\n" | ||||
| "PO-Revision-Date: 2014-10-10 10:51+0330\n" | ||||
| "POT-Creation-Date: 2014-08-28 07:38+0000\n" | ||||
| "PO-Revision-Date: 2014-08-28 20:57+0430\n" | ||||
| "Last-Translator: Arash Mousavi <mousavi.arash@gmail.com>\n" | ||||
| "Language-Team: Persian <>\n" | ||||
| "Language: fa\n" | ||||
| @@ -19,7 +19,7 @@ msgstr "" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n!=1);\n" | ||||
| "X-Poedit-SourceCharset: utf-8\n" | ||||
| "X-Generator: Poedit 1.6.9\n" | ||||
| "X-Generator: Gtranslator 2.91.6\n" | ||||
|  | ||||
| #: ../data/50-gnome-shell-system.xml.in.h:1 | ||||
| msgid "System" | ||||
| @@ -81,10 +81,16 @@ msgstr "" | ||||
| "F2." | ||||
|  | ||||
| #: ../data/org.gnome.shell.gschema.xml.in.in.h:3 | ||||
| #| msgid "Uuids of extensions to enable" | ||||
| msgid "UUIDs of extensions to enable" | ||||
| msgstr "شناسههای UUID افزونهها جهت فعالسازی" | ||||
|  | ||||
| #: ../data/org.gnome.shell.gschema.xml.in.in.h:4 | ||||
| #| msgid "" | ||||
| #| "GNOME Shell extensions have a uuid property; this key lists extensions " | ||||
| #| "which should be loaded. Any extension that wants to be loaded needs to be " | ||||
| #| "in this list. You can also manipulate this list with the EnableExtension " | ||||
| #| "and DisableExtension DBus methods on org.gnome.Shell." | ||||
| msgid "" | ||||
| "GNOME Shell extensions have a UUID property; this key lists extensions which " | ||||
| "should be loaded. Any extension that wants to be loaded needs to be in this " | ||||
| @@ -137,10 +143,14 @@ msgid "History for the looking glass dialog" | ||||
| msgstr "تاریخچه برای نما محاوره شیشهای" | ||||
|  | ||||
| #: ../data/org.gnome.shell.gschema.xml.in.in.h:13 | ||||
| #| msgid "Always show the 'Log out' menuitem in the user menu." | ||||
| msgid "Always show the 'Log out' menu item in the user menu." | ||||
| msgstr "همیشه «خروج از سیستم» را در منو کاربر نمایش بده." | ||||
|  | ||||
| #: ../data/org.gnome.shell.gschema.xml.in.in.h:14 | ||||
| #| msgid "" | ||||
| #| "This key overrides the automatic hiding of the 'Log out' menuitem in " | ||||
| #| "single-user, single-session situations." | ||||
| msgid "" | ||||
| "This key overrides the automatic hiding of the 'Log out' menu item in single-" | ||||
| "user, single-session situations." | ||||
| @@ -297,17 +307,18 @@ msgstr "" | ||||
| msgid "Captive Portal" | ||||
| msgstr "پرتال درگیر" | ||||
|  | ||||
| #: ../js/extensionPrefs/main.js:123 | ||||
| #: ../js/extensionPrefs/main.js:127 | ||||
| #, javascript-format | ||||
| msgid "There was an error loading the preferences dialog for %s:" | ||||
| msgstr "خطایی هنگام باز کردن محاورهی ترجیحات برای %s رُخ داد:" | ||||
|  | ||||
| #: ../js/extensionPrefs/main.js:155 | ||||
| #: ../js/extensionPrefs/main.js:159 | ||||
| #| msgid "Configure GNOME Shell Extensions" | ||||
| msgid "GNOME Shell Extensions" | ||||
| msgstr "افزونههای گنومشل" | ||||
|  | ||||
| #: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:143 | ||||
| #: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:452 | ||||
| #: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:429 | ||||
| #: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399 | ||||
| #: ../js/ui/status/network.js:915 | ||||
| msgid "Cancel" | ||||
| @@ -367,47 +378,50 @@ msgstr "عدم توانایی در تجزیه فرمان:" | ||||
|  | ||||
| #: ../js/misc/util.js:156 | ||||
| #, javascript-format | ||||
| #| msgid "Execution of '%s' failed:" | ||||
| msgid "Execution of “%s” failed:" | ||||
| msgstr "اجرای «%s» شکست خورد:" | ||||
|  | ||||
| #: ../js/portalHelper/main.js:85 | ||||
| #| msgid "Authentication Required" | ||||
| msgid "Web Authentication Redirect" | ||||
| msgstr "تغییر مسیر برای تایید هویت وب" | ||||
|  | ||||
| #: ../js/ui/appDisplay.js:772 | ||||
| #: ../js/ui/appDisplay.js:660 | ||||
| msgid "Frequently used applications will appear here" | ||||
| msgstr "برنامههای بیشتر استفاده شده در اینجا نمایش داده میشود" | ||||
|  | ||||
| #: ../js/ui/appDisplay.js:883 | ||||
| #: ../js/ui/appDisplay.js:771 | ||||
| msgid "Frequent" | ||||
| msgstr "پُراستفاده" | ||||
|  | ||||
| #: ../js/ui/appDisplay.js:890 | ||||
| #: ../js/ui/appDisplay.js:778 | ||||
| msgid "All" | ||||
| msgstr "همه" | ||||
|  | ||||
| #: ../js/ui/appDisplay.js:1790 | ||||
| #: ../js/ui/appDisplay.js:1650 | ||||
| msgid "New Window" | ||||
| msgstr "پنجرهی جدید" | ||||
|  | ||||
| #: ../js/ui/appDisplay.js:1816 ../js/ui/dash.js:285 | ||||
| #: ../js/ui/appDisplay.js:1673 ../js/ui/dash.js:285 | ||||
| msgid "Remove from Favorites" | ||||
| msgstr "حذف از مورد پسندها" | ||||
|  | ||||
| #: ../js/ui/appDisplay.js:1822 | ||||
| #: ../js/ui/appDisplay.js:1679 | ||||
| msgid "Add to Favorites" | ||||
| msgstr "اضافه کردن به مورد پسندها" | ||||
|  | ||||
| #: ../js/ui/appDisplay.js:1831 | ||||
| #: ../js/ui/appDisplay.js:1688 | ||||
| #| msgid "Show Text" | ||||
| msgid "Show Details" | ||||
| msgstr "نمایش جزئیات" | ||||
|  | ||||
| #: ../js/ui/appFavorites.js:132 | ||||
| #: ../js/ui/appFavorites.js:122 | ||||
| #, javascript-format | ||||
| msgid "%s has been added to your favorites." | ||||
| msgstr "مورد %s به مورد پسندهای شما اضافه شد." | ||||
|  | ||||
| #: ../js/ui/appFavorites.js:166 | ||||
| #: ../js/ui/appFavorites.js:156 | ||||
| #, javascript-format | ||||
| msgid "%s has been removed from your favorites." | ||||
| msgstr "مورد %s ازمورد پسندهای شما حذف شد." | ||||
| @@ -599,11 +613,11 @@ msgstr "باز کردن با %s" | ||||
| msgid "Eject" | ||||
| msgstr "بیرون دادن" | ||||
|  | ||||
| #: ../js/ui/components/keyring.js:94 ../js/ui/components/polkitAgent.js:285 | ||||
| #: ../js/ui/components/keyring.js:93 ../js/ui/components/polkitAgent.js:285 | ||||
| msgid "Password:" | ||||
| msgstr "گذرواژه" | ||||
|  | ||||
| #: ../js/ui/components/keyring.js:120 | ||||
| #: ../js/ui/components/keyring.js:113 | ||||
| msgid "Type again:" | ||||
| msgstr "تلاش مجدد:" | ||||
|  | ||||
| @@ -642,6 +656,9 @@ msgstr "تایید هویت برای شبکه بیسیم لازم است" | ||||
|  | ||||
| #: ../js/ui/components/networkAgent.js:319 | ||||
| #, javascript-format | ||||
| #| msgid "" | ||||
| #| "Passwords or encryption keys are required to access the wireless network " | ||||
| #| "'%s'." | ||||
| msgid "" | ||||
| "Passwords or encryption keys are required to access the wireless network " | ||||
| "“%s”." | ||||
| @@ -677,6 +694,7 @@ msgstr "گذرواژه شبکه پهنباند تلفن همراه" | ||||
|  | ||||
| #: ../js/ui/components/networkAgent.js:346 | ||||
| #, javascript-format | ||||
| #| msgid "A password is required to connect to '%s'." | ||||
| msgid "A password is required to connect to “%s”." | ||||
| msgstr "برای اتصال به «%s» گذرواژه لازم است." | ||||
|  | ||||
| @@ -726,18 +744,23 @@ msgstr "بیصدا" | ||||
|  | ||||
| #. Translators: Time in 24h format */ | ||||
| #: ../js/ui/components/telepathyClient.js:953 | ||||
| #| msgctxt "event list time" | ||||
| #| msgid "%H∶%M" | ||||
| msgid "%H∶%M" | ||||
| msgstr "%OH∶%OM" | ||||
|  | ||||
| #. Translators: this is the word "Yesterday" followed by a | ||||
| #. time string in 24h format. i.e. "Yesterday, 14:30" */ | ||||
| #: ../js/ui/components/telepathyClient.js:960 | ||||
| #| msgid "<b>Yesterday</b>, <b>%H:%M</b>" | ||||
| msgid "Yesterday, %H∶%M" | ||||
| msgstr "<b>دیروز</b>، <b>%OH:%OM" | ||||
|  | ||||
| #. Translators: this is the week day name followed by a time | ||||
| #. string in 24h format. i.e. "Monday, 14:30" */ | ||||
| #: ../js/ui/components/telepathyClient.js:967 | ||||
| #| msgctxt "event list time" | ||||
| #| msgid "%H∶%M" | ||||
| msgid "%A, %H∶%M" | ||||
| msgstr "%A، %OH∶%OM" | ||||
|  | ||||
| @@ -745,6 +768,8 @@ msgstr "%A، %OH∶%OM" | ||||
| #. followed by a time string in 24h format. | ||||
| #. i.e. "May 25, 14:30" */ | ||||
| #: ../js/ui/components/telepathyClient.js:974 | ||||
| #| msgctxt "event list time" | ||||
| #| msgid "%H∶%M" | ||||
| msgid "%B %d, %H∶%M" | ||||
| msgstr "%d %B، %OH∶%OM" | ||||
|  | ||||
| @@ -757,6 +782,8 @@ msgstr "%Od %OB %OY، %OH:%OM" | ||||
|  | ||||
| #. Translators: Time in 24h format */ | ||||
| #: ../js/ui/components/telepathyClient.js:986 | ||||
| #| msgctxt "event list time" | ||||
| #| msgid "%l∶%M %p" | ||||
| msgid "%l∶%M %p" | ||||
| msgstr "%Ol∶%OM %p" | ||||
|  | ||||
| @@ -769,6 +796,7 @@ msgstr "دیروز، %OI:%OM" | ||||
| #. Translators: this is the week day name followed by a time | ||||
| #. string in 12h format. i.e. "Monday, 2:30 pm" */ | ||||
| #: ../js/ui/components/telepathyClient.js:1000 | ||||
| #| msgid "%a %l:%M %p" | ||||
| msgid "%A, %l∶%M %p" | ||||
| msgstr "%A، %OH:%OM" | ||||
|  | ||||
| @@ -776,6 +804,7 @@ msgstr "%A، %OH:%OM" | ||||
| #. followed by a time string in 12h format. | ||||
| #. i.e. "May 25, 2:30 pm" */ | ||||
| #: ../js/ui/components/telepathyClient.js:1007 | ||||
| #| msgid "%a %b %e, %l:%M %p" | ||||
| msgid "%B %d, %l∶%M %p" | ||||
| msgstr "%Od %B، %OH:%OM" | ||||
|  | ||||
| @@ -783,6 +812,7 @@ msgstr "%Od %B، %OH:%OM" | ||||
| #. number followed by a time string in 12h format. | ||||
| #. i.e. "May 25 2012, 2:30 pm"*/ | ||||
| #: ../js/ui/components/telepathyClient.js:1013 | ||||
| #| msgid "%a %b %e, %l:%M %p" | ||||
| msgid "%B %d %Y, %l∶%M %p" | ||||
| msgstr "%Od %B، %OH:%OM" | ||||
|  | ||||
| @@ -974,7 +1004,7 @@ msgstr "نمایش حساب" | ||||
| msgid "Unknown reason" | ||||
| msgstr "دلیل ناشناخته" | ||||
|  | ||||
| #: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:154 | ||||
| #: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:228 | ||||
| msgid "Windows" | ||||
| msgstr "پنجرهها" | ||||
|  | ||||
| @@ -986,105 +1016,105 @@ msgstr "نمایش برنامهها" | ||||
| msgid "Dash" | ||||
| msgstr "دَش" | ||||
|  | ||||
| #: ../js/ui/dateMenu.js:97 | ||||
| #: ../js/ui/dateMenu.js:96 | ||||
| msgid "Open Calendar" | ||||
| msgstr "بازکردن تقویم" | ||||
|  | ||||
| #: ../js/ui/dateMenu.js:101 | ||||
| #: ../js/ui/dateMenu.js:100 | ||||
| msgid "Open Clocks" | ||||
| msgstr "باز کردن ساعتها" | ||||
|  | ||||
| #: ../js/ui/dateMenu.js:108 | ||||
| #: ../js/ui/dateMenu.js:107 | ||||
| msgid "Date & Time Settings" | ||||
| 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:132 | ||||
| #: ../js/ui/dateMenu.js:204 | ||||
| msgid "%A %B %e, %Y" | ||||
| msgstr "%A %Od %B" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:64 | ||||
| #: ../js/ui/endSessionDialog.js:66 | ||||
| #, javascript-format | ||||
| msgctxt "title" | ||||
| msgid "Log Out %s" | ||||
| msgstr "خروج از %s" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:65 | ||||
| #: ../js/ui/endSessionDialog.js:67 | ||||
| msgctxt "title" | ||||
| msgid "Log Out" | ||||
| msgstr "خروج از سیستم" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:67 | ||||
| #: ../js/ui/endSessionDialog.js:69 | ||||
| #, javascript-format | ||||
| msgid "%s will be logged out automatically in %d second." | ||||
| msgid_plural "%s will be logged out automatically in %d seconds." | ||||
| msgstr[0] "%s به طور خودکار در مدت %Id ثانیه از سیستم خارج خواهد شد." | ||||
| msgstr[1] "%s به طور خودکار در مدت %Id ثانیه از سیستم خارج خواهد شد." | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:72 | ||||
| #: ../js/ui/endSessionDialog.js:74 | ||||
| #, javascript-format | ||||
| msgid "You will be logged out automatically in %d second." | ||||
| msgid_plural "You will be logged out automatically in %d seconds." | ||||
| msgstr[0] "شما پس از %Id ثانیه به طور خودکار از سیستم خارج میشوید." | ||||
| msgstr[1] "شما پس از %Id ثانیه به طور خودکار از سیستم خارج میشوید." | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:78 | ||||
| #: ../js/ui/endSessionDialog.js:80 | ||||
| msgctxt "button" | ||||
| msgid "Log Out" | ||||
| msgstr "خروج از سیستم" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:84 | ||||
| #: ../js/ui/endSessionDialog.js:86 | ||||
| msgctxt "title" | ||||
| msgid "Power Off" | ||||
| msgstr "خاموش کردن" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:85 | ||||
| #: ../js/ui/endSessionDialog.js:87 | ||||
| msgctxt "title" | ||||
| msgid "Install Updates & Power Off" | ||||
| msgstr "نصب بروزرسانیها و خاموش کردن" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:87 | ||||
| #: ../js/ui/endSessionDialog.js:89 | ||||
| #, javascript-format | ||||
| msgid "The system will power off automatically in %d second." | ||||
| msgid_plural "The system will power off automatically in %d seconds." | ||||
| msgstr[0] "سیستم پس از %Id ثانیه به طور خودکار خاموش میشود." | ||||
| msgstr[1] "سیستم پس از %Id ثانیه به طور خودکار خاموش میشود." | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:91 | ||||
| #: ../js/ui/endSessionDialog.js:93 | ||||
| msgctxt "checkbox" | ||||
| msgid "Install pending software updates" | ||||
| msgstr "نصب بروزرسانیهایِ در انتظار" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:94 ../js/ui/endSessionDialog.js:111 | ||||
| #: ../js/ui/endSessionDialog.js:96 ../js/ui/endSessionDialog.js:113 | ||||
| msgctxt "button" | ||||
| msgid "Restart" | ||||
| msgstr "راهاندازی مجدد" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:96 | ||||
| #: ../js/ui/endSessionDialog.js:98 | ||||
| msgctxt "button" | ||||
| msgid "Power Off" | ||||
| msgstr "خاموش کردن" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:103 | ||||
| #: ../js/ui/endSessionDialog.js:105 | ||||
| msgctxt "title" | ||||
| msgid "Restart" | ||||
| msgstr "راهاندازی مجدد" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:105 | ||||
| #: ../js/ui/endSessionDialog.js:107 | ||||
| #, javascript-format | ||||
| msgid "The system will restart automatically in %d second." | ||||
| msgid_plural "The system will restart automatically in %d seconds." | ||||
| msgstr[0] "سیستم پس از %Id ثانیه به طور خودکار مجددا راهاندازی میشود." | ||||
| msgstr[1] "سیستم پس از %Id ثانیه به طور خودکار مجددا راهاندازی میشود." | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:119 | ||||
| #: ../js/ui/endSessionDialog.js:121 | ||||
| msgctxt "title" | ||||
| msgid "Restart & Install Updates" | ||||
| msgstr "راهاندازی مجدد و نصب بروزرسانیها" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:121 | ||||
| #: ../js/ui/endSessionDialog.js:123 | ||||
| #, javascript-format | ||||
| msgid "The system will automatically restart and install updates in %d second." | ||||
| msgid_plural "" | ||||
| @@ -1096,42 +1126,44 @@ msgstr[1] "" | ||||
| "سیستم پس از %Id ثانیه به طور خودکار مجددا راهاندازی میشود و بروزرسانیهای را " | ||||
| "نصب میکند." | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:127 | ||||
| #: ../js/ui/endSessionDialog.js:129 | ||||
| #| msgctxt "button" | ||||
| #| msgid "Restart & Install" | ||||
| msgctxt "button" | ||||
| msgid "Restart & Install" | ||||
| msgstr "راهاندازی مجدد و نصب" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:128 | ||||
| #: ../js/ui/endSessionDialog.js:130 | ||||
| msgctxt "button" | ||||
| msgid "Install & Power Off" | ||||
| msgstr "نصب و خاموش کردن" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:129 | ||||
| #: ../js/ui/endSessionDialog.js:131 | ||||
| msgctxt "checkbox" | ||||
| msgid "Power off after updates are installed" | ||||
| msgstr "خاموش کردن بعد از نصب بروزرسانیها" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:338 | ||||
| #: ../js/ui/endSessionDialog.js:315 | ||||
| msgid "Running on battery power: please plug in before installing updates." | ||||
| msgstr "" | ||||
| "درحال اجرا بر روی انرژی باتری: لطفا قبل از نصب بروزرسانیها، به برق وصل کنید." | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:355 | ||||
| #: ../js/ui/endSessionDialog.js:332 | ||||
| msgid "Some applications are busy or have unsaved work." | ||||
| msgstr "تعدادی از برنامهها مشغول هستند یا کارهای ذخیره نشده دارند." | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:362 | ||||
| #: ../js/ui/endSessionDialog.js:339 | ||||
| msgid "Other users are logged in." | ||||
| msgstr "کاربران دیگر وارد سیستم هستند." | ||||
|  | ||||
| #. Translators: Remote here refers to a remote session, like a ssh login */ | ||||
| #: ../js/ui/endSessionDialog.js:640 | ||||
| #: ../js/ui/endSessionDialog.js:619 | ||||
| #, javascript-format | ||||
| msgid "%s (remote)" | ||||
| msgstr "%s (دوردست)" | ||||
|  | ||||
| #. Translators: Console here refers to a tty like a VT console */ | ||||
| #: ../js/ui/endSessionDialog.js:643 | ||||
| #: ../js/ui/endSessionDialog.js:622 | ||||
| #, javascript-format | ||||
| msgid "%s (console)" | ||||
| msgstr "%s (پایانه)" | ||||
| @@ -1142,10 +1174,11 @@ msgstr "نصب" | ||||
|  | ||||
| #: ../js/ui/extensionDownloader.js:204 | ||||
| #, javascript-format | ||||
| #| msgid "Download and install '%s' from extensions.gnome.org?" | ||||
| msgid "Download and install “%s” from extensions.gnome.org?" | ||||
| msgstr "بارگیری و نصب «%s» از extensions.gnome.org؟" | ||||
|  | ||||
| #: ../js/ui/keyboard.js:700 ../js/ui/status/keyboard.js:523 | ||||
| #: ../js/ui/keyboard.js:653 ../js/ui/status/keyboard.js:339 | ||||
| msgid "Keyboard" | ||||
| msgstr "صفحهکلید" | ||||
|  | ||||
| @@ -1167,8 +1200,8 @@ msgstr "مخفی کردن خطاها" | ||||
| msgid "Show Errors" | ||||
| msgstr "نمایش خطاها" | ||||
|  | ||||
| #: ../js/ui/lookingGlass.js:716 ../js/ui/status/location.js:71 | ||||
| #: ../js/ui/status/location.js:176 | ||||
| #: ../js/ui/lookingGlass.js:716 ../js/ui/status/location.js:62 | ||||
| #: ../js/ui/status/location.js:166 | ||||
| msgid "Enabled" | ||||
| msgstr "به کار انداختن" | ||||
|  | ||||
| @@ -1176,7 +1209,7 @@ msgstr "به کار انداختن" | ||||
| #. because it's disabled by rfkill (airplane mode) */ | ||||
| #. translators: | ||||
| #. * The device has been disabled | ||||
| #: ../js/ui/lookingGlass.js:719 ../js/ui/status/location.js:179 | ||||
| #: ../js/ui/lookingGlass.js:719 ../js/ui/status/location.js:169 | ||||
| #: ../js/ui/status/network.js:592 ../src/gvc/gvc-mixer-control.c:1830 | ||||
| msgid "Disabled" | ||||
| msgstr "از کار انداختن" | ||||
| @@ -1201,39 +1234,39 @@ msgstr "نمایش منبع" | ||||
| msgid "Web Page" | ||||
| msgstr "صفحهی وب" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:1327 | ||||
| #: ../js/ui/messageTray.js:1325 | ||||
| msgid "Open" | ||||
| msgstr "بازکردن" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:1334 | ||||
| #: ../js/ui/messageTray.js:1332 | ||||
| msgid "Remove" | ||||
| msgstr "حذف" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:1631 | ||||
| #: ../js/ui/messageTray.js:1629 | ||||
| msgid "Notifications" | ||||
| msgstr "اعلانها" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:1638 | ||||
| #: ../js/ui/messageTray.js:1636 | ||||
| msgid "Clear Messages" | ||||
| msgstr "پاک کردن پیامها" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:1657 | ||||
| #: ../js/ui/messageTray.js:1655 | ||||
| msgid "Notification Settings" | ||||
| msgstr "تنظیمات اعلانها" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:1710 | ||||
| #: ../js/ui/messageTray.js:1708 | ||||
| msgid "Tray Menu" | ||||
| msgstr "منو سینی" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:1934 | ||||
| #: ../js/ui/messageTray.js:1925 | ||||
| msgid "No Messages" | ||||
| msgstr "پیامی وجود ندارد" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:1979 | ||||
| #: ../js/ui/messageTray.js:1963 | ||||
| msgid "Message Tray" | ||||
| msgstr "سینی پیام" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:2992 | ||||
| #: ../js/ui/messageTray.js:2966 | ||||
| msgid "System Information" | ||||
| msgstr "اطلاعات سیستم" | ||||
|  | ||||
| @@ -1261,7 +1294,7 @@ msgstr "نمایکلی" | ||||
| #. in the search entry when no search is | ||||
| #. active; it should not exceed ~30 | ||||
| #. characters. */ | ||||
| #: ../js/ui/overview.js:246 | ||||
| #: ../js/ui/overview.js:250 | ||||
| msgid "Type to search…" | ||||
| msgstr "برای جستجو تایپ کنید..." | ||||
|  | ||||
| @@ -1292,6 +1325,7 @@ msgid "Close" | ||||
| msgstr "بستن" | ||||
|  | ||||
| #: ../js/ui/runDialog.js:277 | ||||
| #| msgid "Estimating…" | ||||
| msgid "Restarting…" | ||||
| msgstr "درحال راهاندازی مجدد..." | ||||
|  | ||||
| @@ -1324,27 +1358,27 @@ msgstr "نمیتوان قفل کرد" | ||||
| msgid "Lock was blocked by an application" | ||||
| msgstr "قفل توسط یک برنامه مسدود شده بود" | ||||
|  | ||||
| #: ../js/ui/search.js:611 | ||||
| #: ../js/ui/search.js:606 | ||||
| msgid "Searching…" | ||||
| msgstr "درحال حستجو..." | ||||
|  | ||||
| #: ../js/ui/search.js:613 | ||||
| #: ../js/ui/search.js:652 | ||||
| msgid "No results." | ||||
| msgstr "بدون نتیجه." | ||||
|  | ||||
| #: ../js/ui/shellEntry.js:25 | ||||
| #: ../js/ui/shellEntry.js:27 | ||||
| msgid "Copy" | ||||
| msgstr "رونوشت" | ||||
|  | ||||
| #: ../js/ui/shellEntry.js:30 | ||||
| #: ../js/ui/shellEntry.js:32 | ||||
| msgid "Paste" | ||||
| msgstr "چسباندن" | ||||
|  | ||||
| #: ../js/ui/shellEntry.js:97 | ||||
| #: ../js/ui/shellEntry.js:99 | ||||
| msgid "Show Text" | ||||
| msgstr "نمایش متن" | ||||
|  | ||||
| #: ../js/ui/shellEntry.js:99 | ||||
| #: ../js/ui/shellEntry.js:101 | ||||
| msgid "Hide Text" | ||||
| msgstr "مخفیکردن متن" | ||||
|  | ||||
| @@ -1430,27 +1464,26 @@ msgstr "متصل نیست" | ||||
| msgid "Brightness" | ||||
| msgstr "روشنایی" | ||||
|  | ||||
| #: ../js/ui/status/keyboard.js:547 | ||||
| #: ../js/ui/status/keyboard.js:406 | ||||
| msgid "Show Keyboard Layout" | ||||
| msgstr "نمایش چیدمان صفحهکلید" | ||||
|  | ||||
| #: ../js/ui/status/location.js:65 | ||||
| #: ../js/ui/status/location.js:56 | ||||
| #| msgid "Notifications" | ||||
| msgid "Location" | ||||
| msgstr "مکان" | ||||
|  | ||||
| #: ../js/ui/status/location.js:72 ../js/ui/status/location.js:177 | ||||
| #: ../js/ui/status/location.js:63 ../js/ui/status/location.js:167 | ||||
| #| msgid "Disabled" | ||||
| msgid "Disable" | ||||
| msgstr "از کار انداختن" | ||||
|  | ||||
| #: ../js/ui/status/location.js:73 | ||||
| msgid "Privacy Settings" | ||||
| msgstr "تنظیمات حریمخصوصی" | ||||
|  | ||||
| #: ../js/ui/status/location.js:176 | ||||
| #: ../js/ui/status/location.js:166 | ||||
| msgid "In Use" | ||||
| msgstr "درحال استفاده" | ||||
|  | ||||
| #: ../js/ui/status/location.js:180 | ||||
| #: ../js/ui/status/location.js:170 | ||||
| #| msgid "Enabled" | ||||
| msgid "Enable" | ||||
| msgstr "به کار انداختن" | ||||
|  | ||||
| @@ -1464,31 +1497,37 @@ msgid "Off" | ||||
| msgstr "خاموش" | ||||
|  | ||||
| #: ../js/ui/status/network.js:459 | ||||
| #| msgid "Connect" | ||||
| msgid "Connected" | ||||
| msgstr "متصل شده" | ||||
|  | ||||
| #. 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) */ | ||||
| #: ../js/ui/status/network.js:463 | ||||
| #| msgid "unmanaged" | ||||
| msgid "Unmanaged" | ||||
| msgstr "مدیریت نشده" | ||||
|  | ||||
| #: ../js/ui/status/network.js:465 | ||||
| #| msgid "disconnecting..." | ||||
| msgid "Disconnecting" | ||||
| msgstr "درحال قطع ارتباط" | ||||
|  | ||||
| #: ../js/ui/status/network.js:471 ../js/ui/status/network.js:1301 | ||||
| #| msgid "Connection" | ||||
| msgid "Connecting" | ||||
| msgstr "درحال اتصال" | ||||
|  | ||||
| #. Translators: this is for network connections that require some kind of key or password */ | ||||
| #: ../js/ui/status/network.js:474 | ||||
| #| msgid "authentication required" | ||||
| msgid "Authentication required" | ||||
| msgstr "تایید هویت لازم است" | ||||
|  | ||||
| #. Translators: this is for devices that require some kind of firmware or kernel | ||||
| #. module, which is missing */ | ||||
| #: ../js/ui/status/network.js:482 | ||||
| #| msgid "firmware missing" | ||||
| msgid "Firmware missing" | ||||
| msgstr "میانافزار موجود نیست" | ||||
|  | ||||
| @@ -1503,6 +1542,7 @@ msgid "Connection failed" | ||||
| msgstr "اتصال شکست خورد" | ||||
|  | ||||
| #: ../js/ui/status/network.js:504 | ||||
| #| msgid "Wi-Fi Settings" | ||||
| msgid "Wired Settings" | ||||
| msgstr "تنظیمات اتصال سیمی" | ||||
|  | ||||
| @@ -1519,6 +1559,7 @@ msgid "Use as Internet connection" | ||||
| msgstr "استفاده به عنوان اتصال اینترنت" | ||||
|  | ||||
| #: ../js/ui/status/network.js:813 | ||||
| #| msgid "Airplane Mode" | ||||
| msgid "Airplane Mode is On" | ||||
| msgstr "حالت هواپیمایی روشن است" | ||||
|  | ||||
| @@ -1527,10 +1568,12 @@ msgid "Wi-Fi is disabled when airplane mode is on." | ||||
| msgstr "در زمان روشن بودن حالت هواپیمایی وای-فای غیرفعال میشود." | ||||
|  | ||||
| #: ../js/ui/status/network.js:815 | ||||
| #| msgid "Airplane Mode" | ||||
| msgid "Turn Off Airplane Mode" | ||||
| msgstr "خاموش کردن حالت هواپیمایی" | ||||
|  | ||||
| #: ../js/ui/status/network.js:824 | ||||
| #| msgid "Wi-Fi Settings" | ||||
| msgid "Wi-Fi is Off" | ||||
| msgstr "بیسیم خاموش است" | ||||
|  | ||||
| @@ -1539,6 +1582,7 @@ msgid "Wi-Fi needs to be turned on in order to connect to a network." | ||||
| msgstr "برای اتصال به شبکه باید وای-فای روشن شود." | ||||
|  | ||||
| #: ../js/ui/status/network.js:826 | ||||
| #| msgid "Turn On" | ||||
| msgid "Turn On Wi-Fi" | ||||
| msgstr "روشن کردن بیسیم" | ||||
|  | ||||
| @@ -1592,6 +1636,7 @@ msgid "Network Settings" | ||||
| msgstr "تنظیمات شبکه" | ||||
|  | ||||
| #: ../js/ui/status/network.js:1482 | ||||
| #| msgid "Settings" | ||||
| msgid "VPN Settings" | ||||
| msgstr "تنظیمات VPN" | ||||
|  | ||||
| @@ -1685,16 +1730,17 @@ msgstr "ورود به سیستم بعنوان کاربری دیگر" | ||||
| msgid "Unlock Window" | ||||
| msgstr "بازکردن قفل پنجره" | ||||
|  | ||||
| #: ../js/ui/viewSelector.js:158 | ||||
| #: ../js/ui/viewSelector.js:232 | ||||
| msgid "Applications" | ||||
| msgstr "برنامهها" | ||||
|  | ||||
| #: ../js/ui/viewSelector.js:162 | ||||
| #: ../js/ui/viewSelector.js:236 | ||||
| msgid "Search" | ||||
| msgstr "جستجو" | ||||
|  | ||||
| #: ../js/ui/windowAttentionHandler.js:19 | ||||
| #, javascript-format | ||||
| #| msgid "'%s' is ready" | ||||
| msgid "“%s” is ready" | ||||
| msgstr "«%s» آماده است" | ||||
|  | ||||
| @@ -1786,24 +1832,25 @@ msgstr[1] "%Iu ورودی" | ||||
| msgid "System Sounds" | ||||
| msgstr "صداهای سیستم" | ||||
|  | ||||
| #: ../src/main.c:373 | ||||
| #: ../src/main.c:371 | ||||
| msgid "Print version" | ||||
| msgstr "چاپ نسخه" | ||||
|  | ||||
| #: ../src/main.c:379 | ||||
| #: ../src/main.c:377 | ||||
| msgid "Mode used by GDM for login screen" | ||||
| msgstr "حالت استفاده شده توسط GDM برای صفحه ورود به سیستم" | ||||
|  | ||||
| #: ../src/main.c:385 | ||||
| #: ../src/main.c:383 | ||||
| msgid "Use a specific mode, e.g. \"gdm\" for login screen" | ||||
| msgstr "استفاده از حالت مشخص، مثال «gdm» برای صفحه ورود به سیستم" | ||||
|  | ||||
| #: ../src/main.c:391 | ||||
| #: ../src/main.c:389 | ||||
| msgid "List possible modes" | ||||
| msgstr "فهرست کردن حالتهای ممکن" | ||||
|  | ||||
| #: ../src/shell-app.c:666 | ||||
| #, c-format | ||||
| #| msgid "Failed to launch '%s'" | ||||
| msgid "Failed to launch “%s”" | ||||
| msgstr "راهاندازی «%s» شکست خورد" | ||||
|  | ||||
|   | ||||
							
								
								
									
										148
									
								
								po/fr.po
									
									
									
									
									
								
							
							
						
						
									
										148
									
								
								po/fr.po
									
									
									
									
									
								
							| @@ -19,7 +19,7 @@ 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: 2014-09-12 17:00+0000\n" | ||||
| "POT-Creation-Date: 2014-08-25 07:37+0000\n" | ||||
| "PO-Revision-Date: 2014-08-25 17:00+0200\n" | ||||
| "Last-Translator: Alain Lojewski <allomervan@gmail.com>\n" | ||||
| "Language-Team: français <gnomefr@traduc.org>\n" | ||||
| @@ -242,8 +242,8 @@ msgstr "Combinaison de touches pour donner le focus à la notification active." | ||||
| msgid "" | ||||
| "Keybinding that pauses and resumes all running tweens, for debugging purposes" | ||||
| msgstr "" | ||||
| "Combinaison de touches pour stopper et fermer toutes les transitions à des " | ||||
| "fins de débogage" | ||||
| "Combinaison de touches pour stopper et fermer toutes les transitions à des fins " | ||||
| "de débogage" | ||||
|  | ||||
| #: ../data/org.gnome.shell.gschema.xml.in.in.h:30 | ||||
| msgid "Which keyboard to use" | ||||
| @@ -322,19 +322,19 @@ msgstr "" | ||||
| msgid "Captive Portal" | ||||
| msgstr "Portail captif" | ||||
|  | ||||
| #: ../js/extensionPrefs/main.js:123 | ||||
| #: ../js/extensionPrefs/main.js:127 | ||||
| #, javascript-format | ||||
| msgid "There was an error loading the preferences dialog for %s:" | ||||
| msgstr "" | ||||
| "Une erreur s'est produite lors du chargement de la boîte de dialogue des " | ||||
| "préférences de %s :" | ||||
|  | ||||
| #: ../js/extensionPrefs/main.js:155 | ||||
| #: ../js/extensionPrefs/main.js:159 | ||||
| msgid "GNOME Shell Extensions" | ||||
| msgstr "Extensions GNOME Shell" | ||||
|  | ||||
| #: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:143 | ||||
| #: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:452 | ||||
| #: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:429 | ||||
| #: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399 | ||||
| #: ../js/ui/status/network.js:915 | ||||
| msgid "Cancel" | ||||
| @@ -401,40 +401,40 @@ msgstr "Exécution de « %s » impossible :" | ||||
| msgid "Web Authentication Redirect" | ||||
| msgstr "Redirection de l'authentification Web" | ||||
|  | ||||
| #: ../js/ui/appDisplay.js:772 | ||||
| #: ../js/ui/appDisplay.js:660 | ||||
| msgid "Frequently used applications will appear here" | ||||
| msgstr "Les applications fréquemment utilisées apparaîtront ici" | ||||
|  | ||||
| #: ../js/ui/appDisplay.js:883 | ||||
| #: ../js/ui/appDisplay.js:771 | ||||
| msgid "Frequent" | ||||
| msgstr "Fréquemment utilisées" | ||||
|  | ||||
| #: ../js/ui/appDisplay.js:890 | ||||
| #: ../js/ui/appDisplay.js:778 | ||||
| msgid "All" | ||||
| msgstr "Toutes" | ||||
|  | ||||
| #: ../js/ui/appDisplay.js:1789 | ||||
| #: ../js/ui/appDisplay.js:1650 | ||||
| msgid "New Window" | ||||
| msgstr "Nouvelle fenêtre" | ||||
|  | ||||
| #: ../js/ui/appDisplay.js:1815 ../js/ui/dash.js:285 | ||||
| #: ../js/ui/appDisplay.js:1673 ../js/ui/dash.js:285 | ||||
| msgid "Remove from Favorites" | ||||
| msgstr "Enlever des favoris" | ||||
|  | ||||
| #: ../js/ui/appDisplay.js:1821 | ||||
| #: ../js/ui/appDisplay.js:1679 | ||||
| msgid "Add to Favorites" | ||||
| msgstr "Ajouter aux favoris" | ||||
|  | ||||
| #: ../js/ui/appDisplay.js:1830 | ||||
| #: ../js/ui/appDisplay.js:1688 | ||||
| msgid "Show Details" | ||||
| msgstr "Afficher les détails" | ||||
|  | ||||
| #: ../js/ui/appFavorites.js:124 | ||||
| #: ../js/ui/appFavorites.js:122 | ||||
| #, javascript-format | ||||
| msgid "%s has been added to your favorites." | ||||
| msgstr "%s a été ajouté à vos favoris." | ||||
|  | ||||
| #: ../js/ui/appFavorites.js:158 | ||||
| #: ../js/ui/appFavorites.js:156 | ||||
| #, javascript-format | ||||
| msgid "%s has been removed from your favorites." | ||||
| msgstr "%s a été supprimé de vos favoris." | ||||
| @@ -647,11 +647,11 @@ msgstr "Ouvrir avec %s" | ||||
| msgid "Eject" | ||||
| msgstr "Éjecter" | ||||
|  | ||||
| #: ../js/ui/components/keyring.js:94 ../js/ui/components/polkitAgent.js:285 | ||||
| #: ../js/ui/components/keyring.js:93 ../js/ui/components/polkitAgent.js:285 | ||||
| msgid "Password:" | ||||
| msgstr "Mot de passe :" | ||||
|  | ||||
| #: ../js/ui/components/keyring.js:120 | ||||
| #: ../js/ui/components/keyring.js:113 | ||||
| msgid "Type again:" | ||||
| msgstr "Saisissez à nouveau :" | ||||
|  | ||||
| @@ -1025,7 +1025,7 @@ msgstr "Afficher le compte" | ||||
| msgid "Unknown reason" | ||||
| msgstr "Raison inconnue" | ||||
|  | ||||
| #: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:154 | ||||
| #: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:228 | ||||
| msgid "Windows" | ||||
| msgstr "Fenêtres" | ||||
|  | ||||
| @@ -1062,86 +1062,86 @@ msgstr "Paramètres de date et heure" | ||||
| msgid "%A %B %e, %Y" | ||||
| msgstr "%A %e %B %Y" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:64 | ||||
| #: ../js/ui/endSessionDialog.js:66 | ||||
| #, javascript-format | ||||
| msgctxt "title" | ||||
| msgid "Log Out %s" | ||||
| msgstr "Fermer la session de %s" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:65 | ||||
| #: ../js/ui/endSessionDialog.js:67 | ||||
| msgctxt "title" | ||||
| msgid "Log Out" | ||||
| msgstr "Fermer la session" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:67 | ||||
| #: ../js/ui/endSessionDialog.js:69 | ||||
| #, javascript-format | ||||
| msgid "%s will be logged out automatically in %d second." | ||||
| msgid_plural "%s will be logged out automatically in %d seconds." | ||||
| msgstr[0] "%s sera déconnecté automatiquement dans %d seconde." | ||||
| msgstr[1] "%s sera déconnecté automatiquement dans %d secondes." | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:72 | ||||
| #: ../js/ui/endSessionDialog.js:74 | ||||
| #, javascript-format | ||||
| msgid "You will be logged out automatically in %d second." | ||||
| msgid_plural "You will be logged out automatically in %d seconds." | ||||
| msgstr[0] "Vous allez être déconnecté automatiquement dans %d seconde." | ||||
| msgstr[1] "Vous allez être déconnecté automatiquement dans %d secondes." | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:78 | ||||
| #: ../js/ui/endSessionDialog.js:80 | ||||
| msgctxt "button" | ||||
| msgid "Log Out" | ||||
| msgstr "Fermer la session" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:84 | ||||
| #: ../js/ui/endSessionDialog.js:86 | ||||
| msgctxt "title" | ||||
| msgid "Power Off" | ||||
| msgstr "Éteindre" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:85 | ||||
| #: ../js/ui/endSessionDialog.js:87 | ||||
| msgctxt "title" | ||||
| msgid "Install Updates & Power Off" | ||||
| msgstr "Installer les mises à jour et éteindre" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:87 | ||||
| #: ../js/ui/endSessionDialog.js:89 | ||||
| #, javascript-format | ||||
| msgid "The system will power off automatically in %d second." | ||||
| msgid_plural "The system will power off automatically in %d seconds." | ||||
| msgstr[0] "Cet ordinateur s'éteindra automatiquement dans %d seconde." | ||||
| msgstr[1] "Cet ordinateur s'éteindra automatiquement dans %d secondes." | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:91 | ||||
| #: ../js/ui/endSessionDialog.js:93 | ||||
| msgctxt "checkbox" | ||||
| msgid "Install pending software updates" | ||||
| msgstr "Installer les mises à jour logicielles en attente" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:94 ../js/ui/endSessionDialog.js:111 | ||||
| #: ../js/ui/endSessionDialog.js:96 ../js/ui/endSessionDialog.js:113 | ||||
| msgctxt "button" | ||||
| msgid "Restart" | ||||
| msgstr "Redémarrer" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:96 | ||||
| #: ../js/ui/endSessionDialog.js:98 | ||||
| msgctxt "button" | ||||
| msgid "Power Off" | ||||
| msgstr "Éteindre" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:103 | ||||
| #: ../js/ui/endSessionDialog.js:105 | ||||
| msgctxt "title" | ||||
| msgid "Restart" | ||||
| msgstr "Redémarrer" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:105 | ||||
| #: ../js/ui/endSessionDialog.js:107 | ||||
| #, javascript-format | ||||
| msgid "The system will restart automatically in %d second." | ||||
| msgid_plural "The system will restart automatically in %d seconds." | ||||
| msgstr[0] "Cet ordinateur redémarrera automatiquement dans %d seconde." | ||||
| msgstr[1] "Cet ordinateur redémarrera automatiquement dans %d secondes." | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:119 | ||||
| #: ../js/ui/endSessionDialog.js:121 | ||||
| msgctxt "title" | ||||
| msgid "Restart & Install Updates" | ||||
| msgstr "Redémarrer et installer les mises à jour" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:121 | ||||
| #: ../js/ui/endSessionDialog.js:123 | ||||
| #, javascript-format | ||||
| msgid "The system will automatically restart and install updates in %d second." | ||||
| msgid_plural "" | ||||
| @@ -1149,44 +1149,44 @@ msgid_plural "" | ||||
| msgstr[0] "Le système redémarrera automatiquement dans %d seconde." | ||||
| msgstr[1] "Le système redémarrera automatiquement dans %d secondes." | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:127 | ||||
| #: ../js/ui/endSessionDialog.js:129 | ||||
| msgctxt "button" | ||||
| msgid "Restart & Install" | ||||
| msgstr "Redémarrer et installer" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:128 | ||||
| #: ../js/ui/endSessionDialog.js:130 | ||||
| msgctxt "button" | ||||
| msgid "Install & Power Off" | ||||
| msgstr "Installer et éteindre" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:129 | ||||
| #: ../js/ui/endSessionDialog.js:131 | ||||
| msgctxt "checkbox" | ||||
| msgid "Power off after updates are installed" | ||||
| msgstr "Éteindre après l'installation des mises à jour" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:338 | ||||
| #: ../js/ui/endSessionDialog.js:315 | ||||
| msgid "Running on battery power: please plug in before installing updates." | ||||
| msgstr "" | ||||
| "Fonctionnement sur batterie : veuillez vous brancher avant d'installer les " | ||||
| "mises à jour." | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:355 | ||||
| #: ../js/ui/endSessionDialog.js:332 | ||||
| msgid "Some applications are busy or have unsaved work." | ||||
| msgstr "" | ||||
| "Certaines applications sont occupées ou ont des travaux non-sauvegardés." | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:362 | ||||
| #: ../js/ui/endSessionDialog.js:339 | ||||
| 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 */ | ||||
| #: ../js/ui/endSessionDialog.js:640 | ||||
| #: ../js/ui/endSessionDialog.js:619 | ||||
| #, javascript-format | ||||
| msgid "%s (remote)" | ||||
| msgstr "%s (distant)" | ||||
|  | ||||
| #. Translators: Console here refers to a tty like a VT console */ | ||||
| #: ../js/ui/endSessionDialog.js:643 | ||||
| #: ../js/ui/endSessionDialog.js:622 | ||||
| #, javascript-format | ||||
| msgid "%s (console)" | ||||
| msgstr "%s (console)" | ||||
| @@ -1200,7 +1200,7 @@ msgstr "Installer" | ||||
| msgid "Download and install “%s” from extensions.gnome.org?" | ||||
| msgstr "Télécharger et installer « %s » à partir de extensions.gnome.org ?" | ||||
|  | ||||
| #: ../js/ui/keyboard.js:692 ../js/ui/status/keyboard.js:523 | ||||
| #: ../js/ui/keyboard.js:653 ../js/ui/status/keyboard.js:339 | ||||
| msgid "Keyboard" | ||||
| msgstr "Clavier" | ||||
|  | ||||
| @@ -1222,8 +1222,8 @@ msgstr "Masquer les erreurs" | ||||
| msgid "Show Errors" | ||||
| msgstr "Afficher les erreurs" | ||||
|  | ||||
| #: ../js/ui/lookingGlass.js:716 ../js/ui/status/location.js:71 | ||||
| #: ../js/ui/status/location.js:176 | ||||
| #: ../js/ui/lookingGlass.js:716 ../js/ui/status/location.js:62 | ||||
| #: ../js/ui/status/location.js:166 | ||||
| msgid "Enabled" | ||||
| msgstr "Activé" | ||||
|  | ||||
| @@ -1231,7 +1231,7 @@ msgstr "Activé" | ||||
| #. because it's disabled by rfkill (airplane mode) */ | ||||
| #. translators: | ||||
| #. * The device has been disabled | ||||
| #: ../js/ui/lookingGlass.js:719 ../js/ui/status/location.js:179 | ||||
| #: ../js/ui/lookingGlass.js:719 ../js/ui/status/location.js:169 | ||||
| #: ../js/ui/status/network.js:592 ../src/gvc/gvc-mixer-control.c:1830 | ||||
| msgid "Disabled" | ||||
| msgstr "Désactivé" | ||||
| @@ -1256,39 +1256,39 @@ msgstr "Afficher la source" | ||||
| msgid "Web Page" | ||||
| msgstr "Page Web" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:1326 | ||||
| #: ../js/ui/messageTray.js:1325 | ||||
| msgid "Open" | ||||
| msgstr "Ouvrir" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:1333 | ||||
| #: ../js/ui/messageTray.js:1332 | ||||
| msgid "Remove" | ||||
| msgstr "Enlever" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:1630 | ||||
| #: ../js/ui/messageTray.js:1629 | ||||
| msgid "Notifications" | ||||
| msgstr "Notifications" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:1637 | ||||
| #: ../js/ui/messageTray.js:1636 | ||||
| msgid "Clear Messages" | ||||
| msgstr "Effacer les messages" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:1656 | ||||
| #: ../js/ui/messageTray.js:1655 | ||||
| msgid "Notification Settings" | ||||
| msgstr "Paramètres de notifications" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:1709 | ||||
| #: ../js/ui/messageTray.js:1708 | ||||
| msgid "Tray Menu" | ||||
| msgstr "Menu du tiroir de messagerie" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:1926 | ||||
| #: ../js/ui/messageTray.js:1925 | ||||
| msgid "No Messages" | ||||
| msgstr "Aucun message" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:1968 | ||||
| #: ../js/ui/messageTray.js:1963 | ||||
| msgid "Message Tray" | ||||
| msgstr "Tiroir de messagerie" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:2971 | ||||
| #: ../js/ui/messageTray.js:2966 | ||||
| msgid "System Information" | ||||
| msgstr "Informations du système" | ||||
|  | ||||
| @@ -1316,7 +1316,7 @@ msgstr "Vue d'ensemble" | ||||
| #. in the search entry when no search is | ||||
| #. active; it should not exceed ~30 | ||||
| #. characters. */ | ||||
| #: ../js/ui/overview.js:246 | ||||
| #: ../js/ui/overview.js:250 | ||||
| msgid "Type to search…" | ||||
| msgstr "Rechercher…" | ||||
|  | ||||
| @@ -1379,27 +1379,27 @@ msgstr "Impossible de verrouiller" | ||||
| msgid "Lock was blocked by an application" | ||||
| msgstr "Le verrouillage a été bloqué par une application" | ||||
|  | ||||
| #: ../js/ui/search.js:594 | ||||
| #: ../js/ui/search.js:606 | ||||
| msgid "Searching…" | ||||
| msgstr "Recherche en cours…" | ||||
|  | ||||
| #: ../js/ui/search.js:596 | ||||
| #: ../js/ui/search.js:652 | ||||
| msgid "No results." | ||||
| msgstr "Aucun résultat." | ||||
|  | ||||
| #: ../js/ui/shellEntry.js:25 | ||||
| #: ../js/ui/shellEntry.js:27 | ||||
| msgid "Copy" | ||||
| msgstr "Copier" | ||||
|  | ||||
| #: ../js/ui/shellEntry.js:30 | ||||
| #: ../js/ui/shellEntry.js:32 | ||||
| msgid "Paste" | ||||
| msgstr "Coller" | ||||
|  | ||||
| #: ../js/ui/shellEntry.js:97 | ||||
| #: ../js/ui/shellEntry.js:99 | ||||
| msgid "Show Text" | ||||
| msgstr "Afficher le texte" | ||||
|  | ||||
| #: ../js/ui/shellEntry.js:99 | ||||
| #: ../js/ui/shellEntry.js:101 | ||||
| msgid "Hide Text" | ||||
| msgstr "Masquer le texte" | ||||
|  | ||||
| @@ -1485,27 +1485,23 @@ msgstr "Non connecté" | ||||
| msgid "Brightness" | ||||
| msgstr "Luminosité" | ||||
|  | ||||
| #: ../js/ui/status/keyboard.js:547 | ||||
| #: ../js/ui/status/keyboard.js:406 | ||||
| msgid "Show Keyboard Layout" | ||||
| msgstr "Afficher la disposition du clavier" | ||||
|  | ||||
| #: ../js/ui/status/location.js:65 | ||||
| #: ../js/ui/status/location.js:56 | ||||
| msgid "Location" | ||||
| msgstr "Localisation" | ||||
|  | ||||
| #: ../js/ui/status/location.js:72 ../js/ui/status/location.js:177 | ||||
| #: ../js/ui/status/location.js:63 ../js/ui/status/location.js:167 | ||||
| msgid "Disable" | ||||
| msgstr "Désactiver" | ||||
|  | ||||
| #: ../js/ui/status/location.js:73 | ||||
| msgid "Privacy Settings" | ||||
| msgstr "Paramètres de confidentialité" | ||||
|  | ||||
| #: ../js/ui/status/location.js:176 | ||||
| #: ../js/ui/status/location.js:166 | ||||
| msgid "In Use" | ||||
| msgstr "En cours d'utilisation" | ||||
|  | ||||
| #: ../js/ui/status/location.js:180 | ||||
| #: ../js/ui/status/location.js:170 | ||||
| msgid "Enable" | ||||
| msgstr "Activer" | ||||
|  | ||||
| @@ -1740,11 +1736,11 @@ msgstr "Se connecter en tant qu'autre utilisateur" | ||||
| msgid "Unlock Window" | ||||
| msgstr "Fenêtre de déverrouillage" | ||||
|  | ||||
| #: ../js/ui/viewSelector.js:158 | ||||
| #: ../js/ui/viewSelector.js:232 | ||||
| msgid "Applications" | ||||
| msgstr "Applications" | ||||
|  | ||||
| #: ../js/ui/viewSelector.js:162 | ||||
| #: ../js/ui/viewSelector.js:236 | ||||
| msgid "Search" | ||||
| msgstr "Recherche" | ||||
|  | ||||
| @@ -1841,20 +1837,20 @@ msgstr[1] "%u entrées" | ||||
| msgid "System Sounds" | ||||
| msgstr "Sons système" | ||||
|  | ||||
| #: ../src/main.c:373 | ||||
| #: ../src/main.c:371 | ||||
| msgid "Print version" | ||||
| msgstr "Affiche la version" | ||||
|  | ||||
| #: ../src/main.c:379 | ||||
| #: ../src/main.c:377 | ||||
| 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:383 | ||||
| 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:389 | ||||
| msgid "List possible modes" | ||||
| msgstr "Lister les modes possibles" | ||||
|  | ||||
|   | ||||
							
								
								
									
										308
									
								
								po/gl.po
									
									
									
									
									
								
							
							
						
						
									
										308
									
								
								po/gl.po
									
									
									
									
									
								
							| @@ -11,8 +11,8 @@ msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: gnome-shell master\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2014-09-23 01:50+0200\n" | ||||
| "PO-Revision-Date: 2014-09-23 01:51+0200\n" | ||||
| "POT-Creation-Date: 2014-08-25 23:06+0200\n" | ||||
| "PO-Revision-Date: 2014-08-25 23:08+0200\n" | ||||
| "Last-Translator: Fran Dieguez <frandieguez@gnome.org>\n" | ||||
| "Language-Team: gnome-l10n-gl@gnome.org\n" | ||||
| "Language: gl\n" | ||||
| @@ -300,17 +300,17 @@ msgstr "Atrasar os cambios de foco no modo rato até que o punteiro se pare" | ||||
| msgid "Captive Portal" | ||||
| msgstr "Portal cautivo" | ||||
|  | ||||
| #: ../js/extensionPrefs/main.js:123 | ||||
| #: ../js/extensionPrefs/main.js:127 | ||||
| #, javascript-format | ||||
| msgid "There was an error loading the preferences dialog for %s:" | ||||
| msgstr "Produciuse un erro ao cargar o diálogo de preferenzas para %s:" | ||||
|  | ||||
| #: ../js/extensionPrefs/main.js:155 | ||||
| #: ../js/extensionPrefs/main.js:159 | ||||
| msgid "GNOME Shell Extensions" | ||||
| msgstr "Extensións de GNOME Shell" | ||||
|  | ||||
| #: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:143 | ||||
| #: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:452 | ||||
| #: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:429 | ||||
| #: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399 | ||||
| #: ../js/ui/status/network.js:915 | ||||
| msgid "Cancel" | ||||
| @@ -334,23 +334,15 @@ msgstr "Iniciar sesión" | ||||
| msgid "Choose Session" | ||||
| msgstr "Escolla unha sesión" | ||||
|  | ||||
| #. 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:429 | ||||
| msgid "Not listed?" | ||||
| 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:614 | ||||
| #, javascript-format | ||||
| msgid "(e.g., user or %s)" | ||||
| 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:619 ../js/ui/components/networkAgent.js:269 | ||||
| #: ../js/ui/components/networkAgent.js:287 | ||||
| msgid "Username: " | ||||
| @@ -364,11 +356,6 @@ msgstr "Xanela de inicio de sesión" | ||||
| msgid "Authentication error" | ||||
| msgstr "Erro de autenticación" | ||||
|  | ||||
| #. 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:453 | ||||
| msgid "(or swipe finger)" | ||||
| msgstr "(ou pase o dedo)" | ||||
| @@ -377,8 +364,6 @@ msgstr "(ou pase o dedo)" | ||||
| msgid "Command not found" | ||||
| msgstr "Orde non atopada" | ||||
|  | ||||
| #. Replace "Error invoking GLib.shell_parse_argv: " with | ||||
| #. something nicer | ||||
| #: ../js/misc/util.js:148 | ||||
| msgid "Could not parse command:" | ||||
| msgstr "Non foi posíbel analizar a orde:" | ||||
| @@ -388,46 +373,44 @@ msgstr "Non foi posíbel analizar a orde:" | ||||
| msgid "Execution of “%s” failed:" | ||||
| msgstr "Produciuse un fallo na execución de «%s»:" | ||||
|  | ||||
| #. TRANSLATORS: this is the title of the wifi captive portal login | ||||
| #. window, until we know the title of the actual login page | ||||
| #: ../js/portalHelper/main.js:85 | ||||
| msgid "Web Authentication Redirect" | ||||
| msgstr "Redirección web de autenticación" | ||||
|  | ||||
| #: ../js/ui/appDisplay.js:772 | ||||
| #: ../js/ui/appDisplay.js:660 | ||||
| msgid "Frequently used applications will appear here" | ||||
| msgstr "Os aplicativos usados recentemente aparecerán aquí" | ||||
|  | ||||
| #: ../js/ui/appDisplay.js:883 | ||||
| #: ../js/ui/appDisplay.js:771 | ||||
| msgid "Frequent" | ||||
| msgstr "Frecuentes" | ||||
|  | ||||
| #: ../js/ui/appDisplay.js:890 | ||||
| #: ../js/ui/appDisplay.js:778 | ||||
| msgid "All" | ||||
| msgstr "Todos" | ||||
|  | ||||
| #: ../js/ui/appDisplay.js:1790 | ||||
| #: ../js/ui/appDisplay.js:1650 | ||||
| msgid "New Window" | ||||
| msgstr "Xanela nova" | ||||
|  | ||||
| #: ../js/ui/appDisplay.js:1816 ../js/ui/dash.js:285 | ||||
| #: ../js/ui/appDisplay.js:1673 ../js/ui/dash.js:285 | ||||
| msgid "Remove from Favorites" | ||||
| msgstr "Retirar dos marcadores" | ||||
|  | ||||
| #: ../js/ui/appDisplay.js:1822 | ||||
| #: ../js/ui/appDisplay.js:1679 | ||||
| msgid "Add to Favorites" | ||||
| msgstr "Engadir aos favoritos" | ||||
|  | ||||
| #: ../js/ui/appDisplay.js:1831 | ||||
| #: ../js/ui/appDisplay.js:1688 | ||||
| msgid "Show Details" | ||||
| msgstr "Mostrar detalles" | ||||
|  | ||||
| #: ../js/ui/appFavorites.js:132 | ||||
| #: ../js/ui/appFavorites.js:122 | ||||
| #, javascript-format | ||||
| msgid "%s has been added to your favorites." | ||||
| msgstr "%s foi engadido aos seus favoritos." | ||||
|  | ||||
| #: ../js/ui/appFavorites.js:166 | ||||
| #: ../js/ui/appFavorites.js:156 | ||||
| #, javascript-format | ||||
| msgid "%s has been removed from your favorites." | ||||
| msgstr "%s retirouse dos seus marcadores." | ||||
| @@ -443,14 +426,14 @@ msgstr "Cambiar fondo de escritorio…" | ||||
|  | ||||
| #. 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:67 | ||||
| msgctxt "event list time" | ||||
| msgid "All Day" | ||||
| msgstr "Todo o día" | ||||
|  | ||||
| #. Translators: Shown in calendar event list, if 24h format, | ||||
| #. \u2236 is a ratio character, similar to : | ||||
| #. \u2236 is a ratio character, similar to : */ | ||||
| #: ../js/ui/calendar.js:73 | ||||
| msgctxt "event list time" | ||||
| msgid "%H∶%M" | ||||
| @@ -458,7 +441,7 @@ msgstr "%H∶%M" | ||||
|  | ||||
| #. Translators: Shown in calendar event list, if 12h format, | ||||
| #. \u2236 is a ratio character, similar to : and \u2009 is | ||||
| #. a thin space | ||||
| #. a thin space */ | ||||
| #: ../js/ui/calendar.js:82 | ||||
| msgctxt "event list time" | ||||
| msgid "%l∶%M %p" | ||||
| @@ -468,43 +451,43 @@ msgstr "%l∶%M %p" | ||||
| #. * | ||||
| #. * NOTE: These grid abbreviations are always shown together | ||||
| #. * and in order, e.g. "S M T W T F S". | ||||
| #. | ||||
| #. */ | ||||
| #: ../js/ui/calendar.js:113 | ||||
| msgctxt "grid sunday" | ||||
| msgid "S" | ||||
| msgstr "D" | ||||
|  | ||||
| #. Translators: Calendar grid abbreviation for Monday | ||||
| #. Translators: Calendar grid abbreviation for Monday */ | ||||
| #: ../js/ui/calendar.js:115 | ||||
| msgctxt "grid monday" | ||||
| msgid "M" | ||||
| msgstr "L" | ||||
|  | ||||
| #. Translators: Calendar grid abbreviation for Tuesday | ||||
| #. Translators: Calendar grid abbreviation for Tuesday */ | ||||
| #: ../js/ui/calendar.js:117 | ||||
| msgctxt "grid tuesday" | ||||
| msgid "T" | ||||
| msgstr "M" | ||||
|  | ||||
| #. Translators: Calendar grid abbreviation for Wednesday | ||||
| #. Translators: Calendar grid abbreviation for Wednesday */ | ||||
| #: ../js/ui/calendar.js:119 | ||||
| msgctxt "grid wednesday" | ||||
| msgid "W" | ||||
| msgstr "W" | ||||
|  | ||||
| #. Translators: Calendar grid abbreviation for Thursday | ||||
| #. Translators: Calendar grid abbreviation for Thursday */ | ||||
| #: ../js/ui/calendar.js:121 | ||||
| msgctxt "grid thursday" | ||||
| msgid "T" | ||||
| msgstr "X" | ||||
|  | ||||
| #. Translators: Calendar grid abbreviation for Friday | ||||
| #. Translators: Calendar grid abbreviation for Friday */ | ||||
| #: ../js/ui/calendar.js:123 | ||||
| msgctxt "grid friday" | ||||
| msgid "F" | ||||
| msgstr "V" | ||||
|  | ||||
| #. Translators: Calendar grid abbreviation for Saturday | ||||
| #. Translators: Calendar grid abbreviation for Saturday */ | ||||
| #: ../js/ui/calendar.js:125 | ||||
| msgctxt "grid saturday" | ||||
| msgid "S" | ||||
| @@ -515,43 +498,43 @@ msgstr "S" | ||||
| #. * NOTE: These list abbreviations are normally not shown together | ||||
| #. * so they need to be unique (e.g. Tuesday and Thursday cannot | ||||
| #. * both be 'T'). | ||||
| #. | ||||
| #. */ | ||||
| #: ../js/ui/calendar.js:138 | ||||
| msgctxt "list sunday" | ||||
| msgid "Su" | ||||
| msgstr "Do" | ||||
|  | ||||
| #. Translators: Event list abbreviation for Monday | ||||
| #. Translators: Event list abbreviation for Monday */ | ||||
| #: ../js/ui/calendar.js:140 | ||||
| msgctxt "list monday" | ||||
| msgid "M" | ||||
| msgstr "L" | ||||
|  | ||||
| #. Translators: Event list abbreviation for Tuesday | ||||
| #. Translators: Event list abbreviation for Tuesday */ | ||||
| #: ../js/ui/calendar.js:142 | ||||
| msgctxt "list tuesday" | ||||
| msgid "T" | ||||
| msgstr "M" | ||||
|  | ||||
| #. Translators: Event list abbreviation for Wednesday | ||||
| #. Translators: Event list abbreviation for Wednesday */ | ||||
| #: ../js/ui/calendar.js:144 | ||||
| msgctxt "list wednesday" | ||||
| msgid "W" | ||||
| msgstr "W" | ||||
|  | ||||
| #. Translators: Event list abbreviation for Thursday | ||||
| #. Translators: Event list abbreviation for Thursday */ | ||||
| #: ../js/ui/calendar.js:146 | ||||
| msgctxt "list thursday" | ||||
| msgid "Th" | ||||
| msgstr "X" | ||||
|  | ||||
| #. Translators: Event list abbreviation for Friday | ||||
| #. Translators: Event list abbreviation for Friday */ | ||||
| #: ../js/ui/calendar.js:148 | ||||
| msgctxt "list friday" | ||||
| msgid "F" | ||||
| msgstr "V" | ||||
|  | ||||
| #. Translators: Event list abbreviation for Saturday | ||||
| #. Translators: Event list abbreviation for Saturday */ | ||||
| #: ../js/ui/calendar.js:150 | ||||
| msgctxt "list saturday" | ||||
| msgid "S" | ||||
| @@ -565,18 +548,18 @@ msgstr "Anterior mes" | ||||
| msgid "Next month" | ||||
| msgstr "Seguinte mes" | ||||
|  | ||||
| #. Translators: Text to show if there are no events | ||||
| #. Translators: Text to show if there are no events */ | ||||
| #: ../js/ui/calendar.js:781 | ||||
| msgid "Nothing Scheduled" | ||||
| msgstr "Nada programado" | ||||
|  | ||||
| #. Translators: Shown on calendar heading when selected day occurs on current year | ||||
| #. Translators: Shown on calendar heading when selected day occurs on current year */ | ||||
| #: ../js/ui/calendar.js:799 | ||||
| msgctxt "calendar heading" | ||||
| msgid "%A, %B %d" | ||||
| msgstr "%A, %d de %B" | ||||
|  | ||||
| #. Translators: Shown on calendar heading when selected day occurs on different year | ||||
| #. Translators: Shown on calendar heading when selected day occurs on different year */ | ||||
| #: ../js/ui/calendar.js:802 | ||||
| msgctxt "calendar heading" | ||||
| msgid "%A, %B %d, %Y" | ||||
| @@ -619,11 +602,11 @@ msgstr "Abrir con %s" | ||||
| msgid "Eject" | ||||
| msgstr "Expulsar" | ||||
|  | ||||
| #: ../js/ui/components/keyring.js:94 ../js/ui/components/polkitAgent.js:285 | ||||
| #: ../js/ui/components/keyring.js:93 ../js/ui/components/polkitAgent.js:285 | ||||
| msgid "Password:" | ||||
| msgstr "Contrasinal:" | ||||
|  | ||||
| #: ../js/ui/components/keyring.js:120 | ||||
| #: ../js/ui/components/keyring.js:113 | ||||
| msgid "Type again:" | ||||
| msgstr "Escriba de novo:" | ||||
|  | ||||
| @@ -632,7 +615,6 @@ msgstr "Escriba de novo:" | ||||
| msgid "Connect" | ||||
| msgstr "Conectar" | ||||
|  | ||||
| #. Cisco LEAP | ||||
| #: ../js/ui/components/networkAgent.js:231 | ||||
| #: ../js/ui/components/networkAgent.js:243 | ||||
| #: ../js/ui/components/networkAgent.js:271 | ||||
| @@ -641,7 +623,6 @@ msgstr "Conectar" | ||||
| msgid "Password: " | ||||
| msgstr "Contrasinal: " | ||||
|  | ||||
| #. static WEP | ||||
| #: ../js/ui/components/networkAgent.js:236 | ||||
| msgid "Key: " | ||||
| msgstr "Chave: " | ||||
| @@ -719,23 +700,19 @@ msgstr "Autenticar" | ||||
| #. 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:271 ../js/ui/shellMountOperation.js:383 | ||||
| msgid "Sorry, that didn't work. Please try again." | ||||
| msgstr "Desculpe, iso non funcionou. Ténteo de novo." | ||||
|  | ||||
| #. FIXME: We don't have a 'chat room' icon (bgo #653737) use | ||||
| #. system-users for now as Empathy does. | ||||
| #: ../js/ui/components/telepathyClient.js:240 | ||||
| msgid "Invitation" | ||||
| msgstr "Convite" | ||||
|  | ||||
| #. We got the TpContact | ||||
| #: ../js/ui/components/telepathyClient.js:300 | ||||
| msgid "Call" | ||||
| msgstr "Chamar" | ||||
|  | ||||
| #. We got the TpContact | ||||
| #: ../js/ui/components/telepathyClient.js:316 | ||||
| msgid "File Transfer" | ||||
| msgstr "Transferencia de ficheiro" | ||||
| @@ -752,85 +729,77 @@ msgstr "Desactivar silencio" | ||||
| msgid "Mute" | ||||
| msgstr "Silenciar" | ||||
|  | ||||
| #. Translators: Time in 24h format | ||||
| #. Translators: Time in 24h format */ | ||||
| #: ../js/ui/components/telepathyClient.js:953 | ||||
| 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/ui/components/telepathyClient.js:960 | ||||
| #, no-c-format | ||||
| msgid "Yesterday, %H∶%M" | ||||
| msgstr "Onte, %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/ui/components/telepathyClient.js:967 | ||||
| #, no-c-format | ||||
| msgid "%A, %H∶%M" | ||||
| msgstr "%A ás %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/ui/components/telepathyClient.js:974 | ||||
| #, no-c-format | ||||
| msgid "%B %d, %H∶%M" | ||||
| msgstr "%d de %B ás %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/ui/components/telepathyClient.js:980 | ||||
| #, no-c-format | ||||
| msgid "%B %d %Y, %H∶%M" | ||||
| msgstr "%d de %B de %Y ás %H:%M" | ||||
|  | ||||
| #. Translators: Time in 24h format | ||||
| #. Translators: Time in 24h format */ | ||||
| #: ../js/ui/components/telepathyClient.js:986 | ||||
| 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/ui/components/telepathyClient.js:993 | ||||
| #, no-c-format | ||||
| msgid "Yesterday, %l∶%M %p" | ||||
| msgstr "Onte, %H:%M" | ||||
|  | ||||
| #. 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/ui/components/telepathyClient.js:1000 | ||||
| #, 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/ui/components/telepathyClient.js:1007 | ||||
| #, no-c-format | ||||
| msgid "%B %d, %l∶%M %p" | ||||
| msgstr "%d de %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/ui/components/telepathyClient.js:1013 | ||||
| #, no-c-format | ||||
| msgid "%B %d %Y, %l∶%M %p" | ||||
| msgstr "%d de %B de %Y, %l∶%M %p" | ||||
|  | ||||
| #. Translators: this is the other person changing their old IM name to their new | ||||
| #. IM name. | ||||
| #. IM name. */ | ||||
| #: ../js/ui/components/telepathyClient.js:1045 | ||||
| #, javascript-format | ||||
| msgid "%s is now known as %s" | ||||
| msgstr "Agora %s chámase %s" | ||||
|  | ||||
| #. translators: argument is a room name like | ||||
| #. * room@jabber.org for example. | ||||
| #. * room@jabber.org for example. */ | ||||
| #: ../js/ui/components/telepathyClient.js:1149 | ||||
| #, javascript-format | ||||
| msgid "Invitation to %s" | ||||
| @@ -838,7 +807,7 @@ msgstr "Convite a %s" | ||||
|  | ||||
| #. translators: first argument is the name of a contact and the second | ||||
| #. * one the name of a room. "Alice is inviting you to join room@jabber.org | ||||
| #. * for example. | ||||
| #. * for example. */ | ||||
| #: ../js/ui/components/telepathyClient.js:1157 | ||||
| #, javascript-format | ||||
| msgid "%s is inviting you to join %s" | ||||
| @@ -857,19 +826,19 @@ msgstr "Rexeitar" | ||||
| msgid "Accept" | ||||
| msgstr "Aceptar" | ||||
|  | ||||
| #. translators: argument is a contact name like Alice for example. | ||||
| #. translators: argument is a contact name like Alice for example. */ | ||||
| #: ../js/ui/components/telepathyClient.js:1184 | ||||
| #, javascript-format | ||||
| msgid "Video call from %s" | ||||
| msgstr "Videochamada de %s" | ||||
|  | ||||
| #. translators: argument is a contact name like Alice for example. | ||||
| #. translators: argument is a contact name like Alice for example. */ | ||||
| #: ../js/ui/components/telepathyClient.js:1187 | ||||
| #, javascript-format | ||||
| msgid "Call from %s" | ||||
| msgstr "Chamada de %s" | ||||
|  | ||||
| #. translators: this is a button label (verb), not a noun | ||||
| #. translators: this is a button label (verb), not a noun */ | ||||
| #: ../js/ui/components/telepathyClient.js:1201 | ||||
| msgid "Answer" | ||||
| msgstr "Responder" | ||||
| @@ -878,13 +847,13 @@ msgstr "Responder" | ||||
| #. * the contact's alias and the second one is the | ||||
| #. * file name. The string will be something | ||||
| #. * like: "Alice is sending you test.ogg" | ||||
| #. | ||||
| #. */ | ||||
| #: ../js/ui/components/telepathyClient.js:1222 | ||||
| #, javascript-format | ||||
| msgid "%s is sending you %s" | ||||
| msgstr "%s esta enviándolle %s" | ||||
|  | ||||
| #. To translators: The parameter is the contact's alias | ||||
| #. To translators: The parameter is the contact's alias */ | ||||
| #: ../js/ui/components/telepathyClient.js:1251 | ||||
| #, javascript-format | ||||
| msgid "%s would like permission to see when you are online" | ||||
| @@ -998,7 +967,7 @@ msgid "Internal error" | ||||
| msgstr "Erro interno" | ||||
|  | ||||
| #. translators: argument is the account name, like | ||||
| #. * name@jabber.org for example. | ||||
| #. * name@jabber.org for example. */ | ||||
| #: ../js/ui/components/telepathyClient.js:1393 | ||||
| #, javascript-format | ||||
| msgid "Unable to connect to %s" | ||||
| @@ -1012,7 +981,7 @@ msgstr "Ver conta" | ||||
| msgid "Unknown reason" | ||||
| msgstr "Razón descoñecida" | ||||
|  | ||||
| #: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:154 | ||||
| #: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:228 | ||||
| msgid "Windows" | ||||
| msgstr "Xanelas" | ||||
|  | ||||
| @@ -1020,8 +989,6 @@ msgstr "Xanelas" | ||||
| msgid "Show Applications" | ||||
| msgstr "Mostrar aplicativos" | ||||
|  | ||||
| #. Translators: this is the name of the dock/favorites area on | ||||
| #. the left of the overview | ||||
| #: ../js/ui/dash.js:445 | ||||
| msgid "Dash" | ||||
| msgstr "Taboleiro" | ||||
| @@ -1040,91 +1007,91 @@ msgstr "Preferencias de data e hora" | ||||
|  | ||||
| #. 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:204 | ||||
| msgid "%A %B %e, %Y" | ||||
| msgstr "%a, %e de %B, %Y" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:64 | ||||
| #: ../js/ui/endSessionDialog.js:66 | ||||
| #, javascript-format | ||||
| msgctxt "title" | ||||
| msgid "Log Out %s" | ||||
| msgstr "Saír da sesión %s" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:65 | ||||
| #: ../js/ui/endSessionDialog.js:67 | ||||
| msgctxt "title" | ||||
| msgid "Log Out" | ||||
| msgstr "Saír da sesión" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:67 | ||||
| #: ../js/ui/endSessionDialog.js:69 | ||||
| #, javascript-format | ||||
| msgid "%s will be logged out automatically in %d second." | ||||
| msgid_plural "%s will be logged out automatically in %d seconds." | ||||
| msgstr[0] "Vaise pechar a sesión de %s en %d segundo." | ||||
| msgstr[1] "Vaise pechar a sesión de %s en %d segundos." | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:72 | ||||
| #: ../js/ui/endSessionDialog.js:74 | ||||
| #, javascript-format | ||||
| msgid "You will be logged out automatically in %d second." | ||||
| msgid_plural "You will be logged out automatically in %d seconds." | ||||
| msgstr[0] "A súa sesión pecharase automaticamente en %d segundo." | ||||
| msgstr[1] "A súa sesión pecharase automaticamente en %d segundos." | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:78 | ||||
| #: ../js/ui/endSessionDialog.js:80 | ||||
| msgctxt "button" | ||||
| msgid "Log Out" | ||||
| msgstr "Saír da sesión" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:84 | ||||
| #: ../js/ui/endSessionDialog.js:86 | ||||
| msgctxt "title" | ||||
| msgid "Power Off" | ||||
| msgstr "Apagar" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:85 | ||||
| #: ../js/ui/endSessionDialog.js:87 | ||||
| msgctxt "title" | ||||
| msgid "Install Updates & Power Off" | ||||
| msgstr "Instalar anovacións e apagar" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:87 | ||||
| #: ../js/ui/endSessionDialog.js:89 | ||||
| #, javascript-format | ||||
| msgid "The system will power off automatically in %d second." | ||||
| msgid_plural "The system will power off automatically in %d seconds." | ||||
| msgstr[0] "O sistema apagarase automaticamente en %d segundo." | ||||
| msgstr[1] "O sistema apagarase automaticamente en %d segundos." | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:91 | ||||
| #: ../js/ui/endSessionDialog.js:93 | ||||
| msgctxt "checkbox" | ||||
| msgid "Install pending software updates" | ||||
| msgstr "Instalar anovacións de software pendentes" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:94 ../js/ui/endSessionDialog.js:111 | ||||
| #: ../js/ui/endSessionDialog.js:96 ../js/ui/endSessionDialog.js:113 | ||||
| msgctxt "button" | ||||
| msgid "Restart" | ||||
| msgstr "Reiniciar" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:96 | ||||
| #: ../js/ui/endSessionDialog.js:98 | ||||
| msgctxt "button" | ||||
| msgid "Power Off" | ||||
| msgstr "Apagar" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:103 | ||||
| #: ../js/ui/endSessionDialog.js:105 | ||||
| msgctxt "title" | ||||
| msgid "Restart" | ||||
| msgstr "Reiniciar" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:105 | ||||
| #: ../js/ui/endSessionDialog.js:107 | ||||
| #, javascript-format | ||||
| msgid "The system will restart automatically in %d second." | ||||
| msgid_plural "The system will restart automatically in %d seconds." | ||||
| msgstr[0] "O sistema reiniciarase automaticamente en %d segundo." | ||||
| msgstr[1] "O sistema reiniciarase automaticamente en %d segundos." | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:119 | ||||
| #: ../js/ui/endSessionDialog.js:121 | ||||
| msgctxt "title" | ||||
| msgid "Restart & Install Updates" | ||||
| msgstr "Reiniciar e instalar actualizacións" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:121 | ||||
| #: ../js/ui/endSessionDialog.js:123 | ||||
| #, javascript-format | ||||
| msgid "The system will automatically restart and install updates in %d second." | ||||
| msgid_plural "" | ||||
| @@ -1136,41 +1103,41 @@ msgstr[1] "" | ||||
| "O sistema reiniciarase automaticamente e instalará as actualizacións en %d " | ||||
| "segundos." | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:127 | ||||
| #: ../js/ui/endSessionDialog.js:129 | ||||
| msgctxt "button" | ||||
| msgid "Restart & Install" | ||||
| msgstr "Reiniciar e instalar" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:128 | ||||
| #: ../js/ui/endSessionDialog.js:130 | ||||
| msgctxt "button" | ||||
| msgid "Install & Power Off" | ||||
| msgstr "Instalar e apagar" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:129 | ||||
| #: ../js/ui/endSessionDialog.js:131 | ||||
| msgctxt "checkbox" | ||||
| msgid "Power off after updates are installed" | ||||
| msgstr "Apagar despois de instalar as anovacións" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:338 | ||||
| #: ../js/ui/endSessionDialog.js:315 | ||||
| msgid "Running on battery power: please plug in before installing updates." | ||||
| msgstr "Con enerxía da batería: enchufar antes de instalar anovacións." | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:355 | ||||
| #: ../js/ui/endSessionDialog.js:332 | ||||
| msgid "Some applications are busy or have unsaved work." | ||||
| msgstr "Algúns aplicativos están ocupados ou teñen traballo sen gardar." | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:362 | ||||
| #: ../js/ui/endSessionDialog.js:339 | ||||
| msgid "Other users are logged in." | ||||
| msgstr "Hai outros usuarios conectados." | ||||
|  | ||||
| #. Translators: Remote here refers to a remote session, like a ssh login | ||||
| #: ../js/ui/endSessionDialog.js:640 | ||||
| #. Translators: Remote here refers to a remote session, like a ssh login */ | ||||
| #: ../js/ui/endSessionDialog.js:619 | ||||
| #, javascript-format | ||||
| msgid "%s (remote)" | ||||
| msgstr "%s (remoto)" | ||||
|  | ||||
| #. Translators: Console here refers to a tty like a VT console | ||||
| #: ../js/ui/endSessionDialog.js:643 | ||||
| #. Translators: Console here refers to a tty like a VT console */ | ||||
| #: ../js/ui/endSessionDialog.js:622 | ||||
| #, javascript-format | ||||
| msgid "%s (console)" | ||||
| msgstr "%s (consola)" | ||||
| @@ -1184,7 +1151,7 @@ msgstr "Instalar" | ||||
| msgid "Download and install “%s” from extensions.gnome.org?" | ||||
| msgstr "Desexa descargar e instalar «%s» desde extensions.gnome.org?" | ||||
|  | ||||
| #: ../js/ui/keyboard.js:692 ../js/ui/status/keyboard.js:523 | ||||
| #: ../js/ui/keyboard.js:653 ../js/ui/status/keyboard.js:339 | ||||
| msgid "Keyboard" | ||||
| msgstr "Teclado" | ||||
|  | ||||
| @@ -1192,7 +1159,7 @@ msgstr "Teclado" | ||||
| msgid "No extensions installed" | ||||
| msgstr "Non hai ningunha extensión instalada" | ||||
|  | ||||
| #. 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." | ||||
| @@ -1206,16 +1173,16 @@ msgstr "Ocultar erros" | ||||
| msgid "Show Errors" | ||||
| msgstr "Mostrar erros" | ||||
|  | ||||
| #: ../js/ui/lookingGlass.js:716 ../js/ui/status/location.js:71 | ||||
| #: ../js/ui/status/location.js:176 | ||||
| #: ../js/ui/lookingGlass.js:716 ../js/ui/status/location.js:62 | ||||
| #: ../js/ui/status/location.js:166 | ||||
| msgid "Enabled" | ||||
| msgstr "Activado" | ||||
|  | ||||
| #. Translators: this is for a network device that cannot be activated | ||||
| #. because it's disabled by rfkill (airplane mode) | ||||
| #. because it's disabled by rfkill (airplane mode) */ | ||||
| #. translators: | ||||
| #. * The device has been disabled | ||||
| #: ../js/ui/lookingGlass.js:719 ../js/ui/status/location.js:179 | ||||
| #: ../js/ui/lookingGlass.js:719 ../js/ui/status/location.js:169 | ||||
| #: ../js/ui/status/network.js:592 ../src/gvc/gvc-mixer-control.c:1830 | ||||
| msgid "Disabled" | ||||
| msgstr "Desactivado" | ||||
| @@ -1240,39 +1207,39 @@ msgstr "Ver fonte" | ||||
| msgid "Web Page" | ||||
| msgstr "Páxina web" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:1327 | ||||
| #: ../js/ui/messageTray.js:1325 | ||||
| msgid "Open" | ||||
| msgstr "Abrir" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:1334 | ||||
| #: ../js/ui/messageTray.js:1332 | ||||
| msgid "Remove" | ||||
| msgstr "Retirar" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:1631 | ||||
| #: ../js/ui/messageTray.js:1629 | ||||
| msgid "Notifications" | ||||
| msgstr "Notificacións" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:1638 | ||||
| #: ../js/ui/messageTray.js:1636 | ||||
| msgid "Clear Messages" | ||||
| msgstr "Limpar mensaxes" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:1657 | ||||
| #: ../js/ui/messageTray.js:1655 | ||||
| msgid "Notification Settings" | ||||
| msgstr "Preferencias das notificacións" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:1710 | ||||
| #: ../js/ui/messageTray.js:1708 | ||||
| msgid "Tray Menu" | ||||
| msgstr "Menú da bandexa do sistema" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:1934 | ||||
| #: ../js/ui/messageTray.js:1925 | ||||
| msgid "No Messages" | ||||
| msgstr "Non hai mensaxes" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:1979 | ||||
| #: ../js/ui/messageTray.js:1963 | ||||
| msgid "Message Tray" | ||||
| msgstr "Bandexa de mensaxes" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:2992 | ||||
| #: ../js/ui/messageTray.js:2966 | ||||
| msgid "System Information" | ||||
| msgstr "Información do sistema" | ||||
|  | ||||
| @@ -1299,8 +1266,8 @@ msgstr "Vista xeral" | ||||
| #. Translators: this is the text displayed | ||||
| #. in the search entry when no search is | ||||
| #. active; it should not exceed ~30 | ||||
| #. characters. | ||||
| #: ../js/ui/overview.js:246 | ||||
| #. characters. */ | ||||
| #: ../js/ui/overview.js:250 | ||||
| msgid "Type to search…" | ||||
| msgstr "Escriba para buscar…" | ||||
|  | ||||
| @@ -1309,7 +1276,7 @@ msgid "Quit" | ||||
| msgstr "Saír" | ||||
|  | ||||
| #. 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:567 | ||||
| msgid "Activities" | ||||
| msgstr "Actividades" | ||||
| @@ -1318,11 +1285,6 @@ msgstr "Actividades" | ||||
| msgid "Top Bar" | ||||
| msgstr "Barra superior" | ||||
|  | ||||
| #. 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:269 | ||||
| msgid "toggle-switch-us" | ||||
| msgstr "toggle-switch-intl" | ||||
| @@ -1340,7 +1302,7 @@ msgid "Restarting…" | ||||
| msgstr "Restimando…" | ||||
|  | ||||
| #. Translators: This is a time format for a date in | ||||
| #. long format | ||||
| #. long format */ | ||||
| #: ../js/ui/screenShield.js:88 | ||||
| msgid "%A, %B %d" | ||||
| msgstr "%A, %d de %B" | ||||
| @@ -1360,13 +1322,6 @@ msgstr "Bloquear" | ||||
| msgid "GNOME needs to lock the screen" | ||||
| msgstr "GNOME precisa bloquear a pantalla" | ||||
|  | ||||
| #. 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:833 ../js/ui/screenShield.js:1304 | ||||
| msgid "Unable to lock" | ||||
| msgstr "Non foi posíbel bloquear" | ||||
| @@ -1375,27 +1330,27 @@ msgstr "Non foi posíbel bloquear" | ||||
| msgid "Lock was blocked by an application" | ||||
| msgstr "Un aplicativo impediu o bloqueo" | ||||
|  | ||||
| #: ../js/ui/search.js:594 | ||||
| #: ../js/ui/search.js:606 | ||||
| msgid "Searching…" | ||||
| msgstr "Buscando…" | ||||
|  | ||||
| #: ../js/ui/search.js:596 | ||||
| #: ../js/ui/search.js:652 | ||||
| msgid "No results." | ||||
| msgstr "Sen resultados." | ||||
|  | ||||
| #: ../js/ui/shellEntry.js:25 | ||||
| #: ../js/ui/shellEntry.js:27 | ||||
| msgid "Copy" | ||||
| msgstr "Copiar" | ||||
|  | ||||
| #: ../js/ui/shellEntry.js:30 | ||||
| #: ../js/ui/shellEntry.js:32 | ||||
| msgid "Paste" | ||||
| msgstr "Pegar" | ||||
|  | ||||
| #: ../js/ui/shellEntry.js:97 | ||||
| #: ../js/ui/shellEntry.js:99 | ||||
| msgid "Show Text" | ||||
| msgstr "Mostrar texto" | ||||
|  | ||||
| #: ../js/ui/shellEntry.js:99 | ||||
| #: ../js/ui/shellEntry.js:101 | ||||
| msgid "Hide Text" | ||||
| msgstr "Ocultar texto" | ||||
|  | ||||
| @@ -1451,8 +1406,6 @@ msgstr "Contraste alto" | ||||
| msgid "Large Text" | ||||
| msgstr "Texto grande" | ||||
|  | ||||
| #. The Bluetooth menu only appears when Bluetooth is in use, | ||||
| #. so just statically build it with a "Turn Off" menu item. | ||||
| #: ../js/ui/status/bluetooth.js:49 | ||||
| msgid "Bluetooth" | ||||
| msgstr "Bluetooth" | ||||
| @@ -1483,27 +1436,23 @@ msgstr "Non conectado" | ||||
| msgid "Brightness" | ||||
| msgstr "Brillo" | ||||
|  | ||||
| #: ../js/ui/status/keyboard.js:547 | ||||
| #: ../js/ui/status/keyboard.js:406 | ||||
| msgid "Show Keyboard Layout" | ||||
| msgstr "Mostrar a distribución do teclado" | ||||
|  | ||||
| #: ../js/ui/status/location.js:65 | ||||
| #: ../js/ui/status/location.js:56 | ||||
| msgid "Location" | ||||
| msgstr "Localización" | ||||
|  | ||||
| #: ../js/ui/status/location.js:72 ../js/ui/status/location.js:177 | ||||
| #: ../js/ui/status/location.js:63 ../js/ui/status/location.js:167 | ||||
| msgid "Disable" | ||||
| msgstr "Desactivar" | ||||
|  | ||||
| #: ../js/ui/status/location.js:73 | ||||
| msgid "Privacy Settings" | ||||
| msgstr "Preferencias da privacidade" | ||||
|  | ||||
| #: ../js/ui/status/location.js:176 | ||||
| #: ../js/ui/status/location.js:166 | ||||
| msgid "In Use" | ||||
| msgstr "En uso" | ||||
|  | ||||
| #: ../js/ui/status/location.js:180 | ||||
| #: ../js/ui/status/location.js:170 | ||||
| msgid "Enable" | ||||
| msgstr "Activar" | ||||
|  | ||||
| @@ -1521,7 +1470,7 @@ msgid "Connected" | ||||
| msgstr "Conectado" | ||||
|  | ||||
| #. 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) | ||||
| #. under NetworkManager's control (and thus cannot be used in the menu) */ | ||||
| #: ../js/ui/status/network.js:463 | ||||
| msgid "Unmanaged" | ||||
| msgstr "Sen xestionar" | ||||
| @@ -1534,19 +1483,19 @@ msgstr "Desconectando…" | ||||
| msgid "Connecting" | ||||
| msgstr "Conectando" | ||||
|  | ||||
| #. 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:474 | ||||
| msgid "Authentication required" | ||||
| msgstr "Requírese autenticación" | ||||
|  | ||||
| #. Translators: this is for devices that require some kind of firmware or kernel | ||||
| #. module, which is missing | ||||
| #. module, which is missing */ | ||||
| #: ../js/ui/status/network.js:482 | ||||
| msgid "Firmware missing" | ||||
| msgstr "Falta o «firmware»" | ||||
|  | ||||
| #. Translators: this is for a network device that cannot be activated (for example it | ||||
| #. is disabled by rfkill, or it has no coverage | ||||
| #. is disabled by rfkill, or it has no coverage */ | ||||
| #: ../js/ui/status/network.js:486 | ||||
| msgid "Unavailable" | ||||
| msgstr "Non dispoñíbel" | ||||
| @@ -1631,7 +1580,7 @@ msgstr "Punto wifi activo" | ||||
| msgid "connecting..." | ||||
| msgstr "conectando…" | ||||
|  | ||||
| #. 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:1412 | ||||
| msgid "authentication required" | ||||
| msgstr "requírese autenticación" | ||||
| @@ -1668,19 +1617,15 @@ msgstr "Preferencias de enerxía" | ||||
| msgid "Fully Charged" | ||||
| msgstr "Carga completa" | ||||
|  | ||||
| #. 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 "Estimando…" | ||||
|  | ||||
| #. Translators: this is <hours>:<minutes> Remaining (<percentage>) | ||||
| #: ../js/ui/status/power.js:86 | ||||
| #, javascript-format | ||||
| msgid "%d∶%02d Remaining (%d%%)" | ||||
| msgstr "Faltan %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%%)" | ||||
| @@ -1694,9 +1639,6 @@ msgstr "SAI" | ||||
| msgid "Battery" | ||||
| msgstr "Batería" | ||||
|  | ||||
| #. 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:83 | ||||
| msgid "Airplane Mode" | ||||
| msgstr "Modo avión" | ||||
| @@ -1745,11 +1687,11 @@ msgstr "Iniciar sesión como outro usuario" | ||||
| msgid "Unlock Window" | ||||
| msgstr "Desbloquear xanela" | ||||
|  | ||||
| #: ../js/ui/viewSelector.js:158 | ||||
| #: ../js/ui/viewSelector.js:232 | ||||
| msgid "Applications" | ||||
| msgstr "Aplicativos" | ||||
|  | ||||
| #: ../js/ui/viewSelector.js:162 | ||||
| #: ../js/ui/viewSelector.js:236 | ||||
| msgid "Search" | ||||
| msgstr "Buscar" | ||||
|  | ||||
| @@ -1764,7 +1706,7 @@ msgstr "Desexa manter estas preferencias de pantalla?" | ||||
|  | ||||
| #. Translators: this and the following message should be limited in lenght, | ||||
| #. to avoid ellipsizing the labels. | ||||
| #. | ||||
| #. */ | ||||
| #: ../js/ui/windowManager.js:84 | ||||
| msgid "Revert Settings" | ||||
| msgstr "Reverter preferencias" | ||||
| @@ -1846,21 +1788,21 @@ msgstr[1] "%u entradas" | ||||
| msgid "System Sounds" | ||||
| msgstr "Sons do sistema" | ||||
|  | ||||
| #: ../src/main.c:373 | ||||
| #: ../src/main.c:371 | ||||
| msgid "Print version" | ||||
| msgstr "Imprimir versión" | ||||
|  | ||||
| #: ../src/main.c:379 | ||||
| #: ../src/main.c:377 | ||||
| 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:383 | ||||
| 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:389 | ||||
| msgid "List possible modes" | ||||
| msgstr "Listar os modos posíbeis" | ||||
|  | ||||
|   | ||||
							
								
								
									
										337
									
								
								po/gu.po
									
									
									
									
									
								
							
							
						
						
									
										337
									
								
								po/gu.po
									
									
									
									
									
								
							| @@ -9,8 +9,8 @@ msgstr "" | ||||
| "Project-Id-Version: gu\n" | ||||
| "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug." | ||||
| "cgi?product=gnome-shell&keywords=I18N+L10N&component=general\n" | ||||
| "POT-Creation-Date: 2014-10-01 07:39+0000\n" | ||||
| "PO-Revision-Date: 2014-10-01 15:51+0530\n" | ||||
| "POT-Creation-Date: 2014-08-26 07:37+0000\n" | ||||
| "PO-Revision-Date: 2014-08-26 16:19+0530\n" | ||||
| "Last-Translator: \n" | ||||
| "Language-Team: American English <kde-i18n-doc@kde.org>\n" | ||||
| "Language: \n" | ||||
| @@ -63,7 +63,7 @@ msgstr "GNOME Shell ઍક્સટેન્શનને રૂપરેખા | ||||
|  | ||||
| #: ../data/gnome-shell-wayland.desktop.in.in.h:1 | ||||
| msgid "GNOME Shell (wayland compositor)" | ||||
| msgstr "GNOME Shell (વેલૅન્ડ કંપોઝીટર)" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/org.gnome.shell.gschema.xml.in.in.h:1 | ||||
| msgid "Enable internal tools useful for developers and testers from Alt-F2" | ||||
| @@ -76,10 +76,12 @@ msgid "" | ||||
| msgstr "Alt-F2 સંવાદની મદદથી આંતરિક ડિબગીંગ અને મોનિટરીંગ સાધનોને વાપરવા પરવાનગી આપે છે." | ||||
|  | ||||
| #: ../data/org.gnome.shell.gschema.xml.in.in.h:3 | ||||
| #| msgid "Uuids of extensions to enable" | ||||
| msgid "UUIDs of extensions to enable" | ||||
| msgstr "સક્રિય કરવા માટે એક્સટેન્શનનું UUIDs" | ||||
|  | ||||
| #: ../data/org.gnome.shell.gschema.xml.in.in.h:4 | ||||
| #, fuzzy | ||||
| #| msgid "" | ||||
| #| "GNOME Shell extensions have a uuid property; this key lists extensions " | ||||
| #| "which should be loaded. Any extension that wants to be loaded needs to be " | ||||
| @@ -91,14 +93,14 @@ msgid "" | ||||
| "list. You can also manipulate this list with the EnableExtension and " | ||||
| "DisableExtension D-Bus methods on org.gnome.Shell." | ||||
| msgstr "" | ||||
| "GNOME Shell ઍક્સટેન્શન પાસે UUID ગુણધર્મ છે; આ કી ઍક્સટેન્શનની યાદી કરે છે કે જેને લાવેલ હોવુ " | ||||
| "GNOME Shell ઍક્સટેન્શન પાસે uuid ગુણધર્મ છે; આ કી ઍક્સટેન્શનની યાદી કરે છે કે જેને લાવેલ હોવુ " | ||||
| "જોઇએ. કોઇપણ ઍક્સટેન્શન કે જેને આ યાદીમાં લાવવાની જરૂર છે. તમે પણ org.gnome.Shell પર " | ||||
| "EnableExtension અને DisableExtension DBus પદ્દતિઓ સાથે આ યાદીને કુશળતાપૂર્વક વાપરી " | ||||
| "શકો છો." | ||||
|  | ||||
| #: ../data/org.gnome.shell.gschema.xml.in.in.h:5 | ||||
| msgid "Disables the validation of extension version compatibility" | ||||
| msgstr "ઍક્સટેન્શન આવૃત્તિ સુસંગતતાની માન્યતાને નિષ્ક્રિય કરે છે" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/org.gnome.shell.gschema.xml.in.in.h:6 | ||||
| msgid "" | ||||
| @@ -106,9 +108,6 @@ msgid "" | ||||
| "running version. Enabling this option will disable this check and try to " | ||||
| "load all extensions regardless of the versions they claim to support." | ||||
| msgstr "" | ||||
| "GNOME Shell એ ફક્ત ઍક્સટેન્શનને લાવશે કે જે હાલની ચાલતી આવૃત્તિને આધાર આપવા માટે દાવો કરે છે. " | ||||
| "આ વિકલ્પને સક્રિય કરવાનું આ ચકાસણીને નિષ્ક્રિય કરશે અને આવૃત્તિને બાદ કરતા બધા ઍક્સટેન્શનને " | ||||
| "લાવવાનો પ્રયત્ન કરે છે જે તેઓ આધાર આપવા માટે દાવો કરે છે." | ||||
|  | ||||
| #: ../data/org.gnome.shell.gschema.xml.in.in.h:7 | ||||
| msgid "List of desktop file IDs for favorite applications" | ||||
| @@ -122,11 +121,11 @@ msgstr "કાર્યક્રમો આ ઓળખકર્તાઓ સાથ | ||||
|  | ||||
| #: ../data/org.gnome.shell.gschema.xml.in.in.h:9 | ||||
| msgid "App Picker View" | ||||
| msgstr "કાર્યક્રમ પસંદકર્તા દૃશ્ય" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/org.gnome.shell.gschema.xml.in.in.h:10 | ||||
| msgid "Index of the currently selected view in the application picker." | ||||
| msgstr "કાર્યક્રમ પસંદકર્તામાં હાલમાં પસંદ થયેલ દૃશ્યની અનુક્રમણિકા." | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/org.gnome.shell.gschema.xml.in.in.h:11 | ||||
| msgid "History for command (Alt-F2) dialog" | ||||
| @@ -137,10 +136,13 @@ msgid "History for the looking glass dialog" | ||||
| msgstr "ગ્લાસ સંવાદને જોવા માટે ઇતિહાસ" | ||||
|  | ||||
| #: ../data/org.gnome.shell.gschema.xml.in.in.h:13 | ||||
| #, fuzzy | ||||
| #| msgid "Always show the 'Log out' menuitem in the user menu." | ||||
| msgid "Always show the 'Log out' menu item in the user menu." | ||||
| msgstr "વપરાશકર્તા મેનુમાં હંમેશા 'બહાર નીકળો' મેનુ વસ્તુને બતાવો." | ||||
| msgstr "હંમેશા વપરાશકર્તા મેનુમાં 'બહાર નીકળો' મેનુવસ્તુને બતાવે છે." | ||||
|  | ||||
| #: ../data/org.gnome.shell.gschema.xml.in.in.h:14 | ||||
| #, fuzzy | ||||
| #| msgid "" | ||||
| #| "This key overrides the automatic hiding of the 'Log out' menuitem in " | ||||
| #| "single-user, single-session situations." | ||||
| @@ -148,8 +150,7 @@ msgid "" | ||||
| "This key overrides the automatic hiding of the 'Log out' menu item in single-" | ||||
| "user, single-session situations." | ||||
| msgstr "" | ||||
| "આ કી એકજ વપરાશકર્તા, એકજ-સત્ર પરિસ્થિતિઓમાં 'બહાર નીકળો' મેનુવસ્તુને આપમેળે છુપાવવા આ કીને " | ||||
| "ઓવરરાઇડ કરવામાં " | ||||
| "આ કી એકજ વપરાશકર્તામાં 'બહાર નીકળો' મેનુવસ્તુને આપમેળે છુપાવવા આ કીને ઓવરરાઇડ કરવામાં " | ||||
| "આવી છે." | ||||
|  | ||||
| #: ../data/org.gnome.shell.gschema.xml.in.in.h:15 | ||||
| @@ -192,12 +193,16 @@ msgid "Keybinding to open the \"Show Applications\" view of the Activities Overv | ||||
| msgstr "પ્રવૃત્તિ ઝાંખીનાં  \"કાર્યક્રમો બતાવો\" દૃશ્યને ખોલવા માટે કિબાઇન્ડીંગ." | ||||
|  | ||||
| #: ../data/org.gnome.shell.gschema.xml.in.in.h:23 | ||||
| #, fuzzy | ||||
| #| msgid "Keybinding to open the \"Show Applications\" view" | ||||
| msgid "Keybinding to open the overview" | ||||
| msgstr "ઝાંખીને ખોલવા માટે કિબાઇન્ડીંગ" | ||||
| msgstr "\"કાર્યક્રમો બતાવો\" દૃશ્યને ખોલવા માટે કિબાઇન્ડીંગ" | ||||
|  | ||||
| #: ../data/org.gnome.shell.gschema.xml.in.in.h:24 | ||||
| #, fuzzy | ||||
| #| msgid "Keybinding to open the \"Show Applications\" view" | ||||
| msgid "Keybinding to open the Activities Overview." | ||||
| msgstr "પ્રવૃત્તિ ઝાંખીને ખોલવા માટે કિબાઇન્ડીંગ" | ||||
| msgstr "\"કાર્યક્રમો બતાવો\" દૃશ્યને ખોલવા માટે કિબાઇન્ડીંગ" | ||||
|  | ||||
| #: ../data/org.gnome.shell.gschema.xml.in.in.h:25 | ||||
| msgid "Keybinding to toggle the visibility of the message tray" | ||||
| @@ -217,7 +222,7 @@ msgstr "સક્રિય સૂચના પર પ્રકાશ નાં | ||||
|  | ||||
| #: ../data/org.gnome.shell.gschema.xml.in.in.h:29 | ||||
| msgid "Keybinding that pauses and resumes all running tweens, for debugging purposes" | ||||
| msgstr "કીબાઇન્ડીંગ કે જે બધી ચાલતી ટ્વીનને અટકાવે છે અને પાછુ લાવે છે, ડિબગીંગ હેતુઓ માટે" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/org.gnome.shell.gschema.xml.in.in.h:30 | ||||
| msgid "Which keyboard to use" | ||||
| @@ -229,15 +234,13 @@ msgstr "વાપરવા માટે કિબોર્ડનો પ્રક | ||||
|  | ||||
| #: ../data/org.gnome.shell.gschema.xml.in.in.h:32 | ||||
| msgid "Limit switcher to current workspace." | ||||
| msgstr "વર્તમાન કામ કરવાની જગ્યા માટે સ્વિચર મર્યાદિત કરી છે." | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/org.gnome.shell.gschema.xml.in.in.h:33 | ||||
| msgid "" | ||||
| "If true, only applications that have windows on the current workspace are " | ||||
| "shown in the switcher. Otherwise, all applications are included." | ||||
| msgstr "" | ||||
| "જો true હોય તો, ફક્ત કાર્યક્રમો કે જેની પાસે હાલની કાર્ય કરવાની જગ્યા પર વિન્ડો છે તે " | ||||
| "સ્વીચરમાં બતાવેલ છે. નહિંતો, બધા કાર્યક્રમનો સમાવેલ છે." | ||||
|  | ||||
| #: ../data/org.gnome.shell.gschema.xml.in.in.h:34 | ||||
| msgid "The application icon mode." | ||||
| @@ -258,8 +261,6 @@ msgid "" | ||||
| "If true, only windows from the current workspace are shown in the switcher. " | ||||
| "Otherwise, all windows are included." | ||||
| msgstr "" | ||||
| "જો true હોય તો, હાલની કાર્ય કરવાની જગ્યામાંથી વિન્ડો સ્વીચરમાં બતાવેલ છે. નહિં તો, બધી " | ||||
| "વિન્ડોને સમાવેલ છે." | ||||
|  | ||||
| #: ../data/org.gnome.shell.gschema.xml.in.in.h:37 | ||||
| msgid "Attach modal dialog to the parent window" | ||||
| @@ -283,23 +284,24 @@ msgstr "ફક્ત પ્રાથમિક મોનિટર પર કા | ||||
|  | ||||
| #: ../data/org.gnome.shell.gschema.xml.in.in.h:42 | ||||
| msgid "Delay focus changes in mouse mode until the pointer stops moving" | ||||
| msgstr "માઉસ સ્થિતિમાં ફેરફારો કરવામાં વિલંબ જ્યાં સુધી પોઇંટર ખસેડવાનું બંધ થાય" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../data/org.gnome.Shell.PortalHelper.desktop.in.h:1 | ||||
| msgid "Captive Portal" | ||||
| msgstr "કૅપ્ટીવ પોર્ટલ" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../js/extensionPrefs/main.js:123 | ||||
| #: ../js/extensionPrefs/main.js:127 | ||||
| #, javascript-format | ||||
| msgid "There was an error loading the preferences dialog for %s:" | ||||
| msgstr "ત્યાં %s માટે પસંદગી સંવાદને લાવવામાં ભૂલ હતી:" | ||||
|  | ||||
| #: ../js/extensionPrefs/main.js:155 | ||||
| #: ../js/extensionPrefs/main.js:159 | ||||
| #| msgid "Configure GNOME Shell Extensions" | ||||
| msgid "GNOME Shell Extensions" | ||||
| msgstr "GNOME Shell ઍક્સટેન્શન" | ||||
|  | ||||
| #: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:143 | ||||
| #: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:452 | ||||
| #: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:429 | ||||
| #: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399 | ||||
| #: ../js/ui/status/network.js:915 | ||||
| msgid "Cancel" | ||||
| @@ -320,6 +322,7 @@ msgid "Sign In" | ||||
| msgstr "પ્રવેશો" | ||||
|  | ||||
| #: ../js/gdm/loginDialog.js:269 | ||||
| #| msgid "Switch Session" | ||||
| msgid "Choose Session" | ||||
| msgstr "સત્ર પસંદ કરો" | ||||
|  | ||||
| @@ -358,48 +361,52 @@ msgid "Could not parse command:" | ||||
| msgstr "આદેશનું પદચ્છેદન કરી શક્યા નથી:" | ||||
|  | ||||
| #: ../js/misc/util.js:156 | ||||
| #, javascript-format | ||||
| #, fuzzy, javascript-format | ||||
| #| msgid "Execution of '%s' failed:" | ||||
| msgid "Execution of “%s” failed:" | ||||
| msgstr "“%s” ને અમલમાં મૂકવાનુ નિષ્ફળ:" | ||||
| msgstr "'%s' ને અમલમાં મૂકવાનુ નિષ્ફળ:" | ||||
|  | ||||
| #: ../js/portalHelper/main.js:85 | ||||
| #, fuzzy | ||||
| #| msgid "Authentication Required" | ||||
| msgid "Web Authentication Redirect" | ||||
| msgstr "વેબ સત્તાધિકરણ દિશામાન" | ||||
| msgstr "સત્તાધિકરણ જરૂરી" | ||||
|  | ||||
| #: ../js/ui/appDisplay.js:772 | ||||
| #: ../js/ui/appDisplay.js:660 | ||||
| msgid "Frequently used applications will appear here" | ||||
| msgstr "વારંવાર વપરાતા કાર્યક્રમો અહિંયા દેખાશે" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../js/ui/appDisplay.js:883 | ||||
| #: ../js/ui/appDisplay.js:771 | ||||
| msgid "Frequent" | ||||
| msgstr "સામાન્ય" | ||||
|  | ||||
| #: ../js/ui/appDisplay.js:890 | ||||
| #: ../js/ui/appDisplay.js:778 | ||||
| msgid "All" | ||||
| msgstr "બધા" | ||||
|  | ||||
| #: ../js/ui/appDisplay.js:1790 | ||||
| #: ../js/ui/appDisplay.js:1650 | ||||
| msgid "New Window" | ||||
| msgstr "નવી વિન્ડો" | ||||
|  | ||||
| #: ../js/ui/appDisplay.js:1816 ../js/ui/dash.js:285 | ||||
| #: ../js/ui/appDisplay.js:1673 ../js/ui/dash.js:285 | ||||
| msgid "Remove from Favorites" | ||||
| msgstr "પસંદીદાઓ માંથી દૂર કરો" | ||||
|  | ||||
| #: ../js/ui/appDisplay.js:1822 | ||||
| #: ../js/ui/appDisplay.js:1679 | ||||
| msgid "Add to Favorites" | ||||
| msgstr "પસંદીદાને ઉમેરો" | ||||
|  | ||||
| #: ../js/ui/appDisplay.js:1831 | ||||
| #: ../js/ui/appDisplay.js:1688 | ||||
| #| msgid "Show Text" | ||||
| msgid "Show Details" | ||||
| msgstr "વિગતો બતાવો" | ||||
|  | ||||
| #: ../js/ui/appFavorites.js:132 | ||||
| #: ../js/ui/appFavorites.js:122 | ||||
| #, javascript-format | ||||
| msgid "%s has been added to your favorites." | ||||
| msgstr "%s ને તમારી પસંદીદામાં ઉમેરી દેવામાં આવ્યુ છે." | ||||
|  | ||||
| #: ../js/ui/appFavorites.js:166 | ||||
| #: ../js/ui/appFavorites.js:156 | ||||
| #, javascript-format | ||||
| msgid "%s has been removed from your favorites." | ||||
| msgstr "%s ને તમારી પસંદીદામાંથી દૂર કરી દેવામાં આવ્યુ છે." | ||||
| @@ -591,11 +598,11 @@ msgstr "%s સાથે ખોલો" | ||||
| msgid "Eject" | ||||
| msgstr "રદ કરો" | ||||
|  | ||||
| #: ../js/ui/components/keyring.js:94 ../js/ui/components/polkitAgent.js:285 | ||||
| #: ../js/ui/components/keyring.js:93 ../js/ui/components/polkitAgent.js:285 | ||||
| msgid "Password:" | ||||
| msgstr "પાસવર્ડ:" | ||||
|  | ||||
| #: ../js/ui/components/keyring.js:120 | ||||
| #: ../js/ui/components/keyring.js:113 | ||||
| msgid "Type again:" | ||||
| msgstr "ફરીથી પ્રયત્ન કરો:" | ||||
|  | ||||
| @@ -633,11 +640,14 @@ msgid "Authentication required by wireless network" | ||||
| msgstr "વાયરલેસ નેટવર્ક દ્દારાસત્તાધિકરણ જરૂરી" | ||||
|  | ||||
| #: ../js/ui/components/networkAgent.js:319 | ||||
| #, javascript-format | ||||
| #, fuzzy, javascript-format | ||||
| #| msgid "" | ||||
| #| "Passwords or encryption keys are required to access the wireless network " | ||||
| #| "'%s'." | ||||
| msgid "" | ||||
| "Passwords or encryption keys are required to access the wireless network " | ||||
| "“%s”." | ||||
| msgstr "પાસવર્ડ અથવા એનક્રિપ્શન કીઓને વાયરલેસ નેટવર્ક “%s” માં પ્રવેશની જરૂર છે." | ||||
| msgstr "પાસવર્ડ અથવા એનક્રિપ્શન કીઓને વાયરલેસ નેટવર્ક '%s' માં પ્રવેશની જરૂર છે." | ||||
|  | ||||
| #: ../js/ui/components/networkAgent.js:323 | ||||
| msgid "Wired 802.1X authentication" | ||||
| @@ -669,6 +679,7 @@ msgstr "મોબાઇલ બ્રોડબેન્ડ નેટવર્ક | ||||
|  | ||||
| #: ../js/ui/components/networkAgent.js:346 | ||||
| #, javascript-format | ||||
| #| msgid "A password is required to connect to '%s'." | ||||
| msgid "A password is required to connect to “%s”." | ||||
| msgstr "પાસવર્ડ “%s” સાથે જોડાવા માટે જરૂરી છે." | ||||
|  | ||||
| @@ -724,12 +735,14 @@ msgstr "%H∶%M" | ||||
| #. Translators: this is the word "Yesterday" followed by a | ||||
| #. time string in 24h format. i.e. "Yesterday, 14:30" */ | ||||
| #: ../js/ui/components/telepathyClient.js:960 | ||||
| #| msgid "<b>Yesterday</b>, <b>%H:%M</b>" | ||||
| 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" */ | ||||
| #: ../js/ui/components/telepathyClient.js:967 | ||||
| #| msgid "%A, %B %d" | ||||
| msgid "%A, %H∶%M" | ||||
| msgstr "%A, %H∶%M" | ||||
|  | ||||
| @@ -749,6 +762,8 @@ msgstr "%B %d %Y, %H∶%M" | ||||
|  | ||||
| #. Translators: Time in 24h format */ | ||||
| #: ../js/ui/components/telepathyClient.js:986 | ||||
| #| msgctxt "event list time" | ||||
| #| msgid "%l:%M %p" | ||||
| msgid "%l∶%M %p" | ||||
| msgstr "%l∶%M %p" | ||||
|  | ||||
| @@ -761,6 +776,7 @@ 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" */ | ||||
| #: ../js/ui/components/telepathyClient.js:1000 | ||||
| #| msgid "%a %l:%M %p" | ||||
| msgid "%A, %l∶%M %p" | ||||
| msgstr "%A, %l∶%M %p" | ||||
|  | ||||
| @@ -768,6 +784,7 @@ msgstr "%A, %l∶%M %p" | ||||
| #. followed by a time string in 12h format. | ||||
| #. i.e. "May 25, 2:30 pm" */ | ||||
| #: ../js/ui/components/telepathyClient.js:1007 | ||||
| #| msgid "%a %b %e, %l:%M %p" | ||||
| msgid "%B %d, %l∶%M %p" | ||||
| msgstr "%B %d, %l∶%M %p" | ||||
|  | ||||
| @@ -775,6 +792,7 @@ msgstr "%B %d, %l∶%M %p" | ||||
| #. number followed by a time string in 12h format. | ||||
| #. i.e. "May 25 2012, 2:30 pm"*/ | ||||
| #: ../js/ui/components/telepathyClient.js:1013 | ||||
| #| msgid "%a %b %e, %l:%M %p" | ||||
| msgid "%B %d %Y, %l∶%M %p" | ||||
| msgstr "%B %d %Y, %l∶%M %p" | ||||
|  | ||||
| @@ -961,7 +979,7 @@ msgstr "ખાતામાં જુઓ" | ||||
| msgid "Unknown reason" | ||||
| msgstr "અજ્ઞાત કારણ" | ||||
|  | ||||
| #: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:154 | ||||
| #: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:228 | ||||
| msgid "Windows" | ||||
| msgstr "વિન્ડો" | ||||
|  | ||||
| @@ -992,129 +1010,132 @@ msgstr "તારીખ અને સમય સુયોજનો" | ||||
| msgid "%A %B %e, %Y" | ||||
| msgstr "%A %B %e, %Y" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:64 | ||||
| #: ../js/ui/endSessionDialog.js:66 | ||||
| #, javascript-format | ||||
| msgctxt "title" | ||||
| msgid "Log Out %s" | ||||
| msgstr "%s માંથી બહાર નીકળો" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:65 | ||||
| #: ../js/ui/endSessionDialog.js:67 | ||||
| msgctxt "title" | ||||
| msgid "Log Out" | ||||
| msgstr "બહાર નીકળો" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:67 | ||||
| #: ../js/ui/endSessionDialog.js:69 | ||||
| #, javascript-format | ||||
| msgid "%s will be logged out automatically in %d second." | ||||
| msgid_plural "%s will be logged out automatically in %d seconds." | ||||
| msgstr[0] "%s એ %d સેકંડમાં આપમેળે બહાર નીકળી જશે." | ||||
| msgstr[1] "%s એ %d સેકંડોમાં આપમેળે બહાર નીકળી જશે." | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:72 | ||||
| #: ../js/ui/endSessionDialog.js:74 | ||||
| #, javascript-format | ||||
| msgid "You will be logged out automatically in %d second." | ||||
| msgid_plural "You will be logged out automatically in %d seconds." | ||||
| msgstr[0] "તમે %d સેકંડમાં આપમેળે બહાર નીકળી જશે." | ||||
| msgstr[1] "તમે %d સેકંડોમાં આપમેળે બહાર નીકળી જશે." | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:78 | ||||
| #: ../js/ui/endSessionDialog.js:80 | ||||
| msgctxt "button" | ||||
| msgid "Log Out" | ||||
| msgstr "બહાર નીકળો" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:84 | ||||
| #: ../js/ui/endSessionDialog.js:86 | ||||
| msgctxt "title" | ||||
| msgid "Power Off" | ||||
| msgstr "પાવર બંધ" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:85 | ||||
| #: ../js/ui/endSessionDialog.js:87 | ||||
| #, fuzzy | ||||
| #| msgid "Install Updates & Restart" | ||||
| msgctxt "title" | ||||
| msgid "Install Updates & Power Off" | ||||
| msgstr "સુધારા સ્થાપિત કરો અને પાવર બંધ કરો" | ||||
| msgstr "સુધારા સ્થાપિત કરો અને પુન:શરૂ કરો" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:87 | ||||
| #: ../js/ui/endSessionDialog.js:89 | ||||
| #, javascript-format | ||||
| msgid "The system will power off automatically in %d second." | ||||
| msgid_plural "The system will power off automatically in %d seconds." | ||||
| msgstr[0] "સિસ્ટમ %d સેકંડમાં આપમેળે પાવર બંધ થઇ જશે." | ||||
| msgstr[1] "સિસ્ટમ %d સેકંડમાં આપમેળે પાવર બંધ થઇ જશે." | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:91 | ||||
| #: ../js/ui/endSessionDialog.js:93 | ||||
| msgctxt "checkbox" | ||||
| msgid "Install pending software updates" | ||||
| msgstr "બાકી રહેલા સોફ્ટવેર સુધારાને સ્થાપિત કરો" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:94 ../js/ui/endSessionDialog.js:111 | ||||
| #: ../js/ui/endSessionDialog.js:96 ../js/ui/endSessionDialog.js:113 | ||||
| msgctxt "button" | ||||
| msgid "Restart" | ||||
| msgstr "પુન:શરૂ કરો" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:96 | ||||
| #: ../js/ui/endSessionDialog.js:98 | ||||
| msgctxt "button" | ||||
| msgid "Power Off" | ||||
| msgstr "પાવર બંધ" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:103 | ||||
| #: ../js/ui/endSessionDialog.js:105 | ||||
| msgctxt "title" | ||||
| msgid "Restart" | ||||
| msgstr "પુન:શરૂ કરો" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:105 | ||||
| #: ../js/ui/endSessionDialog.js:107 | ||||
| #, javascript-format | ||||
| msgid "The system will restart automatically in %d second." | ||||
| msgid_plural "The system will restart automatically in %d seconds." | ||||
| msgstr[0] "સિસ્ટમ %d સેકંડમાં આપમેળે પુન:શરૂ થઇ જશે." | ||||
| msgstr[1] "સિસ્ટમ %d સેકંડોમાં આપમેળે પુન:શરૂ થઇ જશે." | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:119 | ||||
| #: ../js/ui/endSessionDialog.js:121 | ||||
| #| msgid "Install Updates & Restart" | ||||
| msgctxt "title" | ||||
| msgid "Restart & Install Updates" | ||||
| msgstr "સુધારા સ્થાપિત કરો અને પુન:શરૂ કરો" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:121 | ||||
| #, javascript-format | ||||
| #: ../js/ui/endSessionDialog.js:123 | ||||
| #, fuzzy, javascript-format | ||||
| #| msgid "The system will restart automatically in %d second." | ||||
| #| msgid_plural "The system will restart automatically in %d seconds." | ||||
| msgid "The system will automatically restart and install updates in %d second." | ||||
| msgid_plural "The system will automatically restart and install updates in %d seconds." | ||||
| msgstr[0] "સિસ્ટમ %d સેકંડમાં આપમેળે સુધારાઓને પુન:શરૂ અને સ્થાપિત કરશે." | ||||
| msgstr[1] "સિસ્ટમ %d સેકંડોમાં આપમેળે સુધારાઓને પુન:શરૂ અને સ્થાપિત કરશે." | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:127 | ||||
| msgctxt "button" | ||||
| msgid "Restart & Install" | ||||
| msgstr "પુન:શરૂ કરો અને સ્થાપિત કરો" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:128 | ||||
| msgctxt "button" | ||||
| msgid "Install & Power Off" | ||||
| msgstr "સ્થાપિત કરો અને પાવર બંધ " | ||||
| msgstr[0] "સિસ્ટમ %d સેકંડમાં આપમેળે પુન:શરૂ થઇ જશે." | ||||
| msgstr[1] "સિસ્ટમ %d સેકંડોમાં આપમેળે પુન:શરૂ થઇ જશે." | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:129 | ||||
| msgctxt "button" | ||||
| msgid "Restart & Install" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:130 | ||||
| msgctxt "button" | ||||
| msgid "Install & Power Off" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:131 | ||||
| msgctxt "checkbox" | ||||
| msgid "Power off after updates are installed" | ||||
| msgstr "સુધારા સ્થાપિત થાય પછી પાવર બંધ કરો" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:338 | ||||
| #: ../js/ui/endSessionDialog.js:315 | ||||
| msgid "Running on battery power: please plug in before installing updates." | ||||
| msgstr "બેટરી પાવર પર ચાલી રહ્યુ છે: મહેરબાની કરીને સુધારા સ્થાપિત કરતા પહેલાં પ્લગઇન કરો." | ||||
| msgstr "" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:355 | ||||
| #: ../js/ui/endSessionDialog.js:332 | ||||
| msgid "Some applications are busy or have unsaved work." | ||||
| msgstr "અમુક કાર્યક્રમો વ્યસ્ત છે અથવા તેની પાસે અસંગ્રહેલ કામ છે." | ||||
| msgstr "" | ||||
|  | ||||
| #: ../js/ui/endSessionDialog.js:362 | ||||
| #: ../js/ui/endSessionDialog.js:339 | ||||
| msgid "Other users are logged in." | ||||
| msgstr "બીજા વપરાશકર્તાઓ પ્રવેશેલ છે." | ||||
|  | ||||
| #. Translators: Remote here refers to a remote session, like a ssh login */ | ||||
| #: ../js/ui/endSessionDialog.js:640 | ||||
| #: ../js/ui/endSessionDialog.js:619 | ||||
| #, javascript-format | ||||
| msgid "%s (remote)" | ||||
| msgstr "%s (દૂરસ્થ)" | ||||
|  | ||||
| #. Translators: Console here refers to a tty like a VT console */ | ||||
| #: ../js/ui/endSessionDialog.js:643 | ||||
| #: ../js/ui/endSessionDialog.js:622 | ||||
| #, javascript-format | ||||
| msgid "%s (console)" | ||||
| msgstr "%s (કન્સોલ)" | ||||
| @@ -1124,11 +1145,12 @@ msgid "Install" | ||||
| msgstr "સ્થાપિત કરો" | ||||
|  | ||||
| #: ../js/ui/extensionDownloader.js:204 | ||||
| #, javascript-format | ||||
| #, fuzzy, javascript-format | ||||
| #| msgid "Download and install '%s' from extensions.gnome.org?" | ||||
| msgid "Download and install “%s” from extensions.gnome.org?" | ||||
| msgstr "extensions.gnome.org માંથી “%s” ને સ્થાપિત અને ડાઉનલોડ કરો?" | ||||
| msgstr "extensions.gnome.org માંથી '%s' ને સ્થાપિત અને ડાઉનલોડ કરો?" | ||||
|  | ||||
| #: ../js/ui/keyboard.js:700 ../js/ui/status/keyboard.js:523 | ||||
| #: ../js/ui/keyboard.js:653 ../js/ui/status/keyboard.js:339 | ||||
| msgid "Keyboard" | ||||
| msgstr "કિબોર્ડ" | ||||
|  | ||||
| @@ -1150,8 +1172,8 @@ msgstr "ભૂલો છુપાડો" | ||||
| msgid "Show Errors" | ||||
| msgstr "ભૂલો બતાવો" | ||||
|  | ||||
| #: ../js/ui/lookingGlass.js:716 ../js/ui/status/location.js:71 | ||||
| #: ../js/ui/status/location.js:176 | ||||
| #: ../js/ui/lookingGlass.js:716 ../js/ui/status/location.js:62 | ||||
| #: ../js/ui/status/location.js:166 | ||||
| msgid "Enabled" | ||||
| msgstr "સક્રિય" | ||||
|  | ||||
| @@ -1159,7 +1181,7 @@ msgstr "સક્રિય" | ||||
| #. because it's disabled by rfkill (airplane mode) */ | ||||
| #. translators: | ||||
| #. * The device has been disabled | ||||
| #: ../js/ui/lookingGlass.js:719 ../js/ui/status/location.js:179 | ||||
| #: ../js/ui/lookingGlass.js:719 ../js/ui/status/location.js:169 | ||||
| #: ../js/ui/status/network.js:592 ../src/gvc/gvc-mixer-control.c:1830 | ||||
| msgid "Disabled" | ||||
| msgstr "નિષ્ક્રિય" | ||||
| @@ -1184,39 +1206,39 @@ msgstr "સ્ત્રોત દર્શાવો" | ||||
| msgid "Web Page" | ||||
| msgstr "વેબ પાનું" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:1327 | ||||
| #: ../js/ui/messageTray.js:1325 | ||||
| msgid "Open" | ||||
| msgstr "ખોલો" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:1334 | ||||
| #: ../js/ui/messageTray.js:1332 | ||||
| msgid "Remove" | ||||
| msgstr "દૂર કરો" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:1631 | ||||
| #: ../js/ui/messageTray.js:1629 | ||||
| msgid "Notifications" | ||||
| msgstr "સૂચનાઓ" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:1638 | ||||
| #: ../js/ui/messageTray.js:1636 | ||||
| msgid "Clear Messages" | ||||
| msgstr "સંદેશા સાફ કરો" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:1657 | ||||
| #: ../js/ui/messageTray.js:1655 | ||||
| msgid "Notification Settings" | ||||
| msgstr "સૂચના સુયોજનો" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:1710 | ||||
| #: ../js/ui/messageTray.js:1708 | ||||
| msgid "Tray Menu" | ||||
| msgstr "ટ્રે મેનુ" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:1934 | ||||
| #: ../js/ui/messageTray.js:1925 | ||||
| msgid "No Messages" | ||||
| msgstr "સંદેશા નથી" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:1979 | ||||
| #: ../js/ui/messageTray.js:1963 | ||||
| msgid "Message Tray" | ||||
| msgstr "સંદેશો ટ્રે" | ||||
|  | ||||
| #: ../js/ui/messageTray.js:2992 | ||||
| #: ../js/ui/messageTray.js:2966 | ||||
| msgid "System Information" | ||||
| msgstr "સિસ્ટમ જાણકારી" | ||||
|  | ||||
| @@ -1244,7 +1266,7 @@ msgstr "ઝાંખી" | ||||
| #. in the search entry when no search is | ||||
| #. active; it should not exceed ~30 | ||||
| #. characters. */ | ||||
| #: ../js/ui/overview.js:246 | ||||
| #: ../js/ui/overview.js:250 | ||||
| msgid "Type to search…" | ||||
| msgstr "શોધવા માટે ટાઇપ કરો..." | ||||
|  | ||||
| @@ -1275,6 +1297,7 @@ msgid "Close" | ||||
| msgstr "બંધ કરો" | ||||
|  | ||||
| #: ../js/ui/runDialog.js:277 | ||||
| #| msgid "Estimating…" | ||||
| msgid "Restarting…" | ||||
| msgstr "પુન:શરૂ કરી રહ્યા છે…" | ||||
|  | ||||
| @@ -1307,27 +1330,27 @@ msgstr "તાળુ મારવામાં અસમર્થ" | ||||
| msgid "Lock was blocked by an application" | ||||
| msgstr "તાળુ કાર્યક્રમ દ્દારા બ્લોક થયેલ છે" | ||||
|  | ||||
| #: ../js/ui/search.js:607 | ||||
| #: ../js/ui/search.js:606 | ||||
| msgid "Searching…" | ||||
| msgstr "શોધી રહ્યા છે..." | ||||
|  | ||||
| #: ../js/ui/search.js:609 | ||||
| #: ../js/ui/search.js:652 | ||||
| msgid "No results." | ||||
| msgstr "પરિણામો નથી." | ||||
|  | ||||
| #: ../js/ui/shellEntry.js:25 | ||||
| #: ../js/ui/shellEntry.js:27 | ||||
| msgid "Copy" | ||||
| msgstr "નકલ કરો" | ||||
|  | ||||
| #: ../js/ui/shellEntry.js:30 | ||||
| #: ../js/ui/shellEntry.js:32 | ||||
| msgid "Paste" | ||||
| msgstr "ચોંટાડો" | ||||
|  | ||||
| #: ../js/ui/shellEntry.js:97 | ||||
| #: ../js/ui/shellEntry.js:99 | ||||
| msgid "Show Text" | ||||
| msgstr "લખાણ બતાવો" | ||||
|  | ||||
| #: ../js/ui/shellEntry.js:99 | ||||
| #: ../js/ui/shellEntry.js:101 | ||||
| msgid "Hide Text" | ||||
| msgstr "લખાણ છુપાડો" | ||||
|  | ||||
| @@ -1399,13 +1422,15 @@ msgid "Bluetooth Settings" | ||||
| msgstr "બ્લુટુથ સુયોજનો" | ||||
|  | ||||
| #: ../js/ui/status/bluetooth.js:104 | ||||
| #, javascript-format | ||||
| #, fuzzy, javascript-format | ||||
| #| msgid "Connected (private)" | ||||
| msgid "%d Connected Device" | ||||
| msgid_plural "%d Connected Devices" | ||||
| msgstr[0] "%d જોડાયેલ ઉપકરણ" | ||||
| msgstr[1] "%d જોડાયેલ ઉપકરણો" | ||||
| msgstr[0] "જોડાયેલ (ખાનગી)" | ||||
| msgstr[1] "જોડાયેલ (ખાનગી)" | ||||
|  | ||||
| #: ../js/ui/status/bluetooth.js:106 ../js/ui/status/network.js:1309 | ||||
| #| msgid "Connect" | ||||
| msgid "Not Connected" | ||||
| msgstr "જોડાયેલ નથી" | ||||
|  | ||||
| @@ -1413,28 +1438,26 @@ msgstr "જોડાયેલ નથી" | ||||
| msgid "Brightness" | ||||
| msgstr "તેજસ્વિતા" | ||||
|  | ||||
| #: ../js/ui/status/keyboard.js:547 | ||||
| #: ../js/ui/status/keyboard.js:406 | ||||
| msgid "Show Keyboard Layout" | ||||
| msgstr "કીબોર્ડ લેઆઉટને બતાવો" | ||||
|  | ||||
| #: ../js/ui/status/location.js:65 | ||||
| #: ../js/ui/status/location.js:56 | ||||
| #| msgid "Notifications" | ||||
| msgid "Location" | ||||
| msgstr "સ્થાન" | ||||
|  | ||||
| #: ../js/ui/status/location.js:72 ../js/ui/status/location.js:177 | ||||
| #: ../js/ui/status/location.js:63 ../js/ui/status/location.js:167 | ||||
| #| msgid "Disabled" | ||||
| msgid "Disable" | ||||
| msgstr "નિષ્ક્રિય" | ||||
|  | ||||
| #: ../js/ui/status/location.js:73 | ||||
| #| msgid "Power Settings" | ||||
| msgid "Privacy Settings" | ||||
| msgstr "ખાનગી સુયોજનો" | ||||
|  | ||||
| #: ../js/ui/status/location.js:176 | ||||
| #: ../js/ui/status/location.js:166 | ||||
| msgid "In Use" | ||||
| msgstr "વપરાશમાં" | ||||
|  | ||||
| #: ../js/ui/status/location.js:180 | ||||
| #: ../js/ui/status/location.js:170 | ||||
| #| msgid "Enabled" | ||||
| msgid "Enable" | ||||
| msgstr "સક્રિય" | ||||
|  | ||||
| @@ -1444,35 +1467,42 @@ msgstr "<અજ્ઞાત>" | ||||
|  | ||||
| #: ../js/ui/status/network.js:457 ../js/ui/status/network.js:1307 | ||||
| #: ../js/ui/status/network.js:1511 | ||||
| #| msgid "Offline" | ||||
| msgid "Off" | ||||
| msgstr "બંધ" | ||||
|  | ||||
| #: ../js/ui/status/network.js:459 | ||||
| #| msgid "Connect" | ||||
| msgid "Connected" | ||||
| msgstr "જોડાયેલ" | ||||
|  | ||||
| #. 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) */ | ||||
| #: ../js/ui/status/network.js:463 | ||||
| #| msgid "unmanaged" | ||||
| msgid "Unmanaged" | ||||
| msgstr "સંચાલિત થયેલ નથી" | ||||
|  | ||||
| #: ../js/ui/status/network.js:465 | ||||
| #| msgid "disconnecting..." | ||||
| msgid "Disconnecting" | ||||
| msgstr "જોડાઇ તૂટી રહ્યુ છે" | ||||
|  | ||||
| #: ../js/ui/status/network.js:471 ../js/ui/status/network.js:1301 | ||||
| #| msgid "Connection" | ||||
| msgid "Connecting" | ||||
| msgstr "જોડાઇ રહ્યા છે" | ||||
|  | ||||
| #. Translators: this is for network connections that require some kind of key or password */ | ||||
| #: ../js/ui/status/network.js:474 | ||||
| #| msgid "authentication required" | ||||
| msgid "Authentication required" | ||||
| msgstr "સત્તાધિકરણ જરૂરી" | ||||
|  | ||||
| #. Translators: this is for devices that require some kind of firmware or kernel | ||||
| #. module, which is missing */ | ||||
| #: ../js/ui/status/network.js:482 | ||||
| #| msgid "firmware missing" | ||||
| msgid "Firmware missing" | ||||
| msgstr "ફર્મવેર ગેરહાજર" | ||||
|  | ||||
| @@ -1487,32 +1517,36 @@ msgid "Connection failed" | ||||
| msgstr "જોડાણ નિષ્ફળ" | ||||
|  | ||||
| #: ../js/ui/status/network.js:504 | ||||
| #, fuzzy | ||||
| #| msgid "Settings" | ||||
| msgid "Wired Settings" | ||||
| msgstr "વાયર થયેલ સુયોજનો" | ||||
| msgstr "સુયોજનો" | ||||
|  | ||||
| #: ../js/ui/status/network.js:546 ../js/ui/status/network.js:624 | ||||
| #| msgid "Mobile broadband" | ||||
| msgid "Mobile Broadband Settings" | ||||
| msgstr "મોબાઇલ બ્રોડબેન્ડ સુયોજનો" | ||||
|  | ||||
| #: ../js/ui/status/network.js:588 ../js/ui/status/network.js:1305 | ||||
| #| msgid "hardware disabled" | ||||
| msgid "Hardware Disabled" | ||||
| msgstr "હાર્ડવેર નિષ્ક્રિય" | ||||
|  | ||||
| #: ../js/ui/status/network.js:632 | ||||
| msgid "Use as Internet connection" | ||||
| msgstr "ઇન્ટરનેટ જોડાણ તરીકે વાપરો" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../js/ui/status/network.js:813 | ||||
| msgid "Airplane Mode is On" | ||||
| msgstr "ઍરપ્લેન સ્થિતિ ચાલુ છે" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../js/ui/status/network.js:814 | ||||
| msgid "Wi-Fi is disabled when airplane mode is on." | ||||
| msgstr "Wi-Fi નિષ્ક્રિય થયેલ છે જ્યારે ઍરપ્લેન સ્થિતિ ચાલુ હોય." | ||||
| msgstr "" | ||||
|  | ||||
| #: ../js/ui/status/network.js:815 | ||||
| msgid "Turn Off Airplane Mode" | ||||
| msgstr "ઍરપ્લેન સ્થિતિને બંધ કરો" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../js/ui/status/network.js:824 | ||||
| msgid "Wi-Fi is Off" | ||||
| @@ -1520,33 +1554,38 @@ msgstr "Wi-Fi બંધ છે" | ||||
|  | ||||
| #: ../js/ui/status/network.js:825 | ||||
| msgid "Wi-Fi needs to be turned on in order to connect to a network." | ||||
| msgstr "નેટવર્કમાં જોડાવા માટે ક્રમમાં Wi-Fi ને ચાલુ કરવાની જરૂર છે." | ||||
| msgstr "" | ||||
|  | ||||
| #: ../js/ui/status/network.js:826 | ||||
| msgid "Turn On Wi-Fi" | ||||
| msgstr "Wi-Fi ચાલુ કરો" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../js/ui/status/network.js:851 | ||||
| #| msgid "Network" | ||||
| msgid "Wi-Fi Networks" | ||||
| msgstr "Wi-Fi નેટવર્ક" | ||||
|  | ||||
| #: ../js/ui/status/network.js:853 | ||||
| #| msgid "Enable networking" | ||||
| msgid "Select a network" | ||||
| msgstr "નેટવર્ક પસંદ કરો" | ||||
|  | ||||
| #: ../js/ui/status/network.js:882 | ||||
| #| msgid "Network" | ||||
| msgid "No Networks" | ||||
| msgstr "નેટવર્ક નથી" | ||||
|  | ||||
| #: ../js/ui/status/network.js:903 ../js/ui/status/rfkill.js:112 | ||||
| msgid "Use hardware switch to turn off" | ||||
| msgstr "બંધ કરવા માટે હાર્ડવેર સ્વીચને વાપરો" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../js/ui/status/network.js:1173 | ||||
| #| msgid "Network" | ||||
| msgid "Select Network" | ||||
| msgstr "નેટવર્ક પસંદ કરો" | ||||
|  | ||||
| #: ../js/ui/status/network.js:1179 | ||||
| #| msgid "Settings" | ||||
| msgid "Wi-Fi Settings" | ||||
| msgstr "Wi-Fi સુયોજનો" | ||||
|  | ||||
| @@ -1556,7 +1595,7 @@ msgstr "ચાલુ કરો" | ||||
|  | ||||
| #: ../js/ui/status/network.js:1298 | ||||
| msgid "Hotspot Active" | ||||
| msgstr "હૉટસ્પોટ સક્રિય" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../js/ui/status/network.js:1409 | ||||
| msgid "connecting..." | ||||
| @@ -1576,6 +1615,7 @@ msgid "Network Settings" | ||||
| msgstr "નેટવર્ક સુયોજનો" | ||||
|  | ||||
| #: ../js/ui/status/network.js:1482 | ||||
| #| msgid "Settings" | ||||
| msgid "VPN Settings" | ||||
| msgstr "VPN સુયોજનો" | ||||
|  | ||||
| @@ -1606,12 +1646,12 @@ msgstr "અંદાજ કરી રહ્યા છે..." | ||||
| #: ../js/ui/status/power.js:86 | ||||
| #, javascript-format | ||||
| msgid "%d∶%02d Remaining (%d%%)" | ||||
| msgstr "%d∶%02d બાકી રહેલ છે (%d%%)" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../js/ui/status/power.js:91 | ||||
| #, javascript-format | ||||
| msgid "%d∶%02d Until Full (%d%%)" | ||||
| msgstr "%d∶%02d જ્યાં સુધી સંપૂર્ણ થાય (%d%%)" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../js/ui/status/power.js:119 | ||||
| msgid "UPS" | ||||
| @@ -1623,9 +1663,10 @@ msgstr "બેટરી" | ||||
|  | ||||
| #: ../js/ui/status/rfkill.js:83 | ||||
| msgid "Airplane Mode" | ||||
| msgstr "ઍરપ્લેન સ્થિતિ" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../js/ui/status/rfkill.js:85 | ||||
| #| msgid "Open" | ||||
| msgid "On" | ||||
| msgstr "ચાલુ" | ||||
|  | ||||
| @@ -1639,7 +1680,7 @@ msgstr "બહાર નીકળો" | ||||
|  | ||||
| #: ../js/ui/status/system.js:341 | ||||
| msgid "Orientation Lock" | ||||
| msgstr "દિશા તાળુ" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../js/ui/status/system.js:349 | ||||
| msgid "Suspend" | ||||
| @@ -1669,40 +1710,43 @@ msgstr "બીજા વપરાશકર્તા તરીકે પ્રવ | ||||
| msgid "Unlock Window" | ||||
| msgstr "વિન્ડોનું તાળુ ખોલો" | ||||
|  | ||||
| #: ../js/ui/viewSelector.js:158 | ||||
| #: ../js/ui/viewSelector.js:232 | ||||
| msgid "Applications" | ||||
| msgstr "કાર્યક્રમો" | ||||
|  | ||||
| #: ../js/ui/viewSelector.js:162 | ||||
| #: ../js/ui/viewSelector.js:236 | ||||
| msgid "Search" | ||||
| msgstr "શોધો" | ||||
|  | ||||
| #: ../js/ui/windowAttentionHandler.js:19 | ||||
| #, javascript-format | ||||
| #| msgid "'%s' is ready" | ||||
| msgid "“%s” is ready" | ||||
| msgstr "“%s” તૈયાર છે" | ||||
|  | ||||
| #: ../js/ui/windowManager.js:65 | ||||
| msgid "Do you want to keep these display settings?" | ||||
| msgstr "શું તમને આ દર્શાવ સુયોજનોને રાખવા માંગો છો?ે" | ||||
| msgstr "" | ||||
|  | ||||
| #. Translators: this and the following message should be limited in lenght, | ||||
| #. to avoid ellipsizing the labels. | ||||
| #. */ | ||||
| #: ../js/ui/windowManager.js:84 | ||||
| #, fuzzy | ||||
| #| msgid "Power Settings" | ||||
| msgid "Revert Settings" | ||||
| msgstr "સુયોજનોને પાછા લાવો" | ||||
| msgstr "પાવર સુયોજનો" | ||||
|  | ||||
| #: ../js/ui/windowManager.js:88 | ||||
| msgid "Keep Changes" | ||||
| msgstr "ફેરફારો કરો" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../js/ui/windowManager.js:107 | ||||
| #, javascript-format | ||||
| msgid "Settings changes will revert in %d second" | ||||
| msgid_plural "Settings changes will revert in %d seconds" | ||||
| msgstr[0] "સુયોજન ફેરફારો એ %d સેકંડમાં પાછા આવશે" | ||||
| msgstr[1] "સુયોજન ફેરફારો એ %d સેકંડોમાં પાછા આવશે" | ||||
| msgstr[0] "" | ||||
| msgstr[1] "" | ||||
|  | ||||
| #: ../js/ui/windowMenu.js:34 | ||||
| msgid "Minimize" | ||||
| @@ -1726,7 +1770,7 @@ msgstr "માપ બદલો" | ||||
|  | ||||
| #: ../js/ui/windowMenu.js:65 | ||||
| msgid "Move Titlebar Onscreen" | ||||
| msgstr "શીર્ષકપટ્ટી ઓનસ્ક્રીનને ખસેડો" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../js/ui/windowMenu.js:70 | ||||
| msgid "Always on Top" | ||||
| @@ -1734,15 +1778,15 @@ msgstr "હંમેશા ટોચ ઉપર" | ||||
|  | ||||
| #: ../js/ui/windowMenu.js:89 | ||||
| msgid "Always on Visible Workspace" | ||||
| msgstr "હંમેશા દૃશ્ય કામ કરવાની જગ્યા પર" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../js/ui/windowMenu.js:106 | ||||
| msgid "Move to Workspace Up" | ||||
| msgstr "ઉપર કામ કરવાની જગ્યા પર ખસેડો" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../js/ui/windowMenu.js:111 | ||||
| msgid "Move to Workspace Down" | ||||
| msgstr "નીચે કામ કરવાની જગ્યાએ ખસેડો" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../src/calendar-server/evolution-calendar.desktop.in.in.h:1 | ||||
| msgid "Evolution Calendar" | ||||
| @@ -1770,24 +1814,25 @@ msgstr[1] "%u ઇનપુટો" | ||||
| msgid "System Sounds" | ||||
| msgstr "સિસ્ટમ અવાજો" | ||||
|  | ||||
| #: ../src/main.c:373 | ||||
| #: ../src/main.c:371 | ||||
| msgid "Print version" | ||||
| msgstr "ા" | ||||
|  | ||||
| #: ../src/main.c:379 | ||||
| #: ../src/main.c:377 | ||||
| msgid "Mode used by GDM for login screen" | ||||
| msgstr "લૉગિન સ્ક્રીન માટે GDM દ્દારા વાપરેલ સ્થિતિ" | ||||
|  | ||||
| #: ../src/main.c:385 | ||||
| #: ../src/main.c:383 | ||||
| msgid "Use a specific mode, e.g. \"gdm\" for login screen" | ||||
| msgstr "ખાસ સ્થિતિને વાપરો, દા.ત. પ્રવેશ સ્ક્રીન માટે \"gdm\"" | ||||
|  | ||||
| #: ../src/main.c:391 | ||||
| #: ../src/main.c:389 | ||||
| msgid "List possible modes" | ||||
| msgstr "શક્ય સ્થિતિઓની યાદી કરો" | ||||
|  | ||||
| #: ../src/shell-app.c:666 | ||||
| #, c-format | ||||
| #| msgid "Failed to launch '%s'" | ||||
| msgid "Failed to launch “%s”" | ||||
| msgstr "“%s” ને શરૂ કરવામાં નિષ્ફળતા" | ||||
|  | ||||
|   | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user