Compare commits

..

1 Commits

Author SHA1 Message Date
Jasper St. Pierre
e7f82c66de wobbly 2014-09-03 10:58:01 -07:00
164 changed files with 24195 additions and 33478 deletions

2
.gitignore vendored
View File

@@ -23,7 +23,6 @@ data/gnome-shell-wayland.desktop
data/gnome-shell-wayland.desktop.in data/gnome-shell-wayland.desktop.in
data/gnome-shell-extension-prefs.desktop data/gnome-shell-extension-prefs.desktop
data/gnome-shell-extension-prefs.desktop.in data/gnome-shell-extension-prefs.desktop.in
data/gnome-shell-theme.gresource
data/gschemas.compiled data/gschemas.compiled
data/perf-background.xml data/perf-background.xml
data/org.gnome.shell.gschema.xml data/org.gnome.shell.gschema.xml
@@ -86,7 +85,6 @@ src/gnome-shell-perf-helper
src/gnome-shell-perf-tool src/gnome-shell-perf-tool
src/gnome-shell-portal-helper src/gnome-shell-portal-helper
src/hotplug-sniffer/org.gnome.Shell.HotplugSniffer.service src/hotplug-sniffer/org.gnome.Shell.HotplugSniffer.service
src/org-gtk-application.[ch]
src/run-js-test src/run-js-test
src/test-recorder src/test-recorder
src/test-recorder.ogg src/test-recorder.ogg

164
NEWS
View File

@@ -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 3.13.91
======= =======
* Fix keynav into session menu on login screen [Florian; #735614] * Fix keynav into session menu on login screen [Florian; #735614]

View File

@@ -1,5 +1,5 @@
AC_PREREQ(2.63) 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_HEADERS([config.h])
AC_CONFIG_SRCDIR([src/shell-global.c]) AC_CONFIG_SRCDIR([src/shell-global.c])
@@ -37,7 +37,7 @@ AC_PATH_PROG([XSLTPROC], [xsltproc])
GLIB_GSETTINGS GLIB_GSETTINGS
# Get a value to substitute into gnome-shell.in # Get a value to substitute into gnome-shell.in
AM_PATH_PYTHON([3]) AM_PATH_PYTHON([2.5])
AC_SUBST(PYTHON) AC_SUBST(PYTHON)
# We need at least this, since gst_plugin_register_static() was added # 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 CLUTTER_MIN_VERSION=1.15.90
GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1 GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
GJS_MIN_VERSION=1.39.0 GJS_MIN_VERSION=1.39.0
MUTTER_MIN_VERSION=3.15.4 MUTTER_MIN_VERSION=3.13.91
GTK_MIN_VERSION=3.15.0 GTK_MIN_VERSION=3.7.9
GIO_MIN_VERSION=2.37.0 GIO_MIN_VERSION=2.37.0
LIBECAL_MIN_VERSION=3.5.3 LIBECAL_MIN_VERSION=3.5.3
LIBEDATASERVER_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 gjs-internals-1.0 >= $GJS_MIN_VERSION
$recorder_modules $recorder_modules
gdk-x11-3.0 libsoup-2.4 gdk-x11-3.0 libsoup-2.4
xtst
clutter-x11-1.0 >= $CLUTTER_MIN_VERSION clutter-x11-1.0 >= $CLUTTER_MIN_VERSION
clutter-glx-1.0 >= $CLUTTER_MIN_VERSION clutter-glx-1.0 >= $CLUTTER_MIN_VERSION
libstartup-notification-1.0 >= $STARTUP_NOTIFICATION_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(SHELL_HOTPLUG_SNIFFER, gio-2.0 gdk-pixbuf-2.0)
PKG_CHECK_MODULES(TRAY, gtk+-3.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(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) PKG_CHECK_MODULES(CARIBOU, caribou-1.0 >= 0.4.8)
AC_ARG_ENABLE(browser-plugin, AC_ARG_ENABLE(browser-plugin,
@@ -231,17 +232,9 @@ esac
AM_CFLAGS="$AM_CFLAGS $WARN_CFLAGS" AM_CFLAGS="$AM_CFLAGS $WARN_CFLAGS"
AC_SUBST(AM_CFLAGS) AC_SUBST(AM_CFLAGS)
if test -z "${BROWSER_PLUGIN_DIR}"; then BROWSER_PLUGIN_DIR="${BROWSER_PLUGIN_DIR:-"\${libdir}/mozilla/plugins"}"
BROWSER_PLUGIN_DIR="\${libdir}/mozilla/plugins"
fi
AC_ARG_VAR([BROWSER_PLUGIN_DIR],[Where to install the plugin to]) 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([ AC_CONFIG_FILES([
Makefile Makefile
data/Makefile data/Makefile

View File

@@ -35,11 +35,44 @@ introspection_DATA = \
org.gnome.ShellSearchProvider.xml \ org.gnome.ShellSearchProvider.xml \
org.gnome.ShellSearchProvider2.xml org.gnome.ShellSearchProvider2.xml
resource_files = $(shell $(GLIB_COMPILE_RESOURCES) --sourcedir=$(srcdir)/theme --generate-dependencies $(srcdir)/gnome-shell-theme.gresource.xml) themedir = $(pkgdatadir)/theme
gnome-shell-theme.gresource: gnome-shell-theme.gresource.xml $(resource_files) dist_theme_DATA = \
$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir)/theme $< theme/calendar-arrow-left.svg \
resourcedir = $(pkgdatadir) theme/calendar-arrow-right.svg \
resource_DATA = gnome-shell-theme.gresource 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) backgrounddir = $(pkgdatadir)
background_DATA = perf-background.xml background_DATA = perf-background.xml
@@ -83,9 +116,7 @@ EXTRA_DIST = \
perf-background.xml.in \ perf-background.xml.in \
org.gnome.Shell.PortalHelper.desktop.in \ org.gnome.Shell.PortalHelper.desktop.in \
org.gnome.Shell.PortalHelper.service.in \ org.gnome.Shell.PortalHelper.service.in \
org.gnome.shell.gschema.xml.in.in \ org.gnome.shell.gschema.xml.in.in
gnome-shell-theme.gresource.xml \
$(resource_files)
CLEANFILES += \ CLEANFILES += \
gnome-shell.desktop.in \ gnome-shell.desktop.in \
@@ -97,5 +128,4 @@ CLEANFILES += \
perf-background.xml \ perf-background.xml \
gschemas.compiled \ gschemas.compiled \
org.gnome.shell.gschema.valid \ org.gnome.shell.gschema.valid \
org.gnome.shell.gschema.xml.in \ org.gnome.shell.gschema.xml.in
gnome-shell-theme.gresource

View File

@@ -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>

View File

@@ -1,5 +1,5 @@
[Desktop Entry] [Desktop Entry]
_Name=Network Login _Name=Captive Portal
Type=Application Type=Application
Exec=gapplication launch org.gnome.Shell.PortalHelper Exec=gapplication launch org.gnome.Shell.PortalHelper
DBusActivatable=true DBusActivatable=true

View File

@@ -31,7 +31,7 @@
</_description> </_description>
</key> </key>
<key name="favorite-apps" type="as"> <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> <_summary>List of desktop file IDs for favorite applications</_summary>
<_description> <_description>
The applications corresponding to these identifiers The applications corresponding to these identifiers

View File

@@ -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;
}

View File

@@ -232,10 +232,6 @@ StScrollBar StButton#vhandle:active {
border-width: 0px; border-width: 0px;
} }
.app-well-menu {
max-width: 400px;
}
/* The remaining popup-menu sizing is all done in ems, so that if you /* 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. * override .popup-menu.font-size, everything else will scale with it.
*/ */
@@ -829,7 +825,6 @@ StScrollBar StButton#vhandle:active {
.window-clone-border { .window-clone-border {
border: 4px solid rgba(255, 255, 255, 0.5); border: 4px solid rgba(255, 255, 255, 0.5);
border-radius: 4px; border-radius: 4px;
box-shadow: inset 0px 0px 0px 1px rgba(255, 255, 255, 0.5);
} }
.notification-close { .notification-close {
@@ -1495,10 +1490,6 @@ StScrollBar StButton#vhandle:active {
text-align: right; text-align: right;
} }
.events-day-time-ellipses {
color: rgba(153, 153, 153, 1.0);
}
.events-day-time:rtl { .events-day-time:rtl {
text-align: left; text-align: left;
} }
@@ -2107,15 +2098,6 @@ StScrollBar StButton#vhandle:active {
font-size: 14pt; 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 */ /* ShellMountOperation Dialogs */
.shell-mount-operation-icon { .shell-mount-operation-icon {
icon-size: 48px; icon-size: 48px;
@@ -2397,10 +2379,6 @@ StScrollBar StButton#vhandle:active {
} }
/* Login Dialog */ /* Login Dialog */
.login-dialog-banner-view {
padding-top: 24px;
max-width: 23em;
}
.framed-user-icon { .framed-user-icon {
border: 2px solid #8b8b8b; border: 2px solid #8b8b8b;
@@ -2413,7 +2391,11 @@ StScrollBar StButton#vhandle:active {
} }
.login-dialog-banner { .login-dialog-banner {
font-size: 10pt;
font-weight: bold;
text-align: center;
color: #666666; color: #666666;
padding-bottom: 1em;
} }
.login-dialog { .login-dialog {

View File

@@ -59,10 +59,14 @@ const Application = new Lang.Class({
_extensionAvailable: function(uuid) { _extensionAvailable: function(uuid) {
let extension = ExtensionUtils.extensions[uuid]; let extension = ExtensionUtils.extensions[uuid];
let checkVersion = !this._settings.get_boolean('disable-extension-version-validation');
if (!extension) if (!extension)
return false; return false;
if (checkVersion && ExtensionUtils.isOutOfDate(extension))
return false;
if (!extension.dir.get_child('prefs.js').query_exists(null)) if (!extension.dir.get_child('prefs.js').query_exists(null))
return false; return false;
@@ -281,10 +285,6 @@ const ExtensionRow = new Lang.Class({
function() { function() {
this._switch.state = this._isEnabled(); this._switch.state = this._isEnabled();
})); }));
this._settings.connect('changed::disable-extension-version-validation',
Lang.bind(this, function() {
this._switch.sensitive = this._canEnable();
}));
this._buildUI(); this._buildUI();
}, },
@@ -323,7 +323,6 @@ const ExtensionRow = new Lang.Class({
this.prefsButton = button; this.prefsButton = button;
this._switch = new Gtk.Switch({ valign: Gtk.Align.CENTER, this._switch = new Gtk.Switch({ valign: Gtk.Align.CENTER,
sensitive: this._canEnable(),
state: this._isEnabled() }); state: this._isEnabled() });
this._switch.connect('notify::active', Lang.bind(this, this._switch.connect('notify::active', Lang.bind(this,
function() { function() {
@@ -336,13 +335,6 @@ const ExtensionRow = new Lang.Class({
hbox.add(this._switch); 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() { _isEnabled: function() {
let extensions = this._settings.get_strv('enabled-extensions'); let extensions = this._settings.get_strv('enabled-extensions');
return extensions.indexOf(this.uuid) != -1; return extensions.indexOf(this.uuid) != -1;

View File

@@ -1,7 +1,6 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Clutter = imports.gi.Clutter; const Clutter = imports.gi.Clutter;
const Gio = imports.gi.Gio;
const Lang = imports.lang; const Lang = imports.lang;
const Signals = imports.signals; const Signals = imports.signals;
const St = imports.gi.St; const St = imports.gi.St;
@@ -127,7 +126,7 @@ const AuthPrompt = new Lang.Class({
this._initButtons(); 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 = new Animation.AnimatedIcon(spinnerIcon, DEFAULT_BUTTON_WELL_ICON_SIZE);
this._spinner.actor.opacity = 0; this._spinner.actor.opacity = 0;
this._spinner.actor.show(); this._spinner.actor.show();
@@ -135,7 +134,8 @@ const AuthPrompt = new Lang.Class({
}, },
_onDestroy: function() { _onDestroy: function() {
this._userVerifier.destroy(); this._userVerifier.clear();
this._userVerifier.disconnectAll();
this._userVerifier = null; this._userVerifier = null;
}, },
@@ -261,7 +261,6 @@ const AuthPrompt = new Lang.Class({
_onVerificationComplete: function() { _onVerificationComplete: function() {
this.verificationStatus = AuthPromptStatus.VERIFICATION_SUCCEEDED; this.verificationStatus = AuthPromptStatus.VERIFICATION_SUCCEEDED;
this.cancelButton.reactive = false;
}, },
_onReset: function() { _onReset: function() {
@@ -420,20 +419,17 @@ const AuthPrompt = new Lang.Class({
}, },
setUser: function(user) { setUser: function(user) {
let oldChild = this._userWell.get_child();
if (oldChild)
oldChild.destroy();
if (user) { if (user) {
let userWidget = new UserWidget.UserWidget(user); let userWidget = new UserWidget.UserWidget(user);
this._userWell.set_child(userWidget.actor); this._userWell.set_child(userWidget.actor);
} else {
this._userWell.set_child(null);
} }
}, },
reset: function() { reset: function() {
let oldStatus = this.verificationStatus; let oldStatus = this.verificationStatus;
this.verificationStatus = AuthPromptStatus.NOT_VERIFYING; this.verificationStatus = AuthPromptStatus.NOT_VERIFYING;
this.cancelButton.reactive = true;
if (oldStatus == AuthPromptStatus.VERIFYING) if (oldStatus == AuthPromptStatus.VERIFYING)
this._userVerifier.cancel(); this._userVerifier.cancel();
@@ -502,9 +498,6 @@ const AuthPrompt = new Lang.Class({
}, },
cancel: function() { cancel: function() {
if (this.verificationStatus == AuthPromptStatus.NOT_VERIFYING || this.verificationStatus == AuthPromptStatus.VERIFICATION_SUCCEEDED) {
return;
}
this.reset(); this.reset();
this.emit('cancelled'); this.emit('cancelled');
} }

View File

@@ -26,7 +26,6 @@ const Gtk = imports.gi.Gtk;
const Lang = imports.lang; const Lang = imports.lang;
const Mainloop = imports.mainloop; const Mainloop = imports.mainloop;
const Meta = imports.gi.Meta; const Meta = imports.gi.Meta;
const Pango = imports.gi.Pango;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
const Signals = imports.signals; const Signals = imports.signals;
const St = imports.gi.St; const St = imports.gi.St;
@@ -65,8 +64,6 @@ const UserListItem = new Lang.Class({
reactive: true, reactive: true,
x_align: St.Align.START, x_align: St.Align.START,
x_fill: true }); x_fill: true });
this.actor.connect('destroy',
Lang.bind(this, this._onDestroy));
this._userWidget = new UserWidget.UserWidget(this.user); this._userWidget = new UserWidget.UserWidget(this.user);
layout.add(this._userWidget.actor); layout.add(this._userWidget.actor);
@@ -90,10 +87,6 @@ const UserListItem = new Lang.Class({
this.actor.remove_style_pseudo_class('logged-in'); this.actor.remove_style_pseudo_class('logged-in');
}, },
_onDestroy: function() {
this._user.disconnect(this._userChangedId);
},
_onClicked: function() { _onClicked: function() {
this.emit('activate'); this.emit('activate');
}, },
@@ -365,12 +358,12 @@ const LoginDialog = new Lang.Class({
Name: 'LoginDialog', Name: 'LoginDialog',
_init: function(parentActor) { _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 }); visible: false });
this.actor.get_accessible().set_role(Atk.Role.WINDOW);
this.actor.add_constraint(new Layout.MonitorConstraint({ primary: true })); 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)); this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
parentActor.add_child(this.actor); parentActor.add_child(this.actor);
@@ -380,11 +373,12 @@ const LoginDialog = new Lang.Class({
if (GLib.getenv('GDM_GREETER_TEST') != '1') { if (GLib.getenv('GDM_GREETER_TEST') != '1') {
this._greeter = gdmClient.get_greeter_sync(null); 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)); Lang.bind(this, this._onDefaultSessionChanged));
this._sessionOpenedId = this._greeter.connect('session-opened',
this._greeter.connect('session-opened',
Lang.bind(this, this._onSessionOpened)); Lang.bind(this, this._onSessionOpened));
this._timedLoginRequestedId = this._greeter.connect('timed-login-requested', this._greeter.connect('timed-login-requested',
Lang.bind(this, this._onTimedLoginRequested)); Lang.bind(this, this._onTimedLoginRequested));
} }
@@ -400,16 +394,23 @@ const LoginDialog = new Lang.Class({
Lang.bind(this, this._updateLogo)); Lang.bind(this, this._updateLogo));
this._textureCache = St.TextureCache.get_default(); 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)); Lang.bind(this, this._updateLogoTexture));
this._userSelectionBox = new St.BoxLayout({ style_class: 'login-dialog-user-selection-box', this._userSelectionBox = new St.BoxLayout({ style_class: 'login-dialog-user-selection-box',
x_align: Clutter.ActorAlign.CENTER, x_align: Clutter.ActorAlign.CENTER,
y_align: Clutter.ActorAlign.CENTER, y_align: Clutter.ActorAlign.CENTER,
x_expand: true,
y_expand: true,
vertical: true, vertical: true,
visible: false }); visible: false });
this.actor.add_child(this._userSelectionBox); 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._userList = new UserList();
this._userSelectionBox.add(this._userList.actor, this._userSelectionBox.add(this._userList.actor,
{ expand: true, { expand: true,
@@ -444,25 +445,11 @@ const LoginDialog = new Lang.Class({
x_align: St.Align.START, x_align: St.Align.START,
x_fill: true }); 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', this._logoBin = new St.Widget({ style_class: 'login-dialog-logo-bin',
x_align: Clutter.ActorAlign.CENTER, 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.actor.add_child(this._logoBin);
this._updateLogo(); 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 // 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 // screen shield is initialized first to prevent it from stealing the
// focus later // focus later
this._startupCompleteId = Main.layoutManager.connect('startup-complete', Main.layoutManager.connect('startup-complete',
Lang.bind(this, this._updateDisableUserList)); 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() { _ensureUserListLoaded: function() {
if (!this._userManager.is_loaded) { if (!this._userManager.is_loaded) {
this._userManagerLoadedId = this._userManager.connect('notify::is-loaded', this._userManagerLoadedId = this._userManager.connect('notify::is-loaded',
@@ -719,26 +532,14 @@ const LoginDialog = new Lang.Class({
} }
}, },
_fadeInBannerView: function() { _updateLogoTexture: function(cache, uri) {
Tweener.addTween(this._bannerView, if (this._logoFileUri != uri)
{ 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))
return; return;
this._logoBin.destroy_all_children(); this._logoBin.destroy_all_children();
if (this._logoFile) { if (this._logoFileUri) {
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor; 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, -1, _LOGO_ICON_HEIGHT,
scaleFactor)); scaleFactor));
} }
@@ -747,8 +548,8 @@ const LoginDialog = new Lang.Class({
_updateLogo: function() { _updateLogo: function() {
let path = this._settings.get_string(GdmUtil.LOGO_KEY); let path = this._settings.get_string(GdmUtil.LOGO_KEY);
this._logoFile = path ? Gio.file_new_for_path(path) : null; this._logoFileUri = path ? Gio.file_new_for_path(path).get_uri() : null;
this._updateLogoTexture(this._textureCache, this._logoFile); this._updateLogoTexture(this._textureCache, this._logoFileUri);
}, },
_onPrompted: function() { _onPrompted: function() {
@@ -798,7 +599,6 @@ const LoginDialog = new Lang.Class({
{ opacity: 255, { opacity: 255,
time: _FADE_ANIMATION_TIME, time: _FADE_ANIMATION_TIME,
transition: 'easeOutQuad' }); transition: 'easeOutQuad' });
this._fadeInBannerView();
}, },
_showRealmLoginHint: function(realmManager, hint) { _showRealmLoginHint: function(realmManager, hint) {
@@ -838,8 +638,6 @@ const LoginDialog = new Lang.Class({
realmManager.release(); realmManager.release();
})); }));
this._updateCancelButton(); this._updateCancelButton();
this._authPrompt.updateSensitivity(true);
this._showPrompt(); this._showPrompt();
}, },
@@ -867,8 +665,6 @@ const LoginDialog = new Lang.Class({
}, },
_gotGreeterSessionProxy: function(proxy) { _gotGreeterSessionProxy: function(proxy) {
this._greeterSessionProxy = proxy;
this._greeterSessionProxyChangedId =
proxy.connect('g-properties-changed', Lang.bind(this, function() { proxy.connect('g-properties-changed', Lang.bind(this, function() {
if (proxy.Active) if (proxy.Active)
this._loginScreenSessionActivated(); this._loginScreenSessionActivated();
@@ -1055,7 +851,6 @@ const LoginDialog = new Lang.Class({
_showUserList: function() { _showUserList: function() {
this._ensureUserListLoaded(); this._ensureUserListLoaded();
this._authPrompt.hide(); this._authPrompt.hide();
this._hideBannerView();
this._sessionMenuButton.close(); this._sessionMenuButton.close();
this._setUserListExpanded(true); this._setUserListExpanded(true);
this._notListedButton.show(); this._notListedButton.show();
@@ -1095,30 +890,6 @@ const LoginDialog = new Lang.Class({
this._userManager.disconnect(this._userManagerLoadedId); this._userManager.disconnect(this._userManagerLoadedId);
this._userManagerLoadedId = 0; 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() { _loadUserList: function() {
@@ -1133,12 +904,12 @@ const LoginDialog = new Lang.Class({
this._userList.addUser(users[i]); this._userList.addUser(users[i]);
} }
this._userAddedId = this._userManager.connect('user-added', this._userManager.connect('user-added',
Lang.bind(this, function(userManager, user) { Lang.bind(this, function(userManager, user) {
this._userList.addUser(user); this._userList.addUser(user);
})); }));
this._userRemovedId = this._userManager.connect('user-removed', this._userManager.connect('user-removed',
Lang.bind(this, function(userManager, user) { Lang.bind(this, function(userManager, user) {
this._userList.removeUser(user); this._userList.removeUser(user);
})); }));
@@ -1155,7 +926,7 @@ const LoginDialog = new Lang.Class({
this.actor.show(); this.actor.show();
this.actor.opacity = 0; 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, Tweener.addTween(this.actor,
{ opacity: 255, { opacity: 255,

View File

@@ -142,9 +142,9 @@ const ShellUserVerifier = new Lang.Class({
// after a user has been picked. // after a user has been picked.
this._checkForSmartcard(); this._checkForSmartcard();
this._smartcardInsertedId = this._smartcardManager.connect('smartcard-inserted', this._smartcardManager.connect('smartcard-inserted',
Lang.bind(this, this._checkForSmartcard)); Lang.bind(this, this._checkForSmartcard));
this._smartcardRemovedId = this._smartcardManager.connect('smartcard-removed', this._smartcardManager.connect('smartcard-removed',
Lang.bind(this, this._checkForSmartcard)); Lang.bind(this, this._checkForSmartcard));
this._messageQueue = []; this._messageQueue = [];
@@ -159,7 +159,7 @@ const ShellUserVerifier = new Lang.Class({
if (this._oVirtCredentialsManager.hasToken()) if (this._oVirtCredentialsManager.hasToken())
this._oVirtUserAuthenticated(this._oVirtCredentialsManager.getToken()); this._oVirtUserAuthenticated(this._oVirtCredentialsManager.getToken());
this._oVirtUserAuthenticatedId = this._oVirtCredentialsManager.connect('user-authenticated', this._oVirtCredentialsManager.connect('user-authenticated',
Lang.bind(this, this._oVirtUserAuthenticated)); 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() { clear: function() {
if (this._cancellable) { if (this._cancellable) {
this._cancellable.cancel(); this._cancellable.cancel();
this._cancellable = null; this._cancellable = null;
} }
this._clearUserVerifier(); if (this._userVerifier) {
this._userVerifier.run_dispose();
this._userVerifier = null;
}
this._clearMessageQueue(); 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) { answerQuery: function(serviceName, answer) {
if (!this.hasPendingMessages) { if (!this.hasPendingMessages) {
this._userVerifier.call_answer_query(serviceName, answer, this._cancellable, null); 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, this._fprintManager.GetDefaultDeviceRemote(Gio.DBusCallFlags.NONE, this._cancellable, Lang.bind(this,
function(device, error) { function(device, error) {
if (!error && device) { if (!error && device)
this._haveFingerprintReader = true; this._haveFingerprintReader = true;
this._updateDefaultService(); this._updateDefaultService();
}
})); }));
}, },
@@ -344,7 +326,6 @@ const ShellUserVerifier = new Lang.Class({
_reauthenticationChannelOpened: function(client, result) { _reauthenticationChannelOpened: function(client, result) {
try { try {
this._clearUserVerifier();
this._userVerifier = client.open_reauthentication_channel_finish(result); this._userVerifier = client.open_reauthentication_channel_finish(result);
} catch(e if e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED)) { } catch(e if e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED)) {
return; return;
@@ -368,7 +349,6 @@ const ShellUserVerifier = new Lang.Class({
_userVerifierGot: function(client, result) { _userVerifierGot: function(client, result) {
try { try {
this._clearUserVerifier();
this._userVerifier = client.get_user_verifier_finish(result); this._userVerifier = client.get_user_verifier_finish(result);
} catch(e if e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED)) { } catch(e if e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED)) {
return; return;

View File

@@ -16,9 +16,7 @@
<file>misc/fileUtils.js</file> <file>misc/fileUtils.js</file>
<file>misc/gnomeSession.js</file> <file>misc/gnomeSession.js</file>
<file>misc/history.js</file> <file>misc/history.js</file>
<file>misc/ibusManager.js</file>
<file>misc/jsParse.js</file> <file>misc/jsParse.js</file>
<file>misc/keyboardManager.js</file>
<file>misc/loginManager.js</file> <file>misc/loginManager.js</file>
<file>misc/modemManager.js</file> <file>misc/modemManager.js</file>
<file>misc/objectManager.js</file> <file>misc/objectManager.js</file>
@@ -92,6 +90,7 @@
<file>ui/windowAttentionHandler.js</file> <file>ui/windowAttentionHandler.js</file>
<file>ui/windowMenu.js</file> <file>ui/windowMenu.js</file>
<file>ui/windowManager.js</file> <file>ui/windowManager.js</file>
<file>ui/wobbly.js</file>
<file>ui/workspace.js</file> <file>ui/workspace.js</file>
<file>ui/workspaceSwitcherPopup.js</file> <file>ui/workspaceSwitcherPopup.js</file>
<file>ui/workspaceThumbnail.js</file> <file>ui/workspaceThumbnail.js</file>

View File

@@ -43,7 +43,7 @@ function getCurrentExtension() {
let path = match[1]; let path = match[1];
let file = Gio.File.new_for_path(path); 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. // the same UUID as a directory name.
while (file != null) { while (file != null) {
let extension = extensions[file.get_basename()]; let extension = extensions[file.get_basename()];

View File

@@ -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);

View File

@@ -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;
}
});

View File

@@ -58,14 +58,6 @@ const AppSwitcherPopup = new Lang.Class({
this._currentWindow = -1; this._currentWindow = -1;
this.thumbnailsVisible = false; 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) { _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 leftPadding = this.actor.get_theme_node().get_padding(St.Side.LEFT);
let rightPadding = this.actor.get_theme_node().get_padding(St.Side.RIGHT); 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 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 hPadding = leftPadding + rightPadding;
let icon = this._items[this._selectedIndex].actor; 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) { _initialSelection: function(backward, binding) {
if (binding == 'switch-group') { if (binding == 'switch-group') {
if (backward) { if (backward) {
@@ -358,18 +365,9 @@ const WindowSwitcherPopup = new Lang.Class({
Name: 'WindowSwitcherPopup', Name: 'WindowSwitcherPopup',
Extends: SwitcherPopup.SwitcherPopup, Extends: SwitcherPopup.SwitcherPopup,
_init: function() { _init: function(items) {
this.parent(); this.parent(items);
this._settings = new Gio.Settings({ schema_id: 'org.gnome.shell.window-switcher' }); 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() { _getWindowList: function() {
@@ -377,6 +375,31 @@ const WindowSwitcherPopup = new Lang.Class({
return global.display.get_tab_list(Meta.TabList.NORMAL, workspace); 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) { _keyPressHandler: function(keysym, action) {
if (action == Meta.KeyBindingAction.SWITCH_WINDOWS) { if (action == Meta.KeyBindingAction.SWITCH_WINDOWS) {
this._select(this._next()); this._select(this._next());

View File

@@ -12,7 +12,7 @@ const ANIMATED_ICON_UPDATE_TIMEOUT = 100;
const Animation = new Lang.Class({ const Animation = new Lang.Class({
Name: 'Animation', Name: 'Animation',
_init: function(file, width, height, speed) { _init: function(filename, width, height, speed) {
this.actor = new St.Bin(); this.actor = new St.Bin();
this.actor.connect('destroy', Lang.bind(this, this._onDestroy)); this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
this._speed = speed; this._speed = speed;
@@ -23,7 +23,7 @@ const Animation = new Lang.Class({
this._frame = 0; this._frame = 0;
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor; 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)); Lang.bind(this, this._animationsLoaded));
this.actor.set_child(this._animations); this.actor.set_child(this._animations);
}, },
@@ -82,7 +82,7 @@ const AnimatedIcon = new Lang.Class({
Name: 'AnimatedIcon', Name: 'AnimatedIcon',
Extends: Animation, Extends: Animation,
_init: function(file, size) { _init: function(filename, size) {
this.parent(file, size, size, ANIMATED_ICON_UPDATE_TIMEOUT); this.parent(filename, size, size, ANIMATED_ICON_UPDATE_TIMEOUT);
} }
}); });

View File

@@ -379,7 +379,9 @@ const AllView = new Lang.Class({
this.actor.add_actor(this._scrollView); this.actor.add_actor(this._scrollView);
this._scrollView.set_policy(Gtk.PolicyType.NEVER, 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._adjustment = this._scrollView.vscroll.adjustment;
this._pageIndicators = new PageIndicators(); this._pageIndicators = new PageIndicators();
@@ -1265,7 +1267,6 @@ const FolderIcon = new Lang.Class({
addAppId(appInfo.get_id()); addAppId(appInfo.get_id());
}); });
this.actor.visible = this.view.getAllItems().length > 0;
this.view.loadGrid(); this.view.loadGrid();
this.emit('apps-changed'); this.emit('apps-changed');
}, },
@@ -1562,11 +1563,10 @@ const AppIcon = new Lang.Class({
this.actor.connect('destroy', Lang.bind(this, this._onDestroy)); this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
this._menuTimeoutId = 0; this._menuTimeoutId = 0;
this._stateChangedId = this.app.connect('notify::state', Lang.bind(this, this._stateChangedId = this.app.connect('notify::state',
function () { Lang.bind(this,
this._updateRunningStyle(); this._onStateChanged));
})); this._onStateChanged();
this._updateRunningStyle();
}, },
_onDestroy: function() { _onDestroy: function() {
@@ -1587,7 +1587,7 @@ const AppIcon = new Lang.Class({
} }
}, },
_updateRunningStyle: function() { _onStateChanged: function() {
if (this.app.state != Shell.AppState.STOPPED) if (this.app.state != Shell.AppState.STOPPED)
this.actor.add_style_class_name('running'); this.actor.add_style_class_name('running');
else else
@@ -1687,8 +1687,7 @@ const AppIcon = new Lang.Class({
activate: function (button) { activate: function (button) {
let event = Clutter.get_current_event(); let event = Clutter.get_current_event();
let modifiers = event ? event.get_state() : 0; let modifiers = event ? event.get_state() : 0;
let openNewWindow = this.app.can_open_new_window () && let openNewWindow = modifiers & Clutter.ModifierType.CONTROL_MASK &&
modifiers & Clutter.ModifierType.CONTROL_MASK &&
this.app.state == Shell.AppState.RUNNING || this.app.state == Shell.AppState.RUNNING ||
button && button == 2; button && button == 2;

View File

@@ -14,11 +14,6 @@ const RENAMED_DESKTOP_IDS = {
'gcalctool.desktop': 'gnome-calculator.desktop', 'gcalctool.desktop': 'gnome-calculator.desktop',
'gedit.desktop': 'org.gnome.gedit.desktop', 'gedit.desktop': 'org.gnome.gedit.desktop',
'glchess.desktop': 'gnome-chess.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-clocks.desktop': 'org.gnome.clocks.desktop',
'gnome-contacts.desktop': 'org.gnome.Contacts.desktop', 'gnome-contacts.desktop': 'org.gnome.Contacts.desktop',
'gnome-documents.desktop': 'org.gnome.Documents.desktop', 'gnome-documents.desktop': 'org.gnome.Documents.desktop',
@@ -28,9 +23,6 @@ const RENAMED_DESKTOP_IDS = {
'gnome-software.desktop': 'org.gnome.Software.desktop', 'gnome-software.desktop': 'org.gnome.Software.desktop',
'gnome-weather.desktop': 'org.gnome.Weather.Application.desktop', 'gnome-weather.desktop': 'org.gnome.Weather.Application.desktop',
'gnomine.desktop': 'gnome-mines.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', 'nautilus.desktop': 'org.gnome.Nautilus.desktop',
'polari.desktop': 'org.gnome.Polari.desktop', 'polari.desktop': 'org.gnome.Polari.desktop',
'totem.desktop': 'org.gnome.Totem.desktop', 'totem.desktop': 'org.gnome.Totem.desktop',

View File

@@ -106,8 +106,6 @@ const Main = imports.ui.main;
const Params = imports.misc.params; const Params = imports.misc.params;
const Tweener = imports.ui.tweener; const Tweener = imports.ui.tweener;
const DEFAULT_BACKGROUND_COLOR = Clutter.Color.from_pixel(0x2e3436ff);
const BACKGROUND_SCHEMA = 'org.gnome.desktop.background'; const BACKGROUND_SCHEMA = 'org.gnome.desktop.background';
const PRIMARY_COLOR_KEY = 'primary-color'; const PRIMARY_COLOR_KEY = 'primary-color';
const SECONDARY_COLOR_KEY = 'secondary-color'; const SECONDARY_COLOR_KEY = 'secondary-color';
@@ -127,16 +125,6 @@ const ANIMATION_MIN_WAKEUP_INTERVAL = 1.0;
let _backgroundCache = null; 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({ const BackgroundCache = new Lang.Class({
Name: 'BackgroundCache', Name: 'BackgroundCache',
@@ -146,25 +134,25 @@ const BackgroundCache = new Lang.Class({
this._backgroundSources = {}; this._backgroundSources = {};
}, },
monitorFile: function(file) { monitorFile: function(filename) {
let key = file.hash(); if (this._fileMonitors[filename])
if (this._fileMonitors[key])
return; return;
let file = Gio.File.new_for_path(filename);
let monitor = file.monitor(Gio.FileMonitorFlags.NONE, null); let monitor = file.monitor(Gio.FileMonitorFlags.NONE, null);
monitor.connect('changed', monitor.connect('changed',
Lang.bind(this, function() { 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) { getAnimation: function(params) {
params = Params.parse(params, { file: null, params = Params.parse(params, { filename: null,
onLoaded: null }); onLoaded: null });
if (_fileEqual0(this._animationFile, params.file)) { if (this._animationFilename == params.filename) {
if (params.onLoaded) { if (params.onLoaded) {
let id = GLib.idle_add(GLib.PRIORITY_DEFAULT, Lang.bind(this, function() { let id = GLib.idle_add(GLib.PRIORITY_DEFAULT, Lang.bind(this, function() {
params.onLoaded(this._animation); params.onLoaded(this._animation);
@@ -172,13 +160,12 @@ const BackgroundCache = new Lang.Class({
})); }));
GLib.Source.set_name_by_id(id, '[gnome-shell] params.onLoaded'); 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() { animation.load(Lang.bind(this, function() {
this._animationFile = params.file; this._animationFilename = params.filename;
this._animation = animation; this._animation = animation;
if (params.onLoaded) { if (params.onLoaded) {
@@ -231,14 +218,14 @@ const Background = new Lang.Class({
params = Params.parse(params, { monitorIndex: 0, params = Params.parse(params, { monitorIndex: 0,
layoutManager: Main.layoutManager, layoutManager: Main.layoutManager,
settings: null, settings: null,
file: null, filename: null,
style: null }); style: null });
this.background = new Meta.Background({ meta_screen: global.screen }); this.background = new Meta.Background({ meta_screen: global.screen });
this.background._delegate = this; this.background._delegate = this;
this._settings = params.settings; this._settings = params.settings;
this._file = params.file; this._filename = params.filename;
this._style = params.style; this._style = params.style;
this._monitorIndex = params.monitorIndex; this._monitorIndex = params.monitorIndex;
this._layoutManager = params.layoutManager; this._layoutManager = params.layoutManager;
@@ -255,7 +242,11 @@ const Background = new Lang.Class({
destroy: function() { destroy: function() {
this._cancellable.cancel(); this._cancellable.cancel();
this._removeAnimationTimeout();
if (this._updateAnimationTimeoutId) {
GLib.source_remove (this._updateAnimationTimeoutId);
this._updateAnimationTimeoutId = 0;
}
let i; let i;
let keys = Object.keys(this._fileWatches); let keys = Object.keys(this._fileWatches);
@@ -269,13 +260,6 @@ const Background = new Lang.Class({
this._settingsChangedSignalId = 0; this._settingsChangedSignalId = 0;
}, },
updateResolution: function() {
if (this._animation) {
this._removeAnimationTimeout();
this._updateAnimation();
}
},
_setLoaded: function() { _setLoaded: function() {
if (this.isLoaded) if (this.isLoaded)
return; return;
@@ -305,28 +289,18 @@ const Background = new Lang.Class({
this.background.set_gradient(shadingType, color, secondColor); this.background.set_gradient(shadingType, color, secondColor);
}, },
_watchFile: function(file) { _watchFile: function(filename) {
let key = file.hash(); if (this._fileWatches[filename])
if (this._fileWatches[key])
return; return;
this._cache.monitorFile(file); this._cache.monitorFile(filename);
let signalId = this._cache.connect('file-changed', let signalId = this._cache.connect('file-changed',
Lang.bind(this, function(cache, changedFile) { Lang.bind(this, function(cache, changedFile) {
if (changedFile.equal(file)) { if (changedFile == filename) {
let imageCache = Meta.BackgroundImageCache.get_default();
imageCache.purge(changedFile);
this.emit('changed'); this.emit('changed');
} }
})); }));
this._fileWatches[key] = signalId; this._fileWatches[filename] = signalId;
},
_removeAnimationTimeout: function() {
if (this._updateAnimationTimeoutId) {
GLib.source_remove(this._updateAnimationTimeoutId);
this._updateAnimationTimeoutId = 0;
}
}, },
_updateAnimation: function() { _updateAnimation: function() {
@@ -342,9 +316,9 @@ const Background = new Lang.Class({
this._animation.transitionProgress, this._animation.transitionProgress,
this._style); this._style);
} else if (files.length > 0) { } else if (files.length > 0) {
this.background.set_file(files[0], this._style); this.background.set_filename(files[0], this._style);
} else { } else {
this.background.set_file(null, this._style); this.background.set_filename(null, this._style);
} }
this._queueUpdateAnimation(); this._queueUpdateAnimation();
}); });
@@ -401,8 +375,8 @@ const Background = new Lang.Class({
GLib.Source.set_name_by_id(this._updateAnimationTimeoutId, '[gnome-shell] this._updateAnimation'); GLib.Source.set_name_by_id(this._updateAnimationTimeoutId, '[gnome-shell] this._updateAnimation');
}, },
_loadAnimation: function(file) { _loadAnimation: function(filename) {
this._cache.getAnimation({ file: file, this._cache.getAnimation({ filename: filename,
onLoaded: Lang.bind(this, function(animation) { onLoaded: Lang.bind(this, function(animation) {
this._animation = animation; this._animation = animation;
@@ -412,17 +386,17 @@ const Background = new Lang.Class({
} }
this._updateAnimation(); this._updateAnimation();
this._watchFile(file); this._watchFile(filename);
}) })
}); });
}, },
_loadImage: function(file) { _loadImage: function(filename) {
this.background.set_file(file, this._style); this.background.set_filename(filename, this._style);
this._watchFile(file); this._watchFile(filename);
let cache = Meta.BackgroundImageCache.get_default(); let cache = Meta.BackgroundImageCache.get_default();
let image = cache.load(file); let image = cache.load(filename);
if (image.is_loaded()) if (image.is_loaded())
this._setLoaded(); this._setLoaded();
else { else {
@@ -434,11 +408,11 @@ const Background = new Lang.Class({
} }
}, },
_loadFile: function(file) { _loadFile: function(filename) {
if (file.get_basename().endsWith('.xml')) if (filename.endsWith('.xml'))
this._loadAnimation(file); this._loadAnimation(filename);
else else
this._loadImage(file); this._loadImage(filename);
}, },
_load: function () { _load: function () {
@@ -446,12 +420,12 @@ const Background = new Lang.Class({
this._loadPattern(); this._loadPattern();
if (!this._file) { if (!this._filename) {
this._setLoaded(); this._setLoaded();
return; return;
} }
this._loadFile(this._file); this._loadFile(this._filename);
}, },
}); });
Signals.addSignalMethods(Background.prototype); Signals.addSignalMethods(Background.prototype);
@@ -462,12 +436,11 @@ const SystemBackground = new Lang.Class({
Name: 'SystemBackground', Name: 'SystemBackground',
_init: function() { _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) { if (_systemBackground == null) {
_systemBackground = new Meta.Background({ meta_screen: global.screen }); _systemBackground = new Meta.Background({ meta_screen: global.screen });
_systemBackground.set_color(DEFAULT_BACKGROUND_COLOR); _systemBackground.set_filename(filename, GDesktopEnums.BackgroundStyle.WALLPAPER);
_systemBackground.set_file(file, GDesktopEnums.BackgroundStyle.WALLPAPER);
} }
this.actor = new Meta.BackgroundActor({ meta_screen: global.screen, this.actor = new Meta.BackgroundActor({ meta_screen: global.screen,
@@ -475,7 +448,7 @@ const SystemBackground = new Lang.Class({
background: _systemBackground }); background: _systemBackground });
let cache = Meta.BackgroundImageCache.get_default(); let cache = Meta.BackgroundImageCache.get_default();
let image = cache.load(file); let image = cache.load(filename);
if (image.is_loaded()) { if (image.is_loaded()) {
image = null; image = null;
let id = GLib.idle_add(GLib.PRIORITY_DEFAULT, Lang.bind(this, function() { 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._overrideImage = GLib.getenv('SHELL_BACKGROUND_IMAGE');
this._settings = new Gio.Settings({ schema_id: settingsSchema }); this._settings = new Gio.Settings({ schema_id: settingsSchema });
this._backgrounds = []; 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) { getBackground: function(monitorIndex) {
let file = null; let filename = null;
let style; let style;
if (this._overrideImage != null) { if (this._overrideImage != null) {
file = Gio.File.new_for_path(this._overrideImage); filename = this._overrideImage;
style = GDesktopEnums.BackgroundStyle.ZOOM; // Hardcode style = GDesktopEnums.BackgroundStyle.ZOOM; // Hardcode
} else { } else {
style = this._settings.get_enum(BACKGROUND_STYLE_KEY); style = this._settings.get_enum(BACKGROUND_STYLE_KEY);
if (style != GDesktopEnums.BackgroundStyle.NONE) { if (style != GDesktopEnums.BackgroundStyle.NONE) {
let uri = this._settings.get_string(PICTURE_URI_KEY); 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 // they can have variants that depend on the aspect ratio and
// size of the monitor; for other backgrounds we can use the // size of the monitor; for other backgrounds we can use the
// same background object for all monitors. // same background object for all monitors.
if (file == null || !file.get_basename().endsWith('.xml')) if (filename == null || !filename.endsWith('.xml'))
monitorIndex = 0; monitorIndex = 0;
if (!(monitorIndex in this._backgrounds)) { if (!(monitorIndex in this._backgrounds)) {
@@ -550,12 +509,12 @@ const BackgroundSource = new Lang.Class({
monitorIndex: monitorIndex, monitorIndex: monitorIndex,
layoutManager: this._layoutManager, layoutManager: this._layoutManager,
settings: this._settings, settings: this._settings,
file: file, filename: filename,
style: style style: style
}); });
background._changedId = background.connect('changed', Lang.bind(this, function() { let changedId = background.connect('changed', Lang.bind(this, function() {
background.disconnect(background._changedId); background.disconnect(changedId);
background.destroy(); background.destroy();
delete this._backgrounds[monitorIndex]; delete this._backgrounds[monitorIndex];
})); }));
@@ -567,13 +526,8 @@ const BackgroundSource = new Lang.Class({
}, },
destroy: function() { destroy: function() {
global.screen.disconnect(this._monitorsChangedId); for (let monitorIndex in this._backgrounds)
this._backgrounds[monitorIndex].destroy();
for (let monitorIndex in this._backgrounds) {
let background = this._backgrounds[monitorIndex];
background.disconnect(background._changedId);
background.destroy();
}
this._backgrounds = null; this._backgrounds = null;
} }
@@ -583,9 +537,9 @@ const Animation = new Lang.Class({
Name: 'Animation', Name: 'Animation',
_init: function(params) { _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.keyFrameFiles = [];
this.transitionProgress = 0.0; this.transitionProgress = 0.0;
this.transitionDuration = 0.0; this.transitionDuration = 0.0;
@@ -593,7 +547,9 @@ const Animation = new Lang.Class({
}, },
load: function(callback) { 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, this._show.load_async(null,
Lang.bind(this, Lang.bind(this,
@@ -613,16 +569,16 @@ const Animation = new Lang.Class({
if (this._show.get_num_slides() < 1) if (this._show.get_num_slides() < 1)
return; 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.transitionDuration = duration;
this.transitionProgress = progress; this.transitionProgress = progress;
if (filename1) if (file1)
this.keyFrameFiles.push(Gio.File.new_for_path(filename1)); this.keyFrameFiles.push(file1);
if (filename2) if (file2)
this.keyFrameFiles.push(Gio.File.new_for_path(filename2)); this.keyFrameFiles.push(file2);
}, },
}); });
Signals.addSignalMethods(Animation.prototype); Signals.addSignalMethods(Animation.prototype);
@@ -745,7 +701,7 @@ const BackgroundManager = new Lang.Class({
background.disconnect(changeSignalId); background.disconnect(changeSignalId);
if (backgroundActor.loadedSignalId) if (backgroundActor.loadedSignalId)
background.disconnect(backgroundActor.loadedSignalId); backgroundActor.background._delegate.disconnect(backgroundActor.loadedSignalId);
})); }));
return backgroundActor; return backgroundActor;

View File

@@ -13,11 +13,9 @@ const Shell = imports.gi.Shell;
const MSECS_IN_DAY = 24 * 60 * 60 * 1000; const MSECS_IN_DAY = 24 * 60 * 60 * 1000;
const SHOW_WEEKDATE_KEY = 'show-weekdate'; const SHOW_WEEKDATE_KEY = 'show-weekdate';
const ELLIPSIS_CHAR = '\u2026';
// alias to prevent xgettext from picking up strings translated in GTK+ // alias to prevent xgettext from picking up strings translated in GTK+
const gtk30_ = Gettext_gtk30.gettext; const gtk30_ = Gettext_gtk30.gettext;
const NC_ = function(context, str) { return str; };
// in org.gnome.desktop.interface // in org.gnome.desktop.interface
const CLOCK_FORMAT_KEY = 'clock-format'; const CLOCK_FORMAT_KEY = 'clock-format';
@@ -34,10 +32,12 @@ function _sameDay(dateA, dateB) {
return _sameMonth(dateA, dateB) && (dateA.getDate() == dateB.getDate()); 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) { function _isWorkDay(date) {
/* Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday). */ return date.getDay() != 0 && date.getDay() != 6;
let days = C_('calendar-no-work', "06");
return days.indexOf(date.getDay().toString()) == -1;
} }
function _getBeginningOfDay(date) { function _getBeginningOfDay(date) {
@@ -58,21 +58,19 @@ function _getEndOfDay(date) {
return ret; return ret;
} }
function _formatEventTime(event, clockFormat, periodBegin, periodEnd) { function _formatEventTime(event, clockFormat) {
let ret; let ret;
let allDay = (event.allDay || (event.date <= periodBegin && event.end >= periodEnd)); if (event.allDay) {
if (allDay) {
/* Translators: Shown in calendar event list for all day events /* Translators: Shown in calendar event list for all day events
* Keep it short, best if you can use less then 10 characters * Keep it short, best if you can use less then 10 characters
*/ */
ret = C_("event list time", "All Day"); ret = C_("event list time", "All Day");
} else { } else {
let date = event.date >= periodBegin ? event.date : event.end;
switch (clockFormat) { switch (clockFormat) {
case '24h': case '24h':
/* Translators: Shown in calendar event list, if 24h format, /* Translators: Shown in calendar event list, if 24h format,
\u2236 is a ratio character, similar to : */ \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; break;
default: default:
@@ -81,13 +79,30 @@ function _formatEventTime(event, clockFormat, periodBegin, periodEnd) {
/* Translators: Shown in calendar event list, if 12h format, /* Translators: Shown in calendar event list, if 12h format,
\u2236 is a ratio character, similar to : and \u2009 is \u2236 is a ratio character, similar to : and \u2009 is
a thin space */ 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; break;
} }
} }
return ret; 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) { function _getCalendarDayAbbreviation(dayNumber) {
let abbreviations = [ let abbreviations = [
/* Translators: Calendar grid abbreviation for Sunday. /* Translators: Calendar grid abbreviation for Sunday.
@@ -233,25 +248,12 @@ const DBusEventSource = new Lang.Class({
this._initialized = false; this._initialized = false;
this._dbusProxy = new CalendarServer(); this._dbusProxy = new CalendarServer();
this._dbusProxy.init_async(GLib.PRIORITY_DEFAULT, null, Lang.bind(this, function(object, result) { this._dbusProxy.init_async(GLib.PRIORITY_DEFAULT, null, Lang.bind(this, function(object, result) {
let loaded = false;
try { try {
this._dbusProxy.init_finish(result); this._dbusProxy.init_finish(result);
loaded = true;
} catch(e) { } 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); log('Error loading calendars: ' + e.message);
return; return;
} }
}
this._dbusProxy.connectSignal('Changed', Lang.bind(this, this._onChanged)); this._dbusProxy.connectSignal('Changed', Lang.bind(this, this._onChanged));
@@ -266,11 +268,9 @@ const DBusEventSource = new Lang.Class({
this.emit('notify::has-calendars'); this.emit('notify::has-calendars');
})); }));
this._initialized = loaded; this._initialized = true;
if (loaded) {
this.emit('notify::has-calendars'); this.emit('notify::has-calendars');
this._onNameAppeared(); this._onNameAppeared();
}
})); }));
}, },
@@ -292,7 +292,6 @@ const DBusEventSource = new Lang.Class({
}, },
_onNameAppeared: function(owner) { _onNameAppeared: function(owner) {
this._initialized = true;
this._resetCache(); this._resetCache();
this._loadEvents(true); this._loadEvents(true);
}, },
@@ -362,12 +361,6 @@ const DBusEventSource = new Lang.Class({
result.push(event); 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; return result;
}, },
@@ -601,7 +594,6 @@ const Calendar = new Lang.Class({
beginDate.setHours(12); beginDate.setHours(12);
this._calendarBegin = new Date(beginDate); this._calendarBegin = new Date(beginDate);
this._markedAsToday = now;
let year = beginDate.getYear(); let year = beginDate.getYear();
@@ -669,7 +661,7 @@ const Calendar = new Lang.Class({
this._buttons.push(button); this._buttons.push(button);
if (this._useWeekdate && iter.getDay() == 4) { 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'}); style_class: 'calendar-day-base calendar-week-number'});
layout.attach(label, rtl ? 7 : 0, row, 1, 1); layout.attach(label, rtl ? 7 : 0, row, 1, 1);
} }
@@ -693,7 +685,7 @@ const Calendar = new Lang.Class({
else else
this._monthLabel.text = this._selectedDate.toLocaleFormat(this._headerFormat); 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._rebuildCalendar();
this._buttons.forEach(Lang.bind(this, function(button) { 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)); this._eventSource.connect('changed', Lang.bind(this, this._update));
}, },
_addEvent: function(event, index, includeDayName, periodBegin, periodEnd) { _addEvent: function(event, index, includeDayName) {
let dayString; let dayString;
if (includeDayName) { if (includeDayName)
if (event.date >= periodBegin)
dayString = _getEventDayAbbreviation(event.date.getDay()); dayString = _getEventDayAbbreviation(event.date.getDay());
else /* show event end day if it began earlier */ else
dayString = _getEventDayAbbreviation(event.end.getDay());
} else {
dayString = ''; dayString = '';
}
let dayLabel = new St.Label({ style_class: 'events-day-dayname', let dayLabel = new St.Label({ style_class: 'events-day-dayname',
text: dayString, text: dayString,
@@ -751,30 +739,16 @@ const EventsList = new Lang.Class({
let layout = this.actor.layout_manager; let layout = this.actor.layout_manager;
layout.attach(dayLabel, rtl ? 2 : 0, index, 1, 1); layout.attach(dayLabel, rtl ? 2 : 0, index, 1, 1);
let clockFormat = this._desktopSettings.get_string(CLOCK_FORMAT_KEY); 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', let timeLabel = new St.Label({ style_class: 'events-day-time',
text: timeString, text: timeString,
y_align: Clutter.ActorAlign.START }); y_align: Clutter.ActorAlign.START });
timeLabel.clutter_text.line_wrap = false; timeLabel.clutter_text.line_wrap = false;
timeLabel.clutter_text.ellipsize = false; timeLabel.clutter_text.ellipsize = false;
let preEllipsisLabel = new St.Label({ style_class: 'events-day-time-ellipses', layout.attach(timeLabel, 1, index, 1, 1);
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);
let titleLabel = new St.Label({ style_class: 'events-day-task', let titleLabel = new St.Label({ style_class: 'events-day-task',
text: event.summary, text: event.summary,
@@ -785,8 +759,8 @@ const EventsList = new Lang.Class({
layout.attach(titleLabel, rtl ? 0 : 2, index, 1, 1); layout.attach(titleLabel, rtl ? 0 : 2, index, 1, 1);
}, },
_addPeriod: function(header, index, periodBegin, periodEnd, includeDayName, showNothingScheduled) { _addPeriod: function(header, index, begin, end, includeDayName, showNothingScheduled) {
let events = this._eventSource.getEvents(periodBegin, periodEnd); let events = this._eventSource.getEvents(begin, end);
if (events.length == 0 && !showNothingScheduled) if (events.length == 0 && !showNothingScheduled)
return index; return index;
@@ -797,14 +771,15 @@ const EventsList = new Lang.Class({
index++; index++;
for (let n = 0; n < events.length; n++) { for (let n = 0; n < events.length; n++) {
this._addEvent(events[n], index, includeDayName, periodBegin, periodEnd); this._addEvent(events[n], index, includeDayName);
index++; index++;
} }
if (events.length == 0 && showNothingScheduled) { if (events.length == 0 && showNothingScheduled) {
let now = new Date();
/* Translators: Text to show if there are no events */ /* Translators: Text to show if there are no events */
let nothingEvent = new CalendarEvent(periodBegin, periodBegin, _("Nothing Scheduled"), true); let nothingEvent = new CalendarEvent(now, now, _("Nothing Scheduled"), true);
this._addEvent(nothingEvent, index, false, periodBegin, periodEnd); this._addEvent(nothingEvent, index, false);
index++; index++;
} }
@@ -817,17 +792,14 @@ const EventsList = new Lang.Class({
let dayBegin = _getBeginningOfDay(day); let dayBegin = _getBeginningOfDay(day);
let dayEnd = _getEndOfDay(day); let dayEnd = _getEndOfDay(day);
let dayFormat; let dayString;
let now = new Date(); let now = new Date();
if (_sameYear(day, now)) if (_sameYear(day, now))
/* Translators: Shown on calendar heading when selected day occurs on current year */ /* Translators: Shown on calendar heading when selected day occurs on current year */
dayFormat = Shell.util_translate_time_string(NC_("calendar heading", dayString = day.toLocaleFormat(C_("calendar heading", "%A, %B %d"));
"%A, %B %d"));
else else
/* Translators: Shown on calendar heading when selected day occurs on different year */ /* Translators: Shown on calendar heading when selected day occurs on different year */
dayFormat = Shell.util_translate_time_string(NC_("calendar heading", dayString = day.toLocaleFormat(C_("calendar heading", "%A, %B %d, %Y"));
"%A, %B %d, %Y"));
let dayString = day.toLocaleFormat(dayFormat);
this._addPeriod(dayString, 0, dayBegin, dayEnd, false, true); this._addPeriod(dayString, 0, dayBegin, dayEnd, false, true);
}, },

View File

@@ -84,7 +84,6 @@ const KeyringDialog = new Lang.Class({
let table = new St.Widget({ style_class: 'keyring-dialog-control-table', let table = new St.Widget({ style_class: 'keyring-dialog-control-table',
layout_manager: layout }); layout_manager: layout });
layout.hookup_style(table); layout.hookup_style(table);
let rtl = table.get_text_direction() == Clutter.TextDirection.RTL;
let row = 0; let row = 0;
if (this.prompt.password_visible) { if (this.prompt.password_visible) {
@@ -93,6 +92,7 @@ const KeyringDialog = new Lang.Class({
y_align: Clutter.ActorAlign.CENTER }); y_align: Clutter.ActorAlign.CENTER });
label.set_text(_("Password:")); label.set_text(_("Password:"));
label.clutter_text.ellipsize = Pango.EllipsizeMode.NONE; 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', this._passwordEntry = new St.Entry({ style_class: 'prompt-dialog-password-entry',
text: '', text: '',
can_focus: true, can_focus: true,
@@ -100,14 +100,7 @@ const KeyringDialog = new Lang.Class({
this._passwordEntry.clutter_text.set_password_char('\u25cf'); // ● U+25CF BLACK CIRCLE this._passwordEntry.clutter_text.set_password_char('\u25cf'); // ● U+25CF BLACK CIRCLE
ShellEntry.addContextMenu(this._passwordEntry, { isPassword: true }); ShellEntry.addContextMenu(this._passwordEntry, { isPassword: true });
this._passwordEntry.clutter_text.connect('activate', Lang.bind(this, this._onPasswordActivate)); 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); layout.attach(this._passwordEntry, 1, row, 1, 1);
}
row++; row++;
} else { } else {
this._passwordEntry = null; this._passwordEntry = null;
@@ -118,6 +111,7 @@ const KeyringDialog = new Lang.Class({
x_align: Clutter.ActorAlign.START, x_align: Clutter.ActorAlign.START,
y_align: Clutter.ActorAlign.CENTER })); y_align: Clutter.ActorAlign.CENTER }));
label.set_text(_("Type again:")); label.set_text(_("Type again:"));
layout.attach(label, 0, row, 1, 1);
this._confirmEntry = new St.Entry({ style_class: 'prompt-dialog-password-entry', this._confirmEntry = new St.Entry({ style_class: 'prompt-dialog-password-entry',
text: '', text: '',
can_focus: true, can_focus: true,
@@ -125,13 +119,7 @@ const KeyringDialog = new Lang.Class({
this._confirmEntry.clutter_text.set_password_char('\u25cf'); // ● U+25CF BLACK CIRCLE this._confirmEntry.clutter_text.set_password_char('\u25cf'); // ● U+25CF BLACK CIRCLE
ShellEntry.addContextMenu(this._confirmEntry, { isPassword: true }); ShellEntry.addContextMenu(this._confirmEntry, { isPassword: true });
this._confirmEntry.clutter_text.connect('activate', Lang.bind(this, this._onConfirmActivate)); 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); layout.attach(this._confirmEntry, 1, row, 1, 1);
}
row++; row++;
} else { } else {
this._confirmEntry = null; this._confirmEntry = null;
@@ -144,7 +132,7 @@ const KeyringDialog = new Lang.Class({
let choice = new CheckBox.CheckBox(); let choice = new CheckBox.CheckBox();
this.prompt.bind_property('choice-label', choice.getLabelActor(), 'text', GObject.BindingFlags.SYNC_CREATE); 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); 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++; row++;
} }
@@ -152,7 +140,7 @@ const KeyringDialog = new Lang.Class({
x_align: Clutter.ActorAlign.START }); x_align: Clutter.ActorAlign.START });
warning.clutter_text.ellipsize = Pango.EllipsizeMode.NONE; warning.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
warning.clutter_text.line_wrap = true; 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-visible', warning, 'visible', GObject.BindingFlags.SYNC_CREATE);
this.prompt.bind_property('warning', warning, 'text', GObject.BindingFlags.SYNC_CREATE); this.prompt.bind_property('warning', warning, 'text', GObject.BindingFlags.SYNC_CREATE);

View File

@@ -380,12 +380,6 @@ const VPNRequestHandler = new Lang.Class({
argv.push('-i'); argv.push('-i');
if (flags & NMClient.SecretAgentGetSecretsFlags.REQUEST_NEW) if (flags & NMClient.SecretAgentGetSecretsFlags.REQUEST_NEW)
argv.push('-r'); 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; this._newStylePlugin = authHelper.externalUIMode;
@@ -604,9 +598,7 @@ const NetworkAgent = new Lang.Class({
Name: 'NetworkAgent', Name: 'NetworkAgent',
_init: function() { _init: function() {
this._native = new Shell.NetworkAgent({ identifier: 'org.gnome.Shell.NetworkAgent', this._native = new Shell.NetworkAgent({ identifier: 'org.gnome.Shell.NetworkAgent' });
capabilities: NMClient.SecretAgentCapabilities.VPN_HINTS
});
this._dialogs = { }; this._dialogs = { };
this._vpnRequests = { }; this._vpnRequests = { };
@@ -706,23 +698,16 @@ const NetworkAgent = new Lang.Class({
let service = keyfile.get_string('VPN Connection', 'service'); let service = keyfile.get_string('VPN Connection', 'service');
let binary = keyfile.get_string('GNOME', 'auth-dialog'); let binary = keyfile.get_string('GNOME', 'auth-dialog');
let externalUIMode = false; let externalUIMode = false;
let hints = false;
try { try {
externalUIMode = keyfile.get_boolean('GNOME', 'supports-external-ui-mode'); externalUIMode = keyfile.get_boolean('GNOME', 'supports-external-ui-mode');
} catch(e) { } // ignore errors if key does not exist } 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; let path = binary;
if (!GLib.path_is_absolute(path)) { if (!GLib.path_is_absolute(path)) {
path = GLib.build_filenamev([Config.LIBEXECDIR, path]); path = GLib.build_filenamev([Config.LIBEXECDIR, path]);
} }
if (GLib.file_test(path, GLib.FileTest.IS_EXECUTABLE)) 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 else
throw new Error('VPN plugin at %s is not executable'.format(path)); throw new Error('VPN plugin at %s is not executable'.format(path));
} catch(e) { } catch(e) {

View File

@@ -36,8 +36,6 @@ const NotificationDirection = {
RECEIVED: 'chat-received' RECEIVED: 'chat-received'
}; };
const N_ = function(s) { return s; };
function makeMessageFromTpMessage(tpMessage, direction) { function makeMessageFromTpMessage(tpMessage, direction) {
let [text, flags] = tpMessage.to_text(); let [text, flags] = tpMessage.to_text();
@@ -952,70 +950,70 @@ const ChatNotification = new Lang.Class({
// Show only the time if date is on today // Show only the time if date is on today
if(daysAgo < 1){ if(daysAgo < 1){
/* Translators: Time in 24h format */ /* 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 // Show the word "Yesterday" and time if date is on yesterday
else if(daysAgo <2){ else if(daysAgo <2){
/* Translators: this is the word "Yesterday" followed by a /* 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" */
// xgettext:no-c-format // 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 // Show a week day and time if date is in the last week
else if (daysAgo < 7) { else if (daysAgo < 7) {
/* Translators: this is the week day name followed by a time /* 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" */
// xgettext:no-c-format // xgettext:no-c-format
format = N_("%A, %H\u2236%M"); format = _("%A, %H\u2236%M");
} else if (date.getYear() == now.getYear()) { } else if (date.getYear() == now.getYear()) {
/* Translators: this is the month name and day number /* Translators: this is the month name and day number
followed by a time string in 24h format. followed by a time string in 24h format.
i.e. "May 25, 14:30" */ i.e. "May 25, 14:30" */
// xgettext:no-c-format // xgettext:no-c-format
format = N_("%B %d, %H\u2236%M"); format = _("%B %d, %H\u2236%M");
} else { } else {
/* Translators: this is the month name, day number, year /* Translators: this is the month name, day number, year
number followed by a time string in 24h format. number followed by a time string in 24h format.
i.e. "May 25 2012, 14:30" */ i.e. "May 25 2012, 14:30" */
// xgettext:no-c-format // xgettext:no-c-format
format = N_("%B %d %Y, %H\u2236%M"); format = _("%B %d %Y, %H\u2236%M");
} }
} else { } else {
// Show only the time if date is on today // Show only the time if date is on today
if(daysAgo < 1){ if(daysAgo < 1){
/* Translators: Time in 24h format */ /* 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 // Show the word "Yesterday" and time if date is on yesterday
else if(daysAgo <2){ else if(daysAgo <2){
/* Translators: this is the word "Yesterday" followed by a /* 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" */
// xgettext:no-c-format // 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 // Show a week day and time if date is in the last week
else if (daysAgo < 7) { else if (daysAgo < 7) {
/* Translators: this is the week day name followed by a time /* 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" */
// xgettext:no-c-format // xgettext:no-c-format
format = N_("%A, %l\u2236%M %p"); format = _("%A, %l\u2236%M %p");
} else if (date.getYear() == now.getYear()) { } else if (date.getYear() == now.getYear()) {
/* Translators: this is the month name and day number /* Translators: this is the month name and day number
followed by a time string in 12h format. followed by a time string in 12h format.
i.e. "May 25, 2:30 pm" */ i.e. "May 25, 2:30 pm" */
// xgettext:no-c-format // xgettext:no-c-format
format = N_("%B %d, %l\u2236%M %p"); format = _("%B %d, %l\u2236%M %p");
} else { } else {
/* Translators: this is the month name, day number, year /* Translators: this is the month name, day number, year
number followed by a time string in 12h format. 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"*/
// xgettext:no-c-format // 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() { appendTimestamp: function() {
@@ -1266,8 +1264,9 @@ const SubscriptionRequestNotification = new Lang.Class({
let file = contact.get_avatar_file(); let file = contact.get_avatar_file();
if (file) { if (file) {
let uri = file.get_uri();
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor; 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 { else {
iconBox.child = new St.Icon({ icon_name: 'avatar-default', iconBox.child = new St.Icon({ icon_name: 'avatar-default',

View File

@@ -100,7 +100,7 @@ const CtrlAltTabManager = new Lang.Class({
if (app) if (app)
icon = app.create_icon_texture(POPUP_APPICON_SIZE); icon = app.create_icon_texture(POPUP_APPICON_SIZE);
else else
icon = textureCache.bind_cairo_surface_property(windows[i], 'icon'); icon = textureCache.bind_pixbuf_property(windows[i], 'icon');
} }
items.push({ name: windows[i].title, items.push({ name: windows[i].title,
@@ -140,10 +140,20 @@ const CtrlAltTabPopup = new Lang.Class({
Name: 'CtrlAltTabPopup', Name: 'CtrlAltTabPopup',
Extends: SwitcherPopup.SwitcherPopup, Extends: SwitcherPopup.SwitcherPopup,
_init: function(items) { _createSwitcher: function() {
this.parent(items);
this._switcherList = new CtrlAltTabSwitcher(this._items); 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) { _keyPressHandler: function(keysym, action) {

View File

@@ -3,7 +3,6 @@
const GLib = imports.gi.GLib; const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const GnomeDesktop = imports.gi.GnomeDesktop; const GnomeDesktop = imports.gi.GnomeDesktop;
const GObject = imports.gi.GObject;
const Lang = imports.lang; const Lang = imports.lang;
const Mainloop = imports.mainloop; const Mainloop = imports.mainloop;
const Cairo = imports.cairo; const Cairo = imports.cairo;
@@ -125,19 +124,14 @@ const DateMenuButton = new Lang.Class({
if (isOpen) { if (isOpen) {
let now = new Date(); let now = new Date();
this._calendar.setDate(now); 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 // Done with hbox for calendar and event list
this._clock = new GnomeDesktop.WallClock(); 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)); Main.sessionMode.connect('updated', Lang.bind(this, this._sessionUpdated));
this._sessionUpdated(); this._sessionUpdated();
@@ -147,7 +141,7 @@ const DateMenuButton = new Lang.Class({
let now = new Date(); let now = new Date();
return now.getYear() == date.getYear() && return now.getYear() == date.getYear() &&
now.getMonth() == date.getMonth() && now.getMonth() == date.getMonth() &&
now.getDate() == date.getDate(); now.getDay() == date.getDay();
}, },
_appInstalledChanged: function() { _appInstalledChanged: function() {
@@ -173,10 +167,6 @@ const DateMenuButton = new Lang.Class({
} }
}, },
_getEventSource: function() {
return new Calendar.DBusEventSource();
},
_setEventSource: function(eventSource) { _setEventSource: function(eventSource) {
if (this._eventSource) if (this._eventSource)
this._eventSource.destroy(); this._eventSource.destroy();
@@ -194,7 +184,7 @@ const DateMenuButton = new Lang.Class({
let eventSource; let eventSource;
let showEvents = Main.sessionMode.showCalendarEvents; let showEvents = Main.sessionMode.showCalendarEvents;
if (showEvents) { if (showEvents) {
eventSource = this._getEventSource(); eventSource = new Calendar.DBusEventSource();
} else { } else {
eventSource = new Calendar.EmptyEventSource(); eventSource = new Calendar.EmptyEventSource();
} }
@@ -206,6 +196,16 @@ const DateMenuButton = new Lang.Class({
this._dateAndTimeSeparator.actor.visible = Main.sessionMode.allowSettings; 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() { _getCalendarApp: function() {
if (this._calendarApp !== undefined) if (this._calendarApp !== undefined)
return this._calendarApp; return this._calendarApp;

View File

@@ -6,8 +6,6 @@ const Meta = imports.gi.Meta;
const Clutter = imports.gi.Clutter; const Clutter = imports.gi.Clutter;
const St = imports.gi.St; const St = imports.gi.St;
const Main = imports.ui.main;
const EDGE_THRESHOLD = 20; const EDGE_THRESHOLD = 20;
const DRAG_DISTANCE = 80; const DRAG_DISTANCE = 80;
@@ -15,10 +13,9 @@ const EdgeDragAction = new Lang.Class({
Name: 'EdgeDragAction', Name: 'EdgeDragAction',
Extends: Clutter.GestureAction, Extends: Clutter.GestureAction,
_init : function(side, allowedModes) { _init : function(side) {
this.parent(); this.parent();
this._side = side; this._side = side;
this._allowedModes = allowedModes;
this.set_n_touch_points(1); this.set_n_touch_points(1);
global.display.connect('grab-op-begin', Lang.bind(this, function() { 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) if (this.get_n_current_points() == 0)
return false; return false;
if (!(this._allowedModes & Main.actionMode))
return false;
let [x, y] = this.get_press_coords(0); let [x, y] = this.get_press_coords(0);
let monitorRect = this._getMonitorRect(x, y); let monitorRect = this._getMonitorRect(x, y);

View File

@@ -38,6 +38,8 @@ const UserWidget = imports.ui.userWidget;
let _endSessionDialog = null; let _endSessionDialog = null;
const TRIGGER_OFFLINE_UPDATE = '/usr/libexec/pk-trigger-offline-update';
const _ITEM_ICON_SIZE = 48; const _ITEM_ICON_SIZE = 48;
const _DIALOG_ICON_SIZE = 48; const _DIALOG_ICON_SIZE = 48;
@@ -132,18 +134,11 @@ const restartInstallDialogContent = {
showOtherSessions: true, 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 = { const DialogContent = {
0 /* DialogType.LOGOUT */: logoutDialogContent, 0 /* GSM_SHELL_END_SESSION_DIALOG_TYPE_LOGOUT */: logoutDialogContent,
1 /* DialogType.SHUTDOWN */: shutdownDialogContent, 1 /* GSM_SHELL_END_SESSION_DIALOG_TYPE_SHUTDOWN */: shutdownDialogContent,
2 /* DialogType.RESTART */: restartDialogContent, 2 /* GSM_SHELL_END_SESSION_DIALOG_TYPE_RESTART */: restartDialogContent,
3 /* DialogType.UPDATE_RESTART */: restartInstallDialogContent 3: restartInstallDialogContent
}; };
const MAX_USERS_IN_SESSION_DIALOG = 5; const MAX_USERS_IN_SESSION_DIALOG = 5;
@@ -160,19 +155,6 @@ const LogindSessionIface = '<node> \
const LogindSession = Gio.DBusProxy.makeProxyWrapper(LogindSessionIface); 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> \ const UPowerIface = '<node> \
<interface name="org.freedesktop.UPower"> \ <interface name="org.freedesktop.UPower"> \
<property name="OnBattery" type="b" access="read"/> \ <property name="OnBattery" type="b" access="read"/> \
@@ -263,14 +245,9 @@ const EndSessionDialog = new Lang.Class({
this._loginManager = LoginManager.getLoginManager(); this._loginManager = LoginManager.getLoginManager();
this._userManager = AccountsService.UserManager.get_default(); this._userManager = AccountsService.UserManager.get_default();
this._user = this._userManager.get_user(GLib.get_user_name()); 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, this._powerProxy = new UPowerProxy(Gio.DBus.system,
'org.freedesktop.UPower', 'org.freedesktop.UPower',
'/org/freedesktop/UPower', '/org/freedesktop/UPower',
@@ -522,29 +499,31 @@ const EndSessionDialog = new Lang.Class({
}, },
_triggerOfflineUpdateReboot: function(callback) { _triggerOfflineUpdateReboot: function(callback) {
this._pkOfflineProxy.TriggerRemote('reboot', this._pkexecSpawn([TRIGGER_OFFLINE_UPDATE, 'reboot'], callback);
function (result, error) {
if (error)
log(error.message);
callback();
});
}, },
_triggerOfflineUpdateShutdown: function(callback) { _triggerOfflineUpdateShutdown: function(callback) {
this._pkOfflineProxy.TriggerRemote('power-off', this._pkexecSpawn([TRIGGER_OFFLINE_UPDATE, 'power-off'], callback);
function (result, error) {
if (error)
log(error.message);
callback();
});
}, },
_triggerOfflineUpdateCancel: function(callback) { _triggerOfflineUpdateCancel: function(callback) {
this._pkOfflineProxy.CancelRemote(function (result, error) { this._pkexecSpawn([TRIGGER_OFFLINE_UPDATE, '--cancel'], callback);
if (error) },
log(error.message);
_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(); callback();
}); });
@@ -698,9 +677,8 @@ const EndSessionDialog = new Lang.Class({
this._totalSecondsToStayOpen = totalSecondsToStayOpen; this._totalSecondsToStayOpen = totalSecondsToStayOpen;
this._type = type; this._type = type;
if (this._type == DialogType.RESTART && if (this._type == 2 && this._updatesFile.query_exists(null))
this._pkOfflineProxy.TriggerAction == 'reboot') this._type = 3;
this._type = DialogType.UPDATE_RESTART;
this._applications = []; this._applications = [];
this._applicationList.destroy_all_children(); this._applicationList.destroy_all_children();
@@ -727,19 +705,19 @@ const EndSessionDialog = new Lang.Class({
if (dialogContent.showOtherSessions) if (dialogContent.showOtherSessions)
this._loadSessions(); this._loadSessions();
let updateAlreadyTriggered = this._pkOfflineProxy.TriggerAction == 'power-off' || this._pkOfflineProxy.TriggerAction == 'reboot'; let preparedUpdate = this._preparedUpdateFile.query_exists(null);
let updatePrepared = this._pkOfflineProxy.UpdatePrepared; let updateAlreadyTriggered = this._updatesFile.query_exists(null);
let updatesAllowed = this._updatesPermission && this._updatesPermission.allowed; let updatesAllowed = this._updatesPermission && this._updatesPermission.allowed;
_setCheckBoxLabel(this._checkBox, dialogContent.checkBoxText); _setCheckBoxLabel(this._checkBox, dialogContent.checkBoxText);
this._checkBox.actor.visible = (dialogContent.checkBoxText && updatePrepared && updatesAllowed); this._checkBox.actor.visible = (dialogContent.checkBoxText && preparedUpdate && updatesAllowed);
this._checkBox.actor.checked = (updatePrepared && updateAlreadyTriggered); this._checkBox.actor.checked = (preparedUpdate && updateAlreadyTriggered);
// We show the warning either together with the checkbox, or when // We show the warning either together with the checkbox, or when
// updates have already been triggered, but the user doesn't have // updates have already been triggered, but the user doesn't have
// enough permissions to cancel them. // enough permissions to cancel them.
this._batteryWarning.visible = (dialogContent.showBatteryWarning && this._batteryWarning.visible = (dialogContent.showBatteryWarning &&
(this._checkBox.actor.visible || updatePrepared && updateAlreadyTriggered && !updatesAllowed)); (this._checkBox.actor.visible || preparedUpdate && updateAlreadyTriggered && !updatesAllowed));
this._updateButtons(); this._updateButtons();

View File

@@ -77,7 +77,6 @@ function init() {
window._ = Gettext.gettext; window._ = Gettext.gettext;
window.C_ = Gettext.pgettext; window.C_ = Gettext.pgettext;
window.ngettext = Gettext.ngettext; window.ngettext = Gettext.ngettext;
window.N_ = function(s) { return s; };
// Miscellaneous monkeypatching // Miscellaneous monkeypatching
_patchContainerClass(St.BoxLayout); _patchContainerClass(St.BoxLayout);

View File

@@ -203,16 +203,14 @@ const InstallExtensionDialog = new Lang.Class({
let message = _("Download and install “%s” from extensions.gnome.org?").format(info.name); let message = _("Download and install “%s” from extensions.gnome.org?").format(info.name);
let box = new St.BoxLayout({ style_class: 'prompt-dialog-main-layout', let box = new St.BoxLayout();
vertical: false });
this.contentLayout.add(box); this.contentLayout.add(box);
let gicon = new Gio.FileIcon({ file: Gio.File.new_for_uri(REPOSITORY_URL_BASE + info.icon) }) let gicon = new Gio.FileIcon({ file: Gio.File.new_for_uri(REPOSITORY_URL_BASE + info.icon) })
let icon = new St.Icon({ gicon: gicon }); let icon = new St.Icon({ gicon: gicon });
box.add(icon); box.add(icon);
let label = new St.Label({ style_class: 'prompt-dialog-headline', let label = new St.Label({ text: message });
text: message });
box.add(label); box.add(label);
}, },

View File

@@ -74,7 +74,7 @@ function disableExtension(uuid) {
if (extension.stylesheet) { if (extension.stylesheet) {
let theme = St.ThemeContext.get_for_stage(global.stage).get_theme(); let theme = St.ThemeContext.get_for_stage(global.stage).get_theme();
theme.unload_stylesheet(extension.stylesheet); theme.unload_stylesheet(extension.stylesheet.get_path());
} }
try { try {
@@ -118,7 +118,7 @@ function enableExtension(uuid) {
let stylesheetFile = extension.dir.get_child(stylesheetNames[i]); let stylesheetFile = extension.dir.get_child(stylesheetNames[i]);
if (stylesheetFile.query_exists(null)) { if (stylesheetFile.query_exists(null)) {
let theme = St.ThemeContext.get_for_stage(global.stage).get_theme(); let theme = St.ThemeContext.get_for_stage(global.stage).get_theme();
theme.load_stylesheet(stylesheetFile); theme.load_stylesheet(stylesheetFile.get_path());
extension.stylesheet = stylesheetFile; extension.stylesheet = stylesheetFile;
break; break;
} }
@@ -271,17 +271,10 @@ function onEnabledExtensionsChanged() {
} }
function _onVersionValidationChanged() { 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) { if (Main.sessionMode.allowExtensions) {
enabledExtensions.forEach(function(uuid) { enabledExtensions.forEach(function(uuid) {
enableExtension(uuid); if (ExtensionUtils.extensions[uuid])
reloadExtension(ExtensionUtils.extensions[uuid]);
}); });
} }
} }

View File

@@ -20,7 +20,6 @@ const EXTRA_SPACE_ANIMATION_TIME = 0.25;
const ANIMATION_TIME_IN = 0.350; const ANIMATION_TIME_IN = 0.350;
const ANIMATION_TIME_OUT = 1/2 * ANIMATION_TIME_IN; const ANIMATION_TIME_OUT = 1/2 * ANIMATION_TIME_IN;
const ANIMATION_MAX_DELAY_FOR_ITEM = 2/3 * 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_MAX_DELAY_OUT_FOR_ITEM = 2/3 * ANIMATION_TIME_OUT;
const ANIMATION_FADE_IN_TIME_FOR_ITEM = 1/4 * ANIMATION_TIME_IN; const ANIMATION_FADE_IN_TIME_FOR_ITEM = 1/4 * ANIMATION_TIME_IN;
@@ -430,30 +429,34 @@ const IconGrid = new Lang.Class({
return; 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++) { for (let index = 0; index < actors.length; index++) {
let actor = actors[index]; let actor = actors[index];
actor.opacity = 0;
actor.reactive = false; 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; let bounceUpTime = ANIMATION_TIME_IN / 4;
// Defeat onComplete anonymous function closure
let isLastItem = index == actors.length - 1; let isLastItem = index == actors.length - 1;
Tweener.addTween(actor, Tweener.addTween(actorClone,
{ time: bounceUpTime, { time: bounceUpTime,
transition: 'easeInOutQuad', transition: 'easeInOutQuad',
delay: delay, delay: delay,
scale_x: ANIMATION_BOUNCE_ICON_SCALE, scale_x: ANIMATION_BOUNCE_ICON_SCALE,
scale_y: ANIMATION_BOUNCE_ICON_SCALE, scale_y: ANIMATION_BOUNCE_ICON_SCALE,
onComplete: Lang.bind(this, function() { onComplete: Lang.bind(this, function() {
Tweener.addTween(actor, Tweener.addTween(actorClone,
{ time: ANIMATION_TIME_IN - bounceUpTime, { time: ANIMATION_TIME_IN - bounceUpTime,
transition: 'easeInOutQuad', transition: 'easeInOutQuad',
scale_x: 1, scale_x: 1,
@@ -461,7 +464,10 @@ const IconGrid = new Lang.Class({
onComplete: Lang.bind(this, function() { onComplete: Lang.bind(this, function() {
if (isLastItem) if (isLastItem)
this._animationDone(); this._animationDone();
actor.opacity = 255;
actor.reactive = true; actor.reactive = true;
actorClone.destroy();
}) })
}); });
}) })
@@ -515,10 +521,11 @@ const IconGrid = new Lang.Class({
let scaleY = sourceScaledHeight / height; let scaleY = sourceScaledHeight / height;
let [adjustedSourcePositionX, adjustedSourcePositionY] = [sourceCenterX - sourceScaledWidth / 2, sourceCenterY - sourceScaledHeight / 2]; let [adjustedSourcePositionX, adjustedSourcePositionY] = [sourceCenterX - sourceScaledWidth / 2, sourceCenterY - sourceScaledHeight / 2];
// Defeat onComplete anonymous function closure
let isLastItem = index == actors.length - 1;
let movementParams, fadeParams; let movementParams, fadeParams;
if (animationDirection == AnimationDirection.IN) { if (animationDirection == AnimationDirection.IN) {
let isLastItem = actor._distance == minDist;
actorClone.opacity = 0; actorClone.opacity = 0;
actorClone.set_scale(scaleX, scaleY); actorClone.set_scale(scaleX, scaleY);
@@ -546,8 +553,6 @@ const IconGrid = new Lang.Class({
delay: delay, delay: delay,
opacity: 255 }; opacity: 255 };
} else { } else {
let isLastItem = actor._distance == maxDist;
let [startX, startY] = actor._transformedPosition; let [startX, startY] = actor._transformedPosition;
actorClone.set_position(startX, startY); actorClone.set_position(startX, startY);
@@ -564,7 +569,6 @@ const IconGrid = new Lang.Class({
this._animationDone(); this._animationDone();
this._restoreItemsOpacity(); this._restoreItemsOpacity();
} }
actor.reactive = true;
actorClone.destroy(); actorClone.destroy();
})}; })};
fadeParams = { time: ANIMATION_FADE_IN_TIME_FOR_ITEM, fadeParams = { time: ANIMATION_FADE_IN_TIME_FOR_ITEM,

View File

@@ -75,7 +75,6 @@ const Key = new Lang.Class({
_init : function(key) { _init : function(key) {
this._key = key; this._key = key;
this.actor = this._makeKey(key, GLib.markup_escape_text(key.label, -1)); 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_keys = this._key.get_extended_keys();
this._extended_keyboard = null; 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) { _makeKey: function (key, label) {
let button = new St.Button ({ label: label, let button = new St.Button ({ label: label,
style_class: 'keyboard-key' }); 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, this._watchNameId = Gio.bus_watch_name(Gio.BusType.SESSION, CURSOR_BUS_NAME, 0,
Lang.bind(this, this._sync), Lang.bind(this, this._sync),
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, this._cursorProxy = new CursorManagerProxy(Gio.DBus.session, CURSOR_BUS_NAME,
CURSOR_OBJECT_PATH, CURSOR_OBJECT_PATH,
Lang.bind(this, function(proxy, error) { Lang.bind(this, function(proxy, error) {
@@ -249,28 +248,15 @@ const Keyboard = new Lang.Class({
this.actor = null; this.actor = null;
this._destroySource(); this._destroySource();
if (this._daemonProxy) {
this._daemonProxy.QuitRemote(function (result, error) { this._daemonProxy.QuitRemote(function (result, error) {
if (error) { if (error) {
log(error.message); log(error.message);
return; return;
} }
}); });
this._daemonProxy = null;
}
}, },
_setupKeyboard: function() { _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) { this._daemonProxy.RunRemote(function (result, error) {
if (error) { if (error) {
log(error.message); log(error.message);
@@ -616,7 +602,7 @@ const Keyboard = new Lang.Class({
_moveTemporarily: function () { _moveTemporarily: function () {
let currentWindow = global.screen.get_display().focus_window; 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 newX = rect.x;
let newY = 3 * this.actor.height / 2; let newY = 3 * this.actor.height / 2;

View File

@@ -20,6 +20,7 @@ const Tweener = imports.ui.tweener;
const STARTUP_ANIMATION_TIME = 0.5; const STARTUP_ANIMATION_TIME = 0.5;
const KEYBOARD_ANIMATION_TIME = 0.15; const KEYBOARD_ANIMATION_TIME = 0.15;
const BACKGROUND_FADE_ANIMATION_TIME = 1.0; const BACKGROUND_FADE_ANIMATION_TIME = 1.0;
const DEFAULT_BACKGROUND_COLOR = Clutter.Color.from_pixel(0x2e3436ff);
// The message tray takes this much pressure // The message tray takes this much pressure
// in the pressure barrier at once to release it. // in the pressure barrier at once to release it.
@@ -159,10 +160,10 @@ const LayoutManager = new Lang.Class({
this._isPopupWindowVisible = false; this._isPopupWindowVisible = false;
this._startingUp = true; this._startingUp = true;
// We don't want to paint the stage background color because either // Normally, the stage is always covered so Clutter doesn't need to clear
// the SystemBackground we create or the MetaBackgroundActor inside // it; however it becomes visible during the startup animation
// global.window_group covers the entirety of the screen. // See the comment below for a longer explanation
global.stage.no_clear_hint = true; global.stage.background_color = DEFAULT_BACKGROUND_COLOR;
// Set up stage hierarchy to group all UI actors under one container. // Set up stage hierarchy to group all UI actors under one container.
this.uiGroup = new Shell.GenericContainer({ name: 'uiGroup' }); this.uiGroup = new Shell.GenericContainer({ name: 'uiGroup' });
@@ -229,10 +230,6 @@ const LayoutManager = new Lang.Class({
global.stage.remove_actor(global.top_window_group); global.stage.remove_actor(global.top_window_group);
this.uiGroup.add_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(); this._backgroundGroup = new Meta.BackgroundGroup();
global.window_group.add_child(this._backgroundGroup); global.window_group.add_child(this._backgroundGroup);
this._backgroundGroup.lower_bottom(); this._backgroundGroup.lower_bottom();
@@ -262,6 +259,7 @@ const LayoutManager = new Lang.Class({
this._inOverview = true; this._inOverview = true;
this._updateVisibility(); this._updateVisibility();
this._updateRegions();
}, },
hideOverview: function() { hideOverview: function() {
@@ -269,6 +267,7 @@ const LayoutManager = new Lang.Class({
this._inOverview = false; this._inOverview = false;
this._updateVisibility(); this._updateVisibility();
this._queueUpdateRegions();
}, },
_sessionUpdated: function() { _sessionUpdated: function() {
@@ -422,7 +421,10 @@ const LayoutManager = new Lang.Class({
this.panelBox.set_position(this.primaryMonitor.x, this.primaryMonitor.y); this.panelBox.set_position(this.primaryMonitor.x, this.primaryMonitor.y);
this.panelBox.set_size(this.primaryMonitor.width, -1); this.panelBox.set_size(this.primaryMonitor.width, -1);
if (this.keyboardIndex < 0)
this.keyboardIndex = this.primaryIndex; this.keyboardIndex = this.primaryIndex;
else
this._updateKeyboardBox();
this.trayBox.set_position(this.bottomMonitor.x, this.trayBox.set_position(this.bottomMonitor.x,
this.bottomMonitor.y + this.bottomMonitor.height); this.bottomMonitor.y + this.bottomMonitor.height);
@@ -458,8 +460,8 @@ const LayoutManager = new Lang.Class({
_setupTrayPressure: function() { _setupTrayPressure: function() {
this._trayPressure = new PressureBarrier(MESSAGE_TRAY_PRESSURE_THRESHOLD, this._trayPressure = new PressureBarrier(MESSAGE_TRAY_PRESSURE_THRESHOLD,
MESSAGE_TRAY_PRESSURE_TIMEOUT, MESSAGE_TRAY_PRESSURE_TIMEOUT,
Shell.ActionMode.NORMAL | Shell.KeyBindingMode.NORMAL |
Shell.ActionMode.OVERVIEW); Shell.KeyBindingMode.OVERVIEW);
this._trayPressure.setEventFilter(this._trayBarrierEventFilter); this._trayPressure.setEventFilter(this._trayBarrierEventFilter);
this._trayPressure.connect('trigger', function(barrier) { this._trayPressure.connect('trigger', function(barrier) {
if (Main.layoutManager.bottomMonitor.inFullscreen) 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 // When starting a normal user session, we want to grow it out of the middle
// of the screen. // 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() { _prepareStartupAnimation: function() {
// During the initial transition, add a simple actor to block all events, // During the initial transition, add a simple actor to block all events,
@@ -667,6 +673,10 @@ const LayoutManager = new Lang.Class({
}, },
_startupAnimationComplete: function() { _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.destroy();
this._coverPane = null; this._coverPane = null;
@@ -905,6 +915,9 @@ const LayoutManager = new Lang.Class({
}, },
_queueUpdateRegions: function() { _queueUpdateRegions: function() {
if (Main.sessionMode.isGreeter)
return;
if (this._startingUp) if (this._startingUp)
return; return;
@@ -938,16 +951,13 @@ const LayoutManager = new Lang.Class({
}, },
_updateRegions: function() { _updateRegions: function() {
let rects = [], struts = [], i;
if (this._updateRegionIdle) { if (this._updateRegionIdle) {
Meta.later_remove(this._updateRegionIdle); Meta.later_remove(this._updateRegionIdle);
delete 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 isPopupMenuVisible = global.top_window_group.get_children().some(isPopupMetaWindow);
let wantsInputRegion = !isPopupMenuVisible; let wantsInputRegion = !isPopupMenuVisible;
@@ -1033,13 +1043,7 @@ const LayoutManager = new Lang.Class({
} }
return GLib.SOURCE_REMOVE; 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); Signals.addSignalMethods(LayoutManager.prototype);
@@ -1067,8 +1071,8 @@ const HotCorner = new Lang.Class({
this._pressureBarrier = new PressureBarrier(HOT_CORNER_PRESSURE_THRESHOLD, this._pressureBarrier = new PressureBarrier(HOT_CORNER_PRESSURE_THRESHOLD,
HOT_CORNER_PRESSURE_TIMEOUT, HOT_CORNER_PRESSURE_TIMEOUT,
Shell.ActionMode.NORMAL | Shell.KeyBindingMode.NORMAL |
Shell.ActionMode.OVERVIEW); Shell.KeyBindingMode.OVERVIEW);
this._pressureBarrier.connect('trigger', Lang.bind(this, this._toggleOverview)); this._pressureBarrier.connect('trigger', Lang.bind(this, this._toggleOverview));
// Cache the three ripples instead of dynamically creating and destroying them. // 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({ const PressureBarrier = new Lang.Class({
Name: 'PressureBarrier', Name: 'PressureBarrier',
_init: function(threshold, timeout, actionMode) { _init: function(threshold, timeout, keybindingMode) {
this._threshold = threshold; this._threshold = threshold;
this._timeout = timeout; this._timeout = timeout;
this._actionMode = actionMode; this._keybindingMode = keybindingMode;
this._barriers = []; this._barriers = [];
this._eventFilter = null; this._eventFilter = null;
@@ -1351,7 +1355,7 @@ const PressureBarrier = new Lang.Class({
return; return;
// Throw out all events not in the proper keybinding mode // Throw out all events not in the proper keybinding mode
if (!(this._actionMode & Main.actionMode)) if (!(this._keybindingMode & Main.keybindingMode))
return; return;
let slide = this._getDistanceAlongBarrier(barrier, event); let slide = this._getDistanceAlongBarrier(barrier, event);

View File

@@ -1086,7 +1086,7 @@ const LookingGlass = new Lang.Class({
if (this._open) if (this._open)
return; return;
if (!Main.pushModal(this._entry, { actionMode: Shell.ActionMode.LOOKING_GLASS })) if (!Main.pushModal(this._entry, { keybindingMode: Shell.KeyBindingMode.LOOKING_GLASS }))
return; return;
this._notebook.selectIndex(0); this._notebook.selectIndex(0);

View File

@@ -1198,7 +1198,12 @@ const ZoomRegion = new Lang.Class({
// Add a background for when the magnified uiGroup is scrolled // Add a background for when the magnified uiGroup is scrolled
// out of view (don't want to see desktop showing through). // 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); mainGroup.add_actor(this._background);
// Clone the group that contains all of UI on the screen. This is the // Clone the group that contains all of UI on the screen. This is the

View File

@@ -4,7 +4,6 @@ const Clutter = imports.gi.Clutter;
const Gdk = imports.gi.Gdk; const Gdk = imports.gi.Gdk;
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib; const GLib = imports.gi.GLib;
const Gtk = imports.gi.Gtk;
const Lang = imports.lang; const Lang = imports.lang;
const Mainloop = imports.mainloop; const Mainloop = imports.mainloop;
const Meta = imports.gi.Meta; const Meta = imports.gi.Meta;
@@ -41,6 +40,8 @@ const Magnifier = imports.ui.magnifier;
const XdndHandler = imports.ui.xdndHandler; const XdndHandler = imports.ui.xdndHandler;
const Util = imports.misc.util; const Util = imports.misc.util;
const DEFAULT_BACKGROUND_COLOR = Clutter.Color.from_pixel(0x2e3436ff);
const A11Y_SCHEMA = 'org.gnome.desktop.a11y.keyboard'; const A11Y_SCHEMA = 'org.gnome.desktop.a11y.keyboard';
const STICKY_KEYS_ENABLE = 'stickykeys-enable'; const STICKY_KEYS_ENABLE = 'stickykeys-enable';
const GNOMESHELL_STARTED_MESSAGE_ID = 'f3ea493c22934e26811cd62abe8e203a'; const GNOMESHELL_STARTED_MESSAGE_ID = 'f3ea493c22934e26811cd62abe8e203a';
@@ -63,7 +64,7 @@ let shellMountOpDBusService = null;
let screenSaverDBus = null; let screenSaverDBus = null;
let screencastService = null; let screencastService = null;
let modalCount = 0; let modalCount = 0;
let actionMode = Shell.ActionMode.NONE; let keybindingMode = Shell.KeyBindingMode.NONE;
let modalActorFocusStack = []; let modalActorFocusStack = [];
let uiGroup = null; let uiGroup = null;
let magnifier = null; let magnifier = null;
@@ -76,19 +77,18 @@ let _cssStylesheet = null;
let _a11ySettings = null; let _a11ySettings = null;
function _sessionUpdated() { function _sessionUpdated() {
if (sessionMode.isPrimary)
_loadDefaultStylesheet(); _loadDefaultStylesheet();
wm.setCustomKeybindingHandler('panel-main-menu', wm.setCustomKeybindingHandler('panel-main-menu',
Shell.ActionMode.NORMAL | Shell.KeyBindingMode.NORMAL |
Shell.ActionMode.OVERVIEW, Shell.KeyBindingMode.OVERVIEW,
sessionMode.hasOverview ? Lang.bind(overview, overview.toggle) : null); sessionMode.hasOverview ? Lang.bind(overview, overview.toggle) : null);
wm.allowKeybinding('overlay-key', Shell.ActionMode.NORMAL | wm.allowKeybinding('overlay-key', Shell.KeyBindingMode.NORMAL |
Shell.ActionMode.OVERVIEW); Shell.KeyBindingMode.OVERVIEW);
wm.setCustomKeybindingHandler('panel-run-dialog', wm.setCustomKeybindingHandler('panel-run-dialog',
Shell.ActionMode.NORMAL | Shell.KeyBindingMode.NORMAL |
Shell.ActionMode.OVERVIEW, Shell.KeyBindingMode.OVERVIEW,
sessionMode.hasRunDialog ? openRunDialog : null); sessionMode.hasRunDialog ? openRunDialog : null);
if (!sessionMode.hasRunDialog) { if (!sessionMode.hasRunDialog) {
@@ -111,8 +111,6 @@ function start() {
sessionMode = new SessionMode.SessionMode(); sessionMode = new SessionMode.SessionMode();
sessionMode.connect('updated', _sessionUpdated); sessionMode.connect('updated', _sessionUpdated);
Gtk.Settings.get_default().connect('notify::gtk-theme-name',
_loadDefaultStylesheet);
_initializeUI(); _initializeUI();
shellDBusService = new ShellDBus.GnomeShell(); shellDBusService = new ShellDBus.GnomeShell();
@@ -133,9 +131,6 @@ function _initializeUI() {
Shell.WindowTracker.get_default(); Shell.WindowTracker.get_default();
Shell.AppUsage.get_default(); Shell.AppUsage.get_default();
let resource = Gio.Resource.load(global.datadir + '/gnome-shell-theme.gresource');
resource._register();
_loadDefaultStylesheet(); _loadDefaultStylesheet();
// Setup the stage hierarchy early // Setup the stage hierarchy early
@@ -209,8 +204,8 @@ function _initializeUI() {
} }
layoutManager.connect('startup-complete', function() { layoutManager.connect('startup-complete', function() {
if (actionMode == Shell.ActionMode.NONE) { if (keybindingMode == Shell.KeyBindingMode.NONE) {
actionMode = Shell.ActionMode.NORMAL; keybindingMode = Shell.KeyBindingMode.NORMAL;
} }
if (screenShield) { if (screenShield) {
screenShield.lockIfWasLocked(); 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() { function _loadDefaultStylesheet() {
let stylesheet = _getDefaultStylesheet(); if (!sessionMode.isPrimary)
if (_defaultCssStylesheet && _defaultCssStylesheet.equal(stylesheet)) return;
let stylesheet = global.datadir + '/theme/' + sessionMode.stylesheetName;
if (_defaultCssStylesheet == stylesheet)
return; return;
_defaultCssStylesheet = stylesheet; _defaultCssStylesheet = stylesheet;
@@ -272,7 +241,7 @@ function _loadDefaultStylesheet() {
* *
* Get the theme CSS file that the shell will load * 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 * null if using the default
*/ */
function getThemeStylesheet() { function getThemeStylesheet() {
@@ -287,7 +256,7 @@ function getThemeStylesheet() {
* Set the theme CSS file that the shell will load * Set the theme CSS file that the shell will load
*/ */
function setThemeStylesheet(cssStylesheet) { 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 * - options: Meta.ModalOptions flags to indicate that the pointer is
* already grabbed * 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 * global keybindings; the default of NONE will filter
* out all keybindings * out all keybindings
* *
@@ -381,7 +350,7 @@ function _findModal(actor) {
function pushModal(actor, params) { function pushModal(actor, params) {
params = Params.parse(params, { timestamp: global.get_current_time(), params = Params.parse(params, { timestamp: global.get_current_time(),
options: 0, options: 0,
actionMode: Shell.ActionMode.NONE }); keybindingMode: Shell.KeyBindingMode.NONE });
if (modalCount == 0) { if (modalCount == 0) {
if (!global.begin_modal(params.timestamp, params.options)) { if (!global.begin_modal(params.timestamp, params.options)) {
@@ -411,9 +380,9 @@ function pushModal(actor, params) {
destroyId: actorDestroyId, destroyId: actorDestroyId,
prevFocus: prevFocus, prevFocus: prevFocus,
prevFocusDestroyId: prevFocusDestroyId, prevFocusDestroyId: prevFocusDestroyId,
actionMode: actionMode }); keybindingMode: keybindingMode });
actionMode = params.actionMode; keybindingMode = params.keybindingMode;
global.stage.set_key_focus(actor); global.stage.set_key_focus(actor);
return true; return true;
} }
@@ -439,7 +408,7 @@ function popModal(actor, timestamp) {
if (focusIndex < 0) { if (focusIndex < 0) {
global.stage.set_key_focus(null); global.stage.set_key_focus(null);
global.end_modal(timestamp); global.end_modal(timestamp);
actionMode = Shell.ActionMode.NORMAL; keybindingMode = Shell.KeyBindingMode.NORMAL;
throw new Error('incorrect pop'); throw new Error('incorrect pop');
} }
@@ -452,7 +421,7 @@ function popModal(actor, timestamp) {
if (focusIndex == modalActorFocusStack.length - 1) { if (focusIndex == modalActorFocusStack.length - 1) {
if (record.prevFocus) if (record.prevFocus)
record.prevFocus.disconnect(record.prevFocusDestroyId); record.prevFocus.disconnect(record.prevFocusDestroyId);
actionMode = record.actionMode; keybindingMode = record.keybindingMode;
global.stage.set_key_focus(record.prevFocus); global.stage.set_key_focus(record.prevFocus);
} else { } else {
// If we have: // If we have:
@@ -477,7 +446,7 @@ function popModal(actor, timestamp) {
for (let i = modalActorFocusStack.length - 1; i > focusIndex; i--) { for (let i = modalActorFocusStack.length - 1; i > focusIndex; i--) {
modalActorFocusStack[i].prevFocus = modalActorFocusStack[i - 1].prevFocus; modalActorFocusStack[i].prevFocus = modalActorFocusStack[i - 1].prevFocus;
modalActorFocusStack[i].prevFocusDestroyId = modalActorFocusStack[i - 1].prevFocusDestroyId; 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); modalActorFocusStack.splice(focusIndex, 1);
@@ -485,10 +454,9 @@ function popModal(actor, timestamp) {
if (modalCount > 0) if (modalCount > 0)
return; return;
layoutManager.modalEnded();
global.end_modal(timestamp); global.end_modal(timestamp);
Meta.enable_unredirect_for_screen(global.screen); Meta.enable_unredirect_for_screen(global.screen);
actionMode = Shell.ActionMode.NORMAL; keybindingMode = Shell.KeyBindingMode.NORMAL;
} }
function createLookingGlass() { function createLookingGlass() {

View File

@@ -27,7 +27,6 @@ const PopupMenu = imports.ui.popupMenu;
const Params = imports.misc.params; const Params = imports.misc.params;
const Tweener = imports.ui.tweener; const Tweener = imports.ui.tweener;
const Util = imports.misc.util; const Util = imports.misc.util;
const ViewSelector = imports.ui.viewSelector;
const SHELL_KEYBINDINGS_SCHEMA = 'org.gnome.shell.keybindings'; 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('get-preferred-height', Lang.bind(this, this._getPreferredHeight));
this.actor.connect('allocate', Lang.bind(this, this._allocate)); this.actor.connect('allocate', Lang.bind(this, this._allocate));
this.actor.connect('destroy', Lang.bind(this, function() { this.actor.connect('destroy', Lang.bind(this, function() {
this._source.disconnect(this._iconUpdatedId);
this._actorDestroyed = true; this._actorDestroyed = true;
})); }));
this._actorDestroyed = false; this._actorDestroyed = false;
@@ -1171,7 +1169,7 @@ const SourceActor = new Lang.Class({
this.actor.add_actor(this._iconBin); 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(); this._updateIcon();
}, },
@@ -1229,12 +1227,8 @@ const SourceActorWithLabel = new Lang.Class({
this.actor.add_actor(this._counterBin); 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._updateCount();
this.actor.connect('destroy', function() {
this._source.disconnect(this._countUpdatedId);
});
}, },
_allocate: function(actor, box, flags) { _allocate: function(actor, box, flags) {
@@ -1817,13 +1811,6 @@ const MessageTray = new Lang.Class({
y_expand: true }); y_expand: true });
this.actor.add_actor(this._summary); 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._summaryMotionId = 0;
this._summaryBoxPointer = new BoxPointer.BoxPointer(St.Side.BOTTOM, this._summaryBoxPointer = new BoxPointer.BoxPointer(St.Side.BOTTOM,
@@ -1852,7 +1839,7 @@ const MessageTray = new Lang.Class({
this.idleMonitor = Meta.IdleMonitor.get_core(); this.idleMonitor = Meta.IdleMonitor.get_core();
this._grabHelper = new GrabHelper.GrabHelper(this.actor, 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._summaryBoxPointer.actor);
this._grabHelper.addActor(this.actor); this._grabHelper.addActor(this.actor);
@@ -1916,16 +1903,16 @@ const MessageTray = new Lang.Class({
Main.wm.addKeybinding('toggle-message-tray', Main.wm.addKeybinding('toggle-message-tray',
new Gio.Settings({ schema_id: SHELL_KEYBINDINGS_SCHEMA }), new Gio.Settings({ schema_id: SHELL_KEYBINDINGS_SCHEMA }),
Meta.KeyBindingFlags.NONE, Meta.KeyBindingFlags.NONE,
Shell.ActionMode.NORMAL | Shell.KeyBindingMode.NORMAL |
Shell.ActionMode.MESSAGE_TRAY | Shell.KeyBindingMode.MESSAGE_TRAY |
Shell.ActionMode.OVERVIEW, Shell.KeyBindingMode.OVERVIEW,
Lang.bind(this, this.toggleAndNavigate)); Lang.bind(this, this.toggleAndNavigate));
Main.wm.addKeybinding('focus-active-notification', Main.wm.addKeybinding('focus-active-notification',
new Gio.Settings({ schema_id: SHELL_KEYBINDINGS_SCHEMA }), new Gio.Settings({ schema_id: SHELL_KEYBINDINGS_SCHEMA }),
Meta.KeyBindingFlags.NONE, Meta.KeyBindingFlags.NONE,
Shell.ActionMode.NORMAL | Shell.KeyBindingMode.NORMAL |
Shell.ActionMode.MESSAGE_TRAY | Shell.KeyBindingMode.MESSAGE_TRAY |
Shell.ActionMode.OVERVIEW, Shell.KeyBindingMode.OVERVIEW,
Lang.bind(this, this._expandActiveNotification)); Lang.bind(this, this._expandActiveNotification));
this._sources = new Map(); this._sources = new Map();
@@ -1948,12 +1935,7 @@ const MessageTray = new Lang.Class({
this._messageTrayMenuButton = new MessageTrayMenuButton(this); this._messageTrayMenuButton = new MessageTrayMenuButton(this);
this.actor.add_actor(this._messageTrayMenuButton.actor); this.actor.add_actor(this._messageTrayMenuButton.actor);
this._messageTrayMenuButton.actor.connect('key-press-event', let gesture = new EdgeDragAction.EdgeDragAction(St.Side.BOTTOM);
Lang.bind(this, this._onTrayButtonKeyPress));
let gesture = new EdgeDragAction.EdgeDragAction(St.Side.BOTTOM,
Shell.ActionMode.NORMAL |
Shell.ActionMode.OVERVIEW);
gesture.connect('activated', Lang.bind(this, this.toggle)); gesture.connect('activated', Lang.bind(this, this.toggle));
global.stage.add_action(gesture); global.stage.add_action(gesture);
}, },
@@ -2048,16 +2030,6 @@ const MessageTray = new Lang.Class({
return GLib.SOURCE_REMOVE; 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) { _onNotificationKeyRelease: function(actor, event) {
if (event.get_key_symbol() == Clutter.KEY_Escape && event.get_state() == 0) { if (event.get_key_symbol() == Clutter.KEY_Escape && event.get_state() == 0) {
this._expireNotification(); this._expireNotification();
@@ -2434,23 +2406,9 @@ const MessageTray = new Lang.Class({
if (shouldShowNotification && nextNotification) { if (shouldShowNotification && nextNotification) {
let limited = this._busy || Main.layoutManager.bottomMonitor.inFullscreen; let limited = this._busy || Main.layoutManager.bottomMonitor.inFullscreen;
let showNextNotification = (!limited || nextNotification.forFeedback || nextNotification.urgency == Urgency.CRITICAL); let showNextNotification = (!limited || nextNotification.forFeedback || nextNotification.urgency == Urgency.CRITICAL);
if (showNextNotification) { 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 {
this._showNotification(); this._showNotification();
} }
}
}
} else if (this._notificationState == State.SHOWN) { } else if (this._notificationState == State.SHOWN) {
let expired = (this._userActiveWhileNotificationShown && let expired = (this._userActiveWhileNotificationShown &&
this._notificationTimeoutId == 0 && this._notificationTimeoutId == 0 &&

View File

@@ -41,14 +41,14 @@ const ModalDialog = new Lang.Class({
_init: function(params) { _init: function(params) {
params = Params.parse(params, { shellReactive: false, params = Params.parse(params, { shellReactive: false,
styleClass: null, styleClass: null,
actionMode: Shell.ActionMode.SYSTEM_MODAL, keybindingMode: Shell.KeyBindingMode.SYSTEM_MODAL,
shouldFadeIn: true, shouldFadeIn: true,
shouldFadeOut: true, shouldFadeOut: true,
destroyOnClose: true }); destroyOnClose: true });
this.state = State.CLOSED; this.state = State.CLOSED;
this._hasModal = false; this._hasModal = false;
this._actionMode = params.actionMode; this._keybindingMode = params.keybindingMode;
this._shellReactive = params.shellReactive; this._shellReactive = params.shellReactive;
this._shouldFadeIn = params.shouldFadeIn; this._shouldFadeIn = params.shouldFadeIn;
this._shouldFadeOut = params.shouldFadeOut; this._shouldFadeOut = params.shouldFadeOut;
@@ -194,7 +194,7 @@ const ModalDialog = new Lang.Class({
}, },
placeSpinner: function(layoutInfo) { 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 = new Animation.AnimatedIcon(spinnerIcon, WORK_SPINNER_ICON_SIZE);
this._workSpinner.actor.opacity = 0; this._workSpinner.actor.opacity = 0;
this._workSpinner.actor.show(); this._workSpinner.actor.show();
@@ -362,7 +362,7 @@ const ModalDialog = new Lang.Class({
if (this._hasModal) if (this._hasModal)
return true; return true;
if (!Main.pushModal(this._group, { timestamp: timestamp, if (!Main.pushModal(this._group, { timestamp: timestamp,
actionMode: this._actionMode })) keybindingMode: this._keybindingMode }))
return false; return false;
this._hasModal = true; this._hasModal = true;

View File

@@ -435,17 +435,17 @@ const Overview = new Lang.Class({
this._inDrag = false; this._inDrag = false;
}, },
beginWindowDrag: function(window) { beginWindowDrag: function(clone) {
this.emit('window-drag-begin', window); this.emit('window-drag-begin', clone);
this._inDrag = true; this._inDrag = true;
}, },
cancelledWindowDrag: function(window) { cancelledWindowDrag: function(clone) {
this.emit('window-drag-cancelled', window); this.emit('window-drag-cancelled', clone);
}, },
endWindowDrag: function(window) { endWindowDrag: function(clone) {
this.emit('window-drag-end', window); this.emit('window-drag-end', clone);
this._inDrag = false; this._inDrag = false;
}, },
@@ -509,7 +509,7 @@ const Overview = new Lang.Class({
if (shouldBeModal) { if (shouldBeModal) {
if (!this._modal) { if (!this._modal) {
if (Main.pushModal(this._overview, if (Main.pushModal(this._overview,
{ actionMode: Shell.ActionMode.OVERVIEW })) { { keybindingMode: Shell.KeyBindingMode.OVERVIEW })) {
this._modal = true; this._modal = true;
} else { } else {
this.hide(); this.hide();
@@ -605,9 +605,9 @@ const Overview = new Lang.Class({
return; return;
} }
this._shown = false;
this._animateNotVisible(); this._animateNotVisible();
this._shown = false;
this._syncGrab(); this._syncGrab();
}, },

View File

@@ -64,8 +64,7 @@ const SlideLayout = new Lang.Class({
// flags only determine what to do if the allocated box is bigger // flags only determine what to do if the allocated box is bigger
// than the actor's box. // than the actor's box.
let realDirection = getRtlSlideDirection(this._direction, child); let realDirection = getRtlSlideDirection(this._direction, child);
let alignX = (realDirection == SlideDirection.LEFT) ? (availWidth - natWidth) let alignX = (realDirection == SlideDirection.LEFT) ? (availWidth - natWidth) : 0;
: (availWidth - natWidth * this._slideX);
let actorBox = new Clutter.ActorBox(); let actorBox = new Clutter.ActorBox();
actorBox.x1 = box.x1 + alignX + this._translationX; actorBox.x1 = box.x1 + alignX + this._translationX;

View File

@@ -181,7 +181,6 @@ const AppMenuButton = new Lang.Class({
this._targetApp = null; this._targetApp = null;
this._appMenuNotifyId = 0; this._appMenuNotifyId = 0;
this._actionGroupNotifyId = 0; this._actionGroupNotifyId = 0;
this._busyNotifyId = 0;
let bin = new St.Bin({ name: 'appMenu' }); let bin = new St.Bin({ name: 'appMenu' });
bin.connect('style-changed', Lang.bind(this, this._onStyleChanged)); bin.connect('style-changed', Lang.bind(this, this._onStyleChanged));
@@ -274,7 +273,7 @@ const AppMenuButton = new Lang.Class({
_onStyleChanged: function(actor) { _onStyleChanged: function(actor) {
let node = actor.get_theme_node(); let node = actor.get_theme_node();
let [success, icon] = node.lookup_url('spinner-image', false); let [success, icon] = node.lookup_url('spinner-image', false);
if (!success || (this._spinnerIcon && this._spinnerIcon.equal(icon))) if (!success || this._spinnerIcon == icon)
return; return;
this._spinnerIcon = icon; this._spinnerIcon = icon;
this._spinner = new Animation.AnimatedIcon(this._spinnerIcon, PANEL_ICON_SIZE); 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._targetApp.disconnect(this._actionGroupNotifyId);
this._actionGroupNotifyId = 0; this._actionGroupNotifyId = 0;
} }
if (this._busyNotifyId) {
this._targetApp.disconnect(this._busyNotifyId);
this._busyNotifyId = 0;
}
this._targetApp = targetApp; this._targetApp = targetApp;
if (this._targetApp) { if (this._targetApp) {
this._appMenuNotifyId = this._targetApp.connect('notify::menu', Lang.bind(this, this._sync)); 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._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._label.setText(this._targetApp.get_name());
this.actor.set_accessible_name(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 && let isBusy = (this._targetApp != null &&
(this._targetApp.get_state() == Shell.AppState.STARTING || (this._targetApp.get_state() == Shell.AppState.STARTING ||
this._targetApp.get_busy())); this._targetApp.get_state() == Shell.AppState.BUSY));
if (isBusy) if (isBusy)
this.startAnimation(); this.startAnimation();
else else
@@ -893,7 +887,7 @@ const Panel = new Lang.Class({
this.statusArea = {}; 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._leftBox = new St.BoxLayout({ name: 'panelLeft' });
this.actor.add_actor(this._leftBox); this.actor.add_actor(this._leftBox);
@@ -1025,7 +1019,7 @@ const Panel = new Lang.Class({
if (!dragWindow) if (!dragWindow)
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
let rect = dragWindow.get_frame_rect(); let rect = dragWindow.get_outer_rect();
let [stageX, stageY] = event.get_coords(); let [stageX, stageY] = event.get_coords();
let allowDrag = dragWindow.maximized_vertically && let allowDrag = dragWindow.maximized_vertically &&

View File

@@ -918,14 +918,14 @@ const PopupSubMenu = new Lang.Class({
if (animate && needsScrollbar) if (animate && needsScrollbar)
animate = false; animate = false;
let targetAngle = this.actor.text_direction == Clutter.TextDirection.RTL ? -90 : 90;
if (animate) { if (animate) {
let [minHeight, naturalHeight] = this.actor.get_preferred_height(-1); let [minHeight, naturalHeight] = this.actor.get_preferred_height(-1);
this.actor.height = 0; this.actor.height = 0;
this.actor._arrowRotation = this._arrow.rotation_angle_z; 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, Tweener.addTween(this.actor,
{ _arrowRotation: targetAngle, { _arrowRotation: angle - angle % 90 + 90,
height: naturalHeight, height: naturalHeight,
time: 0.25, time: 0.25,
onUpdateScope: this, onUpdateScope: this,
@@ -938,7 +938,7 @@ const PopupSubMenu = new Lang.Class({
} }
}); });
} else { } 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) { if (animate) {
this.actor._arrowRotation = this._arrow.rotation_angle_z; 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, Tweener.addTween(this.actor,
{ _arrowRotation: 0, { _arrowRotation: (angle - 1) - (angle - 1) % 90,
height: 0, height: 0,
time: 0.25, time: 0.25,
onUpdateScope: this, onUpdateScope: this,
@@ -972,7 +974,7 @@ const PopupSubMenu = new Lang.Class({
}, },
}); });
} else { } else {
this._arrow.rotation_angle_z = 0; this._arrow.rotation_angle_z = this.actor._arrowRotation - 90;
this.actor.hide(); this.actor.hide();
} }
}, },
@@ -1050,6 +1052,8 @@ const PopupSubMenuMenuItem = new Lang.Class({
this._triangleBin = new St.Widget({ y_expand: true, this._triangleBin = new St.Widget({ y_expand: true,
y_align: Clutter.ActorAlign.CENTER }); y_align: Clutter.ActorAlign.CENTER });
this._triangleBin.add_child(this._triangle); 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_child(this._triangleBin);
this.actor.add_accessible_state (Atk.StateType.EXPANDABLE); this.actor.add_accessible_state (Atk.StateType.EXPANDABLE);

View File

@@ -85,8 +85,7 @@ const Clock = new Lang.Class({
let date = new Date(); let date = new Date();
/* Translators: This is a time format for a date in /* Translators: This is a time format for a date in
long format */ long format */
let dateFormat = Shell.util_translate_time_string(N_("%A, %B %d")); this._date.text = date.toLocaleFormat(_("%A, %B %d"));
this._date.text = date.toLocaleFormat(dateFormat);
}, },
destroy: function() { destroy: function() {
@@ -647,14 +646,14 @@ const ScreenShield = new Lang.Class({
if (this._isModal) if (this._isModal)
return true; 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) if (this._isModal)
return true; return true;
// We failed to get a pointer grab, it means that // We failed to get a pointer grab, it means that
// something else has it. Try with a keyboard grab only // something else has it. Try with a keyboard grab only
this._isModal = Main.pushModal(this.actor, { options: Meta.ModalOptions.POINTER_ALREADY_GRABBED, 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; return this._isModal;
}, },
@@ -670,9 +669,7 @@ const ScreenShield = new Lang.Class({
if (this._lockScreenState != MessageTray.State.SHOWN) if (this._lockScreenState != MessageTray.State.SHOWN)
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
let isEnter = (symbol == Clutter.KEY_Return || let isEnter = (symbol == Clutter.KEY_Return || symbol == Clutter.KEY_KP_Enter);
symbol == Clutter.KEY_KP_Enter ||
symbol == Clutter.KEY_ISO_Enter);
if (!isEnter && !(GLib.unichar_isprint(unichar) || symbol == Clutter.KEY_Escape)) if (!isEnter && !(GLib.unichar_isprint(unichar) || symbol == Clutter.KEY_Escape))
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
@@ -922,11 +919,6 @@ const ScreenShield = new Lang.Class({
this._lockScreenState = MessageTray.State.HIDDEN; this._lockScreenState = MessageTray.State.HIDDEN;
this._lockScreenGroup.hide(); 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) { _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 // If the previous shell crashed, and gnome-session restarted us, then re-lock
lockIfWasLocked: function() { lockIfWasLocked: function() {
if (!this._settings.get_boolean(LOCK_ENABLED_KEY))
return;
let wasLocked = global.get_runtime_state('b', LOCKED_STATE_STR); let wasLocked = global.get_runtime_state('b', LOCKED_STATE_STR);
if (wasLocked === null) if (wasLocked === null)
return; return;

View File

@@ -43,8 +43,6 @@ const ScreencastService = new Lang.Class({
this._recorders = new Map(); this._recorders = new Map();
this._lockdownSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.lockdown' });
Main.sessionMode.connect('updated', Lang.bind(this, this._sessionUpdated)); Main.sessionMode.connect('updated', Lang.bind(this, this._sessionUpdated));
}, },
@@ -70,8 +68,8 @@ const ScreencastService = new Lang.Class({
if (Main.sessionMode.allowScreencast) if (Main.sessionMode.allowScreencast)
return; return;
for (let sender of this._recorders.keys()) this._recorders.clear();
this._stopRecordingForSender(sender); this.emit('updated');
}, },
_onNameVanished: function(connection, name) { _onNameVanished: function(connection, name) {
@@ -105,8 +103,7 @@ const ScreencastService = new Lang.Class({
ScreencastAsync: function(params, invocation) { ScreencastAsync: function(params, invocation) {
let returnValue = [false, '']; let returnValue = [false, ''];
if (!Main.sessionMode.allowScreencast || if (!Main.sessionMode.allowScreencast) {
this._lockdownSettings.get_boolean('disable-save-to-disk')) {
invocation.return_value(GLib.Variant.new('(bs)', returnValue)); invocation.return_value(GLib.Variant.new('(bs)', returnValue));
return; return;
} }
@@ -120,8 +117,6 @@ const ScreencastService = new Lang.Class({
this._applyOptionalParameters(recorder, options); this._applyOptionalParameters(recorder, options);
let [success, fileName] = recorder.record(); let [success, fileName] = recorder.record();
returnValue = [success, fileName ? fileName : '']; returnValue = [success, fileName ? fileName : ''];
if (!success)
this._stopRecordingForSender(sender);
} }
invocation.return_value(GLib.Variant.new('(bs)', returnValue)); invocation.return_value(GLib.Variant.new('(bs)', returnValue));
@@ -129,8 +124,7 @@ const ScreencastService = new Lang.Class({
ScreencastAreaAsync: function(params, invocation) { ScreencastAreaAsync: function(params, invocation) {
let returnValue = [false, '']; let returnValue = [false, ''];
if (!Main.sessionMode.allowScreencast || if (!Main.sessionMode.allowScreencast) {
this._lockdownSettings.get_boolean('disable-save-to-disk')) {
invocation.return_value(GLib.Variant.new('(bs)', returnValue)); invocation.return_value(GLib.Variant.new('(bs)', returnValue));
return; return;
} }
@@ -156,8 +150,6 @@ const ScreencastService = new Lang.Class({
this._applyOptionalParameters(recorder, options); this._applyOptionalParameters(recorder, options);
let [success, fileName] = recorder.record(); let [success, fileName] = recorder.record();
returnValue = [success, fileName ? fileName : '']; returnValue = [success, fileName ? fileName : ''];
if (!success)
this._stopRecordingForSender(sender);
} }
invocation.return_value(GLib.Variant.new('(bs)', returnValue)); invocation.return_value(GLib.Variant.new('(bs)', returnValue));

View File

@@ -65,44 +65,9 @@ const ScreenshotService = new Lang.Class({
this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(ScreenshotIface, this); this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(ScreenshotIface, this);
this._dbusImpl.export(Gio.DBus.session, '/org/gnome/Shell/Screenshot'); 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); 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) { _checkArea: function(x, y, width, height) {
return x >= 0 && y >= 0 && return x >= 0 && y >= 0 &&
width > 0 && height > 0 && width > 0 && height > 0 &&
@@ -111,15 +76,9 @@ const ScreenshotService = new Lang.Class({
}, },
_onScreenshotComplete: function(obj, result, area, filenameUsed, flash, invocation) { _onScreenshotComplete: function(obj, result, area, filenameUsed, flash, invocation) {
if (result) { if (flash && result) {
if (flash) {
let flashspot = new Flashspot(area); let flashspot = new Flashspot(area);
flashspot.fire(Lang.bind(this, function() { flashspot.fire();
this._removeShooterForSender(invocation.get_sender());
}));
}
else
this._removeShooterForSender(invocation.get_sender());
} }
let retval = GLib.Variant.new('(bs)', [result, filenameUsed]); let retval = GLib.Variant.new('(bs)', [result, filenameUsed]);
@@ -153,9 +112,7 @@ const ScreenshotService = new Lang.Class({
"Invalid params"); "Invalid params");
return; return;
} }
let screenshot = this._createScreenshot(invocation); let screenshot = new Shell.Screenshot();
if (!screenshot)
return;
screenshot.screenshot_area (x, y, width, height, filename, screenshot.screenshot_area (x, y, width, height, filename,
Lang.bind(this, this._onScreenshotComplete, Lang.bind(this, this._onScreenshotComplete,
flash, invocation)); flash, invocation));
@@ -163,9 +120,7 @@ const ScreenshotService = new Lang.Class({
ScreenshotWindowAsync : function (params, invocation) { ScreenshotWindowAsync : function (params, invocation) {
let [include_frame, include_cursor, flash, filename] = params; let [include_frame, include_cursor, flash, filename] = params;
let screenshot = this._createScreenshot(invocation); let screenshot = new Shell.Screenshot();
if (!screenshot)
return;
screenshot.screenshot_window (include_frame, include_cursor, filename, screenshot.screenshot_window (include_frame, include_cursor, filename,
Lang.bind(this, this._onScreenshotComplete, Lang.bind(this, this._onScreenshotComplete,
flash, invocation)); flash, invocation));
@@ -173,9 +128,7 @@ const ScreenshotService = new Lang.Class({
ScreenshotAsync : function (params, invocation) { ScreenshotAsync : function (params, invocation) {
let [include_cursor, flash, filename] = params; let [include_cursor, flash, filename] = params;
let screenshot = this._createScreenshot(invocation); let screenshot = new Shell.Screenshot();
if (!screenshot)
return;
screenshot.screenshot(include_cursor, filename, screenshot.screenshot(include_cursor, filename,
Lang.bind(this, this._onScreenshotComplete, Lang.bind(this, this._onScreenshotComplete,
flash, invocation)); flash, invocation));
@@ -349,7 +302,7 @@ const Flashspot = new Lang.Class({
this.actor.set_position(area.x, area.y); this.actor.set_position(area.x, area.y);
}, },
fire: function(doneCallback) { fire: function() {
this.actor.show(); this.actor.show();
this.actor.opacity = 255; this.actor.opacity = 255;
Tweener.addTween(this.actor, Tweener.addTween(this.actor,
@@ -357,8 +310,6 @@ const Flashspot = new Lang.Class({
time: FLASHSPOT_ANIMATION_OUT_TIME, time: FLASHSPOT_ANIMATION_OUT_TIME,
transition: 'easeOutQuad', transition: 'easeOutQuad',
onComplete: Lang.bind(this, function() { onComplete: Lang.bind(this, function() {
if (doneCallback)
doneCallback();
this.destroy(); this.destroy();
}) })
}); });

View File

@@ -2,7 +2,6 @@
const Clutter = imports.gi.Clutter; const Clutter = imports.gi.Clutter;
const Lang = imports.lang; const Lang = imports.lang;
const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const Gtk = imports.gi.Gtk; const Gtk = imports.gi.Gtk;
const Meta = imports.gi.Meta; 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_LIST_SEARCH_RESULTS_ROWS = 3;
const MAX_GRID_SEARCH_RESULTS_ROWS = 1; 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({ const MaxWidthBin = new Lang.Class({
Name: 'MaxWidthBin', Name: 'MaxWidthBin',
Extends: St.Bin, Extends: St.Bin,
@@ -199,9 +300,12 @@ const SearchResultsBase = new Lang.Class({
this._cancellable.reset(); this._cancellable.reset();
this.provider.getResultMetas(metasNeeded, Lang.bind(this, function(metas) { this.provider.getResultMetas(metasNeeded, Lang.bind(this, function(metas) {
if (metas.length == 0) {
callback(false);
return;
}
if (metas.length != metasNeeded.length) { if (metas.length != metasNeeded.length) {
log('Wrong number of result metas returned by search provider ' + this.provider.id + log('Wrong number of result metas returned by search provider');
': expected ' + metasNeeded.length + ' but got ' + metas.length);
callback(false); callback(false);
return; return;
} }
@@ -231,11 +335,9 @@ const SearchResultsBase = new Lang.Class({
let hasMoreResults = results.length < providerResults.length; let hasMoreResults = results.length < providerResults.length;
this._ensureResultActors(results, Lang.bind(this, function(successful) { this._ensureResultActors(results, Lang.bind(this, function(successful) {
if (!successful) {
this._clearResultDisplay(); this._clearResultDisplay();
callback(); if (!successful)
return; return;
}
// To avoid CSS transitions causing flickering when // To avoid CSS transitions causing flickering when
// the first search result stays the same, we hide the // 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._statusText = new St.Label({ style_class: 'search-statustext' });
this._statusBin = new St.Bin({ x_align: St.Align.MIDDLE, this._statusBin = new St.Bin({ x_align: St.Align.MIDDLE,
y_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._statusBin.add_actor(this._statusText);
this._highlightDefault = false; this._highlightDefault = false;
this._defaultResult = null; this._defaultResult = null;
this._startingSearch = false;
this._terms = []; this._searchSystem = new SearchSystem();
this._results = {}; this._searchSystem.connect('search-updated', Lang.bind(this, this._updateResults));
this._searchSystem.connect('providers-changed', Lang.bind(this, this._updateProviderDisplays));
this._providers = []; this._updateProviderDisplays();
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));
}, },
_onPan: function(action) { _onPan: function(action) {
@@ -546,24 +528,44 @@ const SearchResults = new Lang.Class({
if (provider.appInfo) if (provider.appInfo)
providerDisplay = new ListSearchResults(provider); providerDisplay = new ListSearchResults(provider);
else else
providerDisplay = new GridSearchResults(provider, this.actor); providerDisplay = new GridSearchResults(provider, this._content);
providerDisplay.connect('key-focus-in', Lang.bind(this, this._keyFocusIn)); providerDisplay.connect('key-focus-in', Lang.bind(this, this._keyFocusIn));
providerDisplay.actor.hide();
this._content.add(providerDisplay.actor); this._content.add(providerDisplay.actor);
provider.display = providerDisplay; provider.display = providerDisplay;
}, },
_updateProviderDisplays: function() {
this._searchSystem.getProviders().forEach(Lang.bind(this, this._ensureProviderDisplay));
},
_clearDisplay: function() { _clearDisplay: function() {
this._providers.forEach(function(provider) { this._searchSystem.getProviders().forEach(function(provider) {
provider.display.clear(); 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() { _maybeSetInitialSelection: function() {
let newDefaultResult = null; let newDefaultResult = null;
let providers = this._providers; let providers = this._searchSystem.getProviders();
for (let i = 0; i < providers.length; i++) { for (let i = 0; i < providers.length; i++) {
let provider = providers[i]; let provider = providers[i];
let display = provider.display; let display = provider.display;
@@ -586,50 +588,31 @@ const SearchResults = new Lang.Class({
} }
}, },
get searchInProgress() { _updateStatusText: function () {
if (this._startingSearch) let haveResults = this._searchSystem.getProviders().some(function(provider) {
return true;
return this._providers.some(function(provider) {
return provider.searchInProgress;
});
},
_updateSearchProgress: function () {
let haveResults = this._providers.some(function(provider) {
let display = provider.display; let display = provider.display;
return (display.getFirstResult() != null); return (display.getFirstResult() != null);
}); });
this._scrollView.visible = haveResults;
this._statusBin.visible = !haveResults;
if (!haveResults) { if (!haveResults) {
if (this.searchInProgress) {
this._statusText.set_text(_("Searching…"));
} else {
this._statusText.set_text(_("No results.")); this._statusText.set_text(_("No results."));
} this._statusBin.show();
} else {
this._statusBin.hide();
} }
}, },
_updateResults: function(provider, results) { _updateResults: function(searchSystem, provider, results) {
let terms = this._terms; let terms = searchSystem.getTerms();
let display = provider.display; let display = provider.display;
display.updateSearch(results, terms, Lang.bind(this, function() { display.updateSearch(results, terms, Lang.bind(this, function() {
provider.searchInProgress = false;
this._maybeSetInitialSelection(); this._maybeSetInitialSelection();
this._updateSearchProgress(); this._updateStatusText();
})); }));
}, },
activateDefault: function() { activateDefault: function() {
// If we have a search queued up, force the search now.
if (this._searchTimeoutId > 0)
this._doSearch();
if (this._defaultResult) if (this._defaultResult)
this._defaultResult.activate(); this._defaultResult.activate();
}, },

View File

@@ -44,7 +44,8 @@ const GnomeShellIface = '<node> \
</method> \ </method> \
<signal name="AcceleratorActivated"> \ <signal name="AcceleratorActivated"> \
<arg name="action" type="u" /> \ <arg name="action" type="u" /> \
<arg name="parameters" type="a{sv}" /> \ <arg name="deviceid" type="u" /> \
<arg name="timestamp" type="u" /> \
</signal> \ </signal> \
<property name="Mode" type="s" access="read" /> \ <property name="Mode" type="s" access="read" /> \
<property name="OverviewActive" type="b" access="readwrite" /> \ <property name="OverviewActive" type="b" access="readwrite" /> \
@@ -89,12 +90,6 @@ const GnomeShell = new Lang.Class({
function(display, action, deviceid, timestamp) { function(display, action, deviceid, timestamp) {
this._emitAcceleratorActivated(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(); params[param] = params[param].deep_unpack();
let monitorIndex = -1; let monitorIndex = -1;
if (params['monitor'] >= 0) if (params['monitor'])
monitorIndex = params['monitor']; monitorIndex = params['monitor'];
let icon = null; let icon = null;
@@ -195,14 +190,11 @@ const GnomeShell = new Lang.Class({
let connection = this._dbusImpl.get_connection(); let connection = this._dbusImpl.get_connection();
let info = this._dbusImpl.get_info(); 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, connection.emit_signal(destination,
this._dbusImpl.get_object_path(), this._dbusImpl.get_object_path(),
info ? info.name : null, info ? info.name : null,
'AcceleratorActivated', 'AcceleratorActivated',
GLib.Variant.new('(ua{sv})', [action, params])); GLib.Variant.new('(uuu)', [action, deviceid, timestamp]));
}, },
_grabAcceleratorForSender: function(accelerator, flags, sender) { _grabAcceleratorForSender: function(accelerator, flags, sender) {
@@ -243,15 +235,8 @@ const GnomeShell = new Lang.Class({
Mode: global.session_mode, 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() { get OverviewActive() {
return this._cachedOverviewVisible; return Main.overview.visible;
}, },
set OverviewActive(visible) { set OverviewActive(visible) {

View File

@@ -17,6 +17,8 @@ const EntryMenu = new Lang.Class({
_init: function(entry) { _init: function(entry) {
this.parent(entry, 0, St.Side.TOP); this.parent(entry, 0, St.Side.TOP);
this.actor.add_style_class_name('entry-context-menu');
this._entry = entry; this._entry = entry;
this._clipboard = St.Clipboard.get_default(); this._clipboard = St.Clipboard.get_default();

View File

@@ -7,7 +7,7 @@ const Lang = imports.lang;
const St = imports.gi.St; const St = imports.gi.St;
const Signals = imports.signals; 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({ const Slider = new Lang.Class({
Name: "Slider", Name: "Slider",
@@ -197,7 +197,7 @@ const Slider = new Lang.Class({
let [dx, dy] = event.get_scroll_delta(); let [dx, dy] = event.get_scroll_delta();
// Even though the slider is horizontal, use dy to match // Even though the slider is horizontal, use dy to match
// the UP/DOWN above. // the UP/DOWN above.
delta = -dy * SLIDER_SCROLL_STEP; delta = -dy / 10;
} }
this._value = Math.min(Math.max(0, this._value + delta), 1); this._value = Math.min(Math.max(0, this._value + delta), 1);

File diff suppressed because it is too large Load Diff

View File

@@ -13,15 +13,6 @@ const LOCATION_SCHEMA = 'org.gnome.system.location';
const MAX_ACCURACY_LEVEL = 'max-accuracy-level'; const MAX_ACCURACY_LEVEL = 'max-accuracy-level';
const ENABLED = 'enabled'; const ENABLED = 'enabled';
const GeoclueAccuracyLevel = {
NONE: 0,
COUNTRY: 1,
CITY: 4,
NEIGHBORHOOD: 5,
STREET: 6,
EXACT: 8
};
var GeoclueIface = '<node> \ var GeoclueIface = '<node> \
<interface name="org.freedesktop.GeoClue2.Manager"> \ <interface name="org.freedesktop.GeoClue2.Manager"> \
<property name="InUse" type="b" access="read"/> \ <property name="InUse" type="b" access="read"/> \
@@ -70,7 +61,6 @@ const Indicator = new Lang.Class({
this._item.status.text = _("Enabled"); this._item.status.text = _("Enabled");
this._onOffAction = this._item.menu.addAction(_("Disable"), Lang.bind(this, this._onOnOffAction)); 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); this.menu.addMenuItem(this._item);
@@ -191,14 +181,10 @@ const Indicator = new Lang.Class({
}, },
_getMaxAccuracyLevel: function() { _getMaxAccuracyLevel: function() {
if (this._settings.get_boolean(ENABLED)) { if (this._settings.get_boolean(ENABLED))
let level = this._settings.get_string(MAX_ACCURACY_LEVEL); return this._settings.get_enum(MAX_ACCURACY_LEVEL);
else
return GeoclueAccuracyLevel[level.toUpperCase()] || return 0;
GeoclueAccuracyLevel.NONE;
} else {
return GeoclueAccuracyLevel.NONE;
}
}, },
_notifyMaxAccuracyLevel: function() { _notifyMaxAccuracyLevel: function() {

View File

@@ -876,8 +876,7 @@ const NMWirelessDialog = new Lang.Class({
x_align: Clutter.ActorAlign.CENTER, x_align: Clutter.ActorAlign.CENTER,
y_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(global.datadir + '/theme/process-working.svg', 24, 24);
this._noNetworksSpinner = new Animation.AnimatedIcon(file, 24, 24);
this._noNetworksBox.add_actor(this._noNetworksSpinner.actor); this._noNetworksBox.add_actor(this._noNetworksSpinner.actor);
this._noNetworksBox.add_actor(new St.Label({ style_class: 'no-networks-label', this._noNetworksBox.add_actor(new St.Label({ style_class: 'no-networks-label',
text: _("No Networks") })); text: _("No Networks") }));
@@ -1867,7 +1866,7 @@ const NMApplet = new Lang.Class({
_connectionRemoved: function(connection) { _connectionRemoved: function(connection) {
let pos = this._connections.indexOf(connection); let pos = this._connections.indexOf(connection);
if (pos != -1) if (pos != -1)
this._connections.splice(pos, 1); this._connections.splice(connection, 1);
let section = connection._section; let section = connection._section;

View File

@@ -15,7 +15,6 @@ const RfkillManagerInterface = '<node> \
<interface name="org.gnome.SettingsDaemon.Rfkill"> \ <interface name="org.gnome.SettingsDaemon.Rfkill"> \
<property name="AirplaneMode" type="b" access="readwrite" /> \ <property name="AirplaneMode" type="b" access="readwrite" /> \
<property name="HardwareAirplaneMode" type="b" access="read" /> \ <property name="HardwareAirplaneMode" type="b" access="read" /> \
<property name="ShouldShowAirplaneMode" type="b" access="read" /> \
</interface> \ </interface> \
</node>'; </node>';
@@ -49,10 +48,6 @@ const RfkillManager = new Lang.Class({
return this._proxy.HardwareAirplaneMode; return this._proxy.HardwareAirplaneMode;
}, },
get shouldShowAirplaneMode() {
return this._proxy.ShouldShowAirplaneMode;
},
_changed: function() { _changed: function() {
this.emit('airplane-mode-changed'); this.emit('airplane-mode-changed');
} }
@@ -106,10 +101,11 @@ const Indicator = new Lang.Class({
_sync: function() { _sync: function() {
let airplaneMode = this._manager.airplaneMode; let airplaneMode = this._manager.airplaneMode;
let hwAirplaneMode = this._manager.hwAirplaneMode; 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._indicator.visible = airplaneMode;
this._item.actor.visible = (airplaneMode && showAirplaneMode); this._item.actor.visible = airplaneMode;
this._offItem.setSensitive(!hwAirplaneMode); this._offItem.setSensitive(!hwAirplaneMode);
if (hwAirplaneMode) if (hwAirplaneMode)

View File

@@ -87,6 +87,8 @@ const SwitcherPopup = new Lang.Class({
let leftPadding = this.actor.get_theme_node().get_padding(St.Side.LEFT); 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 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 hPadding = leftPadding + rightPadding;
// Allocate the switcherList // Allocate the switcherList
@@ -100,17 +102,16 @@ const SwitcherPopup = new Lang.Class({
this._switcherList.actor.allocate(childBox, flags); this._switcherList.actor.allocate(childBox, flags);
}, },
_createSwitcher: function() {
throw new Error('Not implemented');
},
_initialSelection: function(backward, binding) { _initialSelection: function(backward, binding) {
if (backward) throw new Error('Not implemented');
this._select(this._items.length - 1);
else if (this._items.length == 1)
this._select(0);
else
this._select(1);
}, },
show: function(backward, binding, mask) { show: function(backward, binding, mask) {
if (this._items.length == 0) if (!this._createSwitcher())
return false; return false;
if (!Main.pushModal(this.actor)) { if (!Main.pushModal(this.actor)) {
@@ -138,6 +139,11 @@ const SwitcherPopup = new Lang.Class({
this.actor.show(); this.actor.show();
this.actor.get_allocation_box(); this.actor.get_allocation_box();
if (this._items.length > 1)
this._selectedIndex = 1;
else
this._selectedIndex = 0;
this._initialSelection(backward, binding); this._initialSelection(backward, binding);
// There's a race condition; if the user released Alt before // There's a race condition; if the user released Alt before

View File

@@ -154,7 +154,7 @@ const UnlockDialog = new Lang.Class({
return true; return true;
if (!Main.pushModal(this.actor, { timestamp: timestamp, if (!Main.pushModal(this.actor, { timestamp: timestamp,
actionMode: Shell.ActionMode.UNLOCK_SCREEN })) keybindingMode: Shell.KeyBindingMode.UNLOCK_SCREEN }))
return false; return false;
this._isModal = true; this._isModal = true;

View File

@@ -28,12 +28,11 @@ const Avatar = new Lang.Class({
styleClass: 'framed-user-icon' }); styleClass: 'framed-user-icon' });
this._iconSize = params.iconSize; this._iconSize = params.iconSize;
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
this.actor = new St.Bin({ style_class: params.styleClass, this.actor = new St.Bin({ style_class: params.styleClass,
track_hover: params.reactive, track_hover: params.reactive,
reactive: params.reactive, reactive: params.reactive,
width: this._iconSize * scaleFactor, width: this._iconSize,
height: this._iconSize * scaleFactor }); height: this._iconSize });
}, },
setSensitive: function(sensitive) { setSensitive: function(sensitive) {

View File

@@ -65,8 +65,7 @@ const ShowOverviewAction = new Lang.Class({
}, },
vfunc_gesture_prepare : function(action, actor) { vfunc_gesture_prepare : function(action, actor) {
return Main.actionMode == Shell.ActionMode.NORMAL && return this.get_n_current_points() == this.get_n_touch_points();
this.get_n_current_points() == this.get_n_touch_points();
}, },
_getBoundingRect : function(motion) { _getBoundingRect : function(motion) {
@@ -126,6 +125,7 @@ const ViewSelector = new Lang.Class({
this._activePage = null; this._activePage = null;
this._searchActive = false; this._searchActive = false;
this._searchTimeoutId = 0;
this._entry = searchEntry; this._entry = searchEntry;
ShellEntry.addContextMenu(this._entry); 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', this._entry.set_primary_icon(new St.Icon({ style_class: 'search-entry-icon',
icon_name: 'edit-find-symbolic' })); icon_name: 'edit-find-symbolic' }));
if (this._entry.get_text_direction() == Clutter.TextDirection.RTL)
this._clearIcon = new St.Icon({ style_class: 'search-entry-icon', 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._iconClickedId = 0;
this._capturedEventId = 0; this._capturedEventId = 0;
@@ -194,30 +198,27 @@ const ViewSelector = new Lang.Class({
// the windows to animate, but now we no longer want to // the windows to animate, but now we no longer want to
// show it given that we are now on the apps page or // show it given that we are now on the apps page or
// search page. // search page.
if (this._activePage != this._workspacesPage) { if (this._activePage != this._workspacesPage)
this._workspacesPage.opacity = 0; this._workspacesPage.opacity = 0;
this._workspacesPage.hide();
}
})); }));
Main.wm.addKeybinding('toggle-application-view', Main.wm.addKeybinding('toggle-application-view',
new Gio.Settings({ schema_id: SHELL_KEYBINDINGS_SCHEMA }), new Gio.Settings({ schema_id: SHELL_KEYBINDINGS_SCHEMA }),
Meta.KeyBindingFlags.NONE, Meta.KeyBindingFlags.NONE,
Shell.ActionMode.NORMAL | Shell.KeyBindingMode.NORMAL |
Shell.ActionMode.OVERVIEW, Shell.KeyBindingMode.OVERVIEW,
Lang.bind(this, this._toggleAppsPage)); Lang.bind(this, this._toggleAppsPage));
Main.wm.addKeybinding('toggle-overview', Main.wm.addKeybinding('toggle-overview',
new Gio.Settings({ schema_id: SHELL_KEYBINDINGS_SCHEMA }), new Gio.Settings({ schema_id: SHELL_KEYBINDINGS_SCHEMA }),
Meta.KeyBindingFlags.NONE, Meta.KeyBindingFlags.NONE,
Shell.ActionMode.NORMAL | Shell.KeyBindingMode.NORMAL |
Shell.ActionMode.OVERVIEW, Shell.KeyBindingMode.OVERVIEW,
Lang.bind(Main.overview, Main.overview.toggle)); Lang.bind(Main.overview, Main.overview.toggle));
let gesture; let gesture;
gesture = new EdgeDragAction.EdgeDragAction(St.Side.LEFT, gesture = new EdgeDragAction.EdgeDragAction(St.Side.LEFT);
Shell.ActionMode.NORMAL);
gesture.connect('activated', Lang.bind(this, function() { gesture.connect('activated', Lang.bind(this, function() {
if (Main.overview.visible) if (Main.overview.visible)
Main.overview.hide(); Main.overview.hide();
@@ -488,23 +489,36 @@ const ViewSelector = new Lang.Class({
_onTextChanged: function (se, prop) { _onTextChanged: function (se, prop) {
let terms = getTermsForSearchString(this._entry.get_text()); let terms = getTermsForSearchString(this._entry.get_text());
let searchPreviouslyActive = this._searchActive;
this._searchActive = (terms.length > 0); this._searchActive = (terms.length > 0);
this._searchResults.setTerms(terms);
let startSearch = this._searchActive && !searchPreviouslyActive;
if (startSearch)
this._searchResults.startingSearch();
if (this._searchActive) { if (this._searchActive) {
this._showPage(this._searchPage);
this._entry.set_secondary_icon(this._clearIcon); this._entry.set_secondary_icon(this._clearIcon);
if (this._iconClickedId == 0) if (this._iconClickedId == 0)
this._iconClickedId = this._entry.connect('secondary-icon-clicked', this._iconClickedId = this._entry.connect('secondary-icon-clicked',
Lang.bind(this, this.reset)); 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 { } else {
if (this._iconClickedId > 0) { if (this._iconClickedId > 0) {
this._entry.disconnect(this._iconClickedId); this._entry.disconnect(this._iconClickedId);
this._iconClickedId = 0; this._iconClickedId = 0;
} }
if (this._searchTimeoutId > 0) {
Mainloop.source_remove(this._searchTimeoutId);
this._searchTimeoutId = 0;
}
this._entry.set_secondary_icon(null); this._entry.set_secondary_icon(null);
this._searchCancelled(); this._searchCancelled();
} }
@@ -542,6 +556,12 @@ const ViewSelector = new Lang.Class({
this._searchResults.navigateFocus(nextDirection); this._searchResults.navigateFocus(nextDirection);
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
} else if (symbol == Clutter.Return || symbol == Clutter.KP_Enter) { } 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(); this._searchResults.activateDefault();
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
} }
@@ -564,6 +584,17 @@ const ViewSelector = new Lang.Class({
return Clutter.EVENT_PROPAGATE; 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() { getActivePage: function() {
if (this._activePage == this._workspacesPage) if (this._activePage == this._workspacesPage)
return ViewPage.WINDOWS; return ViewPage.WINDOWS;

View File

@@ -17,6 +17,7 @@ const Main = imports.ui.main;
const ModalDialog = imports.ui.modalDialog; const ModalDialog = imports.ui.modalDialog;
const Tweener = imports.ui.tweener; const Tweener = imports.ui.tweener;
const WindowMenu = imports.ui.windowMenu; const WindowMenu = imports.ui.windowMenu;
const Wobbly = imports.ui.wobbly;
const SHELL_KEYBINDINGS_SCHEMA = 'org.gnome.shell.keybindings'; const SHELL_KEYBINDINGS_SCHEMA = 'org.gnome.shell.keybindings';
const MAXIMIZE_WINDOW_ANIMATION_TIME = 0.15; const MAXIMIZE_WINDOW_ANIMATION_TIME = 0.15;
@@ -413,7 +414,7 @@ const TilePreview = new Lang.Class({
y: monitor.y, y: monitor.y,
width: monitor.width, width: monitor.width,
height: monitor.height }); 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_size(rect.width, rect.height);
this.actor.set_position(rect.x, rect.y); this.actor.set_position(rect.x, rect.y);
this.actor.opacity = 0; this.actor.opacity = 0;
@@ -478,9 +479,7 @@ const WorkspaceSwitchAction = new Lang.Class({
}, },
vfunc_gesture_prepare : function(action, actor) { 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();
return this.get_n_current_points() == this.get_n_touch_points() &&
(allowedModes & Main.actionMode);
}, },
vfunc_gesture_end : function(action, actor) { vfunc_gesture_end : function(action, actor) {
@@ -528,11 +527,6 @@ const AppSwitchAction = new Lang.Class({
}, },
vfunc_gesture_prepare : function(action, actor) { vfunc_gesture_prepare : function(action, actor) {
if (Main.actionMode != Shell.ActionMode.NORMAL) {
this.cancel();
return false;
}
return this.get_n_current_points() <= 4; return this.get_n_current_points() <= 4;
}, },
@@ -580,35 +574,6 @@ const AppSwitchAction = new Lang.Class({
}); });
Signals.addSignalMethods(AppSwitchAction.prototype); 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({ const WindowManager = new Lang.Class({
Name: 'WindowManager', Name: 'WindowManager',
@@ -647,182 +612,179 @@ const WindowManager = new Lang.Class({
this._shellwm.connect('destroy', Lang.bind(this, this._destroyWindow)); this._shellwm.connect('destroy', Lang.bind(this, this._destroyWindow));
this._shellwm.connect('filter-keybinding', Lang.bind(this, this._filterKeybinding)); this._shellwm.connect('filter-keybinding', Lang.bind(this, this._filterKeybinding));
this._shellwm.connect('confirm-display-change', Lang.bind(this, this._confirmDisplayChange)); this._shellwm.connect('confirm-display-change', Lang.bind(this, this._confirmDisplayChange));
global.screen.connect('restacked', Lang.bind(this, this._syncStacking));
this._workspaceSwitcherPopup = null; this._workspaceSwitcherPopup = null;
this._tilePreview = null; this._tilePreview = null;
this.setCustomKeybindingHandler('switch-to-workspace-left', this.setCustomKeybindingHandler('switch-to-workspace-left',
Shell.ActionMode.NORMAL | Shell.KeyBindingMode.NORMAL |
Shell.ActionMode.OVERVIEW, Shell.KeyBindingMode.OVERVIEW,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('switch-to-workspace-right', this.setCustomKeybindingHandler('switch-to-workspace-right',
Shell.ActionMode.NORMAL | Shell.KeyBindingMode.NORMAL |
Shell.ActionMode.OVERVIEW, Shell.KeyBindingMode.OVERVIEW,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('switch-to-workspace-up', this.setCustomKeybindingHandler('switch-to-workspace-up',
Shell.ActionMode.NORMAL | Shell.KeyBindingMode.NORMAL |
Shell.ActionMode.OVERVIEW, Shell.KeyBindingMode.OVERVIEW,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('switch-to-workspace-down', this.setCustomKeybindingHandler('switch-to-workspace-down',
Shell.ActionMode.NORMAL | Shell.KeyBindingMode.NORMAL |
Shell.ActionMode.OVERVIEW, Shell.KeyBindingMode.OVERVIEW,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('switch-to-workspace-last', this.setCustomKeybindingHandler('switch-to-workspace-last',
Shell.ActionMode.NORMAL | Shell.KeyBindingMode.NORMAL |
Shell.ActionMode.OVERVIEW, Shell.KeyBindingMode.OVERVIEW,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('move-to-workspace-left', this.setCustomKeybindingHandler('move-to-workspace-left',
Shell.ActionMode.NORMAL | Shell.KeyBindingMode.NORMAL |
Shell.ActionMode.OVERVIEW, Shell.KeyBindingMode.OVERVIEW,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('move-to-workspace-right', this.setCustomKeybindingHandler('move-to-workspace-right',
Shell.ActionMode.NORMAL | Shell.KeyBindingMode.NORMAL |
Shell.ActionMode.OVERVIEW, Shell.KeyBindingMode.OVERVIEW,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('move-to-workspace-up', this.setCustomKeybindingHandler('move-to-workspace-up',
Shell.ActionMode.NORMAL | Shell.KeyBindingMode.NORMAL |
Shell.ActionMode.OVERVIEW, Shell.KeyBindingMode.OVERVIEW,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('move-to-workspace-down', this.setCustomKeybindingHandler('move-to-workspace-down',
Shell.ActionMode.NORMAL | Shell.KeyBindingMode.NORMAL |
Shell.ActionMode.OVERVIEW, Shell.KeyBindingMode.OVERVIEW,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('switch-to-workspace-1', this.setCustomKeybindingHandler('switch-to-workspace-1',
Shell.ActionMode.NORMAL | Shell.KeyBindingMode.NORMAL |
Shell.ActionMode.OVERVIEW, Shell.KeyBindingMode.OVERVIEW,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('switch-to-workspace-2', this.setCustomKeybindingHandler('switch-to-workspace-2',
Shell.ActionMode.NORMAL | Shell.KeyBindingMode.NORMAL |
Shell.ActionMode.OVERVIEW, Shell.KeyBindingMode.OVERVIEW,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('switch-to-workspace-3', this.setCustomKeybindingHandler('switch-to-workspace-3',
Shell.ActionMode.NORMAL | Shell.KeyBindingMode.NORMAL |
Shell.ActionMode.OVERVIEW, Shell.KeyBindingMode.OVERVIEW,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('switch-to-workspace-4', this.setCustomKeybindingHandler('switch-to-workspace-4',
Shell.ActionMode.NORMAL | Shell.KeyBindingMode.NORMAL |
Shell.ActionMode.OVERVIEW, Shell.KeyBindingMode.OVERVIEW,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('switch-to-workspace-5', this.setCustomKeybindingHandler('switch-to-workspace-5',
Shell.ActionMode.NORMAL | Shell.KeyBindingMode.NORMAL |
Shell.ActionMode.OVERVIEW, Shell.KeyBindingMode.OVERVIEW,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('switch-to-workspace-6', this.setCustomKeybindingHandler('switch-to-workspace-6',
Shell.ActionMode.NORMAL | Shell.KeyBindingMode.NORMAL |
Shell.ActionMode.OVERVIEW, Shell.KeyBindingMode.OVERVIEW,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('switch-to-workspace-7', this.setCustomKeybindingHandler('switch-to-workspace-7',
Shell.ActionMode.NORMAL | Shell.KeyBindingMode.NORMAL |
Shell.ActionMode.OVERVIEW, Shell.KeyBindingMode.OVERVIEW,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('switch-to-workspace-8', this.setCustomKeybindingHandler('switch-to-workspace-8',
Shell.ActionMode.NORMAL | Shell.KeyBindingMode.NORMAL |
Shell.ActionMode.OVERVIEW, Shell.KeyBindingMode.OVERVIEW,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('switch-to-workspace-9', this.setCustomKeybindingHandler('switch-to-workspace-9',
Shell.ActionMode.NORMAL | Shell.KeyBindingMode.NORMAL |
Shell.ActionMode.OVERVIEW, Shell.KeyBindingMode.OVERVIEW,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('switch-to-workspace-10', this.setCustomKeybindingHandler('switch-to-workspace-10',
Shell.ActionMode.NORMAL | Shell.KeyBindingMode.NORMAL |
Shell.ActionMode.OVERVIEW, Shell.KeyBindingMode.OVERVIEW,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('switch-to-workspace-11', this.setCustomKeybindingHandler('switch-to-workspace-11',
Shell.ActionMode.NORMAL | Shell.KeyBindingMode.NORMAL |
Shell.ActionMode.OVERVIEW, Shell.KeyBindingMode.OVERVIEW,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('switch-to-workspace-12', this.setCustomKeybindingHandler('switch-to-workspace-12',
Shell.ActionMode.NORMAL | Shell.KeyBindingMode.NORMAL |
Shell.ActionMode.OVERVIEW, Shell.KeyBindingMode.OVERVIEW,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('move-to-workspace-1', this.setCustomKeybindingHandler('move-to-workspace-1',
Shell.ActionMode.NORMAL, Shell.KeyBindingMode.NORMAL,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('move-to-workspace-2', this.setCustomKeybindingHandler('move-to-workspace-2',
Shell.ActionMode.NORMAL, Shell.KeyBindingMode.NORMAL,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('move-to-workspace-3', this.setCustomKeybindingHandler('move-to-workspace-3',
Shell.ActionMode.NORMAL, Shell.KeyBindingMode.NORMAL,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('move-to-workspace-4', this.setCustomKeybindingHandler('move-to-workspace-4',
Shell.ActionMode.NORMAL, Shell.KeyBindingMode.NORMAL,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('move-to-workspace-5', this.setCustomKeybindingHandler('move-to-workspace-5',
Shell.ActionMode.NORMAL, Shell.KeyBindingMode.NORMAL,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('move-to-workspace-6', this.setCustomKeybindingHandler('move-to-workspace-6',
Shell.ActionMode.NORMAL, Shell.KeyBindingMode.NORMAL,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('move-to-workspace-7', this.setCustomKeybindingHandler('move-to-workspace-7',
Shell.ActionMode.NORMAL, Shell.KeyBindingMode.NORMAL,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('move-to-workspace-8', this.setCustomKeybindingHandler('move-to-workspace-8',
Shell.ActionMode.NORMAL, Shell.KeyBindingMode.NORMAL,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('move-to-workspace-9', this.setCustomKeybindingHandler('move-to-workspace-9',
Shell.ActionMode.NORMAL, Shell.KeyBindingMode.NORMAL,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('move-to-workspace-10', this.setCustomKeybindingHandler('move-to-workspace-10',
Shell.ActionMode.NORMAL, Shell.KeyBindingMode.NORMAL,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('move-to-workspace-11', this.setCustomKeybindingHandler('move-to-workspace-11',
Shell.ActionMode.NORMAL, Shell.KeyBindingMode.NORMAL,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('move-to-workspace-12', this.setCustomKeybindingHandler('move-to-workspace-12',
Shell.ActionMode.NORMAL, Shell.KeyBindingMode.NORMAL,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('move-to-workspace-last', this.setCustomKeybindingHandler('move-to-workspace-last',
Shell.ActionMode.NORMAL, Shell.KeyBindingMode.NORMAL,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('switch-applications', this.setCustomKeybindingHandler('switch-applications',
Shell.ActionMode.NORMAL, Shell.KeyBindingMode.NORMAL,
Lang.bind(this, this._startAppSwitcher)); Lang.bind(this, this._startAppSwitcher));
this.setCustomKeybindingHandler('switch-group', this.setCustomKeybindingHandler('switch-group',
Shell.ActionMode.NORMAL, Shell.KeyBindingMode.NORMAL,
Lang.bind(this, this._startAppSwitcher)); Lang.bind(this, this._startAppSwitcher));
this.setCustomKeybindingHandler('switch-applications-backward', this.setCustomKeybindingHandler('switch-applications-backward',
Shell.ActionMode.NORMAL, Shell.KeyBindingMode.NORMAL,
Lang.bind(this, this._startAppSwitcher)); Lang.bind(this, this._startAppSwitcher));
this.setCustomKeybindingHandler('switch-group-backward', this.setCustomKeybindingHandler('switch-group-backward',
Shell.ActionMode.NORMAL, Shell.KeyBindingMode.NORMAL,
Lang.bind(this, this._startAppSwitcher)); Lang.bind(this, this._startAppSwitcher));
this.setCustomKeybindingHandler('switch-windows', this.setCustomKeybindingHandler('switch-windows',
Shell.ActionMode.NORMAL, Shell.KeyBindingMode.NORMAL,
Lang.bind(this, this._startWindowSwitcher)); Lang.bind(this, this._startWindowSwitcher));
this.setCustomKeybindingHandler('switch-windows-backward', this.setCustomKeybindingHandler('switch-windows-backward',
Shell.ActionMode.NORMAL, Shell.KeyBindingMode.NORMAL,
Lang.bind(this, this._startWindowSwitcher)); Lang.bind(this, this._startWindowSwitcher));
this.setCustomKeybindingHandler('switch-panels', this.setCustomKeybindingHandler('switch-panels',
Shell.ActionMode.NORMAL | Shell.KeyBindingMode.NORMAL |
Shell.ActionMode.OVERVIEW | Shell.KeyBindingMode.OVERVIEW |
Shell.ActionMode.LOCK_SCREEN | Shell.KeyBindingMode.LOCK_SCREEN |
Shell.ActionMode.UNLOCK_SCREEN | Shell.KeyBindingMode.UNLOCK_SCREEN |
Shell.ActionMode.LOGIN_SCREEN, Shell.KeyBindingMode.LOGIN_SCREEN,
Lang.bind(this, this._startA11ySwitcher)); Lang.bind(this, this._startA11ySwitcher));
this.setCustomKeybindingHandler('switch-panels-backward', this.setCustomKeybindingHandler('switch-panels-backward',
Shell.ActionMode.NORMAL | Shell.KeyBindingMode.NORMAL |
Shell.ActionMode.OVERVIEW | Shell.KeyBindingMode.OVERVIEW |
Shell.ActionMode.LOCK_SCREEN | Shell.KeyBindingMode.LOCK_SCREEN |
Shell.ActionMode.UNLOCK_SCREEN | Shell.KeyBindingMode.UNLOCK_SCREEN |
Shell.ActionMode.LOGIN_SCREEN, Shell.KeyBindingMode.LOGIN_SCREEN,
Lang.bind(this, this._startA11ySwitcher)); Lang.bind(this, this._startA11ySwitcher));
this.addKeybinding('pause-resume-tweens', this.addKeybinding('pause-resume-tweens',
new Gio.Settings({ schema_id: SHELL_KEYBINDINGS_SCHEMA }), new Gio.Settings({ schema_id: SHELL_KEYBINDINGS_SCHEMA }),
Meta.KeyBindingFlags.NONE, Meta.KeyBindingFlags.NONE,
Shell.ActionMode.ALL, Shell.KeyBindingMode.ALL,
Lang.bind(this, this._toggleTweens)); Lang.bind(this, this._toggleTweens));
this.addKeybinding('open-application-menu', this.addKeybinding('open-application-menu',
new Gio.Settings({ schema_id: SHELL_KEYBINDINGS_SCHEMA }), new Gio.Settings({ schema_id: SHELL_KEYBINDINGS_SCHEMA }),
Meta.KeyBindingFlags.NONE, Meta.KeyBindingFlags.NONE,
Shell.ActionMode.NORMAL | Shell.KeyBindingMode.NORMAL |
Shell.ActionMode.TOPBAR_POPUP, Shell.KeyBindingMode.TOPBAR_POPUP,
Lang.bind(this, this._toggleAppMenu)); Lang.bind(this, this._toggleAppMenu));
global.display.connect('show-resize-popup', Lang.bind(this, this._showResizePopup));
Main.overview.connect('showing', Lang.bind(this, function() { Main.overview.connect('showing', Lang.bind(this, function() {
for (let i = 0; i < this._dimmedWindows.length; i++) for (let i = 0; i < this._dimmedWindows.length; i++)
this._undimWindow(this._dimmedWindows[i]); this._undimWindow(this._dimmedWindows[i]);
@@ -850,6 +812,8 @@ const WindowManager = new Lang.Class({
gesture = new AppSwitchAction(); gesture = new AppSwitchAction();
gesture.connect('activated', Lang.bind(this, this._switchApp)); gesture.connect('activated', Lang.bind(this, this._switchApp));
global.stage.add_action(gesture); global.stage.add_action(gesture);
this._wobblyWindows = new Wobbly.WobblyWindowManager();
}, },
_lookupIndex: function (windows, metaWindow) { _lookupIndex: function (windows, metaWindow) {
@@ -888,44 +852,6 @@ const WindowManager = new Lang.Class({
Main.activateWindow(nextWindow); 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) { keepWorkspaceAlive: function(workspace, duration) {
if (!this._workspaceTracker) if (!this._workspaceTracker)
return; return;
@@ -947,7 +873,7 @@ const WindowManager = new Lang.Class({
removeKeybinding: function(name) { removeKeybinding: function(name) {
if (global.display.remove_keybinding(name)) if (global.display.remove_keybinding(name))
this.allowKeybinding(name, Shell.ActionMode.NONE); this.allowKeybinding(name, Shell.KeyBindingMode.NONE);
}, },
allowKeybinding: function(name, modes) { allowKeybinding: function(name, modes) {
@@ -955,7 +881,7 @@ const WindowManager = new Lang.Class({
}, },
_shouldAnimate: function() { _shouldAnimate: function() {
return !(Main.overview.visible || this._blockAnimations); return !Main.overview.visible;
}, },
_shouldAnimateActor: function(actor, types) { _shouldAnimateActor: function(actor, types) {
@@ -1146,8 +1072,10 @@ const WindowManager = new Lang.Class({
return; 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()); this._checkDimming(actor.get_meta_window().get_transient_for());
}
switch (actor._windowType) { switch (actor._windowType) {
case Meta.WindowType.NORMAL: case Meta.WindowType.NORMAL:
@@ -1302,36 +1230,18 @@ const WindowManager = new Lang.Class({
}, },
_filterKeybinding: function(shellwm, binding) { _filterKeybinding: function(shellwm, binding) {
if (Main.actionMode == Shell.ActionMode.NONE) if (Main.keybindingMode == Shell.KeyBindingMode.NONE)
return true; return true;
// There's little sense in implementing a keybinding in mutter and // There's little sense in implementing a keybinding in mutter and
// not having it work in NORMAL mode; handle this case generically // not having it work in NORMAL mode; handle this case generically
// so we don't have to explicitly allow all builtin keybindings in // so we don't have to explicitly allow all builtin keybindings in
// NORMAL mode. // NORMAL mode.
if (Main.actionMode == Shell.ActionMode.NORMAL && if (Main.keybindingMode == Shell.KeyBindingMode.NORMAL &&
binding.is_builtin()) binding.is_builtin())
return false; return false;
return !(this._allowedKeybindings[binding.get_name()] & Main.actionMode); return !(this._allowedKeybindings[binding.get_name()] & Main.keybindingMode);
},
_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];
}
}, },
_switchWorkspace : function(shellwm, from, to, direction) { _switchWorkspace : function(shellwm, from, to, direction) {
@@ -1525,11 +1435,6 @@ const WindowManager = new Lang.Class({
direction = Meta.MotionDirection.DOWN; direction = Meta.MotionDirection.DOWN;
newWs = screen.get_workspace_by_index(screen.n_workspaces - 1); newWs = screen.get_workspace_by_index(screen.n_workspaces - 1);
} else if (isNaN(target)) { } 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()]; direction = Meta.MotionDirection[target.toUpperCase()];
newWs = screen.get_active_workspace().get_neighbor(direction); newWs = screen.get_active_workspace().get_neighbor(direction);
} else if (target > 0) { } else if (target > 0) {
@@ -1594,18 +1499,4 @@ const WindowManager = new Lang.Class({
let dialog = new DisplayChangeDialog(this._shellwm); let dialog = new DisplayChangeDialog(this._shellwm);
dialog.open(); 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;
}
}
},
}); });

View File

@@ -75,7 +75,7 @@ const WindowMenu = new Lang.Class({
})); }));
if (window.is_above()) if (window.is_above())
item.setOrnament(PopupMenu.Ornament.DOT); item.setOrnament(PopupMenu.Ornament.DOT);
if (window.get_maximized() == Meta.MaximizeFlags.BOTH || if (window.get_maximized() ||
type == Meta.WindowType.DOCK || type == Meta.WindowType.DOCK ||
type == Meta.WindowType.DESKTOP || type == Meta.WindowType.DESKTOP ||
type == Meta.WindowType.SPLASHSCREEN) type == Meta.WindowType.SPLASHSCREEN)

130
js/ui/wobbly.js Normal file
View 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();
},
});

View File

@@ -254,7 +254,7 @@ const WindowClone = new Lang.Class({
}, },
_computeBoundingBox: function() { _computeBoundingBox: function() {
let rect = this.metaWindow.get_frame_rect(); let rect = this.metaWindow.get_outer_rect();
this.actor.get_children().forEach(function (child) { this.actor.get_children().forEach(function (child) {
let realWindow; let realWindow;
@@ -264,7 +264,7 @@ const WindowClone = new Lang.Class({
realWindow = child.source; realWindow = child.source;
let metaWindow = realWindow.meta_window; let metaWindow = realWindow.meta_window;
rect = rect.union(metaWindow.get_frame_rect()); rect = rect.union(metaWindow.get_outer_rect());
}, this); }, this);
// Convert from a MetaRectangle to a native JS object // Convert from a MetaRectangle to a native JS object
@@ -1209,18 +1209,14 @@ const Workspace = new Lang.Class({
return this._windows.length == 0; return this._windows.length == 0;
}, },
setReservedSlot: function(metaWindow) { setReservedSlot: function(clone) {
if (this._reservedSlotWindow == metaWindow) if (this._reservedSlot == clone)
return; return;
if (!metaWindow || this.containsMetaWindow(metaWindow)) { if (clone && this.containsMetaWindow(clone.metaWindow))
this._reservedSlotWindow = null; clone = null;
this._reservedSlot = null;
} else {
this._reservedSlotWindow = metaWindow;
this._reservedSlot = this._windows[this._lookupIndex(metaWindow)];
}
this._reservedSlot = clone;
this._recalculateWindowPositions(WindowPositionFlags.ANIMATE); this._recalculateWindowPositions(WindowPositionFlags.ANIMATE);
}, },
@@ -1818,16 +1814,16 @@ const Workspace = new Lang.Class({
Lang.bind(this, this._onCloneSelected)); Lang.bind(this, this._onCloneSelected));
clone.connect('drag-begin', clone.connect('drag-begin',
Lang.bind(this, function() { Lang.bind(this, function() {
Main.overview.beginWindowDrag(clone.metaWindow); Main.overview.beginWindowDrag(clone);
overlay.hide(); overlay.hide();
})); }));
clone.connect('drag-cancelled', clone.connect('drag-cancelled',
Lang.bind(this, function() { Lang.bind(this, function() {
Main.overview.cancelledWindowDrag(clone.metaWindow); Main.overview.cancelledWindowDrag(clone);
})); }));
clone.connect('drag-end', clone.connect('drag-end',
Lang.bind(this, function() { Lang.bind(this, function() {
Main.overview.endWindowDrag(clone.metaWindow); Main.overview.endWindowDrag(clone);
overlay.show(); overlay.show();
})); }));
clone.connect('size-changed', clone.connect('size-changed',

View File

@@ -161,14 +161,14 @@ const WindowClone = new Lang.Class({
_updateDialogPosition: function(realDialog, cloneDialog) { _updateDialogPosition: function(realDialog, cloneDialog) {
let metaDialog = realDialog.meta_window; let metaDialog = realDialog.meta_window;
let dialogRect = metaDialog.get_frame_rect(); let dialogRect = metaDialog.get_outer_rect();
let rect = this.metaWindow.get_frame_rect(); let rect = this.metaWindow.get_outer_rect();
cloneDialog.set_position(dialogRect.x - rect.x, dialogRect.y - rect.y); cloneDialog.set_position(dialogRect.x - rect.x, dialogRect.y - rect.y);
}, },
_onPositionChanged: function() { _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); this.actor.set_position(this.realWindow.x, this.realWindow.y);
}, },
@@ -518,15 +518,15 @@ const WorkspaceThumbnail = new Lang.Class({
})); }));
clone.connect('drag-begin', clone.connect('drag-begin',
Lang.bind(this, function() { Lang.bind(this, function() {
Main.overview.beginWindowDrag(clone.metaWindow); Main.overview.beginWindowDrag(clone);
})); }));
clone.connect('drag-cancelled', clone.connect('drag-cancelled',
Lang.bind(this, function() { Lang.bind(this, function() {
Main.overview.cancelledWindowDrag(clone.metaWindow); Main.overview.cancelledWindowDrag(clone);
})); }));
clone.connect('drag-end', clone.connect('drag-end',
Lang.bind(this, function() { Lang.bind(this, function() {
Main.overview.endWindowDrag(clone.metaWindow); Main.overview.endWindowDrag(clone);
})); }));
this._contents.add_actor(clone.actor); this._contents.add_actor(clone.actor);
@@ -795,13 +795,35 @@ const ThumbnailsBox = new Lang.Class({
let isWindow = !!source.realWindow; 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; let newWorkspaceIndex;
[newWorkspaceIndex, this._dropPlaceholderPos] = [this._dropPlaceholderPos, -1]; [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; 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) { if (isWindow) {
// ... and bam, a workspace, good as new.
// Move the window to our monitor first if necessary. // Move the window to our monitor first if necessary.
let thumbMonitor = this._thumbnails[newWorkspaceIndex].monitorIndex; let thumbMonitor = this._thumbnails[newWorkspaceIndex].monitorIndex;
if (source.metaWindow.get_monitor() != thumbMonitor) if (source.metaWindow.get_monitor() != thumbMonitor)

View File

@@ -18,6 +18,8 @@ const Workspace = imports.ui.workspace;
const WorkspaceThumbnail = imports.ui.workspaceThumbnail; const WorkspaceThumbnail = imports.ui.workspaceThumbnail;
const WORKSPACE_SWITCH_TIME = 0.25; const WORKSPACE_SWITCH_TIME = 0.25;
// Note that mutter has a compile-time limit of 36
const MAX_WORKSPACES = 16;
const AnimationType = { const AnimationType = {
ZOOM: 0, ZOOM: 0,
@@ -61,9 +63,9 @@ const WorkspacesViewBase = new Lang.Class({
} }
}, },
_dragBegin: function(overview, window) { _dragBegin: function(overview, clone) {
this._inDrag = true; this._inDrag = true;
this._setReservedSlot(window); this._setReservedSlot(clone);
}, },
_dragEnd: function() { _dragEnd: function() {
@@ -125,9 +127,9 @@ const WorkspacesView = new Lang.Class({
Lang.bind(this, this._activeWorkspaceChanged)); Lang.bind(this, this._activeWorkspaceChanged));
}, },
_setReservedSlot: function(window) { _setReservedSlot: function(clone) {
for (let i = 0; i < this._workspaces.length; i++) for (let i = 0; i < this._workspaces.length; i++)
this._workspaces[i].setReservedSlot(window); this._workspaces[i].setReservedSlot(clone);
}, },
_syncFullGeometry: function() { _syncFullGeometry: function() {
@@ -364,8 +366,8 @@ const ExtraWorkspaceView = new Lang.Class({
this.actor.add_actor(this._workspace.actor); this.actor.add_actor(this._workspace.actor);
}, },
_setReservedSlot: function(window) { _setReservedSlot: function(clone) {
this._workspace.setReservedSlot(window); this._workspace.setReservedSlot(clone);
}, },
_syncFullGeometry: function() { _syncFullGeometry: function() {

View File

@@ -45,7 +45,6 @@ mk
mr mr
ms ms
nb nb
ne
nl nl
nn nn
or or
@@ -68,7 +67,6 @@ th
tr tr
ug ug
uk uk
uz@cyrillic
vi vi
zh_CN zh_CN
zh_HK zh_HK

1794
po/af.po

File diff suppressed because it is too large Load Diff

984
po/an.po

File diff suppressed because it is too large Load Diff

1015
po/ar.po

File diff suppressed because it is too large Load Diff

332
po/as.po
View File

@@ -9,8 +9,8 @@ msgstr ""
"Project-Id-Version: gnome-shell master\n" "Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n" "shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2014-09-15 07:36+0000\n" "POT-Creation-Date: 2014-08-13 07:33+0000\n"
"PO-Revision-Date: 2014-09-15 14:59+0530\n" "PO-Revision-Date: 2014-08-13 17:32+0530\n"
"Last-Translator: Nilamdyuti Goswami <ngoswami@redhat.com>\n" "Last-Translator: Nilamdyuti Goswami <ngoswami@redhat.com>\n"
"Language-Team: Assamese <kde-i18n-doc@kde.org>\n" "Language-Team: Assamese <kde-i18n-doc@kde.org>\n"
"Language: as_IN\n" "Language: as_IN\n"
@@ -110,9 +110,8 @@ msgid ""
"load all extensions regardless of the versions they claim to support." "load all extensions regardless of the versions they claim to support."
msgstr "" msgstr ""
"GNOME শ্বেলে কেৱল বৰ্তমান চলি থকা সংস্কৰণক সমৰ্থন কৰা সম্প্ৰসাৰনসমূহ ল'ড " "GNOME শ্বেলে কেৱল বৰ্তমান চলি থকা সংস্কৰণক সমৰ্থন কৰা সম্প্ৰসাৰনসমূহ ল'ড "
"কৰিব। এই " "কৰিব। এই বিকল্প সামৰ্থবান কৰিলে এই নিৰীক্ষণ অসামৰ্থবান কৰা হব আৰু সিহতে "
"বিকল্প সামৰ্থবান কৰিলে এই নিৰক্ষণ অসামৰ্থবান কৰা হব আৰু সিহতে সমৰ্থন কৰা " "মৰ্থন কৰা সংস্কৰণসমূহৰ নিৰপেক্ষে সকলো সম্প্ৰসাৰন ল'ড কৰিব।"
"সংস্কৰণসমূহৰ নিৰপেক্ষে সকলো সম্প্ৰসাৰন ল'ড কৰিব।"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:7 #: ../data/org.gnome.shell.gschema.xml.in.in.h:7
msgid "List of desktop file IDs for favorite applications" msgid "List of desktop file IDs for favorite applications"
@@ -158,8 +157,8 @@ msgstr ""
msgid "" msgid ""
"Whether to remember password for mounting encrypted or remote filesystems" "Whether to remember password for mounting encrypted or remote filesystems"
msgstr "" msgstr ""
"ইনক্ৰিপ্টেড অথবা দূৰৱৰ্তী ফাইলচিস্টেমসমূহ মাউ্ট কৰাৰ বাবে পাছৱৰ্ড মনত ৰখা হব " "ইনক্ৰিপ্টেড অথবা দূৰৱৰ্তী ফাইলচিস্টেমসমূহ মাউ্ট কৰাৰ বাবে পাছৱৰ্ড মনত ৰখা "
"নে" "হব নে"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16 #: ../data/org.gnome.shell.gschema.xml.in.in.h:16
msgid "" msgid ""
@@ -170,11 +169,10 @@ msgid ""
msgstr "" msgstr ""
"শ্বেলে এটা পাছৱৰ্ড অনুৰোধ কৰিব যেতিয়া এটা ইনক্ৰিপ্টেড ডিভাইচ অথবা এটা " "শ্বেলে এটা পাছৱৰ্ড অনুৰোধ কৰিব যেতিয়া এটা ইনক্ৰিপ্টেড ডিভাইচ অথবা এটা "
"দূৰৱৰ্তী " "দূৰৱৰ্তী "
"ফাইলচিস্টেম মাউ্ট কৰা হয়। যদি পাছৱৰ্ডক ভৱিষ্যত ব্যৱহাৰৰ বাবে সংৰক্ষণ কৰিব " "ফাইলচিস্টেম মাউ্ট কৰা হয়। যদি পাছৱৰ্ডক ভৱিষ্যত ব্যৱহাৰৰ বাবে সংৰক্ষণ কৰিব "
"পাৰি " "পাৰি "
"তেন্তে এটা 'পাছৱৰ্ড মনত ৰাখক' চেকবাকচ উপস্থিত থাকিব। এই কি'য়ে চেকবাকচৰ " "তেন্তে এটা 'পাছৱৰ্ড মনত ৰাখক' চেকবাকচ উপস্থিত থাকিব। এই কি'য়ে চেকবাকচৰ "
"অবিকল্পিত " "অবিকল্পিত অৱস্থা সংহতি কৰে।"
"অৱস্থা সংহতি কৰে।"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17 #: ../data/org.gnome.shell.gschema.xml.in.in.h:17
msgid "Show the week date in the calendar" msgid "Show the week date in the calendar"
@@ -250,8 +248,7 @@ msgid ""
"shown in the switcher. Otherwise, all applications are included." "shown in the switcher. Otherwise, all applications are included."
msgstr "" msgstr ""
"যদি সত্য, কেৱল বৰ্তমান কাৰ্য্যস্থানক উইন্ডো থকা এপ্লিকেচনসমূক চুইচাৰত দেখুৱা " "যদি সত্য, কেৱল বৰ্তমান কাৰ্য্যস্থানক উইন্ডো থকা এপ্লিকেচনসমূক চুইচাৰত দেখুৱা "
"হব। নহলে, " "হব। নহলে, সকলো এপ্লিকেচন অন্তৰ্ভুক্ত কৰা হয়।"
"সকলো এপ্লিকেচন অন্তৰ্ভুক্ত কৰা হয়।"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34 #: ../data/org.gnome.shell.gschema.xml.in.in.h:34
msgid "The application icon mode." msgid "The application icon mode."
@@ -274,8 +271,7 @@ msgid ""
"Otherwise, all windows are included." "Otherwise, all windows are included."
msgstr "" msgstr ""
"যদি সত্য, কেৱল বৰ্তমান কাৰ্য্যস্থানৰ পৰা উইন্ডোসমূহক চুইচাৰত দেখুৱা হব। নহলে, " "যদি সত্য, কেৱল বৰ্তমান কাৰ্য্যস্থানৰ পৰা উইন্ডোসমূহক চুইচাৰত দেখুৱা হব। নহলে, "
"সকলো " "সকলো উইন্ডো অন্তৰ্ভুক্ত কৰা হব।"
"উইন্ডো অন্তৰ্ভুক্ত কৰা হব।"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37 #: ../data/org.gnome.shell.gschema.xml.in.in.h:37
msgid "Attach modal dialog to the parent window" msgid "Attach modal dialog to the parent window"
@@ -307,17 +303,18 @@ msgstr ""
msgid "Captive Portal" msgid "Captive Portal"
msgstr "কেপটিভ পৰ্টেল" msgstr "কেপটিভ পৰ্টেল"
#: ../js/extensionPrefs/main.js:123 #: ../js/extensionPrefs/main.js:127
#, javascript-format #, javascript-format
msgid "There was an error loading the preferences dialog for %s:" msgid "There was an error loading the preferences dialog for %s:"
msgstr "%s ৰ বাবে পছন্দসমূহ ডাইলগ ল'ড কৰোতে এটা ত্ৰুটি হৈছিল:" msgstr "%s ৰ বাবে পছন্দসমূহ ডাইলগ ল'ড কৰোতে এটা ত্ৰুটি হৈছিল:"
#: ../js/extensionPrefs/main.js:155 #: ../js/extensionPrefs/main.js:159
#| msgid "Configure GNOME Shell Extensions"
msgid "GNOME Shell Extensions" msgid "GNOME Shell Extensions"
msgstr "GNOME শ্বেল সম্প্ৰসাৰনসমূহ" msgstr "GNOME শ্বেল সম্প্ৰসাৰনসমূহ"
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:143 #: ../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/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/network.js:915 #: ../js/ui/status/network.js:915
msgid "Cancel" msgid "Cancel"
@@ -380,44 +377,46 @@ msgstr "কমান্ড বিশ্লেষন কৰিব নোৱাৰ
msgid "Execution of “%s” failed:" msgid "Execution of “%s” failed:"
msgstr "“%s” ৰ প্ৰেৰণ ব্যৰ্থ হল:" msgstr "“%s” ৰ প্ৰেৰণ ব্যৰ্থ হল:"
#: ../js/portalHelper/main.js:85 #: ../js/portalHelper/main.js:84
#| msgid "Authentication Required"
msgid "Web Authentication Redirect" msgid "Web Authentication Redirect"
msgstr "ৱেব প্ৰমাণীকৰণৰ পুনৰনিৰ্দেশ" msgstr "ৱেব প্ৰমাণীকৰণৰ পুনৰনিৰ্দেশ"
#: ../js/ui/appDisplay.js:772 #: ../js/ui/appDisplay.js:659
msgid "Frequently used applications will appear here" msgid "Frequently used applications will appear here"
msgstr "সঘনে ব্যৱহাৰ কৰা এপ্লিকেচনসমূহ ইয়াত উপস্থিত হব" msgstr "সঘনে ব্যৱহাৰ কৰা এপ্লিকেচনসমূহ ইয়াত উপস্থিত হব"
#: ../js/ui/appDisplay.js:883 #: ../js/ui/appDisplay.js:770
msgid "Frequent" msgid "Frequent"
msgstr "সঘন" msgstr "সঘন"
#: ../js/ui/appDisplay.js:890 #: ../js/ui/appDisplay.js:777
msgid "All" msgid "All"
msgstr "সকলো" msgstr "সকলো"
#: ../js/ui/appDisplay.js:1789 #: ../js/ui/appDisplay.js:1649
msgid "New Window" msgid "New Window"
msgstr "নতুন উইন্ডো" 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" msgid "Remove from Favorites"
msgstr "পছন্দৰ পৰা আতৰাওক" msgstr "পছন্দৰ পৰা আতৰাওক"
#: ../js/ui/appDisplay.js:1821 #: ../js/ui/appDisplay.js:1678
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "পছন্দলে যোগ কৰক" msgstr "পছন্দলে যোগ কৰক"
#: ../js/ui/appDisplay.js:1830 #: ../js/ui/appDisplay.js:1687
#| msgid "Show Text"
msgid "Show Details" msgid "Show Details"
msgstr "বিৱৰণসমূহ দেখুৱাওক" msgstr "বিৱৰণসমূহ দেখুৱাওক"
#: ../js/ui/appFavorites.js:124 #: ../js/ui/appFavorites.js:122
#, javascript-format #, javascript-format
msgid "%s has been added to your favorites." msgid "%s has been added to your favorites."
msgstr "%s ক আপোনাৰ পছন্দলে যোগ কৰা হৈছে।" msgstr "%s ক আপোনাৰ পছন্দলে যোগ কৰা হৈছে।"
#: ../js/ui/appFavorites.js:158 #: ../js/ui/appFavorites.js:156
#, javascript-format #, javascript-format
msgid "%s has been removed from your favorites." msgid "%s has been removed from your favorites."
msgstr "%s ক আপোনাৰ পছন্দৰ পৰা আতৰোৱা হৈছে।" msgstr "%s ক আপোনাৰ পছন্দৰ পৰা আতৰোৱা হৈছে।"
@@ -609,11 +608,11 @@ msgstr "%s ৰ সৈতে খোলক"
msgid "Eject" msgid "Eject"
msgstr "উলিৱাওক" 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:" msgid "Password:"
msgstr "পাছৱৰ্ড:" msgstr "পাছৱৰ্ড:"
#: ../js/ui/components/keyring.js:120 #: ../js/ui/components/keyring.js:113
msgid "Type again:" msgid "Type again:"
msgstr "আকৌ টাইপ কৰক:" msgstr "আকৌ টাইপ কৰক:"
@@ -656,7 +655,8 @@ msgid ""
"Passwords or encryption keys are required to access the wireless network " "Passwords or encryption keys are required to access the wireless network "
"“%s”." "“%s”."
msgstr "" msgstr ""
"বেতাঁৰ নেটৱৰ্ক “%s” অভিগম কৰিবলে পাছৱৰ্ডসমূহ অথবা ইনক্ৰিপষণ কি'সমূহৰ প্ৰয়োজন।" "বেতাঁৰ নেটৱৰ্ক “%s” অভিগম কৰিবলে পাছৱৰ্ডসমূহ অথবা ইনক্ৰিপষণ কি'সমূহৰ "
"প্ৰয়োজন।"
#: ../js/ui/components/networkAgent.js:323 #: ../js/ui/components/networkAgent.js:323
msgid "Wired 802.1X authentication" msgid "Wired 802.1X authentication"
@@ -736,77 +736,89 @@ msgid "Mute"
msgstr "মোন কৰক" msgstr "মোন কৰক"
#. Translators: Time in 24h format */ #. 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" msgid "%H%M"
msgstr "%H%M" msgstr "%H%M"
#. Translators: this is the word "Yesterday" followed by a #. 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 #: ../js/ui/components/telepathyClient.js:964
#| msgid "<b>Yesterday</b>, <b>%H:%M</b>"
msgid "Yesterday, %H%M" msgid "Yesterday, %H%M"
msgstr "যোৱাকালী, %H%M" msgstr "যোৱাকালী, %H%M"
#. Translators: this is the week day name followed by a time #. 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 #: ../js/ui/components/telepathyClient.js:971
#| msgctxt "event list time"
#| msgid "%H%M"
msgid "%A, %H%M" msgid "%A, %H%M"
msgstr "%A, %H%M" msgstr "%A, %H%M"
#. Translators: this is the month name and day number #. Translators: this is the month name and day number
#. followed by a time string in 24h format. #. 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 #: ../js/ui/components/telepathyClient.js:978
#| msgctxt "event list time"
#| msgid "%H%M"
msgid "%B %d, %H%M" msgid "%B %d, %H%M"
msgstr "%B %d, %H%M" msgstr "%B %d, %H%M"
#. Translators: this is the month name, day number, year #. Translators: this is the month name, day number, year
#. number followed by a time string in 24h format. #. 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 #: ../js/ui/components/telepathyClient.js:984
msgid "%B %d %Y, %H%M" msgid "%B %d %Y, %H%M"
msgstr "%B %d %Y, %H%M" msgstr "%B %d %Y, %H%M"
#. Translators: Time in 24h format */ #. 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" msgid "%l%M %p"
msgstr "%l%M %p" msgstr "%l%M %p"
#. Translators: this is the word "Yesterday" followed by a #. 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 #: ../js/ui/components/telepathyClient.js:997
msgid "Yesterday, %l%M %p" msgid "Yesterday, %l%M %p"
msgstr "যোৱাকালী, %l%M %p" msgstr "যোৱাকালী, %l%M %p"
#. Translators: this is the week day name followed by a time #. 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 #: ../js/ui/components/telepathyClient.js:1004
#| msgid "%a %l:%M %p"
msgid "%A, %l%M %p" msgid "%A, %l%M %p"
msgstr "%A, %l%M %p" msgstr "%A, %l%M %p"
#. Translators: this is the month name and day number #. Translators: this is the month name and day number
#. followed by a time string in 12h format. #. 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 #: ../js/ui/components/telepathyClient.js:1011
#| msgid "%a %b %e, %l:%M %p"
msgid "%B %d, %l%M %p" msgid "%B %d, %l%M %p"
msgstr "%B %d, %l%M %p" msgstr "%B %d, %l%M %p"
#. Translators: this is the month name, day number, year #. Translators: this is the month name, day number, year
#. number followed by a time string in 12h format. #. 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 #: ../js/ui/components/telepathyClient.js:1017
#| msgid "%a %b %e, %l:%M %p"
msgid "%B %d %Y, %l%M %p" msgid "%B %d %Y, %l%M %p"
msgstr "%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 #. Translators: this is the other person changing their old IM name to their new
#. IM name. */ #. IM name. */
#: ../js/ui/components/telepathyClient.js:1045 #: ../js/ui/components/telepathyClient.js:1049
#, javascript-format #, javascript-format
msgid "%s is now known as %s" msgid "%s is now known as %s"
msgstr "%s এতিয়া %s হিচাপে জনাজাত" msgstr "%s এতিয়া %s হিচাপে জনাজাত"
#. translators: argument is a room name like #. translators: argument is a room name like
#. * room@jabber.org for example. */ #. * room@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1149 #: ../js/ui/components/telepathyClient.js:1153
#, javascript-format #, javascript-format
msgid "Invitation to %s" msgid "Invitation to %s"
msgstr "%s লে নিমন্ত্ৰণ" msgstr "%s লে নিমন্ত্ৰণ"
@@ -814,38 +826,38 @@ msgstr "%s লে নিমন্ত্ৰণ"
#. translators: first argument is the name of a contact and the second #. 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 #. * 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 #: ../js/ui/components/telepathyClient.js:1161
#, javascript-format #, javascript-format
msgid "%s is inviting you to join %s" msgid "%s is inviting you to join %s"
msgstr "%s এ আপোনাক %s ত অংশগ্ৰহণ কৰিবলে আমন্ত্ৰণ জনাইছে" msgstr "%s এ আপোনাক %s ত অংশগ্ৰহণ কৰিবলে আমন্ত্ৰণ জনাইছে"
#: ../js/ui/components/telepathyClient.js:1159 #: ../js/ui/components/telepathyClient.js:1163
#: ../js/ui/components/telepathyClient.js:1194 #: ../js/ui/components/telepathyClient.js:1198
#: ../js/ui/components/telepathyClient.js:1228 #: ../js/ui/components/telepathyClient.js:1232
#: ../js/ui/components/telepathyClient.js:1286 #: ../js/ui/components/telepathyClient.js:1290
msgid "Decline" msgid "Decline"
msgstr "নাকচ কৰক" msgstr "নাকচ কৰক"
#: ../js/ui/components/telepathyClient.js:1165 #: ../js/ui/components/telepathyClient.js:1169
#: ../js/ui/components/telepathyClient.js:1234 #: ../js/ui/components/telepathyClient.js:1238
#: ../js/ui/components/telepathyClient.js:1291 #: ../js/ui/components/telepathyClient.js:1295
msgid "Accept" msgid "Accept"
msgstr "গ্ৰহন কৰক" msgstr "গ্ৰহন কৰক"
#. 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 #: ../js/ui/components/telepathyClient.js:1188
#, javascript-format #, javascript-format
msgid "Video call from %s" msgid "Video call from %s"
msgstr "%s ৰ পৰা ভিডিঅ' কল" msgstr "%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 #: ../js/ui/components/telepathyClient.js:1191
#, javascript-format #, javascript-format
msgid "Call from %s" msgid "Call from %s"
msgstr "%s ৰ পৰা কল" msgstr "%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 #: ../js/ui/components/telepathyClient.js:1205
msgid "Answer" msgid "Answer"
msgstr "উত্তৰ দিয়ক" msgstr "উত্তৰ দিয়ক"
@@ -854,110 +866,110 @@ msgstr "উত্তৰ দিয়ক"
#. * file name. The string will be something #. * file name. The string will be something
#. * like: "Alice is sending you test.ogg" #. * like: "Alice is sending you test.ogg"
#. */ #. */
#: ../js/ui/components/telepathyClient.js:1222 #: ../js/ui/components/telepathyClient.js:1226
#, javascript-format #, javascript-format
msgid "%s is sending you %s" msgid "%s is sending you %s"
msgstr "%s এ আপোনাক %s পঠাই আছে" msgstr "%s এ আপোনাক %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 #: ../js/ui/components/telepathyClient.js:1255
#, javascript-format #, javascript-format
msgid "%s would like permission to see when you are online" msgid "%s would like permission to see when you are online"
msgstr "আপুনি কেতিয়া অনলাইন আছে চাবলে %s এ অনুমতি বিচাৰিব" msgstr "আপুনি কেতিয়া অনলাইন আছে চাবলে %s এ অনুমতি বিচাৰিব"
#: ../js/ui/components/telepathyClient.js:1337 #: ../js/ui/components/telepathyClient.js:1341
msgid "Network error" msgid "Network error"
msgstr "নেটৱৰ্ক ত্ৰুটি" msgstr "নেটৱৰ্ক ত্ৰুটি"
#: ../js/ui/components/telepathyClient.js:1339 #: ../js/ui/components/telepathyClient.js:1343
msgid "Authentication failed" msgid "Authentication failed"
msgstr "প্ৰমাণীকৰণ ব্যৰ্থ" msgstr "প্ৰমাণীকৰণ ব্যৰ্থ"
#: ../js/ui/components/telepathyClient.js:1341 #: ../js/ui/components/telepathyClient.js:1345
msgid "Encryption error" msgid "Encryption error"
msgstr "ইনক্ৰিপষণ ত্ৰুটি" msgstr "ইনক্ৰিপষণ ত্ৰুটি"
#: ../js/ui/components/telepathyClient.js:1343 #: ../js/ui/components/telepathyClient.js:1347
msgid "Certificate not provided" msgid "Certificate not provided"
msgstr "প্ৰমাণপত্ৰ প্ৰদান কৰা হোৱা নাই" msgstr "প্ৰমাণপত্ৰ প্ৰদান কৰা হোৱা নাই"
#: ../js/ui/components/telepathyClient.js:1345 #: ../js/ui/components/telepathyClient.js:1349
msgid "Certificate untrusted" msgid "Certificate untrusted"
msgstr "প্ৰমাণপত্ৰক ভৰষা কৰিব নোৱাৰি" msgstr "প্ৰমাণপত্ৰক ভৰষা কৰিব নোৱাৰি"
#: ../js/ui/components/telepathyClient.js:1347 #: ../js/ui/components/telepathyClient.js:1351
msgid "Certificate expired" msgid "Certificate expired"
msgstr "প্ৰমাণপত্ৰৰ অৱসান ঘটিছে" msgstr "প্ৰমাণপত্ৰৰ অৱসান ঘটিছে"
#: ../js/ui/components/telepathyClient.js:1349 #: ../js/ui/components/telepathyClient.js:1353
msgid "Certificate not activated" msgid "Certificate not activated"
msgstr "প্ৰমাণপত্ৰ সক্ৰিয় কৰা হোৱা নাই" msgstr "প্ৰমাণপত্ৰ সক্ৰিয় কৰা হোৱা নাই"
#: ../js/ui/components/telepathyClient.js:1351 #: ../js/ui/components/telepathyClient.js:1355
msgid "Certificate hostname mismatch" msgid "Certificate hostname mismatch"
msgstr "প্ৰমাণপত্ৰ হস্টনাম অমিল" msgstr "প্ৰমাণপত্ৰ হস্টনাম অমিল"
#: ../js/ui/components/telepathyClient.js:1353 #: ../js/ui/components/telepathyClient.js:1357
msgid "Certificate fingerprint mismatch" msgid "Certificate fingerprint mismatch"
msgstr "প্ৰমাণপত্ৰ ফিংগাৰপ্ৰি্ট অমিল" msgstr "প্ৰমাণপত্ৰ ফিংগাৰপ্ৰি্ট অমিল"
#: ../js/ui/components/telepathyClient.js:1355 #: ../js/ui/components/telepathyClient.js:1359
msgid "Certificate self-signed" msgid "Certificate self-signed"
msgstr "প্ৰমাণপত্ৰ স্ব-স্বাক্ষৰীত" msgstr "প্ৰমাণপত্ৰ স্ব-স্বাক্ষৰীত"
#: ../js/ui/components/telepathyClient.js:1357 #: ../js/ui/components/telepathyClient.js:1361
msgid "Status is set to offline" msgid "Status is set to offline"
msgstr "অৱস্থা অফলাইনলে সংহতি কৰা হৈছে" msgstr "অৱস্থা অফলাইনলে সংহতি কৰা হৈছে"
#: ../js/ui/components/telepathyClient.js:1359 #: ../js/ui/components/telepathyClient.js:1363
msgid "Encryption is not available" msgid "Encryption is not available"
msgstr "ইনক্ৰিপষণ উপলব্ধ নহয়" msgstr "ইনক্ৰিপষণ উপলব্ধ নহয়"
#: ../js/ui/components/telepathyClient.js:1361 #: ../js/ui/components/telepathyClient.js:1365
msgid "Certificate is invalid" msgid "Certificate is invalid"
msgstr "প্ৰমাণপত্ৰ অবৈধ" msgstr "প্ৰমাণপত্ৰ অবৈধ"
#: ../js/ui/components/telepathyClient.js:1363 #: ../js/ui/components/telepathyClient.js:1367
msgid "Connection has been refused" msgid "Connection has been refused"
msgstr "সংযোগ নাকচ কৰা হৈছে" msgstr "সংযোগ নাকচ কৰা হৈছে"
#: ../js/ui/components/telepathyClient.js:1365 #: ../js/ui/components/telepathyClient.js:1369
msgid "Connection can't be established" msgid "Connection can't be established"
msgstr "সংযোগ স্থাপন কৰিব নোৱাৰি" msgstr "সংযোগ স্থাপন কৰিব নোৱাৰি"
#: ../js/ui/components/telepathyClient.js:1367 #: ../js/ui/components/telepathyClient.js:1371
msgid "Connection has been lost" msgid "Connection has been lost"
msgstr "সংযোগ হেৰাইছে" msgstr "সংযোগ হেৰাইছে"
#: ../js/ui/components/telepathyClient.js:1369 #: ../js/ui/components/telepathyClient.js:1373
msgid "This account is already connected to the server" msgid "This account is already connected to the server"
msgstr "এই একাও্ট ইতিমধ্যে চাৰ্ভাৰৰ সৈতে সংযোগিত" msgstr "এই একাও্ট ইতিমধ্যে চাৰ্ভাৰৰ সৈতে সংযোগিত"
#: ../js/ui/components/telepathyClient.js:1371 #: ../js/ui/components/telepathyClient.js:1375
msgid "" msgid ""
"Connection has been replaced by a new connection using the same resource" "Connection has been replaced by a new connection using the same resource"
msgstr "সংযোগক একে সম্পদ ব্যৱহাৰ কৰি এটা নতুন সংযোগৰে প্ৰতিস্থাপন কৰা হৈছে" msgstr "সংযোগক একে সম্পদ ব্যৱহাৰ কৰি এটা নতুন সংযোগৰে প্ৰতিস্থাপন কৰা হৈছে"
#: ../js/ui/components/telepathyClient.js:1373 #: ../js/ui/components/telepathyClient.js:1377
msgid "The account already exists on the server" 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" msgid "Server is currently too busy to handle the connection"
msgstr "চাৰ্ভাৰ সংযোগ ব্যৱস্থাপনা কৰিবলে বৰ্তমানে অতি ব্যস্ত" msgstr "চাৰ্ভাৰ সংযোগ ব্যৱস্থাপনা কৰিবলে বৰ্তমানে অতি ব্যস্ত"
#: ../js/ui/components/telepathyClient.js:1377 #: ../js/ui/components/telepathyClient.js:1381
msgid "Certificate has been revoked" msgid "Certificate has been revoked"
msgstr "প্ৰমাণপত্ৰ প্ৰত্যাহাৰ কৰা হৈছে" msgstr "প্ৰমাণপত্ৰ প্ৰত্যাহাৰ কৰা হৈছে"
#: ../js/ui/components/telepathyClient.js:1379 #: ../js/ui/components/telepathyClient.js:1383
msgid "" msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak" "Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr "" msgstr ""
"প্ৰমাণপত্ৰয় এটা অসুৰক্ষিত চিফাৰ এলগৰিথম ব্যৱহাৰ কৰে অথবা ক্ৰিপ্টোগ্ৰাফিয়ভাৱে " "প্ৰমাণপত্ৰয় এটা অসুৰক্ষিত চিফাৰ এলগৰিথম ব্যৱহাৰ কৰে অথবা ক্ৰিপ্টোগ্ৰাফিয়ভাৱে "
"দুৰ্বল" "দুৰ্বল"
#: ../js/ui/components/telepathyClient.js:1381 #: ../js/ui/components/telepathyClient.js:1385
msgid "" msgid ""
"The length of the server certificate, or the depth of the server certificate " "The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library" "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" msgid "Internal error"
msgstr "অভ্যন্তৰীক ত্ৰুটি" msgstr "অভ্যন্তৰীক ত্ৰুটি"
#. translators: argument is the account name, like #. translators: argument is the account name, like
#. * name@jabber.org for example. */ #. * name@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1393 #: ../js/ui/components/telepathyClient.js:1397
#, javascript-format #, javascript-format
msgid "Unable to connect to %s" msgid "Unable to connect to %s"
msgstr "%s ৰ সৈতে সংযোগ কৰিবলে অক্ষম" msgstr "%s ৰ সৈতে সংযোগ কৰিবলে অক্ষম"
#: ../js/ui/components/telepathyClient.js:1398 #: ../js/ui/components/telepathyClient.js:1402
msgid "View account" msgid "View account"
msgstr "একাও্ট দৰ্শন কৰক" msgstr "একাও্ট দৰ্শন কৰক"
#: ../js/ui/components/telepathyClient.js:1435 #: ../js/ui/components/telepathyClient.js:1439
msgid "Unknown reason" msgid "Unknown reason"
msgstr "অজ্ঞাত কাৰণ" msgstr "অজ্ঞাত কাৰণ"
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:154 #: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:228
msgid "Windows" msgid "Windows"
msgstr "উইন্ডোসমূহ" msgstr "উইন্ডোসমূহ"
@@ -1016,86 +1028,86 @@ msgstr "তাৰিখ আৰু সময সংহতিসমূহ"
msgid "%A %B %e, %Y" msgid "%A %B %e, %Y"
msgstr "%A %B %e, %Y" msgstr "%A %B %e, %Y"
#: ../js/ui/endSessionDialog.js:64 #: ../js/ui/endSessionDialog.js:66
#, javascript-format #, javascript-format
msgctxt "title" msgctxt "title"
msgid "Log Out %s" msgid "Log Out %s"
msgstr "%s ক লগ আউট কৰক" msgstr "%s ক লগ আউট কৰক"
#: ../js/ui/endSessionDialog.js:65 #: ../js/ui/endSessionDialog.js:67
msgctxt "title" msgctxt "title"
msgid "Log Out" msgid "Log Out"
msgstr "লগ আউট কৰক" msgstr "লগ আউট কৰক"
#: ../js/ui/endSessionDialog.js:67 #: ../js/ui/endSessionDialog.js:69
#, javascript-format #, javascript-format
msgid "%s will be logged out automatically in %d second." msgid "%s will be logged out automatically in %d second."
msgid_plural "%s will be logged out automatically in %d seconds." msgid_plural "%s will be logged out automatically in %d seconds."
msgstr[0] "%s স্বচালিতভাৱে %d ছেকেণ্ডৰ পিছত লগ আউট হৈ যাব।" msgstr[0] "%s স্বচালিতভাৱে %d ছেকেণ্ডৰ পিছত লগ আউট হৈ যাব।"
msgstr[1] "%s স্বচালিতভাৱে %d ছেকেণ্ডৰ পিছত লগ আউট হৈ যাব।" msgstr[1] "%s স্বচালিতভাৱে %d ছেকেণ্ডৰ পিছত লগ আউট হৈ যাব।"
#: ../js/ui/endSessionDialog.js:72 #: ../js/ui/endSessionDialog.js:74
#, javascript-format #, javascript-format
msgid "You will be logged out automatically in %d second." msgid "You will be logged out automatically in %d second."
msgid_plural "You will be logged out automatically in %d seconds." msgid_plural "You will be logged out automatically in %d seconds."
msgstr[0] "আপুনি স্বচালিতভাৱে %d ছেকেণ্ড পিছত লগ আউট হৈ যাব।" msgstr[0] "আপুনি স্বচালিতভাৱে %d ছেকেণ্ড পিছত লগ আউট হৈ যাব।"
msgstr[1] "আপুনি স্বচালিতভাৱে %d ছেকেণ্ড পিছত লগ আউট হৈ যাব।" msgstr[1] "আপুনি স্বচালিতভাৱে %d ছেকেণ্ড পিছত লগ আউট হৈ যাব।"
#: ../js/ui/endSessionDialog.js:78 #: ../js/ui/endSessionDialog.js:80
msgctxt "button" msgctxt "button"
msgid "Log Out" msgid "Log Out"
msgstr "লগ আউট কৰক" msgstr "লগ আউট কৰক"
#: ../js/ui/endSessionDialog.js:84 #: ../js/ui/endSessionDialog.js:86
msgctxt "title" msgctxt "title"
msgid "Power Off" msgid "Power Off"
msgstr "বন্ধ কৰক" msgstr "বন্ধ কৰক"
#: ../js/ui/endSessionDialog.js:85 #: ../js/ui/endSessionDialog.js:87
msgctxt "title" msgctxt "title"
msgid "Install Updates & Power Off" msgid "Install Updates & Power Off"
msgstr "আপডেইটসমূহ ইনস্টল কৰি চিস্টেম বন্ধ কৰক" msgstr "আপডেইটসমূহ ইনস্টল কৰি চিস্টেম বন্ধ কৰক"
#: ../js/ui/endSessionDialog.js:87 #: ../js/ui/endSessionDialog.js:89
#, javascript-format #, javascript-format
msgid "The system will power off automatically in %d second." msgid "The system will power off automatically in %d second."
msgid_plural "The system will power off automatically in %d seconds." msgid_plural "The system will power off automatically in %d seconds."
msgstr[0] "চিস্টেম %d ছেকেণ্ড পিছত স্বচালিতভাৱে বন্ধ কৰক হব। " msgstr[0] "চিস্টেম %d ছেকেণ্ড পিছত স্বচালিতভাৱে বন্ধ কৰক হব। "
msgstr[1] "চিস্টেম %d ছেকেণ্ডৰ পিছত স্বচালিতভাৱে বন্ধ হব। " msgstr[1] "চিস্টেম %d ছেকেণ্ডৰ পিছত স্বচালিতভাৱে বন্ধ হব। "
#: ../js/ui/endSessionDialog.js:91 #: ../js/ui/endSessionDialog.js:93
msgctxt "checkbox" msgctxt "checkbox"
msgid "Install pending software updates" 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" msgctxt "button"
msgid "Restart" msgid "Restart"
msgstr "পুনৰাম্ভ কৰক" msgstr "পুনৰাম্ভ কৰক"
#: ../js/ui/endSessionDialog.js:96 #: ../js/ui/endSessionDialog.js:98
msgctxt "button" msgctxt "button"
msgid "Power Off" msgid "Power Off"
msgstr "বন্ধ কৰক" msgstr "বন্ধ কৰক"
#: ../js/ui/endSessionDialog.js:103 #: ../js/ui/endSessionDialog.js:105
msgctxt "title" msgctxt "title"
msgid "Restart" msgid "Restart"
msgstr "পুনৰাম্ভ কৰক" msgstr "পুনৰাম্ভ কৰক"
#: ../js/ui/endSessionDialog.js:105 #: ../js/ui/endSessionDialog.js:107
#, javascript-format #, javascript-format
msgid "The system will restart automatically in %d second." msgid "The system will restart automatically in %d second."
msgid_plural "The system will restart automatically in %d seconds." msgid_plural "The system will restart automatically in %d seconds."
msgstr[0] "চিস্টেম %d ছেকেণ্ডত স্বচালিতভাৱে পুনৰাম্ভ হব।" msgstr[0] "চিস্টেম %d ছেকেণ্ডত স্বচালিতভাৱে পুনৰাম্ভ হব।"
msgstr[1] "চিস্টেম %d ছেকেণ্ডত স্বচালিতভাৱে পুনৰাম্ভ হব।" msgstr[1] "চিস্টেম %d ছেকেণ্ডত স্বচালিতভাৱে পুনৰাম্ভ হব।"
#: ../js/ui/endSessionDialog.js:119 #: ../js/ui/endSessionDialog.js:121
msgctxt "title" msgctxt "title"
msgid "Restart & Install Updates" msgid "Restart & Install Updates"
msgstr "পুনাৰম্ভ কৰক আৰু আপডেইটসমূহ ইনস্টল কৰক" msgstr "পুনাৰম্ভ কৰক আৰু আপডেইটসমূহ ইনস্টল কৰক"
#: ../js/ui/endSessionDialog.js:121 #: ../js/ui/endSessionDialog.js:123
#, javascript-format #, javascript-format
msgid "The system will automatically restart and install updates in %d second." msgid "The system will automatically restart and install updates in %d second."
msgid_plural "" msgid_plural ""
@@ -1105,44 +1117,46 @@ msgstr[0] ""
msgstr[1] "" msgstr[1] ""
"চিস্টেম %d ছেকেণ্ডত স্বচালিতভাৱে পুনৰাম্ভ হব আৰু আপডেইটসমূহ ইনস্টল কৰিব।" "চিস্টেম %d ছেকেণ্ডত স্বচালিতভাৱে পুনৰাম্ভ হব আৰু আপডেইটসমূহ ইনস্টল কৰিব।"
#: ../js/ui/endSessionDialog.js:127 #: ../js/ui/endSessionDialog.js:129
#| msgctxt "button"
#| msgid "Restart & Install"
msgctxt "button" msgctxt "button"
msgid "Restart &amp; Install" msgid "Restart &amp; Install"
msgstr "পুনৰাম্ভ কৰক &amp; ইনস্টল কৰক" msgstr "পুনৰাম্ভ কৰক &amp; ইনস্টল কৰক"
#: ../js/ui/endSessionDialog.js:128 #: ../js/ui/endSessionDialog.js:130
msgctxt "button" msgctxt "button"
msgid "Install &amp; Power Off" msgid "Install &amp; Power Off"
msgstr "ইনস্টল কৰক &amp; চিস্টেম বন্ধ কৰক" msgstr "ইনস্টল কৰক &amp; চিস্টেম বন্ধ কৰক"
#: ../js/ui/endSessionDialog.js:129 #: ../js/ui/endSessionDialog.js:131
msgctxt "checkbox" msgctxt "checkbox"
msgid "Power off after updates are installed" 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." 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." 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." msgid "Other users are logged in."
msgstr "অন্য ব্যৱহাৰকাৰীসকল লগ্ড ইন আছে।" msgstr "অন্য ব্যৱহাৰকাৰীসকল লগ্ড ইন আছে।"
#. Translators: Remote here refers to a remote session, like a ssh login */ #. Translators: Remote here refers to a remote session, like a ssh login */
#: ../js/ui/endSessionDialog.js:640 #: ../js/ui/endSessionDialog.js:619
#, javascript-format #, javascript-format
msgid "%s (remote)" msgid "%s (remote)"
msgstr "%s (দূৰৱৰ্তী)" msgstr "%s (দূৰৱৰ্তী)"
#. Translators: Console here refers to a tty like a VT console */ #. Translators: Console here refers to a tty like a VT console */
#: ../js/ui/endSessionDialog.js:643 #: ../js/ui/endSessionDialog.js:622
#, javascript-format #, javascript-format
msgid "%s (console)" msgid "%s (console)"
msgstr "%s (কনচৌল)" msgstr "%s (কনচৌল)"
@@ -1156,7 +1170,7 @@ msgstr "ইনস্টল কৰক"
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:692 ../js/ui/status/keyboard.js:523 #: ../js/ui/keyboard.js:653 ../js/ui/status/keyboard.js:339
msgid "Keyboard" msgid "Keyboard"
msgstr "কিবৰ্ড" msgstr "কিবৰ্ড"
@@ -1178,8 +1192,8 @@ msgstr "ত্ৰুটিসমূহ লুকুৱাওক"
msgid "Show Errors" msgid "Show Errors"
msgstr "ত্ৰুটিসমূহ দেখুৱাওক" msgstr "ত্ৰুটিসমূহ দেখুৱাওক"
#: ../js/ui/lookingGlass.js:716 ../js/ui/status/location.js:71 #: ../js/ui/lookingGlass.js:716 ../js/ui/status/location.js:62
#: ../js/ui/status/location.js:176 #: ../js/ui/status/location.js:164
msgid "Enabled" msgid "Enabled"
msgstr "সামৰ্থবান কৰা আছে" msgstr "সামৰ্থবান কৰা আছে"
@@ -1187,7 +1201,7 @@ msgstr "সামৰ্থবান কৰা আছে"
#. because it's disabled by rfkill (airplane mode) */ #. because it's disabled by rfkill (airplane mode) */
#. translators: #. translators:
#. * The device has been disabled #. * 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 #: ../js/ui/status/network.js:592 ../src/gvc/gvc-mixer-control.c:1830
msgid "Disabled" msgid "Disabled"
msgstr "অসামৰ্থবান কৰা আছে" msgstr "অসামৰ্থবান কৰা আছে"
@@ -1212,39 +1226,39 @@ msgstr "উৎস দৰ্শন কৰক"
msgid "Web Page" msgid "Web Page"
msgstr "ৱেব পৃষ্ঠা" msgstr "ৱেব পৃষ্ঠা"
#: ../js/ui/messageTray.js:1326 #: ../js/ui/messageTray.js:1325
msgid "Open" msgid "Open"
msgstr "খোলক" msgstr "খোলক"
#: ../js/ui/messageTray.js:1333 #: ../js/ui/messageTray.js:1332
msgid "Remove" msgid "Remove"
msgstr "আতৰাওক" msgstr "আতৰাওক"
#: ../js/ui/messageTray.js:1630 #: ../js/ui/messageTray.js:1629
msgid "Notifications" msgid "Notifications"
msgstr "অধিসূচনাসমূহ" msgstr "অধিসূচনাসমূহ"
#: ../js/ui/messageTray.js:1637 #: ../js/ui/messageTray.js:1636
msgid "Clear Messages" msgid "Clear Messages"
msgstr "বাৰ্তাসমূহ পৰিষ্কাৰ কৰক" msgstr "বাৰ্তাসমূহ পৰিষ্কাৰ কৰক"
#: ../js/ui/messageTray.js:1656 #: ../js/ui/messageTray.js:1655
msgid "Notification Settings" msgid "Notification Settings"
msgstr "অধিসূচনা সংহতিসমূহ" msgstr "অধিসূচনা সংহতিসমূহ"
#: ../js/ui/messageTray.js:1709 #: ../js/ui/messageTray.js:1708
msgid "Tray Menu" msgid "Tray Menu"
msgstr "ট্ৰে মেনু" msgstr "ট্ৰে মেনু"
#: ../js/ui/messageTray.js:1926 #: ../js/ui/messageTray.js:1925
msgid "No Messages" msgid "No Messages"
msgstr "কোনো বাৰ্তা নাই" msgstr "কোনো বাৰ্তা নাই"
#: ../js/ui/messageTray.js:1968 #: ../js/ui/messageTray.js:1963
msgid "Message Tray" msgid "Message Tray"
msgstr "বাৰ্তা ট্ৰে" msgstr "বাৰ্তা ট্ৰে"
#: ../js/ui/messageTray.js:2971 #: ../js/ui/messageTray.js:2966
msgid "System Information" msgid "System Information"
msgstr "চিস্টেম তথ্য" msgstr "চিস্টেম তথ্য"
@@ -1272,7 +1286,7 @@ msgstr "অভাৰভিউ"
#. in the search entry when no search is #. in the search entry when no search is
#. active; it should not exceed ~30 #. active; it should not exceed ~30
#. characters. */ #. characters. */
#: ../js/ui/overview.js:246 #: ../js/ui/overview.js:250
msgid "Type to search…" msgid "Type to search…"
msgstr "সন্ধান কৰিবলে টাইপ কৰক…" msgstr "সন্ধান কৰিবলে টাইপ কৰক…"
@@ -1290,7 +1304,7 @@ msgstr "কাৰ্য্যসমূহ"
msgid "Top Bar" msgid "Top Bar"
msgstr "উপৰৰ বাৰ" msgstr "উপৰৰ বাৰ"
#: ../js/ui/popupMenu.js:269 #: ../js/ui/popupMenu.js:280
msgid "toggle-switch-us" msgid "toggle-switch-us"
msgstr "toggle-switch-us" msgstr "toggle-switch-us"
@@ -1302,7 +1316,8 @@ msgstr "এটা কমান্ড সুমুৱাওক"
msgid "Close" msgid "Close"
msgstr "বন্ধ কৰক" msgstr "বন্ধ কৰক"
#: ../js/ui/runDialog.js:277 #: ../js/ui/runDialog.js:273
#| msgid "Estimating…"
msgid "Restarting…" msgid "Restarting…"
msgstr "পুনাৰম্ভ কৰা হৈছে…" msgstr "পুনাৰম্ভ কৰা হৈছে…"
@@ -1319,43 +1334,43 @@ msgid_plural "%d new notifications"
msgstr[0] "%d নতুন অধিসূচনা" msgstr[0] "%d নতুন অধিসূচনা"
msgstr[1] "%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" msgid "Lock"
msgstr "লক কৰক" msgstr "লক কৰক"
#: ../js/ui/screenShield.js:706 #: ../js/ui/screenShield.js:708
msgid "GNOME needs to lock the screen" msgid "GNOME needs to lock the screen"
msgstr "GNOME এ পৰ্দা লক কৰিব লাগিব" 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" msgid "Unable to lock"
msgstr "লক কৰিবলে অক্ষম" 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" msgid "Lock was blocked by an application"
msgstr "লক কাৰ্য্য এটা এপ্লিকেচন দ্বাৰা প্ৰতিৰোধ কৰা হৈছিল" msgstr "লক কাৰ্য্য এটা এপ্লিকেচন দ্বাৰা প্ৰতিৰোধ কৰা হৈছিল"
#: ../js/ui/search.js:594 #: ../js/ui/search.js:614
msgid "Searching…" msgid "Searching…"
msgstr "সন্ধান কৰা হৈছে…" msgstr "সন্ধান কৰা হৈছে…"
#: ../js/ui/search.js:596 #: ../js/ui/search.js:660
msgid "No results." msgid "No results."
msgstr "কোনো ফলাফল নাই।" msgstr "কোনো ফলাফল নাই।"
#: ../js/ui/shellEntry.js:25 #: ../js/ui/shellEntry.js:27
msgid "Copy" msgid "Copy"
msgstr "কপি কৰক" msgstr "কপি কৰক"
#: ../js/ui/shellEntry.js:30 #: ../js/ui/shellEntry.js:32
msgid "Paste" msgid "Paste"
msgstr "পেইস্ট কৰক" msgstr "পেইস্ট কৰক"
#: ../js/ui/shellEntry.js:97 #: ../js/ui/shellEntry.js:99
msgid "Show Text" msgid "Show Text"
msgstr "লিখনি দেখুৱাওক" msgstr "লিখনি দেখুৱাওক"
#: ../js/ui/shellEntry.js:99 #: ../js/ui/shellEntry.js:101
msgid "Hide Text" msgid "Hide Text"
msgstr "লিখনি লুকুৱাওক" msgstr "লিখনি লুকুৱাওক"
@@ -1441,28 +1456,26 @@ msgstr "সংযুক্ত নহয়"
msgid "Brightness" msgid "Brightness"
msgstr "উজ্জ্বলতা" msgstr "উজ্জ্বলতা"
#: ../js/ui/status/keyboard.js:547 #: ../js/ui/status/keyboard.js:407
msgid "Show Keyboard Layout" msgid "Show Keyboard Layout"
msgstr "কিবৰ্ড বিন্যাস দেখুৱাওক" msgstr "কিবৰ্ড বিন্যাস দেখুৱাওক"
#: ../js/ui/status/location.js:65 #: ../js/ui/status/location.js:56
#| msgid "Notifications"
msgid "Location" msgid "Location"
msgstr "অবস্থান" 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" msgid "Disable"
msgstr "অসামৰ্থবান কৰক" msgstr "অসামৰ্থবান কৰক"
#: ../js/ui/status/location.js:73 #: ../js/ui/status/location.js:164
#| msgid "Power Settings"
msgid "Privacy Settings"
msgstr "গোপনীয়তা সংহতিসমূহ"
#: ../js/ui/status/location.js:176
msgid "In Use" msgid "In Use"
msgstr "ব্যৱহৃত" msgstr "ব্যৱহৃত"
#: ../js/ui/status/location.js:180 #: ../js/ui/status/location.js:168
#| msgid "Enabled"
msgid "Enable" msgid "Enable"
msgstr "সামৰ্থবান কৰক" msgstr "সামৰ্থবান কৰক"
@@ -1476,31 +1489,37 @@ msgid "Off"
msgstr "অফ" msgstr "অফ"
#: ../js/ui/status/network.js:459 #: ../js/ui/status/network.js:459
#| msgid "Connect"
msgid "Connected" msgid "Connected"
msgstr "সংযুক্ত" msgstr "সংযুক্ত"
#. Translators: this is for network devices that are physically present but are not #. 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 #: ../js/ui/status/network.js:463
#| msgid "unmanaged"
msgid "Unmanaged" msgid "Unmanaged"
msgstr "অব্যৱস্থাপিত" msgstr "অব্যৱস্থাপিত"
#: ../js/ui/status/network.js:465 #: ../js/ui/status/network.js:465
#| msgid "disconnecting..."
msgid "Disconnecting" msgid "Disconnecting"
msgstr "বিচ্ছিনিত কৰা হৈছে" msgstr "বিচ্ছিনিত কৰা হৈছে"
#: ../js/ui/status/network.js:471 ../js/ui/status/network.js:1301 #: ../js/ui/status/network.js:471 ../js/ui/status/network.js:1301
#| msgid "Connection"
msgid "Connecting" msgid "Connecting"
msgstr "সংযোগ কৰা হৈছে" msgstr "সংযোগ কৰা হৈছে"
#. Translators: this is for network connections that require some kind of key or password */ #. Translators: this is for network connections that require some kind of key or password */
#: ../js/ui/status/network.js:474 #: ../js/ui/status/network.js:474
#| msgid "authentication required"
msgid "Authentication required" msgid "Authentication required"
msgstr "প্ৰমাণীকৰণৰ প্ৰয়োজন" msgstr "প্ৰমাণীকৰণৰ প্ৰয়োজন"
#. Translators: this is for devices that require some kind of firmware or kernel #. 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 #: ../js/ui/status/network.js:482
#| msgid "firmware missing"
msgid "Firmware missing" msgid "Firmware missing"
msgstr "ফাৰ্মৱেৰ সন্ধানহীন" msgstr "ফাৰ্মৱেৰ সন্ধানহীন"
@@ -1604,6 +1623,7 @@ msgid "Network Settings"
msgstr "নেটৱৰ্ক সংহতিসমূহ" msgstr "নেটৱৰ্ক সংহতিসমূহ"
#: ../js/ui/status/network.js:1482 #: ../js/ui/status/network.js:1482
#| msgid "Settings"
msgid "VPN Settings" msgid "VPN Settings"
msgstr "VPN সংহতিসমূহ" msgstr "VPN সংহতিসমূহ"
@@ -1697,11 +1717,11 @@ msgstr "অন্য ব্যৱহাৰকাৰী হিচাপে লগ
msgid "Unlock Window" msgid "Unlock Window"
msgstr "উইন্ডো আনলক কৰক" msgstr "উইন্ডো আনলক কৰক"
#: ../js/ui/viewSelector.js:158 #: ../js/ui/viewSelector.js:232
msgid "Applications" msgid "Applications"
msgstr "এপ্লিকেচনসমূহ" msgstr "এপ্লিকেচনসমূহ"
#: ../js/ui/viewSelector.js:162 #: ../js/ui/viewSelector.js:236
msgid "Search" msgid "Search"
msgstr "সন্ধান কৰক" msgstr "সন্ধান কৰক"
@@ -1798,19 +1818,19 @@ msgstr[1] "%u ইনপুটসমূহ"
msgid "System Sounds" msgid "System Sounds"
msgstr "চিস্টেম শব্দসমূহ" msgstr "চিস্টেম শব্দসমূহ"
#: ../src/main.c:373 #: ../src/main.c:371
msgid "Print version" msgid "Print version"
msgstr "প্ৰি্ট সংস্কৰণ" msgstr "প্ৰি্ট সংস্কৰণ"
#: ../src/main.c:379 #: ../src/main.c:377
msgid "Mode used by GDM for login screen" msgid "Mode used by GDM for login screen"
msgstr "লগিন স্ক্ৰিনৰ বাবে GDM দ্বাৰা ব্যৱহাৰ কৰা অৱস্থা" msgstr "লগিন স্ক্ৰিনৰ বাবে GDM দ্বাৰা ব্যৱহাৰ কৰা অৱস্থা"
#: ../src/main.c:385 #: ../src/main.c:383
msgid "Use a specific mode, e.g. \"gdm\" for login screen" msgid "Use a specific mode, e.g. \"gdm\" for login screen"
msgstr "লগিন পৰ্দাৰ বাবে এটা বিশেষ অৱস্থা, উদাহৰণস্বৰূপ \"gdm\" ব্যৱহাৰ কৰক" msgstr "লগিন পৰ্দাৰ বাবে এটা বিশেষ অৱস্থা, উদাহৰণস্বৰূপ \"gdm\" ব্যৱহাৰ কৰক"
#: ../src/main.c:391 #: ../src/main.c:389
msgid "List possible modes" msgid "List possible modes"
msgstr "সম্ভাব্য অৱস্থাসমূহ তালিকাভুক্ত কৰক" msgstr "সম্ভাব্য অৱস্থাসমূহ তালিকাভুক্ত কৰক"
@@ -2014,7 +2034,7 @@ msgstr "প্ৰমাণীকৰণ ডাইলগ ব্যৱহাৰক
#~ "সংহিত, অবিকল্পিত পাইপলাইন ব্যৱহাৰ কৰা হব। এইটো বৰ্তমানত 'vp8enc " #~ "সংহিত, অবিকল্পিত পাইপলাইন ব্যৱহাৰ কৰা হব। এইটো বৰ্তমানত 'vp8enc "
#~ "min_quantizer=13 max_quantizer=13 cpu-used=5 deadline=1000000 threads=" #~ "min_quantizer=13 max_quantizer=13 cpu-used=5 deadline=1000000 threads="
#~ "%T ! queue ! webmmux' আৰু VP8 কডেক ব্যৱহাৰ কৰি WEBM ত ৰেকৰ্ড কৰে। %T ক " #~ "%T ! queue ! webmmux' আৰু VP8 কডেক ব্যৱহাৰ কৰি WEBM ত ৰেকৰ্ড কৰে। %T ক "
#~ "চিস্টেমত অনুকূলিত থ্ৰেড কাও্টত এটা অনুমানৰ প্লেইচহল্ডাৰ হিচাপে ব্যৱহাৰ কৰা হয়।" #~ "চিস্টেমত অনুকূলিত থ্ৰেড কাও্টত এটা অনুমানৰ প্লেইচহল্ডাৰ হিচাপে ব্যৱহাৰ কৰা হয়।"
#~ msgid "File extension used for storing the screencast" #~ msgid "File extension used for storing the screencast"
#~ msgstr "screencast সংৰক্ষণ কৰাৰ কাৰণে লথিপত্ৰ সম্প্ৰসাৰন" #~ msgstr "screencast সংৰক্ষণ কৰাৰ কাৰণে লথিপত্ৰ সম্প্ৰসাৰন"
@@ -2297,7 +2317,7 @@ msgstr "প্ৰমাণীকৰণ ডাইলগ ব্যৱহাৰক
#~ msgstr "চিস্টেম সংহতিসমূহ" #~ msgstr "চিস্টেম সংহতিসমূহ"
#~ msgid "Failed to unmount '%s'" #~ msgid "Failed to unmount '%s'"
#~ msgstr "'%s' আনমাউ্ট কৰিবলে ব্যৰ্থ" #~ msgstr "'%s' আনমাউ্ট কৰিবলে ব্যৰ্থ"
#~ msgid "Retry" #~ msgid "Retry"
#~ msgstr "পুনৰ চেষ্টা কৰক" #~ msgstr "পুনৰ চেষ্টা কৰক"
@@ -2375,7 +2395,7 @@ msgstr "প্ৰমাণীকৰণ ডাইলগ ব্যৱহাৰক
#~ msgstr "বন্ধ কৰক" #~ msgstr "বন্ধ কৰক"
#~ msgid "Online Accounts" #~ msgid "Online Accounts"
#~ msgstr "অনলাইন একাও্টসমূহ" #~ msgstr "অনলাইন একাও্টসমূহ"
#~ msgid "Lock Screen" #~ msgid "Lock Screen"
#~ msgstr "পৰ্দা লক কৰক" #~ msgstr "পৰ্দা লক কৰক"

1765
po/bg.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

928
po/ca.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

707
po/cs.po

File diff suppressed because it is too large Load Diff

1198
po/da.po

File diff suppressed because it is too large Load Diff

708
po/de.po

File diff suppressed because it is too large Load Diff

410
po/el.po

File diff suppressed because it is too large Load Diff

583
po/es.po

File diff suppressed because it is too large Load Diff

587
po/eu.po

File diff suppressed because it is too large Load Diff

207
po/fa.po
View File

@@ -9,8 +9,8 @@ msgstr ""
"Project-Id-Version: gnome-shell master\n" "Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n" "shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2014-10-06 19:42+0000\n" "POT-Creation-Date: 2014-08-28 07:38+0000\n"
"PO-Revision-Date: 2014-10-10 10:51+0330\n" "PO-Revision-Date: 2014-08-28 20:57+0430\n"
"Last-Translator: Arash Mousavi <mousavi.arash@gmail.com>\n" "Last-Translator: Arash Mousavi <mousavi.arash@gmail.com>\n"
"Language-Team: Persian <>\n" "Language-Team: Persian <>\n"
"Language: fa\n" "Language: fa\n"
@@ -19,7 +19,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n!=1);\n" "Plural-Forms: nplurals=2; plural=(n!=1);\n"
"X-Poedit-SourceCharset: utf-8\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 #: ../data/50-gnome-shell-system.xml.in.h:1
msgid "System" msgid "System"
@@ -81,10 +81,16 @@ msgstr ""
"F2." "F2."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:3 #: ../data/org.gnome.shell.gschema.xml.in.in.h:3
#| msgid "Uuids of extensions to enable"
msgid "UUIDs of extensions to enable" msgid "UUIDs of extensions to enable"
msgstr "شناسه‌های UUID افزونه‌ها جهت فعال‌سازی" msgstr "شناسه‌های UUID افزونه‌ها جهت فعال‌سازی"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:4 #: ../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 "" msgid ""
"GNOME Shell extensions have a UUID property; this key lists extensions which " "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 " "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 "تاریخچه برای نما محاوره شیشه‌ای" msgstr "تاریخچه برای نما محاوره شیشه‌ای"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13 #: ../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." msgid "Always show the 'Log out' menu item in the user menu."
msgstr "همیشه «خروج از سیستم» را در منو کاربر نمایش بده." msgstr "همیشه «خروج از سیستم» را در منو کاربر نمایش بده."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14 #: ../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 "" msgid ""
"This key overrides the automatic hiding of the 'Log out' menu item in single-" "This key overrides the automatic hiding of the 'Log out' menu item in single-"
"user, single-session situations." "user, single-session situations."
@@ -297,17 +307,18 @@ msgstr ""
msgid "Captive Portal" msgid "Captive Portal"
msgstr "پرتال درگیر" msgstr "پرتال درگیر"
#: ../js/extensionPrefs/main.js:123 #: ../js/extensionPrefs/main.js:127
#, javascript-format #, javascript-format
msgid "There was an error loading the preferences dialog for %s:" msgid "There was an error loading the preferences dialog for %s:"
msgstr "خطایی هنگام باز کردن محاوره‌ی ترجیحات برای %s رُخ داد:" msgstr "خطایی هنگام باز کردن محاوره‌ی ترجیحات برای %s رُخ داد:"
#: ../js/extensionPrefs/main.js:155 #: ../js/extensionPrefs/main.js:159
#| msgid "Configure GNOME Shell Extensions"
msgid "GNOME Shell Extensions" msgid "GNOME Shell Extensions"
msgstr "افزونه‌های گنوم‌شل" msgstr "افزونه‌های گنوم‌شل"
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:143 #: ../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/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/network.js:915 #: ../js/ui/status/network.js:915
msgid "Cancel" msgid "Cancel"
@@ -367,47 +378,50 @@ msgstr "عدم توانایی در تجزیه فرمان:"
#: ../js/misc/util.js:156 #: ../js/misc/util.js:156
#, javascript-format #, javascript-format
#| msgid "Execution of '%s' failed:"
msgid "Execution of “%s” failed:" msgid "Execution of “%s” failed:"
msgstr "اجرای «%s» شکست خورد:" msgstr "اجرای «%s» شکست خورد:"
#: ../js/portalHelper/main.js:85 #: ../js/portalHelper/main.js:85
#| msgid "Authentication Required"
msgid "Web Authentication Redirect" msgid "Web Authentication Redirect"
msgstr "تغییر مسیر برای تایید هویت وب" msgstr "تغییر مسیر برای تایید هویت وب"
#: ../js/ui/appDisplay.js:772 #: ../js/ui/appDisplay.js:660
msgid "Frequently used applications will appear here" msgid "Frequently used applications will appear here"
msgstr "برنامه‌های بیشتر استفاده شده در اینجا نمایش داده می‌شود" msgstr "برنامه‌های بیشتر استفاده شده در اینجا نمایش داده می‌شود"
#: ../js/ui/appDisplay.js:883 #: ../js/ui/appDisplay.js:771
msgid "Frequent" msgid "Frequent"
msgstr "پُراستفاده" msgstr "پُراستفاده"
#: ../js/ui/appDisplay.js:890 #: ../js/ui/appDisplay.js:778
msgid "All" msgid "All"
msgstr "همه" msgstr "همه"
#: ../js/ui/appDisplay.js:1790 #: ../js/ui/appDisplay.js:1650
msgid "New Window" msgid "New Window"
msgstr "پنجره‌ی جدید" 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" msgid "Remove from Favorites"
msgstr "حذف از مورد پسندها" msgstr "حذف از مورد پسندها"
#: ../js/ui/appDisplay.js:1822 #: ../js/ui/appDisplay.js:1679
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "اضافه کردن به مورد پسندها" msgstr "اضافه کردن به مورد پسندها"
#: ../js/ui/appDisplay.js:1831 #: ../js/ui/appDisplay.js:1688
#| msgid "Show Text"
msgid "Show Details" msgid "Show Details"
msgstr "نمایش جزئیات" msgstr "نمایش جزئیات"
#: ../js/ui/appFavorites.js:132 #: ../js/ui/appFavorites.js:122
#, javascript-format #, javascript-format
msgid "%s has been added to your favorites." msgid "%s has been added to your favorites."
msgstr "مورد %s به مورد پسندهای شما اضافه شد." msgstr "مورد %s به مورد پسندهای شما اضافه شد."
#: ../js/ui/appFavorites.js:166 #: ../js/ui/appFavorites.js:156
#, javascript-format #, javascript-format
msgid "%s has been removed from your favorites." msgid "%s has been removed from your favorites."
msgstr "مورد %s ازمورد پسندهای شما حذف شد." msgstr "مورد %s ازمورد پسندهای شما حذف شد."
@@ -599,11 +613,11 @@ msgstr "باز کردن با %s"
msgid "Eject" msgid "Eject"
msgstr "بیرون دادن" 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:" msgid "Password:"
msgstr "گذرواژه" msgstr "گذرواژه"
#: ../js/ui/components/keyring.js:120 #: ../js/ui/components/keyring.js:113
msgid "Type again:" msgid "Type again:"
msgstr "تلاش مجدد:" msgstr "تلاش مجدد:"
@@ -642,6 +656,9 @@ msgstr "تایید هویت برای شبکه بی‌سیم لازم است"
#: ../js/ui/components/networkAgent.js:319 #: ../js/ui/components/networkAgent.js:319
#, javascript-format #, javascript-format
#| msgid ""
#| "Passwords or encryption keys are required to access the wireless network "
#| "'%s'."
msgid "" msgid ""
"Passwords or encryption keys are required to access the wireless network " "Passwords or encryption keys are required to access the wireless network "
"“%s”." "“%s”."
@@ -677,6 +694,7 @@ msgstr "گذرواژه شبکه پهن‌باند تلفن همراه"
#: ../js/ui/components/networkAgent.js:346 #: ../js/ui/components/networkAgent.js:346
#, javascript-format #, javascript-format
#| msgid "A password is required to connect to '%s'."
msgid "A password is required to connect to “%s”." msgid "A password is required to connect to “%s”."
msgstr "برای اتصال به «%s» گذرواژه لازم است." msgstr "برای اتصال به «%s» گذرواژه لازم است."
@@ -726,18 +744,23 @@ msgstr "بی‌صدا"
#. Translators: Time in 24h format */ #. Translators: Time in 24h format */
#: ../js/ui/components/telepathyClient.js:953 #: ../js/ui/components/telepathyClient.js:953
#| msgctxt "event list time"
#| msgid "%H%M"
msgid "%H%M" msgid "%H%M"
msgstr "%OH%OM" msgstr "%OH%OM"
#. Translators: this is the word "Yesterday" followed by a #. 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 #: ../js/ui/components/telepathyClient.js:960
#| msgid "<b>Yesterday</b>, <b>%H:%M</b>"
msgid "Yesterday, %H%M" msgid "Yesterday, %H%M"
msgstr "<b>دیروز</b>، <b>%OH:%OM" msgstr "<b>دیروز</b>، <b>%OH:%OM"
#. Translators: this is the week day name followed by a time #. 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 #: ../js/ui/components/telepathyClient.js:967
#| msgctxt "event list time"
#| msgid "%H%M"
msgid "%A, %H%M" msgid "%A, %H%M"
msgstr "%A، %OH%OM" msgstr "%A، %OH%OM"
@@ -745,6 +768,8 @@ msgstr "%A، %OH%OM"
#. followed by a time string in 24h format. #. 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 #: ../js/ui/components/telepathyClient.js:974
#| msgctxt "event list time"
#| msgid "%H%M"
msgid "%B %d, %H%M" msgid "%B %d, %H%M"
msgstr "%d %B، %OH%OM" msgstr "%d %B، %OH%OM"
@@ -757,6 +782,8 @@ msgstr "%Od %OB %OY، %OH:%OM"
#. Translators: Time in 24h format */ #. Translators: Time in 24h format */
#: ../js/ui/components/telepathyClient.js:986 #: ../js/ui/components/telepathyClient.js:986
#| msgctxt "event list time"
#| msgid "%l%M%p"
msgid "%l%M %p" msgid "%l%M %p"
msgstr "%Ol%OM%p" msgstr "%Ol%OM%p"
@@ -769,6 +796,7 @@ msgstr "دیروز، %OI:%OM"
#. Translators: this is the week day name followed by a time #. 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 #: ../js/ui/components/telepathyClient.js:1000
#| msgid "%a %l:%M %p"
msgid "%A, %l%M %p" msgid "%A, %l%M %p"
msgstr "%A، %OH:%OM" msgstr "%A، %OH:%OM"
@@ -776,6 +804,7 @@ msgstr "%A، %OH:%OM"
#. followed by a time string in 12h format. #. 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 #: ../js/ui/components/telepathyClient.js:1007
#| msgid "%a %b %e, %l:%M %p"
msgid "%B %d, %l%M %p" msgid "%B %d, %l%M %p"
msgstr "%Od %B، %OH:%OM" msgstr "%Od %B، %OH:%OM"
@@ -783,6 +812,7 @@ msgstr "%Od %B، %OH:%OM"
#. number followed by a time string in 12h format. #. 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 #: ../js/ui/components/telepathyClient.js:1013
#| msgid "%a %b %e, %l:%M %p"
msgid "%B %d %Y, %l%M %p" msgid "%B %d %Y, %l%M %p"
msgstr "%Od %B، %OH:%OM" msgstr "%Od %B، %OH:%OM"
@@ -974,7 +1004,7 @@ msgstr "نمایش حساب"
msgid "Unknown reason" msgid "Unknown reason"
msgstr "دلیل ناشناخته" msgstr "دلیل ناشناخته"
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:154 #: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:228
msgid "Windows" msgid "Windows"
msgstr "پنجره‌‌ها" msgstr "پنجره‌‌ها"
@@ -986,105 +1016,105 @@ msgstr "نمایش برنامه‌ها"
msgid "Dash" msgid "Dash"
msgstr "دَش" msgstr "دَش"
#: ../js/ui/dateMenu.js:97 #: ../js/ui/dateMenu.js:96
msgid "Open Calendar" msgid "Open Calendar"
msgstr "بازکردن تقویم" msgstr "بازکردن تقویم"
#: ../js/ui/dateMenu.js:101 #: ../js/ui/dateMenu.js:100
msgid "Open Clocks" msgid "Open Clocks"
msgstr "باز کردن ساعت‌ها" msgstr "باز کردن ساعت‌ها"
#: ../js/ui/dateMenu.js:108 #: ../js/ui/dateMenu.js:107
msgid "Date & Time Settings" msgid "Date & Time Settings"
msgstr "تنظیمات تاریخ و ساعت" msgstr "تنظیمات تاریخ و ساعت"
#. Translators: This is the date format to use when the calendar popup is #. 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"). #. * 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" msgid "%A %B %e, %Y"
msgstr "%A %Od %B" msgstr "%A %Od %B"
#: ../js/ui/endSessionDialog.js:64 #: ../js/ui/endSessionDialog.js:66
#, javascript-format #, javascript-format
msgctxt "title" msgctxt "title"
msgid "Log Out %s" msgid "Log Out %s"
msgstr "خروج از %s" msgstr "خروج از %s"
#: ../js/ui/endSessionDialog.js:65 #: ../js/ui/endSessionDialog.js:67
msgctxt "title" msgctxt "title"
msgid "Log Out" msgid "Log Out"
msgstr "خروج از سیستم" msgstr "خروج از سیستم"
#: ../js/ui/endSessionDialog.js:67 #: ../js/ui/endSessionDialog.js:69
#, javascript-format #, javascript-format
msgid "%s will be logged out automatically in %d second." msgid "%s will be logged out automatically in %d second."
msgid_plural "%s will be logged out automatically in %d seconds." msgid_plural "%s will be logged out automatically in %d seconds."
msgstr[0] "%s به طور خودکار در مدت %Id ثانیه از سیستم خارج خواهد شد." msgstr[0] "%s به طور خودکار در مدت %Id ثانیه از سیستم خارج خواهد شد."
msgstr[1] "%s به طور خودکار در مدت %Id ثانیه از سیستم خارج خواهد شد." msgstr[1] "%s به طور خودکار در مدت %Id ثانیه از سیستم خارج خواهد شد."
#: ../js/ui/endSessionDialog.js:72 #: ../js/ui/endSessionDialog.js:74
#, javascript-format #, javascript-format
msgid "You will be logged out automatically in %d second." msgid "You will be logged out automatically in %d second."
msgid_plural "You will be logged out automatically in %d seconds." msgid_plural "You will be logged out automatically in %d seconds."
msgstr[0] "شما پس از %Id ثانیه به طور خودکار از سیستم خارج می‌شوید." msgstr[0] "شما پس از %Id ثانیه به طور خودکار از سیستم خارج می‌شوید."
msgstr[1] "شما پس از %Id ثانیه به طور خودکار از سیستم خارج می‌شوید." msgstr[1] "شما پس از %Id ثانیه به طور خودکار از سیستم خارج می‌شوید."
#: ../js/ui/endSessionDialog.js:78 #: ../js/ui/endSessionDialog.js:80
msgctxt "button" msgctxt "button"
msgid "Log Out" msgid "Log Out"
msgstr "خروج از سیستم" msgstr "خروج از سیستم"
#: ../js/ui/endSessionDialog.js:84 #: ../js/ui/endSessionDialog.js:86
msgctxt "title" msgctxt "title"
msgid "Power Off" msgid "Power Off"
msgstr "خاموش کردن" msgstr "خاموش کردن"
#: ../js/ui/endSessionDialog.js:85 #: ../js/ui/endSessionDialog.js:87
msgctxt "title" msgctxt "title"
msgid "Install Updates & Power Off" msgid "Install Updates & Power Off"
msgstr "نصب بروزرسانی‌ها و خاموش کردن" msgstr "نصب بروزرسانی‌ها و خاموش کردن"
#: ../js/ui/endSessionDialog.js:87 #: ../js/ui/endSessionDialog.js:89
#, javascript-format #, javascript-format
msgid "The system will power off automatically in %d second." msgid "The system will power off automatically in %d second."
msgid_plural "The system will power off automatically in %d seconds." msgid_plural "The system will power off automatically in %d seconds."
msgstr[0] "سیستم پس از %Id ثانیه به طور خودکار خاموش می‌شود." msgstr[0] "سیستم پس از %Id ثانیه به طور خودکار خاموش می‌شود."
msgstr[1] "سیستم پس از %Id ثانیه به طور خودکار خاموش می‌شود." msgstr[1] "سیستم پس از %Id ثانیه به طور خودکار خاموش می‌شود."
#: ../js/ui/endSessionDialog.js:91 #: ../js/ui/endSessionDialog.js:93
msgctxt "checkbox" msgctxt "checkbox"
msgid "Install pending software updates" 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" msgctxt "button"
msgid "Restart" msgid "Restart"
msgstr "راه‌اندازی مجدد" msgstr "راه‌اندازی مجدد"
#: ../js/ui/endSessionDialog.js:96 #: ../js/ui/endSessionDialog.js:98
msgctxt "button" msgctxt "button"
msgid "Power Off" msgid "Power Off"
msgstr "خاموش کردن" msgstr "خاموش کردن"
#: ../js/ui/endSessionDialog.js:103 #: ../js/ui/endSessionDialog.js:105
msgctxt "title" msgctxt "title"
msgid "Restart" msgid "Restart"
msgstr "راه‌اندازی مجدد" msgstr "راه‌اندازی مجدد"
#: ../js/ui/endSessionDialog.js:105 #: ../js/ui/endSessionDialog.js:107
#, javascript-format #, javascript-format
msgid "The system will restart automatically in %d second." msgid "The system will restart automatically in %d second."
msgid_plural "The system will restart automatically in %d seconds." msgid_plural "The system will restart automatically in %d seconds."
msgstr[0] "سیستم پس از %Id ثانیه به طور خودکار مجددا راه‌اندازی می‌شود." msgstr[0] "سیستم پس از %Id ثانیه به طور خودکار مجددا راه‌اندازی می‌شود."
msgstr[1] "سیستم پس از %Id ثانیه به طور خودکار مجددا راه‌اندازی می‌شود." msgstr[1] "سیستم پس از %Id ثانیه به طور خودکار مجددا راه‌اندازی می‌شود."
#: ../js/ui/endSessionDialog.js:119 #: ../js/ui/endSessionDialog.js:121
msgctxt "title" msgctxt "title"
msgid "Restart & Install Updates" msgid "Restart & Install Updates"
msgstr "راه‌اندازی مجدد و نصب بروزرسانی‌ها" msgstr "راه‌اندازی مجدد و نصب بروزرسانی‌ها"
#: ../js/ui/endSessionDialog.js:121 #: ../js/ui/endSessionDialog.js:123
#, javascript-format #, javascript-format
msgid "The system will automatically restart and install updates in %d second." msgid "The system will automatically restart and install updates in %d second."
msgid_plural "" msgid_plural ""
@@ -1096,42 +1126,44 @@ msgstr[1] ""
"سیستم پس از %Id ثانیه به طور خودکار مجددا راه‌اندازی می‌شود و بروزرسانی‌های را " "سیستم پس از %Id ثانیه به طور خودکار مجددا راه‌اندازی می‌شود و بروزرسانی‌های را "
"نصب می‌کند." "نصب می‌کند."
#: ../js/ui/endSessionDialog.js:127 #: ../js/ui/endSessionDialog.js:129
#| msgctxt "button"
#| msgid "Restart & Install"
msgctxt "button" msgctxt "button"
msgid "Restart &amp; Install" msgid "Restart &amp; Install"
msgstr "راه‌اندازی مجدد و نصب" msgstr "راه‌اندازی مجدد و نصب"
#: ../js/ui/endSessionDialog.js:128 #: ../js/ui/endSessionDialog.js:130
msgctxt "button" msgctxt "button"
msgid "Install &amp; Power Off" msgid "Install &amp; Power Off"
msgstr "نصب و خاموش کردن" msgstr "نصب و خاموش کردن"
#: ../js/ui/endSessionDialog.js:129 #: ../js/ui/endSessionDialog.js:131
msgctxt "checkbox" msgctxt "checkbox"
msgid "Power off after updates are installed" 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." 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." 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." msgid "Other users are logged in."
msgstr "کاربران دیگر وارد سیستم هستند." msgstr "کاربران دیگر وارد سیستم هستند."
#. Translators: Remote here refers to a remote session, like a ssh login */ #. Translators: Remote here refers to a remote session, like a ssh login */
#: ../js/ui/endSessionDialog.js:640 #: ../js/ui/endSessionDialog.js:619
#, javascript-format #, javascript-format
msgid "%s (remote)" msgid "%s (remote)"
msgstr "%s (دوردست)" msgstr "%s (دوردست)"
#. Translators: Console here refers to a tty like a VT console */ #. Translators: Console here refers to a tty like a VT console */
#: ../js/ui/endSessionDialog.js:643 #: ../js/ui/endSessionDialog.js:622
#, javascript-format #, javascript-format
msgid "%s (console)" msgid "%s (console)"
msgstr "%s (پایانه)" msgstr "%s (پایانه)"
@@ -1142,10 +1174,11 @@ msgstr "نصب"
#: ../js/ui/extensionDownloader.js:204 #: ../js/ui/extensionDownloader.js:204
#, javascript-format #, javascript-format
#| msgid "Download and install '%s' from extensions.gnome.org?"
msgid "Download and install “%s” from extensions.gnome.org?" msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "بارگیری و نصب «%s» از 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" msgid "Keyboard"
msgstr "صفحه‌کلید" msgstr "صفحه‌کلید"
@@ -1167,8 +1200,8 @@ msgstr "مخفی کردن خطاها"
msgid "Show Errors" msgid "Show Errors"
msgstr "نمایش خطاها" msgstr "نمایش خطاها"
#: ../js/ui/lookingGlass.js:716 ../js/ui/status/location.js:71 #: ../js/ui/lookingGlass.js:716 ../js/ui/status/location.js:62
#: ../js/ui/status/location.js:176 #: ../js/ui/status/location.js:166
msgid "Enabled" msgid "Enabled"
msgstr "به کار انداختن" msgstr "به کار انداختن"
@@ -1176,7 +1209,7 @@ msgstr "به کار انداختن"
#. because it's disabled by rfkill (airplane mode) */ #. because it's disabled by rfkill (airplane mode) */
#. translators: #. translators:
#. * The device has been disabled #. * 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 #: ../js/ui/status/network.js:592 ../src/gvc/gvc-mixer-control.c:1830
msgid "Disabled" msgid "Disabled"
msgstr "از کار انداختن" msgstr "از کار انداختن"
@@ -1201,39 +1234,39 @@ msgstr "نمایش منبع"
msgid "Web Page" msgid "Web Page"
msgstr "صفحه‌ی وب" msgstr "صفحه‌ی وب"
#: ../js/ui/messageTray.js:1327 #: ../js/ui/messageTray.js:1325
msgid "Open" msgid "Open"
msgstr "بازکردن" msgstr "بازکردن"
#: ../js/ui/messageTray.js:1334 #: ../js/ui/messageTray.js:1332
msgid "Remove" msgid "Remove"
msgstr "حذف" msgstr "حذف"
#: ../js/ui/messageTray.js:1631 #: ../js/ui/messageTray.js:1629
msgid "Notifications" msgid "Notifications"
msgstr "اعلان‌ها" msgstr "اعلان‌ها"
#: ../js/ui/messageTray.js:1638 #: ../js/ui/messageTray.js:1636
msgid "Clear Messages" msgid "Clear Messages"
msgstr "پاک کردن پیام‌ها" msgstr "پاک کردن پیام‌ها"
#: ../js/ui/messageTray.js:1657 #: ../js/ui/messageTray.js:1655
msgid "Notification Settings" msgid "Notification Settings"
msgstr "تنظیمات اعلان‌ها" msgstr "تنظیمات اعلان‌ها"
#: ../js/ui/messageTray.js:1710 #: ../js/ui/messageTray.js:1708
msgid "Tray Menu" msgid "Tray Menu"
msgstr "منو سینی" msgstr "منو سینی"
#: ../js/ui/messageTray.js:1934 #: ../js/ui/messageTray.js:1925
msgid "No Messages" msgid "No Messages"
msgstr "پیامی وجود ندارد" msgstr "پیامی وجود ندارد"
#: ../js/ui/messageTray.js:1979 #: ../js/ui/messageTray.js:1963
msgid "Message Tray" msgid "Message Tray"
msgstr "سینی پیام" msgstr "سینی پیام"
#: ../js/ui/messageTray.js:2992 #: ../js/ui/messageTray.js:2966
msgid "System Information" msgid "System Information"
msgstr "اطلاعات سیستم" msgstr "اطلاعات سیستم"
@@ -1261,7 +1294,7 @@ msgstr "نمای‌کلی"
#. in the search entry when no search is #. in the search entry when no search is
#. active; it should not exceed ~30 #. active; it should not exceed ~30
#. characters. */ #. characters. */
#: ../js/ui/overview.js:246 #: ../js/ui/overview.js:250
msgid "Type to search…" msgid "Type to search…"
msgstr "برای جستجو تایپ کنید..." msgstr "برای جستجو تایپ کنید..."
@@ -1292,6 +1325,7 @@ msgid "Close"
msgstr "بستن" msgstr "بستن"
#: ../js/ui/runDialog.js:277 #: ../js/ui/runDialog.js:277
#| msgid "Estimating…"
msgid "Restarting…" msgid "Restarting…"
msgstr "درحال راه‌اندازی مجدد..." msgstr "درحال راه‌اندازی مجدد..."
@@ -1324,27 +1358,27 @@ msgstr "نمی‌توان قفل کرد"
msgid "Lock was blocked by an application" msgid "Lock was blocked by an application"
msgstr "قفل توسط یک برنامه مسدود شده بود" msgstr "قفل توسط یک برنامه مسدود شده بود"
#: ../js/ui/search.js:611 #: ../js/ui/search.js:606
msgid "Searching…" msgid "Searching…"
msgstr "درحال حستجو..." msgstr "درحال حستجو..."
#: ../js/ui/search.js:613 #: ../js/ui/search.js:652
msgid "No results." msgid "No results."
msgstr "بدون نتیجه." msgstr "بدون نتیجه."
#: ../js/ui/shellEntry.js:25 #: ../js/ui/shellEntry.js:27
msgid "Copy" msgid "Copy"
msgstr "رونوشت" msgstr "رونوشت"
#: ../js/ui/shellEntry.js:30 #: ../js/ui/shellEntry.js:32
msgid "Paste" msgid "Paste"
msgstr "چسباندن" msgstr "چسباندن"
#: ../js/ui/shellEntry.js:97 #: ../js/ui/shellEntry.js:99
msgid "Show Text" msgid "Show Text"
msgstr "نمایش متن" msgstr "نمایش متن"
#: ../js/ui/shellEntry.js:99 #: ../js/ui/shellEntry.js:101
msgid "Hide Text" msgid "Hide Text"
msgstr "مخفی‌کردن متن" msgstr "مخفی‌کردن متن"
@@ -1430,27 +1464,26 @@ msgstr "متصل نیست"
msgid "Brightness" msgid "Brightness"
msgstr "روشنایی" msgstr "روشنایی"
#: ../js/ui/status/keyboard.js:547 #: ../js/ui/status/keyboard.js:406
msgid "Show Keyboard Layout" msgid "Show Keyboard Layout"
msgstr "نمایش چیدمان صفحه‌کلید" msgstr "نمایش چیدمان صفحه‌کلید"
#: ../js/ui/status/location.js:65 #: ../js/ui/status/location.js:56
#| msgid "Notifications"
msgid "Location" msgid "Location"
msgstr "مکان" 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" msgid "Disable"
msgstr "از کار انداختن" msgstr "از کار انداختن"
#: ../js/ui/status/location.js:73 #: ../js/ui/status/location.js:166
msgid "Privacy Settings"
msgstr "تنظیمات حریم‌خصوصی"
#: ../js/ui/status/location.js:176
msgid "In Use" msgid "In Use"
msgstr "درحال استفاده" msgstr "درحال استفاده"
#: ../js/ui/status/location.js:180 #: ../js/ui/status/location.js:170
#| msgid "Enabled"
msgid "Enable" msgid "Enable"
msgstr "به کار انداختن" msgstr "به کار انداختن"
@@ -1464,31 +1497,37 @@ msgid "Off"
msgstr "خاموش" msgstr "خاموش"
#: ../js/ui/status/network.js:459 #: ../js/ui/status/network.js:459
#| msgid "Connect"
msgid "Connected" msgid "Connected"
msgstr "متصل شده" msgstr "متصل شده"
#. Translators: this is for network devices that are physically present but are not #. 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 #: ../js/ui/status/network.js:463
#| msgid "unmanaged"
msgid "Unmanaged" msgid "Unmanaged"
msgstr "مدیریت نشده" msgstr "مدیریت نشده"
#: ../js/ui/status/network.js:465 #: ../js/ui/status/network.js:465
#| msgid "disconnecting..."
msgid "Disconnecting" msgid "Disconnecting"
msgstr "درحال قطع ارتباط" msgstr "درحال قطع ارتباط"
#: ../js/ui/status/network.js:471 ../js/ui/status/network.js:1301 #: ../js/ui/status/network.js:471 ../js/ui/status/network.js:1301
#| msgid "Connection"
msgid "Connecting" msgid "Connecting"
msgstr "درحال اتصال" msgstr "درحال اتصال"
#. Translators: this is for network connections that require some kind of key or password */ #. Translators: this is for network connections that require some kind of key or password */
#: ../js/ui/status/network.js:474 #: ../js/ui/status/network.js:474
#| msgid "authentication required"
msgid "Authentication required" msgid "Authentication required"
msgstr "تایید هویت لازم است" msgstr "تایید هویت لازم است"
#. Translators: this is for devices that require some kind of firmware or kernel #. 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 #: ../js/ui/status/network.js:482
#| msgid "firmware missing"
msgid "Firmware missing" msgid "Firmware missing"
msgstr "میان‌افزار موجود نیست" msgstr "میان‌افزار موجود نیست"
@@ -1503,6 +1542,7 @@ msgid "Connection failed"
msgstr "اتصال شکست خورد" msgstr "اتصال شکست خورد"
#: ../js/ui/status/network.js:504 #: ../js/ui/status/network.js:504
#| msgid "Wi-Fi Settings"
msgid "Wired Settings" msgid "Wired Settings"
msgstr "تنظیمات اتصال سیمی" msgstr "تنظیمات اتصال سیمی"
@@ -1519,6 +1559,7 @@ msgid "Use as Internet connection"
msgstr "استفاده به عنوان اتصال اینترنت" msgstr "استفاده به عنوان اتصال اینترنت"
#: ../js/ui/status/network.js:813 #: ../js/ui/status/network.js:813
#| msgid "Airplane Mode"
msgid "Airplane Mode is On" msgid "Airplane Mode is On"
msgstr "حالت هواپیمایی روشن است" msgstr "حالت هواپیمایی روشن است"
@@ -1527,10 +1568,12 @@ msgid "Wi-Fi is disabled when airplane mode is on."
msgstr "در زمان روشن بودن حالت هواپیمایی وای-فای غیرفعال می‌شود." msgstr "در زمان روشن بودن حالت هواپیمایی وای-فای غیرفعال می‌شود."
#: ../js/ui/status/network.js:815 #: ../js/ui/status/network.js:815
#| msgid "Airplane Mode"
msgid "Turn Off Airplane Mode" msgid "Turn Off Airplane Mode"
msgstr "خاموش کردن حالت هواپیمایی" msgstr "خاموش کردن حالت هواپیمایی"
#: ../js/ui/status/network.js:824 #: ../js/ui/status/network.js:824
#| msgid "Wi-Fi Settings"
msgid "Wi-Fi is Off" msgid "Wi-Fi is Off"
msgstr "بی‌سیم خاموش است" msgstr "بی‌سیم خاموش است"
@@ -1539,6 +1582,7 @@ msgid "Wi-Fi needs to be turned on in order to connect to a network."
msgstr "برای اتصال به شبکه باید وای-فای روشن شود." msgstr "برای اتصال به شبکه باید وای-فای روشن شود."
#: ../js/ui/status/network.js:826 #: ../js/ui/status/network.js:826
#| msgid "Turn On"
msgid "Turn On Wi-Fi" msgid "Turn On Wi-Fi"
msgstr "روشن کردن بی‌سیم" msgstr "روشن کردن بی‌سیم"
@@ -1592,6 +1636,7 @@ msgid "Network Settings"
msgstr "تنظیمات شبکه" msgstr "تنظیمات شبکه"
#: ../js/ui/status/network.js:1482 #: ../js/ui/status/network.js:1482
#| msgid "Settings"
msgid "VPN Settings" msgid "VPN Settings"
msgstr "تنظیمات VPN" msgstr "تنظیمات VPN"
@@ -1685,16 +1730,17 @@ msgstr "ورود به سیستم بعنوان کاربری دیگر"
msgid "Unlock Window" msgid "Unlock Window"
msgstr "بازکردن قفل پنجره" msgstr "بازکردن قفل پنجره"
#: ../js/ui/viewSelector.js:158 #: ../js/ui/viewSelector.js:232
msgid "Applications" msgid "Applications"
msgstr "برنامه‌ها" msgstr "برنامه‌ها"
#: ../js/ui/viewSelector.js:162 #: ../js/ui/viewSelector.js:236
msgid "Search" msgid "Search"
msgstr "جستجو" msgstr "جستجو"
#: ../js/ui/windowAttentionHandler.js:19 #: ../js/ui/windowAttentionHandler.js:19
#, javascript-format #, javascript-format
#| msgid "'%s' is ready"
msgid "“%s” is ready" msgid "“%s” is ready"
msgstr "«%s» آماده است" msgstr "«%s» آماده است"
@@ -1786,24 +1832,25 @@ msgstr[1] "%Iu ورودی"
msgid "System Sounds" msgid "System Sounds"
msgstr "صداهای سیستم" msgstr "صداهای سیستم"
#: ../src/main.c:373 #: ../src/main.c:371
msgid "Print version" msgid "Print version"
msgstr "چاپ نسخه" msgstr "چاپ نسخه"
#: ../src/main.c:379 #: ../src/main.c:377
msgid "Mode used by GDM for login screen" msgid "Mode used by GDM for login screen"
msgstr "حالت استفاده شده توسط GDM برای صفحه ورود به سیستم" msgstr "حالت استفاده شده توسط GDM برای صفحه ورود به سیستم"
#: ../src/main.c:385 #: ../src/main.c:383
msgid "Use a specific mode, e.g. \"gdm\" for login screen" msgid "Use a specific mode, e.g. \"gdm\" for login screen"
msgstr "استفاده از حالت مشخص، مثال «gdm» برای صفحه ورود به سیستم" msgstr "استفاده از حالت مشخص، مثال «gdm» برای صفحه ورود به سیستم"
#: ../src/main.c:391 #: ../src/main.c:389
msgid "List possible modes" msgid "List possible modes"
msgstr "فهرست کردن حالت‌های ممکن" msgstr "فهرست کردن حالت‌های ممکن"
#: ../src/shell-app.c:666 #: ../src/shell-app.c:666
#, c-format #, c-format
#| msgid "Failed to launch '%s'"
msgid "Failed to launch “%s”" msgid "Failed to launch “%s”"
msgstr "راه‌اندازی «%s» شکست خورد" msgstr "راه‌اندازی «%s» شکست خورد"

907
po/fi.po

File diff suppressed because it is too large Load Diff

148
po/fr.po
View File

@@ -19,7 +19,7 @@ msgstr ""
"Project-Id-Version: gnome-shell master fr\n" "Project-Id-Version: gnome-shell master fr\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n" "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" "PO-Revision-Date: 2014-08-25 17:00+0200\n"
"Last-Translator: Alain Lojewski <allomervan@gmail.com>\n" "Last-Translator: Alain Lojewski <allomervan@gmail.com>\n"
"Language-Team: français <gnomefr@traduc.org>\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 "" msgid ""
"Keybinding that pauses and resumes all running tweens, for debugging purposes" "Keybinding that pauses and resumes all running tweens, for debugging purposes"
msgstr "" msgstr ""
"Combinaison de touches pour stopper et fermer toutes les transitions à des " "Combinaison de touches pour stopper et fermer toutes les transitions à des fins "
"fins de débogage" "de débogage"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30 #: ../data/org.gnome.shell.gschema.xml.in.in.h:30
msgid "Which keyboard to use" msgid "Which keyboard to use"
@@ -322,19 +322,19 @@ msgstr ""
msgid "Captive Portal" msgid "Captive Portal"
msgstr "Portail captif" msgstr "Portail captif"
#: ../js/extensionPrefs/main.js:123 #: ../js/extensionPrefs/main.js:127
#, javascript-format #, javascript-format
msgid "There was an error loading the preferences dialog for %s:" msgid "There was an error loading the preferences dialog for %s:"
msgstr "" msgstr ""
"Une erreur s'est produite lors du chargement de la boîte de dialogue des " "Une erreur s'est produite lors du chargement de la boîte de dialogue des "
"préférences de %s :" "préférences de %s :"
#: ../js/extensionPrefs/main.js:155 #: ../js/extensionPrefs/main.js:159
msgid "GNOME Shell Extensions" msgid "GNOME Shell Extensions"
msgstr "Extensions GNOME Shell" msgstr "Extensions GNOME Shell"
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:143 #: ../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/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/network.js:915 #: ../js/ui/status/network.js:915
msgid "Cancel" msgid "Cancel"
@@ -401,40 +401,40 @@ msgstr "Exécution de « %s » impossible :"
msgid "Web Authentication Redirect" msgid "Web Authentication Redirect"
msgstr "Redirection de l'authentification Web" msgstr "Redirection de l'authentification Web"
#: ../js/ui/appDisplay.js:772 #: ../js/ui/appDisplay.js:660
msgid "Frequently used applications will appear here" msgid "Frequently used applications will appear here"
msgstr "Les applications fréquemment utilisées apparaîtront ici" msgstr "Les applications fréquemment utilisées apparaîtront ici"
#: ../js/ui/appDisplay.js:883 #: ../js/ui/appDisplay.js:771
msgid "Frequent" msgid "Frequent"
msgstr "Fréquemment utilisées" msgstr "Fréquemment utilisées"
#: ../js/ui/appDisplay.js:890 #: ../js/ui/appDisplay.js:778
msgid "All" msgid "All"
msgstr "Toutes" msgstr "Toutes"
#: ../js/ui/appDisplay.js:1789 #: ../js/ui/appDisplay.js:1650
msgid "New Window" msgid "New Window"
msgstr "Nouvelle fenêtre" 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" msgid "Remove from Favorites"
msgstr "Enlever des favoris" msgstr "Enlever des favoris"
#: ../js/ui/appDisplay.js:1821 #: ../js/ui/appDisplay.js:1679
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "Ajouter aux favoris" msgstr "Ajouter aux favoris"
#: ../js/ui/appDisplay.js:1830 #: ../js/ui/appDisplay.js:1688
msgid "Show Details" msgid "Show Details"
msgstr "Afficher les détails" msgstr "Afficher les détails"
#: ../js/ui/appFavorites.js:124 #: ../js/ui/appFavorites.js:122
#, javascript-format #, javascript-format
msgid "%s has been added to your favorites." msgid "%s has been added to your favorites."
msgstr "%s a été ajouté à vos favoris." msgstr "%s a été ajouté à vos favoris."
#: ../js/ui/appFavorites.js:158 #: ../js/ui/appFavorites.js:156
#, javascript-format #, javascript-format
msgid "%s has been removed from your favorites." msgid "%s has been removed from your favorites."
msgstr "%s a été supprimé de vos favoris." msgstr "%s a été supprimé de vos favoris."
@@ -647,11 +647,11 @@ msgstr "Ouvrir avec %s"
msgid "Eject" msgid "Eject"
msgstr "Éjecter" 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:" msgid "Password:"
msgstr "Mot de passe :" msgstr "Mot de passe :"
#: ../js/ui/components/keyring.js:120 #: ../js/ui/components/keyring.js:113
msgid "Type again:" msgid "Type again:"
msgstr "Saisissez à nouveau :" msgstr "Saisissez à nouveau :"
@@ -1025,7 +1025,7 @@ msgstr "Afficher le compte"
msgid "Unknown reason" msgid "Unknown reason"
msgstr "Raison inconnue" 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" msgid "Windows"
msgstr "Fenêtres" msgstr "Fenêtres"
@@ -1062,86 +1062,86 @@ msgstr "Paramètres de date et heure"
msgid "%A %B %e, %Y" msgid "%A %B %e, %Y"
msgstr "%A %e %B %Y" msgstr "%A %e %B %Y"
#: ../js/ui/endSessionDialog.js:64 #: ../js/ui/endSessionDialog.js:66
#, javascript-format #, javascript-format
msgctxt "title" msgctxt "title"
msgid "Log Out %s" msgid "Log Out %s"
msgstr "Fermer la session de %s" msgstr "Fermer la session de %s"
#: ../js/ui/endSessionDialog.js:65 #: ../js/ui/endSessionDialog.js:67
msgctxt "title" msgctxt "title"
msgid "Log Out" msgid "Log Out"
msgstr "Fermer la session" msgstr "Fermer la session"
#: ../js/ui/endSessionDialog.js:67 #: ../js/ui/endSessionDialog.js:69
#, javascript-format #, javascript-format
msgid "%s will be logged out automatically in %d second." msgid "%s will be logged out automatically in %d second."
msgid_plural "%s will be logged out automatically in %d seconds." msgid_plural "%s will be logged out automatically in %d seconds."
msgstr[0] "%s sera déconnecté automatiquement dans %d seconde." msgstr[0] "%s sera déconnecté automatiquement dans %d seconde."
msgstr[1] "%s sera déconnecté automatiquement dans %d secondes." msgstr[1] "%s sera déconnecté automatiquement dans %d secondes."
#: ../js/ui/endSessionDialog.js:72 #: ../js/ui/endSessionDialog.js:74
#, javascript-format #, javascript-format
msgid "You will be logged out automatically in %d second." msgid "You will be logged out automatically in %d second."
msgid_plural "You will be logged out automatically in %d seconds." msgid_plural "You will be logged out automatically in %d seconds."
msgstr[0] "Vous allez être déconnecté automatiquement dans %d seconde." msgstr[0] "Vous allez être déconnecté automatiquement dans %d seconde."
msgstr[1] "Vous allez être déconnecté automatiquement dans %d secondes." msgstr[1] "Vous allez être déconnecté automatiquement dans %d secondes."
#: ../js/ui/endSessionDialog.js:78 #: ../js/ui/endSessionDialog.js:80
msgctxt "button" msgctxt "button"
msgid "Log Out" msgid "Log Out"
msgstr "Fermer la session" msgstr "Fermer la session"
#: ../js/ui/endSessionDialog.js:84 #: ../js/ui/endSessionDialog.js:86
msgctxt "title" msgctxt "title"
msgid "Power Off" msgid "Power Off"
msgstr "Éteindre" msgstr "Éteindre"
#: ../js/ui/endSessionDialog.js:85 #: ../js/ui/endSessionDialog.js:87
msgctxt "title" msgctxt "title"
msgid "Install Updates & Power Off" msgid "Install Updates & Power Off"
msgstr "Installer les mises à jour et éteindre" msgstr "Installer les mises à jour et éteindre"
#: ../js/ui/endSessionDialog.js:87 #: ../js/ui/endSessionDialog.js:89
#, javascript-format #, javascript-format
msgid "The system will power off automatically in %d second." msgid "The system will power off automatically in %d second."
msgid_plural "The system will power off automatically in %d seconds." msgid_plural "The system will power off automatically in %d seconds."
msgstr[0] "Cet ordinateur s'éteindra automatiquement dans %d seconde." msgstr[0] "Cet ordinateur s'éteindra automatiquement dans %d seconde."
msgstr[1] "Cet ordinateur s'éteindra automatiquement dans %d secondes." msgstr[1] "Cet ordinateur s'éteindra automatiquement dans %d secondes."
#: ../js/ui/endSessionDialog.js:91 #: ../js/ui/endSessionDialog.js:93
msgctxt "checkbox" msgctxt "checkbox"
msgid "Install pending software updates" msgid "Install pending software updates"
msgstr "Installer les mises à jour logicielles en attente" 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" msgctxt "button"
msgid "Restart" msgid "Restart"
msgstr "Redémarrer" msgstr "Redémarrer"
#: ../js/ui/endSessionDialog.js:96 #: ../js/ui/endSessionDialog.js:98
msgctxt "button" msgctxt "button"
msgid "Power Off" msgid "Power Off"
msgstr "Éteindre" msgstr "Éteindre"
#: ../js/ui/endSessionDialog.js:103 #: ../js/ui/endSessionDialog.js:105
msgctxt "title" msgctxt "title"
msgid "Restart" msgid "Restart"
msgstr "Redémarrer" msgstr "Redémarrer"
#: ../js/ui/endSessionDialog.js:105 #: ../js/ui/endSessionDialog.js:107
#, javascript-format #, javascript-format
msgid "The system will restart automatically in %d second." msgid "The system will restart automatically in %d second."
msgid_plural "The system will restart automatically in %d seconds." msgid_plural "The system will restart automatically in %d seconds."
msgstr[0] "Cet ordinateur redémarrera automatiquement dans %d seconde." msgstr[0] "Cet ordinateur redémarrera automatiquement dans %d seconde."
msgstr[1] "Cet ordinateur redémarrera automatiquement dans %d secondes." msgstr[1] "Cet ordinateur redémarrera automatiquement dans %d secondes."
#: ../js/ui/endSessionDialog.js:119 #: ../js/ui/endSessionDialog.js:121
msgctxt "title" msgctxt "title"
msgid "Restart & Install Updates" msgid "Restart & Install Updates"
msgstr "Redémarrer et installer les mises à jour" msgstr "Redémarrer et installer les mises à jour"
#: ../js/ui/endSessionDialog.js:121 #: ../js/ui/endSessionDialog.js:123
#, javascript-format #, javascript-format
msgid "The system will automatically restart and install updates in %d second." msgid "The system will automatically restart and install updates in %d second."
msgid_plural "" msgid_plural ""
@@ -1149,44 +1149,44 @@ msgid_plural ""
msgstr[0] "Le système redémarrera automatiquement dans %d seconde." msgstr[0] "Le système redémarrera automatiquement dans %d seconde."
msgstr[1] "Le système redémarrera automatiquement dans %d secondes." msgstr[1] "Le système redémarrera automatiquement dans %d secondes."
#: ../js/ui/endSessionDialog.js:127 #: ../js/ui/endSessionDialog.js:129
msgctxt "button" msgctxt "button"
msgid "Restart &amp; Install" msgid "Restart &amp; Install"
msgstr "Redémarrer et installer" msgstr "Redémarrer et installer"
#: ../js/ui/endSessionDialog.js:128 #: ../js/ui/endSessionDialog.js:130
msgctxt "button" msgctxt "button"
msgid "Install &amp; Power Off" msgid "Install &amp; Power Off"
msgstr "Installer et éteindre" msgstr "Installer et éteindre"
#: ../js/ui/endSessionDialog.js:129 #: ../js/ui/endSessionDialog.js:131
msgctxt "checkbox" msgctxt "checkbox"
msgid "Power off after updates are installed" msgid "Power off after updates are installed"
msgstr "Éteindre après l'installation des mises à jour" 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." msgid "Running on battery power: please plug in before installing updates."
msgstr "" msgstr ""
"Fonctionnement sur batterie : veuillez vous brancher avant d'installer les " "Fonctionnement sur batterie : veuillez vous brancher avant d'installer les "
"mises à jour." "mises à jour."
#: ../js/ui/endSessionDialog.js:355 #: ../js/ui/endSessionDialog.js:332
msgid "Some applications are busy or have unsaved work." msgid "Some applications are busy or have unsaved work."
msgstr "" msgstr ""
"Certaines applications sont occupées ou ont des travaux non-sauvegardés." "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." msgid "Other users are logged in."
msgstr "D'autres utilisateurs sont connectés." msgstr "D'autres utilisateurs sont connectés."
#. Translators: Remote here refers to a remote session, like a ssh login */ #. Translators: Remote here refers to a remote session, like a ssh login */
#: ../js/ui/endSessionDialog.js:640 #: ../js/ui/endSessionDialog.js:619
#, javascript-format #, javascript-format
msgid "%s (remote)" msgid "%s (remote)"
msgstr "%s (distant)" msgstr "%s (distant)"
#. Translators: Console here refers to a tty like a VT console */ #. Translators: Console here refers to a tty like a VT console */
#: ../js/ui/endSessionDialog.js:643 #: ../js/ui/endSessionDialog.js:622
#, javascript-format #, javascript-format
msgid "%s (console)" msgid "%s (console)"
msgstr "%s (console)" msgstr "%s (console)"
@@ -1200,7 +1200,7 @@ msgstr "Installer"
msgid "Download and install “%s” from extensions.gnome.org?" msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "Télécharger et installer « %s » à partir de 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" msgid "Keyboard"
msgstr "Clavier" msgstr "Clavier"
@@ -1222,8 +1222,8 @@ msgstr "Masquer les erreurs"
msgid "Show Errors" msgid "Show Errors"
msgstr "Afficher les erreurs" msgstr "Afficher les erreurs"
#: ../js/ui/lookingGlass.js:716 ../js/ui/status/location.js:71 #: ../js/ui/lookingGlass.js:716 ../js/ui/status/location.js:62
#: ../js/ui/status/location.js:176 #: ../js/ui/status/location.js:166
msgid "Enabled" msgid "Enabled"
msgstr "Activé" msgstr "Activé"
@@ -1231,7 +1231,7 @@ msgstr "Activé"
#. because it's disabled by rfkill (airplane mode) */ #. because it's disabled by rfkill (airplane mode) */
#. translators: #. translators:
#. * The device has been disabled #. * 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 #: ../js/ui/status/network.js:592 ../src/gvc/gvc-mixer-control.c:1830
msgid "Disabled" msgid "Disabled"
msgstr "Désactivé" msgstr "Désactivé"
@@ -1256,39 +1256,39 @@ msgstr "Afficher la source"
msgid "Web Page" msgid "Web Page"
msgstr "Page Web" msgstr "Page Web"
#: ../js/ui/messageTray.js:1326 #: ../js/ui/messageTray.js:1325
msgid "Open" msgid "Open"
msgstr "Ouvrir" msgstr "Ouvrir"
#: ../js/ui/messageTray.js:1333 #: ../js/ui/messageTray.js:1332
msgid "Remove" msgid "Remove"
msgstr "Enlever" msgstr "Enlever"
#: ../js/ui/messageTray.js:1630 #: ../js/ui/messageTray.js:1629
msgid "Notifications" msgid "Notifications"
msgstr "Notifications" msgstr "Notifications"
#: ../js/ui/messageTray.js:1637 #: ../js/ui/messageTray.js:1636
msgid "Clear Messages" msgid "Clear Messages"
msgstr "Effacer les messages" msgstr "Effacer les messages"
#: ../js/ui/messageTray.js:1656 #: ../js/ui/messageTray.js:1655
msgid "Notification Settings" msgid "Notification Settings"
msgstr "Paramètres de notifications" msgstr "Paramètres de notifications"
#: ../js/ui/messageTray.js:1709 #: ../js/ui/messageTray.js:1708
msgid "Tray Menu" msgid "Tray Menu"
msgstr "Menu du tiroir de messagerie" msgstr "Menu du tiroir de messagerie"
#: ../js/ui/messageTray.js:1926 #: ../js/ui/messageTray.js:1925
msgid "No Messages" msgid "No Messages"
msgstr "Aucun message" msgstr "Aucun message"
#: ../js/ui/messageTray.js:1968 #: ../js/ui/messageTray.js:1963
msgid "Message Tray" msgid "Message Tray"
msgstr "Tiroir de messagerie" msgstr "Tiroir de messagerie"
#: ../js/ui/messageTray.js:2971 #: ../js/ui/messageTray.js:2966
msgid "System Information" msgid "System Information"
msgstr "Informations du système" msgstr "Informations du système"
@@ -1316,7 +1316,7 @@ msgstr "Vue d'ensemble"
#. in the search entry when no search is #. in the search entry when no search is
#. active; it should not exceed ~30 #. active; it should not exceed ~30
#. characters. */ #. characters. */
#: ../js/ui/overview.js:246 #: ../js/ui/overview.js:250
msgid "Type to search…" msgid "Type to search…"
msgstr "Rechercher…" msgstr "Rechercher…"
@@ -1379,27 +1379,27 @@ msgstr "Impossible de verrouiller"
msgid "Lock was blocked by an application" msgid "Lock was blocked by an application"
msgstr "Le verrouillage a été bloqué par une application" msgstr "Le verrouillage a été bloqué par une application"
#: ../js/ui/search.js:594 #: ../js/ui/search.js:606
msgid "Searching…" msgid "Searching…"
msgstr "Recherche en cours…" msgstr "Recherche en cours…"
#: ../js/ui/search.js:596 #: ../js/ui/search.js:652
msgid "No results." msgid "No results."
msgstr "Aucun résultat." msgstr "Aucun résultat."
#: ../js/ui/shellEntry.js:25 #: ../js/ui/shellEntry.js:27
msgid "Copy" msgid "Copy"
msgstr "Copier" msgstr "Copier"
#: ../js/ui/shellEntry.js:30 #: ../js/ui/shellEntry.js:32
msgid "Paste" msgid "Paste"
msgstr "Coller" msgstr "Coller"
#: ../js/ui/shellEntry.js:97 #: ../js/ui/shellEntry.js:99
msgid "Show Text" msgid "Show Text"
msgstr "Afficher le texte" msgstr "Afficher le texte"
#: ../js/ui/shellEntry.js:99 #: ../js/ui/shellEntry.js:101
msgid "Hide Text" msgid "Hide Text"
msgstr "Masquer le texte" msgstr "Masquer le texte"
@@ -1485,27 +1485,23 @@ msgstr "Non connecté"
msgid "Brightness" msgid "Brightness"
msgstr "Luminosité" msgstr "Luminosité"
#: ../js/ui/status/keyboard.js:547 #: ../js/ui/status/keyboard.js:406
msgid "Show Keyboard Layout" msgid "Show Keyboard Layout"
msgstr "Afficher la disposition du clavier" msgstr "Afficher la disposition du clavier"
#: ../js/ui/status/location.js:65 #: ../js/ui/status/location.js:56
msgid "Location" msgid "Location"
msgstr "Localisation" 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" msgid "Disable"
msgstr "Désactiver" msgstr "Désactiver"
#: ../js/ui/status/location.js:73 #: ../js/ui/status/location.js:166
msgid "Privacy Settings"
msgstr "Paramètres de confidentialité"
#: ../js/ui/status/location.js:176
msgid "In Use" msgid "In Use"
msgstr "En cours d'utilisation" msgstr "En cours d'utilisation"
#: ../js/ui/status/location.js:180 #: ../js/ui/status/location.js:170
msgid "Enable" msgid "Enable"
msgstr "Activer" msgstr "Activer"
@@ -1740,11 +1736,11 @@ msgstr "Se connecter en tant qu'autre utilisateur"
msgid "Unlock Window" msgid "Unlock Window"
msgstr "Fenêtre de déverrouillage" msgstr "Fenêtre de déverrouillage"
#: ../js/ui/viewSelector.js:158 #: ../js/ui/viewSelector.js:232
msgid "Applications" msgid "Applications"
msgstr "Applications" msgstr "Applications"
#: ../js/ui/viewSelector.js:162 #: ../js/ui/viewSelector.js:236
msgid "Search" msgid "Search"
msgstr "Recherche" msgstr "Recherche"
@@ -1841,20 +1837,20 @@ msgstr[1] "%u entrées"
msgid "System Sounds" msgid "System Sounds"
msgstr "Sons système" msgstr "Sons système"
#: ../src/main.c:373 #: ../src/main.c:371
msgid "Print version" msgid "Print version"
msgstr "Affiche la version" msgstr "Affiche la version"
#: ../src/main.c:379 #: ../src/main.c:377
msgid "Mode used by GDM for login screen" msgid "Mode used by GDM for login screen"
msgstr "Mode utilisé par GDM pour l'écran de connexion" 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" msgid "Use a specific mode, e.g. \"gdm\" for login screen"
msgstr "" msgstr ""
"Utiliser un mode particulier, par ex. « gdm » pour l'écran de connexion" "Utiliser un mode particulier, par ex. « gdm » pour l'écran de connexion"
#: ../src/main.c:391 #: ../src/main.c:389
msgid "List possible modes" msgid "List possible modes"
msgstr "Lister les modes possibles" msgstr "Lister les modes possibles"

540
po/fur.po

File diff suppressed because it is too large Load Diff

308
po/gl.po
View File

@@ -11,8 +11,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gnome-shell master\n" "Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-09-23 01:50+0200\n" "POT-Creation-Date: 2014-08-25 23:06+0200\n"
"PO-Revision-Date: 2014-09-23 01:51+0200\n" "PO-Revision-Date: 2014-08-25 23:08+0200\n"
"Last-Translator: Fran Dieguez <frandieguez@gnome.org>\n" "Last-Translator: Fran Dieguez <frandieguez@gnome.org>\n"
"Language-Team: gnome-l10n-gl@gnome.org\n" "Language-Team: gnome-l10n-gl@gnome.org\n"
"Language: gl\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" msgid "Captive Portal"
msgstr "Portal cautivo" msgstr "Portal cautivo"
#: ../js/extensionPrefs/main.js:123 #: ../js/extensionPrefs/main.js:127
#, javascript-format #, javascript-format
msgid "There was an error loading the preferences dialog for %s:" msgid "There was an error loading the preferences dialog for %s:"
msgstr "Produciuse un erro ao cargar o diálogo de preferenzas para %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" msgid "GNOME Shell Extensions"
msgstr "Extensións de GNOME Shell" msgstr "Extensións de GNOME Shell"
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:143 #: ../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/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/network.js:915 #: ../js/ui/status/network.js:915
msgid "Cancel" msgid "Cancel"
@@ -334,23 +334,15 @@ msgstr "Iniciar sesión"
msgid "Choose Session" msgid "Choose Session"
msgstr "Escolla unha sesión" 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 #: ../js/gdm/loginDialog.js:429
msgid "Not listed?" msgid "Not listed?"
msgstr "Non está na lista?" 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 #: ../js/gdm/loginDialog.js:614
#, javascript-format #, javascript-format
msgid "(e.g., user or %s)" msgid "(e.g., user or %s)"
msgstr "(p.ex., usuario ou %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/gdm/loginDialog.js:619 ../js/ui/components/networkAgent.js:269
#: ../js/ui/components/networkAgent.js:287 #: ../js/ui/components/networkAgent.js:287
msgid "Username: " msgid "Username: "
@@ -364,11 +356,6 @@ msgstr "Xanela de inicio de sesión"
msgid "Authentication error" msgid "Authentication error"
msgstr "Erro de autenticación" 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 #: ../js/gdm/util.js:453
msgid "(or swipe finger)" msgid "(or swipe finger)"
msgstr "(ou pase o dedo)" msgstr "(ou pase o dedo)"
@@ -377,8 +364,6 @@ msgstr "(ou pase o dedo)"
msgid "Command not found" msgid "Command not found"
msgstr "Orde non atopada" msgstr "Orde non atopada"
#. Replace "Error invoking GLib.shell_parse_argv: " with
#. something nicer
#: ../js/misc/util.js:148 #: ../js/misc/util.js:148
msgid "Could not parse command:" msgid "Could not parse command:"
msgstr "Non foi posíbel analizar a orde:" 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:" msgid "Execution of “%s” failed:"
msgstr "Produciuse un fallo na execución de «%s»:" 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 #: ../js/portalHelper/main.js:85
msgid "Web Authentication Redirect" msgid "Web Authentication Redirect"
msgstr "Redirección web de autenticación" msgstr "Redirección web de autenticación"
#: ../js/ui/appDisplay.js:772 #: ../js/ui/appDisplay.js:660
msgid "Frequently used applications will appear here" msgid "Frequently used applications will appear here"
msgstr "Os aplicativos usados recentemente aparecerán aquí" msgstr "Os aplicativos usados recentemente aparecerán aquí"
#: ../js/ui/appDisplay.js:883 #: ../js/ui/appDisplay.js:771
msgid "Frequent" msgid "Frequent"
msgstr "Frecuentes" msgstr "Frecuentes"
#: ../js/ui/appDisplay.js:890 #: ../js/ui/appDisplay.js:778
msgid "All" msgid "All"
msgstr "Todos" msgstr "Todos"
#: ../js/ui/appDisplay.js:1790 #: ../js/ui/appDisplay.js:1650
msgid "New Window" msgid "New Window"
msgstr "Xanela nova" 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" msgid "Remove from Favorites"
msgstr "Retirar dos marcadores" msgstr "Retirar dos marcadores"
#: ../js/ui/appDisplay.js:1822 #: ../js/ui/appDisplay.js:1679
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "Engadir aos favoritos" msgstr "Engadir aos favoritos"
#: ../js/ui/appDisplay.js:1831 #: ../js/ui/appDisplay.js:1688
msgid "Show Details" msgid "Show Details"
msgstr "Mostrar detalles" msgstr "Mostrar detalles"
#: ../js/ui/appFavorites.js:132 #: ../js/ui/appFavorites.js:122
#, javascript-format #, javascript-format
msgid "%s has been added to your favorites." msgid "%s has been added to your favorites."
msgstr "%s foi engadido aos seus favoritos." msgstr "%s foi engadido aos seus favoritos."
#: ../js/ui/appFavorites.js:166 #: ../js/ui/appFavorites.js:156
#, javascript-format #, javascript-format
msgid "%s has been removed from your favorites." msgid "%s has been removed from your favorites."
msgstr "%s retirouse dos seus marcadores." 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 #. Translators: Shown in calendar event list for all day events
#. * Keep it short, best if you can use less then 10 characters #. * Keep it short, best if you can use less then 10 characters
#. #. */
#: ../js/ui/calendar.js:67 #: ../js/ui/calendar.js:67
msgctxt "event list time" msgctxt "event list time"
msgid "All Day" msgid "All Day"
msgstr "Todo o día" msgstr "Todo o día"
#. Translators: Shown in calendar event list, if 24h format, #. 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 #: ../js/ui/calendar.js:73
msgctxt "event list time" msgctxt "event list time"
msgid "%H%M" msgid "%H%M"
@@ -458,7 +441,7 @@ msgstr "%H%M"
#. Translators: Shown in calendar event list, if 12h format, #. Translators: Shown in calendar event list, if 12h format,
#. \u2236 is a ratio character, similar to : and \u2009 is #. \u2236 is a ratio character, similar to : and \u2009 is
#. a thin space #. a thin space */
#: ../js/ui/calendar.js:82 #: ../js/ui/calendar.js:82
msgctxt "event list time" msgctxt "event list time"
msgid "%l%M%p" msgid "%l%M%p"
@@ -468,43 +451,43 @@ msgstr "%l%M%p"
#. * #. *
#. * NOTE: These grid abbreviations are always shown together #. * NOTE: These grid abbreviations are always shown together
#. * and in order, e.g. "S M T W T F S". #. * and in order, e.g. "S M T W T F S".
#. #. */
#: ../js/ui/calendar.js:113 #: ../js/ui/calendar.js:113
msgctxt "grid sunday" msgctxt "grid sunday"
msgid "S" msgid "S"
msgstr "D" msgstr "D"
#. Translators: Calendar grid abbreviation for Monday #. Translators: Calendar grid abbreviation for Monday */
#: ../js/ui/calendar.js:115 #: ../js/ui/calendar.js:115
msgctxt "grid monday" msgctxt "grid monday"
msgid "M" msgid "M"
msgstr "L" msgstr "L"
#. Translators: Calendar grid abbreviation for Tuesday #. Translators: Calendar grid abbreviation for Tuesday */
#: ../js/ui/calendar.js:117 #: ../js/ui/calendar.js:117
msgctxt "grid tuesday" msgctxt "grid tuesday"
msgid "T" msgid "T"
msgstr "M" msgstr "M"
#. Translators: Calendar grid abbreviation for Wednesday #. Translators: Calendar grid abbreviation for Wednesday */
#: ../js/ui/calendar.js:119 #: ../js/ui/calendar.js:119
msgctxt "grid wednesday" msgctxt "grid wednesday"
msgid "W" msgid "W"
msgstr "W" msgstr "W"
#. Translators: Calendar grid abbreviation for Thursday #. Translators: Calendar grid abbreviation for Thursday */
#: ../js/ui/calendar.js:121 #: ../js/ui/calendar.js:121
msgctxt "grid thursday" msgctxt "grid thursday"
msgid "T" msgid "T"
msgstr "X" msgstr "X"
#. Translators: Calendar grid abbreviation for Friday #. Translators: Calendar grid abbreviation for Friday */
#: ../js/ui/calendar.js:123 #: ../js/ui/calendar.js:123
msgctxt "grid friday" msgctxt "grid friday"
msgid "F" msgid "F"
msgstr "V" msgstr "V"
#. Translators: Calendar grid abbreviation for Saturday #. Translators: Calendar grid abbreviation for Saturday */
#: ../js/ui/calendar.js:125 #: ../js/ui/calendar.js:125
msgctxt "grid saturday" msgctxt "grid saturday"
msgid "S" msgid "S"
@@ -515,43 +498,43 @@ msgstr "S"
#. * NOTE: These list abbreviations are normally not shown together #. * NOTE: These list abbreviations are normally not shown together
#. * so they need to be unique (e.g. Tuesday and Thursday cannot #. * so they need to be unique (e.g. Tuesday and Thursday cannot
#. * both be 'T'). #. * both be 'T').
#. #. */
#: ../js/ui/calendar.js:138 #: ../js/ui/calendar.js:138
msgctxt "list sunday" msgctxt "list sunday"
msgid "Su" msgid "Su"
msgstr "Do" msgstr "Do"
#. Translators: Event list abbreviation for Monday #. Translators: Event list abbreviation for Monday */
#: ../js/ui/calendar.js:140 #: ../js/ui/calendar.js:140
msgctxt "list monday" msgctxt "list monday"
msgid "M" msgid "M"
msgstr "L" msgstr "L"
#. Translators: Event list abbreviation for Tuesday #. Translators: Event list abbreviation for Tuesday */
#: ../js/ui/calendar.js:142 #: ../js/ui/calendar.js:142
msgctxt "list tuesday" msgctxt "list tuesday"
msgid "T" msgid "T"
msgstr "M" msgstr "M"
#. Translators: Event list abbreviation for Wednesday #. Translators: Event list abbreviation for Wednesday */
#: ../js/ui/calendar.js:144 #: ../js/ui/calendar.js:144
msgctxt "list wednesday" msgctxt "list wednesday"
msgid "W" msgid "W"
msgstr "W" msgstr "W"
#. Translators: Event list abbreviation for Thursday #. Translators: Event list abbreviation for Thursday */
#: ../js/ui/calendar.js:146 #: ../js/ui/calendar.js:146
msgctxt "list thursday" msgctxt "list thursday"
msgid "Th" msgid "Th"
msgstr "X" msgstr "X"
#. Translators: Event list abbreviation for Friday #. Translators: Event list abbreviation for Friday */
#: ../js/ui/calendar.js:148 #: ../js/ui/calendar.js:148
msgctxt "list friday" msgctxt "list friday"
msgid "F" msgid "F"
msgstr "V" msgstr "V"
#. Translators: Event list abbreviation for Saturday #. Translators: Event list abbreviation for Saturday */
#: ../js/ui/calendar.js:150 #: ../js/ui/calendar.js:150
msgctxt "list saturday" msgctxt "list saturday"
msgid "S" msgid "S"
@@ -565,18 +548,18 @@ msgstr "Anterior mes"
msgid "Next month" msgid "Next month"
msgstr "Seguinte mes" 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 #: ../js/ui/calendar.js:781
msgid "Nothing Scheduled" msgid "Nothing Scheduled"
msgstr "Nada programado" 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 #: ../js/ui/calendar.js:799
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%A, %d de %B" 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 #: ../js/ui/calendar.js:802
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d, %Y" msgid "%A, %B %d, %Y"
@@ -619,11 +602,11 @@ msgstr "Abrir con %s"
msgid "Eject" msgid "Eject"
msgstr "Expulsar" 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:" msgid "Password:"
msgstr "Contrasinal:" msgstr "Contrasinal:"
#: ../js/ui/components/keyring.js:120 #: ../js/ui/components/keyring.js:113
msgid "Type again:" msgid "Type again:"
msgstr "Escriba de novo:" msgstr "Escriba de novo:"
@@ -632,7 +615,6 @@ msgstr "Escriba de novo:"
msgid "Connect" msgid "Connect"
msgstr "Conectar" msgstr "Conectar"
#. Cisco LEAP
#: ../js/ui/components/networkAgent.js:231 #: ../js/ui/components/networkAgent.js:231
#: ../js/ui/components/networkAgent.js:243 #: ../js/ui/components/networkAgent.js:243
#: ../js/ui/components/networkAgent.js:271 #: ../js/ui/components/networkAgent.js:271
@@ -641,7 +623,6 @@ msgstr "Conectar"
msgid "Password: " msgid "Password: "
msgstr "Contrasinal: " msgstr "Contrasinal: "
#. static WEP
#: ../js/ui/components/networkAgent.js:236 #: ../js/ui/components/networkAgent.js:236
msgid "Key: " msgid "Key: "
msgstr "Chave: " msgstr "Chave: "
@@ -719,23 +700,19 @@ msgstr "Autenticar"
#. Translators: "that didn't work" refers to the fact that the #. Translators: "that didn't work" refers to the fact that the
#. * requested authentication was not gained; this can happen #. * requested authentication was not gained; this can happen
#. * because of an authentication error (like invalid password), #. * because of an authentication error (like invalid password),
#. * for instance. #. * for instance. */
#: ../js/ui/components/polkitAgent.js:271 ../js/ui/shellMountOperation.js:383 #: ../js/ui/components/polkitAgent.js:271 ../js/ui/shellMountOperation.js:383
msgid "Sorry, that didn't work. Please try again." msgid "Sorry, that didn't work. Please try again."
msgstr "Desculpe, iso non funcionou. Ténteo de novo." 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 #: ../js/ui/components/telepathyClient.js:240
msgid "Invitation" msgid "Invitation"
msgstr "Convite" msgstr "Convite"
#. We got the TpContact
#: ../js/ui/components/telepathyClient.js:300 #: ../js/ui/components/telepathyClient.js:300
msgid "Call" msgid "Call"
msgstr "Chamar" msgstr "Chamar"
#. We got the TpContact
#: ../js/ui/components/telepathyClient.js:316 #: ../js/ui/components/telepathyClient.js:316
msgid "File Transfer" msgid "File Transfer"
msgstr "Transferencia de ficheiro" msgstr "Transferencia de ficheiro"
@@ -752,85 +729,77 @@ msgstr "Desactivar silencio"
msgid "Mute" msgid "Mute"
msgstr "Silenciar" msgstr "Silenciar"
#. Translators: Time in 24h format #. Translators: Time in 24h format */
#: ../js/ui/components/telepathyClient.js:953 #: ../js/ui/components/telepathyClient.js:953
msgid "%H%M" msgid "%H%M"
msgstr "%H%M" msgstr "%H%M"
#. Translators: this is the word "Yesterday" followed by a #. 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 #: ../js/ui/components/telepathyClient.js:960
#, no-c-format
msgid "Yesterday, %H%M" msgid "Yesterday, %H%M"
msgstr "Onte, %H:%M" msgstr "Onte, %H:%M"
#. Translators: this is the week day name followed by a time #. 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 #: ../js/ui/components/telepathyClient.js:967
#, no-c-format
msgid "%A, %H%M" msgid "%A, %H%M"
msgstr "%A ás %H:%M" msgstr "%A ás %H:%M"
#. Translators: this is the month name and day number #. Translators: this is the month name and day number
#. followed by a time string in 24h format. #. 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 #: ../js/ui/components/telepathyClient.js:974
#, no-c-format
msgid "%B %d, %H%M" msgid "%B %d, %H%M"
msgstr "%d de %B ás %H:%M" msgstr "%d de %B ás %H:%M"
#. Translators: this is the month name, day number, year #. Translators: this is the month name, day number, year
#. number followed by a time string in 24h format. #. 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 #: ../js/ui/components/telepathyClient.js:980
#, no-c-format
msgid "%B %d %Y, %H%M" msgid "%B %d %Y, %H%M"
msgstr "%d de %B de %Y ás %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 #: ../js/ui/components/telepathyClient.js:986
msgid "%l%M %p" msgid "%l%M %p"
msgstr "%l:%M %p" msgstr "%l:%M %p"
#. Translators: this is the word "Yesterday" followed by a #. 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 #: ../js/ui/components/telepathyClient.js:993
#, no-c-format
msgid "Yesterday, %l%M %p" msgid "Yesterday, %l%M %p"
msgstr "Onte, %H:%M" msgstr "Onte, %H:%M"
#. Translators: this is the week day name followed by a time #. 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 #: ../js/ui/components/telepathyClient.js:1000
#, no-c-format
msgid "%A, %l%M %p" msgid "%A, %l%M %p"
msgstr "%A, %l%M %p" msgstr "%A, %l%M %p"
#. Translators: this is the month name and day number #. Translators: this is the month name and day number
#. followed by a time string in 12h format. #. 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 #: ../js/ui/components/telepathyClient.js:1007
#, no-c-format
msgid "%B %d, %l%M %p" msgid "%B %d, %l%M %p"
msgstr "%d de %B, %l%M %p" msgstr "%d de %B, %l%M %p"
#. Translators: this is the month name, day number, year #. Translators: this is the month name, day number, year
#. number followed by a time string in 12h format. #. 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 #: ../js/ui/components/telepathyClient.js:1013
#, no-c-format
msgid "%B %d %Y, %l%M %p" msgid "%B %d %Y, %l%M %p"
msgstr "%d de %B de %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 #. Translators: this is the other person changing their old IM name to their new
#. IM name. #. IM name. */
#: ../js/ui/components/telepathyClient.js:1045 #: ../js/ui/components/telepathyClient.js:1045
#, javascript-format #, javascript-format
msgid "%s is now known as %s" msgid "%s is now known as %s"
msgstr "Agora %s chámase %s" msgstr "Agora %s chámase %s"
#. translators: argument is a room name like #. translators: argument is a room name like
#. * room@jabber.org for example. #. * room@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1149 #: ../js/ui/components/telepathyClient.js:1149
#, javascript-format #, javascript-format
msgid "Invitation to %s" msgid "Invitation to %s"
@@ -838,7 +807,7 @@ msgstr "Convite a %s"
#. translators: first argument is the name of a contact and the second #. 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 #. * 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 #: ../js/ui/components/telepathyClient.js:1157
#, javascript-format #, javascript-format
msgid "%s is inviting you to join %s" msgid "%s is inviting you to join %s"
@@ -857,19 +826,19 @@ msgstr "Rexeitar"
msgid "Accept" msgid "Accept"
msgstr "Aceptar" 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 #: ../js/ui/components/telepathyClient.js:1184
#, javascript-format #, javascript-format
msgid "Video call from %s" msgid "Video call from %s"
msgstr "Videochamada de %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 #: ../js/ui/components/telepathyClient.js:1187
#, javascript-format #, javascript-format
msgid "Call from %s" msgid "Call from %s"
msgstr "Chamada de %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 #: ../js/ui/components/telepathyClient.js:1201
msgid "Answer" msgid "Answer"
msgstr "Responder" msgstr "Responder"
@@ -878,13 +847,13 @@ msgstr "Responder"
#. * the contact's alias and the second one is the #. * the contact's alias and the second one is the
#. * file name. The string will be something #. * file name. The string will be something
#. * like: "Alice is sending you test.ogg" #. * like: "Alice is sending you test.ogg"
#. #. */
#: ../js/ui/components/telepathyClient.js:1222 #: ../js/ui/components/telepathyClient.js:1222
#, javascript-format #, javascript-format
msgid "%s is sending you %s" msgid "%s is sending you %s"
msgstr "%s esta enviándolle %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 #: ../js/ui/components/telepathyClient.js:1251
#, javascript-format #, javascript-format
msgid "%s would like permission to see when you are online" msgid "%s would like permission to see when you are online"
@@ -998,7 +967,7 @@ msgid "Internal error"
msgstr "Erro interno" msgstr "Erro interno"
#. translators: argument is the account name, like #. translators: argument is the account name, like
#. * name@jabber.org for example. #. * name@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1393 #: ../js/ui/components/telepathyClient.js:1393
#, javascript-format #, javascript-format
msgid "Unable to connect to %s" msgid "Unable to connect to %s"
@@ -1012,7 +981,7 @@ msgstr "Ver conta"
msgid "Unknown reason" msgid "Unknown reason"
msgstr "Razón descoñecida" 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" msgid "Windows"
msgstr "Xanelas" msgstr "Xanelas"
@@ -1020,8 +989,6 @@ msgstr "Xanelas"
msgid "Show Applications" msgid "Show Applications"
msgstr "Mostrar aplicativos" msgstr "Mostrar aplicativos"
#. Translators: this is the name of the dock/favorites area on
#. the left of the overview
#: ../js/ui/dash.js:445 #: ../js/ui/dash.js:445
msgid "Dash" msgid "Dash"
msgstr "Taboleiro" 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 #. 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"). #. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
#. #. */
#: ../js/ui/dateMenu.js:204 #: ../js/ui/dateMenu.js:204
msgid "%A %B %e, %Y" msgid "%A %B %e, %Y"
msgstr "%a, %e de %B, %Y" msgstr "%a, %e de %B, %Y"
#: ../js/ui/endSessionDialog.js:64 #: ../js/ui/endSessionDialog.js:66
#, javascript-format #, javascript-format
msgctxt "title" msgctxt "title"
msgid "Log Out %s" msgid "Log Out %s"
msgstr "Saír da sesión %s" msgstr "Saír da sesión %s"
#: ../js/ui/endSessionDialog.js:65 #: ../js/ui/endSessionDialog.js:67
msgctxt "title" msgctxt "title"
msgid "Log Out" msgid "Log Out"
msgstr "Saír da sesión" msgstr "Saír da sesión"
#: ../js/ui/endSessionDialog.js:67 #: ../js/ui/endSessionDialog.js:69
#, javascript-format #, javascript-format
msgid "%s will be logged out automatically in %d second." msgid "%s will be logged out automatically in %d second."
msgid_plural "%s will be logged out automatically in %d seconds." msgid_plural "%s will be logged out automatically in %d seconds."
msgstr[0] "Vaise pechar a sesión de %s en %d segundo." msgstr[0] "Vaise pechar a sesión de %s en %d segundo."
msgstr[1] "Vaise pechar a sesión de %s en %d segundos." msgstr[1] "Vaise pechar a sesión de %s en %d segundos."
#: ../js/ui/endSessionDialog.js:72 #: ../js/ui/endSessionDialog.js:74
#, javascript-format #, javascript-format
msgid "You will be logged out automatically in %d second." msgid "You will be logged out automatically in %d second."
msgid_plural "You will be logged out automatically in %d seconds." msgid_plural "You will be logged out automatically in %d seconds."
msgstr[0] "A súa sesión pecharase automaticamente en %d segundo." msgstr[0] "A súa sesión pecharase automaticamente en %d segundo."
msgstr[1] "A súa sesión pecharase automaticamente en %d segundos." msgstr[1] "A súa sesión pecharase automaticamente en %d segundos."
#: ../js/ui/endSessionDialog.js:78 #: ../js/ui/endSessionDialog.js:80
msgctxt "button" msgctxt "button"
msgid "Log Out" msgid "Log Out"
msgstr "Saír da sesión" msgstr "Saír da sesión"
#: ../js/ui/endSessionDialog.js:84 #: ../js/ui/endSessionDialog.js:86
msgctxt "title" msgctxt "title"
msgid "Power Off" msgid "Power Off"
msgstr "Apagar" msgstr "Apagar"
#: ../js/ui/endSessionDialog.js:85 #: ../js/ui/endSessionDialog.js:87
msgctxt "title" msgctxt "title"
msgid "Install Updates & Power Off" msgid "Install Updates & Power Off"
msgstr "Instalar anovacións e apagar" msgstr "Instalar anovacións e apagar"
#: ../js/ui/endSessionDialog.js:87 #: ../js/ui/endSessionDialog.js:89
#, javascript-format #, javascript-format
msgid "The system will power off automatically in %d second." msgid "The system will power off automatically in %d second."
msgid_plural "The system will power off automatically in %d seconds." msgid_plural "The system will power off automatically in %d seconds."
msgstr[0] "O sistema apagarase automaticamente en %d segundo." msgstr[0] "O sistema apagarase automaticamente en %d segundo."
msgstr[1] "O sistema apagarase automaticamente en %d segundos." msgstr[1] "O sistema apagarase automaticamente en %d segundos."
#: ../js/ui/endSessionDialog.js:91 #: ../js/ui/endSessionDialog.js:93
msgctxt "checkbox" msgctxt "checkbox"
msgid "Install pending software updates" msgid "Install pending software updates"
msgstr "Instalar anovacións de software pendentes" 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" msgctxt "button"
msgid "Restart" msgid "Restart"
msgstr "Reiniciar" msgstr "Reiniciar"
#: ../js/ui/endSessionDialog.js:96 #: ../js/ui/endSessionDialog.js:98
msgctxt "button" msgctxt "button"
msgid "Power Off" msgid "Power Off"
msgstr "Apagar" msgstr "Apagar"
#: ../js/ui/endSessionDialog.js:103 #: ../js/ui/endSessionDialog.js:105
msgctxt "title" msgctxt "title"
msgid "Restart" msgid "Restart"
msgstr "Reiniciar" msgstr "Reiniciar"
#: ../js/ui/endSessionDialog.js:105 #: ../js/ui/endSessionDialog.js:107
#, javascript-format #, javascript-format
msgid "The system will restart automatically in %d second." msgid "The system will restart automatically in %d second."
msgid_plural "The system will restart automatically in %d seconds." msgid_plural "The system will restart automatically in %d seconds."
msgstr[0] "O sistema reiniciarase automaticamente en %d segundo." msgstr[0] "O sistema reiniciarase automaticamente en %d segundo."
msgstr[1] "O sistema reiniciarase automaticamente en %d segundos." msgstr[1] "O sistema reiniciarase automaticamente en %d segundos."
#: ../js/ui/endSessionDialog.js:119 #: ../js/ui/endSessionDialog.js:121
msgctxt "title" msgctxt "title"
msgid "Restart & Install Updates" msgid "Restart & Install Updates"
msgstr "Reiniciar e instalar actualizacións" msgstr "Reiniciar e instalar actualizacións"
#: ../js/ui/endSessionDialog.js:121 #: ../js/ui/endSessionDialog.js:123
#, javascript-format #, javascript-format
msgid "The system will automatically restart and install updates in %d second." msgid "The system will automatically restart and install updates in %d second."
msgid_plural "" msgid_plural ""
@@ -1136,41 +1103,41 @@ msgstr[1] ""
"O sistema reiniciarase automaticamente e instalará as actualizacións en %d " "O sistema reiniciarase automaticamente e instalará as actualizacións en %d "
"segundos." "segundos."
#: ../js/ui/endSessionDialog.js:127 #: ../js/ui/endSessionDialog.js:129
msgctxt "button" msgctxt "button"
msgid "Restart &amp; Install" msgid "Restart &amp; Install"
msgstr "Reiniciar e instalar" msgstr "Reiniciar e instalar"
#: ../js/ui/endSessionDialog.js:128 #: ../js/ui/endSessionDialog.js:130
msgctxt "button" msgctxt "button"
msgid "Install &amp; Power Off" msgid "Install &amp; Power Off"
msgstr "Instalar e apagar" msgstr "Instalar e apagar"
#: ../js/ui/endSessionDialog.js:129 #: ../js/ui/endSessionDialog.js:131
msgctxt "checkbox" msgctxt "checkbox"
msgid "Power off after updates are installed" msgid "Power off after updates are installed"
msgstr "Apagar despois de instalar as anovacións" 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." msgid "Running on battery power: please plug in before installing updates."
msgstr "Con enerxía da batería: enchufar antes de instalar anovacións." 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." msgid "Some applications are busy or have unsaved work."
msgstr "Algúns aplicativos están ocupados ou teñen traballo sen gardar." 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." msgid "Other users are logged in."
msgstr "Hai outros usuarios conectados." msgstr "Hai outros usuarios conectados."
#. Translators: Remote here refers to a remote session, like a ssh login #. Translators: Remote here refers to a remote session, like a ssh login */
#: ../js/ui/endSessionDialog.js:640 #: ../js/ui/endSessionDialog.js:619
#, javascript-format #, javascript-format
msgid "%s (remote)" msgid "%s (remote)"
msgstr "%s (remoto)" msgstr "%s (remoto)"
#. Translators: Console here refers to a tty like a VT console #. Translators: Console here refers to a tty like a VT console */
#: ../js/ui/endSessionDialog.js:643 #: ../js/ui/endSessionDialog.js:622
#, javascript-format #, javascript-format
msgid "%s (console)" msgid "%s (console)"
msgstr "%s (consola)" msgstr "%s (consola)"
@@ -1184,7 +1151,7 @@ msgstr "Instalar"
msgid "Download and install “%s” from extensions.gnome.org?" msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "Desexa descargar e instalar «%s» desde 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" msgid "Keyboard"
msgstr "Teclado" msgstr "Teclado"
@@ -1192,7 +1159,7 @@ msgstr "Teclado"
msgid "No extensions installed" msgid "No extensions installed"
msgstr "Non hai ningunha extensión instalada" msgstr "Non hai ningunha extensión instalada"
#. Translators: argument is an extension UUID. #. Translators: argument is an extension UUID. */
#: ../js/ui/lookingGlass.js:697 #: ../js/ui/lookingGlass.js:697
#, javascript-format #, javascript-format
msgid "%s has not emitted any errors." msgid "%s has not emitted any errors."
@@ -1206,16 +1173,16 @@ msgstr "Ocultar erros"
msgid "Show Errors" msgid "Show Errors"
msgstr "Mostrar erros" msgstr "Mostrar erros"
#: ../js/ui/lookingGlass.js:716 ../js/ui/status/location.js:71 #: ../js/ui/lookingGlass.js:716 ../js/ui/status/location.js:62
#: ../js/ui/status/location.js:176 #: ../js/ui/status/location.js:166
msgid "Enabled" msgid "Enabled"
msgstr "Activado" msgstr "Activado"
#. Translators: this is for a network device that cannot be activated #. 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: #. translators:
#. * The device has been disabled #. * 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 #: ../js/ui/status/network.js:592 ../src/gvc/gvc-mixer-control.c:1830
msgid "Disabled" msgid "Disabled"
msgstr "Desactivado" msgstr "Desactivado"
@@ -1240,39 +1207,39 @@ msgstr "Ver fonte"
msgid "Web Page" msgid "Web Page"
msgstr "Páxina web" msgstr "Páxina web"
#: ../js/ui/messageTray.js:1327 #: ../js/ui/messageTray.js:1325
msgid "Open" msgid "Open"
msgstr "Abrir" msgstr "Abrir"
#: ../js/ui/messageTray.js:1334 #: ../js/ui/messageTray.js:1332
msgid "Remove" msgid "Remove"
msgstr "Retirar" msgstr "Retirar"
#: ../js/ui/messageTray.js:1631 #: ../js/ui/messageTray.js:1629
msgid "Notifications" msgid "Notifications"
msgstr "Notificacións" msgstr "Notificacións"
#: ../js/ui/messageTray.js:1638 #: ../js/ui/messageTray.js:1636
msgid "Clear Messages" msgid "Clear Messages"
msgstr "Limpar mensaxes" msgstr "Limpar mensaxes"
#: ../js/ui/messageTray.js:1657 #: ../js/ui/messageTray.js:1655
msgid "Notification Settings" msgid "Notification Settings"
msgstr "Preferencias das notificacións" msgstr "Preferencias das notificacións"
#: ../js/ui/messageTray.js:1710 #: ../js/ui/messageTray.js:1708
msgid "Tray Menu" msgid "Tray Menu"
msgstr "Menú da bandexa do sistema" msgstr "Menú da bandexa do sistema"
#: ../js/ui/messageTray.js:1934 #: ../js/ui/messageTray.js:1925
msgid "No Messages" msgid "No Messages"
msgstr "Non hai mensaxes" msgstr "Non hai mensaxes"
#: ../js/ui/messageTray.js:1979 #: ../js/ui/messageTray.js:1963
msgid "Message Tray" msgid "Message Tray"
msgstr "Bandexa de mensaxes" msgstr "Bandexa de mensaxes"
#: ../js/ui/messageTray.js:2992 #: ../js/ui/messageTray.js:2966
msgid "System Information" msgid "System Information"
msgstr "Información do sistema" msgstr "Información do sistema"
@@ -1299,8 +1266,8 @@ msgstr "Vista xeral"
#. Translators: this is the text displayed #. Translators: this is the text displayed
#. in the search entry when no search is #. in the search entry when no search is
#. active; it should not exceed ~30 #. active; it should not exceed ~30
#. characters. #. characters. */
#: ../js/ui/overview.js:246 #: ../js/ui/overview.js:250
msgid "Type to search…" msgid "Type to search…"
msgstr "Escriba para buscar…" msgstr "Escriba para buscar…"
@@ -1309,7 +1276,7 @@ msgid "Quit"
msgstr "Saír" msgstr "Saír"
#. Translators: If there is no suitable word for "Activities" #. 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 #: ../js/ui/panel.js:567
msgid "Activities" msgid "Activities"
msgstr "Actividades" msgstr "Actividades"
@@ -1318,11 +1285,6 @@ msgstr "Actividades"
msgid "Top Bar" msgid "Top Bar"
msgstr "Barra superior" 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 #: ../js/ui/popupMenu.js:269
msgid "toggle-switch-us" msgid "toggle-switch-us"
msgstr "toggle-switch-intl" msgstr "toggle-switch-intl"
@@ -1340,7 +1302,7 @@ msgid "Restarting…"
msgstr "Restimando…" msgstr "Restimando…"
#. Translators: This is a time format for a date in #. Translators: This is a time format for a date in
#. long format #. long format */
#: ../js/ui/screenShield.js:88 #: ../js/ui/screenShield.js:88
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%A, %d de %B" msgstr "%A, %d de %B"
@@ -1360,13 +1322,6 @@ msgstr "Bloquear"
msgid "GNOME needs to lock the screen" msgid "GNOME needs to lock the screen"
msgstr "GNOME precisa bloquear a pantalla" 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 #: ../js/ui/screenShield.js:833 ../js/ui/screenShield.js:1304
msgid "Unable to lock" msgid "Unable to lock"
msgstr "Non foi posíbel bloquear" msgstr "Non foi posíbel bloquear"
@@ -1375,27 +1330,27 @@ msgstr "Non foi posíbel bloquear"
msgid "Lock was blocked by an application" msgid "Lock was blocked by an application"
msgstr "Un aplicativo impediu o bloqueo" msgstr "Un aplicativo impediu o bloqueo"
#: ../js/ui/search.js:594 #: ../js/ui/search.js:606
msgid "Searching…" msgid "Searching…"
msgstr "Buscando…" msgstr "Buscando…"
#: ../js/ui/search.js:596 #: ../js/ui/search.js:652
msgid "No results." msgid "No results."
msgstr "Sen resultados." msgstr "Sen resultados."
#: ../js/ui/shellEntry.js:25 #: ../js/ui/shellEntry.js:27
msgid "Copy" msgid "Copy"
msgstr "Copiar" msgstr "Copiar"
#: ../js/ui/shellEntry.js:30 #: ../js/ui/shellEntry.js:32
msgid "Paste" msgid "Paste"
msgstr "Pegar" msgstr "Pegar"
#: ../js/ui/shellEntry.js:97 #: ../js/ui/shellEntry.js:99
msgid "Show Text" msgid "Show Text"
msgstr "Mostrar texto" msgstr "Mostrar texto"
#: ../js/ui/shellEntry.js:99 #: ../js/ui/shellEntry.js:101
msgid "Hide Text" msgid "Hide Text"
msgstr "Ocultar texto" msgstr "Ocultar texto"
@@ -1451,8 +1406,6 @@ msgstr "Contraste alto"
msgid "Large Text" msgid "Large Text"
msgstr "Texto grande" 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 #: ../js/ui/status/bluetooth.js:49
msgid "Bluetooth" msgid "Bluetooth"
msgstr "Bluetooth" msgstr "Bluetooth"
@@ -1483,27 +1436,23 @@ msgstr "Non conectado"
msgid "Brightness" msgid "Brightness"
msgstr "Brillo" msgstr "Brillo"
#: ../js/ui/status/keyboard.js:547 #: ../js/ui/status/keyboard.js:406
msgid "Show Keyboard Layout" msgid "Show Keyboard Layout"
msgstr "Mostrar a distribución do teclado" msgstr "Mostrar a distribución do teclado"
#: ../js/ui/status/location.js:65 #: ../js/ui/status/location.js:56
msgid "Location" msgid "Location"
msgstr "Localización" 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" msgid "Disable"
msgstr "Desactivar" msgstr "Desactivar"
#: ../js/ui/status/location.js:73 #: ../js/ui/status/location.js:166
msgid "Privacy Settings"
msgstr "Preferencias da privacidade"
#: ../js/ui/status/location.js:176
msgid "In Use" msgid "In Use"
msgstr "En uso" msgstr "En uso"
#: ../js/ui/status/location.js:180 #: ../js/ui/status/location.js:170
msgid "Enable" msgid "Enable"
msgstr "Activar" msgstr "Activar"
@@ -1521,7 +1470,7 @@ msgid "Connected"
msgstr "Conectado" msgstr "Conectado"
#. Translators: this is for network devices that are physically present but are not #. 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 #: ../js/ui/status/network.js:463
msgid "Unmanaged" msgid "Unmanaged"
msgstr "Sen xestionar" msgstr "Sen xestionar"
@@ -1534,19 +1483,19 @@ msgstr "Desconectando…"
msgid "Connecting" msgid "Connecting"
msgstr "Conectando" 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 #: ../js/ui/status/network.js:474
msgid "Authentication required" msgid "Authentication required"
msgstr "Requírese autenticación" msgstr "Requírese autenticación"
#. Translators: this is for devices that require some kind of firmware or kernel #. 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 #: ../js/ui/status/network.js:482
msgid "Firmware missing" msgid "Firmware missing"
msgstr "Falta o «firmware»" msgstr "Falta o «firmware»"
#. Translators: this is for a network device that cannot be activated (for example it #. 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 #: ../js/ui/status/network.js:486
msgid "Unavailable" msgid "Unavailable"
msgstr "Non dispoñíbel" msgstr "Non dispoñíbel"
@@ -1631,7 +1580,7 @@ msgstr "Punto wifi activo"
msgid "connecting..." msgid "connecting..."
msgstr "conectando…" 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 #: ../js/ui/status/network.js:1412
msgid "authentication required" msgid "authentication required"
msgstr "requírese autenticación" msgstr "requírese autenticación"
@@ -1668,19 +1617,15 @@ msgstr "Preferencias de enerxía"
msgid "Fully Charged" msgid "Fully Charged"
msgstr "Carga completa" 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 #: ../js/ui/status/power.js:72 ../js/ui/status/power.js:78
msgid "Estimating…" msgid "Estimating…"
msgstr "Estimando…" msgstr "Estimando…"
#. Translators: this is <hours>:<minutes> Remaining (<percentage>)
#: ../js/ui/status/power.js:86 #: ../js/ui/status/power.js:86
#, javascript-format #, javascript-format
msgid "%d%02d Remaining (%d%%)" msgid "%d%02d Remaining (%d%%)"
msgstr "Faltan %d:%02d (%d%%)" msgstr "Faltan %d:%02d (%d%%)"
#. Translators: this is <hours>:<minutes> Until Full (<percentage>)
#: ../js/ui/status/power.js:91 #: ../js/ui/status/power.js:91
#, javascript-format #, javascript-format
msgid "%d%02d Until Full (%d%%)" msgid "%d%02d Until Full (%d%%)"
@@ -1694,9 +1639,6 @@ msgstr "SAI"
msgid "Battery" msgid "Battery"
msgstr "Batería" 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 #: ../js/ui/status/rfkill.js:83
msgid "Airplane Mode" msgid "Airplane Mode"
msgstr "Modo avión" msgstr "Modo avión"
@@ -1745,11 +1687,11 @@ msgstr "Iniciar sesión como outro usuario"
msgid "Unlock Window" msgid "Unlock Window"
msgstr "Desbloquear xanela" msgstr "Desbloquear xanela"
#: ../js/ui/viewSelector.js:158 #: ../js/ui/viewSelector.js:232
msgid "Applications" msgid "Applications"
msgstr "Aplicativos" msgstr "Aplicativos"
#: ../js/ui/viewSelector.js:162 #: ../js/ui/viewSelector.js:236
msgid "Search" msgid "Search"
msgstr "Buscar" msgstr "Buscar"
@@ -1764,7 +1706,7 @@ msgstr "Desexa manter estas preferencias de pantalla?"
#. Translators: this and the following message should be limited in lenght, #. Translators: this and the following message should be limited in lenght,
#. to avoid ellipsizing the labels. #. to avoid ellipsizing the labels.
#. #. */
#: ../js/ui/windowManager.js:84 #: ../js/ui/windowManager.js:84
msgid "Revert Settings" msgid "Revert Settings"
msgstr "Reverter preferencias" msgstr "Reverter preferencias"
@@ -1846,21 +1788,21 @@ msgstr[1] "%u entradas"
msgid "System Sounds" msgid "System Sounds"
msgstr "Sons do sistema" msgstr "Sons do sistema"
#: ../src/main.c:373 #: ../src/main.c:371
msgid "Print version" msgid "Print version"
msgstr "Imprimir versión" msgstr "Imprimir versión"
#: ../src/main.c:379 #: ../src/main.c:377
msgid "Mode used by GDM for login screen" msgid "Mode used by GDM for login screen"
msgstr "Modo usado por GDM para a pantalla de inicio" 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" msgid "Use a specific mode, e.g. \"gdm\" for login screen"
msgstr "" msgstr ""
"Usar un modo específico, por exemplo, «gdm» para a pantalla de inicio de " "Usar un modo específico, por exemplo, «gdm» para a pantalla de inicio de "
"sesión" "sesión"
#: ../src/main.c:391 #: ../src/main.c:389
msgid "List possible modes" msgid "List possible modes"
msgstr "Listar os modos posíbeis" msgstr "Listar os modos posíbeis"

337
po/gu.po
View File

@@ -9,8 +9,8 @@ msgstr ""
"Project-Id-Version: gu\n" "Project-Id-Version: gu\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug." "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug."
"cgi?product=gnome-shell&keywords=I18N+L10N&component=general\n" "cgi?product=gnome-shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2014-10-01 07:39+0000\n" "POT-Creation-Date: 2014-08-26 07:37+0000\n"
"PO-Revision-Date: 2014-10-01 15:51+0530\n" "PO-Revision-Date: 2014-08-26 16:19+0530\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: American English <kde-i18n-doc@kde.org>\n" "Language-Team: American English <kde-i18n-doc@kde.org>\n"
"Language: \n" "Language: \n"
@@ -63,7 +63,7 @@ msgstr "GNOME Shell ઍક્સટેન્શનને રૂપરેખા
#: ../data/gnome-shell-wayland.desktop.in.in.h:1 #: ../data/gnome-shell-wayland.desktop.in.in.h:1
msgid "GNOME Shell (wayland compositor)" msgid "GNOME Shell (wayland compositor)"
msgstr "GNOME Shell (વેલૅન્ડ કંપોઝીટર)" msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.in.h:1 #: ../data/org.gnome.shell.gschema.xml.in.in.h:1
msgid "Enable internal tools useful for developers and testers from Alt-F2" msgid "Enable internal tools useful for developers and testers from Alt-F2"
@@ -76,10 +76,12 @@ msgid ""
msgstr "Alt-F2 સંવાદની મદદથી આંતરિક ડિબગીંગ અને મોનિટરીંગ સાધનોને વાપરવા પરવાનગી આપે છે." msgstr "Alt-F2 સંવાદની મદદથી આંતરિક ડિબગીંગ અને મોનિટરીંગ સાધનોને વાપરવા પરવાનગી આપે છે."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:3 #: ../data/org.gnome.shell.gschema.xml.in.in.h:3
#| msgid "Uuids of extensions to enable"
msgid "UUIDs of extensions to enable" msgid "UUIDs of extensions to enable"
msgstr "સક્રિય કરવા માટે એક્સટેન્શનનું UUIDs" msgstr "સક્રિય કરવા માટે એક્સટેન્શનનું UUIDs"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:4 #: ../data/org.gnome.shell.gschema.xml.in.in.h:4
#, fuzzy
#| msgid "" #| msgid ""
#| "GNOME Shell extensions have a uuid property; this key lists extensions " #| "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 " #| "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 " "list. You can also manipulate this list with the EnableExtension and "
"DisableExtension D-Bus methods on org.gnome.Shell." "DisableExtension D-Bus methods on org.gnome.Shell."
msgstr "" msgstr ""
"GNOME Shell ઍક્સટેન્શન પાસે UUID ગુણધર્મ છે; આ કી ઍક્સટેન્શનની યાદી કરે છે કે જેને લાવેલ હોવુ " "GNOME Shell ઍક્સટેન્શન પાસે uuid ગુણધર્મ છે; આ કી ઍક્સટેન્શનની યાદી કરે છે કે જેને લાવેલ હોવુ "
"જોઇએ. કોઇપણ ઍક્સટેન્શન કે જેને આ યાદીમાં લાવવાની જરૂર છે. તમે પણ org.gnome.Shell પર " "જોઇએ. કોઇપણ ઍક્સટેન્શન કે જેને આ યાદીમાં લાવવાની જરૂર છે. તમે પણ org.gnome.Shell પર "
"EnableExtension અને DisableExtension DBus પદ્દતિઓ સાથે આ યાદીને કુશળતાપૂર્વક વાપરી " "EnableExtension અને DisableExtension DBus પદ્દતિઓ સાથે આ યાદીને કુશળતાપૂર્વક વાપરી "
"શકો છો." "શકો છો."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:5 #: ../data/org.gnome.shell.gschema.xml.in.in.h:5
msgid "Disables the validation of extension version compatibility" msgid "Disables the validation of extension version compatibility"
msgstr "ઍક્સટેન્શન આવૃત્તિ સુસંગતતાની માન્યતાને નિષ્ક્રિય કરે છે" msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.in.h:6 #: ../data/org.gnome.shell.gschema.xml.in.in.h:6
msgid "" msgid ""
@@ -106,9 +108,6 @@ msgid ""
"running version. Enabling this option will disable this check and try to " "running version. Enabling this option will disable this check and try to "
"load all extensions regardless of the versions they claim to support." "load all extensions regardless of the versions they claim to support."
msgstr "" msgstr ""
"GNOME Shell એ ફક્ત ઍક્સટેન્શનને લાવશે કે જે હાલની ચાલતી આવૃત્તિને આધાર આપવા માટે દાવો કરે છે. "
"આ વિકલ્પને સક્રિય કરવાનું આ ચકાસણીને નિષ્ક્રિય કરશે અને આવૃત્તિને બાદ કરતા બધા ઍક્સટેન્શનને "
"લાવવાનો પ્રયત્ન કરે છે જે તેઓ આધાર આપવા માટે દાવો કરે છે."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:7 #: ../data/org.gnome.shell.gschema.xml.in.in.h:7
msgid "List of desktop file IDs for favorite applications" msgid "List of desktop file IDs for favorite applications"
@@ -122,11 +121,11 @@ msgstr "કાર્યક્રમો આ ઓળખકર્તાઓ સાથ
#: ../data/org.gnome.shell.gschema.xml.in.in.h:9 #: ../data/org.gnome.shell.gschema.xml.in.in.h:9
msgid "App Picker View" msgid "App Picker View"
msgstr "કાર્યક્રમ પસંદકર્તા દૃશ્ય" msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.in.h:10 #: ../data/org.gnome.shell.gschema.xml.in.in.h:10
msgid "Index of the currently selected view in the application picker." msgid "Index of the currently selected view in the application picker."
msgstr "કાર્યક્રમ પસંદકર્તામાં હાલમાં પસંદ થયેલ દૃશ્યની અનુક્રમણિકા." msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.in.h:11 #: ../data/org.gnome.shell.gschema.xml.in.in.h:11
msgid "History for command (Alt-F2) dialog" msgid "History for command (Alt-F2) dialog"
@@ -137,10 +136,13 @@ msgid "History for the looking glass dialog"
msgstr "ગ્લાસ સંવાદને જોવા માટે ઇતિહાસ" msgstr "ગ્લાસ સંવાદને જોવા માટે ઇતિહાસ"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13 #: ../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." msgid "Always show the 'Log out' menu item in the user menu."
msgstr "વપરાશકર્તા મેનુમાં હંમેશા 'બહાર નીકળો' મેનુ વસ્તુને બતાવ." msgstr "હંમેશા વપરાશકર્તા મેનુમાં 'બહાર નીકળો' મેનુવસ્તુને બતાવે છે."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14 #: ../data/org.gnome.shell.gschema.xml.in.in.h:14
#, fuzzy
#| msgid "" #| msgid ""
#| "This key overrides the automatic hiding of the 'Log out' menuitem in " #| "This key overrides the automatic hiding of the 'Log out' menuitem in "
#| "single-user, single-session situations." #| "single-user, single-session situations."
@@ -148,8 +150,7 @@ msgid ""
"This key overrides the automatic hiding of the 'Log out' menu item in single-" "This key overrides the automatic hiding of the 'Log out' menu item in single-"
"user, single-session situations." "user, single-session situations."
msgstr "" msgstr ""
"આ કી એકજ વપરાશકર્તા, એકજ-સત્ર પરિસ્થિતિઓમાં 'બહાર નીકળો' મેનુવસ્તુને આપમેળે છુપાવવા આ કીને " "આ કી એકજ વપરાશકર્તામાં 'બહાર નીકળો' મેનુવસ્તુને આપમેળે છુપાવવા આ કીને ઓવરરાઇડ કરવામાં "
"ઓવરરાઇડ કરવામાં "
"આવી છે." "આવી છે."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15 #: ../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 "પ્રવૃત્તિ ઝાંખીનાં \"કાર્યક્રમો બતાવો\" દૃશ્યને ખોલવા માટે કિબાઇન્ડીંગ." msgstr "પ્રવૃત્તિ ઝાંખીનાં \"કાર્યક્રમો બતાવો\" દૃશ્યને ખોલવા માટે કિબાઇન્ડીંગ."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23 #: ../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" msgid "Keybinding to open the overview"
msgstr "ઝાંખીને ખોલવા માટે કિબાઇન્ડીંગ" msgstr "\"કાર્યક્રમો બતાવો\" દૃશ્યને ખોલવા માટે કિબાઇન્ડીંગ"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24 #: ../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." msgid "Keybinding to open the Activities Overview."
msgstr "પ્રવૃત્તિ ઝાંખીને ખોલવા માટે કિબાઇન્ડીંગ" msgstr "\"કાર્યક્રમો બતાવો\" દૃશ્યને ખોલવા માટે કિબાઇન્ડીંગ"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25 #: ../data/org.gnome.shell.gschema.xml.in.in.h:25
msgid "Keybinding to toggle the visibility of the message tray" 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 #: ../data/org.gnome.shell.gschema.xml.in.in.h:29
msgid "Keybinding that pauses and resumes all running tweens, for debugging purposes" msgid "Keybinding that pauses and resumes all running tweens, for debugging purposes"
msgstr "કીબાઇન્ડીંગ કે જે બધી ચાલતી ટ્વીનને અટકાવે છે અને પાછુ લાવે છે, ડિબગીંગ હેતુઓ માટે" msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30 #: ../data/org.gnome.shell.gschema.xml.in.in.h:30
msgid "Which keyboard to use" msgid "Which keyboard to use"
@@ -229,15 +234,13 @@ msgstr "વાપરવા માટે કિબોર્ડનો પ્રક
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32 #: ../data/org.gnome.shell.gschema.xml.in.in.h:32
msgid "Limit switcher to current workspace." msgid "Limit switcher to current workspace."
msgstr "વર્તમાન કામ કરવાની જગ્યા માટે સ્વિચર મર્યાદિત કરી છે." msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33 #: ../data/org.gnome.shell.gschema.xml.in.in.h:33
msgid "" msgid ""
"If true, only applications that have windows on the current workspace are " "If true, only applications that have windows on the current workspace are "
"shown in the switcher. Otherwise, all applications are included." "shown in the switcher. Otherwise, all applications are included."
msgstr "" msgstr ""
"જો true હોય તો, ફક્ત કાર્યક્રમો કે જેની પાસે હાલની કાર્ય કરવાની જગ્યા પર વિન્ડો છે તે "
"સ્વીચરમાં બતાવેલ છે. નહિંતો, બધા કાર્યક્રમનો સમાવેલ છે."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34 #: ../data/org.gnome.shell.gschema.xml.in.in.h:34
msgid "The application icon mode." msgid "The application icon mode."
@@ -258,8 +261,6 @@ msgid ""
"If true, only windows from the current workspace are shown in the switcher. " "If true, only windows from the current workspace are shown in the switcher. "
"Otherwise, all windows are included." "Otherwise, all windows are included."
msgstr "" msgstr ""
"જો true હોય તો, હાલની કાર્ય કરવાની જગ્યામાંથી વિન્ડો સ્વીચરમાં બતાવેલ છે. નહિં તો, બધી "
"વિન્ડોને સમાવેલ છે."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37 #: ../data/org.gnome.shell.gschema.xml.in.in.h:37
msgid "Attach modal dialog to the parent window" msgid "Attach modal dialog to the parent window"
@@ -283,23 +284,24 @@ msgstr "ફક્ત પ્રાથમિક મોનિટર પર કા
#: ../data/org.gnome.shell.gschema.xml.in.in.h:42 #: ../data/org.gnome.shell.gschema.xml.in.in.h:42
msgid "Delay focus changes in mouse mode until the pointer stops moving" msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr "માઉસ સ્થિતિમાં ફેરફારો કરવામાં વિલંબ જ્યાં સુધી પોઇંટર ખસેડવાનું બંધ થાય" msgstr ""
#: ../data/org.gnome.Shell.PortalHelper.desktop.in.h:1 #: ../data/org.gnome.Shell.PortalHelper.desktop.in.h:1
msgid "Captive Portal" msgid "Captive Portal"
msgstr "કૅપ્ટીવ પોર્ટલ" msgstr ""
#: ../js/extensionPrefs/main.js:123 #: ../js/extensionPrefs/main.js:127
#, javascript-format #, javascript-format
msgid "There was an error loading the preferences dialog for %s:" msgid "There was an error loading the preferences dialog for %s:"
msgstr "ત્યાં %s માટે પસંદગી સંવાદને લાવવામાં ભૂલ હતી:" msgstr "ત્યાં %s માટે પસંદગી સંવાદને લાવવામાં ભૂલ હતી:"
#: ../js/extensionPrefs/main.js:155 #: ../js/extensionPrefs/main.js:159
#| msgid "Configure GNOME Shell Extensions"
msgid "GNOME Shell Extensions" msgid "GNOME Shell Extensions"
msgstr "GNOME Shell ઍક્સટેન્શન" msgstr "GNOME Shell ઍક્સટેન્શન"
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:143 #: ../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/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/network.js:915 #: ../js/ui/status/network.js:915
msgid "Cancel" msgid "Cancel"
@@ -320,6 +322,7 @@ msgid "Sign In"
msgstr "પ્રવેશો" msgstr "પ્રવેશો"
#: ../js/gdm/loginDialog.js:269 #: ../js/gdm/loginDialog.js:269
#| msgid "Switch Session"
msgid "Choose Session" msgid "Choose Session"
msgstr "સત્ર પસંદ કરો" msgstr "સત્ર પસંદ કરો"
@@ -358,48 +361,52 @@ msgid "Could not parse command:"
msgstr "આદેશનું પદચ્છેદન કરી શક્યા નથી:" msgstr "આદેશનું પદચ્છેદન કરી શક્યા નથી:"
#: ../js/misc/util.js:156 #: ../js/misc/util.js:156
#, javascript-format #, fuzzy, javascript-format
#| msgid "Execution of '%s' failed:"
msgid "Execution of “%s” failed:" msgid "Execution of “%s” failed:"
msgstr "%s ને અમલમાં મૂકવાનુ નિષ્ફળ:" msgstr "'%s' ને અમલમાં મૂકવાનુ નિષ્ફળ:"
#: ../js/portalHelper/main.js:85 #: ../js/portalHelper/main.js:85
#, fuzzy
#| msgid "Authentication Required"
msgid "Web Authentication Redirect" msgid "Web Authentication Redirect"
msgstr "વેબ સત્તાધિકરણ દિશામાન" msgstr "સત્તાધિકરણ જરૂરી"
#: ../js/ui/appDisplay.js:772 #: ../js/ui/appDisplay.js:660
msgid "Frequently used applications will appear here" msgid "Frequently used applications will appear here"
msgstr "વારંવાર વપરાતા કાર્યક્રમો અહિંયા દેખાશે" msgstr ""
#: ../js/ui/appDisplay.js:883 #: ../js/ui/appDisplay.js:771
msgid "Frequent" msgid "Frequent"
msgstr "સામાન્ય" msgstr "સામાન્ય"
#: ../js/ui/appDisplay.js:890 #: ../js/ui/appDisplay.js:778
msgid "All" msgid "All"
msgstr "બધા" msgstr "બધા"
#: ../js/ui/appDisplay.js:1790 #: ../js/ui/appDisplay.js:1650
msgid "New Window" msgid "New Window"
msgstr "નવી વિન્ડો" 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" msgid "Remove from Favorites"
msgstr "પસંદીદાઓ માંથી દૂર કરો" msgstr "પસંદીદાઓ માંથી દૂર કરો"
#: ../js/ui/appDisplay.js:1822 #: ../js/ui/appDisplay.js:1679
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "પસંદીદાને ઉમેરો" msgstr "પસંદીદાને ઉમેરો"
#: ../js/ui/appDisplay.js:1831 #: ../js/ui/appDisplay.js:1688
#| msgid "Show Text"
msgid "Show Details" msgid "Show Details"
msgstr "વિગતો બતાવો" msgstr "વિગતો બતાવો"
#: ../js/ui/appFavorites.js:132 #: ../js/ui/appFavorites.js:122
#, javascript-format #, javascript-format
msgid "%s has been added to your favorites." msgid "%s has been added to your favorites."
msgstr "%s ને તમારી પસંદીદામાં ઉમેરી દેવામાં આવ્યુ છે." msgstr "%s ને તમારી પસંદીદામાં ઉમેરી દેવામાં આવ્યુ છે."
#: ../js/ui/appFavorites.js:166 #: ../js/ui/appFavorites.js:156
#, javascript-format #, javascript-format
msgid "%s has been removed from your favorites." msgid "%s has been removed from your favorites."
msgstr "%s ને તમારી પસંદીદામાંથી દૂર કરી દેવામાં આવ્યુ છે." msgstr "%s ને તમારી પસંદીદામાંથી દૂર કરી દેવામાં આવ્યુ છે."
@@ -591,11 +598,11 @@ msgstr "%s સાથે ખોલો"
msgid "Eject" msgid "Eject"
msgstr "રદ કરો" 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:" msgid "Password:"
msgstr "પાસવર્ડ:" msgstr "પાસવર્ડ:"
#: ../js/ui/components/keyring.js:120 #: ../js/ui/components/keyring.js:113
msgid "Type again:" msgid "Type again:"
msgstr "ફરીથી પ્રયત્ન કરો:" msgstr "ફરીથી પ્રયત્ન કરો:"
@@ -633,11 +640,14 @@ msgid "Authentication required by wireless network"
msgstr "વાયરલેસ નેટવર્ક દ્દારાસત્તાધિકરણ જરૂરી" msgstr "વાયરલેસ નેટવર્ક દ્દારાસત્તાધિકરણ જરૂરી"
#: ../js/ui/components/networkAgent.js:319 #: ../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 "" msgid ""
"Passwords or encryption keys are required to access the wireless network " "Passwords or encryption keys are required to access the wireless network "
"“%s”." "“%s”."
msgstr "પાસવર્ડ અથવા એનક્રિપ્શન કીઓને વાયરલેસ નેટવર્ક %s માં પ્રવેશની જરૂર છે." msgstr "પાસવર્ડ અથવા એનક્રિપ્શન કીઓને વાયરલેસ નેટવર્ક '%s' માં પ્રવેશની જરૂર છે."
#: ../js/ui/components/networkAgent.js:323 #: ../js/ui/components/networkAgent.js:323
msgid "Wired 802.1X authentication" msgid "Wired 802.1X authentication"
@@ -669,6 +679,7 @@ msgstr "મોબાઇલ બ્રોડબેન્ડ નેટવર્ક
#: ../js/ui/components/networkAgent.js:346 #: ../js/ui/components/networkAgent.js:346
#, javascript-format #, javascript-format
#| msgid "A password is required to connect to '%s'."
msgid "A password is required to connect to “%s”." msgid "A password is required to connect to “%s”."
msgstr "પાસવર્ડ “%s” સાથે જોડાવા માટે જરૂરી છે." msgstr "પાસવર્ડ “%s” સાથે જોડાવા માટે જરૂરી છે."
@@ -724,12 +735,14 @@ msgstr "%H%M"
#. Translators: this is the word "Yesterday" followed by a #. 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 #: ../js/ui/components/telepathyClient.js:960
#| msgid "<b>Yesterday</b>, <b>%H:%M</b>"
msgid "Yesterday, %H%M" msgid "Yesterday, %H%M"
msgstr "ગઇ કાલે, %H:%M" msgstr "ગઇ કાલે, %H:%M"
#. Translators: this is the week day name followed by a time #. 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 #: ../js/ui/components/telepathyClient.js:967
#| msgid "%A, %B %d"
msgid "%A, %H%M" msgid "%A, %H%M"
msgstr "%A, %H%M" msgstr "%A, %H%M"
@@ -749,6 +762,8 @@ msgstr "%B %d %Y, %H%M"
#. Translators: Time in 24h format */ #. Translators: Time in 24h format */
#: ../js/ui/components/telepathyClient.js:986 #: ../js/ui/components/telepathyClient.js:986
#| msgctxt "event list time"
#| msgid "%l:%M %p"
msgid "%l%M %p" msgid "%l%M %p"
msgstr "%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 #. 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 #: ../js/ui/components/telepathyClient.js:1000
#| msgid "%a %l:%M %p"
msgid "%A, %l%M %p" msgid "%A, %l%M %p"
msgstr "%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. #. 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 #: ../js/ui/components/telepathyClient.js:1007
#| msgid "%a %b %e, %l:%M %p"
msgid "%B %d, %l%M %p" msgid "%B %d, %l%M %p"
msgstr "%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. #. 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 #: ../js/ui/components/telepathyClient.js:1013
#| msgid "%a %b %e, %l:%M %p"
msgid "%B %d %Y, %l%M %p" msgid "%B %d %Y, %l%M %p"
msgstr "%B %d %Y, %l%M %p" msgstr "%B %d %Y, %l%M %p"
@@ -961,7 +979,7 @@ msgstr "ખાતામાં જુઓ"
msgid "Unknown reason" msgid "Unknown reason"
msgstr "અજ્ઞાત કારણ" msgstr "અજ્ઞાત કારણ"
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:154 #: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:228
msgid "Windows" msgid "Windows"
msgstr "વિન્ડો" msgstr "વિન્ડો"
@@ -992,129 +1010,132 @@ msgstr "તારીખ અને સમય સુયોજનો"
msgid "%A %B %e, %Y" msgid "%A %B %e, %Y"
msgstr "%A %B %e, %Y" msgstr "%A %B %e, %Y"
#: ../js/ui/endSessionDialog.js:64 #: ../js/ui/endSessionDialog.js:66
#, javascript-format #, javascript-format
msgctxt "title" msgctxt "title"
msgid "Log Out %s" msgid "Log Out %s"
msgstr "%s માંથી બહાર નીકળો" msgstr "%s માંથી બહાર નીકળો"
#: ../js/ui/endSessionDialog.js:65 #: ../js/ui/endSessionDialog.js:67
msgctxt "title" msgctxt "title"
msgid "Log Out" msgid "Log Out"
msgstr "બહાર નીકળો" msgstr "બહાર નીકળો"
#: ../js/ui/endSessionDialog.js:67 #: ../js/ui/endSessionDialog.js:69
#, javascript-format #, javascript-format
msgid "%s will be logged out automatically in %d second." msgid "%s will be logged out automatically in %d second."
msgid_plural "%s will be logged out automatically in %d seconds." msgid_plural "%s will be logged out automatically in %d seconds."
msgstr[0] "%s એ %d સેકંડમાં આપમેળે બહાર નીકળી જશે." msgstr[0] "%s એ %d સેકંડમાં આપમેળે બહાર નીકળી જશે."
msgstr[1] "%s એ %d સેકંડોમાં આપમેળે બહાર નીકળી જશે." msgstr[1] "%s એ %d સેકંડોમાં આપમેળે બહાર નીકળી જશે."
#: ../js/ui/endSessionDialog.js:72 #: ../js/ui/endSessionDialog.js:74
#, javascript-format #, javascript-format
msgid "You will be logged out automatically in %d second." msgid "You will be logged out automatically in %d second."
msgid_plural "You will be logged out automatically in %d seconds." msgid_plural "You will be logged out automatically in %d seconds."
msgstr[0] "તમે %d સેકંડમાં આપમેળે બહાર નીકળી જશે." msgstr[0] "તમે %d સેકંડમાં આપમેળે બહાર નીકળી જશે."
msgstr[1] "તમે %d સેકંડોમાં આપમેળે બહાર નીકળી જશે." msgstr[1] "તમે %d સેકંડોમાં આપમેળે બહાર નીકળી જશે."
#: ../js/ui/endSessionDialog.js:78 #: ../js/ui/endSessionDialog.js:80
msgctxt "button" msgctxt "button"
msgid "Log Out" msgid "Log Out"
msgstr "બહાર નીકળો" msgstr "બહાર નીકળો"
#: ../js/ui/endSessionDialog.js:84 #: ../js/ui/endSessionDialog.js:86
msgctxt "title" msgctxt "title"
msgid "Power Off" msgid "Power Off"
msgstr "પાવર બંધ" msgstr "પાવર બંધ"
#: ../js/ui/endSessionDialog.js:85 #: ../js/ui/endSessionDialog.js:87
#, fuzzy
#| msgid "Install Updates & Restart"
msgctxt "title" msgctxt "title"
msgid "Install Updates & Power Off" msgid "Install Updates & Power Off"
msgstr "સુધારા સ્થાપિત કરો અને પાવર બંધ કરો" msgstr "સુધારા સ્થાપિત કરો અને પુન:શરૂ કરો"
#: ../js/ui/endSessionDialog.js:87 #: ../js/ui/endSessionDialog.js:89
#, javascript-format #, javascript-format
msgid "The system will power off automatically in %d second." msgid "The system will power off automatically in %d second."
msgid_plural "The system will power off automatically in %d seconds." msgid_plural "The system will power off automatically in %d seconds."
msgstr[0] "સિસ્ટમ %d સેકંડમાં આપમેળે પાવર બંધ થઇ જશે." msgstr[0] "સિસ્ટમ %d સેકંડમાં આપમેળે પાવર બંધ થઇ જશે."
msgstr[1] "સિસ્ટમ %d સેકંડમાં આપમેળે પાવર બંધ થઇ જશે." msgstr[1] "સિસ્ટમ %d સેકંડમાં આપમેળે પાવર બંધ થઇ જશે."
#: ../js/ui/endSessionDialog.js:91 #: ../js/ui/endSessionDialog.js:93
msgctxt "checkbox" msgctxt "checkbox"
msgid "Install pending software updates" 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" msgctxt "button"
msgid "Restart" msgid "Restart"
msgstr "પુન:શરૂ કરો" msgstr "પુન:શરૂ કરો"
#: ../js/ui/endSessionDialog.js:96 #: ../js/ui/endSessionDialog.js:98
msgctxt "button" msgctxt "button"
msgid "Power Off" msgid "Power Off"
msgstr "પાવર બંધ" msgstr "પાવર બંધ"
#: ../js/ui/endSessionDialog.js:103 #: ../js/ui/endSessionDialog.js:105
msgctxt "title" msgctxt "title"
msgid "Restart" msgid "Restart"
msgstr "પુન:શરૂ કરો" msgstr "પુન:શરૂ કરો"
#: ../js/ui/endSessionDialog.js:105 #: ../js/ui/endSessionDialog.js:107
#, javascript-format #, javascript-format
msgid "The system will restart automatically in %d second." msgid "The system will restart automatically in %d second."
msgid_plural "The system will restart automatically in %d seconds." msgid_plural "The system will restart automatically in %d seconds."
msgstr[0] "સિસ્ટમ %d સેકંડમાં આપમેળે પુન:શરૂ થઇ જશે." msgstr[0] "સિસ્ટમ %d સેકંડમાં આપમેળે પુન:શરૂ થઇ જશે."
msgstr[1] "સિસ્ટમ %d સેકંડોમાં આપમેળે પુન:શરૂ થઇ જશે." msgstr[1] "સિસ્ટમ %d સેકંડોમાં આપમેળે પુન:શરૂ થઇ જશે."
#: ../js/ui/endSessionDialog.js:119 #: ../js/ui/endSessionDialog.js:121
#| msgid "Install Updates & Restart"
msgctxt "title" msgctxt "title"
msgid "Restart & Install Updates" msgid "Restart & Install Updates"
msgstr "સુધારા સ્થાપિત કરો અને પુન:શરૂ કરો" msgstr "સુધારા સ્થાપિત કરો અને પુન:શરૂ કરો"
#: ../js/ui/endSessionDialog.js:121 #: ../js/ui/endSessionDialog.js:123
#, javascript-format #, fuzzy, javascript-format
#| msgid "The system will restart automatically in %d second." #| msgid "The system will restart automatically in %d second."
#| msgid_plural "The system will restart automatically in %d seconds." #| msgid_plural "The system will restart automatically in %d seconds."
msgid "The system will automatically restart and install updates in %d second." 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." msgid_plural "The system will automatically restart and install updates in %d seconds."
msgstr[0] "સિસ્ટમ %d સેકંડમાં આપમેળે સુધારાઓને પુન:શરૂ અને સ્થાપિત કરશે." msgstr[0] "સિસ્ટમ %d સેકંડમાં આપમેળે પુન:શરૂ થઇ જશે."
msgstr[1] "સિસ્ટમ %d સેકંડોમાં આપમેળે સુધારાઓને પુન:શરૂ અને સ્થાપિત કરશે." msgstr[1] "સિસ્ટમ %d સેકંડોમાં આપમેળે પુન:શરૂ થઇ જશે."
#: ../js/ui/endSessionDialog.js:127
msgctxt "button"
msgid "Restart &amp; Install"
msgstr "પુન:શરૂ કરો અને સ્થાપિત કરો"
#: ../js/ui/endSessionDialog.js:128
msgctxt "button"
msgid "Install &amp; Power Off"
msgstr "સ્થાપિત કરો અને પાવર બંધ "
#: ../js/ui/endSessionDialog.js:129 #: ../js/ui/endSessionDialog.js:129
msgctxt "button"
msgid "Restart &amp; Install"
msgstr ""
#: ../js/ui/endSessionDialog.js:130
msgctxt "button"
msgid "Install &amp; Power Off"
msgstr ""
#: ../js/ui/endSessionDialog.js:131
msgctxt "checkbox" msgctxt "checkbox"
msgid "Power off after updates are installed" 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." 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." 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." msgid "Other users are logged in."
msgstr "બીજા વપરાશકર્તાઓ પ્રવેશેલ છે." msgstr "બીજા વપરાશકર્તાઓ પ્રવેશેલ છે."
#. Translators: Remote here refers to a remote session, like a ssh login */ #. Translators: Remote here refers to a remote session, like a ssh login */
#: ../js/ui/endSessionDialog.js:640 #: ../js/ui/endSessionDialog.js:619
#, javascript-format #, javascript-format
msgid "%s (remote)" msgid "%s (remote)"
msgstr "%s (દૂરસ્થ)" msgstr "%s (દૂરસ્થ)"
#. Translators: Console here refers to a tty like a VT console */ #. Translators: Console here refers to a tty like a VT console */
#: ../js/ui/endSessionDialog.js:643 #: ../js/ui/endSessionDialog.js:622
#, javascript-format #, javascript-format
msgid "%s (console)" msgid "%s (console)"
msgstr "%s (કન્સોલ)" msgstr "%s (કન્સોલ)"
@@ -1124,11 +1145,12 @@ msgid "Install"
msgstr "સ્થાપિત કરો" msgstr "સ્થાપિત કરો"
#: ../js/ui/extensionDownloader.js:204 #: ../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?" 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" msgid "Keyboard"
msgstr "કિબોર્ડ" msgstr "કિબોર્ડ"
@@ -1150,8 +1172,8 @@ msgstr "ભૂલો છુપાડો"
msgid "Show Errors" msgid "Show Errors"
msgstr "ભૂલો બતાવો" msgstr "ભૂલો બતાવો"
#: ../js/ui/lookingGlass.js:716 ../js/ui/status/location.js:71 #: ../js/ui/lookingGlass.js:716 ../js/ui/status/location.js:62
#: ../js/ui/status/location.js:176 #: ../js/ui/status/location.js:166
msgid "Enabled" msgid "Enabled"
msgstr "સક્રિય" msgstr "સક્રિય"
@@ -1159,7 +1181,7 @@ msgstr "સક્રિય"
#. because it's disabled by rfkill (airplane mode) */ #. because it's disabled by rfkill (airplane mode) */
#. translators: #. translators:
#. * The device has been disabled #. * 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 #: ../js/ui/status/network.js:592 ../src/gvc/gvc-mixer-control.c:1830
msgid "Disabled" msgid "Disabled"
msgstr "નિષ્ક્રિય" msgstr "નિષ્ક્રિય"
@@ -1184,39 +1206,39 @@ msgstr "સ્ત્રોત દર્શાવો"
msgid "Web Page" msgid "Web Page"
msgstr "વેબ પાનું" msgstr "વેબ પાનું"
#: ../js/ui/messageTray.js:1327 #: ../js/ui/messageTray.js:1325
msgid "Open" msgid "Open"
msgstr "ખોલો" msgstr "ખોલો"
#: ../js/ui/messageTray.js:1334 #: ../js/ui/messageTray.js:1332
msgid "Remove" msgid "Remove"
msgstr "દૂર કરો" msgstr "દૂર કરો"
#: ../js/ui/messageTray.js:1631 #: ../js/ui/messageTray.js:1629
msgid "Notifications" msgid "Notifications"
msgstr "સૂચનાઓ" msgstr "સૂચનાઓ"
#: ../js/ui/messageTray.js:1638 #: ../js/ui/messageTray.js:1636
msgid "Clear Messages" msgid "Clear Messages"
msgstr "સંદેશા સાફ કરો" msgstr "સંદેશા સાફ કરો"
#: ../js/ui/messageTray.js:1657 #: ../js/ui/messageTray.js:1655
msgid "Notification Settings" msgid "Notification Settings"
msgstr "સૂચના સુયોજનો" msgstr "સૂચના સુયોજનો"
#: ../js/ui/messageTray.js:1710 #: ../js/ui/messageTray.js:1708
msgid "Tray Menu" msgid "Tray Menu"
msgstr "ટ્રે મેનુ" msgstr ""
#: ../js/ui/messageTray.js:1934 #: ../js/ui/messageTray.js:1925
msgid "No Messages" msgid "No Messages"
msgstr "સંદેશા નથી" msgstr "સંદેશા નથી"
#: ../js/ui/messageTray.js:1979 #: ../js/ui/messageTray.js:1963
msgid "Message Tray" msgid "Message Tray"
msgstr "સંદેશો ટ્રે" msgstr "સંદેશો ટ્રે"
#: ../js/ui/messageTray.js:2992 #: ../js/ui/messageTray.js:2966
msgid "System Information" msgid "System Information"
msgstr "સિસ્ટમ જાણકારી" msgstr "સિસ્ટમ જાણકારી"
@@ -1244,7 +1266,7 @@ msgstr "ઝાંખી"
#. in the search entry when no search is #. in the search entry when no search is
#. active; it should not exceed ~30 #. active; it should not exceed ~30
#. characters. */ #. characters. */
#: ../js/ui/overview.js:246 #: ../js/ui/overview.js:250
msgid "Type to search…" msgid "Type to search…"
msgstr "શોધવા માટે ટાઇપ કરો..." msgstr "શોધવા માટે ટાઇપ કરો..."
@@ -1275,6 +1297,7 @@ msgid "Close"
msgstr "બંધ કરો" msgstr "બંધ કરો"
#: ../js/ui/runDialog.js:277 #: ../js/ui/runDialog.js:277
#| msgid "Estimating…"
msgid "Restarting…" msgid "Restarting…"
msgstr "પુન:શરૂ કરી રહ્યા છે…" msgstr "પુન:શરૂ કરી રહ્યા છે…"
@@ -1307,27 +1330,27 @@ msgstr "તાળુ મારવામાં અસમર્થ"
msgid "Lock was blocked by an application" msgid "Lock was blocked by an application"
msgstr "તાળુ કાર્યક્રમ દ્દારા બ્લોક થયેલ છે" msgstr "તાળુ કાર્યક્રમ દ્દારા બ્લોક થયેલ છે"
#: ../js/ui/search.js:607 #: ../js/ui/search.js:606
msgid "Searching…" msgid "Searching…"
msgstr "શોધી રહ્યા છે..." msgstr "શોધી રહ્યા છે..."
#: ../js/ui/search.js:609 #: ../js/ui/search.js:652
msgid "No results." msgid "No results."
msgstr "પરિણામો નથી." msgstr "પરિણામો નથી."
#: ../js/ui/shellEntry.js:25 #: ../js/ui/shellEntry.js:27
msgid "Copy" msgid "Copy"
msgstr "નકલ કરો" msgstr "નકલ કરો"
#: ../js/ui/shellEntry.js:30 #: ../js/ui/shellEntry.js:32
msgid "Paste" msgid "Paste"
msgstr "ચોંટાડો" msgstr "ચોંટાડો"
#: ../js/ui/shellEntry.js:97 #: ../js/ui/shellEntry.js:99
msgid "Show Text" msgid "Show Text"
msgstr "લખાણ બતાવો" msgstr "લખાણ બતાવો"
#: ../js/ui/shellEntry.js:99 #: ../js/ui/shellEntry.js:101
msgid "Hide Text" msgid "Hide Text"
msgstr "લખાણ છુપાડો" msgstr "લખાણ છુપાડો"
@@ -1399,13 +1422,15 @@ msgid "Bluetooth Settings"
msgstr "બ્લુટુથ સુયોજનો" msgstr "બ્લુટુથ સુયોજનો"
#: ../js/ui/status/bluetooth.js:104 #: ../js/ui/status/bluetooth.js:104
#, javascript-format #, fuzzy, javascript-format
#| msgid "Connected (private)"
msgid "%d Connected Device" msgid "%d Connected Device"
msgid_plural "%d Connected Devices" msgid_plural "%d Connected Devices"
msgstr[0] "%d જોડાયેલ ઉપકરણ" msgstr[0] "જોડાયેલ (ખાનગી)"
msgstr[1] "%d જોડાયેલ ઉપકરણો" msgstr[1] "જોડાયેલ (ખાનગી)"
#: ../js/ui/status/bluetooth.js:106 ../js/ui/status/network.js:1309 #: ../js/ui/status/bluetooth.js:106 ../js/ui/status/network.js:1309
#| msgid "Connect"
msgid "Not Connected" msgid "Not Connected"
msgstr "જોડાયેલ નથી" msgstr "જોડાયેલ નથી"
@@ -1413,28 +1438,26 @@ msgstr "જોડાયેલ નથી"
msgid "Brightness" msgid "Brightness"
msgstr "તેજસ્વિતા" msgstr "તેજસ્વિતા"
#: ../js/ui/status/keyboard.js:547 #: ../js/ui/status/keyboard.js:406
msgid "Show Keyboard Layout" msgid "Show Keyboard Layout"
msgstr "કીબોર્ડ લેઆઉટને બતાવો" msgstr "કીબોર્ડ લેઆઉટને બતાવો"
#: ../js/ui/status/location.js:65 #: ../js/ui/status/location.js:56
#| msgid "Notifications"
msgid "Location" msgid "Location"
msgstr "સ્થાન" 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" msgid "Disable"
msgstr "નિષ્ક્રિય" msgstr "નિષ્ક્રિય"
#: ../js/ui/status/location.js:73 #: ../js/ui/status/location.js:166
#| msgid "Power Settings"
msgid "Privacy Settings"
msgstr "ખાનગી સુયોજનો"
#: ../js/ui/status/location.js:176
msgid "In Use" msgid "In Use"
msgstr "વપરાશમાં" msgstr "વપરાશમાં"
#: ../js/ui/status/location.js:180 #: ../js/ui/status/location.js:170
#| msgid "Enabled"
msgid "Enable" msgid "Enable"
msgstr "સક્રિય" msgstr "સક્રિય"
@@ -1444,35 +1467,42 @@ msgstr "<અજ્ઞાત>"
#: ../js/ui/status/network.js:457 ../js/ui/status/network.js:1307 #: ../js/ui/status/network.js:457 ../js/ui/status/network.js:1307
#: ../js/ui/status/network.js:1511 #: ../js/ui/status/network.js:1511
#| msgid "Offline"
msgid "Off" msgid "Off"
msgstr "બંધ" msgstr "બંધ"
#: ../js/ui/status/network.js:459 #: ../js/ui/status/network.js:459
#| msgid "Connect"
msgid "Connected" msgid "Connected"
msgstr "જોડાયેલ" msgstr "જોડાયેલ"
#. Translators: this is for network devices that are physically present but are not #. 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 #: ../js/ui/status/network.js:463
#| msgid "unmanaged"
msgid "Unmanaged" msgid "Unmanaged"
msgstr "સંચાલિત થયેલ નથી" msgstr "સંચાલિત થયેલ નથી"
#: ../js/ui/status/network.js:465 #: ../js/ui/status/network.js:465
#| msgid "disconnecting..."
msgid "Disconnecting" msgid "Disconnecting"
msgstr "જોડાઇ તૂટી રહ્યુ છે" msgstr "જોડાઇ તૂટી રહ્યુ છે"
#: ../js/ui/status/network.js:471 ../js/ui/status/network.js:1301 #: ../js/ui/status/network.js:471 ../js/ui/status/network.js:1301
#| msgid "Connection"
msgid "Connecting" msgid "Connecting"
msgstr "જોડાઇ રહ્યા છે" msgstr "જોડાઇ રહ્યા છે"
#. Translators: this is for network connections that require some kind of key or password */ #. Translators: this is for network connections that require some kind of key or password */
#: ../js/ui/status/network.js:474 #: ../js/ui/status/network.js:474
#| msgid "authentication required"
msgid "Authentication required" msgid "Authentication required"
msgstr "સત્તાધિકરણ જરૂરી" msgstr "સત્તાધિકરણ જરૂરી"
#. Translators: this is for devices that require some kind of firmware or kernel #. 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 #: ../js/ui/status/network.js:482
#| msgid "firmware missing"
msgid "Firmware missing" msgid "Firmware missing"
msgstr "ફર્મવેર ગેરહાજર" msgstr "ફર્મવેર ગેરહાજર"
@@ -1487,32 +1517,36 @@ msgid "Connection failed"
msgstr "જોડાણ નિષ્ફળ" msgstr "જોડાણ નિષ્ફળ"
#: ../js/ui/status/network.js:504 #: ../js/ui/status/network.js:504
#, fuzzy
#| msgid "Settings"
msgid "Wired Settings" msgid "Wired Settings"
msgstr "વાયર થયેલ સુયોજનો" msgstr "સુયોજનો"
#: ../js/ui/status/network.js:546 ../js/ui/status/network.js:624 #: ../js/ui/status/network.js:546 ../js/ui/status/network.js:624
#| msgid "Mobile broadband"
msgid "Mobile Broadband Settings" msgid "Mobile Broadband Settings"
msgstr "મોબાઇલ બ્રોડબેન્ડ સુયોજનો" msgstr "મોબાઇલ બ્રોડબેન્ડ સુયોજનો"
#: ../js/ui/status/network.js:588 ../js/ui/status/network.js:1305 #: ../js/ui/status/network.js:588 ../js/ui/status/network.js:1305
#| msgid "hardware disabled"
msgid "Hardware Disabled" msgid "Hardware Disabled"
msgstr "હાર્ડવેર નિષ્ક્રિય" msgstr "હાર્ડવેર નિષ્ક્રિય"
#: ../js/ui/status/network.js:632 #: ../js/ui/status/network.js:632
msgid "Use as Internet connection" msgid "Use as Internet connection"
msgstr "ઇન્ટરનેટ જોડાણ તરીકે વાપરો" msgstr ""
#: ../js/ui/status/network.js:813 #: ../js/ui/status/network.js:813
msgid "Airplane Mode is On" msgid "Airplane Mode is On"
msgstr "ઍરપ્લેન સ્થિતિ ચાલુ છે" msgstr ""
#: ../js/ui/status/network.js:814 #: ../js/ui/status/network.js:814
msgid "Wi-Fi is disabled when airplane mode is on." msgid "Wi-Fi is disabled when airplane mode is on."
msgstr "Wi-Fi નિષ્ક્રિય થયેલ છે જ્યારે ઍરપ્લેન સ્થિતિ ચાલુ હોય." msgstr ""
#: ../js/ui/status/network.js:815 #: ../js/ui/status/network.js:815
msgid "Turn Off Airplane Mode" msgid "Turn Off Airplane Mode"
msgstr "ઍરપ્લેન સ્થિતિને બંધ કરો" msgstr ""
#: ../js/ui/status/network.js:824 #: ../js/ui/status/network.js:824
msgid "Wi-Fi is Off" msgid "Wi-Fi is Off"
@@ -1520,33 +1554,38 @@ msgstr "Wi-Fi બંધ છે"
#: ../js/ui/status/network.js:825 #: ../js/ui/status/network.js:825
msgid "Wi-Fi needs to be turned on in order to connect to a network." 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 #: ../js/ui/status/network.js:826
msgid "Turn On Wi-Fi" msgid "Turn On Wi-Fi"
msgstr "Wi-Fi ચાલુ કરો" msgstr ""
#: ../js/ui/status/network.js:851 #: ../js/ui/status/network.js:851
#| msgid "Network"
msgid "Wi-Fi Networks" msgid "Wi-Fi Networks"
msgstr "Wi-Fi નેટવર્ક" msgstr "Wi-Fi નેટવર્ક"
#: ../js/ui/status/network.js:853 #: ../js/ui/status/network.js:853
#| msgid "Enable networking"
msgid "Select a network" msgid "Select a network"
msgstr "નેટવર્ક પસંદ કરો" msgstr "નેટવર્ક પસંદ કરો"
#: ../js/ui/status/network.js:882 #: ../js/ui/status/network.js:882
#| msgid "Network"
msgid "No Networks" msgid "No Networks"
msgstr "નેટવર્ક નથી" msgstr "નેટવર્ક નથી"
#: ../js/ui/status/network.js:903 ../js/ui/status/rfkill.js:112 #: ../js/ui/status/network.js:903 ../js/ui/status/rfkill.js:112
msgid "Use hardware switch to turn off" msgid "Use hardware switch to turn off"
msgstr "બંધ કરવા માટે હાર્ડવેર સ્વીચને વાપરો" msgstr ""
#: ../js/ui/status/network.js:1173 #: ../js/ui/status/network.js:1173
#| msgid "Network"
msgid "Select Network" msgid "Select Network"
msgstr "નેટવર્ક પસંદ કરો" msgstr "નેટવર્ક પસંદ કરો"
#: ../js/ui/status/network.js:1179 #: ../js/ui/status/network.js:1179
#| msgid "Settings"
msgid "Wi-Fi Settings" msgid "Wi-Fi Settings"
msgstr "Wi-Fi સુયોજનો" msgstr "Wi-Fi સુયોજનો"
@@ -1556,7 +1595,7 @@ msgstr "ચાલુ કરો"
#: ../js/ui/status/network.js:1298 #: ../js/ui/status/network.js:1298
msgid "Hotspot Active" msgid "Hotspot Active"
msgstr "હૉટસ્પોટ સક્રિય" msgstr ""
#: ../js/ui/status/network.js:1409 #: ../js/ui/status/network.js:1409
msgid "connecting..." msgid "connecting..."
@@ -1576,6 +1615,7 @@ msgid "Network Settings"
msgstr "નેટવર્ક સુયોજનો" msgstr "નેટવર્ક સુયોજનો"
#: ../js/ui/status/network.js:1482 #: ../js/ui/status/network.js:1482
#| msgid "Settings"
msgid "VPN Settings" msgid "VPN Settings"
msgstr "VPN સુયોજનો" msgstr "VPN સુયોજનો"
@@ -1606,12 +1646,12 @@ msgstr "અંદાજ કરી રહ્યા છે..."
#: ../js/ui/status/power.js:86 #: ../js/ui/status/power.js:86
#, javascript-format #, javascript-format
msgid "%d%02d Remaining (%d%%)" msgid "%d%02d Remaining (%d%%)"
msgstr "%d%02d બાકી રહેલ છે (%d%%)" msgstr ""
#: ../js/ui/status/power.js:91 #: ../js/ui/status/power.js:91
#, javascript-format #, javascript-format
msgid "%d%02d Until Full (%d%%)" msgid "%d%02d Until Full (%d%%)"
msgstr "%d%02d જ્યાં સુધી સંપૂર્ણ થાય (%d%%)" msgstr ""
#: ../js/ui/status/power.js:119 #: ../js/ui/status/power.js:119
msgid "UPS" msgid "UPS"
@@ -1623,9 +1663,10 @@ msgstr "બેટરી"
#: ../js/ui/status/rfkill.js:83 #: ../js/ui/status/rfkill.js:83
msgid "Airplane Mode" msgid "Airplane Mode"
msgstr "ઍરપ્લેન સ્થિતિ" msgstr ""
#: ../js/ui/status/rfkill.js:85 #: ../js/ui/status/rfkill.js:85
#| msgid "Open"
msgid "On" msgid "On"
msgstr "ચાલુ" msgstr "ચાલુ"
@@ -1639,7 +1680,7 @@ msgstr "બહાર નીકળો"
#: ../js/ui/status/system.js:341 #: ../js/ui/status/system.js:341
msgid "Orientation Lock" msgid "Orientation Lock"
msgstr "દિશા તાળુ" msgstr ""
#: ../js/ui/status/system.js:349 #: ../js/ui/status/system.js:349
msgid "Suspend" msgid "Suspend"
@@ -1669,40 +1710,43 @@ msgstr "બીજા વપરાશકર્તા તરીકે પ્રવ
msgid "Unlock Window" msgid "Unlock Window"
msgstr "વિન્ડોનું તાળુ ખોલો" msgstr "વિન્ડોનું તાળુ ખોલો"
#: ../js/ui/viewSelector.js:158 #: ../js/ui/viewSelector.js:232
msgid "Applications" msgid "Applications"
msgstr "કાર્યક્રમો" msgstr "કાર્યક્રમો"
#: ../js/ui/viewSelector.js:162 #: ../js/ui/viewSelector.js:236
msgid "Search" msgid "Search"
msgstr "શોધો" msgstr "શોધો"
#: ../js/ui/windowAttentionHandler.js:19 #: ../js/ui/windowAttentionHandler.js:19
#, javascript-format #, javascript-format
#| msgid "'%s' is ready"
msgid "“%s” is ready" msgid "“%s” is ready"
msgstr "“%s” તૈયાર છે" msgstr "“%s” તૈયાર છે"
#: ../js/ui/windowManager.js:65 #: ../js/ui/windowManager.js:65
msgid "Do you want to keep these display settings?" msgid "Do you want to keep these display settings?"
msgstr "શું તમને આ દર્શાવ સુયોજનોને રાખવા માંગો છો?ે" msgstr ""
#. Translators: this and the following message should be limited in lenght, #. Translators: this and the following message should be limited in lenght,
#. to avoid ellipsizing the labels. #. to avoid ellipsizing the labels.
#. */ #. */
#: ../js/ui/windowManager.js:84 #: ../js/ui/windowManager.js:84
#, fuzzy
#| msgid "Power Settings"
msgid "Revert Settings" msgid "Revert Settings"
msgstr "સુયોજનોને પાછા લાવો" msgstr "પાવર સુયોજનો"
#: ../js/ui/windowManager.js:88 #: ../js/ui/windowManager.js:88
msgid "Keep Changes" msgid "Keep Changes"
msgstr "ફેરફારો કરો" msgstr ""
#: ../js/ui/windowManager.js:107 #: ../js/ui/windowManager.js:107
#, javascript-format #, javascript-format
msgid "Settings changes will revert in %d second" msgid "Settings changes will revert in %d second"
msgid_plural "Settings changes will revert in %d seconds" msgid_plural "Settings changes will revert in %d seconds"
msgstr[0] "સુયોજન ફેરફારો એ %d સેકંડમાં પાછા આવશે" msgstr[0] ""
msgstr[1] "સુયોજન ફેરફારો એ %d સેકંડોમાં પાછા આવશે" msgstr[1] ""
#: ../js/ui/windowMenu.js:34 #: ../js/ui/windowMenu.js:34
msgid "Minimize" msgid "Minimize"
@@ -1726,7 +1770,7 @@ msgstr "માપ બદલો"
#: ../js/ui/windowMenu.js:65 #: ../js/ui/windowMenu.js:65
msgid "Move Titlebar Onscreen" msgid "Move Titlebar Onscreen"
msgstr "શીર્ષકપટ્ટી ઓનસ્ક્રીનને ખસેડો" msgstr ""
#: ../js/ui/windowMenu.js:70 #: ../js/ui/windowMenu.js:70
msgid "Always on Top" msgid "Always on Top"
@@ -1734,15 +1778,15 @@ msgstr "હંમેશા ટોચ ઉપર"
#: ../js/ui/windowMenu.js:89 #: ../js/ui/windowMenu.js:89
msgid "Always on Visible Workspace" msgid "Always on Visible Workspace"
msgstr "હંમેશા દૃશ્ય કામ કરવાની જગ્યા પર" msgstr ""
#: ../js/ui/windowMenu.js:106 #: ../js/ui/windowMenu.js:106
msgid "Move to Workspace Up" msgid "Move to Workspace Up"
msgstr "ઉપર કામ કરવાની જગ્યા પર ખસેડો" msgstr ""
#: ../js/ui/windowMenu.js:111 #: ../js/ui/windowMenu.js:111
msgid "Move to Workspace Down" msgid "Move to Workspace Down"
msgstr "નીચે કામ કરવાની જગ્યાએ ખસેડો" msgstr ""
#: ../src/calendar-server/evolution-calendar.desktop.in.in.h:1 #: ../src/calendar-server/evolution-calendar.desktop.in.in.h:1
msgid "Evolution Calendar" msgid "Evolution Calendar"
@@ -1770,24 +1814,25 @@ msgstr[1] "%u ઇનપુટો"
msgid "System Sounds" msgid "System Sounds"
msgstr "સિસ્ટમ અવાજો" msgstr "સિસ્ટમ અવાજો"
#: ../src/main.c:373 #: ../src/main.c:371
msgid "Print version" msgid "Print version"
msgstr "ા" msgstr "ા"
#: ../src/main.c:379 #: ../src/main.c:377
msgid "Mode used by GDM for login screen" msgid "Mode used by GDM for login screen"
msgstr "લૉગિન સ્ક્રીન માટે GDM દ્દારા વાપરેલ સ્થિતિ" msgstr "લૉગિન સ્ક્રીન માટે GDM દ્દારા વાપરેલ સ્થિતિ"
#: ../src/main.c:385 #: ../src/main.c:383
msgid "Use a specific mode, e.g. \"gdm\" for login screen" msgid "Use a specific mode, e.g. \"gdm\" for login screen"
msgstr "ખાસ સ્થિતિને વાપરો, દા.ત. પ્રવેશ સ્ક્રીન માટે \"gdm\"" msgstr "ખાસ સ્થિતિને વાપરો, દા.ત. પ્રવેશ સ્ક્રીન માટે \"gdm\""
#: ../src/main.c:391 #: ../src/main.c:389
msgid "List possible modes" msgid "List possible modes"
msgstr "શક્ય સ્થિતિઓની યાદી કરો" msgstr "શક્ય સ્થિતિઓની યાદી કરો"
#: ../src/shell-app.c:666 #: ../src/shell-app.c:666
#, c-format #, c-format
#| msgid "Failed to launch '%s'"
msgid "Failed to launch “%s”" msgid "Failed to launch “%s”"
msgstr "“%s” ને શરૂ કરવામાં નિષ્ફળતા" msgstr "“%s” ને શરૂ કરવામાં નિષ્ફળતા"

592
po/he.po

File diff suppressed because it is too large Load Diff

2257
po/hi.po

File diff suppressed because it is too large Load Diff

697
po/hu.po

File diff suppressed because it is too large Load Diff

443
po/id.po

File diff suppressed because it is too large Load Diff

890
po/it.po

File diff suppressed because it is too large Load Diff

822
po/ja.po

File diff suppressed because it is too large Load Diff

1060
po/kk.po

File diff suppressed because it is too large Load Diff

2267
po/kn.po

File diff suppressed because it is too large Load Diff

893
po/ko.po

File diff suppressed because it is too large Load Diff

392
po/lt.po

File diff suppressed because it is too large Load Diff

951
po/lv.po

File diff suppressed because it is too large Load Diff

2306
po/mr.po

File diff suppressed because it is too large Load Diff

2630
po/ms.po

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More