diff --git a/.gitignore b/.gitignore
index 5a035eb4c..e043cb850 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,8 +18,6 @@ config
configure
data/gnome-shell.desktop
data/gnome-shell.desktop.in
-data/gnome-shell-clock-preferences.desktop
-data/gnome-shell-clock-preferences.desktop.in
data/gschemas.compiled
data/org.gnome.shell.gschema.xml
data/org.gnome.shell.gschema.valid
@@ -46,12 +44,13 @@ src/Makefile
src/Makefile.in
src/gnomeshell-taskpanel
src/gnome-shell
-src/gnome-shell-clock-preferences
src/run-js-test
src/test-recorder
src/test-recorder.ogg
src/test-theme
src/st.h
+src/stamp-st.h
+src/stamp-st.h.tmp
stamp-h1
tests/run-test.sh
xmldocs.make
diff --git a/configure.ac b/configure.ac
index 827920a1a..b3c0b2482 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,11 +1,14 @@
AC_PREREQ(2.63)
-AC_INIT([gnome-shell],[2.91.3],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
+AC_INIT([gnome-shell],[2.91.5],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_SRCDIR([src/shell-global.c])
AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_AUX_DIR([config])
+AC_SUBST([PACKAGE_NAME], ["$PACKAGE_NAME"])
+AC_SUBST([PACKAGE_VERSION], ["$PACKAGE_VERSION"])
+
AM_INIT_AUTOMAKE([1.10 dist-bzip2 no-dist-gzip foreign])
AM_MAINTAINER_MODE
@@ -58,15 +61,15 @@ fi
AM_CONDITIONAL(BUILD_RECORDER, $build_recorder)
CLUTTER_MIN_VERSION=1.5.8
-GOBJECT_INTROSPECTION_MIN_VERSION=0.6.11
-GJS_MIN_VERSION=0.7
-MUTTER_MIN_VERSION=2.91.0
-GTK_MIN_VERSION=2.91.0
+GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
+GJS_MIN_VERSION=0.7.8
+MUTTER_MIN_VERSION=2.91.4
+GTK_MIN_VERSION=2.91.7
GIO_MIN_VERSION=2.25.9
# Collect more than 20 libraries for a prize!
PKG_CHECK_MODULES(MUTTER_PLUGIN, gio-2.0 >= $GIO_MIN_VERSION
- gio-unix-2.0 dbus-glib-1
+ gio-unix-2.0 dbus-glib-1 libxml-2.0
gtk+-3.0 >= $GTK_MIN_VERSION
mutter-plugins >= $MUTTER_MIN_VERSION
gjs-internals-1.0 >= $GJS_MIN_VERSION
@@ -78,6 +81,10 @@ PKG_CHECK_MODULES(MUTTER_PLUGIN, gio-2.0 >= $GIO_MIN_VERSION
gobject-introspection-1.0 >= $GOBJECT_INTROSPECTION_MIN_VERSION
libcanberra)
+GJS_VERSION=`$PKG_CONFIG --modversion gjs-internals-1.0`
+AC_DEFINE_UNQUOTED([GJS_VERSION], ["$GJS_VERSION"], [The version of GJS we're linking to])
+AC_SUBST([GJS_VERSION], ["$GJS_VERSION"])
+
saved_CFLAGS=$CFLAGS
saved_LIBS=$LIBS
CFLAGS=$MUTTER_PLUGIN_CFLAGS
@@ -87,7 +94,6 @@ AC_CHECK_FUNCS(JS_NewGlobalObject sn_startup_sequence_get_application_id)
CFLAGS=$saved_CFLAGS
LIBS=$saved_LIBS
-PKG_CHECK_MODULES(TIDY, clutter-1.0)
PKG_CHECK_MODULES(ST, clutter-1.0 gtk+-3.0 libcroco-0.6 gnome-desktop-3.0 >= 2.90.0)
PKG_CHECK_MODULES(GDMUSER, dbus-glib-1 gtk+-3.0)
PKG_CHECK_MODULES(TRAY, gtk+-3.0)
@@ -165,14 +171,6 @@ changequote([,])dnl
AC_PATH_PROG(mutter, [mutter])
AC_SUBST(mutter)
-AC_MSG_CHECKING([if mutter was compiled with GTK+-3.0])
-if $PKG_CONFIG --libs libmutter-private | grep gtk-x11-3 >/dev/null; then
- AC_MSG_RESULT(yes)
-else
- AC_MSG_RESULT(no)
- AC_MSG_ERROR([GNOME Shell requires Mutter to be compiled against GTK+-3.0])
-fi
-
AC_CONFIG_FILES([
Makefile
data/Makefile
diff --git a/data/Makefile.am b/data/Makefile.am
index d8cb9064c..4e73e037a 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -1,5 +1,5 @@
desktopdir=$(datadir)/applications
-desktop_DATA = gnome-shell.desktop gnome-shell-clock-preferences.desktop
+desktop_DATA = gnome-shell.desktop
# We substitute in bindir so it works as an autostart
# file when built in a non-system prefix
@@ -12,7 +12,10 @@ desktop_DATA = gnome-shell.desktop gnome-shell-clock-preferences.desktop
%.desktop:%.desktop.in
$(AM_V_GEN) sed s/^_// < $< > $@ || rm $@
-dist_pkgdata_DATA = clock-preferences.ui
+searchprovidersdir = $(pkgdatadir)/search_providers
+dist_searchproviders_DATA = \
+ search_providers/google.xml \
+ search_providers/wikipedia.xml
imagesdir = $(pkgdatadir)/images
dist_images_DATA = \
@@ -88,7 +91,6 @@ install-data-local:
EXTRA_DIST = \
gnome-shell.desktop.in.in \
- gnome-shell-clock-preferences.desktop.in.in \
$(menu_DATA) \
$(gconfschema_DATA) \
$(shaders_DATA) \
@@ -97,7 +99,6 @@ EXTRA_DIST = \
CLEANFILES = \
gnome-shell.desktop.in \
- gnome-shell-clock-preferences.desktop.in \
$(desktop_DATA) \
$(gsettings_SCHEMAS) \
gschemas.compiled
diff --git a/data/clock-preferences.ui b/data/clock-preferences.ui
deleted file mode 100644
index 2e22d9aa9..000000000
--- a/data/clock-preferences.ui
+++ /dev/null
@@ -1,188 +0,0 @@
-
-
-
-
-
-
diff --git a/data/gnome-shell-clock-preferences.desktop.in.in b/data/gnome-shell-clock-preferences.desktop.in.in
deleted file mode 100644
index 5886dd509..000000000
--- a/data/gnome-shell-clock-preferences.desktop.in.in
+++ /dev/null
@@ -1,15 +0,0 @@
-[Desktop Entry]
-_Name=Clock
-_Comment=Customize the panel clock
-Exec=@bindir@/gnome-shell-clock-preferences
-Icon=gnome-panel-clock
-Terminal=false
-Type=Application
-StartupNotify=true
-Categories=GNOME;GTK;Settings;DesktopSettings;
-OnlyShowIn=GNOME;
-X-GNOME-ShellOnly=true
-X-GNOME-Bugzilla-Bugzilla=GNOME
-X-GNOME-Bugzilla-Product=gnome-shell
-X-GNOME-Bugzilla-Component=general
-X-GNOME-Bugzilla-Version=@VERSION@
diff --git a/data/org.gnome.shell.gschema.xml.in b/data/org.gnome.shell.gschema.xml.in
index 031930a4b..c19463099 100644
--- a/data/org.gnome.shell.gschema.xml.in
+++ b/data/org.gnome.shell.gschema.xml.in
@@ -30,13 +30,17 @@
- [ 'mozilla-firefox.desktop', 'evolution.desktop', 'openoffice.org-writer.desktop' ]
+ [ 'mozilla-firefox.desktop', 'evolution.desktop', 'empathy.desktop', 'rhythmbox.desktop', 'shotwell.desktop', 'openoffice.org-writer.desktop', 'nautilus.desktop' ]
<_summary>List of desktop file IDs for favorite applications
<_description>
The applications corresponding to these identifiers
will be displayed in the favorites area.
+
+ []
+ <_summary>disabled OpenSearch providers
+
[]
<_summary>History for command (Alt-F2) dialog
@@ -59,51 +63,18 @@
-
-
-
- "12-hour"
-
- <_summary>Hour format
- <_description>
- This key specifies the hour format used by the panel clock.
- Possible values are "12-hour", "24-hour", "unix" and "custom". If set
- to "unix", the clock will display time in seconds since Epoch,
- i.e. 1970-01-01. If set to "custom", the clock will display time
- according to the format specified in the custom_format key. Note that
- if set to either "unix" or "custom", the show_date and show_seconds
- keys are ignored.
-
-
-
-
-
-
-
-
-
- ''
- <_summary>Custom format of the clock
- <_description>
- This key specifies the format used by the panel clock when the format
- key is set to "custom". You can use conversion specifiers understood
- by strftime() to obtain a specific format. See the strftime() manual
- for more information.
-
-
false
<_summary>Show time with seconds
<_description>
- If true and format is either "12-hour" or "24-hour", display seconds in time.
+ If true, display seconds in time.
false
<_summary>Show date in clock
<_description>
- If true and format is either "12-hour" or "24-hour",
- display date in the clock, in addition to time.
+ If true, display date in the clock, in addition to time.
diff --git a/data/search_providers/google.xml b/data/search_providers/google.xml
new file mode 100644
index 000000000..daaa254b7
--- /dev/null
+++ b/data/search_providers/google.xml
@@ -0,0 +1,7 @@
+
+Google
+Google Search
+UTF-8
+data:image/x-icon;base64,AAABAAEAEBAAAAEAGABoAwAAFgAAACgAAAAQAAAAIAAAAAEAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADs9Pt8xetPtu9FsfFNtu%2BTzvb2%2B%2Fne4dFJeBw0egA%2FfAJAfAA8ewBBegAAAAD%2B%2FPtft98Mp%2BwWsfAVsvEbs%2FQeqvF8xO7%2F%2F%2F63yqkxdgM7gwE%2FggM%2BfQA%2BegBDeQDe7PIbotgQufcMufEPtfIPsvAbs%2FQvq%2Bfz%2Bf%2F%2B%2B%2FZKhR05hgBBhQI8hgBAgAI9ewD0%2B%2Fg3pswAtO8Cxf4Kw%2FsJvvYAqupKsNv%2B%2Fv7%2F%2FP5VkSU0iQA7jQA9hgBDgQU%2BfQH%2F%2Ff%2FQ6fM4sM4KsN8AteMCruIqqdbZ7PH8%2Fv%2Fg6Nc%2Fhg05kAA8jAM9iQI%2BhQA%2BgQDQu6b97uv%2F%2F%2F7V8Pqw3eiWz97q8%2Ff%2F%2F%2F%2F7%2FPptpkkqjQE4kwA7kAA5iwI8iAA8hQCOSSKdXjiyflbAkG7u2s%2F%2B%2F%2F39%2F%2F7r8utrqEYtjQE8lgA7kwA7kwA9jwA9igA9hACiWSekVRyeSgiYSBHx6N%2F%2B%2Fv7k7OFRmiYtlAA5lwI7lwI4lAA7kgI9jwE9iwI4iQCoVhWcTxCmb0K%2BooT8%2Fv%2F7%2F%2F%2FJ2r8fdwI1mwA3mQA3mgA8lAE8lAE4jwA9iwE%2BhwGfXifWvqz%2B%2Ff%2F58u%2Fev6Dt4tr%2B%2F%2F2ZuIUsggA7mgM6mAM3lgA5lgA6kQE%2FkwBChwHt4dv%2F%2F%2F728ei1bCi7VAC5XQ7kz7n%2F%2F%2F6bsZkgcB03lQA9lgM7kwA2iQktZToPK4r9%2F%2F%2F9%2F%2F%2FSqYK5UwDKZAS9WALIkFn%2B%2F%2F3%2F%2BP8oKccGGcIRJrERILYFEMwAAuEAAdX%2F%2Ff7%2F%2FP%2B%2BfDvGXQLIZgLEWgLOjlf7%2F%2F%2F%2F%2F%2F9QU90EAPQAAf8DAP0AAfMAAOUDAtr%2F%2F%2F%2F7%2B%2Fu2bCTIYwDPZgDBWQDSr4P%2F%2Fv%2F%2F%2FP5GRuABAPkAA%2FwBAfkDAPAAAesAAN%2F%2F%2B%2Fz%2F%2F%2F64g1C5VwDMYwK8Yg7y5tz8%2Fv%2FV1PYKDOcAAP0DAf4AAf0AAfYEAOwAAuAAAAD%2F%2FPvi28ymXyChTATRrIb8%2F%2F3v8fk6P8MAAdUCAvoAAP0CAP0AAfYAAO4AAACAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAA
+
+
diff --git a/data/search_providers/wikipedia.xml b/data/search_providers/wikipedia.xml
new file mode 100644
index 000000000..4c61256a9
--- /dev/null
+++ b/data/search_providers/wikipedia.xml
@@ -0,0 +1,44 @@
+
+Wikipedia
+Wikipedia, the free encyclopedia
+UTF-8
+data:image/x-icon;base64,AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAEAgQAhIOEAMjHyABIR0gA6ejpAGlqaQCpqKkAKCgoAPz9%2FAAZGBkAmJiYANjZ2ABXWFcAent6ALm6uQA8OjwAiIiIiIiIiIiIiI4oiL6IiIiIgzuIV4iIiIhndo53KIiIiB%2FWvXoYiIiIfEZfWBSIiIEGi%2FfoqoiIgzuL84i9iIjpGIoMiEHoiMkos3FojmiLlUipYliEWIF%2BiDe0GoRa7D6GPbjcu1yIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+
+
+ar
+bg
+ca
+cs
+da
+de
+en
+eo
+es
+fa
+fi
+fr
+he
+hu
+id
+it
+ja
+ko
+lt
+nl
+no
+pl
+pt
+ro
+ru
+sk
+sl
+sr
+sv
+tr
+uk
+vi
+vo
+war
+zh
+
diff --git a/data/theme/gnome-shell.css b/data/theme/gnome-shell.css
index dd343150e..4ac541fe8 100644
--- a/data/theme/gnome-shell.css
+++ b/data/theme/gnome-shell.css
@@ -214,7 +214,7 @@ StTooltip StLabel {
transition-duration: 100;
}
-.panel-button:active, .panel-button:checked, .panel-button:pressed {
+.panel-button:active, .panel-button:checked, .panel-button:pressed, .panel-button:focus {
background-gradient-direction: vertical;
background-gradient-start: #3c3c3c;
background-gradient-end: #131313;
@@ -338,6 +338,7 @@ StTooltip StLabel {
#viewSelector {
spacing: 16px;
+ font-size: 16px;
}
#viewSelectorTabBar {
@@ -384,10 +385,14 @@ StTooltip StLabel {
color: #888a85;
font-weight: bold;
padding: 0px 12px;
+ height: 24px;
}
.view-tab-title:selected {
- color: white;
+ color: #000000;
+ background-color: #c2c7cd;
+ border-radius: 4px;
+ height: 24px;
}
.view-tab-boxpointer {
@@ -436,40 +441,30 @@ StTooltip StLabel {
spacing: 4px;
}
-/* GenericDisplay */
-
-.generic-display-container {
+.search-providers-box {
spacing: 4px;
}
-.generic-display-item {
- height: 50px;
- border-radius: 4px;
- color: #ffffff;
- font-size: 14px;
- spacing: 4px;
+.dash-search-button {
+ background-gradient-direction: vertical;
+ background-gradient-start: rgba(255, 255, 255, 0.2);
+ background-gradient-end: rgba(255, 255, 255, 0);
+/* border: 1px solid #808080;*/
+ border-radius: 10px;
+ height: 32px;
+ width: 300px;
}
-.generic-display-item:selected {
- background-color: rgba(79,111,173,0.66);
+.dash-search-button:selected,
+.dash-search-button:hover {
+ background-gradient-direction: vertical;
+ background-gradient-start: rgba(255, 255, 255, 0.4);
+ background-gradient-end: rgba(255, 255, 255, 0.2);
}
-.generic-display-item-text {
- spacing: 4px;
-}
-
-.generic-display-item-description {
- font-size: 12px;
- color: #bababa;
-}
-
-.generic-display-details {
- font-size: 14px;
- color: #ffffff;
-}
-
-.generic-display-details-name {
- font-weight: bold;
+.dash-search-button-label {
+ color: #cccccc;
+ font: 16px sans-serif;
}
/* Apps */
@@ -549,57 +544,6 @@ StTooltip StLabel {
font-size: 12px
}
-/* Places */
-
-.places-section {
- spacing-columns: 4px;
- spacing-rows: 4px;
-}
-
-.places-item-box {
- spacing: 2px;
-}
-
-.places-item {
- border-radius: 4px;
- padding: 2px;
- border: 1px solid #181818;
- padding-left: 4px;
- padding-right: 4px;
- transition-duration: 100;
-}
-
-.places-item:hover {
- border: 1px solid #666666;
- background-gradient-direction: vertical;
- background-gradient-start: rgba(61,61,61,0.8);
- background-gradient-end: rgba(24,24,24,0.2);
- transition-duration: 100;
-}
-
-/* Recent items */
-
-.recent-docs-item-box {
- spacing: 2px;
-}
-
-.recent-docs-item {
- border-radius: 4px;
- padding: 2px;
- border: 1px solid #181818;
- padding-left: 4px;
- padding-right: 4px;
- transition-duration: 100;
-}
-
-.recent-docs-item:hover {
- border: 1px solid #666666;
- background-gradient-direction: vertical;
- background-gradient-start: rgba(61,61,61,0.8);
- background-gradient-end: rgba(24,24,24,0.2);
- transition-duration: 100;
-}
-
/* LookingGlass */
#LookingGlassDialog
@@ -1142,6 +1086,15 @@ StTooltip StLabel {
border-radius: 8px;
}
+.switcher-list .item-box:outlined {
+ padding: 6px;
+ border: 2px solid rgba(85,85,85,1.0);
+}
+
+.switcher-list .item-box:selected {
+ background: rgba(255,255,255,0.33);
+}
+
.switcher-list .thumbnail-box {
padding: 2px;
spacing: 4px;
@@ -1151,18 +1104,6 @@ StTooltip StLabel {
width: 256px;
}
-.switcher-list .outlined-item-box {
- padding: 6px;
- border: 2px solid rgba(85,85,85,1.0);
- border-radius: 8px;
-}
-
-.switcher-list .selected-item-box {
- padding: 8px;
- border-radius: 8px;
- background: rgba(255,255,255,0.33);
-}
-
.switcher-list .separator {
width: 1px;
background: rgba(255,255,255,0.33);
@@ -1227,6 +1168,54 @@ StTooltip StLabel {
border-radius: 8px;
}
+/* Modal Dialogs */
+.modal-dialog {
+ font: 12pt sans-serif;
+ border-radius: 24px;
+ background-color: rgba(0.0, 0.0, 0.0, 0.9);
+ border: 2px solid #868686;
+ color: #ffffff;
+
+ padding-right: 42px;
+ padding-left: 42px;
+ padding-bottom: 30px;
+ padding-top: 30px;
+}
+
+.modal-dialog-button {
+ border: 1px solid #8b8b8b;
+ border-radius: 18px;
+ font: 14px sans-serif;
+
+ margin-left: 10px;
+ margin-right: 10px;
+
+ padding-left: 32px;
+ padding-right: 32px;
+ padding-top: 8px;
+ padding-bottom: 8px;
+
+ background-gradient-direction: vertical;
+ background-gradient-start: #29323b;
+ background-gradient-end: #121a24;
+}
+
+.modal-dialog-button:active,
+.modal-dialog-button:pressed {
+ border-color: #a5a5a5;
+ background-gradient-start: #121a24;
+ background-gradient-end: #29323b;
+}
+
+.modal-dialog-button:focus {
+ border: 2px solid #a5a5a5;
+
+ padding-left: 31px;
+ padding-right: 31px;
+ padding-top: 7px;
+ padding-bottom: 7px;
+}
+
/* Run Dialog */
.run-dialog-label {
font: 12px sans-serif;
@@ -1252,16 +1241,74 @@ StTooltip StLabel {
}
.run-dialog {
- padding: 8px;
- border: 1px solid rgba(128,128,128,0.40);
- border-radius: 4px;
- background: rgba(0,0,0,0.8);
+ border-radius: 16px;
+
+ padding-right: 21px;
+ padding-left: 21px;
+ padding-bottom: 15px;
+ padding-top: 15px;
}
.lightbox {
background-color: rgba(0, 0, 0, 0.4);
}
+/* End Session Dialog */
+.end-session-dialog-subject {
+ font: 12pt sans-serif;
+ font-weight: bold;
+ color: #666666;
+ padding-top: 10px;
+ padding-left: 17px;
+ padding-bottom: 30px;
+}
+
+.end-session-dialog-description {
+ font: 10pt sans-serif;
+ color: white;
+ padding-left: 17px;
+ padding-right: 40px;
+ width: 16em;
+}
+
+.end-session-dialog-logout-icon {
+ border: 2px solid #8b8b8b;
+ border-radius: 5px;
+ width: 32px;
+ height: 32px;
+}
+
+.end-session-dialog-shutdown-icon {
+ width: 32px;
+ height: 32px;
+}
+
+.end-session-dialog-app-list {
+ font: 10pt sans-serif;
+ max-height: 200px;
+ padding-top: 42px;
+ padding-bottom: 42px;
+ padding-left: 17px;
+ padding-right: 32px;
+}
+
+.end-session-dialog-app-list-item {
+ padding-right: 1em;
+}
+
+.end-session-dialog-app-list-item-icon {
+ padding-right: 17px;
+}
+
+.end-session-dialog-app-list-item-name {
+ font: 10pt sans-serif;
+}
+
+.end-session-dialog-app-list-item-description {
+ font: 8pt sans-serif;
+ color: #444444;
+}
+
/* Magnifier */
.magnifier-zoom-region {
diff --git a/js/Makefile.am b/js/Makefile.am
index f496db5c0..21683af19 100644
--- a/js/Makefile.am
+++ b/js/Makefile.am
@@ -9,22 +9,22 @@ nobase_dist_js_DATA = \
misc/gnomeSession.js \
misc/params.js \
misc/telepathy.js \
- misc/utils.js \
+ misc/util.js \
perf/core.js \
- prefs/clockPreferences.js \
ui/altTab.js \
ui/appDisplay.js \
ui/appFavorites.js \
ui/boxpointer.js \
ui/calendar.js \
ui/chrome.js \
+ ui/ctrlAltTab.js \
ui/dash.js \
ui/dateMenu.js \
ui/dnd.js \
ui/docDisplay.js \
+ ui/endSessionDialog.js \
ui/environment.js \
ui/extensionSystem.js \
- ui/genericDisplay.js \
ui/iconGrid.js \
ui/lightbox.js \
ui/link.js \
@@ -33,6 +33,7 @@ nobase_dist_js_DATA = \
ui/magnifierDBus.js \
ui/main.js \
ui/messageTray.js \
+ ui/modalDialog.js \
ui/notificationDaemon.js \
ui/overview.js \
ui/panel.js \
@@ -47,6 +48,7 @@ nobase_dist_js_DATA = \
ui/statusIconDispatcher.js \
ui/statusMenu.js \
ui/status/accessibility.js \
+ ui/status/keyboard.js \
ui/status/power.js \
ui/status/volume.js \
ui/status/bluetooth.js \
@@ -57,4 +59,5 @@ nobase_dist_js_DATA = \
ui/windowManager.js \
ui/workspace.js \
ui/workspacesView.js \
- ui/workspaceSwitcherPopup.js
+ ui/workspaceSwitcherPopup.js \
+ ui/xdndHandler.js
diff --git a/js/misc/config.js.in b/js/misc/config.js.in
index db8c6da5e..25a0e7287 100644
--- a/js/misc/config.js.in
+++ b/js/misc/config.js.in
@@ -1,3 +1,10 @@
/* mode: js2; indent-tabs-mode: nil; tab-size: 4 */
+/* The name of this package (not localized) */
+const PACKAGE_NAME = '@PACKAGE_NAME@';
+/* The version of this package */
+const PACKAGE_VERSION = '@PACKAGE_VERSION@';
+/* The version of GJS we're linking to */
+const GJS_VERSION = '@GJS_VERSION@';
+/* 1 if gnome-bluetooth is available, 0 otherwise */
const HAVE_BLUETOOTH = @HAVE_BLUETOOTH@;
diff --git a/js/misc/docInfo.js b/js/misc/docInfo.js
index 6888ced50..a9332d91c 100644
--- a/js/misc/docInfo.js
+++ b/js/misc/docInfo.js
@@ -60,8 +60,7 @@ function getDocManager() {
}
/**
- * DocManager wraps the DocSystem, primarily to expose DocInfo objects
- * which conform to the GenericDisplay item API.
+ * DocManager wraps the DocSystem, primarily to expose DocInfo objects.
*/
function DocManager() {
this._init();
diff --git a/js/misc/gnomeSession.js b/js/misc/gnomeSession.js
index 06f52a36b..ef4ef848d 100644
--- a/js/misc/gnomeSession.js
+++ b/js/misc/gnomeSession.js
@@ -2,6 +2,7 @@
const DBus = imports.dbus;
const Lang = imports.lang;
+const Signals = imports.signals;
const PresenceIface = {
name: 'org.gnome.SessionManager.Presence',
@@ -43,3 +44,60 @@ Presence.prototype = {
}
};
DBus.proxifyPrototype(Presence.prototype, PresenceIface);
+
+// Note inhibitors are immutable objects, so they don't
+// change at runtime (changes always come in the form
+// of new inhibitors)
+const InhibitorIface = {
+ name: 'org.gnome.SessionManager.Inhibitor',
+ properties: [{ name: 'app_id',
+ signature: 's',
+ access: 'readonly' },
+ { name: 'client_id',
+ signature: 's',
+ access: 'readonly' },
+ { name: 'reason',
+ signature: 's',
+ access: 'readonly' },
+ { name: 'flags',
+ signature: 'u',
+ access: 'readonly' },
+ { name: 'toplevel_xid',
+ signature: 'u',
+ access: 'readonly' },
+ { name: 'cookie',
+ signature: 'u',
+ access: 'readonly' }],
+};
+
+function Inhibitor(objectPath) {
+ this._init(objectPath);
+}
+
+Inhibitor.prototype = {
+ _init: function(objectPath) {
+ DBus.session.proxifyObject(this,
+ "org.gnome.SessionManager",
+ objectPath);
+ this.isLoaded = false;
+ this._loadingPropertiesCount = InhibitorIface.properties.length;
+ for (let i = 0; i < InhibitorIface.properties.length; i++) {
+ let propertyName = InhibitorIface.properties[i].name;
+ this.GetRemote(propertyName, Lang.bind(this,
+ function(value, exception) {
+ if (exception)
+ return;
+
+ this[propertyName] = value;
+ this._loadingPropertiesCount--;
+
+ if (this._loadingPropertiesCount == 0) {
+ this.isLoaded = true;
+ this.emit("is-loaded");
+ }
+ }));
+ }
+ },
+};
+DBus.proxifyPrototype(Inhibitor.prototype, InhibitorIface);
+Signals.addSignalMethods(Inhibitor.prototype);
diff --git a/js/misc/util.js b/js/misc/util.js
new file mode 100644
index 000000000..fc515eb7b
--- /dev/null
+++ b/js/misc/util.js
@@ -0,0 +1,175 @@
+/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
+
+const Gdk = imports.gi.Gdk;
+const Gio = imports.gi.Gio;
+const GLib = imports.gi.GLib;
+const Shell = imports.gi.Shell;
+
+const Main = imports.ui.main;
+const MessageTray = imports.ui.messageTray;
+
+const Gettext = imports.gettext.domain('gnome-shell');
+const _ = Gettext.gettext;
+
+/* http://daringfireball.net/2010/07/improved_regex_for_matching_urls */
+const _urlRegexp = new RegExp('\\b(([a-z][\\w-]+:(/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}/)([^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))+(\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:\'\\".,<>?«»“”‘’]))', 'gi');
+
+// findUrls:
+// @str: string to find URLs in
+//
+// Searches @str for URLs and returns an array of objects with %url
+// properties showing the matched URL string, and %pos properties indicating
+// the position within @str where the URL was found.
+//
+// Return value: the list of match objects, as described above
+function findUrls(str) {
+ let res = [], match;
+ while ((match = _urlRegexp.exec(str)))
+ res.push({ url: match[0], pos: match.index });
+ return res;
+}
+
+// spawn:
+// @argv: an argv array
+//
+// Runs @argv in the background, handling any errors that occur
+// when trying to start the program.
+function spawn(argv) {
+ try {
+ trySpawn(argv);
+ } catch (err) {
+ _handleSpawnError(argv[0], err);
+ }
+}
+
+// spawnCommandLine:
+// @command_line: a command line
+//
+// Runs @command_line in the background, handling any errors that
+// occur when trying to parse or start the program.
+function spawnCommandLine(command_line) {
+ try {
+ let [success, argc, argv] = GLib.shell_parse_argv(command_line);
+ trySpawn(argv);
+ } catch (err) {
+ _handleSpawnError(command_line, err);
+ }
+}
+
+// spawnDesktop:
+// @id: a desktop file ID
+//
+// Spawns the desktop file identified by @id using startup notification,
+// etc, handling any errors that occur when trying to find or start
+// the program.
+function spawnDesktop(id) {
+ try {
+ trySpawnDesktop(id);
+ } catch (err) {
+ _handleSpawnError(id, err);
+ }
+}
+
+// trySpawn:
+// @argv: an argv array
+//
+// Runs @argv in the background. If launching @argv fails,
+// this will throw an error.
+function trySpawn(argv)
+{
+ try {
+ GLib.spawn_async(null, argv, null,
+ GLib.SpawnFlags.SEARCH_PATH,
+ null, null);
+ } catch (err) {
+ // The exception from gjs contains an error string like:
+ // Error invoking GLib.spawn_command_line_async: Failed to
+ // execute child process "foo" (No such file or directory)
+ // We are only interested in the part in the parentheses. (And
+ // we can't pattern match the text, since it gets localized.)
+ err.message = err.message.replace(/.*\((.+)\)/, '$1');
+ throw err;
+ }
+}
+
+// trySpawnCommandLine:
+// @command_line: a command line
+//
+// Runs @command_line in the background. If launching @command_line
+// fails, this will throw an error.
+function trySpawnCommandLine(command_line) {
+ let success, argc, argv;
+
+ try {
+ [success, argc, argv] = GLib.shell_parse_argv(command_line);
+ } catch (err) {
+ // Replace "Error invoking GLib.shell_parse_argv: " with
+ // something nicer
+ err.message = err.message.replace(/[^:]*: /, _("Could not parse command:") + "\n");
+ throw err;
+ }
+
+ trySpawn(argv);
+}
+
+// trySpawnDesktop:
+// @id: a desktop file ID
+//
+// Spawns the desktop file identified by @id using startup notification.
+// On error, throws an exception.
+function trySpawnDesktop(id) {
+ let app;
+
+ // shell_app_system_load_from_desktop_file() will end up returning
+ // a stupid error message if the desktop file doesn't exist, but
+ // that's the only case it returns an error for, so we just
+ // substitute our own error in instead
+ try {
+ app = Shell.AppSystem.get_default().load_from_desktop_file(id + '.desktop');
+ } catch (err) {
+ throw new Error(_("No such application"));
+ }
+
+ try {
+ app.launch();
+ } catch(err) {
+ // see trySpawn
+ err.message = err.message.replace(/.*\((.+)\)/, '$1');
+ throw err;
+ }
+}
+
+function _handleSpawnError(command, err) {
+ let title = _("Execution of '%s' failed:").format(command);
+
+ let source = new MessageTray.SystemNotificationSource();
+ Main.messageTray.add(source);
+ let notification = new MessageTray.Notification(source, title, err.message);
+ notification.setTransient(true);
+ source.notify(notification);
+}
+
+// killall:
+// @processName: a process name
+//
+// Kills @processName. If no process with the given name is found,
+// this will fail silently.
+function killall(processName) {
+ try {
+ // pkill is more portable than killall, but on Linux at least
+ // it won't match if you pass more than 15 characters of the
+ // process name... However, if you use the '-f' flag to match
+ // the entire command line, it will work, but we have to be
+ // careful in that case that we can match
+ // '/usr/bin/processName' but not 'gedit processName.c' or
+ // whatever...
+
+ let argv = ['pkill', '-f', '^([^ ]*/)?' + processName + '($| )'];
+ GLib.spawn_sync(null, argv, null, GLib.SpawnFlags.SEARCH_PATH, null, null);
+ // It might be useful to return success/failure, but we'd need
+ // a wrapper around WIFEXITED and WEXITSTATUS. Since none of
+ // the current callers care, we don't bother.
+ } catch (e) {
+ logError(e, 'Failed to kill ' + processName);
+ }
+}
diff --git a/js/misc/utils.js b/js/misc/utils.js
deleted file mode 100644
index 0b7d6c02b..000000000
--- a/js/misc/utils.js
+++ /dev/null
@@ -1,19 +0,0 @@
-/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
-
-/* http://daringfireball.net/2010/07/improved_regex_for_matching_urls */
-const _urlRegexp = /\b(([a-z][\w-]+:(\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)([^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'\".,<>?«»“”‘’]))/gi;
-
-// findUrls:
-// @str: string to find URLs in
-//
-// Searches @str for URLs and returns an array of objects with %url
-// properties showing the matched URL string, and %pos properties indicating
-// the position within @str where the URL was found.
-//
-// Return value: the list of match objects, as described above
-function findUrls(str) {
- let res = [], match;
- while ((match = _urlRegexp.exec(str)))
- res.push({ url: match[0], pos: match.index });
- return res;
-}
diff --git a/js/prefs/clockPreferences.js b/js/prefs/clockPreferences.js
deleted file mode 100644
index f35d8e250..000000000
--- a/js/prefs/clockPreferences.js
+++ /dev/null
@@ -1,97 +0,0 @@
-/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
-
-const Gio = imports.gi.Gio;
-const GLib = imports.gi.GLib;
-const Gtk = imports.gi.Gtk;
-
-const Lang = imports.lang;
-const Signals = imports.signals;
-
-const Gettext = imports.gettext;
-
-const FORMAT_KEY = 'format';
-const SHOW_DATE_KEY = 'show-date';
-const SHOW_SECONDS_KEY = 'show-seconds';
-
-
-function ClockPreferences(uiFile) {
- this._init(uiFile);
-};
-
-ClockPreferences.prototype = {
- _init: function(uiFile) {
- let builder = new Gtk.Builder();
- builder.add_from_file(uiFile);
-
- this._dialog = builder.get_object('prefs-dialog');
- this._dialog.connect('response', Lang.bind(this, this._onResponse));
-
- this._12hrRadio = builder.get_object('12hr_radio');
- this._24hrRadio = builder.get_object('24hr_radio');
- this._dateCheck = builder.get_object('date_check');
- this._secondsCheck = builder.get_object('seconds_check');
-
- delete builder;
-
- this._settings = new Gio.Settings({ schema: 'org.gnome.shell.clock' });
- this._notifyId = this._settings.connect('changed',
- Lang.bind(this,
- this._updateDialog));
-
- this._12hrRadio.connect('toggled', Lang.bind(this,
- function() {
- let format = this._12hrRadio.active ? '12-hour' : '24-hour';
- this._settings.set_string(FORMAT_KEY, format);
- }));
- this._dateCheck.connect('toggled', Lang.bind(this,
- function() {
- this._settings.set_boolean(SHOW_DATE_KEY,
- this._dateCheck.active);
- }));
- this._secondsCheck.connect('toggled', Lang.bind(this,
- function() {
- this._settings.set_boolean(SHOW_SECONDS_KEY,
- this._secondsCheck.active);
- }));
-
- this._updateDialog();
- },
-
- show: function() {
- this._dialog.show_all();
- },
-
- _updateDialog: function() {
- let format = this._settings.get_string(FORMAT_KEY);
- this._12hrRadio.active = (format == "12-hour");
- this._24hrRadio.active = (format == "24-hour");
-
- this._dateCheck.active = this._settings.get_boolean(SHOW_DATE_KEY);
- this._secondsCheck.active = this._settings.get_boolean(SHOW_SECONDS_KEY);
- },
-
- _onResponse: function() {
- this._dialog.destroy();
- this._settings.disconnect(this._notifyId);
- this.emit('destroy');
- }
-};
-Signals.addSignalMethods(ClockPreferences.prototype);
-
-function main(params) {
- if ('progName' in params)
- GLib.set_prgname(params['progName']);
- if ('localeDir' in params)
- Gettext.bindtextdomain('gnome-shell', params['localeDir']);
-
- Gtk.init(null, null);
-
- let clockPrefs = new ClockPreferences(params['uiFile']);
- clockPrefs.connect('destroy',
- function() {
- Gtk.main_quit();
- });
- clockPrefs.show();
-
- Gtk.main();
-}
diff --git a/js/ui/altTab.js b/js/ui/altTab.js
index b3f074d07..aa0e7e246 100644
--- a/js/ui/altTab.js
+++ b/js/ui/altTab.js
@@ -34,7 +34,8 @@ function AltTabPopup() {
AltTabPopup.prototype = {
_init : function() {
this.actor = new Shell.GenericContainer({ name: 'altTabPopup',
- reactive: true });
+ reactive: true,
+ visible: false });
this.actor.connect('get-preferred-width', Lang.bind(this, this._getPreferredWidth));
this.actor.connect('get-preferred-height', Lang.bind(this, this._getPreferredHeight));
@@ -126,8 +127,8 @@ AltTabPopup.prototype = {
return false;
this._haveModal = true;
- this._keyPressEventId = global.stage.connect('key-press-event', Lang.bind(this, this._keyPressEvent));
- this._keyReleaseEventId = global.stage.connect('key-release-event', Lang.bind(this, this._keyReleaseEvent));
+ this.actor.connect('key-press-event', Lang.bind(this, this._keyPressEvent));
+ this.actor.connect('key-release-event', Lang.bind(this, this._keyReleaseEvent));
this.actor.connect('button-press-event', Lang.bind(this, this._clickedOutside));
this.actor.connect('scroll-event', Lang.bind(this, this._onScroll));
@@ -365,15 +366,18 @@ AltTabPopup.prototype = {
},
destroy : function() {
- Tweener.addTween(this.actor,
- { opacity: 0,
- time: POPUP_FADE_TIME,
- transition: 'easeOutQuad',
- onComplete: Lang.bind(this,
- function() {
- this.actor.destroy();
- })
- });
+ if (this.actor.visible) {
+ Tweener.addTween(this.actor,
+ { opacity: 0,
+ time: POPUP_FADE_TIME,
+ transition: 'easeOutQuad',
+ onComplete: Lang.bind(this,
+ function() {
+ this.actor.destroy();
+ })
+ });
+ } else
+ this.actor.destroy();
},
_onDestroy : function() {
@@ -383,11 +387,6 @@ AltTabPopup.prototype = {
if (this._thumbnails)
this._destroyThumbnails();
- if (this._keyPressEventId)
- global.stage.disconnect(this._keyPressEventId);
- if (this._keyReleaseEventId)
- global.stage.disconnect(this._keyReleaseEventId);
-
if (this._motionTimeoutId != 0)
Mainloop.source_remove(this._motionTimeoutId);
if (this._thumbnailTimeoutId != 0)
@@ -609,16 +608,18 @@ SwitcherList.prototype = {
},
highlight: function(index, justOutline) {
- if (this._highlighted != -1)
- this._items[this._highlighted].style_class = 'item-box';
+ if (this._highlighted != -1) {
+ this._items[this._highlighted].remove_style_pseudo_class('outlined');
+ this._items[this._highlighted].remove_style_pseudo_class('selected');
+ }
this._highlighted = index;
if (this._highlighted != -1) {
if (justOutline)
- this._items[this._highlighted].style_class = 'outlined-item-box';
+ this._items[this._highlighted].add_style_pseudo_class('outlined');
else
- this._items[this._highlighted].style_class = 'selected-item-box';
+ this._items[this._highlighted].add_style_pseudo_class('selected');
}
let monitor = global.get_primary_monitor();
@@ -864,17 +865,19 @@ AppSwitcher.prototype = {
while(this._items.length > 1 && this._items[j].style_class != 'item-box') {
j++;
}
- let iconPadding = this._items[j].get_theme_node().get_horizontal_padding();
+ let themeNode = this._items[j].get_theme_node();
+ let iconPadding = themeNode.get_horizontal_padding();
+ let iconBorder = themeNode.get_border_width(St.Side.LEFT) + themeNode.get_border_width(St.Side.RIGHT);
let [iconMinHeight, iconNaturalHeight] = this.icons[j].label.get_preferred_height(-1);
- let iconSpacing = iconNaturalHeight + iconPadding;
+ let iconSpacing = iconNaturalHeight + iconPadding + iconBorder;
let totalSpacing = this._list.spacing * (this._items.length - 1);
if (this._separator)
totalSpacing += this._separator.width + this._list.spacing;
// We just assume the whole screen here due to weirdness happing with the passed width
- let focus = global.get_focus_monitor();
+ let primary = global.get_primary_monitor();
let parentPadding = this.actor.get_parent().get_theme_node().get_horizontal_padding();
- let availWidth = focus.width - parentPadding - this.actor.get_theme_node().get_horizontal_padding();
+ let availWidth = primary.width - parentPadding - this.actor.get_theme_node().get_horizontal_padding();
let height = 0;
for(let i = 0; i < iconSizes.length; i++) {
diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js
index eaeeb1590..4b460fcc0 100644
--- a/js/ui/appDisplay.js
+++ b/js/ui/appDisplay.js
@@ -151,6 +151,7 @@ ViewByCategories.prototype = {
this._apps = apps;
this._view.refresh(apps);
+ /* Translators: Filter to display all applications */
this._addFilter(_("All"), -1);
if (!sections)
@@ -280,21 +281,21 @@ PrefsSearchProvider.prototype = {
}
};
-function AppIcon(app) {
- this._init(app);
+function AppIcon(app, params) {
+ this._init(app, params);
}
AppIcon.prototype = {
__proto__: IconGrid.BaseIcon.prototype,
- _init : function(app) {
+ _init : function(app, params) {
this.app = app;
let label = this.app.get_name();
IconGrid.BaseIcon.prototype._init.call(this,
label,
- { setSizeManually: true });
+ params);
},
createIcon: function(iconSize) {
@@ -302,12 +303,12 @@ AppIcon.prototype = {
}
};
-function AppWellIcon(app) {
- this._init(app);
+function AppWellIcon(app, iconParams) {
+ this._init(app, iconParams);
}
AppWellIcon.prototype = {
- _init : function(app) {
+ _init : function(app, iconParams) {
this.app = app;
this.actor = new St.Clickable({ style_class: 'app-well-app',
reactive: true,
@@ -315,7 +316,7 @@ AppWellIcon.prototype = {
y_fill: true });
this.actor._delegate = this;
- this.icon = new AppIcon(app);
+ this.icon = new AppIcon(app, iconParams);
this.actor.set_child(this.icon.actor);
this.actor.connect('clicked', Lang.bind(this, this._onClicked));
diff --git a/js/ui/boxpointer.js b/js/ui/boxpointer.js
index 450bed3ef..b7c73d7e2 100644
--- a/js/ui/boxpointer.js
+++ b/js/ui/boxpointer.js
@@ -42,7 +42,7 @@ BoxPointer.prototype = {
this.bin.raise(this._border);
},
- animateAppear: function(onComplete) {
+ show: function(animate, onComplete) {
let x = this.actor.x;
let y = this.actor.y;
let themeNode = this.actor.get_theme_node();
@@ -51,19 +51,21 @@ BoxPointer.prototype = {
this.actor.opacity = 0;
this.actor.show();
- switch (this._arrowSide) {
- case St.Side.TOP:
- this.actor.y -= rise;
- break;
- case St.Side.BOTTOM:
- this.actor.y += rise;
- break;
- case St.Side.LEFT:
- this.actor.x -= rise;
- break;
- case St.Side.RIGHT:
- this.actor.x += rise;
- break;
+ if (animate) {
+ switch (this._arrowSide) {
+ case St.Side.TOP:
+ this.actor.y -= rise;
+ break;
+ case St.Side.BOTTOM:
+ this.actor.y += rise;
+ break;
+ case St.Side.LEFT:
+ this.actor.x -= rise;
+ break;
+ case St.Side.RIGHT:
+ this.actor.x += rise;
+ break;
+ }
}
Tweener.addTween(this.actor, { opacity: 255,
@@ -74,7 +76,7 @@ BoxPointer.prototype = {
time: POPUP_ANIMATION_TIME });
},
- animateDisappear: function(onComplete) {
+ hide: function(animate, onComplete) {
let x = this.actor.x;
let y = this.actor.y;
let originalX = this.actor.x;
@@ -82,19 +84,21 @@ BoxPointer.prototype = {
let themeNode = this.actor.get_theme_node();
let rise = themeNode.get_length('-arrow-rise');
- switch (this._arrowSide) {
- case St.Side.TOP:
- y += rise;
- break;
- case St.Side.BOTTOM:
- y -= rise;
- break;
- case St.Side.LEFT:
- x += rise;
- break;
- case St.Side.RIGHT:
- x -= rise;
- break;
+ if (animate) {
+ switch (this._arrowSide) {
+ case St.Side.TOP:
+ y += rise;
+ break;
+ case St.Side.BOTTOM:
+ y -= rise;
+ break;
+ case St.Side.LEFT:
+ x += rise;
+ break;
+ case St.Side.RIGHT:
+ x -= rise;
+ break;
+ }
}
Tweener.addTween(this.actor, { opacity: 0,
diff --git a/js/ui/ctrlAltTab.js b/js/ui/ctrlAltTab.js
new file mode 100644
index 000000000..8faa6c519
--- /dev/null
+++ b/js/ui/ctrlAltTab.js
@@ -0,0 +1,254 @@
+/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
+
+const Clutter = imports.gi.Clutter;
+const Gdk = imports.gi.Gdk;
+const Gtk = imports.gi.Gtk;
+const Lang = imports.lang;
+const Meta = imports.gi.Meta;
+const Shell = imports.gi.Shell;
+const St = imports.gi.St;
+
+const AltTab = imports.ui.altTab;
+const Main = imports.ui.main;
+const Tweener = imports.ui.tweener;
+
+const POPUP_APPICON_SIZE = 96;
+const POPUP_FADE_TIME = 0.1; // seconds
+
+function CtrlAltTabManager() {
+ this._init();
+}
+
+CtrlAltTabManager.prototype = {
+ _init: function() {
+ this._items = [];
+ this._focusManager = St.FocusManager.get_for_stage(global.stage);
+ Main.wm.setKeybindingHandler('switch_panels', Lang.bind(this,
+ function (shellwm, binding, window, backwards) {
+ this.popup(backwards);
+ }));
+ },
+
+ addGroup: function(root, name, icon) {
+ this._items.push({ root: root, name: name, iconName: icon });
+ root.connect('destroy', Lang.bind(this, function() { this.removeGroup(root); }));
+ this._focusManager.add_group(root);
+ },
+
+ removeGroup: function(root) {
+ this._focusManager.remove_group(root);
+ for (let i = 0; i < this._items.length; i++) {
+ if (this._items[i].root == root) {
+ this._items.splice(i, 1);
+ return;
+ }
+ }
+ },
+
+ focusGroup: function(root) {
+ if (global.stage_input_mode == Shell.StageInputMode.NONREACTIVE ||
+ global.stage_input_mode == Shell.StageInputMode.NORMAL)
+ global.set_stage_input_mode(Shell.StageInputMode.FOCUSED);
+ root.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
+ },
+
+ popup: function(backwards) {
+ // Start with the set of focus groups that are currently mapped
+ let items = this._items.filter(function (item) { return item.root.mapped; });
+
+ // And add the windows metacity would show in its Ctrl-Alt-Tab list
+ let screen = global.screen;
+ let display = screen.get_display();
+ let windows = display.get_tab_list(Meta.TabList.DOCKS, screen, screen.get_active_workspace ());
+ let windowTracker = Shell.WindowTracker.get_default();
+ let textureCache = St.TextureCache.get_default();
+ for (let i = 0; i < windows.length; i++) {
+ let icon;
+ let app = windowTracker.get_window_app(windows[i]);
+ if (app)
+ icon = app.create_icon_texture(POPUP_APPICON_SIZE);
+ else
+ icon = textureCache.bind_pixbuf_property(windows[i], 'icon');
+ items.push({ window: windows[i],
+ name: windows[i].title,
+ iconActor: icon });
+ }
+
+ if (!items.length)
+ return;
+
+ new CtrlAltTabPopup().show(items, backwards);
+ }
+};
+
+function mod(a, b) {
+ return (a + b) % b;
+}
+
+function CtrlAltTabPopup() {
+ this._init();
+}
+
+CtrlAltTabPopup.prototype = {
+ _init : function() {
+ let primary = global.get_primary_monitor();
+ this.actor = new St.BoxLayout({ name: 'ctrlAltTabPopup',
+ reactive: true,
+ x: primary.x + primary.width / 2,
+ y: primary.y + primary.height / 2,
+ anchor_gravity: Clutter.Gravity.CENTER });
+
+ this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
+
+ this._haveModal = false;
+ this._selection = 0;
+
+ Main.uiGroup.add_actor(this.actor);
+ },
+
+ show : function(items, startBackwards) {
+ if (!Main.pushModal(this.actor))
+ return false;
+ this._haveModal = true;
+
+ this._keyPressEventId = this.actor.connect('key-press-event', Lang.bind(this, this._keyPressEvent));
+ this._keyReleaseEventId = this.actor.connect('key-release-event', Lang.bind(this, this._keyReleaseEvent));
+
+ this._items = items;
+ this._switcher = new CtrlAltTabSwitcher(items);
+ this.actor.add_actor(this._switcher.actor);
+
+ if (startBackwards)
+ this._selection = this._items.length - 1;
+ this._select(this._selection);
+
+ let [x, y, mods] = global.get_pointer();
+ if (!(mods & Gdk.ModifierType.MOD1_MASK)) {
+ this._finish();
+ return false;
+ }
+
+ this.actor.opacity = 0;
+ this.actor.show();
+ Tweener.addTween(this.actor,
+ { opacity: 255,
+ time: POPUP_FADE_TIME,
+ transition: 'easeOutQuad'
+ });
+
+ return true;
+ },
+
+ _next : function() {
+ return mod(this._selection + 1, this._items.length);
+ },
+
+ _previous : function() {
+ return mod(this._selection - 1, this._items.length);
+ },
+
+ _keyPressEvent : function(actor, event) {
+ let keysym = event.get_key_symbol();
+ let shift = (Shell.get_event_state(event) & Clutter.ModifierType.SHIFT_MASK);
+ if (shift && keysym == Clutter.KEY_Tab)
+ keysym = Clutter.ISO_Left_Tab;
+
+ if (keysym == Clutter.KEY_Escape)
+ this.destroy();
+ else if (keysym == Clutter.KEY_Tab)
+ this._select(this._next());
+ else if (keysym == Clutter.KEY_ISO_Left_Tab)
+ this._select(this._previous());
+ else if (keysym == Clutter.KEY_Left)
+ this._select(this._previous());
+ else if (keysym == Clutter.KEY_Right)
+ this._select(this._next());
+
+ return true;
+ },
+
+ _keyReleaseEvent : function(actor, event) {
+ let [x, y, mods] = global.get_pointer();
+ let state = mods & Clutter.ModifierType.MOD1_MASK;
+
+ if (state == 0)
+ this._finish();
+
+ return true;
+ },
+
+ _finish : function() {
+ this.destroy();
+
+ let item = this._items[this._selection];
+ if (item.root)
+ Main.ctrlAltTabManager.focusGroup(item.root);
+ else
+ Main.activateWindow(item.window);
+ },
+
+ _popModal: function() {
+ if (this._haveModal) {
+ Main.popModal(this.actor);
+ this._haveModal = false;
+ }
+ },
+
+ destroy : function() {
+ this._popModal();
+ Tweener.addTween(this.actor,
+ { opacity: 0,
+ time: POPUP_FADE_TIME,
+ transition: 'easeOutQuad',
+ onComplete: Lang.bind(this,
+ function() {
+ this.actor.destroy();
+ })
+ });
+ },
+
+ _onDestroy : function() {
+ if (this._keyPressEventId)
+ this.actor.disconnect(this._keyPressEventId);
+ if (this._keyReleaseEventId)
+ this.actor.disconnect(this._keyReleaseEventId);
+ },
+
+ _select : function(num) {
+ this._selection = num;
+ this._switcher.highlight(num);
+ }
+};
+
+function CtrlAltTabSwitcher(items) {
+ this._init(items);
+}
+
+CtrlAltTabSwitcher.prototype = {
+ __proto__ : AltTab.SwitcherList.prototype,
+
+ _init : function(items) {
+ AltTab.SwitcherList.prototype._init.call(this, true);
+
+ for (let i = 0; i < items.length; i++)
+ this._addIcon(items[i]);
+ },
+
+ _addIcon : function(item) {
+ let box = new St.BoxLayout({ style_class: 'alt-tab-app',
+ vertical: true });
+
+ let icon = item.iconActor;
+ if (!icon) {
+ icon = new St.Icon({ icon_name: item.iconName,
+ icon_type: St.IconType.SYMBOLIC,
+ icon_size: POPUP_APPICON_SIZE });
+ }
+ box.add(icon, { x_fill: false, y_fill: false } );
+
+ let text = new St.Label({ text: item.name });
+ box.add(text, { x_fill: false });
+
+ this.addItem(box);
+ }
+};
diff --git a/js/ui/dash.js b/js/ui/dash.js
index 39440cf73..01de6af44 100644
--- a/js/ui/dash.js
+++ b/js/ui/dash.js
@@ -78,8 +78,6 @@ function Dash() {
Dash.prototype = {
_init : function() {
- this._menus = [];
- this._menuDisplays = [];
this._maxHeight = -1;
this._iconSize = 48;
@@ -193,7 +191,8 @@ Dash.prototype = {
},
_addApp: function(app) {
- let display = new AppDisplay.AppWellIcon(app);
+ let display = new AppDisplay.AppWellIcon(app,
+ { setSizeManually: true });
display._draggable.connect('drag-begin',
Lang.bind(this, function() {
display.actor.opacity = 50;
@@ -273,7 +272,11 @@ Dash.prototype = {
if (app == null || app.is_transient())
return DND.DragMotionResult.NO_DROP;
- let numFavorites = AppFavorites.getAppFavorites().getFavorites().length;
+ let favorites = AppFavorites.getAppFavorites().getFavorites();
+ let numFavorites = favorites.length;
+
+ let favPos = favorites.indexOf(app);
+
let numChildren = this._box.get_children().length;
let boxHeight = this._box.height;
@@ -291,15 +294,16 @@ Dash.prototype = {
this._dragPlaceholderPos = pos;
if (this._dragPlaceholder)
this._dragPlaceholder.destroy();
+
+ // Don't allow positioning before or after self
+ if (favPos != -1 && (pos == favPos || pos == favPos + 1))
+ return DND.DragMotionResult.CONTINUE;
+
this._dragPlaceholder = new St.Bin({ style_class: 'dash-placeholder' });
this._box.insert_actor(this._dragPlaceholder, pos);
}
- let id = app.get_id();
-
- let favorites = AppFavorites.getAppFavorites().getFavoriteMap();
-
- let srcIsFavorite = (id in favorites);
+ let srcIsFavorite = (favPos != -1);
if (srcIsFavorite)
return DND.DragMotionResult.MOVE_DROP;
diff --git a/js/ui/docDisplay.js b/js/ui/docDisplay.js
index 17c3d415f..d2afe04f6 100644
--- a/js/ui/docDisplay.js
+++ b/js/ui/docDisplay.js
@@ -1,487 +1,11 @@
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
-const Clutter = imports.gi.Clutter;
-const Lang = imports.lang;
-const Shell = imports.gi.Shell;
-const Signals = imports.signals;
-const St = imports.gi.St;
-const Mainloop = imports.mainloop;
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
const DocInfo = imports.misc.docInfo;
-const DND = imports.ui.dnd;
-const GenericDisplay = imports.ui.genericDisplay;
-const Main = imports.ui.main;
const Search = imports.ui.search;
-const MAX_DASH_DOCS = 50;
-const DASH_DOCS_ICON_SIZE = 16;
-
-const DEFAULT_SPACING = 4;
-
-/* This class represents a single display item containing information about a document.
- * We take the current number of seconds in the constructor to avoid looking up the current
- * time for every item when they are created in a batch.
- *
- * docInfo - DocInfo object containing information about the document
- * currentSeconds - current number of seconds since the epoch
- */
-function DocDisplayItem(docInfo, currentSecs) {
- this._init(docInfo, currentSecs);
-}
-
-DocDisplayItem.prototype = {
- __proto__: GenericDisplay.GenericDisplayItem.prototype,
-
- _init : function(docInfo, currentSecs) {
- GenericDisplay.GenericDisplayItem.prototype._init.call(this);
- this._docInfo = docInfo;
-
- this._setItemInfo(docInfo.name, '');
-
- this._timeoutTime = -1;
- this._resetTimeDisplay(currentSecs);
- },
-
- //// Public methods ////
-
- getUpdateTimeoutTime: function() {
- return this._timeoutTime;
- },
-
- // Update any relative-time based displays for this item.
- redisplay: function(currentSecs) {
- this._resetTimeDisplay(currentSecs);
- },
-
- //// Public method overrides ////
-
- // Opens a document represented by this display item.
- launch : function() {
- this._docInfo.launch();
- },
-
- //// Protected method overrides ////
-
- // Returns an icon for the item.
- _createIcon : function() {
- return this._docInfo.createIcon(GenericDisplay.ITEM_DISPLAY_ICON_SIZE);
- },
-
- // Returns a preview icon for the item.
- _createPreviewIcon : function() {
- return this._docInfo.createIcon(GenericDisplay.PREVIEW_ICON_SIZE);
- },
-
- // Creates and returns a large preview icon, but only if this._docInfo is an image file
- // and we were able to generate a pixbuf from it successfully.
- _createLargePreviewIcon : function() {
- if (this._docInfo.mimeType == null || this._docInfo.mimeType.indexOf('image/') != 0)
- return null;
-
- try {
- return St.TextureCache.get_default().load_uri_sync(St.TextureCachePolicy.NONE,
- this._docInfo.uri, -1, -1);
- } catch (e) {
- // An exception will be raised when the image format isn't know
- /* FIXME: http://bugzilla.gnome.org/show_bug.cgi?id=591480: should
- * only ignore GDK_PIXBUF_ERROR_UNKNOWN_TYPE. */
- return null;
- }
- },
-
- //// Drag and Drop ////
-
- shellWorkspaceLaunch: function() {
- this.launch();
- },
-
- //// Private Methods ////
-
- // Updates the last visited time displayed in the description text for the item.
- _resetTimeDisplay: function(currentSecs) {
- let lastSecs = this._docInfo.timestamp;
- let timeDelta = currentSecs - lastSecs;
- let [text, nextUpdate] = global.format_time_relative_pretty(timeDelta);
- this._timeoutTime = currentSecs + nextUpdate;
- this._setDescriptionText(text);
- }
-};
-
-/* This class represents a display containing a collection of document items.
- * The documents are sorted by how recently they were last visited.
- */
-function DocDisplay() {
- this._init();
-}
-
-DocDisplay.prototype = {
- __proto__: GenericDisplay.GenericDisplay.prototype,
-
- _init : function() {
- GenericDisplay.GenericDisplay.prototype._init.call(this);
- // We keep a single timeout callback for updating last visited times
- // for all the items in the display. This avoids creating individual
- // callbacks for each item in the display. So proper time updates
- // for individual items and item details depend on the item being
- // associated with one of the displays.
- this._updateTimeoutTargetTime = -1;
- this._updateTimeoutId = 0;
-
- this._docManager = DocInfo.getDocManager();
- this._docsStale = true;
- this._docManager.connect('changed', Lang.bind(this, function(mgr, userData) {
- this._docsStale = true;
- // Changes in local recent files should not happen when we are in the Overview mode,
- // but redisplaying right away is cool when we use Zephyr.
- // Also, we might be displaying remote documents, like Google Docs, in the future
- // which might be edited by someone else.
- this._redisplay(GenericDisplay.RedisplayFlags.NONE);
- }));
-
- this.connect('destroy', Lang.bind(this, function (o) {
- if (this._updateTimeoutId > 0)
- Mainloop.source_remove(this._updateTimeoutId);
- }));
- },
-
- //// Protected method overrides ////
-
- // Gets the list of recent items from the recent items manager.
- _refreshCache : function() {
- if (!this._docsStale)
- return true;
- this._allItems = {};
- Lang.copyProperties(this._docManager.getInfosByUri(), this._allItems);
- this._docsStale = false;
- return false;
- },
-
- // Sets the list of the displayed items based on how recently they were last visited.
- _setDefaultList : function() {
- // It seems to be an implementation detail of the Mozilla JavaScript that object
- // properties are returned during the iteration in the same order in which they were
- // defined, but it is not a guarantee according to this
- // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Statements/for...in
- // While this._allItems associative array seems to always be ordered by last added,
- // as the results of this._recentManager.get_items() based on which it is constructed are,
- // we should do the sorting manually because we want the order to be based on last visited.
- //
- // This function is called each time the search string is set back to '' or we display
- // the Overview, so we are doing the sorting over the same items multiple times if the list
- // of recent items didn't change. We could store an additional array of doc ids and sort
- // them once when they are returned by this._recentManager.get_items() to avoid having to do
- // this sorting each time, but the sorting seems to be very fast anyway, so there is no need
- // to introduce an additional class variable.
- this._matchedItems = {};
- this._matchedItemKeys = [];
- let docIdsToRemove = [];
- for (docId in this._allItems) {
- this._matchedItems[docId] = 1;
- this._matchedItemKeys.push(docId);
- }
-
- for (docId in docIdsToRemove) {
- delete this._allItems[docId];
- }
-
- this._matchedItemKeys.sort(Lang.bind(this, this._compareItems));
- },
-
- // Compares items associated with the item ids based on how recently the items
- // were last visited.
- // Returns an integer value indicating the result of the comparison.
- _compareItems : function(itemIdA, itemIdB) {
- let docA = this._allItems[itemIdA];
- let docB = this._allItems[itemIdB];
-
- return docB.timestamp - docA.timestamp;
- },
-
- // Checks if the item info can be a match for the search string by checking
- // the name of the document. Item info is expected to be GtkRecentInfo.
- // Returns a boolean flag indicating if itemInfo is a match.
- _isInfoMatching : function(itemInfo, search) {
- if (!itemInfo.exists())
- return false;
-
- if (search == null || search == '')
- return true;
-
- let name = itemInfo.name.toLowerCase();
- if (name.indexOf(search) >= 0)
- return true;
- // TODO: we can also check doc URIs, so that
- // if you search for a directory name, we display recent files from it
- return false;
- },
-
- // Creates a DocDisplayItem based on itemInfo, which is expected to be a DocInfo object.
- _createDisplayItem: function(itemInfo) {
- let currentSecs = new Date().getTime() / 1000;
- let docDisplayItem = new DocDisplayItem(itemInfo, currentSecs);
- this._updateTimeoutCallback(docDisplayItem, currentSecs);
- return docDisplayItem;
- },
-
- //// Private Methods ////
-
- // A callback function that redisplays the items, updating their descriptions,
- // and sets up a new timeout callback.
- _docTimeout: function () {
- let currentSecs = new Date().getTime() / 1000;
- this._updateTimeoutId = 0;
- this._updateTimeoutTargetTime = -1;
- for (let docId in this._displayedItems) {
- let docDisplayItem = this._displayedItems[docId];
- docDisplayItem.redisplay(currentSecs);
- this._updateTimeoutCallback(docDisplayItem, currentSecs);
- }
- return false;
- },
-
- // Updates the timeout callback if the timeout time for the docDisplayItem
- // is earlier than the target time for the current timeout callback.
- _updateTimeoutCallback: function (docDisplayItem, currentSecs) {
- let timeoutTime = docDisplayItem.getUpdateTimeoutTime();
- if (this._updateTimeoutTargetTime < 0 || timeoutTime < this._updateTimeoutTargetTime) {
- if (this._updateTimeoutId > 0)
- Mainloop.source_remove(this._updateTimeoutId);
- this._updateTimeoutId = Mainloop.timeout_add_seconds(timeoutTime - currentSecs, Lang.bind(this, this._docTimeout));
- this._updateTimeoutTargetTime = timeoutTime;
- }
- }
-};
-
-Signals.addSignalMethods(DocDisplay.prototype);
-
-function DashDocDisplayItem(docInfo) {
- this._init(docInfo);
-}
-
-DashDocDisplayItem.prototype = {
- _init: function(docInfo) {
- this._info = docInfo;
- this._icon = docInfo.createIcon(DASH_DOCS_ICON_SIZE);
-
- this.actor = new St.Clickable({ style_class: 'recent-docs-item',
- reactive: true,
- x_align: St.Align.START });
-
- let box = new St.BoxLayout({ style_class: 'recent-docs-item-box' });
- this.actor.set_child(box);
-
- box.add(this._icon);
-
- let text = new St.Label({ text: docInfo.name });
- box.add(text);
-
- this.actor.connect('clicked', Lang.bind(this, function () {
- docInfo.launch();
- Main.overview.hide();
- }));
-
- this.actor._delegate = this;
- let draggable = DND.makeDraggable(this.actor);
- draggable.connect('drag-begin',
- Lang.bind(this, function() {
- Main.overview.beginItemDrag(this);
- }));
- draggable.connect('drag-end',
- Lang.bind(this, function() {
- Main.overview.endItemDrag(this);
- }));
- },
-
- getUri: function() {
- return this._info.uri;
- },
-
- getDragActorSource: function() {
- return this._icon;
- },
-
- getDragActor: function(stageX, stageY) {
- this.dragActor = this._info.createIcon(DASH_DOCS_ICON_SIZE);
- return this.dragActor;
- },
-
- //// Drag and drop functions ////
-
- shellWorkspaceLaunch: function () {
- this._info.launch();
- }
-};
-
-/**
- * Class used to display two column recent documents in the dash
- */
-function DashDocDisplay() {
- this._init();
-}
-
-DashDocDisplay.prototype = {
- _init: function() {
- this.actor = new Shell.GenericContainer();
- this.actor.connect('get-preferred-width', Lang.bind(this, this._getPreferredWidth));
- this.actor.connect('get-preferred-height', Lang.bind(this, this._getPreferredHeight));
- this.actor.connect('allocate', Lang.bind(this, this._allocate));
- this._workId = Main.initializeDeferredWork(this.actor, Lang.bind(this, this._redisplay));
-
- this._actorsByUri = {};
-
- this._docManager = DocInfo.getDocManager();
- this._docManager.connect('changed', Lang.bind(this, this._onDocsChanged));
- this._pendingDocsChange = true;
- this._checkDocExistence = false;
- },
-
- _getPreferredWidth: function(actor, forHeight, alloc) {
- let children = actor.get_children();
-
- // We use two columns maximum. Just take the min and natural size of the
- // first two items, even though strictly speaking it's not correct; we'd
- // need to calculate how many items we could fit for the height, then
- // take the biggest preferred width for each column.
- // In practice the dash gets a fixed width anyways.
-
- // If we have one child, add its minimum and natural size
- if (children.length > 0) {
- let [minSize, naturalSize] = children[0].get_preferred_width(forHeight);
- alloc.min_size += minSize;
- alloc.natural_size += naturalSize;
- }
- // If we have two, add its size, plus DEFAULT_SPACING
- if (children.length > 1) {
- let [minSize, naturalSize] = children[1].get_preferred_width(forHeight);
- alloc.min_size += DEFAULT_SPACING + minSize;
- alloc.natural_size += DEFAULT_SPACING + naturalSize;
- }
- },
-
- _getPreferredHeight: function(actor, forWidth, alloc) {
- let children = actor.get_children();
-
- // The width of an item is our allocated width, minus spacing, divided in half.
- this._itemWidth = Math.floor((forWidth - DEFAULT_SPACING) / 2);
-
- let maxNatural = 0;
- for (let i = 0; i < children.length; i++) {
- let child = children[i];
- let [minSize, naturalSize] = child.get_preferred_height(this._itemWidth);
- maxNatural = Math.max(maxNatural, naturalSize);
- }
-
- this._itemHeight = maxNatural;
-
- let firstColumnChildren = Math.ceil(children.length / 2);
- alloc.natural_size = (firstColumnChildren * maxNatural +
- (firstColumnChildren - 1) * DEFAULT_SPACING);
- },
-
- _allocate: function(actor, box, flags) {
- let width = box.x2 - box.x1;
- let height = box.y2 - box.y1;
-
- // Make sure this._itemWidth/Height have been computed, even
- // if the parent actor didn't check our size before allocating.
- // (Not clear if that is required or not as a Clutter
- // invariant; this is safe and cheap because of caching.)
- actor.get_preferred_height(width);
-
- let children = actor.get_children();
-
- let x = 0;
- let y = 0;
- let columnIndex = 0;
- let i = 0;
- // Loop over the children, going vertically down first. When we run
- // out of vertical space (our y variable is bigger than box.y2), switch
- // to the second column.
- while (i < children.length) {
- let child = children[i];
-
- if (y + this._itemHeight > box.y2) {
- // Is this the second column, or we're in
- // the first column and can't even fit one
- // item? In that case, break.
- if (columnIndex == 1 || i == 0) {
- break;
- }
- // Set x to the halfway point.
- columnIndex += 1;
- x = x + this._itemWidth + DEFAULT_SPACING;
- // And y is back to the top.
- y = 0;
- // Retry this same item, now that we're in the second column.
- // By looping back to the top here, we re-test the size
- // again for the second column.
- continue;
- }
-
- let childBox = new Clutter.ActorBox();
- childBox.x1 = x;
- childBox.y1 = y;
- childBox.x2 = childBox.x1 + this._itemWidth;
- childBox.y2 = y + this._itemHeight;
-
- y = childBox.y2 + DEFAULT_SPACING;
-
- child.allocate(childBox, flags);
- this.actor.set_skip_paint(child, false);
-
- i++;
- }
-
- if (this._checkDocExistence) {
- // Now we know how many docs we are displaying, queue a check to see if any of them
- // have been deleted. If they are deleted, then we'll get a 'changed' signal; since
- // we'll now be displaying items we weren't previously, we'll check again to see
- // if they were deleted, and so forth and so on.
- // TODO: We should change this to ask for as many as we can fit in the given space:
- // https://bugzilla.gnome.org/show_bug.cgi?id=603522#c23
- this._docManager.queueExistenceCheck(i);
- this._checkDocExistence = false;
- }
-
- for (; i < children.length; i++)
- this.actor.set_skip_paint(children[i], true);
- },
-
- _onDocsChanged: function() {
- this._checkDocExistence = true;
- Main.queueDeferredWork(this._workId);
- },
-
- _redisplay: function() {
- // Should be kept alive by the _actorsByUri
- this.actor.remove_all();
- let docs = this._docManager.getTimestampOrderedInfos();
- for (let i = 0; i < docs.length && i < MAX_DASH_DOCS; i++) {
- let doc = docs[i];
- let display = this._actorsByUri[doc.uri];
- if (display) {
- this.actor.add_actor(display.actor);
- } else {
- let display = new DashDocDisplayItem(doc);
- this.actor.add_actor(display.actor);
- this._actorsByUri[doc.uri] = display;
- }
- }
- // Any unparented actors must have been deleted
- for (let uri in this._actorsByUri) {
- let display = this._actorsByUri[uri];
- if (display.actor.get_parent() == null) {
- display.actor.destroy();
- delete this._actorsByUri[uri];
- }
- }
- this.emit('changed');
- }
-};
-
-Signals.addSignalMethods(DashDocDisplay.prototype);
function DocSearchProvider() {
this._init();
diff --git a/js/ui/endSessionDialog.js b/js/ui/endSessionDialog.js
new file mode 100644
index 000000000..62b69b12b
--- /dev/null
+++ b/js/ui/endSessionDialog.js
@@ -0,0 +1,504 @@
+/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*-
+ *
+ * Copyright 2010 Red Hat, Inc
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ */
+
+const DBus = imports.dbus;
+const Lang = imports.lang;
+const Signals = imports.signals;
+
+const Gettext = imports.gettext.domain('gnome-shell');
+const _ = Gettext.gettext;
+
+const Clutter = imports.gi.Clutter;
+const Gdm = imports.gi.Gdm;
+const GLib = imports.gi.GLib;
+const Gtk = imports.gi.Gtk;
+const Pango = imports.gi.Pango;
+const St = imports.gi.St;
+const Shell = imports.gi.Shell;
+
+const GnomeSession = imports.misc.gnomeSession
+const Lightbox = imports.ui.lightbox;
+const Main = imports.ui.main;
+const ModalDialog = imports.ui.modalDialog;
+const Tweener = imports.ui.tweener;
+
+let _endSessionDialog = null;
+
+const _ITEM_ICON_SIZE = 48;
+const _DIALOG_ICON_SIZE = 32;
+
+const GSM_SESSION_MANAGER_LOGOUT_FORCE = 2;
+
+const EndSessionDialogIface = {
+ name: 'org.gnome.SessionManager.EndSessionDialog',
+ methods: [{ name: 'Open',
+ inSignature: 'uuuao',
+ outSignature: ''
+ }
+ ],
+ signals: [{ name: 'Canceled',
+ outSignature: '',
+ }],
+ properties: []
+};
+
+const logoutDialogContent = {
+ subjectWithUser: _("Log Out %s"),
+ subject: _("Log Out"),
+ inhibitedDescription: _("Click Log Out to quit these applications and log out of the system."),
+ uninhibitedDescriptionWithUser: _("%s will be logged out automatically in %d seconds."),
+ uninhibitedDescription: _("You will be logged out automatically in %d seconds."),
+ endDescription: _("Logging out of the system."),
+ confirmButtonText: _("Log Out"),
+ iconStyleClass: 'end-session-dialog-logout-icon'
+};
+
+const shutdownDialogContent = {
+ subject: _("Shut Down"),
+ inhibitedDescription: _("Click Shut Down to quit these applications and shut down the system."),
+ uninhibitedDescription: _("The system will shut down automatically in %d seconds."),
+ endDescription: _("Shutting down the system."),
+ confirmButtonText: _("Shut Down"),
+ iconName: 'system-shutdown',
+ iconStyleClass: 'end-session-dialog-shutdown-icon'
+};
+
+const restartDialogContent = {
+ subject: _("Restart"),
+ inhibitedDescription: _("Click Restart to quit these applications and restart the system."),
+ uninhibitedDescription: _("The system will restart automatically in %d seconds."),
+ endDescription: _("Restarting the system."),
+ confirmButtonText: _("Restart"),
+ iconName: 'system-shutdown',
+ iconStyleClass: 'end-session-dialog-shutdown-icon'
+};
+
+const DialogContent = {
+ 0 /* GSM_SHELL_END_SESSION_DIALOG_TYPE_LOGOUT */: logoutDialogContent,
+ 1 /* GSM_SHELL_END_SESSION_DIALOG_TYPE_SHUTDOWN */: shutdownDialogContent,
+ 2 /* GSM_SHELL_END_SESSION_DIALOG_TYPE_RESTART */: restartDialogContent
+};
+
+function findAppFromInhibitor(inhibitor) {
+ let desktopFile = inhibitor.app_id;
+
+ if (!GLib.str_has_suffix(desktopFile, '.desktop'))
+ desktopFile += '.desktop';
+
+ let candidateDesktopFiles = [];
+
+ candidateDesktopFiles.push(desktopFile);
+ candidateDesktopFiles.push('gnome-' + desktopFile);
+
+ let appSystem = Shell.AppSystem.get_default();
+ let app = null;
+ for (let i = 0; i < candidateDesktopFiles.length; i++) {
+ try {
+ app = appSystem.get_app(candidateDesktopFiles[i]);
+
+ if (app)
+ break;
+ } catch(e) {
+ // ignore errors
+ }
+ }
+
+ return app;
+}
+
+function ListItem(app, reason) {
+ this._init(app, reason);
+}
+
+ListItem.prototype = {
+ _init: function(app, reason) {
+ this._app = app;
+ this._reason = reason;
+
+ if (this._reason == null)
+ this._reason = '';
+
+ let layout = new St.BoxLayout({ vertical: false});
+
+ this.actor = new St.Clickable({ style_class: 'end-session-dialog-app-list-item',
+ can_focus: true,
+ child: layout,
+ reactive: true,
+ x_align: St.Align.START,
+ x_fill: true });
+
+ this._icon = this._app.create_icon_texture(_ITEM_ICON_SIZE);
+
+ let iconBin = new St.Bin({ style_class: 'end-session-dialog-app-list-item-icon',
+ child: this._icon });
+ layout.add(iconBin);
+
+ let textLayout = new St.BoxLayout({ style_class: 'end-session-dialog-app-list-item-text-box',
+ vertical: true });
+ layout.add(textLayout);
+
+ this._nameLabel = new St.Label({ text: this._app.get_name(),
+ style_class: 'end-session-dialog-app-list-item-name' });
+ textLayout.add(this._nameLabel,
+ { expand: false,
+ x_fill: true });
+
+ this._descriptionLabel = new St.Label({ text: this._reason,
+ style_class: 'end-session-dialog-app-list-item-description' });
+ textLayout.add(this._descriptionLabel,
+ { expand: true,
+ x_fill: true });
+
+ this.actor.connect('clicked', Lang.bind(this, this._onClicked));
+ },
+
+ _onClicked: function() {
+ this.emit('activate');
+ this._app.activate();
+ }
+};
+Signals.addSignalMethods(ListItem.prototype);
+
+// The logout timer only shows updates every 10 seconds
+// until the last 10 seconds, then it shows updates every
+// second. This function takes a given time and returns
+// what we should show to the user for that time.
+function _roundSecondsToInterval(totalSeconds, secondsLeft, interval) {
+ let time;
+
+ time = Math.ceil(secondsLeft);
+
+ // Final count down is in decrements of 1
+ if (time <= interval)
+ return time;
+
+ // Round up higher than last displayable time interval
+ time += interval - 1;
+
+ // Then round down to that time interval
+ if (time > totalSeconds)
+ time = Math.ceil(totalSeconds);
+ else
+ time -= time % interval;
+
+ return time;
+}
+
+function _setLabelText(label, text) {
+ if (text) {
+ label.set_text(text);
+ label.show();
+ } else {
+ label.set_text('');
+ label.hide();
+ }
+}
+
+function EndSessionDialog() {
+ if (_endSessionDialog == null) {
+ this._init();
+ DBus.session.exportObject('/org/gnome/SessionManager/EndSessionDialog',
+ this);
+ _endSessionDialog = this;
+ }
+
+ return _endSessionDialog;
+}
+
+function init() {
+ // This always returns the same singleton object
+ // By instantiating it initially, we register the
+ // bus object, etc.
+ let dialog = new EndSessionDialog();
+}
+
+EndSessionDialog.prototype = {
+ __proto__: ModalDialog.ModalDialog.prototype,
+
+ _init: function() {
+ ModalDialog.ModalDialog.prototype._init.call(this);
+
+ this._user = Gdm.UserManager.ref_default().get_user(GLib.get_user_name());
+
+ this._secondsLeft = 0;
+ this._totalSecondsToStayOpen = 0;
+ this._inhibitors = [];
+
+ this.connect('destroy',
+ Lang.bind(this, this._onDestroy));
+ this.connect('opened',
+ Lang.bind(this, this._onOpened));
+
+ this._userLoadedId = this._user.connect('notify::is_loaded',
+ Lang.bind(this, this._updateContent));
+
+ this._userChangedId = this._user.connect('changed',
+ Lang.bind(this, this._updateContent));
+
+ let mainContentLayout = new St.BoxLayout({ vertical: false });
+ this.contentLayout.add(mainContentLayout,
+ { x_fill: true,
+ y_fill: false });
+
+ this._iconBin = new St.Bin();
+ mainContentLayout.add(this._iconBin,
+ { x_fill: true,
+ y_fill: false,
+ x_align: St.Align.END,
+ y_align: St.Align.START });
+
+ let messageLayout = new St.BoxLayout({ vertical: true });
+ mainContentLayout.add(messageLayout,
+ { y_align: St.Align.START });
+
+ this._subjectLabel = new St.Label({ style_class: 'end-session-dialog-subject' });
+
+ messageLayout.add(this._subjectLabel,
+ { y_fill: false,
+ y_align: St.Align.START });
+
+ this._descriptionLabel = new St.Label({ style_class: 'end-session-dialog-description' });
+ this._descriptionLabel.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
+ this._descriptionLabel.clutter_text.line_wrap = true;
+
+ messageLayout.add(this._descriptionLabel,
+ { y_fill: true,
+ y_align: St.Align.START });
+
+ let scrollView = new St.ScrollView({ style_class: 'end-session-dialog-app-list'});
+ scrollView.set_policy(Gtk.PolicyType.NEVER,
+ Gtk.PolicyType.AUTOMATIC);
+ this.contentLayout.add(scrollView,
+ { x_fill: true,
+ y_fill: true });
+ this._applicationList = new St.BoxLayout({ vertical: true });
+ scrollView.add_actor(this._applicationList,
+ { x_fill: true,
+ y_fill: true,
+ x_align: St.Align.START,
+ y_align: St.Align.MIDDLE });
+ },
+
+ _onDestroy: function() {
+ this._user.disconnect(this._userLoadedId);
+ this._user.disconnect(this._userChangedId);
+ },
+
+ _setIconFromFile: function(iconFile, styleClass) {
+ if (styleClass)
+ this._iconBin.set_style_class_name(styleClass);
+ this._iconBin.set_style(null);
+
+ this._iconBin.child = null;
+ if (iconFile) {
+ this._iconBin.show();
+ this._iconBin.set_style('background-image: url("' + iconFile + '");');
+ } else {
+ this._iconBin.hide();
+ }
+ },
+
+ _setIconFromName: function(iconName, styleClass) {
+ if (styleClass)
+ this._iconBin.set_style_class_name(styleClass);
+ this._iconBin.set_style(null);
+
+ if (iconName != null) {
+ let textureCache = St.TextureCache.get_default();
+ let icon = textureCache.load_icon_name(this._iconBin.get_theme_node(),
+ iconName,
+ St.IconType.SYMBOLIC,
+ _DIALOG_ICON_SIZE);
+
+ this._iconBin.child = icon;
+ this._iconBin.show();
+ } else {
+ this._iconBin.child = null;
+ this._iconBin.hide();
+ }
+ },
+
+ _updateContent: function() {
+ if (this.state != ModalDialog.State.OPENING &&
+ this.state != ModalDialog.State.OPENED)
+ return;
+
+ let dialogContent = DialogContent[this._type];
+
+ let subject = dialogContent.subject;
+ let description;
+
+ if (this._user.is_loaded && !dialogContent.iconName) {
+ let iconFile = this._user.get_icon_file();
+
+ this._setIconFromFile(iconFile, dialogContent.iconStyleClass);
+ } else if (dialogContent.iconName) {
+ this._setIconFromName(dialogContent.iconName,
+ dialogContent.iconStyleClass);
+ }
+
+ if (this._inhibitors.length > 0) {
+ this._stopTimer();
+ description = dialogContent.inhibitedDescription;
+ } else if (this._secondsLeft > 0 && this._inhibitors.length == 0) {
+ let displayTime = _roundSecondsToInterval(this._totalSecondsToStayOpen,
+ this._secondsLeft,
+ 10);
+
+ if (this._user.is_loaded) {
+ let realName = this._user.get_real_name();
+
+ if (realName != null) {
+ if (dialogContent.subjectWithUser)
+ subject = dialogContent.subjectWithUser.format(realName);
+
+ if (dialogContent.uninhibitedDescriptionWithUser)
+ description = dialogContent.uninhibitedDescriptionWithUser.format(realName, displayTime);
+ else
+ description = dialogContent.uninhibitedDescription.format(displayTime);
+ }
+ }
+
+ if (!description)
+ description = dialogContent.uninhibitedDescription.format(displayTime);
+ } else {
+ description = dialogContent.endDescription;
+ }
+
+ _setLabelText(this._subjectLabel, subject);
+ _setLabelText(this._descriptionLabel, description);
+ },
+
+ _updateButtons: function() {
+ if (this.state != ModalDialog.State.OPENING &&
+ this.state != ModalDialog.State.OPENED)
+ return;
+
+ let dialogContent = DialogContent[this._type];
+ let confirmButtonText = _("Confirm");
+
+ if (dialogContent.confirmButtonText)
+ confirmButtonText = dialogContent.confirmButtonText;
+
+ this.setButtons([{ label: _("Cancel"),
+ action: Lang.bind(this, this.cancel),
+ key: Clutter.Escape
+ },
+ { label: confirmButtonText,
+ action: Lang.bind(this, this._confirm)
+ }]);
+ },
+
+ cancel: function() {
+ this._stopTimer();
+ DBus.session.emit_signal('/org/gnome/SessionManager/EndSessionDialog',
+ 'org.gnome.SessionManager.EndSessionDialog',
+ 'Canceled', '', []);
+ this.close(global.get_current_time());
+ },
+
+ _confirm: function() {
+ this._fadeOutDialog();
+ this._stopTimer();
+ DBus.session.emit_signal('/org/gnome/SessionManager/EndSessionDialog',
+ 'org.gnome.SessionManager.EndSessionDialog',
+ 'Confirmed', '', []);
+ },
+
+ _onOpened: function() {
+ if (this._inhibitors.length == 0)
+ this._startTimer();
+ },
+
+ _startTimer: function() {
+ this._secondsLeft = this._totalSecondsToStayOpen;
+ Tweener.addTween(this,
+ { _secondsLeft: 0,
+ time: this._secondsLeft,
+ transition: 'linear',
+ onUpdate: Lang.bind(this, this._updateContent),
+ onComplete: Lang.bind(this, this._confirm),
+ });
+ },
+
+ _stopTimer: function() {
+ Tweener.removeTweens(this);
+ this._secondsLeft = 0;
+ },
+
+ _onInhibitorLoaded: function(inhibitor) {
+ if (this._inhibitors.indexOf(inhibitor) < 0) {
+ // Stale inhibitor
+ return;
+ }
+
+ let app = findAppFromInhibitor(inhibitor);
+
+ if (app) {
+ let item = new ListItem(app, inhibitor.reason);
+ item.connect('activate',
+ Lang.bind(this, function() {
+ this.close(global.get_current_time());
+ }));
+ this._applicationList.add(item.actor, { x_fill: true });
+ this._stopTimer();
+ } else {
+ // inhibiting app is a service, not an application
+ this._inhibitors.splice(this._inhibitors.indexOf(inhibitor), 1);
+ }
+
+ this._updateContent();
+ },
+
+ OpenAsync: function(type, timestamp, totalSecondsToStayOpen, inhibitorObjectPaths, callback) {
+ this._totalSecondsToStayOpen = totalSecondsToStayOpen;
+ this._inhibitors = [];
+ this._applicationList.remove_all();
+ this._type = type;
+
+ if (!(this._type in DialogContent))
+ throw new DBus.DBusError('org.gnome.Shell.ModalDialog.TypeError',
+ "Unknown dialog type requested");
+
+ for (let i = 0; i < inhibitorObjectPaths.length; i++) {
+ let inhibitor = new GnomeSession.Inhibitor(inhibitorObjectPaths[i]);
+
+ inhibitor.connect('is-loaded',
+ Lang.bind(this, function() {
+ this._onInhibitorLoaded(inhibitor);
+ }));
+ this._inhibitors.push(inhibitor);
+ }
+
+ if (!this.open(timestamp))
+ throw new DBus.DBusError('org.gnome.Shell.ModalDialog.GrabError',
+ "Cannot grab pointer and keyboard");
+
+ this._updateButtons();
+ this._updateContent();
+
+ let signalId = this.connect('opened',
+ Lang.bind(this, function() {
+ callback();
+ this.disconnect(signalId);
+ }));
+ }
+};
+DBus.conformExport(EndSessionDialog.prototype, EndSessionDialogIface);
diff --git a/js/ui/environment.js b/js/ui/environment.js
index 0ab354c19..0adf3af6e 100644
--- a/js/ui/environment.js
+++ b/js/ui/environment.js
@@ -88,7 +88,7 @@ function init() {
_blockMethod('Clutter.Event.get_state', 'Shell.get_event_state',
'gjs\'s handling of Clutter.ModifierType is broken. See bug 597292.');
- _blockMethod('Gdk.Display.get_device_state', 'global.get_pointer',
+ _blockMethod('Gdk.Device.get_state', 'global.get_pointer',
'gjs\'s handling of Gdk.ModifierType is broken. See bug 597292.');
_blockMethod('Gdk.Window.get_device_position', 'global.get_pointer',
'gjs\'s handling of Gdk.ModifierType is broken. See bug 597292.');
diff --git a/js/ui/extensionSystem.js b/js/ui/extensionSystem.js
index 5315d90c3..8a514a53f 100644
--- a/js/ui/extensionSystem.js
+++ b/js/ui/extensionSystem.js
@@ -4,6 +4,8 @@ const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio;
const St = imports.gi.St;
+const Config = imports.misc.config;
+
const ExtensionState = {
ENABLED: 1,
DISABLED: 2,
@@ -25,6 +27,36 @@ var disabledExtensions;
// GFile for user extensions
var userExtensionsDir = null;
+/**
+ * versionCheck:
+ * @required: an array of versions we're compatible with
+ * @current: the version we have
+ *
+ * Check if a component is compatible for an extension.
+ * @required is an array, and at least one version must match.
+ * @current must be in the format ...
+ * is always ignored
+ * is ignored if is even (so you can target the
+ * whole stable release)
+ * and must match
+ * Each target version must be at least and
+ */
+function versionCheck(required, current) {
+ let currentArray = current.split('.');
+ let major = currentArray[0];
+ let minor = currentArray[1];
+ let point = currentArray[2];
+ for (let i = 0; i < required.length; i++) {
+ let requiredArray = required[i].split('.');
+ if (requiredArray[0] == major &&
+ requiredArray[1] == minor &&
+ (requiredArray[2] == point ||
+ (requiredArray[2] == undefined && parseInt(minor) % 2 == 0)))
+ return true;
+ }
+ return false;
+}
+
function loadExtension(dir, enabled, type) {
let info;
let baseErrorString = 'While loading extension from "' + dir.get_parse_name() + '": ';
@@ -43,8 +75,8 @@ function loadExtension(dir, enabled, type) {
global.logError(baseErrorString + 'Failed to parse metadata.json: ' + e);
return;
}
- let requiredProperties = ['uuid', 'name', 'description'];
- for (let i = 0; i < requiredProperties; i++) {
+ let requiredProperties = ['uuid', 'name', 'description', 'shell-version'];
+ for (let i = 0; i < requiredProperties.length; i++) {
let prop = requiredProperties[i];
if (!meta[prop]) {
global.logError(baseErrorString + 'missing "' + prop + '" property in metadata.json');
@@ -68,6 +100,12 @@ function loadExtension(dir, enabled, type) {
return;
}
+ if (!versionCheck(meta['shell-version'], Config.PACKAGE_VERSION) ||
+ (meta['js-version'] && !versionCheck(meta['js-version'], Config.GJS_VERSION))) {
+ global.logError(baseErrorString + 'extension is not compatible with current GNOME Shell and/or GJS version');
+ return;
+ }
+
extensionMeta[meta.uuid] = meta;
extensionMeta[meta.uuid].type = type;
extensionMeta[meta.uuid].path = dir.get_path();
diff --git a/js/ui/genericDisplay.js b/js/ui/genericDisplay.js
deleted file mode 100644
index 071599315..000000000
--- a/js/ui/genericDisplay.js
+++ /dev/null
@@ -1,693 +0,0 @@
-/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
-
-const Gtk = imports.gi.Gtk;
-const Lang = imports.lang;
-const Signals = imports.signals;
-const St = imports.gi.St;
-
-const DND = imports.ui.dnd;
-const Main = imports.ui.main;
-
-const RedisplayFlags = { NONE: 0,
- FULL: 1 << 1,
- SUBSEARCH: 1 << 2,
- IMMEDIATE: 1 << 3 };
-
-// Used by subclasses
-const ITEM_DISPLAY_ICON_SIZE = 48;
-const PREVIEW_ICON_SIZE = 96;
-
-/* This is a virtual class that represents a single display item containing
- * a name, a description, and an icon. It allows selecting an item and represents
- * it by highlighting it with a different background color than the default.
- */
-function GenericDisplayItem() {
- this._init();
-}
-
-GenericDisplayItem.prototype = {
- _init: function() {
- this.actor = new St.BoxLayout({ style_class: 'generic-display-item',
- reactive: true });
-
- this.actor._delegate = this;
- this.actor.connect('button-release-event',
- Lang.bind(this,
- function() {
- // Activates the item by launching it
- this.emit('activate');
- return true;
- }));
-
- let draggable = DND.makeDraggable(this.actor);
- draggable.connect('drag-begin',
- Lang.bind(this, function() {
- Main.overview.beginItemDrag(this);
- }));
- draggable.connect('drag-end',
- Lang.bind(this, function() {
- Main.overview.endItemDrag(this);
- }));
-
- this._iconBin = new St.Bin();
- this.actor.add(this._iconBin);
-
- this._infoText = new St.BoxLayout({ style_class: 'generic-display-item-text',
- vertical: true });
- this.actor.add(this._infoText, { expand: true, y_fill: false });
-
- this._name = null;
- this._description = null;
- this._icon = null;
-
- this._initialLoadComplete = false;
-
- // An array of details description actors that we create over time for the item.
- // It is used for updating the description text inside the details actor when
- // the description text for the item is updated.
- this._detailsDescriptions = [];
- },
-
- //// Draggable object interface ////
-
- // Returns a cloned texture of the item's icon to represent the item as it
- // is being dragged.
- getDragActor: function(stageX, stageY) {
- return this._createIcon();
- },
-
- // Returns the item icon, a separate copy of which is used to
- // represent the item as it is being dragged. This is used to
- // determine a snap-back location for the drag icon if it does
- // not get accepted by any drop target.
- getDragActorSource: function() {
- return this._icon;
- },
-
- //// Public methods ////
-
- // Highlights the item by setting a different background color than the default
- // if isSelected is true, removes the highlighting otherwise.
- markSelected: function(isSelected) {
- if (isSelected)
- this.actor.add_style_pseudo_class('selected');
- else
- this.actor.remove_style_pseudo_class('selected');
- },
-
- /*
- * Returns an actor containing item details. In the future details can have more information than what
- * the preview pop-up has and be item-type specific.
- */
- createDetailsActor: function() {
-
- let details = new St.BoxLayout({ style_class: 'generic-display-container',
- vertical: true });
-
- let mainDetails = new St.BoxLayout({ style_class: 'generic-display-container' });
-
- // Inner box with name and description
- let textDetails = new St.BoxLayout({ style_class: 'generic-display-details',
- vertical: true });
- let detailsName = new St.Label({ style_class: 'generic-display-details-name',
- text: this._name.text });
- textDetails.add(detailsName);
-
- let detailsDescription = new St.Label({ text: this._description.text });
- textDetails.add(detailsDescription);
-
- this._detailsDescriptions.push(detailsDescription);
-
- mainDetails.add(textDetails, { expand: true });
-
- let previewIcon = this._createPreviewIcon();
- let largePreviewIcon = this._createLargePreviewIcon();
-
- if (previewIcon != null && largePreviewIcon == null) {
- mainDetails.insert_actor(previewIcon, 0);
- }
-
- details.add(mainDetails);
-
- if (largePreviewIcon != null) {
- details.add(largePreviewIcon);
- }
-
- return details;
- },
-
- // Destroys the item.
- destroy: function() {
- this.actor.destroy();
- },
-
- //// Pure virtual public methods ////
-
- // Performes an action associated with launching this item, such as opening a file or an application.
- launch: function() {
- throw new Error('Not implemented');
- },
-
- //// Protected methods ////
-
- /*
- * Creates the graphical elements for the item based on the item information.
- *
- * nameText - name of the item
- * descriptionText - short description of the item
- */
- _setItemInfo: function(nameText, descriptionText) {
- if (this._name != null) {
- // this also removes this._name from the parent container,
- // so we don't need to call this.actor.remove_actor(this._name) directly
- this._name.destroy();
- this._name = null;
- }
- if (this._description != null) {
- this._description.destroy();
- this._description = null;
- }
- if (this._icon != null) {
- // though we get the icon from elsewhere, we assume its ownership here,
- // and therefore should be responsible for distroying it
- this._icon.destroy();
- this._icon = null;
- }
-
- this._icon = this._createIcon();
- this._iconBin.set_child(this._icon);
-
- this._name = new St.Label({ style_class: 'generic-display-item-name',
- text: nameText });
- this._infoText.add(this._name);
-
- this._description = new St.Label({ style_class: 'generic-display-item-description',
- text: descriptionText ? descriptionText : '' });
- this._infoText.add(this._description);
- },
-
- // Sets the description text for the item, including the description text
- // in the details actors that have been created for the item.
- _setDescriptionText: function(text) {
- this._description.text = text;
- for (let i = 0; i < this._detailsDescriptions.length; i++) {
- let detailsDescription = this._detailsDescriptions[i];
- if (detailsDescription != null) {
- detailsDescription.text = text;
- }
- }
- },
-
- //// Virtual protected methods ////
-
- // Creates and returns a large preview icon, but only if we have a detailed image.
- _createLargePreviewIcon : function() {
- return null;
- },
-
- //// Pure virtual protected methods ////
-
- // Returns an icon for the item.
- _createIcon: function() {
- throw new Error('Not implemented');
- },
-
- // Returns a preview icon for the item.
- _createPreviewIcon: function() {
- throw new Error('Not implemented');
- }
-
- //// Private methods ////
-};
-
-Signals.addSignalMethods(GenericDisplayItem.prototype);
-
-/* This is a virtual class that represents a display containing a collection of items
- * that can be filtered with a search string.
- */
-function GenericDisplay() {
- this._init();
-}
-
-GenericDisplay.prototype = {
- _init : function() {
- this._search = '';
- this._expanded = false;
-
- this.actor = new St.ScrollView({ x_fill: true,
- y_fill: false,
- vshadows: true });
- this._list = new St.BoxLayout({ style_class: 'generic-display-container',
- vertical: true });
- this.actor.add_actor(this._list);
- this.actor.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC);
-
- this._pendingRedisplay = RedisplayFlags.NONE;
- this.actor.connect('notify::mapped', Lang.bind(this, this._onMappedNotify));
-
- // map where Object represents the item info
- this._allItems = {};
- // set
- this._matchedItems = {};
- // sorted array of items matched by search
- this._matchedItemKeys = [];
- // map
- this._displayedItems = {};
- this._openDetailIndex = -1;
- this._selectedIndex = -1;
- },
-
- //// Public methods ////
-
- // Sets the search string and displays the matching items.
- setSearch: function(text) {
- let lowertext = text.toLowerCase();
- if (lowertext == this._search) {
- return;
- }
- let flags = RedisplayFlags.IMMEDIATE;
- if (this._search != '') {
- // Because we combine search terms with OR, we have to be sure that no new term
- // was introduced before deciding that the new search results will be a subset of
- // the existing search results.
- if (lowertext.indexOf(this._search) == 0 &&
- lowertext.split(/\s+/).length == this._search.split(/\s+/).length) {
- flags |= RedisplayFlags.SUBSEARCH;
- }
- }
- this._search = lowertext;
- this._redisplay(flags);
- },
-
- // Launches the item that is currently selected, closing the Overview
- activateSelected: function() {
- if (this._selectedIndex != -1) {
- let selected = this._findDisplayedByIndex(this._selectedIndex);
- selected.launch();
- this.unsetSelected();
- Main.overview.hide();
- }
- },
-
- // Moves the selection one up. If the selection was already on the top item, it's moved
- // to the bottom one. Returns true if the selection actually moved up, false if it wrapped
- // around to the bottom.
- selectUp: function() {
- let count = this._getVisibleCount();
- let selectedUp = true;
- let prev = this._selectedIndex - 1;
- if (this._selectedIndex <= 0) {
- prev = count - 1;
- selectedUp = false;
- }
- this._selectIndex(prev);
- return selectedUp;
- },
-
- // Moves the selection one down. If the selection was already on the bottom item, it's moved
- // to the top one. Returns true if the selection actually moved down, false if it wrapped
- // around to the top.
- selectDown: function() {
- let count = this._getVisibleCount();
- let selectedDown = true;
- let next = this._selectedIndex + 1;
- if (this._selectedIndex == count - 1) {
- next = 0;
- selectedDown = false;
- }
- this._selectIndex(next);
- return selectedDown;
- },
-
- // Selects the first item among the displayed items.
- selectFirstItem: function() {
- if (this.hasItems())
- this._selectIndex(0);
- },
-
- // Selects the last item among the displayed items.
- selectLastItem: function() {
- let count = this._getVisibleCount();
- if (this.hasItems())
- this._selectIndex(count - 1);
- },
-
- // Returns true if the display has some item selected.
- hasSelected: function() {
- return this._selectedIndex != -1;
- },
-
- // Removes selection if some display item is selected.
- unsetSelected: function() {
- this._selectIndex(-1);
- },
-
- // Returns true if the display has any displayed items.
- hasItems: function() {
- // TODO: figure out why this._list.displayedCount is returning a
- // positive number when this._mathedItems.length is 0
- // This can be triggered if a search string is entered for which there are no matches.
- // log('this._mathedItems.length: ' + this._matchedItems.length + ' this._list.displayedCount ' + this._list.displayedCount);
- return this._matchedItemKeys.length > 0;
- },
-
- getMatchedItemsCount: function() {
- return this._matchedItemKeys.length;
- },
-
- // Load the initial state
- load: function() {
- this._redisplay(RedisplayFlags.FULL);
- },
-
- // Should be called when the display is closed
- resetState: function() {
- this._filterReset();
- this._openDetailIndex = -1;
- this.actor.get_vscroll_bar().get_adjustment().value = 0;
- },
-
- // Returns an actor which acts as a sidebar; this is used for
- // the applications category view
- getNavigationArea: function () {
- return null;
- },
-
- createDetailsForIndex: function(index) {
- let item = this._findDisplayedByIndex(index);
- return item.createDetailsActor();
- },
-
- //// Protected methods ////
-
- _recreateDisplayItems: function() {
- this._removeAllDisplayItems();
- this._setDefaultList();
- for (let itemId in this._allItems) {
- this._addDisplayItem(itemId);
- }
- },
-
- // Creates a display item based on the information associated with itemId
- // and adds it to the list of displayed items, but does not yet display it.
- _addDisplayItem : function(itemId) {
- if (this._displayedItems.hasOwnProperty(itemId)) {
- log('Tried adding a display item for ' + itemId + ', but an item with this item id is already among displayed items.');
- return;
- }
-
- let itemInfo = this._allItems[itemId];
- let displayItem = this._createDisplayItem(itemInfo);
-
- displayItem.connect('activate',
- Lang.bind(this,
- function() {
- // update the selection
- this._selectIndex(this._list.get_children().indexOf(displayItem.actor));
- this.activateSelected();
- }));
-
- displayItem.connect('show-details',
- Lang.bind(this,
- function() {
- let index = this._list.get_children().indexOf(displayItem.actor);
- /* Close the details pane if already open */
- if (index == this._openDetailIndex) {
- this._openDetailIndex = -1;
- this.emit('show-details', -1);
- } else {
- this._openDetailIndex = index;
- this.emit('show-details', index);
- }
- }));
- this._displayedItems[itemId] = displayItem;
- },
-
- // Removes an item identifed by the itemId from the displayed items.
- _removeDisplayItem: function(itemId) {
- let children = this._list.get_children();
- let count = children.length;
- let displayItem = this._displayedItems[itemId];
- let displayItemIndex = children.indexOf(displayItem.actor);
-
- if (this.hasSelected() && count == 1) {
- this.unsetSelected();
- } else if (this.hasSelected() && displayItemIndex < this._selectedIndex) {
- this.selectUp();
- }
-
- displayItem.destroy();
-
- delete this._displayedItems[itemId];
- },
-
- // Removes all displayed items.
- _removeAllDisplayItems: function() {
- this.unsetSelected();
- for (itemId in this._displayedItems)
- this._removeDisplayItem(itemId);
- },
-
- // Return true if there's an active search or other constraint
- // on the list
- _filterActive: function() {
- return this._search != '';
- },
-
- // Called when we are resetting state
- _filterReset: function() {
- this.unsetSelected();
- },
-
- _compareSearchMatch: function(a, b) {
- let countA = this._matchedItems[a];
- let countB = this._matchedItems[b];
- if (countA > countB)
- return -1;
- else if (countA < countB)
- return 1;
- else
- return this._compareItems(a, b);
- },
-
- _setMatches: function(matches) {
- this._matchedItems = matches;
- this._matchedItemKeys = [];
- for (let itemId in this._matchedItems) {
- this._matchedItemKeys.push(itemId);
- }
- this._matchedItemKeys.sort(Lang.bind(this, this._compareSearchMatch));
- },
-
- /**
- * _redisplaySubSearch:
- * A somewhat more optimized function called when we know
- * that we're going to be displaying a subset of the items
- * we already had, in the same order. In that case, we can
- * just hide the actors that shouldn't be shown.
- */
- _redisplaySubSearch: function() {
- let matches = this._getSearchMatchedItems(true);
-
- // Just hide all from the old set,
- // we'll show the ones we want below
- for (let itemId in this._displayedItems) {
- let item = this._displayedItems[itemId];
- item.actor.hide();
- }
-
- this._setMatches(matches);
-
- for (let itemId in matches) {
- let item = this._displayedItems[itemId];
- item.actor.show();
- }
- this._list.queue_relayout();
- },
-
- _redisplayReordering: function() {
- if (!this._filterActive()) {
- this._setDefaultList();
- } else {
- this._setMatches(this._getSearchMatchedItems(false));
- }
- this._list.remove_all();
- for (let i = 0; i < this._matchedItemKeys.length; i++) {
- let itemId = this._matchedItemKeys[i];
- let item = this._displayedItems[itemId];
- item.actor.show();
- this._list.add_actor(item.actor);
- }
- },
-
- /*
- * Updates the displayed items, applying the search string if one exists.
- * @flags: Flags controlling redisplay behavior as follows:
- * SUBSEARCH - Indicates that the current _search is a superstring of the previous
- * one, which implies we only need to re-search through previous results.
- * FULL - Indicates that we need recreate all displayed items.
- * IMMEDIATE - Do the full redisplay even if we're not mapped. This is useful
- * if you want to get the number of matched items and show/hide a section based on
- * that number.
- */
- _redisplay: function(flags) {
- let immediate = (flags & RedisplayFlags.IMMEDIATE) != 0;
- if (!immediate && !this.actor.mapped) {
- this._pendingRedisplay |= flags;
- return;
- }
-
- let isSubSearch = (flags & RedisplayFlags.SUBSEARCH) != 0;
- let fullReload = (flags & RedisplayFlags.FULL) != 0;
-
- let hadSelected = this.hasSelected();
- this.unsetSelected();
-
- if (!this._initialLoadComplete)
- fullReload = true;
-
- if (!this._refreshCache())
- fullReload = true;
-
- if (fullReload) {
- this._recreateDisplayItems();
- this._initialLoadComplete = true;
- }
-
- if (isSubSearch) {
- this._redisplaySubSearch();
- } else {
- this._redisplayReordering();
- }
-
- if (hadSelected) {
- this._selectedIndex = -1;
- this.selectFirstItem();
- }
-
- this.emit('redisplayed');
- },
-
- //// Pure virtual protected methods ////
-
- // Performs the steps needed to have the latest information about the items.
- // Implementation should return %true if we are up to date, and %false
- // if a full reload occurred.
- _refreshCache: function() {
- throw new Error('Not implemented');
- },
-
- // Sets the list of the displayed items based on the default sorting order.
- // The default sorting order is specific to each implementing class.
- _setDefaultList: function() {
- throw new Error('Not implemented');
- },
-
- // Compares items associated with the item ids based on the order in which the
- // items should be displayed.
- // Intended to be used as a compareFunction for array.sort().
- // Returns an integer value indicating the result of the comparison.
- _compareItems: function(itemIdA, itemIdB) {
- throw new Error('Not implemented');
- },
-
- // Checks if the item info can be a match for the search string.
- // Returns a boolean flag indicating if that's the case.
- _isInfoMatching: function(itemInfo, search) {
- throw new Error('Not implemented');
- },
-
- // Creates a display item based on itemInfo.
- _createDisplayItem: function(itemInfo) {
- throw new Error('Not implemented');
- },
-
- //// Private methods ////
-
- _getItemSearchScore: function(itemId, terms) {
- let item = this._allItems[itemId];
- let score = 0;
- for (let i = 0; i < terms.length; i++) {
- let term = terms[i];
- if (this._isInfoMatching(item, term)) {
- score++;
- }
- }
- return score;
- },
-
- _getSearchMatchedItems: function(isSubSearch) {
- // Break the search up into terms, and search for each
- // individual term. Keep track of the number of terms
- // each item matched.
- let terms = this._search.split(/\s+/);
- let matchScores = {};
-
- if (isSubSearch) {
- for (let i = 0; i < this._matchedItemKeys.length; i++) {
- let itemId = this._matchedItemKeys[i];
- let score = this._getItemSearchScore(itemId, terms);
- if (score > 0)
- matchScores[itemId] = score;
- }
- } else {
- for (let itemId in this._displayedItems) {
- let score = this._getItemSearchScore(itemId, terms);
- if (score > 0)
- matchScores[itemId] = score;
- }
- }
- return matchScores;
- },
-
- // Returns a display item based on its index in the ordering of the
- // display children.
- _findDisplayedByIndex: function(index) {
- let actor = this._list.get_children()[index];
- return this._findDisplayedByActor(actor);
- },
-
- // Returns a display item based on the actor that represents it in
- // the display.
- _findDisplayedByActor: function(actor) {
- for (itemId in this._displayedItems) {
- let item = this._displayedItems[itemId];
- if (item.actor == actor) {
- return item;
- }
- }
- return null;
- },
-
- // Selects (e.g. highlights) a display item at the provided index,
- // updates this.selectedItemDetails actor, and emits 'selected' signal.
- _selectIndex: function(index) {
- // Cleanup from the previous item
- if (this.hasSelected()) {
- this._findDisplayedByIndex(this._selectedIndex).markSelected(false);
- }
-
- this._selectedIndex = index;
- if (index < 0)
- return;
-
- // Mark the new item as selected and create its details pane
- let item = this._findDisplayedByIndex(index);
- item.markSelected(true);
- this.emit('selected');
- },
-
- _getVisibleCount: function() {
- return this._list.get_n_children();
- },
-
- _onMappedNotify: function () {
- let mapped = this.actor.mapped;
- if (mapped && this._pendingRedisplay > RedisplayFlags.NONE)
- this._redisplay(this._pendingRedisplay);
-
- this._pendingRedisplay = RedisplayFlags.NONE;
- }
-};
-
-Signals.addSignalMethods(GenericDisplay.prototype);
diff --git a/js/ui/lookingGlass.js b/js/ui/lookingGlass.js
index 984255591..2f894366e 100644
--- a/js/ui/lookingGlass.js
+++ b/js/ui/lookingGlass.js
@@ -398,6 +398,9 @@ Inspector.prototype = {
},
_allocate: function(actor, box, flags) {
+ if (!this._eventHandler)
+ return;
+
let primary = global.get_primary_monitor();
let [minWidth, minHeight, natWidth, natHeight] =
@@ -415,6 +418,7 @@ Inspector.prototype = {
Clutter.ungrab_pointer(this._eventHandler);
Clutter.ungrab_keyboard(this._eventHandler);
this._eventHandler.destroy();
+ this._eventHandler = null;
this.emit('closed');
},
@@ -663,7 +667,7 @@ LookingGlass.prototype = {
style_class: 'lg-dialog',
vertical: true,
visible: false });
-
+ this.actor.connect('key-press-event', Lang.bind(this, this._globalKeyPressEvent));
this._interfaceSettings = new Gio.Settings({ schema: 'org.gnome.desktop.interface' });
this._interfaceSettings.connect('changed::monospace-font-name',
@@ -924,20 +928,15 @@ LookingGlass.prototype = {
if (this._open)
return;
- if (!Main.pushModal(this.actor))
+ if (!Main.pushModal(this._entry))
return;
- this._keyPressEventId = global.stage.connect('key-press-event',
- Lang.bind(this, this._globalKeyPressEvent));
-
this.actor.show();
this.actor.lower(Main.chrome.actor);
this._open = true;
Tweener.removeTweens(this.actor);
- global.stage.set_key_focus(this._entry);
-
// We inverse compensate for the slow-down so you can change the factor
// through LookingGlass without long waits.
Tweener.addTween(this.actor, { time: 0.5 / St.get_slow_down_factor(),
@@ -950,9 +949,6 @@ LookingGlass.prototype = {
if (!this._open)
return;
- if (this._keyPressEventId)
- global.stage.disconnect(this._keyPressEventId);
-
this._objInspector.actor.hide();
this._historyNavIndex = -1;
@@ -965,7 +961,7 @@ LookingGlass.prototype = {
this._borderPaintTarget = null;
}
- Main.popModal(this.actor);
+ Main.popModal(this._entry);
Tweener.addTween(this.actor, { time: 0.5 / St.get_slow_down_factor(),
transition: 'easeOutQuad',
diff --git a/js/ui/main.js b/js/ui/main.js
index ed0f0187c..fb293f3eb 100644
--- a/js/ui/main.js
+++ b/js/ui/main.js
@@ -17,8 +17,12 @@ const Mainloop = imports.mainloop;
const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
+const Gettext = imports.gettext.domain('gnome-shell');
+const _ = Gettext.gettext;
const Chrome = imports.ui.chrome;
+const CtrlAltTab = imports.ui.ctrlAltTab;
+const EndSessionDialog = imports.ui.endSessionDialog;
const Environment = imports.ui.environment;
const ExtensionSystem = imports.ui.extensionSystem;
const MessageTray = imports.ui.messageTray;
@@ -34,7 +38,9 @@ const ShellDBus = imports.ui.shellDBus;
const TelepathyClient = imports.ui.telepathyClient;
const WindowManager = imports.ui.windowManager;
const Magnifier = imports.ui.magnifier;
+const XdndHandler = imports.ui.xdndHandler;
const StatusIconDispatcher = imports.ui.statusIconDispatcher;
+const Util = imports.misc.util;
const DEFAULT_BACKGROUND_COLOR = new Clutter.Color();
DEFAULT_BACKGROUND_COLOR.from_pixel(0x2266bbff);
@@ -50,12 +56,14 @@ let messageTray = null;
let notificationDaemon = null;
let windowAttentionHandler = null;
let telepathyClient = null;
+let ctrlAltTabManager = null;
let recorder = null;
let shellDBusService = null;
let modalCount = 0;
let modalActorFocusStack = [];
let uiGroup = null;
let magnifier = null;
+let xdndHandler = null;
let statusIconDispatcher = null;
let _errorLogStack = [];
let _startDate;
@@ -103,10 +111,7 @@ function start() {
global.stage.color = DEFAULT_BACKGROUND_COLOR;
global.stage.no_clear_hint = true;
- let themeContext = St.ThemeContext.get_for_stage (global.stage);
- let stylesheetPath = global.datadir + '/theme/gnome-shell.css';
- let theme = new St.Theme ({ application_stylesheet: stylesheetPath });
- themeContext.set_theme (theme);
+ loadTheme();
let shellwm = global.window_manager;
shellwm.takeover_keybinding('panel_main_menu');
@@ -125,6 +130,7 @@ function start() {
global.stage.add_actor(uiGroup);
placesManager = new PlaceDisplay.PlacesManager();
+ xdndHandler = new XdndHandler.XdndHandler();
overview = new Overview.Overview();
chrome = new Chrome.Chrome();
magnifier = new Magnifier.Magnifier();
@@ -137,6 +143,9 @@ function start() {
telepathyClient = new TelepathyClient.Client();
panel.startStatusArea();
+ ctrlAltTabManager = new CtrlAltTab.CtrlAltTabManager();
+ ctrlAltTabManager.addGroup(panel.actor, _("Panel"), 'gnome-panel');
+
_startDate = new Date();
let recorderSettings = new Gio.Settings({ schema: 'org.gnome.shell.recorder' });
@@ -163,6 +172,10 @@ function start() {
}
});
+ // Provide the bus object for gnome-session to
+ // initiate logouts.
+ EndSessionDialog.init();
+
global.gdk_screen.connect('monitors-changed', _relayout);
ExtensionSystem.init();
@@ -191,6 +204,18 @@ function start() {
}
}
+/**
+ * loadTheme:
+ *
+ * Reloads the theme CSS file from the default theme.
+ */
+function loadTheme() {
+ let themeContext = St.ThemeContext.get_for_stage (global.stage);
+ let stylesheetPath = global.datadir + '/theme/gnome-shell.css';
+ let theme = new St.Theme ({ application_stylesheet: stylesheetPath });
+ themeContext.set_theme (theme);
+}
+
/**
* _log:
* @category: string message type ('info', 'error')
@@ -277,47 +302,42 @@ function _removeUnusedWorkspaces() {
// are disabled with a global grab. (When there is a global grab, then
// all key events will be delivered to the stage, so ::captured-event
// on the stage can be used for global keybindings.)
-//
-// We expect to need to conditionally enable just a few keybindings
-// depending on circumstance; the main hackiness here is that we are
-// assuming that keybindings have their default values; really we
-// should be asking Mutter to resolve the key into an action and then
-// base our handling based on the action.
function _globalKeyPressHandler(actor, event) {
if (modalCount == 0)
return false;
- if (event.type() != Clutter.EventType.KEY_RELEASE)
+ if (event.type() != Clutter.EventType.KEY_PRESS)
return false;
let symbol = event.get_key_symbol();
let keyCode = event.get_key_code();
let modifierState = Shell.get_event_state(event);
- // Check the overview key first, this isn't a Meta.KeyBindingAction yet
- if (symbol == Clutter.Super_L || symbol == Clutter.Super_R) {
- // The super key is the default for triggering the overview, and should
- // get us out of the overview when we are already in it.
- if (overview.visible)
- overview.hide();
+ let display = global.screen.get_display();
+ // This relies on the fact that Clutter.ModifierType is the same as Gdk.ModifierType
+ let action = display.get_keybinding_action(keyCode, modifierState);
+
+ // The screenshot action should always be available (even if a
+ // modal dialog is present)
+ if (action == Meta.KeyBindingAction.COMMAND_SCREENSHOT) {
+ let gconf = GConf.Client.get_default();
+ let command = gconf.get_string('/apps/metacity/keybinding_commands/command_screenshot');
+ if (command != null && command != '')
+ Util.spawnCommandLine(command);
return true;
}
- // Whitelist some of the Metacity actions
- let display = global.screen.get_display();
- let activeWorkspaceIndex = global.screen.get_active_workspace_index();
+ // Other bindings are only available when the overview is up and
+ // no modal dialog is present.
+ if (!overview.visible || modalCount > 1)
+ return false;
+
+ // This isn't a Meta.KeyBindingAction yet
+ if (symbol == Clutter.Super_L || symbol == Clutter.Super_R) {
+ overview.hide();
+ return true;
+ }
- // This relies on the fact that Clutter.ModifierType is the same as Gdk.ModifierType
- let action = display.get_keybinding_action(keyCode, modifierState);
switch (action) {
- case Meta.KeyBindingAction.COMMAND_SCREENSHOT:
- let gconf = GConf.Client.get_default();
- let command = gconf.get_string('/apps/metacity/keybinding_commands/command_screenshot');
- if (command != null && command != '') {
- let [ok, len, args] = GLib.shell_parse_argv(command);
- let p = new Shell.Process({'args' : args});
- p.run();
- }
- return true;
case Meta.KeyBindingAction.WORKSPACE_LEFT:
wm.actionMoveWorkspaceLeft();
return true;
@@ -328,6 +348,12 @@ function _globalKeyPressHandler(actor, event) {
case Meta.KeyBindingAction.COMMAND_2:
getRunDialog().open();
return true;
+ case Meta.KeyBindingAction.PANEL_MAIN_MENU:
+ overview.hide();
+ return true;
+ case Meta.KeyBindingAction.SWITCH_PANELS:
+ ctrlAltTabManager.popup(modifierState & Clutter.ModifierType.SHIFT_MASK);
+ return true;
}
return false;
@@ -346,21 +372,30 @@ function _findModal(actor) {
/**
* pushModal:
* @actor: #ClutterActor which will be given keyboard focus
+ * @timestamp: optional timestamp
*
* Ensure we are in a mode where all keyboard and mouse input goes to
- * the stage. Multiple calls to this function act in a stacking fashion;
- * the effect will be undone when an equal number of popModal() invocations
- * have been made.
+ * the stage, and focus @actor. Multiple calls to this function act in
+ * a stacking fashion; the effect will be undone when an equal number
+ * of popModal() invocations have been made.
*
- * Next, record the current Clutter keyboard focus on a stack. If the modal stack
- * returns to this actor, reset the focus to the actor which was focused
- * at the time pushModal() was invoked.
+ * Next, record the current Clutter keyboard focus on a stack. If the
+ * modal stack returns to this actor, reset the focus to the actor
+ * which was focused at the time pushModal() was invoked.
+ *
+ * @timestamp is optionally used to associate the call with a specific user
+ * initiated event. If not provided then the value of
+ * global.get_current_time() is assumed.
*
* Returns: true iff we successfully acquired a grab or already had one
*/
-function pushModal(actor) {
+function pushModal(actor, timestamp) {
+
+ if (timestamp == undefined)
+ timestamp = global.get_current_time();
+
if (modalCount == 0) {
- if (!global.begin_modal(global.get_current_time())) {
+ if (!global.begin_modal(timestamp)) {
log('pushModal: invocation of begin_modal failed');
return false;
}
@@ -384,19 +419,28 @@ function pushModal(actor) {
}
modalActorFocusStack.push([actor, curFocus]);
- global.stage.set_key_focus(null);
+ global.stage.set_key_focus(actor);
return true;
}
/**
* popModal:
* @actor: #ClutterActor passed to original invocation of pushModal().
+ * @timestamp: optional timestamp
*
* Reverse the effect of pushModal(). If this invocation is undoing
* the topmost invocation, then the focus will be restored to the
* previous focus at the time when pushModal() was invoked.
+ *
+ * @timestamp is optionally used to associate the call with a specific user
+ * initiated event. If not provided then the value of
+ * global.get_current_time() is assumed.
*/
-function popModal(actor) {
+function popModal(actor, timestamp) {
+
+ if (timestamp == undefined)
+ timestamp = global.get_current_time();
+
modalCount -= 1;
let focusIndex = _findModal(actor);
if (focusIndex >= 0) {
@@ -414,7 +458,8 @@ function popModal(actor) {
if (modalCount > 0)
return;
- global.end_modal(global.get_current_time());
+ global.stage.set_key_focus(null);
+ global.end_modal(timestamp);
global.set_stage_input_mode(Shell.StageInputMode.NORMAL);
}
diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js
index 08ad5c20e..c158c037a 100644
--- a/js/ui/messageTray.js
+++ b/js/ui/messageTray.js
@@ -16,7 +16,10 @@ const Tweener = imports.ui.tweener;
const Main = imports.ui.main;
const BoxPointer = imports.ui.boxpointer;
const Params = imports.misc.params;
-const Utils = imports.misc.utils;
+const Util = imports.misc.util;
+
+const Gettext = imports.gettext.domain('gnome-shell');
+const _ = Gettext.gettext;
const ANIMATION_TIME = 0.2;
const NOTIFICATION_TIMEOUT = 4;
@@ -38,6 +41,17 @@ const State = {
HIDING: 3
};
+// Message tray has its custom Urgency enumeration. LOW, NORMAL and CRITICAL
+// urgency values map to the corresponding values for the notifications received
+// through the notification daemon. HIGH urgency value is used for chats received
+// through the Telepathy client.
+const Urgency = {
+ LOW: 0,
+ NORMAL: 1,
+ HIGH: 2,
+ CRITICAL: 3
+}
+
function _fixMarkup(text, allowMarkup) {
if (allowMarkup) {
// Support &, ", ', < and >, escape all other
@@ -92,8 +106,7 @@ URLHighlighter.prototype = {
return true;
} catch (e) {
// TODO: remove this after gnome 3 release
- let p = new Shell.Process({ 'args' : ['gvfs-open', url] });
- p.run();
+ Util.spawn(['gvfs-open', url]);
return true;
}
}
@@ -124,13 +137,13 @@ URLHighlighter.prototype = {
this.actor.clutter_text.set_markup(text);
/* clutter_text.text contain text without markup */
- this._urls = Utils.findUrls(this.actor.clutter_text.text);
+ this._urls = Util.findUrls(this.actor.clutter_text.text);
this._highlightUrls();
},
_highlightUrls: function() {
// text here contain markup
- let urls = Utils.findUrls(this._text);
+ let urls = Util.findUrls(this._text);
let markup = '';
let pos = 0;
for (let i = 0; i < urls.length; i++) {
@@ -225,7 +238,7 @@ function Notification(source, title, banner, params) {
Notification.prototype = {
_init: function(source, title, banner, params) {
this.source = source;
- this.urgent = false;
+ this.urgency = Urgency.NORMAL;
this.resident = false;
// 'transient' is a reserved keyword in JS, so we have to use an alternate variable name
this.isTransient = false;
@@ -245,7 +258,6 @@ Notification.prototype = {
this._prevFocusedWindow = null;
this._prevKeyFocusActor = null;
- this._focusWindowChangedId = 0;
this._focusActorChangedId = 0;
this._stageInputModeChangedId = 0;
this._capturedEventId = 0;
@@ -491,8 +503,8 @@ Notification.prototype = {
this._updated();
},
- setUrgent: function(urgent) {
- this.urgent = urgent;
+ setUrgency: function(urgency) {
+ this.urgency = urgency;
},
setResident: function(resident) {
@@ -624,29 +636,16 @@ Notification.prototype = {
let metaDisplay = global.screen.get_display();
this._prevFocusedWindow = metaDisplay.focus_window;
- this._prevKeyFocus = global.stage.get_key_focus();
+ this._prevKeyFocusActor = global.stage.get_key_focus();
- // We need to use the captured event in the overview, because we don't want to change the stage input mode to
- // FOCUSED there. On the other hand, using the captured event doesn't work correctly in the main view because
- // it doesn't allow focusing the windows again correctly. So we are using the FOCUSED stage input mode in the
- // main view.
- if (Main.overview.visible) {
- if (!Main.pushModal(this.actor))
- return;
- this._capturedEventId = global.stage.connect('captured-event', Lang.bind(this, this._onCapturedEvent));
- } else {
+ if (!Main.overview.visible)
global.set_stage_input_mode(Shell.StageInputMode.FOCUSED);
- this._focusWindowChangedId = metaDisplay.connect('notify::focus-window', Lang.bind(this, this._focusWindowChanged));
- this._stageInputModeChangedId = global.connect('notify::stage-input-mode', Lang.bind(this, this._stageInputModeChanged));
+ // Use captured-event to notice clicks outside the notification
+ // without consuming them.
+ this._capturedEventId = global.stage.connect('captured-event', Lang.bind(this, this._onCapturedEvent));
- this._keyPressId = global.stage.connect('key-press-event', Lang.bind(this, this._onKeyPress));
- }
-
- // We need to listen to this signal in the overview, as well as in the main view, to make the key bindings such as
- // Alt+F2 work. When a notification has key focus, which is the case with chat notifications, all captured KEY_PRESS
- // events have the actor with the key focus as their source. This makes it impossible to distinguish between the chat
- // window input and the key bindings based solely on the KEY_PRESS event.
+ this._stageInputModeChangedId = global.connect('notify::stage-input-mode', Lang.bind(this, this._stageInputModeChanged));
this._focusActorChangedId = global.stage.connect('notify::key-focus', Lang.bind(this, this._focusActorChanged));
this._hasFocus = true;
@@ -654,19 +653,6 @@ Notification.prototype = {
Main.messageTray.lock();
},
- _focusWindowChanged: function() {
- let metaDisplay = global.screen.get_display();
- // this._focusWindowChanged() will be called when we call
- // global.set_stage_input_mode(Shell.StageInputMode.FOCUSED) ,
- // however metaDisplay.focus_window will be null in that case. We only
- // want to ungrab focus if the focus has been moved to an application
- // window.
- if (metaDisplay.focus_window) {
- this._prevFocusedWindow = null;
- this.ungrabFocus();
- }
- },
-
_focusActorChanged: function() {
let focusedActor = global.stage.get_key_focus();
if (!focusedActor || !this.actor.contains(focusedActor)) {
@@ -676,15 +662,6 @@ Notification.prototype = {
},
_stageInputModeChanged: function() {
- let focusedActor = global.stage.get_key_focus();
- // TODO: We need to set this._prevFocusedWindow to null in order to
- // get the cursor in the run dialog. However, that also means it's
- // set to null when the application menu is activated, which defeats
- // the point of keeping the name of the previously focused application
- // in the panel. It'd be good to be able to distinguish between these
- // two cases.
- this._prevFocusedWindow = null;
- this._prevKeyFocusActor = null;
this.ungrabFocus();
},
@@ -729,24 +706,11 @@ Notification.prototype = {
this.destroy();
},
- _onKeyPress: function(actor, event) {
- let symbol = event.get_key_symbol();
- if (symbol == Clutter.Escape) {
- Main.messageTray.escapeTray();
- return true;
- }
- return false;
- },
-
ungrabFocus: function() {
if (!this._hasFocus)
return;
let metaDisplay = global.screen.get_display();
- if (this._focusWindowChangedId > 0) {
- metaDisplay.disconnect(this._focusWindowChangedId);
- this._focusWindowChangedId = 0;
- }
if (this._focusActorChangedId > 0) {
global.stage.disconnect(this._focusActorChangedId);
@@ -759,20 +723,14 @@ Notification.prototype = {
}
if (this._capturedEventId > 0) {
- Main.popModal(this.actor);
global.stage.disconnect(this._capturedEventId);
this._capturedEventId = 0;
}
- if (this._keyPressId > 0) {
- global.stage.disconnect(this._keyPressId);
- this._keyPressId = 0;
- }
-
this._hasFocus = false;
Main.messageTray.unlock();
- if (this._prevFocusedWindow) {
+ if (this._prevFocusedWindow && !metaDisplay.focus_window) {
metaDisplay.set_input_focus_window(this._prevFocusedWindow, false, global.get_current_time());
this._prevFocusedWindow = null;
}
@@ -951,7 +909,7 @@ MessageTray.prototype = {
this._notification = null;
this._notificationClickedId = 0;
- this._summaryBin = new St.Bin({ anchor_gravity: Clutter.Gravity.NORTH_EAST });
+ this._summaryBin = new St.Bin({ x_align: St.Align.END });
this.actor.add_actor(this._summaryBin);
this._summary = new St.BoxLayout({ name: 'summary-mode',
reactive: true,
@@ -1043,9 +1001,8 @@ MessageTray.prototype = {
this.actor.width = primary.width;
this._notificationBin.x = 0;
this._notificationBin.width = primary.width;
-
- // These work because of their anchor_gravity
- this._summaryBin.x = primary.width;
+ this._summaryBin.x = 0;
+ this._summaryBin.width = primary.width;
},
contains: function(source) {
@@ -1212,13 +1169,11 @@ MessageTray.prototype = {
} else if (this._notificationQueue.indexOf(notification) < 0) {
notification.connect('destroy',
Lang.bind(this, this.removeNotification));
-
- if (notification.urgent)
- this._notificationQueue.unshift(notification);
- else
- this._notificationQueue.push(notification);
+ this._notificationQueue.push(notification);
+ this._notificationQueue.sort(function(notification1, notification2) {
+ return (notification2.urgency - notification1.urgency);
+ });
}
-
this._updateState();
},
@@ -1417,7 +1372,7 @@ MessageTray.prototype = {
let notificationsPending = this._notificationQueue.length > 0;
let notificationPinned = this._pointerInTray && !this._pointerInSummary && !this._notificationRemoved;
let notificationExpanded = this._notificationBin.y < 0;
- let notificationExpired = (this._notificationTimeoutId == 0 && !this._pointerInTray && !this._locked) || this._notificationRemoved;
+ let notificationExpired = (this._notificationTimeoutId == 0 && !(this._notification && this._notification.urgency == Urgency.CRITICAL) && !this._pointerInTray && !this._locked) || this._notificationRemoved;
if (this._notificationState == State.HIDDEN) {
if (notificationsPending)
@@ -1545,27 +1500,45 @@ MessageTray.prototype = {
_updateShowingNotification: function() {
Tweener.removeTweens(this._notificationBin);
- this._tween(this._notificationBin, '_notificationState', State.SHOWN,
- { y: 0,
- opacity: 255,
- time: ANIMATION_TIME,
- transition: 'easeOutQuad',
- onComplete: this._showNotificationCompleted,
- onCompleteScope: this
- });
- // We auto-expand urgent notifications.
- // We call _expandNotification() again on the notifications that
- // are expanded in case they were in the process of hiding and need
- // to re-expand.
- if (this._notification.urgent || this._notification.expanded)
- // This will overwrite the y tween, but leave the opacity
- // tween, and so the onComplete will remain as well.
+ // We auto-expand notifications with CRITICAL urgency.
+ // We use Tweener.removeTweens() to remove a tween that was hiding the notification we are
+ // updating, in case that notification was in the process of being hidden. However,
+ // Tweener.removeTweens() would also remove a tween that was updating the position of the
+ // notification we are updating, in case that notification was already expanded and its height
+ // changed. Therefore we need to call this._expandNotification() for expanded notifications
+ // to make sure their position is updated.
+ if (this._notification.urgency == Urgency.CRITICAL || this._notification.expanded)
this._expandNotification(true);
+
+ // We tween all notifications to full opacity. This ensures that both new notifications and
+ // notifications that might have been in the process of hiding get full opacity.
+ //
+ // We tween any notification showing in the banner mode to banner height (this._notificationBin.y = 0).
+ // This ensures that both new notifications and notifications in the banner mode that might
+ // have been in the process of hiding are shown with the banner height.
+ //
+ // We use this._showNotificationCompleted() onComplete callback to extend the time the updated
+ // notification is being shown.
+ //
+ // We don't set the y parameter for the tween for expanded notifications because
+ // this._expandNotification() will result in getting this._notificationBin.y set to the appropriate
+ // fully expanded value.
+ let tweenParams = { opacity: 255,
+ time: ANIMATION_TIME,
+ transition: 'easeOutQuad',
+ onComplete: this._showNotificationCompleted,
+ onCompleteScope: this
+ };
+ if (!this._notification.expanded)
+ tweenParams.y = 0;
+
+ this._tween(this._notificationBin, '_notificationState', State.SHOWN, tweenParams);
},
_showNotificationCompleted: function() {
- this._updateNotificationTimeout(NOTIFICATION_TIMEOUT * 1000);
+ if (this._notification.urgency != Urgency.CRITICAL)
+ this._updateNotificationTimeout(NOTIFICATION_TIMEOUT * 1000);
},
_updateNotificationTimeout: function(timeout) {
@@ -1650,7 +1623,7 @@ MessageTray.prototype = {
},
// We use this function to grab focus when the user moves the pointer
- // to an urgent notification that was already auto-expanded.
+ // to a notification with CRITICAL urgency that was already auto-expanded.
_ensureNotificationFocused: function() {
this._notification.grabFocus(false);
},
@@ -1722,7 +1695,7 @@ MessageTray.prototype = {
this._adjustNotificationBoxPointerPosition();
this._summaryNotificationState = State.SHOWING;
- this._summaryNotificationBoxPointer.animateAppear(Lang.bind(this, function() {
+ this._summaryNotificationBoxPointer.show(true, Lang.bind(this, function() {
this._summaryNotificationState = State.SHOWN;
}));
},
@@ -1761,7 +1734,7 @@ MessageTray.prototype = {
this._summaryNotification.ungrabFocus();
this._summaryNotificationState = State.HIDING;
- this._summaryNotificationBoxPointer.animateDisappear(Lang.bind(this, this._hideSummaryNotificationCompleted));
+ this._summaryNotificationBoxPointer.hide(true, Lang.bind(this, this._hideSummaryNotificationCompleted));
},
_hideSummaryNotificationCompleted: function() {
@@ -1780,3 +1753,27 @@ MessageTray.prototype = {
}
}
};
+
+function SystemNotificationSource() {
+ this._init();
+}
+
+SystemNotificationSource.prototype = {
+ __proto__: Source.prototype,
+
+ _init: function() {
+ Source.prototype._init.call(this, _("System Information"));
+
+ this._setSummaryIcon(this.createNotificationIcon());
+ },
+
+ createNotificationIcon: function() {
+ return new St.Icon({ icon_name: 'dialog-information',
+ icon_type: St.IconType.SYMBOLIC,
+ icon_size: this.ICON_SIZE });
+ },
+
+ _notificationClicked: function() {
+ this.destroy();
+ }
+};
diff --git a/js/ui/modalDialog.js b/js/ui/modalDialog.js
new file mode 100644
index 000000000..7b3f0d36f
--- /dev/null
+++ b/js/ui/modalDialog.js
@@ -0,0 +1,233 @@
+/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
+
+const Clutter = imports.gi.Clutter;
+const Gdk = imports.gi.Gdk;
+const Gio = imports.gi.Gio;
+const GLib = imports.gi.GLib;
+const Lang = imports.lang;
+const Meta = imports.gi.Meta;
+const Pango = imports.gi.Pango;
+const St = imports.gi.St;
+const Shell = imports.gi.Shell;
+const Signals = imports.signals;
+const Gettext = imports.gettext.domain('gnome-shell');
+const _ = Gettext.gettext;
+
+const Params = imports.misc.params;
+
+const Lightbox = imports.ui.lightbox;
+const Main = imports.ui.main;
+const Tweener = imports.ui.tweener;
+
+const OPEN_AND_CLOSE_TIME = 0.1;
+const FADE_OUT_DIALOG_TIME = 1.0;
+
+const State = {
+ OPENED: 0,
+ CLOSED: 1,
+ OPENING: 2,
+ CLOSING: 3,
+ FADED_OUT: 4
+};
+
+function ModalDialog() {
+ this._init();
+}
+
+ModalDialog.prototype = {
+ _init: function(params) {
+ params = Params.parse(params, { styleClass: null });
+
+ this.state = State.CLOSED;
+
+ this._group = new St.Group({ visible: false,
+ x: 0,
+ y: 0 });
+ Main.uiGroup.add_actor(this._group);
+ global.focus_manager.add_group(this._group);
+ this._initialKeyFocus = this._group;
+
+ this._group.connect('destroy', Lang.bind(this, this._onGroupDestroy));
+
+ this._actionKeys = {};
+ this._group.connect('key-press-event', Lang.bind(this, this._onKeyPressEvent));
+
+ this._lightbox = new Lightbox.Lightbox(this._group,
+ { inhibitEvents: true });
+
+ this._backgroundBin = new St.Bin();
+
+ this._group.add_actor(this._backgroundBin);
+ this._lightbox.highlight(this._backgroundBin);
+
+ this._dialogLayout = new St.BoxLayout({ style_class: 'modal-dialog',
+ vertical: true });
+ if (params.styleClass != null) {
+ this._dialogLayout.add_style_class_name(params.styleClass);
+ }
+ this._backgroundBin.child = this._dialogLayout;
+
+ this.contentLayout = new St.BoxLayout({ vertical: true });
+ this._dialogLayout.add(this.contentLayout,
+ { x_fill: true,
+ y_fill: true,
+ x_align: St.Align.MIDDLE,
+ y_align: St.Align.START });
+
+ this._buttonLayout = new St.BoxLayout({ opacity: 220,
+ vertical: false });
+ this._dialogLayout.add(this._buttonLayout,
+ { expand: true,
+ x_align: St.Align.MIDDLE,
+ y_align: St.Align.END });
+ },
+
+ setButtons: function(buttons) {
+ this._buttonLayout.remove_all();
+ let i = 0;
+ for (let index in buttons) {
+ let buttonInfo = buttons[index];
+ let label = buttonInfo['label'];
+ let action = buttonInfo['action'];
+ let key = buttonInfo['key'];
+
+ let button = new St.Button({ style_class: 'modal-dialog-button',
+ reactive: true,
+ can_focus: true,
+ label: label });
+
+ let x_alignment;
+ if (buttons.length == 1)
+ x_alignment = St.Align.END;
+ else if (i == 0)
+ x_alignment = St.Align.START;
+ else if (i == buttons.length - 1)
+ x_alignment = St.Align.END;
+ else
+ x_alignment = St.Align.MIDDLE;
+
+ this._initialKeyFocus = button;
+ this._buttonLayout.add(button,
+ { expand: true,
+ x_fill: false,
+ y_fill: false,
+ x_align: x_alignment,
+ y_align: St.Align.MIDDLE });
+
+ button.connect('clicked', action);
+
+ if (key)
+ this._actionKeys[key] = action;
+ i++;
+ }
+ },
+
+ _onKeyPressEvent: function(object, keyPressEvent) {
+ let symbol = keyPressEvent.get_key_symbol();
+ let action = this._actionKeys[symbol];
+
+ if (action)
+ action();
+ },
+
+ _onGroupDestroy: function() {
+ this.emit('destroy');
+ },
+
+ _fadeOpen: function() {
+ let monitor = global.get_focus_monitor();
+
+ this._backgroundBin.set_position(monitor.x, monitor.y);
+ this._backgroundBin.set_size(monitor.width, monitor.height);
+
+ this.state = State.OPENING;
+
+ this._dialogLayout.opacity = 255;
+ this._lightbox.show();
+ this._group.opacity = 0;
+ this._group.show();
+ Tweener.addTween(this._group,
+ { opacity: 255,
+ time: OPEN_AND_CLOSE_TIME,
+ transition: 'easeOutQuad',
+ onComplete: Lang.bind(this,
+ function() {
+ this._initialKeyFocus.grab_key_focus();
+ this.state = State.OPENED;
+ this.emit('opened');
+ }),
+ });
+ },
+
+ open: function(timestamp) {
+ if (this.state == State.OPENED || this.state == State.OPENING)
+ return true;
+
+ if (!Main.pushModal(this._group, timestamp))
+ return false;
+
+ global.stage.set_key_focus(this._group);
+
+ this._fadeOpen();
+ return true;
+ },
+
+ close: function(timestamp) {
+ if (this.state == State.CLOSED || this.state == State.CLOSING)
+ return;
+
+ let needsPopModal;
+
+ if (this.state == State.OPENED || this.state == State.OPENING)
+ needsPopModal = true;
+ else
+ needsPopModal = false;
+
+ this.state = State.CLOSING;
+
+ Tweener.addTween(this._group,
+ { opacity: 0,
+ time: OPEN_AND_CLOSE_TIME,
+ transition: 'easeOutQuad',
+ onComplete: Lang.bind(this,
+ function() {
+ this.state = State.CLOSED;
+ this._group.hide();
+
+ if (needsPopModal)
+ Main.popModal(this._group, timestamp);
+ })
+ });
+ },
+
+ // This method is like close, but fades the dialog out much slower,
+ // and leaves the lightbox in place. Once in the faded out state,
+ // the dialog can be brought back by an open call, or the lightbox
+ // can be dismissed by a close call.
+ //
+ // The main point of this method is to give some indication to the user
+ // that the dialog reponse has been acknowledged but will take a few
+ // moments before being processed.
+ // e.g., if a user clicked "Log Out" then the dialog should go away
+ // imediately, but the lightbox should remain until the logout is
+ // complete.
+ _fadeOutDialog: function(timestamp) {
+ if (this.state == State.CLOSED || this.state == State.CLOSING)
+ return;
+
+ if (this.state == State.FADED_OUT)
+ return;
+
+ Tweener.addTween(this._dialogLayout,
+ { opacity: 0,
+ time: FADE_OUT_DIALOG_TIME,
+ transition: 'easeOutQuad',
+ onComplete: Lang.bind(this,
+ function() {
+ this.state = State.FADED_OUT;
+ Main.popModal(this._group, timestamp);
+ })
+ });
+ }
+};
+Signals.addSignalMethods(ModalDialog.prototype);
diff --git a/js/ui/notificationDaemon.js b/js/ui/notificationDaemon.js
index 0b2833df2..0b377a834 100644
--- a/js/ui/notificationDaemon.js
+++ b/js/ui/notificationDaemon.js
@@ -9,9 +9,11 @@ const St = imports.gi.St;
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
+const Config = imports.misc.config;
const Main = imports.ui.main;
const MessageTray = imports.ui.messageTray;
const Params = imports.misc.params;
+const Util = imports.misc.util;
let nextNotificationId = 1;
@@ -126,17 +128,8 @@ NotificationDaemon.prototype = {
log('Failed to acquire org.freedesktop.Notifications');
else {
log('Failed to acquire org.freedesktop.Notifications; trying again');
-
- // kill the notification-daemon. pkill is more portable
- // than killall, but on Linux at least it won't match if
- // you pass more than 15 characters of the process name...
- // However, if you use the '-f' flag to match the entire
- // command line, it will work, but we have to be careful
- // in that case that we don't match 'gedit
- // notification-daemon.c' or whatever...
- let p = new Shell.Process({ args: ['pkill', '-f',
- '^([^ ]*/)?(notification-daemon|notify-osd)$']});
- p.run();
+ Util.killall('notification-daemon');
+ Util.killall('notify-osd');
}
},
@@ -343,8 +336,17 @@ NotificationDaemon.prototype = {
for (let i = 0; i < actions.length - 1; i += 2)
notification.addButton(actions[i], actions[i + 1]);
}
-
- notification.setUrgent(hints.urgency == Urgency.CRITICAL);
+ switch (hints.urgency) {
+ case Urgency.LOW:
+ notification.setUrgency(MessageTray.Urgency.LOW);
+ break;
+ case Urgency.NORMAL:
+ notification.setUrgency(MessageTray.Urgency.NORMAL);
+ break;
+ case Urgency.CRITICAL:
+ notification.setUrgency(MessageTray.Urgency.CRITICAL);
+ break;
+ }
notification.setResident(hints.resident == true);
// 'transient' is a reserved keyword in JS, so we have to retrieve the value
// of the 'transient' hint with hints['transient'] rather than hints.transient
@@ -381,10 +383,10 @@ NotificationDaemon.prototype = {
GetServerInformation: function() {
return [
- 'GNOME Shell',
+ Config.PACKAGE_NAME,
'GNOME',
- '0.1', // FIXME, get this from somewhere
- '1.0'
+ Config.PACKAGE_VERSION,
+ '1.2'
];
},
@@ -467,8 +469,8 @@ Source.prototype = {
return;
// Only override the icon if we were previously using
- // notification-based icons (ie, not a trayicon)
- if (this.useNotificationIcon) {
+ // notification-based icons (ie, not a trayicon) or if it was unset before
+ if (!this._isTrayIcon) {
this.useNotificationIcon = false;
this._setSummaryIcon(this.app.create_icon_texture (this.ICON_SIZE));
}
diff --git a/js/ui/overview.js b/js/ui/overview.js
index 4c3e21cb1..353d769e8 100644
--- a/js/ui/overview.js
+++ b/js/ui/overview.js
@@ -6,13 +6,15 @@ const Mainloop = imports.mainloop;
const Signals = imports.signals;
const Lang = imports.lang;
const St = imports.gi.St;
+const Shell = imports.gi.Shell;
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
+const Gdk = imports.gi.Gdk;
const AppDisplay = imports.ui.appDisplay;
const Dash = imports.ui.dash;
+const DND = imports.ui.dnd;
const DocDisplay = imports.ui.docDisplay;
-const GenericDisplay = imports.ui.genericDisplay;
const Lightbox = imports.ui.lightbox;
const Main = imports.ui.main;
const MessageTray = imports.ui.messageTray;
@@ -28,30 +30,7 @@ const ANIMATION_TIME = 0.25;
// We split the screen vertically between the dash and the view selector.
const DASH_SPLIT_FRACTION = 0.1;
-
-function Source() {
- this._init();
-}
-
-Source.prototype = {
- __proto__: MessageTray.Source.prototype,
-
- _init: function() {
- MessageTray.Source.prototype._init.call(this,
- "System Information");
- this._setSummaryIcon(this.createNotificationIcon());
- },
-
- createNotificationIcon: function() {
- return new St.Icon({ icon_name: 'dialog-information',
- icon_type: St.IconType.SYMBOLIC,
- icon_size: this.ICON_SIZE });
- },
-
- _notificationClicked: function() {
- this.destroy();
- }
-}
+const DND_WINDOW_SWITCH_TIMEOUT = 1250;
function ShellInfo() {
this._init();
@@ -74,7 +53,7 @@ ShellInfo.prototype = {
setMessage: function(text, undoCallback, undoLabel) {
if (this._source == null) {
- this._source = new Source();
+ this._source = new MessageTray.SystemNotificationSource();
this._source.connect('destroy', Lang.bind(this,
function() {
this._source = null;
@@ -135,7 +114,10 @@ Overview.prototype = {
this._workspacesDisplay = null;
- this.visible = false;
+ this.visible = false; // animating to overview, in overview, animating out
+ this._shown = false; // show() and not hide()
+ this._shownTemporarily = false; // showTemporarily() and not hideTemporarily()
+ this._modal = false; // have a modal grab
this.animationInProgress = false;
this._hideInProgress = false;
@@ -174,9 +156,72 @@ Overview.prototype = {
this._coverPane.lower_bottom();
+ // XDND
+ this._dragMonitor = {
+ dragMotion: Lang.bind(this, this._onDragMotion)
+ };
+
+ Main.xdndHandler.connect('drag-begin', Lang.bind(this, this._onDragBegin));
+ Main.xdndHandler.connect('drag-end', Lang.bind(this, this._onDragEnd));
+
+ this._windowSwitchTimeoutId = 0;
+ this._windowSwitchTimestamp = 0;
+ this._lastActiveWorkspaceIndex = -1;
+ this._needsFakePointerEvent = false;
+
this.workspaces = null;
},
+ _onDragBegin: function() {
+ DND.addDragMonitor(this._dragMonitor);
+ // Remember the workspace we started from
+ this._lastActiveWorkspaceIndex = global.screen.get_active_workspace_index();
+ },
+
+ _onDragEnd: function(time) {
+ // In case the drag was canceled while in the overview
+ // we have to go back to where we started and hide
+ // the overview
+ if (this._shownTemporarily) {
+ global.screen.get_workspace_by_index(this._lastActiveWorkspaceIndex).activate(time);
+ this.hideTemporarily();
+ }
+
+ DND.removeMonitor(this._dragMonitor);
+ },
+
+ _fakePointerEvent: function() {
+ let display = Gdk.Display.get_default();
+ let deviceManager = display.get_device_manager();
+ let pointer = deviceManager.get_client_pointer();
+ let [screen, pointerX, pointerY] = pointer.get_position();
+
+ pointer.warp(screen, pointerX, pointerY);
+ },
+
+ _onDragMotion: function(dragEvent) {
+ if (this._windowSwitchTimeoutId != 0) {
+ Mainloop.source_remove(this._windowSwitchTimeoutId);
+ this._windowSwitchTimeoutId = 0;
+ this._needsFakePointerEvent = false;
+ }
+
+ if (dragEvent.targetActor &&
+ dragEvent.targetActor._delegate &&
+ dragEvent.targetActor._delegate.metaWindow) {
+ this._windowSwitchTimestamp = global.get_current_time();
+ this._windowSwitchTimeoutId = Mainloop.timeout_add(DND_WINDOW_SWITCH_TIMEOUT,
+ Lang.bind(this, function() {
+ this._needsFakePointerEvent = true;
+ Main.activateWindow(dragEvent.targetActor._delegate.metaWindow,
+ this._windowSwitchTimestamp);
+ this.hideTemporarily();
+ }));
+ }
+
+ return DND.DragMotionResult.CONTINUE;
+ },
+
_getDesktopClone: function() {
let windows = global.get_window_actors().filter(function(w) {
return w.meta_window.get_window_type() == Meta.WindowType.DESKTOP;
@@ -267,11 +312,23 @@ Overview.prototype = {
return [this.workspaces.actor.x, this.workspaces.actor.y];
},
+ // show:
+ //
+ // Animates the overview visible and grabs mouse and keyboard input
show : function() {
- if (this.visible)
+ if (this._shown)
return;
+ // Do this manually instead of using _syncInputMode, to handle failure
if (!Main.pushModal(this.viewSelector.actor))
return;
+ this._modal = true;
+ this._animateVisible();
+ this._shown = true;
+ },
+
+ _animateVisible: function() {
+ if (this.visible || this.animationInProgress)
+ return;
this.visible = true;
this.animationInProgress = true;
@@ -337,8 +394,102 @@ Overview.prototype = {
this.emit('showing');
},
+ // showTemporarily:
+ //
+ // Animates the overview visible without grabbing mouse and keyboard input;
+ // if show() has already been called, this has no immediate effect, but
+ // will result in the overview not being hidden until hideTemporarily() is
+ // called.
+ showTemporarily: function() {
+ if (this._shownTemporarily)
+ return;
+
+ this._syncInputMode();
+ this._animateVisible();
+ this._shownTemporarily = true;
+ },
+
+ // hide:
+ //
+ // Reverses the effect of show()
hide: function() {
- if (!this.visible || this._hideInProgress)
+ if (!this._shown)
+ return;
+
+ if (!this._shownTemporarily)
+ this._animateNotVisible();
+
+ this._shown = false;
+ this._syncInputMode();
+ },
+
+ // hideTemporarily:
+ //
+ // Reverses the effect of showTemporarily()
+ hideTemporarily: function() {
+ if (!this._shownTemporarily)
+ return;
+
+ if (!this._shown)
+ this._animateNotVisible();
+
+ this._shownTemporarily = false;
+ this._syncInputMode();
+ },
+
+ toggle: function() {
+ if (this._shown)
+ this.hide();
+ else
+ this.show();
+ },
+
+ /**
+ * getWorkspacesForWindow:
+ * @metaWindow: A #MetaWindow
+ *
+ * Returns the Workspaces object associated with the given window.
+ * This method is not be accessible if the overview is not open
+ * and will return %null.
+ */
+ getWorkspacesForWindow: function(metaWindow) {
+ return this.workspaces;
+ },
+
+ //// Private methods ////
+
+ _syncInputMode: function() {
+ // We delay input mode changes during animation so that when removing the
+ // overview we don't have a problem with the release of a press/release
+ // going to an application.
+ if (this.animationInProgress)
+ return;
+
+ if (this._shown) {
+ if (!this._modal) {
+ if (Main.pushModal(this._dash.actor))
+ this._modal = true;
+ else
+ this.hide();
+ }
+ } else if (this._shownTemporarily) {
+ if (this._modal) {
+ Main.popModal(this._dash.actor);
+ this._modal = false;
+ }
+ global.stage_input_mode = Shell.StageInputMode.FULLSCREEN;
+ } else {
+ if (this._modal) {
+ Main.popModal(this._dash.actor);
+ this._modal = false;
+ }
+ else if (global.stage_input_mode == Shell.StageInputMode.FULLSCREEN)
+ global.stage_input_mode = Shell.StageInputMode.NORMAL;
+ }
+ },
+
+ _animateNotVisible: function() {
+ if (!this.visible || this.animationInProgress)
return;
this.animationInProgress = true;
@@ -382,36 +533,17 @@ Overview.prototype = {
this.emit('hiding');
},
- toggle: function() {
- if (this.visible)
- this.hide();
- else
- this.show();
- },
-
- /**
- * getWorkspacesForWindow:
- * @metaWindow: A #MetaWindow
- *
- * Returns the Workspaces object associated with the given window.
- * This method is not be accessible if the overview is not open
- * and will return %null.
- */
- getWorkspacesForWindow: function(metaWindow) {
- return this.workspaces;
- },
-
- //// Private methods ////
-
_showDone: function() {
- if (this._hideInProgress)
- return;
-
this.animationInProgress = false;
this._desktopFade.hide();
this._coverPane.lower_bottom();
this.emit('shown');
+ // Handle any calls to hide* while we were showing
+ if (!this._shown && !this._shownTemporarily)
+ this._animateNotVisible();
+
+ this._syncInputMode();
},
_hideDone: function() {
@@ -434,8 +566,18 @@ Overview.prototype = {
this._coverPane.lower_bottom();
- Main.popModal(this.viewSelector.actor);
this.emit('hidden');
+ // Handle any calls to show* while we were hiding
+ if (this._shown || this._shownTemporarily)
+ this._animateVisible();
+
+ this._syncInputMode();
+
+ // Fake a pointer event if requested
+ if (this._needsFakePointerEvent) {
+ this._fakePointerEvent();
+ this._needsFakePointerEvent = false;
+ }
}
};
Signals.addSignalMethods(Overview.prototype);
diff --git a/js/ui/panel.js b/js/ui/panel.js
index ba4791f55..2543d6ab4 100644
--- a/js/ui/panel.js
+++ b/js/ui/panel.js
@@ -27,6 +27,8 @@ const PANEL_ICON_SIZE = 24;
const HOT_CORNER_ACTIVATION_TIMEOUT = 0.5;
+const BUTTON_DND_ACTIVATION_TIMEOUT = 250;
+
const ANIMATED_ICON_UPDATE_TIMEOUT = 100;
const SPINNER_UPDATE_TIMEOUT = 130;
const SPINNER_SPEED = 0.02;
@@ -35,14 +37,17 @@ const STANDARD_TRAY_ICON_ORDER = ['a11y', 'display', 'keyboard', 'volume', 'blue
const STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION = {
'a11y': imports.ui.status.accessibility.ATIndicator,
'volume': imports.ui.status.volume.Indicator,
- 'battery': imports.ui.status.power.Indicator
+ 'battery': imports.ui.status.power.Indicator,
+ 'keyboard': imports.ui.status.keyboard.XKBIndicator
};
if (Config.HAVE_BLUETOOTH)
STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION['bluetooth'] = imports.ui.status.bluetooth.Indicator;
-const CLOCK_FORMAT_KEY = 'format';
-const CLOCK_CUSTOM_FORMAT_KEY = 'custom-format';
+// in org.gnome.desktop.interface
+const CLOCK_FORMAT_KEY = 'clock-format';
+
+// in org.gnome.shell.clock
const CLOCK_SHOW_DATE_KEY = 'show-date';
const CLOCK_SHOW_SECONDS_KEY = 'show-seconds';
@@ -493,69 +498,53 @@ function ClockButton() {
}
ClockButton.prototype = {
- __proto__: PanelMenu.Button.prototype,
-
_init: function() {
- PanelMenu.Button.prototype._init.call(this, St.Align.START);
- this.menu.addAction(_("Preferences"), Lang.bind(this, this._onPrefs));
+ this.actor = new St.Bin({ style_class: 'panel-button',
+ reactive: true,
+ can_focus: true,
+ x_fill: true,
+ y_fill: false,
+ track_hover: true });
+ this.actor._delegate = this;
+ this.actor.connect('button-press-event',
+ Lang.bind(this, this._toggleCalendar));
this._clock = new St.Label();
this.actor.set_child(this._clock);
this._calendarPopup = null;
+ this._desktopSettings = new Gio.Settings({ schema: 'org.gnome.desktop.interface' });
this._clockSettings = new Gio.Settings({ schema: 'org.gnome.shell.clock' });
+
+ this._desktopSettings.connect('changed', Lang.bind(this, this._updateClock));
this._clockSettings.connect('changed', Lang.bind(this, this._updateClock));
// Start the clock
this._updateClock();
},
- _onButtonPress: function(actor, event) {
- let button = event.get_button();
- if (button == 3 &&
- (!this._calendarPopup || !this._calendarPopup.isOpen))
- this.menu.toggle();
- else
- this._toggleCalendar();
- },
-
closeCalendar: function() {
if (!this._calendarPopup || !this._calendarPopup.isOpen)
return;
this._calendarPopup.hide();
- this.menu.isOpen = false;
this.actor.remove_style_pseudo_class('pressed');
},
openCalendar: function() {
this._calendarPopup.show();
- // simulate an open menu, so it won't appear beneath the calendar
- this.menu.isOpen = true;
this.actor.add_style_pseudo_class('pressed');
},
- _onPrefs: function() {
- let args = ['gnome-shell-clock-preferences'];
- let p = new Shell.Process({ args: args });
-
- p.run();
- },
-
_toggleCalendar: function() {
if (this._calendarPopup == null) {
this._calendarPopup = new CalendarPopup();
this._calendarPopup.actor.hide();
}
- if (this.menu.isOpen && !this._calendarPopup.isOpen) {
- this.menu.close();
- return;
- }
-
if (!this._calendarPopup.isOpen)
this.openCalendar();
else
@@ -563,23 +552,13 @@ ClockButton.prototype = {
},
_updateClock: function() {
- let format = this._clockSettings.get_string(CLOCK_FORMAT_KEY);
+ let format = this._desktopSettings.get_string(CLOCK_FORMAT_KEY);
let showDate = this._clockSettings.get_boolean(CLOCK_SHOW_DATE_KEY);
let showSeconds = this._clockSettings.get_boolean(CLOCK_SHOW_SECONDS_KEY);
let clockFormat;
switch (format) {
- case 'unix':
- // force updates every second
- showSeconds = true;
- clockFormat = '%s';
- break;
- case 'custom':
- // force updates every second
- showSeconds = true;
- clockFormat = this._clockSettings.get_string(CLOCK_CUSTOM_FORMAT_KEY);
- break;
- case '24-hour':
+ case '24h':
if (showDate)
/* Translators: This is the time format with date used
in 24-hour mode. */
@@ -591,7 +570,7 @@ ClockButton.prototype = {
clockFormat = showSeconds ? _("%a %R:%S")
: _("%a %R");
break;
- case '12-hour':
+ case '12h':
default:
if (showDate)
/* Translators: This is a time format with date used
@@ -753,7 +732,20 @@ Panel.prototype = {
reactive: true,
can_focus: true });
this.button.set_child(label);
-
+ this.button._delegate = this.button;
+ this.button._xdndTimeOut = 0;
+ this.button.handleDragOver = Lang.bind(this,
+ function(source, actor, x, y, time) {
+ if (source == Main.xdndHandler) {
+ if (this.button._xdndTimeOut != 0)
+ Mainloop.source_remove(this.button._xdndTimeOut);
+ this.button._xdndTimeOut = Mainloop.timeout_add(BUTTON_DND_ACTIVATION_TIMEOUT,
+ Lang.bind(this,
+ function() {
+ this._xdndShowOverview(actor);
+ }));
+ }
+ });
this._leftBox.add(this.button);
// We use this flag to mark the case where the user has entered the
@@ -791,6 +783,18 @@ Panel.prototype = {
this._hotCorner.connect('leave-event',
Lang.bind(this, this._onHotCornerLeft));
+ this._hotCorner._delegate = this._hotCorner;
+ this._hotCorner.handleDragOver = Lang.bind(this,
+ function(source, actor, x, y, time) {
+ if (source == Main.xdndHandler) {
+ if(!Main.overview.visible && !Main.overview.animationInProgress) {
+ this.rippleAnimation();
+ Main.overview.showTemporarily();
+ Main.overview.beginItemDrag(actor);
+ }
+ }
+ });
+
this._boxContainer.add_actor(this._hotCornerEnvirons);
this._boxContainer.add_actor(this._hotCorner);
@@ -846,6 +850,25 @@ Panel.prototype = {
Main.chrome.addActor(this.actor, { visibleInOverview: true });
},
+ _xdndShowOverview: function (actor) {
+ let [x, y, mask] = global.get_pointer();
+ let pickedActor = global.stage.get_actor_at_pos(Clutter.PickMode.REACTIVE, x, y);
+
+ if (pickedActor != this.button) {
+ Mainloop.source_remove(this.button._xdndTimeOut);
+ this.button._xdndTimeOut = 0;
+ return;
+ }
+
+ if(!Main.overview.visible && !Main.overview.animationInProgress) {
+ Main.overview.showTemporarily();
+ Main.overview.beginItemDrag(actor);
+ }
+
+ Mainloop.source_remove(this.button._xdndTimeOut);
+ this.button._xdndTimeOut = 0;
+ },
+
startStatusArea: function() {
for (let i = 0; i < STANDARD_TRAY_ICON_ORDER.length; i++) {
let role = STANDARD_TRAY_ICON_ORDER[i];
@@ -936,6 +959,17 @@ Panel.prototype = {
Main.uiGroup.add_actor(ripple);
},
+ rippleAnimation: function() {
+ // Show three concentric ripples expanding outwards; the exact
+ // parameters were found by trial and error, so don't look
+ // for them to make perfect sense mathematically
+
+ // delay time scale opacity => scale opacity
+ this._addRipple(0.0, 0.83, 0.25, 1.0, 1.5, 0.0);
+ this._addRipple(0.05, 1.0, 0.0, 0.7, 1.25, 0.0);
+ this._addRipple(0.35, 1.0, 0.0, 0.3, 1, 0.0);
+ },
+
_onHotCornerEntered : function() {
if (this._menus.grabbed)
return false;
@@ -944,14 +978,7 @@ Panel.prototype = {
if (!Main.overview.animationInProgress) {
this._hotCornerActivationTime = Date.now() / 1000;
- // Show three concentric ripples expanding outwards; the exact
- // parameters were found by trial and error, so don't look
- // for them to make perfect sense mathematically
-
- // delay time scale opacity => scale opacity
- this._addRipple(0.0, 0.83, 0.25, 1.0, 1.5, 0.0);
- this._addRipple(0.05, 1.0, 0.0, 0.7, 1.25, 0.0);
- this._addRipple(0.35, 1.0, 0.0, 0.3, 1, 0.0);
+ this.rippleAnimation();
Main.overview.toggle();
}
}
@@ -998,6 +1025,9 @@ function CalendarPopup() {
CalendarPopup.prototype = {
_init: function() {
let panelActor = Main.panel.actor;
+ let alignConstraint = new Clutter.AlignConstraint({ source: panelActor,
+ align_axis: Clutter.AlignAxis.X_AXIS,
+ factor: 0.5 });
this.actor = new St.Bin({ name: 'calendarPopup' });
@@ -1009,7 +1039,7 @@ CalendarPopup.prototype = {
Main.chrome.addActor(this.actor, { visibleInOverview: true,
affectsStruts: false });
this.actor.y = (panelActor.y + panelActor.height - this.actor.height);
- this.calendar.actor.connect('notify::width', Lang.bind(this, this._centerPopup));
+ this.actor.add_constraint(alignConstraint);
},
show: function() {
@@ -1022,7 +1052,6 @@ CalendarPopup.prototype = {
// Reset the calendar to today's date
this.calendar.setDate(new Date());
- this._centerPopup();
this.actor.lower(panelActor);
this.actor.show();
Tweener.addTween(this.actor,
@@ -1046,10 +1075,5 @@ CalendarPopup.prototype = {
onComplete: function() { this.actor.hide(); },
onCompleteScope: this
});
- },
-
- _centerPopup: function() {
- let panelActor = Main.panel.actor;
- this.actor.x = Math.round(panelActor.x + (panelActor.width - this.actor.width) / 2);
}
};
diff --git a/js/ui/panelMenu.js b/js/ui/panelMenu.js
index 07a7220c8..0b3ce939c 100644
--- a/js/ui/panelMenu.js
+++ b/js/ui/panelMenu.js
@@ -47,12 +47,9 @@ Button.prototype = {
},
_onOpenStateChanged: function(menu, open) {
- if (open) {
+ if (open)
this.actor.add_style_pseudo_class('pressed');
- let focus = global.stage.get_key_focus();
- if (!focus || (focus != this.actor && !menu.actor.contains(focus)))
- this.actor.grab_key_focus();
- } else
+ else
this.actor.remove_style_pseudo_class('pressed');
}
};
diff --git a/js/ui/placeDisplay.js b/js/ui/placeDisplay.js
index fb96149c9..b8745b21f 100644
--- a/js/ui/placeDisplay.js
+++ b/js/ui/placeDisplay.js
@@ -1,6 +1,5 @@
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
-const GConf = imports.gi.GConf;
const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio;
const Shell = imports.gi.Shell;
@@ -14,11 +13,7 @@ const _ = Gettext.gettext;
const DND = imports.ui.dnd;
const Main = imports.ui.main;
const Search = imports.ui.search;
-
-const NAUTILUS_PREFS_DIR = '/apps/nautilus/preferences';
-const DESKTOP_IS_HOME_KEY = NAUTILUS_PREFS_DIR + '/desktop_is_home_dir';
-
-const PLACES_ICON_SIZE = 16;
+const Util = imports.misc.util;
/**
* Represents a place object, which is most normally a bookmark entry,
@@ -123,13 +118,9 @@ function PlacesManager() {
PlacesManager.prototype = {
_init: function() {
- let gconf = GConf.Client.get_default();
- gconf.add_dir(NAUTILUS_PREFS_DIR, GConf.ClientPreloadType.PRELOAD_NONE);
-
this._defaultPlaces = [];
this._mounts = [];
this._bookmarks = [];
- this._isDesktopHome = gconf.get_bool(DESKTOP_IS_HOME_KEY);
let homeFile = Gio.file_new_for_path (GLib.get_home_dir());
let homeUri = homeFile.get_uri();
@@ -163,7 +154,7 @@ PlacesManager.prototype = {
icon_size: size });
},
function () {
- new Shell.Process({ args: ['nautilus-connect-server'] }).run();
+ Util.spawn(['nautilus-connect-server']);
});
let networkApp = null;
@@ -188,10 +179,7 @@ PlacesManager.prototype = {
}
this._defaultPlaces.push(this._home);
-
- this._desktopMenuIndex = this._defaultPlaces.length;
- if (!this._isDesktopHome)
- this._defaultPlaces.push(this._desktopMenu);
+ this._defaultPlaces.push(this._desktopMenu);
if (this._network)
this._defaultPlaces.push(this._network);
@@ -229,9 +217,6 @@ PlacesManager.prototype = {
}));
this._reloadBookmarks();
-
- gconf.notify_add(DESKTOP_IS_HOME_KEY, Lang.bind(this, this._updateDesktopMenuVisibility));
-
},
_updateDevices: function() {
@@ -340,21 +325,6 @@ PlacesManager.prototype = {
this.emit('places-updated');
},
- _updateDesktopMenuVisibility: function() {
- let gconf = GConf.Client.get_default();
- this._isDesktopHome = gconf.get_boolean(DESKTOP_IS_HOME_KEY);
-
- if (this._isDesktopHome)
- this._removeById(this._defaultPlaces, 'special:desktop');
- else
- this._defaultPlaces.splice(this._desktopMenuIndex, 0,
- this._desktopMenu);
-
- /* See comment in _updateDevices for explanation why there are two signals. */
- this.emit('defaults-updated');
- this.emit('places-updated');
- },
-
_addMount: function(mount) {
let devItem = new PlaceDeviceInfo(mount);
this._mounts.push(devItem);
@@ -402,150 +372,8 @@ PlacesManager.prototype = {
sourceArray.splice(this._lookupIndexById(sourceArray, id), 1);
}
};
-
Signals.addSignalMethods(PlacesManager.prototype);
-/**
- * An entry in the places menu.
- * @info The corresponding PlaceInfo to populate this entry.
- */
-function DashPlaceDisplayItem(info) {
- this._init(info);
-}
-
-DashPlaceDisplayItem.prototype = {
- _init: function(info) {
- this.name = info.name;
- this._info = info;
- this._icon = info.iconFactory(PLACES_ICON_SIZE);
-
- this.actor = new St.Clickable({ style_class: 'places-item',
- reactive: true,
- x_align: St.Align.START,
- x_fill: true });
-
- let box = new St.BoxLayout({ style_class: 'places-item-box' });
- this.actor.set_child(box);
-
- let bin = new St.Bin({ child: this._icon });
- box.add(bin);
-
- let text = new St.Label({ text: info.name });
- box.add(text, { expand: true, x_fill: true });
-
- if (info.isRemovable()) {
- let removeIcon = new St.Icon({ icon_name: 'media-eject',
- icon_type: St.IconType.FULLCOLOR,
- icon_size: PLACES_ICON_SIZE });
- let removeIconBox = new St.Clickable({ child: removeIcon,
- reactive: true });
- box.add(removeIconBox);
- removeIconBox.connect('clicked',
- Lang.bind(this, function() {
- this._info.remove();
- }));
- }
-
- this.actor.connect('clicked', Lang.bind(this, this._onClicked));
-
- this.actor._delegate = this;
- this._draggable = DND.makeDraggable(this.actor);
- this._draggable.connect('drag-begin',
- Lang.bind(this, function() {
- Main.overview.beginItemDrag(this);
- }));
- this._draggable.connect('drag-end',
- Lang.bind(this, function() {
- Main.overview.endItemDrag(this);
- }));
- },
-
- _onClicked: function(b) {
- this._info.launch();
- Main.overview.hide();
- },
-
- getDragActorSource: function() {
- return this._icon;
- },
-
- getDragActor: function(stageX, stageY) {
- return this._info.iconFactory(PLACES_ICON_SIZE);
- },
-
- //// Drag and drop methods ////
-
- shellWorkspaceLaunch: function() {
- this._info.launch();
- }
-};
-
-function DashPlaceDisplay() {
- this._init();
-}
-
-DashPlaceDisplay.prototype = {
- _init: function() {
-
- // Places is divided semi-arbitrarily into left and right; a grid would
- // look better in that there would be an even number of items left+right,
- // but it seems like we want some sort of differentiation between actions
- // like "Connect to server..." and regular folders
- this.actor = new St.Table({ style_class: 'places-section',
- homogeneous: true });
-
- this._defaultsList = [];
- this._bookmarksList = [];
- this._mountsList = [];
-
- Main.placesManager.connect('defaults-updated', Lang.bind(this, this._updateDefaults));
- Main.placesManager.connect('bookmarks-updated', Lang.bind(this, this._updateBookmarks));
- Main.placesManager.connect('mounts-updated', Lang.bind(this, this._updateMounts));
-
- this._updateDefaults();
- this._updateMounts();
- this._updateBookmarks();
- },
-
- _updateDefaults: function() {
- for (let i = 0; i < this._defaultsList.length; i++)
- this._defaultsList[i].destroy();
-
- this._defaultsList = [];
- let places = Main.placesManager.getDefaultPlaces();
- for (let i = 0; i < places.length; i++) {
- this._defaultsList[i] = new DashPlaceDisplayItem(places[i]).actor;
- this.actor.add(this._defaultsList[i], {row: i, col: 0});
- }
- this._updateMounts();
- },
-
- _updateMounts: function() {
- for (let i = 0; i < this._mountsList.length; i++)
- this._mountsList[i].destroy();
-
- this._mountsList = [];
- let places = Main.placesManager.getMounts();
- for (let i = 0; i < places.length; i++) {
- this._mountsList[i] = new DashPlaceDisplayItem(places[i]).actor;
- this.actor.add(this._mountsList[i], {row: this._defaultsList.length + i, col: 0});
- }
- },
-
- _updateBookmarks: function() {
- for (let i = 0; i < this._bookmarksList.length; i++)
- this._bookmarksList[i].destroy();
-
- this._bookmarksList = [];
- let places = Main.placesManager.getBookmarks();
- for (let i = 0; i < places.length; i ++) {
- this._bookmarksList[i] = new DashPlaceDisplayItem(places[i]).actor;
- this.actor.add(this._bookmarksList[i], {row: i, col: 1});
- }
- }
-};
-
-Signals.addSignalMethods(DashPlaceDisplay.prototype);
function PlaceSearchProvider() {
this._init();
diff --git a/js/ui/popupMenu.js b/js/ui/popupMenu.js
index 190f24a4e..30f353eb3 100644
--- a/js/ui/popupMenu.js
+++ b/js/ui/popupMenu.js
@@ -631,18 +631,25 @@ PopupMenuBase.prototype = {
},
addMenuItem: function(menuItem, position) {
- if (position == undefined)
+ let before_item = null;
+ if (position == undefined) {
this.box.add(menuItem.actor);
- else
- this.box.insert_actor(menuItem.actor, position);
+ } else {
+ let items = this.getMenuItems();
+ if (position < items.length) {
+ before_item = items[position].actor;
+ this.box.insert_before(menuItem.actor, before_item);
+ } else
+ this.box.add(menuItem.actor);
+ }
if (menuItem instanceof PopupSubMenuMenuItem) {
- if (position == undefined)
+ if (before_item == null)
this.box.add(menuItem.menu.actor);
else
- this.box.insert_actor(menuItem.menu.actor, position + 1);
+ this.box.insert_before(menuItem.menu.actor, before_item);
menuItem._subMenuActivateId = menuItem.menu.connect('activate', Lang.bind(this, function() {
this.emit('activate');
- this.close();
+ this.close(true);
}));
menuItem._subMenuActiveChangeId = menuItem.menu.connect('active-changed', Lang.bind(this, function(submenu, submenuItem) {
if (this._activeMenuItem && this._activeMenuItem != submenuItem)
@@ -652,7 +659,7 @@ PopupMenuBase.prototype = {
}));
menuItem._closingId = this.connect('open-state-changed', function(self, open) {
if (!open)
- menuItem.menu.immediateClose();
+ menuItem.menu.close(false);
});
}
menuItem._activeChangeId = menuItem.connect('active-changed', Lang.bind(this, function (menuItem, active) {
@@ -668,7 +675,7 @@ PopupMenuBase.prototype = {
}));
menuItem._activateId = menuItem.connect('activate', Lang.bind(this, function (menuItem, event) {
this.emit('activate', menuItem);
- this.close();
+ this.close(true);
}));
menuItem.connect('destroy', Lang.bind(this, function(emitter) {
menuItem.disconnect(menuItem._activateId);
@@ -735,9 +742,9 @@ PopupMenuBase.prototype = {
toggle: function() {
if (this.isOpen)
- this.close();
+ this.close(true);
else
- this.open();
+ this.open(true);
},
destroy: function() {
@@ -802,26 +809,26 @@ PopupMenu.prototype = {
this._boxPointer.setArrowOrigin(origin);
},
- open: function() {
+ open: function(animate) {
if (this.isOpen)
return;
this.isOpen = true;
this._boxPointer.setPosition(this.sourceActor, this._gap, this._alignment);
- this._boxPointer.animateAppear();
+ this._boxPointer.show(animate);
this.emit('open-state-changed', true);
},
- close: function() {
+ close: function(animate) {
if (!this.isOpen)
return;
if (this._activeMenuItem)
this._activeMenuItem.setActive(false);
- this._boxPointer.animateDisappear();
+ this._boxPointer.hide(animate);
this.isOpen = false;
this.emit('open-state-changed', false);
@@ -848,12 +855,15 @@ PopupSubMenu.prototype = {
this.actor.hide();
},
- open: function() {
+ open: function(animate) {
if (this.isOpen)
return;
this.isOpen = true;
+ // we don't implement the !animate case because that doesn't
+ // currently get used...
+
let [naturalHeight, minHeight] = this.actor.get_preferred_height(-1);
this.actor.height = 0;
this.actor.show();
@@ -874,7 +884,7 @@ PopupSubMenu.prototype = {
});
},
- close: function() {
+ close: function(animate) {
if (!this.isOpen)
return;
@@ -883,44 +893,38 @@ PopupSubMenu.prototype = {
if (this._activeMenuItem)
this._activeMenuItem.setActive(false);
- this.actor._arrow_rotation = this._arrow.rotation_angle_z;
- Tweener.addTween(this.actor,
- { _arrow_rotation: 0,
- height: 0,
- time: 0.25,
- onCompleteScope: this,
- onComplete: function() {
- this.actor.hide();
- this.actor.set_height(-1);
+ if (animate) {
+ this.actor._arrow_rotation = this._arrow.rotation_angle_z;
+ Tweener.addTween(this.actor,
+ { _arrow_rotation: 0,
+ height: 0,
+ time: 0.25,
+ onCompleteScope: this,
+ onComplete: function() {
+ this.actor.hide();
+ this.actor.set_height(-1);
- this.emit('open-state-changed', false);
- },
- onUpdateScope: this,
- onUpdate: function() {
- this._arrow.rotation_angle_z = this.actor._arrow_rotation;
- }
- });
- },
+ this.emit('open-state-changed', false);
+ },
+ onUpdateScope: this,
+ onUpdate: function() {
+ this._arrow.rotation_angle_z = this.actor._arrow_rotation;
+ }
+ });
+ } else {
+ this._arrow.rotation_angle_z = 0;
+ this.actor.hide();
- immediateClose: function() {
- if (!this.isOpen)
- return;
-
- if (this._activeMenuItem)
- this._activeMenuItem.setActive(false);
-
- this._arrow.rotation_angle_z = 0;
- this.actor.hide();
-
- this.isOpen = false;
- this.emit('open-state-changed', false);
+ this.isOpen = false;
+ this.emit('open-state-changed', false);
+ }
},
_onKeyPressEvent: function(actor, event) {
// Move focus back to parent menu if the user types Left.
if (this.isOpen && event.get_key_symbol() == Clutter.KEY_Left) {
- this.close();
+ this.close(true);
this.sourceActor._delegate.setActive(true);
return true;
}
@@ -964,7 +968,7 @@ PopupSubMenuMenuItem.prototype = {
_onKeyPressEvent: function(actor, event) {
if (event.get_key_symbol() == Clutter.KEY_Right) {
- this.menu.open();
+ this.menu.open(true);
this.menu.activateFirst();
return true;
}
@@ -972,7 +976,7 @@ PopupSubMenuMenuItem.prototype = {
},
activate: function(event) {
- this.menu.open();
+ this.menu.open(true);
},
_onButtonReleaseEvent: function(actor) {
@@ -999,23 +1003,24 @@ PopupMenuManager.prototype = {
this._leaveEventId = 0;
this._activeMenu = null;
this._menus = [];
- this._delayedMenus = [];
+ this._preGrabInputMode = null;
},
addMenu: function(menu, position) {
let menudata = {
menu: menu,
openStateChangeId: menu.connect('open-state-changed', Lang.bind(this, this._onMenuOpenState)),
- activateId: menu.connect('activate', Lang.bind(this, this._onMenuActivated)),
destroyId: menu.connect('destroy', Lang.bind(this, this._onMenuDestroy)),
enterId: 0,
- focusId: 0
+ focusInId: 0,
+ focusOutId: 0
};
let source = menu.sourceActor;
if (source) {
menudata.enterId = source.connect('enter-event', Lang.bind(this, function() { this._onMenuSourceEnter(menu); }));
- menudata.focusId = source.connect('key-focus-in', Lang.bind(this, function() { this._onMenuSourceEnter(menu); }));
+ menudata.focusInId = source.connect('key-focus-in', Lang.bind(this, function() { this._onMenuSourceEnter(menu); }));
+ menudata.focusOutId = source.connect('key-focus-out', Lang.bind(this, function() { this._onKeyFocusOut(menu); }));
}
if (position == undefined)
@@ -1034,18 +1039,19 @@ PopupMenuManager.prototype = {
let menudata = this._menus[position];
menu.disconnect(menudata.openStateChangeId);
- menu.disconnect(menudata.activateId);
menu.disconnect(menudata.destroyId);
if (menudata.enterId)
menu.sourceActor.disconnect(menudata.enterId);
- if (menudata.focusId)
- menu.sourceActor.disconnect(menudata.focusId);
+ if (menudata.focusInId)
+ menu.sourceActor.disconnect(menudata.focusInId);
+ if (menudata.focusOutId)
+ menu.sourceActor.disconnect(menudata.focusOutId);
this._menus.splice(position, 1);
},
- grab: function() {
+ _grab: function() {
Main.pushModal(this._owner.actor);
this._eventCaptureId = global.stage.connect('captured-event', Lang.bind(this, this._onEventCapture));
@@ -1057,7 +1063,7 @@ PopupMenuManager.prototype = {
this.grabbed = true;
},
- ungrab: function() {
+ _ungrab: function() {
global.stage.disconnect(this._eventCaptureId);
this._eventCaptureId = 0;
global.stage.disconnect(this._keyPressEventId);
@@ -1073,40 +1079,100 @@ PopupMenuManager.prototype = {
_onMenuOpenState: function(menu, open) {
if (open) {
+ if (!this.grabbed) {
+ this._preGrabInputMode = global.stage_input_mode;
+ this._grab();
+ }
this._activeMenu = menu;
- if (!this.grabbed)
- this.grab();
+
+ // if the focus is not already associated with the menu,
+ // then focus the menu
+ let focus = global.stage.key_focus;
+ if (!this._activeMenuContains(focus))
+ menu.sourceActor.grab_key_focus();
} else if (menu == this._activeMenu) {
- this._activeMenu = null;
+ let focus = global.stage.key_focus;
+ let fromActive = this._activeMenuContains(focus);
+
if (this.grabbed)
- this.ungrab();
+ this._ungrab();
+ this._activeMenu = null;
+
+ // If keynav was in effect before we grabbed, then we need
+ // to properly re-establish it after we ungrab. (popModal
+ // will have unset the focus.) If some part of the menu
+ // was focused at the time of the ungrab then focus its
+ // sourceActor. Otherwise just reset the focus to where it
+ // was right before the ungrab.
+ if (this._preGrabInputMode == Shell.StageInputMode.FOCUSED) {
+ global.stage_input_mode = Shell.StageInputMode.FOCUSED;
+ if (fromActive)
+ menu.sourceActor.grab_key_focus();
+ else
+ focus.grab_key_focus();
+ }
}
},
+ // change the currently-open menu without dropping grab
+ _changeMenu: function(newMenu) {
+ if (this._activeMenu) {
+ // _onOpenMenuState will drop the grab if it sees
+ // this._activeMenu being closed; so clear _activeMenu
+ // before closing it to keep that from happening
+ let oldMenu = this._activeMenu;
+ this._activeMenu = null;
+ oldMenu.close(false);
+ newMenu.open(false);
+ } else
+ newMenu.open(true);
+ },
+
_onMenuSourceEnter: function(menu) {
if (!this.grabbed || menu == this._activeMenu)
return false;
- if (this._activeMenu != null)
- this._activeMenu.close();
- menu.open();
+ this._changeMenu(menu);
return false;
},
- _onMenuActivated: function(menu, item) {
- if (this.grabbed)
- this.ungrab();
+ _onKeyFocusOut: function(menu) {
+ if (!this.grabbed || menu != this._activeMenu)
+ return;
+
+ // We want to close the menu if the focus has moved somewhere
+ // other than inside the menu or to another menu's sourceActor.
+ // Unfortunately, when key-focus-out is emitted,
+ // stage.key_focus will be null. So we have to wait until
+ // after it emits the key-focus-in as well.
+ let id = global.stage.connect('notify::key-focus', Lang.bind(this,
+ function () {
+ global.stage.disconnect(id);
+
+ if (menu != this._activeMenu)
+ return;
+
+ let focus = global.stage.key_focus;
+ if (!focus || this._activeMenuContains(focus))
+ return;
+ if (focus._delegate && this._findMenu(focus._delegate.menu) != -1)
+ return;
+ menu.close(true);
+ }));
},
_onMenuDestroy: function(menu) {
this.removeMenu(menu);
},
- _eventIsOnActiveMenu: function(event) {
- let src = event.get_source();
+ _activeMenuContains: function(actor) {
return this._activeMenu != null
- && (this._activeMenu.actor.contains(src) ||
- (this._activeMenu.sourceActor && this._activeMenu.sourceActor.contains(src)));
+ && (this._activeMenu.actor.contains(actor) ||
+ (this._activeMenu.sourceActor && this._activeMenu.sourceActor.contains(actor)));
+ },
+
+ _eventIsOnActiveMenu: function(event) {
+ return this._activeMenuContains(event.get_source());
},
_eventIsOnAnyMenuSource: function(event) {
@@ -1128,6 +1194,18 @@ PopupMenuManager.prototype = {
return -1;
},
+ _nextMenu: function(pos, direction) {
+ for (let i = 1; i < this._menus.length; i++) {
+ let candidate = mod(pos + i * direction, this._menus.length);
+ let menu = this._menus[candidate].menu;
+ if (!menu.sourceActor || menu.sourceActor.visible)
+ return menu;
+ }
+ // no menu is found? this should not happen
+ // anyway stay on current menu
+ return this._menus[pos];
+ },
+
_onEventCapture: function(actor, event) {
if (!this.grabbed)
return false;
@@ -1166,12 +1244,9 @@ PopupMenuManager.prototype = {
if (symbol == Clutter.Left || symbol == Clutter.Right) {
let direction = symbol == Clutter.Right ? 1 : -1;
let pos = this._findMenu(this._activeMenu);
- let next = this._menus[mod(pos + direction, this._menus.length)].menu;
+ let next = this._nextMenu(pos, direction);
if (next != this._activeMenu) {
- let oldMenu = this._activeMenu;
- this._activeMenu = next;
- oldMenu.close();
- next.open();
+ this._changeMenu(next);
next.activateFirst();
}
return true;
@@ -1182,6 +1257,6 @@ PopupMenuManager.prototype = {
_closeMenu: function() {
if (this._activeMenu != null)
- this._activeMenu.close();
+ this._activeMenu.close(true);
}
};
diff --git a/js/ui/runDialog.js b/js/ui/runDialog.js
index aae73924a..6d07ee223 100644
--- a/js/ui/runDialog.js
+++ b/js/ui/runDialog.js
@@ -11,16 +11,18 @@ const Signals = imports.signals;
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
-const Lightbox = imports.ui.lightbox;
+const FileUtils = imports.misc.fileUtils;
const Main = imports.ui.main;
+const ModalDialog = imports.ui.modalDialog;
const Tweener = imports.ui.tweener;
+const Util = imports.misc.util;
const MAX_FILE_DELETED_BEFORE_INVALID = 10;
const HISTORY_KEY = 'command-history';
const HISTORY_LIMIT = 512;
-const DIALOG_FADE_TIME = 0.1;
+const DIALOG_GROW_TIME = 0.1;
function CommandCompleter() {
this._init();
@@ -62,25 +64,6 @@ CommandCompleter.prototype = {
this._update(0);
},
- _onGetEnumerateComplete : function(obj, res) {
- this._enumerator = obj.enumerate_children_finish(res);
- this._enumerator.next_files_async(100, GLib.PRIORITY_LOW, null, Lang.bind(this, this._onNextFileComplete));
- },
-
- _onNextFileComplete : function(obj, res) {
- let files = obj.next_files_finish(res);
- for (let i = 0; i < files.length; i++) {
- this._childs[this._i].push(files[i].get_name());
- }
- if (files.length) {
- this._enumerator.next_files_async(100, GLib.PRIORITY_LOW, null, Lang.bind(this, this._onNextFileComplete));
- } else {
- this._enumerator.close(null);
- this._enumerator = null;
- this._update(this._i + 1);
- }
- },
-
update : function() {
if (this._valid)
return;
@@ -100,7 +83,12 @@ CommandCompleter.prototype = {
}
let file = Gio.file_new_for_path(this._paths[i]);
this._childs[this._i] = [];
- file.enumerate_children_async(Gio.FILE_ATTRIBUTE_STANDARD_NAME, Gio.FileQueryInfoFlags.NONE, GLib.PRIORITY_LOW, null, Lang.bind(this, this._onGetEnumerateComplete));
+ FileUtils.listDirAsync(file, Lang.bind(this, function (files) {
+ for (let i = 0; i < files.length; i++) {
+ this._childs[this._i].push(files[i].get_name());
+ }
+ this._update(this._i + 1);
+ }));
},
_onChanged : function(m, f, of, type) {
@@ -175,8 +163,9 @@ function RunDialog() {
}
RunDialog.prototype = {
+__proto__: ModalDialog.ModalDialog.prototype,
_init : function() {
- this._isOpen = false;
+ ModalDialog.ModalDialog.prototype._init.call(this, { styleClass: 'run-dialog' });
global.settings.connect('changed::development-tools', Lang.bind(this, function () {
this._enableInternalCommands = global.settings.get_boolean('development-tools');
@@ -207,41 +196,32 @@ RunDialog.prototype = {
'debugexit': Lang.bind(this, function() {
Meta.exit(Meta.ExitCode.ERROR);
+ }),
+
+ // rt is short for "reload theme"
+ 'rt': Lang.bind(this, function() {
+ Main.loadTheme();
})
};
- // All actors are inside _group. We create it initially
- // hidden then show it in show()
- this._group = new Clutter.Group({ visible: false,
- x: 0, y: 0 });
- Main.uiGroup.add_actor(this._group);
-
- this._lightbox = new Lightbox.Lightbox(this._group,
- { inhibitEvents: true });
-
- this._box = new St.Bin({ x_align: St.Align.MIDDLE,
- y_align: St.Align.MIDDLE });
-
- this._group.add_actor(this._box);
- this._lightbox.highlight(this._box);
-
- let dialogBox = new St.BoxLayout({ style_class: 'run-dialog', vertical: true });
-
- this._box.set_child(dialogBox);
let label = new St.Label({ style_class: 'run-dialog-label',
text: _("Please enter a command:") });
- dialogBox.add(label, { expand: true, y_fill: false });
+ this.contentLayout.add(label, { y_align: St.Align.START });
let entry = new St.Entry({ style_class: 'run-dialog-entry' });
this._entryText = entry.clutter_text;
- dialogBox.add(entry, { expand: true });
+ this.contentLayout.add(entry, { y_align: St.Align.START });
+ this.connect('opened',
+ Lang.bind(this, function() {
+ this._entryText.grab_key_focus();
+ }));
this._errorBox = new St.BoxLayout();
- dialogBox.add(this._errorBox, { expand: true });
+ this.contentLayout.add(this._errorBox, { expand: true });
let errorIcon = new St.Button({ style_class: 'run-dialog-error-icon' });
@@ -275,10 +255,10 @@ RunDialog.prototype = {
else
this._run(o.get_text(), false);
if (!this._commandError)
- this.close();
+ this.close(global.get_current_time());
}
if (symbol == Clutter.Escape) {
- this.close();
+ this.close(global.get_current_time());
return true;
}
if (symbol == Clutter.slash) {
@@ -349,9 +329,7 @@ RunDialog.prototype = {
try {
if (inTerminal)
command = 'gnome-terminal -x ' + input;
- let [ok, len, args] = GLib.shell_parse_argv(command);
- let p = new Shell.Process({ 'args' : args });
- p.run();
+ Util.trySpawnCommandLine(command);
} catch (e) {
// Mmmh, that failed - see if @input matches an existing file
let path = null;
@@ -369,16 +347,25 @@ RunDialog.prototype = {
global.create_app_launch_context());
} else {
this._commandError = true;
- // The exception contains an error string like:
- // Error invoking Shell.run: Failed to execute child
- // process "foo" (No such file or directory)
- // We are only interested in the actual error, so parse
- //that out.
- let m = /.+\((.+)\)/.exec(e);
- let errorStr = _("Execution of '%s' failed:").format(command) + '\n' + m[1];
+
+ let errorStr = _("Execution of '%s' failed:").format(command) + '\n' + e.message;
this._errorMessage.set_text(errorStr);
- this._errorBox.show();
+ if (!this._errorBox.visible) {
+ let [errorBoxMinHeight, errorBoxNaturalHeight] = this._errorBox.get_preferred_height(-1);
+
+ let parentActor = this._errorBox.get_parent();
+ Tweener.addTween(parentActor,
+ { height: parentActor.height + errorBoxNaturalHeight,
+ time: DIALOG_GROW_TIME,
+ transition: 'easeOutQuad',
+ onComplete: Lang.bind(this,
+ function() {
+ parentActor.set_height(-1);
+ this._errorBox.show();
+ })
+ });
+ }
}
}
}
@@ -400,53 +387,14 @@ RunDialog.prototype = {
this._entryText.set_text('');
},
- open : function() {
- if (this._isOpen) // Already shown
- return;
-
- if (!Main.pushModal(this._group))
- return;
-
- // Position the dialog on the current monitor
- let monitor = global.get_focus_monitor();
-
+ open: function() {
this._historyIndex = this._history.length;
-
- this._box.set_position(monitor.x, monitor.y);
- this._box.set_size(monitor.width, monitor.height);
-
- this._isOpen = true;
- this._lightbox.show();
- this._group.opacity = 0;
- this._group.show();
- Tweener.addTween(this._group,
- { opacity: 255,
- time: DIALOG_FADE_TIME,
- transition: 'easeOutQuad'
- });
-
- global.stage.set_key_focus(this._entryText);
- },
-
- close : function() {
- if (!this._isOpen)
- return;
-
- this._isOpen = false;
+ this._errorBox.hide();
+ this._entryText.set_text('');
this._commandError = false;
- Main.popModal(this._group);
+ ModalDialog.ModalDialog.prototype.open.call(this);
+ },
- Tweener.addTween(this._group,
- { opacity: 0,
- time: DIALOG_FADE_TIME,
- transition: 'easeOutQuad',
- onComplete: Lang.bind(this, function() {
- this._errorBox.hide();
- this._group.hide();
- this._entryText.set_text('');
- })
- });
- }
};
Signals.addSignalMethods(RunDialog.prototype);
diff --git a/js/ui/search.js b/js/ui/search.js
index adc561198..f7be6af47 100644
--- a/js/ui/search.js
+++ b/js/ui/search.js
@@ -1,6 +1,19 @@
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
+const Gio = imports.gi.Gio;
+const GLib = imports.gi.GLib;
+const Lang = imports.lang;
const Signals = imports.signals;
+const Shell = imports.gi.Shell;
+const Util = imports.misc.util;
+
+const Gettext = imports.gettext.domain('gnome-shell');
+const _ = Gettext.gettext;
+
+const FileUtils = imports.misc.fileUtils;
+const Main = imports.ui.main;
+
+const DISABLED_OPEN_SEARCH_PROVIDERS_KEY = 'disabled-open-search-providers';
const RESULT_ICON_SIZE = 48;
@@ -211,6 +224,107 @@ SearchProvider.prototype = {
};
Signals.addSignalMethods(SearchProvider.prototype);
+function OpenSearchSystem(title) {
+ this._init(title);
+}
+
+OpenSearchSystem.prototype = {
+ _init: function() {
+ this._providers = [];
+ global.settings.connect('changed::' + DISABLED_OPEN_SEARCH_PROVIDERS_KEY, Lang.bind(this, this._refresh));
+ this._refresh();
+ },
+
+ getProviders: function() {
+ let res = [];
+ for (let i = 0; i < this._providers.length; i++)
+ res.push({ id: i, name: this._providers[i].name });
+
+ return res;
+ },
+
+ setSearchTerms: function(terms) {
+ this._terms = terms;
+ },
+
+ _checkSupportedProviderLanguage: function(provider) {
+ if (provider.url.search(/{language}/) == -1)
+ return true;
+
+ let langs = GLib.get_language_names();
+
+ langs.push('en');
+ let lang = null;
+ for (let i = 0; i < langs.length; i++) {
+ for (let k = 0; k < provider.langs.length; k++) {
+ if (langs[i] == provider.langs[k])
+ lang = langs[i];
+ }
+ if (lang)
+ break;
+ }
+ provider.lang = lang;
+ return lang != null;
+ },
+
+ activateResult: function(id) {
+ let searchTerms = this._terms.join(' ');
+
+ let url = this._providers[id].url.replace('{searchTerms}', encodeURIComponent(searchTerms));
+ if (url.match('{language}'))
+ url = url.replace('{language}', this._providers[id].lang);
+
+ try {
+ Gio.app_info_launch_default_for_uri(url, global.create_app_launch_context());
+ } catch (e) {
+ // TODO: remove this after glib will be removed from moduleset
+ // In the default jhbuild, gio is in our prefix but gvfs is not
+ Util.spawn(['gvfs-open', url])
+ }
+
+ Main.overview.hide();
+ },
+
+ _addProvider: function(fileName) {
+ let file = Gio.file_new_for_path(global.datadir + '/search_providers/' + fileName);
+ let source = '';
+
+ file.load_contents_async(null, Lang.bind(this, function (obj, res) {
+ let [success, source] = file.load_contents_finish(res);
+ if (source) {
+ let [success, name, url, langs, icon_uri] = global.parse_search_provider(source);
+ let provider ={ name: name,
+ url: url,
+ id: this._providers.length,
+ icon_uri: icon_uri,
+ langs: langs };
+ if (this._checkSupportedProviderLanguage(provider)) {
+ this._providers.push(provider);
+ this.emit('changed');
+ }
+ }
+ }));
+ },
+
+ _refresh: function() {
+ this._providers = [];
+ let names = global.settings.get_strv(DISABLED_OPEN_SEARCH_PROVIDERS_KEY);
+ let file = Gio.file_new_for_path(global.datadir + '/search_providers');
+ FileUtils.listDirAsync(file, Lang.bind(this, function(files) {
+ for (let i = 0; i < files.length; i++) {
+ let enabled = true;
+ let name = files[i].get_name();
+ for (let k = 0; k < names.length; k++)
+ if (names[k] == name)
+ enabled = false;
+ if (enabled)
+ this._addProvider(name);
+ }
+ }));
+ }
+}
+Signals.addSignalMethods(OpenSearchSystem.prototype);
+
function SearchSystem() {
this._init();
}
diff --git a/js/ui/searchDisplay.js b/js/ui/searchDisplay.js
index 3f094546f..fe6c76072 100644
--- a/js/ui/searchDisplay.js
+++ b/js/ui/searchDisplay.js
@@ -149,18 +149,18 @@ GridSearchResults.prototype = {
};
-function SearchResults(searchSystem) {
- this._init(searchSystem);
+function SearchResults(searchSystem, openSearchSystem) {
+ this._init(searchSystem, openSearchSystem);
}
SearchResults.prototype = {
- _init: function(searchSystem) {
+ _init: function(searchSystem, openSearchSystem) {
this._searchSystem = searchSystem;
+ this._openSearchSystem = openSearchSystem;
+
+ this.actor = new St.BoxLayout({ name: 'searchResults',
+ vertical: true });
- this.actor = new St.Bin({ name: 'searchResults',
- y_align: St.Align.START,
- x_align: St.Align.START,
- x_fill: true });
this._content = new St.BoxLayout({ name: 'searchResultsContent',
vertical: true });
@@ -170,7 +170,11 @@ SearchResults.prototype = {
scrollView.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC);
scrollView.add_actor(this._content);
- this.actor.set_child(scrollView);
+ this.actor.add(scrollView, { x_fill: true,
+ y_fill: false,
+ expand: true,
+ x_align: St.Align.START,
+ y_align: St.Align.START });
this._statusText = new St.Label({ style_class: 'search-statustext' });
this._content.add(this._statusText);
@@ -179,6 +183,51 @@ SearchResults.prototype = {
this._providerMeta = [];
for (let i = 0; i < this._providers.length; i++)
this.createProviderMeta(this._providers[i]);
+
+ this._searchProvidersBox = new St.BoxLayout({ style_class: 'search-providers-box' });
+ this.actor.add(this._searchProvidersBox);
+
+ this._openSearchProviders = [];
+ this._openSearchSystem.connect('changed', Lang.bind(this, this._updateOpenSearchProviderButtons));
+ this._updateOpenSearchProviderButtons();
+ },
+
+ _updateOpenSearchProviderButtons: function() {
+ this._selectedOpenSearchButton = -1;
+ for (let i = 0; i < this._openSearchProviders.length; i++)
+ this._openSearchProviders[i].actor.destroy();
+ this._openSearchProviders = this._openSearchSystem.getProviders();
+ for (let i = 0; i < this._openSearchProviders.length; i++)
+ this._createOpenSearchProviderButton(this._openSearchProviders[i]);
+ },
+
+ _updateOpenSearchButtonState: function() {
+ for (let i = 0; i < this._openSearchProviders.length; i++) {
+ if (i == this._selectedOpenSearchButton)
+ this._openSearchProviders[i].actor.add_style_pseudo_class('selected');
+ else
+ this._openSearchProviders[i].actor.remove_style_pseudo_class('selected');
+ }
+ },
+
+ _createOpenSearchProviderButton: function(provider) {
+ let clickable = new St.Clickable({ style_class: 'dash-search-button',
+ reactive: true,
+ x_fill: true,
+ y_align: St.Align.MIDDLE });
+ let bin = new St.Bin({ x_fill: false,
+ x_align:St.Align.MIDDLE });
+ clickable.connect('clicked', Lang.bind(this, function() {
+ this._openSearchSystem.activateResult(provider.id);
+ }));
+ let title = new St.Label({ text: provider.name,
+ style_class: 'dash-search-button-label' });
+
+ bin.set_child(title);
+ clickable.set_child(bin);
+ provider.actor = clickable;
+
+ this._searchProvidersBox.add(clickable);
},
createProviderMeta: function(provider) {
@@ -227,6 +276,8 @@ SearchResults.prototype = {
this._searchSystem.reset();
this._statusText.hide();
this._clearDisplay();
+ this._selectedOpenSearchButton = -1;
+ this._updateOpenSearchButtonState();
},
startingSearch: function() {
@@ -247,12 +298,12 @@ SearchResults.prototype = {
if (results.length == 0) {
this._statusText.set_text(_("No matching results."));
this._statusText.show();
- return true;
} else {
this._statusText.hide();
}
let terms = this._searchSystem.getTerms();
+ this._openSearchSystem.setSearchTerms(terms);
for (let i = 0; i < results.length; i++) {
let [provider, providerResults] = results[i];
@@ -262,7 +313,8 @@ SearchResults.prototype = {
meta.count.set_text('' + providerResults.length);
}
- this.selectDown(false);
+ if (this._selectedOpenSearchButton == -1)
+ this.selectDown(false);
return true;
},
@@ -284,16 +336,26 @@ SearchResults.prototype = {
},
selectUp: function(recursing) {
- for (let i = this._selectedProvider; i >= 0; i--) {
- let meta = this._providerMeta[i];
- if (!meta.actor.visible)
- continue;
- let success = this._modifyActorSelection(meta.resultDisplay, true);
- if (success) {
- this._selectedProvider = i;
- return;
+ if (this._selectedOpenSearchButton == -1) {
+ for (let i = this._selectedProvider; i >= 0; i--) {
+ let meta = this._providerMeta[i];
+ if (!meta.actor.visible)
+ continue;
+ let success = this._modifyActorSelection(meta.resultDisplay, true);
+ if (success) {
+ this._selectedProvider = i;
+ return;
+ }
}
}
+
+ if (this._selectedOpenSearchButton == -1)
+ this._selectedOpenSearchButton = this._openSearchProviders.length;
+ this._selectedOpenSearchButton--;
+ this._updateOpenSearchButtonState();
+ if (this._selectedOpenSearchButton >= 0)
+ return;
+
if (this._providerMeta.length > 0 && !recursing) {
this._selectedProvider = this._providerMeta.length - 1;
this.selectUp(true);
@@ -302,18 +364,30 @@ SearchResults.prototype = {
selectDown: function(recursing) {
let current = this._selectedProvider;
- if (current == -1)
- current = 0;
- for (let i = current; i < this._providerMeta.length; i++) {
- let meta = this._providerMeta[i];
- if (!meta.actor.visible)
- continue;
- let success = this._modifyActorSelection(meta.resultDisplay, false);
- if (success) {
- this._selectedProvider = i;
- return;
+ if (this._selectedOpenSearchButton == -1) {
+ if (current == -1)
+ current = 0;
+ for (let i = current; i < this._providerMeta.length; i++) {
+ let meta = this._providerMeta[i];
+ if (!meta.actor.visible)
+ continue;
+ let success = this._modifyActorSelection(meta.resultDisplay, false);
+ if (success) {
+ this._selectedProvider = i;
+ return;
+ }
}
}
+ this._selectedOpenSearchButton++;
+
+ if (this._selectedOpenSearchButton < this._openSearchProviders.length) {
+ this._updateOpenSearchButtonState();
+ return;
+ }
+
+ this._selectedOpenSearchButton = -1;
+ this._updateOpenSearchButtonState();
+
if (this._providerMeta.length > 0 && !recursing) {
this._selectedProvider = 0;
this.selectDown(true);
@@ -321,6 +395,13 @@ SearchResults.prototype = {
},
activateSelected: function() {
+ if (this._selectedOpenSearchButton != -1) {
+ let provider = this._openSearchProviders[this._selectedOpenSearchButton];
+ this._openSearchSystem.activateResult(provider.id);
+ Main.overview.hide();
+ return;
+ }
+
let current = this._selectedProvider;
if (current < 0)
return;
diff --git a/js/ui/status/accessibility.js b/js/ui/status/accessibility.js
index f96e193a8..11a95f373 100644
--- a/js/ui/status/accessibility.js
+++ b/js/ui/status/accessibility.js
@@ -12,6 +12,7 @@ const St = imports.gi.St;
const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu;
+const Util = imports.misc.util;
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
@@ -108,8 +109,7 @@ ATIndicator.prototype = {
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
this.menu.addAction(_("Universal Access Settings"), function() {
- let p = new Shell.Process({ args: ['gnome-control-center','universal-access'] });
- p.run();
+ Util.spawnDesktop('gnome-universal-access-panel');
});
},
diff --git a/js/ui/status/bluetooth.js b/js/ui/status/bluetooth.js
index bde3f46cf..2220d2520 100644
--- a/js/ui/status/bluetooth.js
+++ b/js/ui/status/bluetooth.js
@@ -65,16 +65,17 @@ Indicator.prototype = {
this.menu.addMenuItem(this._discoverable);
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
- this._fullMenuItems = [new PopupMenu.PopupMenuItem(_("Send Files to Device...")),
- new PopupMenu.PopupSeparatorMenuItem(),
- new PopupMenu.PopupSeparatorMenuItem(),
- new PopupMenu.PopupMenuItem(_("Setup a New Device..."))];
- this._deviceSep = this._fullMenuItems[1]; // hidden if no device exists
+ this._fullMenuItems = [new PopupMenu.PopupSeparatorMenuItem(),
+ new PopupMenu.PopupMenuItem(_("Send Files to Device...")),
+ new PopupMenu.PopupMenuItem(_("Setup a New Device...")),
+ new PopupMenu.PopupSeparatorMenuItem()];
+ this._hasDevices = false;
+ this._deviceSep = this._fullMenuItems[0]; // hidden if no device exists
- this._fullMenuItems[0].connect('activate', function() {
+ this._fullMenuItems[1].connect('activate', function() {
GLib.spawn_command_line_async('bluetooth-sendto');
});
- this._fullMenuItems[3].connect('activate', function() {
+ this._fullMenuItems[2].connect('activate', function() {
GLib.spawn_command_line_async('bluetooth-wizard');
});
@@ -83,7 +84,7 @@ Indicator.prototype = {
this.menu.addMenuItem(item);
}
- this._deviceItemPosition = 5;
+ this._deviceItemPosition = 3;
this._deviceItems = [];
this._applet.connect('devices-changed', Lang.bind(this, this._updateDevices));
this._updateDevices();
@@ -104,12 +105,18 @@ Indicator.prototype = {
_updateKillswitch: function() {
let current_state = this._applet.killswitch_state;
let on = current_state == GnomeBluetoothApplet.KillswitchState.UNBLOCKED;
+ let has_adapter = current_state != GnomeBluetoothApplet.KillswitchState.NO_ADAPTER;
let can_toggle = current_state != GnomeBluetoothApplet.KillswitchState.NO_ADAPTER &&
current_state != GnomeBluetoothApplet.KillswitchState.HARD_BLOCKED;
this._killswitch.setToggleState(on);
this._killswitch.actor.reactive = can_toggle;
+ if (has_adapter)
+ this.actor.show();
+ else
+ this.actor.hide();
+
if (on) {
this._discoverable.actor.show();
this.setIcon('bluetooth-active');
@@ -119,22 +126,56 @@ Indicator.prototype = {
}
},
- _updateDevices: function() {
- this._destroyAll(this._deviceItems);
- this._deviceItems = [];
+ _deviceCompare: function(d1, d2) {
+ return d1.device_path == d2.device_path &&
+ d1.bdaddr == d2.bdaddr &&
+ d1.can_connect == d2.can_connect &&
+ d1.capabilities == d2.capabilities;
+ },
+ _updateDevices: function() {
let devices = this._applet.get_devices();
- let anydevice = false;
+
+ for (let i = 0; i < this._deviceItems.length; i++) {
+ let item = this._deviceItems[i];
+ let destroy = true;
+ for (let j = 0; j < devices.length; j++) {
+ // we need to deep compare because BluetoothSimpleDevice is a boxed type
+ // (but we take advantage of that, because _skip will disappear the next
+ // time get_devices() is called)
+ if (this._deviceCompare(item._device, devices[i])) {
+ item.label.text = devices[i].alias;
+ devices[i]._skip = true;
+ destroy = false;
+ }
+ }
+ if (destroy) {
+ item.destroy();
+ item._destroyed = true;
+ }
+ }
+
+ let newlist = [ ];
+ for (let i = 0; i < this._deviceItems.length; i++) {
+ let item = this._deviceItems[i];
+ if (!item._destroyed)
+ newlist.push(item);
+ }
+ this._deviceItems = newlist;
+
+ this._hasDevices = newlist.length > 0;
for (let i = 0; i < devices.length; i++) {
let d = devices[i];
+ if (d._skip)
+ continue;
let item = this._createDeviceItem(d);
if (item) {
this.menu.addMenuItem(item, this._deviceItemPosition + this._deviceItems.length);
this._deviceItems.push(item);
- anydevice = true;
+ this._hasDevices = true;
}
}
- if (anydevice)
+ if (this._hasDevices)
this._deviceSep.actor.show();
else
this._deviceSep.actor.hide();
@@ -233,7 +274,10 @@ Indicator.prototype = {
_updateFullMenu: function() {
if (this._applet.show_full_menu) {
this._showAll(this._fullMenuItems);
- this._showAll(this._deviceItems);
+ if (this._hasDevices)
+ this._showAll(this._deviceItems);
+ else
+ this._deviceSep.actor.hide();
} else {
this._hideAll(this._fullMenuItems);
this._hideAll(this._deviceItems);
@@ -422,7 +466,7 @@ PinNotification.prototype = {
}));
this.addActor(this._entry);
- this.addButton('ok', _("Ok"));
+ this.addButton('ok', _("OK"));
this.addButton('cancel', _("Cancel"));
this.connect('action-invoked', Lang.bind(this, function(self, action) {
diff --git a/js/ui/status/keyboard.js b/js/ui/status/keyboard.js
new file mode 100644
index 000000000..404a766cc
--- /dev/null
+++ b/js/ui/status/keyboard.js
@@ -0,0 +1,206 @@
+/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
+
+const Clutter = imports.gi.Clutter;
+const GdkPixbuf = imports.gi.GdkPixbuf;
+const Gkbd = imports.gi.Gkbd;
+const Gio = imports.gi.Gio;
+const GLib = imports.gi.GLib;
+const Lang = imports.lang;
+const Shell = imports.gi.Shell;
+const St = imports.gi.St;
+
+const PopupMenu = imports.ui.popupMenu;
+const PanelMenu = imports.ui.panelMenu;
+
+const Gettext = imports.gettext.domain('gnome-shell');
+const _ = Gettext.gettext;
+
+const INDICATOR_SCHEMA = 'org.gnome.settings-daemon.plugins.keyboard';
+
+function LayoutMenuItem() {
+ this._init.apply(this, arguments);
+}
+
+LayoutMenuItem.prototype = {
+ __proto__: PopupMenu.PopupBaseMenuItem.prototype,
+
+ _init: function(config, id, indicator, long_name) {
+ PopupMenu.PopupBaseMenuItem.prototype._init.call(this);
+
+ this._config = config;
+ this._id = id;
+ this.label = new St.Label({ text: long_name });
+ this.indicator = indicator;
+ this.addActor(this.label);
+ this.addActor(this.indicator);
+ },
+
+ activate: function(event) {
+ PopupMenu.PopupBaseMenuItem.prototype.activate.call(this);
+ this._config.lock_group(this._id);
+ }
+};
+
+function XKBIndicator() {
+ this._init.apply(this, arguments);
+}
+
+XKBIndicator.prototype = {
+ __proto__: PanelMenu.Button.prototype,
+
+ _init: function() {
+ PanelMenu.Button.prototype._init.call(this, St.Align.START);
+
+ this._container = new Shell.GenericContainer();
+ this._container.connect('get-preferred-width', Lang.bind(this, this._get_preferred_width));
+ this._container.connect('get-preferred-height', Lang.bind(this, this._get_preferred_height));
+ this._container.connect('allocate', Lang.bind(this, this._allocate));
+ this.actor.set_child(this._container);
+
+ this._iconActor = new St.Icon({ icon_name: 'keyboard', icon_type: St.IconType.SYMBOLIC, style_class: 'system-status-icon' });
+ this._container.add_actor(this._iconActor);
+ this._labelActors = [ ];
+ this._layoutItems = [ ];
+
+ this._indicatorSettings = new Gio.Settings({ schema: INDICATOR_SCHEMA });
+ this._indicatorSettings.connect('changed::disable-indicator', Lang.bind(this, this._sync_config));
+
+ this._disableIndicator = false;
+ this._showFlags = false;
+ this._config = Gkbd.Configuration.get();
+ this._config.connect('changed', Lang.bind(this, this._sync_config));
+ this._config.connect('group-changed', Lang.bind(this, this._sync_group));
+ this._config.start_listen();
+
+ this._sync_config();
+
+ this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
+ this.menu.addAction(_("Keyboard Settings"), function() {
+ GLib.spawn_command_line_async('gnome-control-center region');
+ });
+ },
+
+ _sync_config: function() {
+ this._disableIndicator = this._indicatorSettings.get_boolean('disable-indicator');
+
+ this._showFlags = this._config.if_flags_shown();
+ if (this._showFlags) {
+ this._container.set_skip_paint(this._iconActor, false);
+ } else {
+ this._container.set_skip_paint(this._iconActor, true);
+ }
+
+ let groups = this._config.get_group_names();
+ if (groups.length > 1 && !this._disableIndicator) {
+ this.actor.show();
+ } else {
+ this.menu.close();
+ this.actor.hide();
+ }
+
+ for (let i = 0; i < this._layoutItems.length; i++)
+ this._layoutItems[i].destroy();
+
+ for (let i = 0; i < this._labelActors.length; i++)
+ this._labelActors[i].destroy();
+
+ let short_names = this._config.get_short_group_names();
+
+ this._selectedLayout = null;
+ this._layoutItems = [ ];
+ this._selectedLabel = null;
+ this._labelActors = [ ];
+ for (let i = 0; i < groups.length; i++) {
+ let icon_name = this._config.get_group_name(i);
+ let actor;
+ if (this._showFlags)
+ actor = new St.Icon({ icon_name: icon_name, icon_type: St.IconType.SYMBOLIC, style_class: 'popup-menu-icon' });
+ else
+ actor = new St.Label({ text: short_names[i] });
+ let item = new LayoutMenuItem(this._config, i, actor, groups[i]);
+ item._short_group_name = short_names[i];
+ item._icon_name = icon_name;
+ this._layoutItems.push(item);
+ this.menu.addMenuItem(item, i);
+
+ let shortLabel = new St.Label({ text: short_names[i] });
+ this._labelActors.push(shortLabel);
+ this._container.add_actor(shortLabel);
+ this._container.set_skip_paint(shortLabel, true);
+ }
+
+ this._sync_group();
+ },
+
+ _sync_group: function() {
+ let selected = this._config.get_current_group();
+
+ if (this._selectedLayout) {
+ this._selectedLayout.setShowDot(false);
+ this._selectedLayout = null;
+ }
+
+ if (this._selectedLabel) {
+ this._container.set_skip_paint(this._selectedLabel, true);
+ this._selectedLabel = null;
+ }
+
+ let item = this._layoutItems[selected];
+ item.setShowDot(true);
+
+ this._iconActor.icon_name = item._icon_name;
+ this._selectedLabel = this._labelActors[selected];
+ this._container.set_skip_paint(this._selectedLabel, this._showFlags);
+
+ this._selectedLayout = item;
+ },
+
+ _get_preferred_width: function(container, for_height, alloc) {
+ /* Here, and in _get_preferred_height, we need to query for the
+ height of all children, but we ignore the results for those
+ we don't actually display. */
+ let max_min_width = 0, max_natural_width = 0;
+ if (this._showFlags)
+ [max_min_width, max_natural_width] = this._iconActor.get_preferred_width(for_height);
+
+ for (let i = 0; i < this._labelActors.length; i++) {
+ let [min_width, natural_width] = this._labelActors[i].get_preferred_width(for_height);
+ if (!this._showFlags) {
+ max_min_width = Math.max(max_min_width, min_width);
+ max_natural_width = Math.max(max_natural_width, natural_width);
+ }
+ }
+
+ alloc.min_size = max_min_width;
+ alloc.natural_size = max_natural_width;
+ },
+
+ _get_preferred_height: function(container, for_width, alloc) {
+ let max_min_height = 0, max_natural_height = 0;
+ if (this._showFlags)
+ [max_min_height, max_natural_height] = this._iconActor.get_preferred_height(for_width);
+
+ for (let i = 0; i < this._labelActors.length; i++) {
+ let [min_height, natural_height] = this._labelActors[i].get_preferred_height(for_width);
+ if (!this._showFlags) {
+ max_min_height = Math.max(max_min_height, min_height);
+ max_natural_height = Math.max(max_natural_height, natural_height);
+ }
+ }
+
+ alloc.min_size = max_min_height;
+ alloc.natural_size = max_natural_height;
+ },
+
+ _allocate: function(container, box, flags) {
+ // translate box to (0, 0)
+ box.x2 -= box.x1;
+ box.x1 = 0;
+ box.y2 -= box.y1;
+ box.y1 = 0;
+
+ this._iconActor.allocate_align_fill(box, 0.5, 0, false, false, flags);
+ for (let i = 0; i < this._labelActors.length; i++)
+ this._labelActors[i].allocate_align_fill(box, 0.5, 0, false, false, flags);
+ }
+};
\ No newline at end of file
diff --git a/js/ui/status/power.js b/js/ui/status/power.js
index 3a909c4cd..263d48e3d 100644
--- a/js/ui/status/power.js
+++ b/js/ui/status/power.js
@@ -1,7 +1,6 @@
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
const Gio = imports.gi.Gio;
-const GLib = imports.gi.GLib;
const DBus = imports.dbus;
const Lang = imports.lang;
const Mainloop = imports.mainloop;
@@ -10,6 +9,7 @@ const St = imports.gi.St;
const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu;
+const Util = imports.misc.util;
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
@@ -83,7 +83,7 @@ Indicator.prototype = {
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
this.menu.addAction(_("Power Settings"),function() {
- GLib.spawn_command_line_async('gnome-control-center power');
+ Util.spawnDesktop('gnome-power-panel');
});
this._proxy.connect('Changed', Lang.bind(this, this._devicesChanged));
@@ -134,8 +134,7 @@ Indicator.prototype = {
this._batteryItem.actor.reactive = true;
this._batteryItem.actor.can_focus = true;
this._batteryItem.connect('activate', function(item) {
- let p = new Shell.Process({ args: ['gnome-power-statistics', '--device', device_id] });
- p.run();
+ Util.spawn(['gnome-power-statistics', '--device', device_id]);
});
} else {
// virtual device
@@ -164,8 +163,7 @@ Indicator.prototype = {
let item = new DeviceItem (devices[i]);
item.connect('activate', function() {
- let p = new Shell.Process({ args: ['gnome-power-statistics', '--device', device_id] });
- p.run();
+ Util.spawn(['gnome-power-statistics', '--device', device_id]);
});
this._deviceItems.push(item);
this.menu.addMenuItem(item, this._otherDevicePosition + position);
@@ -197,8 +195,8 @@ Indicator.prototype = {
_checkError: function(error) {
if (!this._restarted && error && error.message.match(/org\.freedesktop\.DBus\.Error\.(UnknownMethod|InvalidArgs)/)) {
- GLib.spawn_command_line_sync('pkill -f "^gnome-power-manager$"');
- GLib.spawn_command_line_async('gnome-power-manager');
+ Util.killall('gnome-power-manager');
+ Util.spawn(['gnome-power-manager']);
this._restarted = true;
}
}
diff --git a/js/ui/status/volume.js b/js/ui/status/volume.js
index 63f76fe0d..9211968f9 100644
--- a/js/ui/status/volume.js
+++ b/js/ui/status/volume.js
@@ -11,6 +11,7 @@ const St = imports.gi.St;
const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu;
+const Util = imports.misc.util;
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
@@ -60,8 +61,7 @@ Indicator.prototype = {
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
this.menu.addAction(_("Sound Settings"), function() {
- let p = new Shell.Process({ args: ['gnome-control-center', 'sound'] });
- p.run();
+ Util.spawnDesktop('gnome-sound-panel');
});
this.actor.connect('scroll-event', Lang.bind(this, this._onScrollEvent));
diff --git a/js/ui/statusIconDispatcher.js b/js/ui/statusIconDispatcher.js
index 474cf54d3..874ffb40d 100644
--- a/js/ui/statusIconDispatcher.js
+++ b/js/ui/statusIconDispatcher.js
@@ -6,6 +6,7 @@ const Signals = imports.signals;
const MessageTray = imports.ui.messageTray;
const NotificationDaemon = imports.ui.notificationDaemon;
+const Util = imports.misc.util;
const STANDARD_TRAY_ICON_IMPLEMENTATIONS = {
'bluetooth-applet': 'bluetooth',
@@ -33,8 +34,7 @@ StatusIconDispatcher.prototype = {
// app-indicators, so that applications fall back to normal
// status icons
// http://bugzilla.gnome.org/show_bug.cgi=id=621382
- let p = new Shell.Process({ args: ['pkill', '-f', '^([^ ]*/)?indicator-application-service$']});
- p.run();
+ Util.killall('indicator-application-service');
},
_onTrayIconAdded: function(o, icon) {
diff --git a/js/ui/statusMenu.js b/js/ui/statusMenu.js
index e2d13c68d..f834aad49 100644
--- a/js/ui/statusMenu.js
+++ b/js/ui/statusMenu.js
@@ -12,6 +12,7 @@ const GnomeSession = imports.misc.gnomeSession;
const Main = imports.ui.main;
const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu;
+const Util = imports.misc.util;
// Adapted from gdm/gui/user-switch-applet/applet.c
//
@@ -31,7 +32,7 @@ StatusMenuButton.prototype = {
this.actor.set_child(box);
this._gdm = Gdm.UserManager.ref_default();
- this._gdm.queue_load()
+ this._gdm.queue_load();
this._user = this._gdm.get_user(GLib.get_user_name());
this._presence = new GnomeSession.Presence();
@@ -153,17 +154,17 @@ StatusMenuButton.prototype = {
_onMyAccountActivate: function() {
Main.overview.hide();
- this._spawn(['gnome-control-center', 'user-accounts']);
+ Util.spawnDesktop('gnome-user-accounts-panel');
},
_onPreferencesActivate: function() {
Main.overview.hide();
- this._spawn(['gnome-control-center', '-o']);
+ Util.spawnDesktop('gnome-control-center');
},
_onLockScreenActivate: function() {
Main.overview.hide();
- this._spawn(['gnome-screensaver-command', '--lock']);
+ Util.spawn(['gnome-screensaver-command', '--lock']);
},
_onLoginScreenActivate: function() {
@@ -174,19 +175,11 @@ StatusMenuButton.prototype = {
_onQuitSessionActivate: function() {
Main.overview.hide();
- this._spawn(['gnome-session-save', '--logout-dialog']);
+ Util.spawn(['gnome-session-save', '--logout-dialog']);
},
_onShutDownActivate: function() {
Main.overview.hide();
- this._spawn(['gnome-session-save', '--shutdown-dialog']);
- },
-
- _spawn: function(args) {
- // FIXME: once Shell.Process gets support for signalling
- // errors we should pop up an error dialog or something here
- // on failure
- let p = new Shell.Process({'args' : args});
- p.run();
+ Util.spawn(['gnome-session-save', '--shutdown-dialog']);
}
};
diff --git a/js/ui/telepathyClient.js b/js/ui/telepathyClient.js
index 5b57706e9..ed8feae7d 100644
--- a/js/ui/telepathyClient.js
+++ b/js/ui/telepathyClient.js
@@ -476,6 +476,7 @@ Source.prototype = {
}
this._notification = new Notification(this);
+ this._notification.setUrgency(MessageTray.Urgency.HIGH);
// Since we only create sources when receiving a message, this
// is a plausible default
@@ -593,6 +594,7 @@ Notification.prototype = {
_init: function(source) {
MessageTray.Notification.prototype._init.call(this, source, source.title, null, { customContent: true });
+ this.setResident(true);
this._responseEntry = new St.Entry({ style_class: 'chat-response' });
this._responseEntry.clutter_text.connect('activate', Lang.bind(this, this._onEntryActivated));
diff --git a/js/ui/viewSelector.js b/js/ui/viewSelector.js
index c2c5b691e..9575e296e 100644
--- a/js/ui/viewSelector.js
+++ b/js/ui/viewSelector.js
@@ -16,12 +16,12 @@ const SearchDisplay = imports.ui.searchDisplay;
const Tweener = imports.ui.tweener;
-function SearchEntry() {
- this._init();
+function SearchEntry(focusBase) {
+ this._init(focusBase);
}
SearchEntry.prototype = {
- _init : function() {
+ _init : function(focusBase) {
this.actor = new St.Entry({ name: 'searchEntry',
hint_text: _("Search your computer") });
this.entry = this.actor.clutter_text;
@@ -45,11 +45,12 @@ SearchEntry.prototype = {
this.pane = null;
this._capturedEventId = 0;
+ this._focusBase = focusBase;
},
_updateCursorVisibility: function() {
let focus = global.stage.get_key_focus();
- if (focus == global.stage || focus == this.entry)
+ if (focus == this._focusBase || focus == this.entry)
this.entry.set_cursor_visible(true);
else
this.entry.set_cursor_visible(false);
@@ -81,8 +82,8 @@ SearchEntry.prototype = {
this.entry.text = '';
- // Return focus to the stage
- global.stage.set_key_focus(null);
+ // Return focus to the viewSelector
+ global.stage.set_key_focus(this._focusBase);
this.entry.set_cursor_visible(true);
this.entry.set_selection(0, 0);
@@ -117,11 +118,11 @@ SearchEntry.prototype = {
}
return false;
case Clutter.EventType.KEY_PRESS:
- // If neither the stage nor our entry have key focus, some
- // "special" actor grabbed the focus (run dialog, looking
- // glass); we don't want to interfere with that
+ // If some "special" actor grabbed the focus (run
+ // dialog, looking glass); we don't want to interfere
+ // with that
let focus = global.stage.get_key_focus();
- if (focus != global.stage && focus != this.entry)
+ if (focus != this._focusBase && focus != this.entry)
return false;
let sym = event.get_key_symbol();
@@ -231,23 +232,25 @@ ViewTab.prototype = {
};
-function SearchTab() {
- this._init();
+function SearchTab(focusBase) {
+ this._init(focusBase);
}
SearchTab.prototype = {
__proto__: BaseTab.prototype,
- _init: function() {
+ _init: function(focusBase) {
this._searchActive = false;
this._searchPending = false;
this._keyPressId = 0;
this._searchTimeoutId = 0;
+ this._focusBase = focusBase;
this._searchSystem = new Search.SearchSystem();
+ this._openSearchSystem = new Search.OpenSearchSystem();
- this._searchEntry = new SearchEntry();
- this._searchResults = new SearchDisplay.SearchResults(this._searchSystem);
+ this._searchEntry = new SearchEntry(focusBase);
+ this._searchResults = new SearchDisplay.SearchResults(this._searchSystem, this._openSearchSystem);
BaseTab.prototype._init.call(this,
this._searchEntry.actor,
this._searchResults.actor);
@@ -274,15 +277,15 @@ SearchTab.prototype = {
BaseTab.prototype.show.call(this);
if (this._keyPressId == 0)
- this._keyPressId = global.stage.connect('key-press-event',
- Lang.bind(this, this._onKeyPress));
+ this._keyPressId = this._searchEntry.entry.connect('key-press-event',
+ Lang.bind(this, this._onKeyPress));
},
hide: function() {
BaseTab.prototype.hide.call(this);
if (this._keyPressId > 0) {
- global.stage.disconnect(this._keyPressId);
+ this._searchEntry.entry.disconnect(this._keyPressId);
this._keyPressId = 0;
}
this._searchEntry.reset();
@@ -317,14 +320,7 @@ SearchTab.prototype = {
this._searchTimeoutId = Mainloop.timeout_add(150, Lang.bind(this, this._doSearch));
},
- _onKeyPress: function(stage, event) {
- // If neither the stage nor the search entry have key focus, some
- // "special" actor grabbed the focus (run dialog, looking glass);
- // we don't want to interfere with that
- let focus = stage.get_key_focus();
- if (focus != stage && focus != this._searchEntry.entry)
- return false;
-
+ _onKeyPress: function(entry, event) {
let symbol = event.get_key_symbol();
if (symbol == Clutter.Up) {
if (!this._searchActive)
@@ -393,7 +389,7 @@ ViewSelector.prototype = {
this._tabs = [];
this._activeTab = null;
- this._searchTab = new SearchTab();
+ this._searchTab = new SearchTab(this.actor);
this._searchArea.set_child(this._searchTab.title);
this._addTab(this._searchTab);
@@ -559,14 +555,7 @@ ViewSelector.prototype = {
}));
},
- _onKeyPress: function(stage, event) {
- // Only process events if the stage has key focus - search is handled
- // by the search tab, and we do not want to interfere with "special"
- // actors grabbing focus (run dialog, looking glass, notifications).
- let focus = stage.get_key_focus();
- if (focus != stage)
- return false;
-
+ _onKeyPress: function(actor, event) {
let modifiers = Shell.get_event_state(event);
let symbol = event.get_key_symbol();
if (symbol == Clutter.Escape) {
@@ -600,8 +589,8 @@ ViewSelector.prototype = {
this._overviewHidingId = Main.overview.connect('hiding',
Lang.bind(this, this._switchDefaultTab));
if (this._keyPressId == 0)
- this._keyPressId = global.stage.connect('key-press-event',
- Lang.bind(this, this._onKeyPress));
+ this._keyPressId = this.actor.connect('key-press-event',
+ Lang.bind(this, this._onKeyPress));
this._switchDefaultTab();
},
@@ -610,7 +599,7 @@ ViewSelector.prototype = {
this._searchTab.setFindAsYouType(false);
if (this._keyPressId > 0) {
- global.stage.disconnect(this._keyPressId);
+ this.actor.disconnect(this._keyPressId);
this._keyPressId = 0;
}
diff --git a/js/ui/windowManager.js b/js/ui/windowManager.js
index 5bd14e499..447e4796e 100644
--- a/js/ui/windowManager.js
+++ b/js/ui/windowManager.js
@@ -497,6 +497,8 @@ WindowManager.prototype = {
for (let i = 0; i < switchData.windows.length; i++) {
let w = switchData.windows[i];
+ if (w.window.is_destroyed()) // Window gone
+ continue;
if (w.window.get_parent() == switchData.outGroup) {
w.window.reparent(w.parent);
w.window.hide();
diff --git a/js/ui/workspacesView.js b/js/ui/workspacesView.js
index 678a9e087..747800391 100644
--- a/js/ui/workspacesView.js
+++ b/js/ui/workspacesView.js
@@ -644,6 +644,9 @@ WorkspacesView.prototype = {
},
_onDragMotion: function(dragEvent) {
+ if (Main.overview.animationInProgress)
+ return DND.DragMotionResult.CONTINUE;
+
let primary = global.get_primary_monitor();
let activeWorkspaceIndex = global.screen.get_active_workspace_index();
diff --git a/js/ui/xdndHandler.js b/js/ui/xdndHandler.js
new file mode 100644
index 000000000..02755591f
--- /dev/null
+++ b/js/ui/xdndHandler.js
@@ -0,0 +1,130 @@
+/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
+
+const Clutter = imports.gi.Clutter;
+const Lang = imports.lang;
+const Shell = imports.gi.Shell;
+const Signals = imports.signals;
+const Mainloop = imports.mainloop;
+const DND = imports.ui.dnd;
+
+function XdndHandler() {
+ this._init();
+}
+
+XdndHandler.prototype = {
+ _init: function() {
+ // Used to display a clone of the cursor window when the
+ // window group is hidden (like it happens in the overview)
+ this._cursorWindowClone = null;
+
+ // Used as a drag actor in case we don't have a cursor window clone
+ this._dummy = new Clutter.Rectangle({ width: 1, height: 1, opacity: 0 });
+ global.stage.add_actor(this._dummy);
+ this._dummy.hide();
+
+ // Mutter delays the creation of the output window as long
+ // as possible to avoid flicker. In case a plugin wants to
+ // access it directly it has to connect to the stage's show
+ // signal. (see comment in compositor.c:meta_compositor_manage_screen)
+ global.stage.connect('show', function () {
+ global.init_xdnd();
+ return false;
+ });
+
+ global.connect('xdnd-enter', Lang.bind(this, this._onEnter));
+ global.connect('xdnd-position-changed', Lang.bind(this, this._onPositionChanged));
+ global.connect('xdnd-leave', Lang.bind(this, this._onLeave));
+
+ this._windowGroupVisibilityHandlerId = 0;
+ },
+
+ // Called when the user cancels the drag (i.e release the button)
+ _onLeave: function() {
+ if (this._windowGroupVisibilityHandlerId != 0) {
+ Mainloop.source_remove(this._windowGroupVisibilityHandlerId);
+ this._windowGroupVisibilityHandlerId = 0;
+ }
+ this.emit('drag-end');
+ },
+
+ _onEnter: function() {
+ this._windowGroupVisibilityHandlerId =
+ global.window_group.connect('notify::visible',
+ Lang.bind(this, this._onWindowGroupVisibilityChanged));
+
+ this.emit('drag-begin', global.get_current_time());
+ },
+
+ _onWindowGroupVisibilityChanged: function() {
+ if (!global.window_group.visible) {
+ if (this._cursorWindowClone)
+ return;
+
+ let windows = global.get_window_actors();
+ let cursorWindow = windows[windows.length - 1];
+
+ // FIXME: more reliable way?
+ if (!cursorWindow.is_override_redirect())
+ return;
+
+ let constraint_x = new Clutter.BindConstraint({ coordinate : Clutter.BindCoordinate.X,
+ source: cursorWindow});
+ let constraint_y = new Clutter.BindConstraint({ coordinate : Clutter.BindCoordinate.Y,
+ source: cursorWindow});
+
+ this._cursorWindowClone = new Clutter.Clone({ source: cursorWindow });
+ global.overlay_group.add_actor(this._cursorWindowClone);
+ Shell.util_set_hidden_from_pick(this._cursorWindowClone, true);
+
+ // Make sure that the clone has the same position as the source
+ this._cursorWindowClone.add_constraint(constraint_x);
+ this._cursorWindowClone.add_constraint(constraint_y);
+ } else {
+ if (this._cursorWindowClone)
+ {
+ this._cursorWindowClone.destroy();
+ this._cursorWindowClone = null;
+ }
+ }
+ },
+
+ _onPositionChanged: function(obj, x, y) {
+ let pickedActor = global.stage.get_actor_at_pos(Clutter.PickMode.ALL, x, y);
+
+ // Make sure that the cursor window is on top
+ if (this._cursorWindowClone)
+ this._cursorWindowClone.raise_top();
+
+ let dragEvent = {
+ x: x,
+ y: y,
+ dragActor: this._cursorWindowClone ? this._cursorWindowClone : this._dummy,
+ source: this,
+ targetActor: pickedActor
+ };
+
+ for (let i = 0; i < DND.dragMonitors.length; i++) {
+ let motionFunc = DND.dragMonitors[i].dragMotion;
+ if (motionFunc) {
+ let result = motionFunc(dragEvent);
+ if (result != DND.DragMotionResult.CONTINUE)
+ return;
+ }
+ }
+
+ while (pickedActor) {
+ if (pickedActor._delegate && pickedActor._delegate.handleDragOver) {
+ let result = pickedActor._delegate.handleDragOver(this,
+ dragEvent.dragActor,
+ x,
+ y,
+ global.get_current_time());
+ if (result != DND.DragMotionResult.CONTINUE)
+ return;
+ }
+ pickedActor = pickedActor.get_parent();
+ }
+ }
+}
+
+Signals.addSignalMethods(XdndHandler.prototype);
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 800e7d3c6..4dfe2cab4 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -1,13 +1,14 @@
data/gnome-shell.desktop.in.in
-data/gnome-shell-clock-preferences.desktop.in.in
data/org.gnome.shell.gschema.xml.in
data/org.gnome.accessibility.magnifier.gschema.xml.in
-[type: gettext/glade]data/clock-preferences.ui
+js/misc/util.js
js/ui/appDisplay.js
js/ui/appFavorites.js
js/ui/dash.js
js/ui/docDisplay.js
+js/ui/endSessionDialog.js
js/ui/lookingGlass.js
+js/ui/messageTray.js
js/ui/overview.js
js/ui/panel.js
js/ui/placeDisplay.js
@@ -15,6 +16,8 @@ js/ui/popupMenu.js
js/ui/runDialog.js
js/ui/statusMenu.js
js/ui/status/accessibility.js
+js/ui/status/bluetooth.js
+js/ui/status/keyboard.js
js/ui/status/power.js
js/ui/status/volume.js
js/ui/telepathyClient.js
diff --git a/po/ar.po b/po/ar.po
index f981ba16f..444942326 100644
--- a/po/ar.po
+++ b/po/ar.po
@@ -1,13 +1,13 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
-# Khaled Hosny , 2009, 2010.
+# Khaled Hosny , 2009, 2010, 2011.
msgid ""
msgstr ""
"Project-Id-Version: HEAD\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-30 13:30+0200\n"
-"PO-Revision-Date: 2010-10-30 13:30+0300\n"
+"POT-Creation-Date: 2011-01-12 11:29+0200\n"
+"PO-Revision-Date: 2011-01-12 11:29+0300\n"
"Last-Translator: Khaled Hosny \n"
"Language-Team: Arabic \n"
"MIME-Version: 1.0\n"
@@ -26,14 +26,6 @@ msgstr "صدفة جنوم"
msgid "Window management and application launching"
msgstr "إدارة النوافذ وإطلاق التطبيقات"
-#: ../data/gnome-shell-clock-preferences.desktop.in.in.h:1
-msgid "Clock"
-msgstr "الساعة"
-
-#: ../data/gnome-shell-clock-preferences.desktop.in.in.h:2
-msgid "Customize the panel clock"
-msgstr "طوّع ساعة اللوحة"
-
#: ../data/org.gnome.shell.gschema.xml.in.h:1
msgid ""
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
@@ -41,60 +33,44 @@ msgid ""
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.h:2
-msgid "Custom format of the clock"
-msgstr ""
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:3
msgid "Enable internal tools useful for developers and testers from Alt-F2"
msgstr ""
-#: ../data/org.gnome.shell.gschema.xml.in.h:4
+#: ../data/org.gnome.shell.gschema.xml.in.h:3
msgid "File extension used for storing the screencast"
msgstr ""
-#: ../data/org.gnome.shell.gschema.xml.in.h:5
+#: ../data/org.gnome.shell.gschema.xml.in.h:4
msgid "Framerate used for recording screencasts."
msgstr ""
-#: ../data/org.gnome.shell.gschema.xml.in.h:6
+#: ../data/org.gnome.shell.gschema.xml.in.h:5
msgid ""
"GNOME Shell extensions have a uuid property; this key lists extensions which "
"should not be loaded."
msgstr ""
-#: ../data/org.gnome.shell.gschema.xml.in.h:7
+#: ../data/org.gnome.shell.gschema.xml.in.h:6
msgid "History for command (Alt-F2) dialog"
msgstr ""
+#: ../data/org.gnome.shell.gschema.xml.in.h:7
+msgid "If true, display date in the clock, in addition to time."
+msgstr ""
+
#: ../data/org.gnome.shell.gschema.xml.in.h:8
-msgid "Hour format"
+msgid "If true, display seconds in time."
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.h:9
-msgid ""
-"If true and format is either \"12-hour\" or \"24-hour\", display date in the "
-"clock, in addition to time."
-msgstr ""
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:10
-msgid ""
-"If true and format is either \"12-hour\" or \"24-hour\", display seconds in "
-"time."
-msgstr ""
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:11
msgid "If true, display the ISO week date in the calendar."
msgstr ""
-#: ../data/org.gnome.shell.gschema.xml.in.h:12
+#: ../data/org.gnome.shell.gschema.xml.in.h:10
msgid "List of desktop file IDs for favorite applications"
msgstr ""
-#: ../data/org.gnome.shell.gschema.xml.in.h:13
-msgid "Overview workspace view mode"
-msgstr ""
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:14
+#: ../data/org.gnome.shell.gschema.xml.in.h:11
msgid ""
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
"used for gst-launch. The pipeline should have an unconnected sink pad where "
@@ -106,48 +82,42 @@ msgid ""
"'videorate ! theoraenc ! oggmux' and records to Ogg Theora."
msgstr ""
-#: ../data/org.gnome.shell.gschema.xml.in.h:15
+#: ../data/org.gnome.shell.gschema.xml.in.h:12
msgid "Show date in clock"
msgstr ""
-#: ../data/org.gnome.shell.gschema.xml.in.h:16
+#: ../data/org.gnome.shell.gschema.xml.in.h:13
msgid "Show the week date in the calendar"
msgstr ""
-#: ../data/org.gnome.shell.gschema.xml.in.h:17
+#: ../data/org.gnome.shell.gschema.xml.in.h:14
msgid "Show time with seconds"
msgstr ""
-#: ../data/org.gnome.shell.gschema.xml.in.h:18
+#: ../data/org.gnome.shell.gschema.xml.in.h:15
msgid ""
"The applications corresponding to these identifiers will be displayed in the "
"favorites area."
msgstr ""
-#: ../data/org.gnome.shell.gschema.xml.in.h:19
+#: ../data/org.gnome.shell.gschema.xml.in.h:16
msgid ""
"The filename for recorded screencasts will be a unique filename based on the "
"current date, and use this extension. It should be changed when recording to "
"a different container format."
msgstr ""
-#: ../data/org.gnome.shell.gschema.xml.in.h:20
+#: ../data/org.gnome.shell.gschema.xml.in.h:17
msgid ""
"The framerate of the resulting screencast recordered by GNOME Shell's "
"screencast recorder in frames-per-second."
msgstr ""
-#: ../data/org.gnome.shell.gschema.xml.in.h:21
+#: ../data/org.gnome.shell.gschema.xml.in.h:18
msgid "The gstreamer pipeline used to encode the screencast"
msgstr ""
-#: ../data/org.gnome.shell.gschema.xml.in.h:22
-msgid ""
-"The selected workspace view mode in the overview. Supported values are "
-"\"single\" and \"grid\"."
-msgstr ""
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:23
+#: ../data/org.gnome.shell.gschema.xml.in.h:19
msgid ""
"The shell normally monitors active applications in order to present the most "
"used ones (e.g. in launchers). While this data will be kept private, you may "
@@ -155,29 +125,11 @@ msgid ""
"remove already saved data."
msgstr ""
-#: ../data/org.gnome.shell.gschema.xml.in.h:24
-msgid ""
-"This key specifies the format used by the panel clock when the format key is "
-"set to \"custom\". You can use conversion specifiers understood by strftime"
-"() to obtain a specific format. See the strftime() manual for more "
-"information."
-msgstr ""
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:25
-msgid ""
-"This key specifies the hour format used by the panel clock. Possible values "
-"are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to \"unix\", "
-"the clock will display time in seconds since Epoch, i.e. 1970-01-01. If set "
-"to \"custom\", the clock will display time according to the format specified "
-"in the custom_format key. Note that if set to either \"unix\" or \"custom\", "
-"the show_date and show_seconds keys are ignored."
-msgstr ""
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:26
+#: ../data/org.gnome.shell.gschema.xml.in.h:20
msgid "Uuids of extensions to disable"
msgstr ""
-#: ../data/org.gnome.shell.gschema.xml.in.h:27
+#: ../data/org.gnome.shell.gschema.xml.in.h:21
msgid "Whether to collect stats about applications usage"
msgstr ""
@@ -306,90 +258,46 @@ msgstr ""
msgid "Width of the vertical and horizontal lines that make up the crosshairs."
msgstr ""
-#: ../data/clock-preferences.ui.h:1
-msgid "Clock Format"
-msgstr "تنسيق الساعة"
+#. Translators: Filter to display all applications
+#: ../js/ui/appDisplay.js:155
+msgid "All"
+msgstr "الكل"
-#: ../data/clock-preferences.ui.h:2
-msgid "Clock Preferences"
-msgstr "تفضيلات الساعة"
-
-#: ../data/clock-preferences.ui.h:3
-msgid "Panel Display"
-msgstr "عرض اللوحة"
-
-#: ../data/clock-preferences.ui.h:4
-msgid "Show seco_nds"
-msgstr "أظهر ال_ثواني"
-
-#: ../data/clock-preferences.ui.h:5
-msgid "Show the _date"
-msgstr "أظهر ال_تاريخ"
-
-#: ../data/clock-preferences.ui.h:6
-msgid "_12 hour format"
-msgstr "نسق _12 ساعة"
-
-#: ../data/clock-preferences.ui.h:7
-msgid "_24 hour format"
-msgstr "نسق _24 ساعة"
-
-#. **** Applications ****
-#: ../js/ui/appDisplay.js:316 ../js/ui/dash.js:778
+#: ../js/ui/appDisplay.js:236
msgid "APPLICATIONS"
msgstr "التطبيقات"
-#: ../js/ui/appDisplay.js:348
+#: ../js/ui/appDisplay.js:266
msgid "PREFERENCES"
msgstr "التفضيلات"
-#: ../js/ui/appDisplay.js:647
+#: ../js/ui/appDisplay.js:563
msgid "New Window"
msgstr "نافذة جديدة"
-#: ../js/ui/appDisplay.js:651
+#: ../js/ui/appDisplay.js:567
msgid "Remove from Favorites"
msgstr "أزِل من المفضّلة"
-#: ../js/ui/appDisplay.js:652
+#: ../js/ui/appDisplay.js:568
msgid "Add to Favorites"
msgstr "أضِف إلى المفضّلة"
-#: ../js/ui/appDisplay.js:829
-msgid "Drag here to add favorites"
-msgstr "اسحب إلى هنا ليضاف إلى المفضّلة"
-
-#: ../js/ui/appFavorites.js:88
+#: ../js/ui/appFavorites.js:91
#, c-format
msgid "%s has been added to your favorites."
msgstr "أضيف %s إلى مفضلتك."
-#: ../js/ui/appFavorites.js:107
+#: ../js/ui/appFavorites.js:122
#, c-format
msgid "%s has been removed from your favorites."
msgstr "أزيل %s من مفضّلتك."
-#: ../js/ui/dash.js:142
-msgid "Find"
-msgstr "ابحث"
+#: ../js/ui/dash.js:27
+msgid "Remove"
+msgstr "أزِل"
-#: ../js/ui/dash.js:473
-msgid "Searching..."
-msgstr "يبحث..."
-
-#: ../js/ui/dash.js:487
-msgid "No matching results."
-msgstr "لا نتائج مطابقة."
-
-#. **** Places ****
-#. Translators: This is in the sense of locations for documents,
-#. network locations, etc.
-#: ../js/ui/dash.js:797 ../js/ui/placeDisplay.js:554
-msgid "PLACES & DEVICES"
-msgstr "الأماكن والأجهزة"
-
-#. **** Documents ****
-#: ../js/ui/dash.js:804 ../js/ui/docDisplay.js:494
+#: ../js/ui/docDisplay.js:494
msgid "RECENT ITEMS"
msgstr "العناصر الحديثة"
@@ -423,63 +331,67 @@ msgstr "اعرض المصدر"
msgid "Web Page"
msgstr "صفحة الوب"
-#: ../js/ui/overview.js:160
+#: ../js/ui/overview.js:101
msgid "Undo"
msgstr "تراجع"
+#: ../js/ui/overview.js:166
+msgid "Windows"
+msgstr "النوافذ"
+
+#: ../js/ui/overview.js:169
+msgid "Applications"
+msgstr "التطبيقات"
+
#. TODO - _quit() doesn't really work on apps in state STARTING yet
-#: ../js/ui/panel.js:469
+#: ../js/ui/panel.js:478
#, c-format
msgid "Quit %s"
msgstr "أغلق %s"
-#: ../js/ui/panel.js:494
-msgid "Preferences"
-msgstr "التفضيلات"
-
#. Translators: This is the time format with date used
#. in 24-hour mode.
-#: ../js/ui/panel.js:580
+#: ../js/ui/panel.js:563
msgid "%a %b %e, %R:%S"
msgstr "%A %e %B، %R:%S"
-#: ../js/ui/panel.js:581
+#: ../js/ui/panel.js:564
msgid "%a %b %e, %R"
msgstr "%A %e %B، %R"
#. Translators: This is the time format without date used
#. in 24-hour mode.
-#: ../js/ui/panel.js:585
+#: ../js/ui/panel.js:568
msgid "%a %R:%S"
msgstr "%A %R:%S"
-#: ../js/ui/panel.js:586
+#: ../js/ui/panel.js:569
msgid "%a %R"
msgstr "%A %R"
#. Translators: This is a time format with date used
#. for AM/PM.
-#: ../js/ui/panel.js:593
+#: ../js/ui/panel.js:576
msgid "%a %b %e, %l:%M:%S %p"
msgstr "%A %e %B، %l:%M:%S %p"
-#: ../js/ui/panel.js:594
+#: ../js/ui/panel.js:577
msgid "%a %b %e, %l:%M %p"
msgstr "%A %e %B، %l:%M %p"
#. Translators: This is a time format without date used
#. for AM/PM.
-#: ../js/ui/panel.js:598
+#: ../js/ui/panel.js:581
msgid "%a %l:%M:%S %p"
msgstr "%A %l:%M:%S %p"
-#: ../js/ui/panel.js:599
+#: ../js/ui/panel.js:582
msgid "%a %l:%M %p"
msgstr "%A %Ol:%OM %p"
#. Button on the left side of the panel.
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
-#: ../js/ui/panel.js:744
+#: ../js/ui/panel.js:727
msgid "Activities"
msgstr "الأنشطة"
@@ -496,6 +408,10 @@ msgstr "أعد المحاولة"
msgid "Connect to..."
msgstr "اتّصل ب..."
+#: ../js/ui/placeDisplay.js:558
+msgid "PLACES & DEVICES"
+msgstr "الأماكن والأجهزة"
+
#. Translators: this MUST be either "toggle-switch-us"
#. (for toggle switches containing the English words
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
@@ -503,13 +419,13 @@ msgstr "اتّصل ب..."
#. simply result in invisible toggle switches.
#: ../js/ui/popupMenu.js:33
msgid "toggle-switch-us"
-msgstr ""
+msgstr "toggle-switch-intl"
-#: ../js/ui/runDialog.js:233
+#: ../js/ui/runDialog.js:238
msgid "Please enter a command:"
msgstr "من فضلك اكتب أمرا:"
-#: ../js/ui/runDialog.js:378
+#: ../js/ui/runDialog.js:383
#, c-format
msgid "Execution of '%s' failed:"
msgstr "فشل تنفيذ '%s':"
@@ -522,42 +438,38 @@ msgstr "متاح"
msgid "Busy"
msgstr "مشغول"
-#: ../js/ui/statusMenu.js:111
-msgid "Invisible"
-msgstr "خفي"
+#: ../js/ui/statusMenu.js:114
+msgid "My Account"
+msgstr "حسابي"
-#: ../js/ui/statusMenu.js:119
-msgid "My Account..."
-msgstr "حسابي..."
+#: ../js/ui/statusMenu.js:118
+msgid "System Settings"
+msgstr "إعدادات النظام"
-#: ../js/ui/statusMenu.js:123
-msgid "System Preferences..."
-msgstr "تفضيلات النظام..."
-
-#: ../js/ui/statusMenu.js:130
+#: ../js/ui/statusMenu.js:125
msgid "Lock Screen"
msgstr "أوصد الشاشة"
-#: ../js/ui/statusMenu.js:134
+#: ../js/ui/statusMenu.js:129
msgid "Switch User"
msgstr "بدّل المستخدم"
-#: ../js/ui/statusMenu.js:139
+#: ../js/ui/statusMenu.js:134
msgid "Log Out..."
msgstr "اخرج..."
-#: ../js/ui/statusMenu.js:146
-msgid "Suspend"
-msgstr "علّق"
+#: ../js/ui/statusMenu.js:141
+msgid "Suspend..."
+msgstr "علّق..."
-#: ../js/ui/statusMenu.js:150
-msgid "Restart..."
-msgstr "أعد التشغيل..."
-
-#: ../js/ui/statusMenu.js:154
+#: ../js/ui/statusMenu.js:145
msgid "Shut Down..."
msgstr "أطفئ..."
+#: ../js/ui/status/accessibility.js:82
+msgid "Zoom"
+msgstr "تقريب"
+
#: ../js/ui/status/accessibility.js:88
msgid "Screen Reader"
msgstr "قارئ الشاشة"
@@ -594,13 +506,269 @@ msgstr "إعدادات الإتاحة"
msgid "High Contrast"
msgstr "تباين عال"
-#: ../js/ui/status/accessibility.js:202
+#: ../js/ui/status/accessibility.js:205
msgid "Large Text"
msgstr "نص كبير"
-#: ../js/ui/status/accessibility.js:223
-msgid "Zoom"
-msgstr "تقريب"
+#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:240
+msgid "Bluetooth"
+msgstr "بلوتوث"
+
+#: ../js/ui/status/bluetooth.js:55
+msgid "Visibility"
+msgstr "الرؤية"
+
+#: ../js/ui/status/bluetooth.js:69
+msgid "Send Files to Device..."
+msgstr "أرسِل ملفات للجهاز..."
+
+#: ../js/ui/status/bluetooth.js:70
+msgid "Setup a New Device..."
+msgstr "اضبط جهازا جديدا..."
+
+#: ../js/ui/status/bluetooth.js:94
+msgid "Bluetooth Settings"
+msgstr "إعدادات بلوتوث"
+
+#: ../js/ui/status/bluetooth.js:191
+msgid "Connection"
+msgstr "الاتصال"
+
+#: ../js/ui/status/bluetooth.js:227
+msgid "Send Files..."
+msgstr "أرسل ملفات..."
+
+#: ../js/ui/status/bluetooth.js:232
+msgid "Browse Files..."
+msgstr "تصفح الملفات..."
+
+#: ../js/ui/status/bluetooth.js:241
+msgid "Error browsing device"
+msgstr "عطل أثناء تصفّح الجهاز"
+
+#: ../js/ui/status/bluetooth.js:242
+#, c-format
+msgid "The requested device cannot be browsed, error is '%s'"
+msgstr "تعذّر تصفح الجهاز، رسالة العطل '%s'"
+
+#: ../js/ui/status/bluetooth.js:250
+msgid "Keyboard Settings"
+msgstr "إعدادات لوحة المفاتيح"
+
+#: ../js/ui/status/bluetooth.js:255
+msgid "Mouse Settings"
+msgstr "إعدادات الفأرة"
+
+#: ../js/ui/status/bluetooth.js:262 ../js/ui/status/volume.js:62
+msgid "Sound Settings"
+msgstr "إعدادات الصوت"
+
+#: ../js/ui/status/bluetooth.js:336 ../js/ui/status/bluetooth.js:370
+#: ../js/ui/status/bluetooth.js:410 ../js/ui/status/bluetooth.js:443
+msgid "Bluetooth Agent"
+msgstr "عميل بلوتوث"
+
+#: ../js/ui/status/bluetooth.js:371
+#, c-format
+msgid "Authorization request from %s"
+msgstr "طلب تخويل من %s"
+
+#: ../js/ui/status/bluetooth.js:377
+#, c-format
+msgid "Device %s wants access to the service '%s'"
+msgstr "يريد الجهاز %s صلاحية الوصول للخدمة '%s'"
+
+#: ../js/ui/status/bluetooth.js:379
+msgid "Always grant access"
+msgstr "امنح الصلاحية دائما"
+
+#: ../js/ui/status/bluetooth.js:380
+msgid "Grant this time only"
+msgstr "امنح هذه المرة فقط"
+
+#: ../js/ui/status/bluetooth.js:381
+msgid "Reject"
+msgstr "أخرج"
+
+#: ../js/ui/status/bluetooth.js:411
+#, c-format
+msgid "Pairing confirmation for %s"
+msgstr "تأكيد مزاوجة %s"
+
+#: ../js/ui/status/bluetooth.js:417 ../js/ui/status/bluetooth.js:451
+#, c-format
+msgid "Device %s wants to pair with this computer"
+msgstr "يريد الجهاز %s المزاوجة مع هذا الحاسوب"
+
+#: ../js/ui/status/bluetooth.js:418
+#, c-format
+msgid "Please confirm whether the PIN '%s' matches the one on the device."
+msgstr "من فضلك أكد تطابق الرقم '%s' مع الموجود على الجهاز."
+
+#: ../js/ui/status/bluetooth.js:420
+msgid "Matches"
+msgstr "مطابقات"
+
+#: ../js/ui/status/bluetooth.js:421
+msgid "Does not match"
+msgstr "لا تتطابق"
+
+#: ../js/ui/status/bluetooth.js:444
+#, c-format
+msgid "Pairing request for %s"
+msgstr "طلب مزاوجة من %s"
+
+#: ../js/ui/status/bluetooth.js:452
+msgid "Please enter the PIN mentioned on the device."
+msgstr "من فضلك أدخل الرقم المذكور على الجهاز."
+
+#: ../js/ui/status/bluetooth.js:468
+msgid "OK"
+msgstr "حسنا"
+
+#: ../js/ui/status/bluetooth.js:469
+msgid "Cancel"
+msgstr "ألغِ"
+
+#: ../js/ui/status/power.js:85
+msgid "Power Settings"
+msgstr "إعدادات الطاقة"
+
+#: ../js/ui/status/power.js:112
+#, c-format
+msgid "%d hour remaining"
+msgid_plural "%d hours remaining"
+msgstr[0] "بقي أقل من ساعة"
+msgstr[1] "بقي ساعة"
+msgstr[2] "بقي ساعتين"
+msgstr[3] "بقي %d ساعات"
+msgstr[4] "بقي %d ساعة"
+msgstr[5] "بقي %d ساعة"
+
+#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
+#: ../js/ui/status/power.js:115
+#, c-format
+msgid "%d %s %d %s remaining"
+msgstr "بقي %d %s و %d %s"
+
+#: ../js/ui/status/power.js:117
+msgid "hour"
+msgid_plural "hours"
+msgstr[0] "أقل من ساعة"
+msgstr[1] "ساعة"
+msgstr[2] "ساعتين"
+msgstr[3] "ساعات"
+msgstr[4] "ساعة"
+msgstr[5] "ساعة"
+
+#: ../js/ui/status/power.js:117
+msgid "minute"
+msgid_plural "minutes"
+msgstr[0] "أقل من دقيقة"
+msgstr[1] "دقيقة"
+msgstr[2] "دقيقتين"
+msgstr[3] "دقائق"
+msgstr[4] "دقيقة"
+msgstr[5] "دقيقة"
+
+#: ../js/ui/status/power.js:120
+#, c-format
+msgid "%d minute remaining"
+msgid_plural "%d minutes remaining"
+msgstr[0] "بقي أقل من دقيقة"
+msgstr[1] "بقي دقيقة"
+msgstr[2] "بقي دقيقتين"
+msgstr[3] "بقي %d دقائق"
+msgstr[4] "بقي %d دقيقة"
+msgstr[5] "بقي %d دقيقة"
+
+#: ../js/ui/status/power.js:237
+msgid "AC adapter"
+msgstr "مقبس طاقة"
+
+#: ../js/ui/status/power.js:239
+msgid "Laptop battery"
+msgstr "بطارية حاسوب محمول"
+
+#: ../js/ui/status/power.js:241
+msgid "UPS"
+msgstr "مزود طاقة لا منقطعة"
+
+#: ../js/ui/status/power.js:243
+msgid "Monitor"
+msgstr "شاشة"
+
+#: ../js/ui/status/power.js:245
+msgid "Mouse"
+msgstr "فأرة"
+
+#: ../js/ui/status/power.js:247
+msgid "Keyboard"
+msgstr "لوحة المفاتيح"
+
+#: ../js/ui/status/power.js:249
+msgid "PDA"
+msgstr "مساعد رقمي"
+
+#: ../js/ui/status/power.js:251
+msgid "Cell phone"
+msgstr "هاتف محمول"
+
+#: ../js/ui/status/power.js:253
+msgid "Media player"
+msgstr "مشغل وسائط"
+
+#: ../js/ui/status/power.js:255
+msgid "Tablet"
+msgstr "لوحة"
+
+#: ../js/ui/status/power.js:257
+msgid "Computer"
+msgstr "حاسوب"
+
+#: ../js/ui/status/power.js:259 ../src/shell-app-system.c:1012
+msgid "Unknown"
+msgstr "مجهول"
+
+#: ../js/ui/status/volume.js:41
+msgid "Volume"
+msgstr "جزء"
+
+#: ../js/ui/status/volume.js:54
+msgid "Microphone"
+msgstr "ميكروفون"
+
+#: ../js/ui/telepathyClient.js:561
+#, c-format
+msgid "%s is online."
+msgstr "%s متّصل."
+
+#: ../js/ui/telepathyClient.js:566
+#, c-format
+msgid "%s is offline."
+msgstr "%s غير متّصل."
+
+#: ../js/ui/telepathyClient.js:569
+#, c-format
+msgid "%s is away."
+msgstr "%s غائب."
+
+#: ../js/ui/telepathyClient.js:572
+#, c-format
+msgid "%s is busy."
+msgstr "%s مشغول."
+
+#. Translators: this is a time format string followed by a date.
+#. If applicable, replace %X with a strftime format valid for your
+#. locale, without seconds.
+#: ../js/ui/telepathyClient.js:666
+#, no-c-format
+msgid "Sent at %X on %A"
+msgstr "أُرسلت الساعة %l:%M:%S في %A"
+
+#: ../js/ui/viewSelector.js:26
+msgid "Search your computer"
+msgstr "ابحث في حاسوبك"
#: ../js/ui/windowAttentionHandler.js:43
#, c-format
@@ -612,12 +780,12 @@ msgstr "انتهى %s من البدء"
msgid "'%s' is ready"
msgstr "'%s' جاهز"
-#: ../js/ui/workspacesView.js:229
+#: ../js/ui/workspacesView.js:244
msgid ""
"Can't add a new workspace because maximum workspaces limit has been reached."
msgstr "تعذّر إضافة مساحة عمل جديدة، لتجاوز أقصى عدد من مساحات العمل."
-#: ../js/ui/workspacesView.js:246
+#: ../js/ui/workspacesView.js:260
msgid "Can't remove the first workspace."
msgstr "لا يمكن حذف مساحة العمل الأولى."
@@ -651,11 +819,11 @@ msgstr[5] "%u مدخل"
msgid "System Sounds"
msgstr "أصوات النظام"
-#: ../src/shell-global.c:1219
+#: ../src/shell-global.c:1233
msgid "Less than a minute ago"
msgstr "منذ أقل من دقيقة"
-#: ../src/shell-global.c:1223
+#: ../src/shell-global.c:1237
#, c-format
msgid "%d minute ago"
msgid_plural "%d minutes ago"
@@ -666,7 +834,7 @@ msgstr[3] "منذ %d دقائق"
msgstr[4] "منذ %d دقيقة"
msgstr[5] "منذ %d دقيقة"
-#: ../src/shell-global.c:1228
+#: ../src/shell-global.c:1242
#, c-format
msgid "%d hour ago"
msgid_plural "%d hours ago"
@@ -677,7 +845,7 @@ msgstr[3] "منذ %d ساعات"
msgstr[4] "منذ %d ساعة"
msgstr[5] "منذ %d ساعة"
-#: ../src/shell-global.c:1233
+#: ../src/shell-global.c:1247
#, c-format
msgid "%d day ago"
msgid_plural "%d days ago"
@@ -688,7 +856,7 @@ msgstr[3] "منذ %d أيام"
msgstr[4] "منذ %d يوما"
msgstr[5] "منذ %d يوم"
-#: ../src/shell-global.c:1238
+#: ../src/shell-global.c:1252
#, c-format
msgid "%d week ago"
msgid_plural "%d weeks ago"
@@ -699,17 +867,17 @@ msgstr[3] "منذ %d أسابيع"
msgstr[4] "منذ %d أسبوعا"
msgstr[5] "منذ %d أسبوع"
-#: ../src/shell-uri-util.c:89
+#: ../src/shell-util.c:89
msgid "Home Folder"
msgstr "مجلد المنزل"
#. Translators: this is the same string as the one found in
#. * nautilus
-#: ../src/shell-uri-util.c:104
+#: ../src/shell-util.c:104
msgid "File System"
msgstr "نظام الملفات"
-#: ../src/shell-uri-util.c:250
+#: ../src/shell-util.c:250
msgid "Search"
msgstr "ابحث"
@@ -718,20 +886,68 @@ msgstr "ابحث"
#. * example, "Trash: some-directory". It means that the
#. * directory called "some-directory" is in the trash.
#.
-#: ../src/shell-uri-util.c:300
+#: ../src/shell-util.c:300
#, c-format
msgid "%1$s: %2$s"
msgstr "%1$s: %2$s"
+#~ msgid "Clock"
+#~ msgstr "الساعة"
+
+#~ msgid "Customize the panel clock"
+#~ msgstr "طوّع ساعة اللوحة"
+
+#~ msgid "Clock Format"
+#~ msgstr "تنسيق الساعة"
+
+#~ msgid "Clock Preferences"
+#~ msgstr "تفضيلات الساعة"
+
+#~ msgid "Panel Display"
+#~ msgstr "عرض اللوحة"
+
+#~ msgid "Show seco_nds"
+#~ msgstr "أظهر ال_ثواني"
+
+#~ msgid "Show the _date"
+#~ msgstr "أظهر ال_تاريخ"
+
+#~ msgid "_12 hour format"
+#~ msgstr "نسق _12 ساعة"
+
+#~ msgid "_24 hour format"
+#~ msgstr "نسق _24 ساعة"
+
+#~ msgid "Drag here to add favorites"
+#~ msgstr "اسحب إلى هنا ليضاف إلى المفضّلة"
+
+#~ msgid "Find"
+#~ msgstr "ابحث"
+
+#~ msgid "Searching..."
+#~ msgstr "يبحث..."
+
+#~ msgid "No matching results."
+#~ msgstr "لا نتائج مطابقة."
+
+#~ msgid "Preferences"
+#~ msgstr "التفضيلات"
+
+#~ msgid "Invisible"
+#~ msgstr "خفي"
+
+#~ msgid "System Preferences..."
+#~ msgstr "تفضيلات النظام..."
+
+#~ msgid "Restart..."
+#~ msgstr "أعد التشغيل..."
+
#~ msgid "Account Information..."
#~ msgstr "معلومات الحساب..."
#~ msgid "%H:%M"
#~ msgstr "%OH:%OM"
-#~ msgid "Applications"
-#~ msgstr "التطبيقات"
-
#~ msgid "Recent Documents"
#~ msgstr "المستندات الحديثة"
@@ -750,9 +966,6 @@ msgstr "%1$s: %2$s"
#~ msgid "SEARCH RESULTS"
#~ msgstr "نتائج البحث"
-#~ msgid "Unknown"
-#~ msgstr "مجهول"
-
#~ msgid "Can't lock screen: %s"
#~ msgstr "تعذّر إيصاد الشاشة: %s"
diff --git a/po/de.po b/po/de.po
index 60b217616..7fd70fe6c 100644
--- a/po/de.po
+++ b/po/de.po
@@ -6,19 +6,21 @@
#
# Hendrik Brandt , 2009.
# Hendrik Richter , 2009.
-# Mario Blättermann , 2009, 2010.
+# Mario Blättermann , 2009, 2010, 2011.
# Mario Klug , 2010.
-# Christian Kirbach , 2009, 2010.
+# Jakob Kramer , 2010.
+# Paul Seyfert , 2010.
+# Christian Kirbach , 2009, 2010, 2011.
#
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell master\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
-"shell&component=general\n"
-"POT-Creation-Date: 2010-10-10 03:14+0000\n"
-"PO-Revision-Date: 2010-10-10 20:23+0200\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2011-01-01 23:21+0100\n"
+"PO-Revision-Date: 2011-01-01 16:25+0100\n"
"Last-Translator: Christian Kirbach \n"
"Language-Team: Deutsch \n"
+"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -105,12 +107,8 @@ msgstr ""
msgid "List of desktop file IDs for favorite applications"
msgstr "Liste der Kennungen der Desktop-Dateien für bevorzugte Anwendungen"
-#: ../data/org.gnome.shell.gschema.xml.in.h:13
-msgid "Overview workspace view mode"
-msgstr "Modus des Arbeitsflächen-Überblicks"
-
# Hier blicke ich überhaupt nicht durch.
-#: ../data/org.gnome.shell.gschema.xml.in.h:14
+#: ../data/org.gnome.shell.gschema.xml.in.h:13
msgid ""
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
"used for gst-launch. The pipeline should have an unconnected sink pad where "
@@ -130,22 +128,22 @@ msgstr ""
"Das kann zum Senden der Ausgabe über shout2send an einen Icecast-Server oder "
"Ähnliches verwendet werden. Falls nicht (oder auf einen leeren Wert) "
"gesetzt, so wird die vorgegebene Weiterleitung verwendet, welche derzeit "
-"»videorate ! theoraenc ! oggmux« lautet und die Aufnahme im Ogg-Theora-Format "
-"speichert."
+"»videorate ! theoraenc ! oggmux« lautet und die Aufnahme im Ogg-Theora-"
+"Format speichert."
-#: ../data/org.gnome.shell.gschema.xml.in.h:15
+#: ../data/org.gnome.shell.gschema.xml.in.h:14
msgid "Show date in clock"
msgstr "Datum in der Uhr anzeigen"
-#: ../data/org.gnome.shell.gschema.xml.in.h:16
+#: ../data/org.gnome.shell.gschema.xml.in.h:15
msgid "Show the week date in the calendar"
msgstr "Wochentag im Kalender anzeigen"
-#: ../data/org.gnome.shell.gschema.xml.in.h:17
+#: ../data/org.gnome.shell.gschema.xml.in.h:16
msgid "Show time with seconds"
msgstr "Zeit sekundengenau anzeigen"
-#: ../data/org.gnome.shell.gschema.xml.in.h:18
+#: ../data/org.gnome.shell.gschema.xml.in.h:17
msgid ""
"The applications corresponding to these identifiers will be displayed in the "
"favorites area."
@@ -153,7 +151,7 @@ msgstr ""
"Programme, welche auf diese Bezeichner zutreffen, werden im Favoriten-"
"Bereich angezeigt."
-#: ../data/org.gnome.shell.gschema.xml.in.h:19
+#: ../data/org.gnome.shell.gschema.xml.in.h:18
msgid ""
"The filename for recorded screencasts will be a unique filename based on the "
"current date, and use this extension. It should be changed when recording to "
@@ -164,7 +162,7 @@ msgstr ""
"Dateiname sollte geändert werden, wenn Sie in einem anderen Containerformat "
"aufnehmen."
-#: ../data/org.gnome.shell.gschema.xml.in.h:20
+#: ../data/org.gnome.shell.gschema.xml.in.h:19
msgid ""
"The framerate of the resulting screencast recordered by GNOME Shell's "
"screencast recorder in frames-per-second."
@@ -173,19 +171,11 @@ msgstr ""
"der GNOME-Shell aufgezeichnet werden soll, in Einzelbildern pro Sekunde."
# hmm Enkodieren oder Kodieren?
-#: ../data/org.gnome.shell.gschema.xml.in.h:21
+#: ../data/org.gnome.shell.gschema.xml.in.h:20
msgid "The gstreamer pipeline used to encode the screencast"
msgstr "Die GStreamer-Weiterleitung zur Enkodierung des Screencasts"
-#: ../data/org.gnome.shell.gschema.xml.in.h:22
-msgid ""
-"The selected workspace view mode in the overview. Supported values are "
-"\"single\" and \"grid\"."
-msgstr ""
-"Die gewählte Ansicht des Arbeitsflächen-Überblicks. Mögliche Werte sind "
-"»single« (einfach) und »grid« (Raster)."
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:23
+#: ../data/org.gnome.shell.gschema.xml.in.h:21
msgid ""
"The shell normally monitors active applications in order to present the most "
"used ones (e.g. in launchers). While this data will be kept private, you may "
@@ -198,7 +188,7 @@ msgstr ""
"deaktivieren, um Ihre Privatsphäre zu schützen. Bitte beachten Sie, dass "
"bereits gespeicherte Daten hiervon nicht beeinflusst werden."
-#: ../data/org.gnome.shell.gschema.xml.in.h:24
+#: ../data/org.gnome.shell.gschema.xml.in.h:22
msgid ""
"This key specifies the format used by the panel clock when the format key is "
"set to \"custom\". You can use conversion specifiers understood by strftime"
@@ -211,7 +201,7 @@ msgstr ""
"Format zu erhalten. Weitere Informationen finden Sie in der Handbuchseite zu "
"strftime()."
-#: ../data/org.gnome.shell.gschema.xml.in.h:25
+#: ../data/org.gnome.shell.gschema.xml.in.h:23
msgid ""
"This key specifies the hour format used by the panel clock. Possible values "
"are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to \"unix\", "
@@ -221,18 +211,18 @@ msgid ""
"the show_date and show_seconds keys are ignored."
msgstr ""
"Dieser Schlüssel legt das Stundenformat für die Anzeige der Panel-Uhr fest. "
-"Mögliche Werte sind »12-hour«, »24-hour«, »unix« und »custom«. Wenn Sie »unix« "
-"verwenden, zeigt die Uhr die Sekunden seit Epoch, dem Beginn der Unix-"
+"Mögliche Werte sind »12-hour«, »24-hour«, »unix« und »custom«. Wenn Sie "
+"»unix« verwenden, zeigt die Uhr die Sekunden seit Epoch, dem Beginn der Unix-"
"Zeitrechnung am 1. Januar 1970 an. Wenn Sie »custom« (benutzerdefiniert) "
"verwenden, zeigt die Uhr die Zeit gemäß dem im Schlüssel »custom_format« "
"angegebenen Format an. Beachten Sie, dass bei »unix« oder »custom« die "
"Schlüssel »show_date« und »show_seconds« ignoriert werden."
-#: ../data/org.gnome.shell.gschema.xml.in.h:26
+#: ../data/org.gnome.shell.gschema.xml.in.h:24
msgid "Uuids of extensions to disable"
msgstr "UUIDs der zu deaktivierenden Erweiterungen"
-#: ../data/org.gnome.shell.gschema.xml.in.h:27
+#: ../data/org.gnome.shell.gschema.xml.in.h:25
msgid "Whether to collect stats about applications usage"
msgstr "Legt fest, ob der Status der Anwendungsnutzung erfasst werden soll"
@@ -266,14 +256,14 @@ msgid ""
msgstr ""
"Legt die Position des vergrößerten Bildes der Maus innerhalb der "
"vergrößerten Ansicht fest, und wie die Maus auf die Mausbewegungen des "
-"Systems reagiert. Folgende Werte sind möglich: »none« - keine Mausverfolgung; "
-"»centered« - das Mausbild wird in der Mitte des vergrößerten Bereiches "
-"dargestellt (welche auch den Zeiger der Systemmaus darstellt), wobei der "
-"vergrößerte Inhalt gerollt wird, sobald die Systemmaus bewegt wird; "
-"»proportional« - die Position der vergrößerten Maus im vergrößerten Bereich "
-"ist proportional zur Position der Systemmaus auf dem Bildschirm; »push« - "
-"wenn die vergrößerte Maus einen der Ränder des vergrößerten Bereichs "
-"berührt, wird der entsprechende Inhalt in die Ansicht geschoben."
+"Systems reagiert. Folgende Werte sind möglich: »none« - keine "
+"Mausverfolgung; »centered« - das Mausbild wird in der Mitte des vergrößerten "
+"Bereiches dargestellt (welche auch den Zeiger der Systemmaus darstellt), "
+"wobei der vergrößerte Inhalt gerollt wird, sobald die Systemmaus bewegt "
+"wird; »proportional« - die Position der vergrößerten Maus im vergrößerten "
+"Bereich ist proportional zur Position der Systemmaus auf dem Bildschirm; "
+"»push« - wenn die vergrößerte Maus einen der Ränder des vergrößerten "
+"Bereichs berührt, wird der entsprechende Inhalt in die Ansicht geschoben."
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:5
msgid ""
@@ -422,62 +412,46 @@ msgstr "_12-Stunden-Format"
msgid "_24 hour format"
msgstr "_24-Stunden-Format"
-#. **** Applications ****
-#: ../js/ui/appDisplay.js:316 ../js/ui/dash.js:778
+#. Translators: Filter to display all applications
+#: ../js/ui/appDisplay.js:155
+msgid "All"
+msgstr "Alle"
+
+#: ../js/ui/appDisplay.js:236
msgid "APPLICATIONS"
msgstr "ANWENDUNGEN"
-#: ../js/ui/appDisplay.js:348
+#: ../js/ui/appDisplay.js:266
msgid "PREFERENCES"
msgstr "EINSTELLUNGEN"
-#: ../js/ui/appDisplay.js:648
+#: ../js/ui/appDisplay.js:563
msgid "New Window"
msgstr "Neues Fenster"
-#: ../js/ui/appDisplay.js:652
+#: ../js/ui/appDisplay.js:567
msgid "Remove from Favorites"
msgstr "Aus Favoriten entfernen"
-#: ../js/ui/appDisplay.js:653
+#: ../js/ui/appDisplay.js:568
msgid "Add to Favorites"
msgstr "Zu Favoriten hinzufügen"
-#: ../js/ui/appDisplay.js:830
-msgid "Drag here to add favorites"
-msgstr "Hier ablegen, um zu Favoriten hinzuzufügen"
-
-#: ../js/ui/appFavorites.js:88
+#: ../js/ui/appFavorites.js:91
#, c-format
msgid "%s has been added to your favorites."
msgstr "%s wurde zu Ihren Favoriten hinzugefügt"
-#: ../js/ui/appFavorites.js:107
+#: ../js/ui/appFavorites.js:122
#, c-format
msgid "%s has been removed from your favorites."
msgstr "%s wurde aus Ihren Favoriten entfernt"
-#: ../js/ui/dash.js:142
-msgid "Find"
-msgstr "Suchen"
+#: ../js/ui/dash.js:27
+msgid "Remove"
+msgstr "Entfernen"
-#: ../js/ui/dash.js:473
-msgid "Searching..."
-msgstr "Suche läuft …"
-
-#: ../js/ui/dash.js:487
-msgid "No matching results."
-msgstr "Keine passenden Ergebnisse."
-
-#. **** Places ****
-#. Translators: This is in the sense of locations for documents,
-#. network locations, etc.
-#: ../js/ui/dash.js:797 ../js/ui/placeDisplay.js:554
-msgid "PLACES & DEVICES"
-msgstr "ORTE UND GERÄTE"
-
-#. **** Documents ****
-#: ../js/ui/dash.js:804 ../js/ui/docDisplay.js:494
+#: ../js/ui/docDisplay.js:494
msgid "RECENT ITEMS"
msgstr "ZULETZT GEÖFFNETE DOKUMENTE"
@@ -489,7 +463,9 @@ msgstr "Keine Erweiterungen installiert"
msgid "Enabled"
msgstr "Aktiviert"
-#: ../js/ui/lookingGlass.js:591
+#. translators:
+#. * The device has been disabled
+#: ../js/ui/lookingGlass.js:591 ../src/gvc/gvc-mixer-control.c:1087
msgid "Disabled"
msgstr "Deaktiviert"
@@ -509,63 +485,71 @@ msgstr "Quelle zeigen"
msgid "Web Page"
msgstr "Webseite"
-#: ../js/ui/overview.js:160
+#: ../js/ui/overview.js:96
msgid "Undo"
msgstr "Rückgängig"
+#: ../js/ui/overview.js:158
+msgid "Windows"
+msgstr "Fenster"
+
+#: ../js/ui/overview.js:161
+msgid "Applications"
+msgstr "Anwendungen"
+
#. TODO - _quit() doesn't really work on apps in state STARTING yet
-#: ../js/ui/panel.js:468
+#: ../js/ui/panel.js:474
#, c-format
msgid "Quit %s"
msgstr "%s beenden"
-#: ../js/ui/panel.js:493
+#: ../js/ui/panel.js:499
msgid "Preferences"
msgstr "Einstellungen"
#. Translators: This is the time format with date used
#. in 24-hour mode.
-#: ../js/ui/panel.js:579
+#: ../js/ui/panel.js:585
msgid "%a %b %e, %R:%S"
msgstr "%a, %e. %b, %R:%S"
-#: ../js/ui/panel.js:580
+#: ../js/ui/panel.js:586
msgid "%a %b %e, %R"
msgstr "%a, %e. %b, %R"
#. Translators: This is the time format without date used
#. in 24-hour mode.
-#: ../js/ui/panel.js:584
+#: ../js/ui/panel.js:590
msgid "%a %R:%S"
msgstr "%a %R:%S"
-#: ../js/ui/panel.js:585
+#: ../js/ui/panel.js:591
msgid "%a %R"
msgstr "%a %R"
#. Translators: This is a time format with date used
#. for AM/PM.
-#: ../js/ui/panel.js:592
+#: ../js/ui/panel.js:598
msgid "%a %b %e, %l:%M:%S %p"
msgstr "%a, %e. %b, %H:%M:%S"
-#: ../js/ui/panel.js:593
+#: ../js/ui/panel.js:599
msgid "%a %b %e, %l:%M %p"
msgstr "%a, %e. %b, %H:%M"
#. Translators: This is a time format without date used
#. for AM/PM.
-#: ../js/ui/panel.js:597
+#: ../js/ui/panel.js:603
msgid "%a %l:%M:%S %p"
msgstr "%a %H:%M:%S"
-#: ../js/ui/panel.js:598
+#: ../js/ui/panel.js:604
msgid "%a %l:%M %p"
msgstr "%a %H:%M"
#. Button on the left side of the panel.
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
-#: ../js/ui/panel.js:743
+#: ../js/ui/panel.js:749
msgid "Activities"
msgstr "Aktivitäten"
@@ -582,6 +566,10 @@ msgstr "Erneut versuchen"
msgid "Connect to..."
msgstr "Verbinden mit …"
+#: ../js/ui/placeDisplay.js:558
+msgid "PLACES & DEVICES"
+msgstr "ORTE UND GERÄTE"
+
#. Translators: this MUST be either "toggle-switch-us"
#. (for toggle switches containing the English words
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
@@ -600,42 +588,332 @@ msgstr "Bitte geben Sie einen Befehl ein:"
msgid "Execution of '%s' failed:"
msgstr "Ausführung von »%s« ist gescheitert:"
-#: ../js/ui/statusMenu.js:91
+#: ../js/ui/statusMenu.js:101
msgid "Available"
msgstr "Verfügbar"
-#: ../js/ui/statusMenu.js:95
+#: ../js/ui/statusMenu.js:106
msgid "Busy"
msgstr "Beschäftigt"
-#: ../js/ui/statusMenu.js:99
-msgid "Invisible"
-msgstr "Unsichtbar"
+#: ../js/ui/statusMenu.js:114
+msgid "My Account"
+msgstr "Eigenes Konto"
-#: ../js/ui/statusMenu.js:106
-msgid "Account Information..."
-msgstr "Benutzerinformationen …"
+#: ../js/ui/statusMenu.js:118
+msgid "System Settings"
+msgstr "Systemeinstellungen"
-#: ../js/ui/statusMenu.js:110
-msgid "System Settings..."
-msgstr "Systemeinstellungen …"
-
-#: ../js/ui/statusMenu.js:117
+#: ../js/ui/statusMenu.js:125
msgid "Lock Screen"
msgstr "Bildschirm sperren"
-#: ../js/ui/statusMenu.js:121
+#: ../js/ui/statusMenu.js:129
msgid "Switch User"
msgstr "Benutzer wechseln"
-#: ../js/ui/statusMenu.js:126
+#: ../js/ui/statusMenu.js:134
msgid "Log Out..."
msgstr "Abmelden …"
-#: ../js/ui/statusMenu.js:130
+#: ../js/ui/statusMenu.js:141
+msgid "Suspend..."
+msgstr "Bereitschaft …"
+
+#: ../js/ui/statusMenu.js:145
msgid "Shut Down..."
msgstr "Ausschalten …"
+#: ../js/ui/status/accessibility.js:82
+msgid "Zoom"
+msgstr "Vergrößern"
+
+#: ../js/ui/status/accessibility.js:88
+msgid "Screen Reader"
+msgstr "Bildschirmleser"
+
+#: ../js/ui/status/accessibility.js:91
+msgid "Screen Keyboard"
+msgstr "Bildschirmtastatur"
+
+#: ../js/ui/status/accessibility.js:94
+msgid "Visual Alerts"
+msgstr "Visuelle Warnungen"
+
+#: ../js/ui/status/accessibility.js:97
+msgid "Sticky Keys"
+msgstr "Klebrige Tasten"
+
+#: ../js/ui/status/accessibility.js:100
+msgid "Slow Keys"
+msgstr "Tastenverzögerung"
+
+#: ../js/ui/status/accessibility.js:103
+msgid "Bounce Keys"
+msgstr "Springende Tasten"
+
+#: ../js/ui/status/accessibility.js:106
+msgid "Mouse Keys"
+msgstr "Maustasten"
+
+#: ../js/ui/status/accessibility.js:110
+msgid "Universal Access Settings"
+msgstr "Einstellungen zur Barrierefreiheit"
+
+#: ../js/ui/status/accessibility.js:163
+msgid "High Contrast"
+msgstr "Hoher Kontrast"
+
+#: ../js/ui/status/accessibility.js:205
+msgid "Large Text"
+msgstr "Große Schrift"
+
+#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:234
+msgid "Bluetooth"
+msgstr "Bluetooth"
+
+#: ../js/ui/status/bluetooth.js:55
+msgid "Visibility"
+msgstr "Sichtbarkeit"
+
+#: ../js/ui/status/bluetooth.js:69
+msgid "Send Files to Device..."
+msgstr "Dateien an Gerät senden …"
+
+#: ../js/ui/status/bluetooth.js:70
+msgid "Setup a New Device..."
+msgstr "Ein neues Gerät einrichten …"
+
+#: ../js/ui/status/bluetooth.js:94
+msgid "Bluetooth Settings"
+msgstr "Bluetooth-Einstellungen"
+
+#: ../js/ui/status/bluetooth.js:185
+msgid "Connection"
+msgstr "Verbindung"
+
+#: ../js/ui/status/bluetooth.js:221
+msgid "Send Files..."
+msgstr "Dateien senden …"
+
+#: ../js/ui/status/bluetooth.js:226
+msgid "Browse Files..."
+msgstr "Dateien durchsuchen …"
+
+#: ../js/ui/status/bluetooth.js:235
+msgid "Error browsing device"
+msgstr "Fehler beim Durchsuchen des Geräts"
+
+#: ../js/ui/status/bluetooth.js:236
+#, c-format
+msgid "The requested device cannot be browsed, error is '%s'"
+msgstr ""
+"Das angesprochene Gerät kann nicht durchsucht werden. Der Fehler lautet »%s«"
+
+#: ../js/ui/status/bluetooth.js:244
+msgid "Keyboard Settings"
+msgstr "Tastatureinstellungen"
+
+#: ../js/ui/status/bluetooth.js:249
+msgid "Mouse Settings"
+msgstr "Maus-Einstellungen"
+
+#: ../js/ui/status/bluetooth.js:256 ../js/ui/status/volume.js:62
+msgid "Sound Settings"
+msgstr "Klangeinstellungen"
+
+#: ../js/ui/status/bluetooth.js:327 ../js/ui/status/bluetooth.js:361
+#: ../js/ui/status/bluetooth.js:401 ../js/ui/status/bluetooth.js:434
+msgid "Bluetooth Agent"
+msgstr "Bluetooth-Agent"
+
+#: ../js/ui/status/bluetooth.js:362
+#, c-format
+msgid "Authorization request from %s"
+msgstr "Legitimierungsanfrage von %s"
+
+#: ../js/ui/status/bluetooth.js:368
+#, c-format
+msgid "Device %s wants access to the service '%s'"
+msgstr "Gerät »%s« bittet um Zugriff auf den Dienst »%s«"
+
+#: ../js/ui/status/bluetooth.js:370
+msgid "Always grant access"
+msgstr "Immer Zugriff gewähren"
+
+#: ../js/ui/status/bluetooth.js:371
+msgid "Grant this time only"
+msgstr "Nur dieses Mal gewähren"
+
+#: ../js/ui/status/bluetooth.js:372
+msgid "Reject"
+msgstr "Abweisen"
+
+#: ../js/ui/status/bluetooth.js:402
+#, c-format
+msgid "Pairing confirmation for %s"
+msgstr "Koppelungsbestätigung für %s"
+
+#: ../js/ui/status/bluetooth.js:408 ../js/ui/status/bluetooth.js:442
+#, c-format
+msgid "Device %s wants to pair with this computer"
+msgstr "Gerät »%s« möchte mit diesem Rechner gekoppelt werden"
+
+#: ../js/ui/status/bluetooth.js:409
+#, c-format
+msgid "Please confirm whether the PIN '%s' matches the one on the device."
+msgstr ""
+"Bitte bestätigen Sie, ob die PIN »%s« mit der des Gerätes übereinstimmt."
+
+#: ../js/ui/status/bluetooth.js:411
+msgid "Matches"
+msgstr "Stimmt überein"
+
+#: ../js/ui/status/bluetooth.js:412
+msgid "Does not match"
+msgstr "Stimmt nicht überein"
+
+#: ../js/ui/status/bluetooth.js:435
+#, c-format
+msgid "Pairing request for %s"
+msgstr "Koppelungsanfrage für %s"
+
+#: ../js/ui/status/bluetooth.js:443
+msgid "Please enter the PIN mentioned on the device."
+msgstr "Bitte geben Sie die auf dem Gerät angezeigte PIN ein."
+
+#: ../js/ui/status/bluetooth.js:459
+msgid "OK"
+msgstr "OK"
+
+#: ../js/ui/status/bluetooth.js:460
+msgid "Cancel"
+msgstr "Abbrechen"
+
+#: ../js/ui/status/power.js:85
+msgid "Power Settings"
+msgstr "Energieeinstellungen"
+
+#: ../js/ui/status/power.js:112
+#, c-format
+msgid "%d hour remaining"
+msgid_plural "%d hours remaining"
+msgstr[0] "%d Stunde verbleibend"
+msgstr[1] "%d Stunden verbleibend"
+
+#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
+#: ../js/ui/status/power.js:115
+#, c-format
+msgid "%d %s %d %s remaining"
+msgstr "%d %s %d %s verbleibend"
+
+#: ../js/ui/status/power.js:117
+msgid "hour"
+msgid_plural "hours"
+msgstr[0] "Stunde"
+msgstr[1] "Stunden"
+
+#: ../js/ui/status/power.js:117
+msgid "minute"
+msgid_plural "minutes"
+msgstr[0] "Minute"
+msgstr[1] "Minuten"
+
+#: ../js/ui/status/power.js:120
+#, c-format
+msgid "%d minute remaining"
+msgid_plural "%d minutes remaining"
+msgstr[0] "%d Minute verbleibend"
+msgstr[1] "%d Minuten verbleibend"
+
+#: ../js/ui/status/power.js:237
+msgid "AC adapter"
+msgstr "Netzteil"
+
+#: ../js/ui/status/power.js:239
+msgid "Laptop battery"
+msgstr "Laptop-Akku"
+
+#: ../js/ui/status/power.js:241
+msgid "UPS"
+msgstr "Notstromversorgung"
+
+#: ../js/ui/status/power.js:243
+msgid "Monitor"
+msgstr "Bildschirm"
+
+#: ../js/ui/status/power.js:245
+msgid "Mouse"
+msgstr "Maus"
+
+#: ../js/ui/status/power.js:247
+msgid "Keyboard"
+msgstr "Tastatur"
+
+#: ../js/ui/status/power.js:249
+msgid "PDA"
+msgstr "PDA"
+
+#: ../js/ui/status/power.js:251
+msgid "Cell phone"
+msgstr "Mobiltelefon"
+
+#: ../js/ui/status/power.js:253
+msgid "Media player"
+msgstr "Medienwiedergabegerät"
+
+#: ../js/ui/status/power.js:255
+msgid "Tablet"
+msgstr "Tablet"
+
+#: ../js/ui/status/power.js:257
+msgid "Computer"
+msgstr "Rechner"
+
+#: ../js/ui/status/power.js:259 ../src/shell-app-system.c:1012
+msgid "Unknown"
+msgstr "Unbekannt"
+
+#: ../js/ui/status/volume.js:41
+msgid "Volume"
+msgstr "Lautstärke"
+
+#: ../js/ui/status/volume.js:54
+msgid "Microphone"
+msgstr "Mikrofon"
+
+#: ../js/ui/telepathyClient.js:560
+#, c-format
+msgid "%s is online."
+msgstr "%s ist angemeldet."
+
+#: ../js/ui/telepathyClient.js:565
+#, c-format
+msgid "%s is offline."
+msgstr "%s ist abgemeldet."
+
+#: ../js/ui/telepathyClient.js:568
+#, c-format
+msgid "%s is away."
+msgstr "»%s« ist abwesend."
+
+#: ../js/ui/telepathyClient.js:571
+#, c-format
+msgid "%s is busy."
+msgstr "%s ist beschäftigt."
+
+#. Translators: this is a time format string followed by a date.
+#. If applicable, replace %X with a strftime format valid for your
+#. locale, without seconds.
+#: ../js/ui/telepathyClient.js:665
+#, no-c-format
+msgid "Sent at %X on %A"
+msgstr "Gesendet am %A um %X "
+
+#: ../js/ui/viewSelector.js:26
+msgid "Search your computer"
+msgstr "Ihren Rechner durchsuchen"
+
#: ../js/ui/windowAttentionHandler.js:43
#, c-format
msgid "%s has finished starting"
@@ -646,60 +924,82 @@ msgstr "Start von %s ist abgeschlossen"
msgid "'%s' is ready"
msgstr "»%s« ist bereit"
-#: ../js/ui/workspacesView.js:230
+#: ../js/ui/workspacesView.js:244
msgid ""
"Can't add a new workspace because maximum workspaces limit has been reached."
msgstr ""
"Es kann keine weitere Arbeitsfläche hinzugefügt werden, weil das Maximum an "
"Arbeitsflächen erreicht worden ist."
-#: ../js/ui/workspacesView.js:247
+#: ../js/ui/workspacesView.js:260
msgid "Can't remove the first workspace."
msgstr "Die erste Arbeitsfläche kann nicht entfernt werden."
-#: ../src/shell-global.c:1196
+#. translators:
+#. * The number of sound outputs on a particular device
+#: ../src/gvc/gvc-mixer-control.c:1094
+#, c-format
+msgid "%u Output"
+msgid_plural "%u Outputs"
+msgstr[0] "%u Ausgang"
+msgstr[1] "%u Ausgänge"
+
+#. translators:
+#. * The number of sound inputs on a particular device
+#: ../src/gvc/gvc-mixer-control.c:1104
+#, c-format
+msgid "%u Input"
+msgid_plural "%u Inputs"
+msgstr[0] "%u Eingang"
+msgstr[1] "%u Eingänge"
+
+#: ../src/gvc/gvc-mixer-control.c:1402
+msgid "System Sounds"
+msgstr "Systemklänge"
+
+#: ../src/shell-global.c:1156
msgid "Less than a minute ago"
msgstr "Vor weniger als einer Minute"
-#: ../src/shell-global.c:1200
+#: ../src/shell-global.c:1160
#, c-format
msgid "%d minute ago"
msgid_plural "%d minutes ago"
msgstr[0] "Vor %d Minute"
msgstr[1] "Vor %d Minuten"
-#: ../src/shell-global.c:1205
+#: ../src/shell-global.c:1165
#, c-format
msgid "%d hour ago"
msgid_plural "%d hours ago"
msgstr[0] "Vor %d Stunde"
msgstr[1] "Vor %d Stunden"
-#: ../src/shell-global.c:1210
+#: ../src/shell-global.c:1170
#, c-format
msgid "%d day ago"
msgid_plural "%d days ago"
msgstr[0] "Vor %d Tag"
msgstr[1] "Vor %d Tagen"
-#: ../src/shell-global.c:1215
+#: ../src/shell-global.c:1175
#, c-format
msgid "%d week ago"
msgid_plural "%d weeks ago"
msgstr[0] "Vor %d Woche"
msgstr[1] "Vor %d Wochen"
-#: ../src/shell-uri-util.c:89
+#: ../src/shell-util.c:89
msgid "Home Folder"
msgstr "Persönlicher Ordner"
#. Translators: this is the same string as the one found in
#. * nautilus
-#: ../src/shell-uri-util.c:104
+#: ../src/shell-util.c:104
msgid "File System"
msgstr "Dateisystem"
-#: ../src/shell-uri-util.c:250
+#: ../src/shell-util.c:250
msgid "Search"
msgstr "Suchen"
@@ -708,11 +1008,42 @@ msgstr "Suchen"
#. * example, "Trash: some-directory". It means that the
#. * directory called "some-directory" is in the trash.
#.
-#: ../src/shell-uri-util.c:300
+#: ../src/shell-util.c:300
#, c-format
msgid "%1$s: %2$s"
msgstr "%1$s: %2$s"
+#~ msgid "What's using power..."
+#~ msgstr "Energieverbraucher …"
+
+#~ msgid "Overview workspace view mode"
+#~ msgstr "Modus des Arbeitsflächen-Überblicks"
+
+#~ msgid ""
+#~ "The selected workspace view mode in the overview. Supported values are "
+#~ "\"single\" and \"grid\"."
+#~ msgstr ""
+#~ "Die gewählte Ansicht des Arbeitsflächen-Überblicks. Mögliche Werte sind "
+#~ "»single« (einfach) und »grid« (Raster)."
+
+#~ msgid "Drag here to add favorites"
+#~ msgstr "Hier ablegen, um zu Favoriten hinzuzufügen"
+
+#~ msgid "Find"
+#~ msgstr "Suchen"
+
+#~ msgid "Searching..."
+#~ msgstr "Suche läuft …"
+
+#~ msgid "No matching results."
+#~ msgstr "Keine passenden Ergebnisse."
+
+#~ msgid "Invisible"
+#~ msgstr "Unsichtbar"
+
+#~ msgid "Account Information..."
+#~ msgstr "Benutzerinformationen …"
+
#~ msgid "ON"
#~ msgstr "EIN"
@@ -725,9 +1056,6 @@ msgstr "%1$s: %2$s"
#~ msgid "%H:%M"
#~ msgstr "%H:%M"
-#~ msgid "Applications"
-#~ msgstr "Anwendungen"
-
#~ msgid "Recent Documents"
#~ msgstr "Zuletzt geöffnete Dokumente"
@@ -746,9 +1074,6 @@ msgstr "%1$s: %2$s"
#~ msgid "SEARCH RESULTS"
#~ msgstr "SUCHERGEBNISSE"
-#~ msgid "Unknown"
-#~ msgstr "Unbekannt"
-
#~ msgid "Can't lock screen: %s"
#~ msgstr "Bildschirm kann nicht gesperrt werden: %s"
diff --git a/po/el.po b/po/el.po
index 3b750224d..150d02b97 100644
--- a/po/el.po
+++ b/po/el.po
@@ -1,4 +1,3 @@
-# translation of gnome-shell.po.master.po to Greek
# Greek translation for gnome-shell.
# Copyright (C) 2009 gnome-shell's COPYRIGHT HOLDER
# This file is distributed under the same license as the gnome-shell package.
@@ -9,10 +8,11 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell.po.master\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-31 23:35+0300\n"
-"PO-Revision-Date: 2010-08-31 23:29+0200\n"
-"Last-Translator: Michael Kotsarinis \n"
+"POT-Creation-Date: 2011-01-15 11:50+0200\n"
+"PO-Revision-Date: 2011-01-15 11:48+0200\n"
+"Last-Translator: Kostas Papadimas \n"
"Language-Team: Greek \n"
+"Language: el\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -21,20 +21,12 @@ msgstr ""
#: ../data/gnome-shell.desktop.in.in.h:1
msgid "GNOME Shell"
-msgstr "Κέλυφος GNOME"
+msgstr "GNOME Shell"
#: ../data/gnome-shell.desktop.in.in.h:2
msgid "Window management and application launching"
msgstr "Διαχείριση παραθύρων και εκκίνηση εφαρμογών"
-#: ../data/gnome-shell-clock-preferences.desktop.in.in.h:1
-msgid "Clock"
-msgstr "Ρολόι"
-
-#: ../data/gnome-shell-clock-preferences.desktop.in.in.h:2
-msgid "Customize the panel clock"
-msgstr "Προσαρμογή του ρολογιού του πίνακα εφαρμογών"
-
#: ../data/org.gnome.shell.gschema.xml.in.h:1
msgid ""
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
@@ -44,72 +36,53 @@ msgstr ""
"παρακολούθησης με τη χρήση του διαλόγου Alt-F2."
#: ../data/org.gnome.shell.gschema.xml.in.h:2
-msgid "Custom format of the clock"
-msgstr "Προσαρμοσμένη μορφή του ρολογιού"
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:3
msgid "Enable internal tools useful for developers and testers from Alt-F2"
msgstr ""
"Ενεργοποίηση εσωτερικών εργαλείων χρήσιμων για τους προγραμματιστές και τους "
"δοκιμαστές με το Alt-F2"
-#: ../data/org.gnome.shell.gschema.xml.in.h:4
+#: ../data/org.gnome.shell.gschema.xml.in.h:3
msgid "File extension used for storing the screencast"
msgstr ""
-"Επέκταση αρχείου που θα χρησιμοποιηθεί για την αποθήκευση του στιγμιότπου "
+"Επέκταση αρχείου που θα χρησιμοποιηθεί για την αποθήκευση του στιγμιότυπου "
"οθόνης"
-#: ../data/org.gnome.shell.gschema.xml.in.h:5
+#: ../data/org.gnome.shell.gschema.xml.in.h:4
msgid "Framerate used for recording screencasts."
msgstr ""
-"Ο ρυθμός καρέ που θα χρησιμποιηθεί για την καταγραφή των στιγμιοτύπων οθόνης."
+"Ο ρυθμός καρέ που θα χρησιμοποιηθεί για την καταγραφή των στιγμιοτύπων "
+"οθόνης."
-#: ../data/org.gnome.shell.gschema.xml.in.h:6
+#: ../data/org.gnome.shell.gschema.xml.in.h:5
msgid ""
"GNOME Shell extensions have a uuid property; this key lists extensions which "
"should not be loaded."
msgstr ""
-"Οι επεκτάσεις του κελύφους του GNOME έχουν μια ιδιότητα uuid. Αυτό το κλειδί "
+"Οι επεκτάσεις του GNOME Shell έχουν μια ιδιότητα uuid. Αυτό το κλειδί "
"απαριθμεί ποιες επεκτάσεις δεν θα πρέπει να φορτωθούν."
-#: ../data/org.gnome.shell.gschema.xml.in.h:7
+#: ../data/org.gnome.shell.gschema.xml.in.h:6
msgid "History for command (Alt-F2) dialog"
msgstr "Ιστορικό του διαλόγου εντολών (Alt-F2)"
+#: ../data/org.gnome.shell.gschema.xml.in.h:7
+msgid "If true, display date in the clock, in addition to time."
+msgstr "Αν αληθές, εμφανίζει την ημερομηνία στο ρολόι επιπλέον της ώρας."
+
#: ../data/org.gnome.shell.gschema.xml.in.h:8
-msgid "Hour format"
-msgstr "Μορφή ώρας"
+msgid "If true, display seconds in time."
+msgstr "Αν αληθές, εμφανίζει δευτερόλεπτα στην ώρα."
#: ../data/org.gnome.shell.gschema.xml.in.h:9
-msgid ""
-"If true and format is either \"12-hour\" or \"24-hour\", display date in the "
-"clock, in addition to time."
-msgstr ""
-"Αν αληθές και η μορφοποίηση είναι «12-ωρο» ή «24-ωρο», εμφανίζει τη ημερομηνία "
-"στο ρολόι επιπλέον της ώρας."
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:10
-msgid ""
-"If true and format is either \"12-hour\" or \"24-hour\", display seconds in "
-"time."
-msgstr ""
-"Αν αληθές και η μορφοποίηση είναι «12-ωρο» ή «24-ωρο», εμφανίζει δευτερόλεπτα "
-"στην ώρα."
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:11
msgid "If true, display the ISO week date in the calendar."
msgstr ""
"Αν αληθές, εμφανίζει τον αριθμό εβδομάδας σύμφωνα με το ISO στο ημερολόγιο."
-#: ../data/org.gnome.shell.gschema.xml.in.h:12
+#: ../data/org.gnome.shell.gschema.xml.in.h:10
msgid "List of desktop file IDs for favorite applications"
msgstr "Λίστα ID αρχείων επιφάνειας εργασίας για προτιμώμενες εφαρμογές"
-#: ../data/org.gnome.shell.gschema.xml.in.h:13
-msgid "Overview workspace view mode"
-msgstr "Κατάσταση προβολής επισκόπησης του χώρου εργασίας"
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:14
+#: ../data/org.gnome.shell.gschema.xml.in.h:11
msgid ""
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
"used for gst-launch. The pipeline should have an unconnected sink pad where "
@@ -123,35 +96,35 @@ msgstr ""
"Ορίζει το δίαυλο του GStreamer που θα χρησιμοποιηθεί για την κωδικοποίηση "
"των εγγραφών. Ακολουθεί το συντακτικό που χρησιμοποιείται για το gst-launch. "
"Ο δίαυλος θα πρέπει να έχει έναν μη συνδεδεμένο απαγωγέα όπου θα εγγράφεται "
-"το καταγραφέν βίντεο. Φυσιολογικά θα έχει μια μη συνδεδεμένη πηγή. Η έξοδος "
+"το καταγραφέα βίντεο. Φυσιολογικά θα έχει μια μη συνδεδεμένη πηγή. Η έξοδος "
"της πηγής θα εγγράφεται στο αρχείο εξόδου. Όμως, ο δίαυλος μπορεί να "
-"επιληφθεί της δικής του εξόδου - αυτό μπορεί να χρησιμποιηθεί για την "
-"αποστολή της εξόσου σε έναν διακομιστή icecast μέσω του shout2send ή κάποιου "
+"επιληφθεί της δικής του εξόδου - αυτό μπορεί να χρησιμοποιηθεί για την "
+"αποστολή της εξόδου σε έναν διακομιστή icecast μέσω του shout2send ή κάποιου "
"παρόμοιου. Όταν δεν έχει ορισθεί ή έχει ορισθεί σε κενή τιμή, θα "
"χρησιμοποιηθεί ο προεπιλεγμένος δίαυλος. Αυτός είναι αυτή τη στιγμή ο "
"'videorate ! theoraenc ! oggmux' και εγγράφει σε Ogg Theora."
-#: ../data/org.gnome.shell.gschema.xml.in.h:15
+#: ../data/org.gnome.shell.gschema.xml.in.h:12
msgid "Show date in clock"
msgstr "Εμφάνιση ημερομηνίας στο ρολόι"
-#: ../data/org.gnome.shell.gschema.xml.in.h:16
+#: ../data/org.gnome.shell.gschema.xml.in.h:13
msgid "Show the week date in the calendar"
msgstr "Εμφάνιση του αριθμού εβδομάδας στο ημερολόγιο"
-#: ../data/org.gnome.shell.gschema.xml.in.h:17
+#: ../data/org.gnome.shell.gschema.xml.in.h:14
msgid "Show time with seconds"
msgstr "Εμφάνιση ώρας με δευτερόλεπτα"
-#: ../data/org.gnome.shell.gschema.xml.in.h:18
+#: ../data/org.gnome.shell.gschema.xml.in.h:15
msgid ""
"The applications corresponding to these identifiers will be displayed in the "
"favorites area."
msgstr ""
-"Οι εφαρμογές που αντιστοιχούν σε αυτούς τους ταυτοποιητές θα εμφανισθούν "
-"στην περιοχή αγαπημένων."
+"Οι εφαρμογές που αντιστοιχούν σε αυτά τα αναγνωριστικά θα εμφανισθούν στην "
+"περιοχή αγαπημένων."
-#: ../data/org.gnome.shell.gschema.xml.in.h:19
+#: ../data/org.gnome.shell.gschema.xml.in.h:16
msgid ""
"The filename for recorded screencasts will be a unique filename based on the "
"current date, and use this extension. It should be changed when recording to "
@@ -161,29 +134,21 @@ msgstr ""
"βασισμένο στην τρέχουσα ημερομηνία και θα χρησιμοποιεί αυτή την επέκταση. Θα "
"πρέπει να αλλάζει όταν γίνεται εγγραφή σε διαφορετικό πρότυπο περιέκτη."
-#: ../data/org.gnome.shell.gschema.xml.in.h:20
+#: ../data/org.gnome.shell.gschema.xml.in.h:17
msgid ""
"The framerate of the resulting screencast recordered by GNOME Shell's "
"screencast recorder in frames-per-second."
msgstr ""
-"Ο ρυθμός καρέ του στιγμιοτύπου που παράγεται από τον εγγραφέα στιγμιοτύπων "
-"οθόνης του Κελύφους του GNOME σε καρέ ανά δευτερόλεπτο."
+"Ο ρυθμός καρέ του στιγμιότυπου που παράγεται από τον εγγραφέα στιγμιοτύπων "
+"οθόνης του GNOME Shell σε καρέ ανά δευτερόλεπτο."
-#: ../data/org.gnome.shell.gschema.xml.in.h:21
+#: ../data/org.gnome.shell.gschema.xml.in.h:18
msgid "The gstreamer pipeline used to encode the screencast"
msgstr ""
"Ο δίαυλος του gstreamer που χρησιμοποιήθηκε για την κωδικοποίηση του "
-"στιγμιοτύπου"
+"στιγμιότυπου"
-#: ../data/org.gnome.shell.gschema.xml.in.h:22
-msgid ""
-"The selected workspace view mode in the overview. Supported values are "
-"\"single\" and \"grid\"."
-msgstr ""
-"Η επιλεγμένη κατάσταση προβολής του χώρου εργασίας. Υποστηριζόμενες τιμές "
-"είναι οι \"single\" και \"grid\"."
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:23
+#: ../data/org.gnome.shell.gschema.xml.in.h:19
msgid ""
"The shell normally monitors active applications in order to present the most "
"used ones (e.g. in launchers). While this data will be kept private, you may "
@@ -193,356 +158,815 @@ msgstr ""
"Το κέλυφος κανονικά παρακολουθεί τις ενεργές εφαρμογές για να παρουσιάσει "
"τις πιο συχνά χρησιμοποιούμενες (π.χ. στους εκκινητές). Παρόλο που αυτά τα "
"δεδομένα θα παραμείνουν ιδιωτικά, μπορεί να επιθυμείτε να απενεργοποιήσετε "
-"αυτή τη λειτουργία για λόγους ιδιωτικότητας. Παρακαλούμε έχετε υπ' όψιν ότι "
-"η απενεργοποίηση δεν θα αφιαρέσει τα ήδη αποθηκευμένα δεδομένα."
+"αυτή τη λειτουργία για λόγους απορρήτου. Παρακαλούμε έχετε υπ' όψιν ότι η "
+"απενεργοποίηση δεν θα αφαιρέσει τα ήδη αποθηκευμένα δεδομένα."
-#: ../data/org.gnome.shell.gschema.xml.in.h:24
-msgid ""
-"This key specifies the format used by the panel clock when the format key is "
-"set to \"custom\". You can use conversion specifiers understood by strftime"
-"() to obtain a specific format. See the strftime() manual for more "
-"information."
-msgstr ""
-"Αυτό το κλειδί καθορίζει τη μορφοποίηση που θα χρησιμοποιηθεί από το ρολόι "
-"όταν το κλειδί μορφοποίησης έχει ορισθεί σε \"custom\". Μπορεί να "
-"χρησιμοποιήσετε καθοριστές μετατροπής που γίνονται αντιληπτοί από την "
-"strftime() για να έχετε μια συγκεκριμένη μορφή. Δείτε το εγχειρίδιο της "
-"strftime() για περισσότερες πληροφορίες."
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:25
-msgid ""
-"This key specifies the hour format used by the panel clock. Possible values "
-"are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to \"unix\", "
-"the clock will display time in seconds since Epoch, i.e. 1970-01-01. If set "
-"to \"custom\", the clock will display time according to the format specified "
-"in the custom_format key. Note that if set to either \"unix\" or \"custom\", "
-"the show_date and show_seconds keys are ignored."
-msgstr ""
-"Αυτό το κλειδί καθορίζει τη μορφή της ώρας του θα χρησιμοποιεί το ρολόι του "
-"πίνακα. Δυνατές τιμές είναι \"12-hour\", \"24-hour\", \"unix\" και \"custom"
-"\". Αν ορισθεί σε \"unix\", το ρολόι θα εμφανίζει την ώρα σε δευτερόλεπτα "
-"από την ημερομηνία αναφοράς, δηλαδή την 01-01-1970. Αν ορισθεί σε \"custom"
-"\", το ρολόι θα εμφανίζει την ώρα σύμφωνα με τη μορφοποίηση που ορίζεται στο "
-"κλειδί custom_format. Σημειώστε ότι αν το κλειδί ορισθεί σε \"unix\" ή "
-"\"custom\", τα κλειδιά show_date και show_seconds αγνοούνται."
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:26
+#: ../data/org.gnome.shell.gschema.xml.in.h:20
msgid "Uuids of extensions to disable"
msgstr "Uuid των επεκτάσεων που θα απενεργοποιηθούν"
-#: ../data/org.gnome.shell.gschema.xml.in.h:27
+#: ../data/org.gnome.shell.gschema.xml.in.h:21
msgid "Whether to collect stats about applications usage"
msgstr "Εάν θα συλλέγονται στατιστικά χρήσης των εφαρμογών"
-#: ../data/clock-preferences.ui.h:1
-msgid "Clock Format"
-msgstr "Μορφή ρολογιού"
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:1
+msgid "Clip the crosshairs at the center"
+msgstr "Περικοπή του σκοπεύτρου στο κέντρο"
-#: ../data/clock-preferences.ui.h:2
-msgid "Clock Preferences"
-msgstr "Προτιμήσεις ρολογιού"
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:2
+msgid "Color of the crosshairs"
+msgstr "Χρώμα του σκόπευτρου"
-#: ../data/clock-preferences.ui.h:3
-msgid "Panel Display"
-msgstr "Εμφάνιση πίνακα εφαρμογών"
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:3
+msgid ""
+"Determines the length of the vertical and horizontal lines that make up the "
+"crosshairs."
+msgstr ""
+"Καθορίζει το μήκος των κάθετων και οριζόντιων γραμμών που απαρτίζουν το "
+"σκόπευτρο"
-#: ../data/clock-preferences.ui.h:4
-msgid "Show seco_nds"
-msgstr "Εμφάνιση _δευτερολέπτων"
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:4
+msgid ""
+"Determines the position of the magnified mouse image within the magnified "
+"view and how it reacts to system mouse movement. The values are - none: no "
+"mouse tracking; - centered: the mouse image is displayed at the center of "
+"the zoom region (which also represents the point under the system mouse) and "
+"the magnified contents are scrolled as the system mouse moves; - "
+"proportional: the position of the magnified mouse in the zoom region is "
+"proportionally the same as the position of the system mouse on screen; - "
+"push: when the magnified mouse intersects a boundary of the zoom region, the "
+"contents are scrolled into view."
+msgstr ""
-#: ../data/clock-preferences.ui.h:5
-msgid "Show the _date"
-msgstr "Εμφάνιση της _ημερομηνίας"
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:5
+msgid ""
+"Determines the transparency of the crosshairs, from fully opaque to fully "
+"transparent."
+msgstr ""
-#: ../data/clock-preferences.ui.h:6
-msgid "_12 hour format"
-msgstr "Μορφή _12 ωρών"
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:6
+msgid ""
+"Determines whether the crosshairs intersect the magnified mouse sprite, or "
+"are clipped such that the ends of the horizontal and vertical lines surround "
+"the mouse image."
+msgstr ""
-#: ../data/clock-preferences.ui.h:7
-msgid "_24 hour format"
-msgstr "Μορφή _24 ωρών"
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:7
+msgid "Enable lens mode"
+msgstr "Ενεργοποίηση λειτουργίας φακού"
-#. **** Applications ****
-#: ../js/ui/appDisplay.js:384 ../js/ui/dash.js:778
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:8
+msgid ""
+"Enables/disables display of crosshairs centered on the magnified mouse "
+"sprite."
+msgstr ""
+"Ενεργοποιεί/απενεργοποιεί την εμφάνιση σκοπεύτρου στο δείκτη μεγέθυνσης του "
+"ποντικιού"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:9
+msgid ""
+"For centered mouse tracking, when the system pointer is at or near the edge "
+"of the screen, the magnified contents continue to scroll such that the "
+"screen edge moves into the magnified view."
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:10
+msgid "Length of the crosshairs"
+msgstr "Μήκος του σκοπεύτρου"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:11
+msgid "Magnification factor"
+msgstr "Παράγοντας μεγέθυνσης"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:12
+msgid "Mouse Tracking Mode"
+msgstr "Λειτουργία Mouse Tracking "
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:13
+msgid "Opacity of the crosshairs"
+msgstr "Αδιαφάνεια του σκοπεύτρου"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:14
+msgid "Screen position"
+msgstr "Θέση οθόνης"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:15
+msgid "Scroll magnified contents beyond the edges of the desktop"
+msgstr "Κύλιση σε μεγεθυμένα περιεχόμενα που βρίσκονται έξω από την επιφάνεια"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:16
+msgid "Show or hide crosshairs"
+msgstr "Προβολή ή απόκρυψη του σκοπεύτρου"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:17
+msgid "Show or hide the magnifier"
+msgstr "Προβολή ή απόκρυψη του μεγεθυντή"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:18
+msgid "Show or hide the magnifier and all of its zoom regions."
+msgstr "Προβολή ή απόκρυψη του μεγεθυντή και όλων των περιοχών μεγέθυνσης"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:19
+msgid ""
+"The color of the the vertical and horizontal lines that make up the "
+"crosshairs."
+msgstr ""
+"Το χρώμα των κάθετων και οριζόντιων γραμμών που απαρτίζουν το σκόπευτρο"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:20
+msgid ""
+"The magnified view either fills the entire screen, or occupies the top-half, "
+"bottom-half, left-half, or right-half of the screen."
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:21
+msgid ""
+"The power of the magnification. A value of 1.0 means no magnification. A "
+"value of 2.0 doubles the size."
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:22
+msgid "Thickness of the crosshairs"
+msgstr "Πάχος των γραμμών σκοπεύτρου"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:23
+msgid ""
+"Whether the magnified view should be centered over the location of the "
+"system mouse and move with it."
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:24
+msgid "Width of the vertical and horizontal lines that make up the crosshairs."
+msgstr ""
+" Το πάχος των κάθετων και οριζόντιων γραμμών που απαρτίζουν το σκόπευτρο"
+
+#. Replace "Error invoking GLib.shell_parse_argv: " with
+#. something nicer
+#: ../js/misc/util.js:108
+#, fuzzy
+msgid "Could not parse command:"
+msgstr "Παρακαλώ εισάγετε μία εντολή:"
+
+#: ../js/misc/util.js:130
+#, fuzzy
+msgid "No such application"
+msgstr "Εφαρμογές"
+
+#: ../js/misc/util.js:143 ../js/ui/runDialog.js:364
+#, c-format
+msgid "Execution of '%s' failed:"
+msgstr "Η εκτέλεση του '%s' απέτυχε:"
+
+#. Translators: Filter to display all applications
+#: ../js/ui/appDisplay.js:155
+msgid "All"
+msgstr "Όλα"
+
+#: ../js/ui/appDisplay.js:236
msgid "APPLICATIONS"
msgstr "ΕΦΑΡΜΟΓΕΣ"
-#: ../js/ui/appDisplay.js:416
+#: ../js/ui/appDisplay.js:266
msgid "PREFERENCES"
msgstr "ΠΡΟΤΙΜΗΣΕΙΣ"
-#: ../js/ui/appDisplay.js:721
+#: ../js/ui/appDisplay.js:563
msgid "New Window"
msgstr "Νέο παράθυρο"
-#: ../js/ui/appDisplay.js:725
+#: ../js/ui/appDisplay.js:567
msgid "Remove from Favorites"
msgstr "Αφαίρεση από τα αγαπημένα"
-#: ../js/ui/appDisplay.js:726
+#: ../js/ui/appDisplay.js:568
msgid "Add to Favorites"
msgstr "Προσθήκη στα αγαπημένα"
-#: ../js/ui/appDisplay.js:1033
-msgid "Drag here to add favorites"
-msgstr "Σύρετε εδώ για να προσθέσετε αγαπημένα"
-
-#: ../js/ui/appFavorites.js:88
+#: ../js/ui/appFavorites.js:91
#, c-format
msgid "%s has been added to your favorites."
msgstr "%s προστέθηκε στα αγαπημένα σας"
-#: ../js/ui/appFavorites.js:107
+#: ../js/ui/appFavorites.js:122
#, c-format
msgid "%s has been removed from your favorites."
msgstr "%s αφαιρέθηκε από τα αγαπημένα σας"
-#: ../js/ui/dash.js:142
-msgid "Find"
-msgstr "Εύρεση"
+#: ../js/ui/dash.js:27
+msgid "Remove"
+msgstr "Απομάκρυνση"
-#: ../js/ui/dash.js:473
-msgid "Searching..."
-msgstr "Αναζήτηση..."
-
-#: ../js/ui/dash.js:487
-msgid "No matching results."
-msgstr "Δεν βρέθηκαν ταιριάσματα."
-
-#. **** Places ****
-#. Translators: This is in the sense of locations for documents,
-#. network locations, etc.
-#: ../js/ui/dash.js:797 ../js/ui/placeDisplay.js:554
-msgid "PLACES & DEVICES"
-msgstr "ΤΟΠΟΘΕΣΙΕΣ $ ΣΥΣΚΕΥΕΣ"
-
-#. **** Documents ****
-#: ../js/ui/dash.js:804 ../js/ui/docDisplay.js:494
+#: ../js/ui/docDisplay.js:18
msgid "RECENT ITEMS"
msgstr "ΠΡΟΣΦΑΤΑ ΑΝΤΙΚΕΙΜΕΝΑ"
-#: ../js/ui/lookingGlass.js:552
+#: ../js/ui/endSessionDialog.js:63
+#, fuzzy, c-format
+msgid "Log Out %s"
+msgstr "Αποσύνδεση..."
+
+#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:69
+#, fuzzy
+msgid "Log Out"
+msgstr "Αποσύνδεση..."
+
+#: ../js/ui/endSessionDialog.js:65
+msgid "Click Log Out to quit these applications and log out of the system."
+msgstr ""
+
+#: ../js/ui/endSessionDialog.js:66
+#, c-format
+msgid "%s will be logged out automatically in %d seconds."
+msgstr ""
+
+#: ../js/ui/endSessionDialog.js:67
+#, c-format
+msgid "You will be logged out automatically in %d seconds."
+msgstr ""
+
+#: ../js/ui/endSessionDialog.js:68
+msgid "Logging out of the system."
+msgstr ""
+
+#: ../js/ui/endSessionDialog.js:74 ../js/ui/endSessionDialog.js:78
+#, fuzzy
+msgid "Shut Down"
+msgstr "Τερματισμός..."
+
+#: ../js/ui/endSessionDialog.js:75
+msgid "Click Shut Down to quit these applications and shut down the system."
+msgstr ""
+
+#: ../js/ui/endSessionDialog.js:76
+#, c-format
+msgid "The system will shut down automatically in %d seconds."
+msgstr ""
+
+#: ../js/ui/endSessionDialog.js:77
+msgid "Shutting down the system."
+msgstr ""
+
+#: ../js/ui/endSessionDialog.js:84 ../js/ui/endSessionDialog.js:88
+msgid "Restart"
+msgstr ""
+
+#: ../js/ui/endSessionDialog.js:85
+msgid "Click Restart to quit these applications and restart the system."
+msgstr ""
+
+#: ../js/ui/endSessionDialog.js:86
+#, c-format
+msgid "The system will restart automatically in %d seconds."
+msgstr ""
+
+#: ../js/ui/endSessionDialog.js:87
+msgid "Restarting the system."
+msgstr ""
+
+#: ../js/ui/endSessionDialog.js:395
+msgid "Confirm"
+msgstr ""
+
+#: ../js/ui/endSessionDialog.js:400 ../js/ui/status/bluetooth.js:469
+msgid "Cancel"
+msgstr "Ακύρωση"
+
+#: ../js/ui/lookingGlass.js:556
msgid "No extensions installed"
msgstr "Δεν υπάρχουν εγκατεστημένες επεκτάσεις"
-#: ../js/ui/lookingGlass.js:589
+#: ../js/ui/lookingGlass.js:593
msgid "Enabled"
msgstr "Ενεργοποιημένο"
-#: ../js/ui/lookingGlass.js:591
+#. translators:
+#. * The device has been disabled
+#: ../js/ui/lookingGlass.js:595 ../src/gvc/gvc-mixer-control.c:1087
msgid "Disabled"
msgstr "Απενεργοποιημένο"
-#: ../js/ui/lookingGlass.js:593
+#: ../js/ui/lookingGlass.js:597
msgid "Error"
msgstr "Σφάλμα"
-#: ../js/ui/lookingGlass.js:595
+#: ../js/ui/lookingGlass.js:599
msgid "Out of date"
msgstr "Μη ενημερωμένο"
-#: ../js/ui/lookingGlass.js:620
+#: ../js/ui/lookingGlass.js:624
msgid "View Source"
msgstr "Προβολή πηγής"
-#: ../js/ui/lookingGlass.js:626
+#: ../js/ui/lookingGlass.js:630
msgid "Web Page"
msgstr "Ιστοσελίδα"
-#: ../js/ui/overview.js:160
+#: ../js/ui/messageTray.js:1748
+#, fuzzy
+msgid "System Information"
+msgstr "Ρυθμίσεις συστήματος"
+
+#: ../js/ui/overview.js:75
msgid "Undo"
msgstr "Αναίρεση"
+#: ../js/ui/overview.js:140
+msgid "Windows"
+msgstr "Παράθυρα"
+
+#: ../js/ui/overview.js:143
+msgid "Applications"
+msgstr "Εφαρμογές"
+
#. TODO - _quit() doesn't really work on apps in state STARTING yet
-#: ../js/ui/panel.js:473
+#: ../js/ui/panel.js:479
#, c-format
msgid "Quit %s"
msgstr "Έξοδος %s"
-#: ../js/ui/panel.js:498
-msgid "Preferences"
-msgstr "Προτιμήσεις"
-
#. Translators: This is the time format with date used
#. in 24-hour mode.
-#: ../js/ui/panel.js:584
+#: ../js/ui/panel.js:564
msgid "%a %b %e, %R:%S"
msgstr "%a %e %b, %R:%S"
-#: ../js/ui/panel.js:585
+#: ../js/ui/panel.js:565
msgid "%a %b %e, %R"
msgstr "%a %e %b, %R"
#. Translators: This is the time format without date used
#. in 24-hour mode.
-#: ../js/ui/panel.js:589
+#: ../js/ui/panel.js:569
msgid "%a %R:%S"
msgstr "%a %R%a %R:%S"
-#: ../js/ui/panel.js:590
+#: ../js/ui/panel.js:570
msgid "%a %R"
msgstr "%a %R"
#. Translators: This is a time format with date used
#. for AM/PM.
-#: ../js/ui/panel.js:597
+#: ../js/ui/panel.js:577
msgid "%a %b %e, %l:%M:%S %p"
msgstr "%a %e %b, %l:%M:%S %p"
-#: ../js/ui/panel.js:598
+#: ../js/ui/panel.js:578
msgid "%a %b %e, %l:%M %p"
msgstr "%a %e %b, %l:%M %p"
#. Translators: This is a time format without date used
#. for AM/PM.
-#: ../js/ui/panel.js:602
+#: ../js/ui/panel.js:582
msgid "%a %l:%M:%S %p"
msgstr "%a %l:%M:%S %p"
-#: ../js/ui/panel.js:603
+#: ../js/ui/panel.js:583
msgid "%a %l:%M %p"
msgstr "%a %l:%M %p"
#. Button on the left side of the panel.
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
-#: ../js/ui/panel.js:748
+#: ../js/ui/panel.js:728
msgid "Activities"
msgstr "Δραστηριότητες"
-#: ../js/ui/placeDisplay.js:111
+#: ../js/ui/placeDisplay.js:112
#, c-format
msgid "Failed to unmount '%s'"
msgstr "Αποτυχία αποπροσάρτησης '%s'"
-#: ../js/ui/placeDisplay.js:114
+#: ../js/ui/placeDisplay.js:115
msgid "Retry"
msgstr "Προσπάθεια ξανά"
-#: ../js/ui/placeDisplay.js:159
+#: ../js/ui/placeDisplay.js:160
msgid "Connect to..."
msgstr "Σύνδεση σε..."
-#. Translators: the "ON" and "OFF" strings are used in the
-#. toggle switches in the status area menus, and must be SHORT.
-#. If you don't have suitable short words, consider initials,
-#. "0"/"1", "⚪"/"⚫", etc.
-#: ../js/ui/popupMenu.js:30 ../js/ui/popupMenu.js:40
-msgid "ON"
-msgstr "ON"
+#: ../js/ui/placeDisplay.js:559
+msgid "PLACES & DEVICES"
+msgstr "ΤΟΠΟΘΕΣΙΕΣ $ ΣΥΣΚΕΥΕΣ"
-#: ../js/ui/popupMenu.js:31 ../js/ui/popupMenu.js:45
-msgid "OFF"
-msgstr "OFF"
+#. 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:33
+msgid "toggle-switch-us"
+msgstr "toggle-switch-us"
-#: ../js/ui/runDialog.js:233
+#: ../js/ui/runDialog.js:222
msgid "Please enter a command:"
msgstr "Παρακαλώ εισάγετε μία εντολή:"
-#: ../js/ui/runDialog.js:378
-#, c-format
-msgid "Execution of '%s' failed:"
-msgstr "Η εκτέλεση του '%s' απέτυχε:"
-
-#: ../js/ui/statusMenu.js:91
+#: ../js/ui/statusMenu.js:102
msgid "Available"
msgstr "Διαθέσιμος"
-#: ../js/ui/statusMenu.js:95
+#: ../js/ui/statusMenu.js:107
msgid "Busy"
msgstr "Απασχολημένος"
-#: ../js/ui/statusMenu.js:99
-msgid "Invisible"
-msgstr "Αόρατος"
+#: ../js/ui/statusMenu.js:115
+msgid "My Account"
+msgstr "Ο λογαριασμός μου"
-#: ../js/ui/statusMenu.js:106
-msgid "Account Information..."
-msgstr "Πληροφορίες λογαριασμού..."
+#: ../js/ui/statusMenu.js:119
+msgid "System Settings"
+msgstr "Ρυθμίσεις συστήματος"
-#: ../js/ui/statusMenu.js:110
-msgid "System Preferences..."
-msgstr "Προστιμήσεις συστήματος..."
-
-#: ../js/ui/statusMenu.js:117
+#: ../js/ui/statusMenu.js:126
msgid "Lock Screen"
msgstr "Κλείδωμα οθόνης"
-#: ../js/ui/statusMenu.js:121
+#: ../js/ui/statusMenu.js:130
msgid "Switch User"
msgstr "Αλλαγή χρήστη"
-#: ../js/ui/statusMenu.js:126
+#: ../js/ui/statusMenu.js:135
msgid "Log Out..."
msgstr "Αποσύνδεση..."
-#: ../js/ui/statusMenu.js:130
+#: ../js/ui/statusMenu.js:142
+msgid "Suspend..."
+msgstr "Αναστολή..."
+
+#: ../js/ui/statusMenu.js:146
msgid "Shut Down..."
msgstr "Τερματισμός..."
+#: ../js/ui/status/accessibility.js:83
+msgid "Zoom"
+msgstr "Εστίαση"
+
+#: ../js/ui/status/accessibility.js:89
+msgid "Screen Reader"
+msgstr "Αναγνώστης οθόνης"
+
+#: ../js/ui/status/accessibility.js:92
+msgid "Screen Keyboard"
+msgstr "Πληκτρολόγιο οθόνης"
+
+#: ../js/ui/status/accessibility.js:95
+msgid "Visual Alerts"
+msgstr "Οπτικές ειδοποιήσεις"
+
+#: ../js/ui/status/accessibility.js:98
+msgid "Sticky Keys"
+msgstr "Κολλώδης πλήκτρα"
+
+#: ../js/ui/status/accessibility.js:101
+msgid "Slow Keys"
+msgstr "Αργά πλήκτρα"
+
+#: ../js/ui/status/accessibility.js:104
+msgid "Bounce Keys"
+msgstr "Πλήκτρα αναπήδησης"
+
+#: ../js/ui/status/accessibility.js:107
+msgid "Mouse Keys"
+msgstr "Πλήκτρα ποντικιού"
+
+#: ../js/ui/status/accessibility.js:111
+msgid "Universal Access Settings"
+msgstr "Ρυθμίσεις καθολικής πρόσβασης"
+
+#: ../js/ui/status/accessibility.js:163
+msgid "High Contrast"
+msgstr "Υψηλή αντίθεση"
+
+#: ../js/ui/status/accessibility.js:205
+msgid "Large Text"
+msgstr "Μεγάλο κείμενο"
+
+#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:240
+msgid "Bluetooth"
+msgstr "Bluetooth"
+
+#: ../js/ui/status/bluetooth.js:55
+msgid "Visibility"
+msgstr "Ορατότητα"
+
+#: ../js/ui/status/bluetooth.js:69
+msgid "Send Files to Device..."
+msgstr "Αποστολή αρχείων σε συσκευή..."
+
+#: ../js/ui/status/bluetooth.js:70
+msgid "Setup a New Device..."
+msgstr "Ρύθμιση μιας νέας συσκευής..."
+
+#: ../js/ui/status/bluetooth.js:94
+msgid "Bluetooth Settings"
+msgstr "Ρυθμίσεις Bluetooth"
+
+#: ../js/ui/status/bluetooth.js:191
+msgid "Connection"
+msgstr "Σύνδεση"
+
+#: ../js/ui/status/bluetooth.js:227
+msgid "Send Files..."
+msgstr "Αποστολή αρχείων..."
+
+#: ../js/ui/status/bluetooth.js:232
+msgid "Browse Files..."
+msgstr "Εξερεύνηση αρχείων..."
+
+#: ../js/ui/status/bluetooth.js:241
+msgid "Error browsing device"
+msgstr "Σφάλμα περιήγησης συσκευής"
+
+#: ../js/ui/status/bluetooth.js:242
+#, c-format
+msgid "The requested device cannot be browsed, error is '%s'"
+msgstr ""
+"Δεν είναι δυνατή η περιήγηση στην αιτούμενη συσκευή, το σφάλμα είναι '%s'"
+
+#: ../js/ui/status/bluetooth.js:250 ../js/ui/status/keyboard.js:78
+msgid "Keyboard Settings"
+msgstr "Ρυθμίσεις πληκτρολογίου"
+
+#: ../js/ui/status/bluetooth.js:255
+msgid "Mouse Settings"
+msgstr "Ρυθμίσεις ποντικιού"
+
+#: ../js/ui/status/bluetooth.js:262 ../js/ui/status/volume.js:63
+msgid "Sound Settings"
+msgstr "Ρυθμίσεις ήχου"
+
+#: ../js/ui/status/bluetooth.js:336 ../js/ui/status/bluetooth.js:370
+#: ../js/ui/status/bluetooth.js:410 ../js/ui/status/bluetooth.js:443
+msgid "Bluetooth Agent"
+msgstr "Υποστήριξη Bluetooth"
+
+#: ../js/ui/status/bluetooth.js:371
+#, c-format
+msgid "Authorization request from %s"
+msgstr "Αίτηση διαπίστευσης από %s"
+
+#: ../js/ui/status/bluetooth.js:377
+#, c-format
+msgid "Device %s wants access to the service '%s'"
+msgstr "Η συσκευή %s επιθυμεί πρόσβαση στην υπηρεσία '%s'"
+
+#: ../js/ui/status/bluetooth.js:379
+msgid "Always grant access"
+msgstr "Να επιτρέπεται πάντα η πρόσβαση"
+
+#: ../js/ui/status/bluetooth.js:380
+msgid "Grant this time only"
+msgstr "Μόνο για αυτή τη φορά"
+
+#: ../js/ui/status/bluetooth.js:381
+msgid "Reject"
+msgstr "Απόρριψη"
+
+#: ../js/ui/status/bluetooth.js:411
+#, c-format
+msgid "Pairing confirmation for %s"
+msgstr "Επιβεβαίωση σύζευξης για %s"
+
+#: ../js/ui/status/bluetooth.js:417 ../js/ui/status/bluetooth.js:451
+#, c-format
+msgid "Device %s wants to pair with this computer"
+msgstr "Η συσκευή %s επιθυμεί να συνδεθεί με αυτόν τον υπολογιστή"
+
+#: ../js/ui/status/bluetooth.js:418
+#, c-format
+msgid "Please confirm whether the PIN '%s' matches the one on the device."
+msgstr "Παρακαλώ επιβεβαιώστε αν το PIN '%s' ταιριάζει με αυτό στη συσκευή."
+
+#: ../js/ui/status/bluetooth.js:420
+msgid "Matches"
+msgstr "Ταιριάζει"
+
+#: ../js/ui/status/bluetooth.js:421
+msgid "Does not match"
+msgstr "Δεν ταιριάζει"
+
+#: ../js/ui/status/bluetooth.js:444
+#, c-format
+msgid "Pairing request for %s"
+msgstr "Αίτηση σύζευξης για %s"
+
+#: ../js/ui/status/bluetooth.js:452
+msgid "Please enter the PIN mentioned on the device."
+msgstr "Παρακαλώ εισάγετε το PIN που αναφέρεται στην συσκευή"
+
+#: ../js/ui/status/bluetooth.js:468
+msgid "OK"
+msgstr "ΟΚ"
+
+#: ../js/ui/status/power.js:85
+msgid "Power Settings"
+msgstr "Ρυθμίσεις τροφοδοσίας"
+
+#: ../js/ui/status/power.js:112
+#, c-format
+msgid "%d hour remaining"
+msgid_plural "%d hours remaining"
+msgstr[0] "%d ώρα απομένει"
+msgstr[1] "%d ώρες απομένουν"
+
+#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
+#: ../js/ui/status/power.js:115
+#, c-format
+msgid "%d %s %d %s remaining"
+msgstr "Απομένουν %d %s %d %s "
+
+#: ../js/ui/status/power.js:117
+msgid "hour"
+msgid_plural "hours"
+msgstr[0] "ώρα"
+msgstr[1] "ώρες"
+
+#: ../js/ui/status/power.js:117
+msgid "minute"
+msgid_plural "minutes"
+msgstr[0] "λεπτό"
+msgstr[1] "λεπτά"
+
+#: ../js/ui/status/power.js:120
+#, c-format
+msgid "%d minute remaining"
+msgid_plural "%d minutes remaining"
+msgstr[0] "%d λεπτό απομένει"
+msgstr[1] "%d λεπτά απομένουν"
+
+#: ../js/ui/status/power.js:235
+msgid "AC adapter"
+msgstr "Τροφοδοσία AC"
+
+#: ../js/ui/status/power.js:237
+msgid "Laptop battery"
+msgstr "Μπαταρία φορητού"
+
+#: ../js/ui/status/power.js:239
+msgid "UPS"
+msgstr "UPS"
+
+#: ../js/ui/status/power.js:241
+msgid "Monitor"
+msgstr "Οθόνη"
+
+#: ../js/ui/status/power.js:243
+msgid "Mouse"
+msgstr "Ποντίκι"
+
+#: ../js/ui/status/power.js:245
+msgid "Keyboard"
+msgstr "Πληκτρολόγιο"
+
+#: ../js/ui/status/power.js:247
+msgid "PDA"
+msgstr "PDA"
+
+#: ../js/ui/status/power.js:249
+msgid "Cell phone"
+msgstr "Κινητό"
+
+#: ../js/ui/status/power.js:251
+msgid "Media player"
+msgstr "Αναπαραγωγή πολυμέσων"
+
+#: ../js/ui/status/power.js:253
+msgid "Tablet"
+msgstr "Ταμπλέτα"
+
+#: ../js/ui/status/power.js:255
+msgid "Computer"
+msgstr "Υπολογιστής"
+
+#: ../js/ui/status/power.js:257 ../src/shell-app-system.c:1012
+msgid "Unknown"
+msgstr "Άγνωστο"
+
+#: ../js/ui/status/volume.js:42
+msgid "Volume"
+msgstr "Ένταση ήχου"
+
+#: ../js/ui/status/volume.js:55
+msgid "Microphone"
+msgstr "Μικρόφωνο"
+
+#: ../js/ui/telepathyClient.js:561
+#, c-format
+msgid "%s is online."
+msgstr "Ο/η %s είναι συνδεδεμένος"
+
+#: ../js/ui/telepathyClient.js:566
+#, c-format
+msgid "%s is offline."
+msgstr "Ο/η %s είναι αποσυνδεδεμένος"
+
+#: ../js/ui/telepathyClient.js:569
+#, c-format
+msgid "%s is away."
+msgstr "Ο/η '%s' είναι εκτός. "
+
+#: ../js/ui/telepathyClient.js:572
+#, c-format
+msgid "%s is busy."
+msgstr "%s είναι απασχολημένος/η"
+
+#. Translators: this is a time format string followed by a date.
+#. If applicable, replace %X with a strftime format valid for your
+#. locale, without seconds.
+#: ../js/ui/telepathyClient.js:666
+#, no-c-format
+msgid "Sent at %X on %A"
+msgstr "Στάλθηκε στις %A και ώρα %X"
+
+#: ../js/ui/viewSelector.js:26
+msgid "Search your computer"
+msgstr "Αναζήτηση στον υπολογιστή σας"
+
#: ../js/ui/windowAttentionHandler.js:43
#, c-format
msgid "%s has finished starting"
-msgstr "%s ολοκλήρωσε την εκκίνηση "
+msgstr "Το %s ολοκλήρωσε την εκκίνηση "
#: ../js/ui/windowAttentionHandler.js:45
#, c-format
msgid "'%s' is ready"
msgstr "Το '%s' είναι έτοιμο"
-#: ../js/ui/workspacesView.js:230
+#: ../js/ui/workspacesView.js:244
msgid ""
"Can't add a new workspace because maximum workspaces limit has been reached."
msgstr ""
"Αδυναμία προσθήκης νέου χώρου εργασίας επειδή έχετε φτάσει το μέγιστο αριθμό "
"χώρων εργασίας."
-#: ../js/ui/workspacesView.js:247
+#: ../js/ui/workspacesView.js:260
msgid "Can't remove the first workspace."
msgstr "Δεν είναι δυνατή η αφαίρεση του πρώτου χώρου εργασίας."
-#: ../src/shell-global.c:1105
+#. translators:
+#. * The number of sound outputs on a particular device
+#: ../src/gvc/gvc-mixer-control.c:1094
+#, c-format
+msgid "%u Output"
+msgid_plural "%u Outputs"
+msgstr[0] "%u έξοδος"
+msgstr[1] "%u έξοδοι"
+
+#. translators:
+#. * The number of sound inputs on a particular device
+#: ../src/gvc/gvc-mixer-control.c:1104
+#, c-format
+msgid "%u Input"
+msgid_plural "%u Inputs"
+msgstr[0] "%u είσοδος"
+msgstr[1] "%u είσοδοι"
+
+#: ../src/gvc/gvc-mixer-control.c:1402
+msgid "System Sounds"
+msgstr "Ήχοι συστήματος"
+
+#: ../src/shell-global.c:1233
msgid "Less than a minute ago"
msgstr "Λιγότερο από ένα λεπτό πριν"
-#: ../src/shell-global.c:1109
+#: ../src/shell-global.c:1237
#, c-format
msgid "%d minute ago"
msgid_plural "%d minutes ago"
msgstr[0] "%d λεπτό πριν"
msgstr[1] "%d λεπτά πριν"
-#: ../src/shell-global.c:1114
+#: ../src/shell-global.c:1242
#, c-format
msgid "%d hour ago"
msgid_plural "%d hours ago"
msgstr[0] "%d ώρα πριν"
msgstr[1] "%d ώρες πριν"
-#: ../src/shell-global.c:1119
+#: ../src/shell-global.c:1247
#, c-format
msgid "%d day ago"
msgid_plural "%d days ago"
msgstr[0] "%d ημέρα πριν"
msgstr[1] "%d ημέρες πριν"
-#: ../src/shell-global.c:1124
+#: ../src/shell-global.c:1252
#, c-format
msgid "%d week ago"
msgid_plural "%d weeks ago"
msgstr[0] "%d εβδομάδα πριν"
msgstr[1] "%d εβδομάδες πριν"
-#: ../src/shell-uri-util.c:89
+#: ../src/shell-util.c:89
msgid "Home Folder"
msgstr "Προσωπικός φάκελος"
#. Translators: this is the same string as the one found in
#. * nautilus
-#: ../src/shell-uri-util.c:104
+#: ../src/shell-util.c:104
msgid "File System"
msgstr "Σύστημα αρχείων"
-#: ../src/shell-uri-util.c:250
+#: ../src/shell-util.c:250
msgid "Search"
msgstr "Αναζήτηση"
@@ -551,42 +975,7 @@ msgstr "Αναζήτηση"
#. * example, "Trash: some-directory". It means that the
#. * directory called "some-directory" is in the trash.
#.
-#: ../src/shell-uri-util.c:300
+#: ../src/shell-util.c:300
#, c-format
msgid "%1$s: %2$s"
msgstr "%1$s: %2$s"
-
-#~ msgid "Sidebar"
-#~ msgstr "Πλευρική στήλη"
-
-#~ msgid "Applications"
-#~ msgstr "Εφαρμογές"
-
-#~ msgid "Recent Documents"
-#~ msgstr "Πρόσφατα έγγραφα"
-
-#~ msgid "More"
-#~ msgstr "Περισσότερα"
-
-#~ msgid "(see all)"
-#~ msgstr "(εμφάνιση όλων)"
-
-#~ msgid "PLACES"
-#~ msgstr "ΤΟΠΟΘΕΣΙΕΣ"
-
-#~ msgid "SEARCH RESULTS"
-#~ msgstr "ΑΠΟΤΕΛΕΣΜΑΤΑ ΑΝΑΖΗΤΗΣΗΣ"
-
-#~ msgid "Unknown"
-#~ msgstr "Άγνωστο"
-
-#~ msgid "Can't lock screen: %s"
-#~ msgstr "Αδύνατο το κλείδωμα της οθόνης: %s"
-
-#~ msgid "Can't temporarily set screensaver to blank screen: %s"
-#~ msgstr ""
-#~ "Δεν είναι δυνατή η προσωρινή ρύθμιση της προστασίας οθόνης σε κενή οθόνη: "
-#~ "%s"
-
-#~ msgid "Can't logout: %s"
-#~ msgstr "Αδύνατη η αποσύνδεση: %s"
diff --git a/po/es.po b/po/es.po
index 2e10fd726..fd320aa69 100644
--- a/po/es.po
+++ b/po/es.po
@@ -2,15 +2,16 @@
# Copyright (C) 2009 gnome-shell's COPYRIGHT HOLDER
# This file is distributed under the same license as the gnome-shell package.
# Jorge González , 2009, 2010.
+# Daniel Mustieles , 2010, 2011.
#
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell.master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&component=general\n"
-"POT-Creation-Date: 2010-12-18 19:25+0000\n"
-"PO-Revision-Date: 2010-12-19 13:12+0100\n"
-"Last-Translator: Jorge González \n"
+"POT-Creation-Date: 2011-01-15 00:23+0000\n"
+"PO-Revision-Date: 2011-01-16 13:26+0100\n"
+"Last-Translator: Daniel Mustieles \n"
"Language-Team: Español \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -25,14 +26,6 @@ msgstr "GNOME Shell"
msgid "Window management and application launching"
msgstr "Gestión de ventanas e inicio de aplicaciones"
-#: ../data/gnome-shell-clock-preferences.desktop.in.in.h:1
-msgid "Clock"
-msgstr "Reloj"
-
-#: ../data/gnome-shell-clock-preferences.desktop.in.in.h:2
-msgid "Customize the panel clock"
-msgstr "Personalizar el reloj del panel"
-
#: ../data/org.gnome.shell.gschema.xml.in.h:1
msgid ""
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
@@ -42,24 +35,20 @@ msgstr ""
"usando el diálogo Alt+F2"
#: ../data/org.gnome.shell.gschema.xml.in.h:2
-msgid "Custom format of the clock"
-msgstr "Formato personalizado del reloj"
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:3
msgid "Enable internal tools useful for developers and testers from Alt-F2"
msgstr ""
"Activar las herramientas internas, útiles para desarrolladores y probadores, "
"desde Alt+F2"
-#: ../data/org.gnome.shell.gschema.xml.in.h:4
+#: ../data/org.gnome.shell.gschema.xml.in.h:3
msgid "File extension used for storing the screencast"
msgstr "Extensión de archivo que usar para almacenar los «screencast»"
-#: ../data/org.gnome.shell.gschema.xml.in.h:5
+#: ../data/org.gnome.shell.gschema.xml.in.h:4
msgid "Framerate used for recording screencasts."
msgstr "Tasa de fotogramas usada para grabar «screencast»."
-#: ../data/org.gnome.shell.gschema.xml.in.h:6
+#: ../data/org.gnome.shell.gschema.xml.in.h:5
msgid ""
"GNOME Shell extensions have a uuid property; this key lists extensions which "
"should not be loaded."
@@ -67,39 +56,27 @@ msgstr ""
"Las extensiones de GNOME Shell tienen una propiedad uuid; esta clave lista "
"las extensiones que no se deben cargar."
-#: ../data/org.gnome.shell.gschema.xml.in.h:7
+#: ../data/org.gnome.shell.gschema.xml.in.h:6
msgid "History for command (Alt-F2) dialog"
msgstr "Histórico del diálogo de comandos (Alt+F2)"
+#: ../data/org.gnome.shell.gschema.xml.in.h:7
+msgid "If true, display date in the clock, in addition to time."
+msgstr "Si es cierta, muestra la fecha en el reloj, además de la hora."
+
#: ../data/org.gnome.shell.gschema.xml.in.h:8
-msgid "Hour format"
-msgstr "Formato de la hora"
+msgid "If true, display seconds in time."
+msgstr "Si es cierta, muestra los segundos en la hora."
#: ../data/org.gnome.shell.gschema.xml.in.h:9
-msgid ""
-"If true and format is either \"12-hour\" or \"24-hour\", display date in the "
-"clock, in addition to time."
-msgstr ""
-"Si es cierta y el formato es «12-horas» o «24-horas», muestra la fecha en el "
-"reloj, además de la hora."
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:10
-msgid ""
-"If true and format is either \"12-hour\" or \"24-hour\", display seconds in "
-"time."
-msgstr ""
-"Si es cierta y el formato es «12-horas» o «24-horas», muestra los segundos "
-"en la hora."
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:11
msgid "If true, display the ISO week date in the calendar."
msgstr "Si es cierta muestra la fecha de semana ISO en el calendario."
-#: ../data/org.gnome.shell.gschema.xml.in.h:12
+#: ../data/org.gnome.shell.gschema.xml.in.h:10
msgid "List of desktop file IDs for favorite applications"
msgstr "Lista de ID de archivos de escritorio para las aplicaciones favoritas"
-#: ../data/org.gnome.shell.gschema.xml.in.h:13
+#: ../data/org.gnome.shell.gschema.xml.in.h:11
msgid ""
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
"used for gst-launch. The pipeline should have an unconnected sink pad where "
@@ -121,19 +98,19 @@ msgstr ""
"predeterminada. Actualmente es «videorate ! theoraenc ! oggmux» y greba en "
"Ogg Theora."
-#: ../data/org.gnome.shell.gschema.xml.in.h:14
+#: ../data/org.gnome.shell.gschema.xml.in.h:12
msgid "Show date in clock"
msgstr "Mostrar la fecha en el reloj"
-#: ../data/org.gnome.shell.gschema.xml.in.h:15
+#: ../data/org.gnome.shell.gschema.xml.in.h:13
msgid "Show the week date in the calendar"
msgstr "Mostrar la fecha de la semana en el calendario"
-#: ../data/org.gnome.shell.gschema.xml.in.h:16
+#: ../data/org.gnome.shell.gschema.xml.in.h:14
msgid "Show time with seconds"
msgstr "Mostrar la hora con segundos"
-#: ../data/org.gnome.shell.gschema.xml.in.h:17
+#: ../data/org.gnome.shell.gschema.xml.in.h:15
msgid ""
"The applications corresponding to these identifiers will be displayed in the "
"favorites area."
@@ -141,7 +118,7 @@ msgstr ""
"Las aplicaciones correspondientes con esos identificadores se mostrarán en "
"el área de favoritos."
-#: ../data/org.gnome.shell.gschema.xml.in.h:18
+#: ../data/org.gnome.shell.gschema.xml.in.h:16
msgid ""
"The filename for recorded screencasts will be a unique filename based on the "
"current date, and use this extension. It should be changed when recording to "
@@ -151,7 +128,7 @@ msgstr ""
"basado en la fecha actual y usará esta extensión. Se debería cambiar al "
"grabar en otro formato contenedor diferente."
-#: ../data/org.gnome.shell.gschema.xml.in.h:19
+#: ../data/org.gnome.shell.gschema.xml.in.h:17
msgid ""
"The framerate of the resulting screencast recordered by GNOME Shell's "
"screencast recorder in frames-per-second."
@@ -159,11 +136,11 @@ msgstr ""
"La tasa de fotogramas de la grabación resultante grabada por el grabador de "
"«screencast» de GNOME Shell, en fotogramas por segundo."
-#: ../data/org.gnome.shell.gschema.xml.in.h:20
+#: ../data/org.gnome.shell.gschema.xml.in.h:18
msgid "The gstreamer pipeline used to encode the screencast"
msgstr "La tubería de gstreamer usada para codificar el «screencast»"
-#: ../data/org.gnome.shell.gschema.xml.in.h:21
+#: ../data/org.gnome.shell.gschema.xml.in.h:19
msgid ""
"The shell normally monitors active applications in order to present the most "
"used ones (e.g. in launchers). While this data will be kept private, you may "
@@ -175,41 +152,11 @@ msgstr ""
"mantienen de forma privada, puede querer desactivarlo por razones de "
"privacidad. Note que haciéndolo no eliminará los datos ya guardados."
-#: ../data/org.gnome.shell.gschema.xml.in.h:22
-msgid ""
-"This key specifies the format used by the panel clock when the format key is "
-"set to \"custom\". You can use conversion specifiers understood by strftime"
-"() to obtain a specific format. See the strftime() manual for more "
-"information."
-msgstr ""
-"Esta clave especifica el formato usado por el reloj del panel cuando la "
-"clave del formato se establece a «custom» (personalizado). Puede usar "
-"especificadores de conversión que entienda strftime() para obtener un "
-"formato específico. Consulte el manual de strftime() para obtener más "
-"información."
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:23
-msgid ""
-"This key specifies the hour format used by the panel clock. Possible values "
-"are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to \"unix\", "
-"the clock will display time in seconds since Epoch, i.e. 1970-01-01. If set "
-"to \"custom\", the clock will display time according to the format specified "
-"in the custom_format key. Note that if set to either \"unix\" or \"custom\", "
-"the show_date and show_seconds keys are ignored."
-msgstr ""
-"Esta clave especifica el formato de la hora especificado por el reloj del "
-"panel. Los valores posibles son «12-hour» (12 horas), «24-hour» (24 horas), "
-"«unix» y «custom» (personalizado).Si se establece a «unix» el reloj mostrará "
-"la hora en segundos desde la época (1 de enero de 1970). Si se establece a "
-"«custom» el reloj mostrará la hora según el formato especificado en la clave "
-"«custom_format». Note que si se establece a «unix» o «custom» se ignoran las "
-"claves «show_date» y «show_seconds»."
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:24
+#: ../data/org.gnome.shell.gschema.xml.in.h:20
msgid "Uuids of extensions to disable"
msgstr "Uuid de las extensiones que desactivar"
-#: ../data/org.gnome.shell.gschema.xml.in.h:25
+#: ../data/org.gnome.shell.gschema.xml.in.h:21
msgid "Whether to collect stats about applications usage"
msgstr ""
"Indica si se deben recolectar estadísticas acerca del uso de las aplicaciones"
@@ -371,55 +318,45 @@ msgid "Width of the vertical and horizontal lines that make up the crosshairs."
msgstr ""
"Anchura de las líneas verticales y horizontales que conforman las cruces."
-#: ../data/clock-preferences.ui.h:1
-msgid "Clock Format"
-msgstr "Formato del reloj"
+#. Replace "Error invoking GLib.shell_parse_argv: " with
+#. something nicer
+#: ../js/misc/util.js:108
+#| msgid "Please enter a command:"
+msgid "Could not parse command:"
+msgstr "No se pudo analizar el comando:"
-#: ../data/clock-preferences.ui.h:2
-msgid "Clock Preferences"
-msgstr "Preferencias del reloj"
+#: ../js/misc/util.js:130
+#| msgid "Applications"
+msgid "No such application"
+msgstr "No existe la aplicación"
-#: ../data/clock-preferences.ui.h:3
-msgid "Panel Display"
-msgstr "Panel de visualización"
+#: ../js/misc/util.js:143 ../js/ui/runDialog.js:364
+#, c-format
+msgid "Execution of '%s' failed:"
+msgstr "Falló la ejecución de «%s»:"
-#: ../data/clock-preferences.ui.h:4
-msgid "Show seco_nds"
-msgstr "Mostrar los segu_ndos"
-
-#: ../data/clock-preferences.ui.h:5
-msgid "Show the _date"
-msgstr "Mostrar la _fecha"
-
-#: ../data/clock-preferences.ui.h:6
-msgid "_12 hour format"
-msgstr "Formato _12 horas"
-
-#: ../data/clock-preferences.ui.h:7
-msgid "_24 hour format"
-msgstr "Formato _24 horas"
-
-#: ../js/ui/appDisplay.js:154
+#. Translators: Filter to display all applications
+#: ../js/ui/appDisplay.js:155
msgid "All"
msgstr "Todas"
-#: ../js/ui/appDisplay.js:235
+#: ../js/ui/appDisplay.js:236
msgid "APPLICATIONS"
msgstr "APLICACIONES"
-#: ../js/ui/appDisplay.js:265
+#: ../js/ui/appDisplay.js:266
msgid "PREFERENCES"
msgstr "PREFERENCIAS"
-#: ../js/ui/appDisplay.js:562
+#: ../js/ui/appDisplay.js:563
msgid "New Window"
msgstr "Ventana nueva"
-#: ../js/ui/appDisplay.js:566
+#: ../js/ui/appDisplay.js:567
msgid "Remove from Favorites"
msgstr "Quitar de los favoritos"
-#: ../js/ui/appDisplay.js:567
+#: ../js/ui/appDisplay.js:568
msgid "Add to Favorites"
msgstr "Añadir a los favoritos"
@@ -437,122 +374,199 @@ msgstr "Se ha quitado %s de sus favoritos."
msgid "Remove"
msgstr "Quitar"
-#: ../js/ui/docDisplay.js:494
+#: ../js/ui/docDisplay.js:18
msgid "RECENT ITEMS"
msgstr "ELEMENTOS RECIENTES"
-#: ../js/ui/lookingGlass.js:552
+#: ../js/ui/endSessionDialog.js:63
+#, c-format
+#| msgid "Log Out..."
+msgid "Log Out %s"
+msgstr "Cerrar la sesión %s"
+
+#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:69
+#| msgid "Log Out..."
+msgid "Log Out"
+msgstr "Cerrar la sesión"
+
+#: ../js/ui/endSessionDialog.js:65
+msgid "Click Log Out to quit these applications and log out of the system."
+msgstr ""
+"Pulse «Cerrar la sesión» para salir de esas aplicaciones y cerrar la sesión "
+"del sistema."
+
+#: ../js/ui/endSessionDialog.js:66
+#, c-format
+msgid "%s will be logged out automatically in %d seconds."
+msgstr "La sesión de %s se cerrará automáticamente en %d segundos."
+
+#: ../js/ui/endSessionDialog.js:67
+#, c-format
+msgid "You will be logged out automatically in %d seconds."
+msgstr "Su sesión se cerrará automáticamente en %d segundos."
+
+#: ../js/ui/endSessionDialog.js:68
+msgid "Logging out of the system."
+msgstr "Cerrando la sesión."
+
+#: ../js/ui/endSessionDialog.js:74 ../js/ui/endSessionDialog.js:78
+#| msgid "Shut Down..."
+msgid "Shut Down"
+msgstr "Apagar"
+
+#: ../js/ui/endSessionDialog.js:75
+msgid "Click Shut Down to quit these applications and shut down the system."
+msgstr "Pulse «Apagar» para salir de esas aplicaciones y apagar el sistema."
+
+#: ../js/ui/endSessionDialog.js:76
+#, c-format
+msgid "The system will shut down automatically in %d seconds."
+msgstr "El sistema se apagará automáticamente en %d segundo."
+
+#: ../js/ui/endSessionDialog.js:77
+msgid "Shutting down the system."
+msgstr "Apagando el sistema."
+
+#: ../js/ui/endSessionDialog.js:84 ../js/ui/endSessionDialog.js:88
+#| msgid "Restart..."
+msgid "Restart"
+msgstr "Reiniciar"
+
+#: ../js/ui/endSessionDialog.js:85
+msgid "Click Restart to quit these applications and restart the system."
+msgstr ""
+"Pulse «Reiniciar» para salir de esas aplicaciones y reiniciar el sistema."
+
+#: ../js/ui/endSessionDialog.js:86
+#, c-format
+msgid "The system will restart automatically in %d seconds."
+msgstr "El sistema se reiniciará automáticamente en %d segundos."
+
+#: ../js/ui/endSessionDialog.js:87
+msgid "Restarting the system."
+msgstr "Reiniciando el sistema."
+
+#: ../js/ui/endSessionDialog.js:395
+msgid "Confirm"
+msgstr "Confirmar"
+
+#: ../js/ui/endSessionDialog.js:400 ../js/ui/status/bluetooth.js:469
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: ../js/ui/lookingGlass.js:556
msgid "No extensions installed"
msgstr "No hay extensiones instaladas"
-#: ../js/ui/lookingGlass.js:589
+#: ../js/ui/lookingGlass.js:593
msgid "Enabled"
msgstr "Activado"
#. translators:
#. * The device has been disabled
-#: ../js/ui/lookingGlass.js:591 ../src/gvc/gvc-mixer-control.c:1087
+#: ../js/ui/lookingGlass.js:595 ../src/gvc/gvc-mixer-control.c:1087
msgid "Disabled"
msgstr "Desactivado"
-#: ../js/ui/lookingGlass.js:593
+#: ../js/ui/lookingGlass.js:597
msgid "Error"
msgstr "Error"
-#: ../js/ui/lookingGlass.js:595
+#: ../js/ui/lookingGlass.js:599
msgid "Out of date"
msgstr "Caducado"
-#: ../js/ui/lookingGlass.js:620
+#: ../js/ui/lookingGlass.js:624
msgid "View Source"
msgstr "Ver fuente"
-#: ../js/ui/lookingGlass.js:626
+#: ../js/ui/lookingGlass.js:630
msgid "Web Page"
msgstr "Página web"
-#: ../js/ui/overview.js:96
+#: ../js/ui/messageTray.js:1748
+#| msgid "Account Information..."
+msgid "System Information"
+msgstr "Información del sistema"
+
+#: ../js/ui/overview.js:75
msgid "Undo"
msgstr "Deshacer"
-#: ../js/ui/overview.js:158
+#: ../js/ui/overview.js:140
msgid "Windows"
msgstr "Ventanas"
-#: ../js/ui/overview.js:161
+#: ../js/ui/overview.js:143
msgid "Applications"
msgstr "Aplicaciones"
#. TODO - _quit() doesn't really work on apps in state STARTING yet
-#: ../js/ui/panel.js:474
+#: ../js/ui/panel.js:479
#, c-format
msgid "Quit %s"
msgstr "Salir de %s"
-#: ../js/ui/panel.js:499
-msgid "Preferences"
-msgstr "Preferencias"
-
#. Translators: This is the time format with date used
#. in 24-hour mode.
-#: ../js/ui/panel.js:585
+#: ../js/ui/panel.js:564
msgid "%a %b %e, %R:%S"
msgstr "%a %e de %b, %R:%S"
-#: ../js/ui/panel.js:586
+#: ../js/ui/panel.js:565
msgid "%a %b %e, %R"
msgstr "%a %e de %b, %R"
#. Translators: This is the time format without date used
#. in 24-hour mode.
-#: ../js/ui/panel.js:590
+#: ../js/ui/panel.js:569
msgid "%a %R:%S"
msgstr "%a %R:%S"
-#: ../js/ui/panel.js:591
+#: ../js/ui/panel.js:570
msgid "%a %R"
msgstr "%a %R"
#. Translators: This is a time format with date used
#. for AM/PM.
-#: ../js/ui/panel.js:598
+#: ../js/ui/panel.js:577
msgid "%a %b %e, %l:%M:%S %p"
msgstr "%a %e de %b, %H:%M:%S"
-#: ../js/ui/panel.js:599
+#: ../js/ui/panel.js:578
msgid "%a %b %e, %l:%M %p"
msgstr "%a %e de %b, %H:%M"
#. Translators: This is a time format without date used
#. for AM/PM.
-#: ../js/ui/panel.js:603
+#: ../js/ui/panel.js:582
msgid "%a %l:%M:%S %p"
msgstr "%a %H:%M:%S"
-#: ../js/ui/panel.js:604
+#: ../js/ui/panel.js:583
msgid "%a %l:%M %p"
msgstr "%a %H:%M"
#. Button on the left side of the panel.
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
-#: ../js/ui/panel.js:749
+#: ../js/ui/panel.js:728
msgid "Activities"
msgstr "Actividades"
-#: ../js/ui/placeDisplay.js:111
+#: ../js/ui/placeDisplay.js:112
#, c-format
msgid "Failed to unmount '%s'"
msgstr "Falló al desmontar «%s»"
-#: ../js/ui/placeDisplay.js:114
+#: ../js/ui/placeDisplay.js:115
msgid "Retry"
msgstr "Reintentar"
-#: ../js/ui/placeDisplay.js:159
+#: ../js/ui/placeDisplay.js:160
msgid "Connect to..."
msgstr "Conectar a…"
-#: ../js/ui/placeDisplay.js:558
+#: ../js/ui/placeDisplay.js:559
msgid "PLACES & DEVICES"
msgstr "LUGARES Y DISPOSITIVOS"
@@ -565,84 +579,79 @@ msgstr "LUGARES Y DISPOSITIVOS"
msgid "toggle-switch-us"
msgstr "toggle-switch-intl"
-#: ../js/ui/runDialog.js:233
+#: ../js/ui/runDialog.js:222
msgid "Please enter a command:"
msgstr "Introduzca un comando:"
-#: ../js/ui/runDialog.js:378
-#, c-format
-msgid "Execution of '%s' failed:"
-msgstr "Falló la ejecución de «%s»:"
-
-#: ../js/ui/statusMenu.js:101
+#: ../js/ui/statusMenu.js:102
msgid "Available"
msgstr "Disponible"
-#: ../js/ui/statusMenu.js:106
+#: ../js/ui/statusMenu.js:107
msgid "Busy"
msgstr "Ocupado"
-#: ../js/ui/statusMenu.js:114
+#: ../js/ui/statusMenu.js:115
msgid "My Account"
msgstr "Mi cuenta"
-#: ../js/ui/statusMenu.js:118
+#: ../js/ui/statusMenu.js:119
msgid "System Settings"
msgstr "Configuración del sistema"
-#: ../js/ui/statusMenu.js:125
+#: ../js/ui/statusMenu.js:126
msgid "Lock Screen"
msgstr "Bloquear la pantalla"
-#: ../js/ui/statusMenu.js:129
+#: ../js/ui/statusMenu.js:130
msgid "Switch User"
msgstr "Cambiar de usuario"
-#: ../js/ui/statusMenu.js:134
+#: ../js/ui/statusMenu.js:135
msgid "Log Out..."
-msgstr "Salir…"
+msgstr "Cerrar la sesión…"
-#: ../js/ui/statusMenu.js:141
+#: ../js/ui/statusMenu.js:142
msgid "Suspend..."
msgstr "Suspender…"
-#: ../js/ui/statusMenu.js:145
+#: ../js/ui/statusMenu.js:146
msgid "Shut Down..."
msgstr "Apagar…"
-#: ../js/ui/status/accessibility.js:82
+#: ../js/ui/status/accessibility.js:83
msgid "Zoom"
msgstr "Ampliación"
-#: ../js/ui/status/accessibility.js:88
+#: ../js/ui/status/accessibility.js:89
msgid "Screen Reader"
msgstr "Lector de pantalla"
-#: ../js/ui/status/accessibility.js:91
+#: ../js/ui/status/accessibility.js:92
msgid "Screen Keyboard"
msgstr "Teclado en pantalla"
-#: ../js/ui/status/accessibility.js:94
+#: ../js/ui/status/accessibility.js:95
msgid "Visual Alerts"
msgstr "Alertas visuales"
-#: ../js/ui/status/accessibility.js:97
+#: ../js/ui/status/accessibility.js:98
msgid "Sticky Keys"
msgstr "Teclas persistentes"
-#: ../js/ui/status/accessibility.js:100
+#: ../js/ui/status/accessibility.js:101
msgid "Slow Keys"
msgstr "Teclas lentas"
-#: ../js/ui/status/accessibility.js:103
+#: ../js/ui/status/accessibility.js:104
msgid "Bounce Keys"
msgstr "Rechazo de teclas"
-#: ../js/ui/status/accessibility.js:106
+#: ../js/ui/status/accessibility.js:107
msgid "Mouse Keys"
msgstr "Teclas del ratón"
-#: ../js/ui/status/accessibility.js:110
+#: ../js/ui/status/accessibility.js:111
msgid "Universal Access Settings"
msgstr "Preferencias del acceso universal"
@@ -654,6 +663,122 @@ msgstr "Contraste alto"
msgid "Large Text"
msgstr "Texto:"
+#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:240
+msgid "Bluetooth"
+msgstr "Bluetooth"
+
+#: ../js/ui/status/bluetooth.js:55
+msgid "Visibility"
+msgstr "Visibilidad"
+
+#: ../js/ui/status/bluetooth.js:69
+msgid "Send Files to Device..."
+msgstr "Enviar archivos al dispositivo…"
+
+#: ../js/ui/status/bluetooth.js:70
+msgid "Setup a New Device..."
+msgstr "Configurar un dispositivo nuevo…"
+
+#: ../js/ui/status/bluetooth.js:94
+msgid "Bluetooth Settings"
+msgstr "Configuración de Bluetooth"
+
+#: ../js/ui/status/bluetooth.js:191
+msgid "Connection"
+msgstr "Conexión"
+
+#: ../js/ui/status/bluetooth.js:227
+msgid "Send Files..."
+msgstr "Enviar archivos…"
+
+#: ../js/ui/status/bluetooth.js:232
+msgid "Browse Files..."
+msgstr "Examinar archivos…"
+
+#: ../js/ui/status/bluetooth.js:241
+msgid "Error browsing device"
+msgstr "Error al examinar el dispositivo"
+
+#: ../js/ui/status/bluetooth.js:242
+#, c-format
+msgid "The requested device cannot be browsed, error is '%s'"
+msgstr "No se puede examinar el dispositivo solicitado, el error es «%s»"
+
+#: ../js/ui/status/bluetooth.js:250 ../js/ui/status/keyboard.js:78
+msgid "Keyboard Settings"
+msgstr "Configuración del teclado"
+
+#: ../js/ui/status/bluetooth.js:255
+msgid "Mouse Settings"
+msgstr "Ajustes del ratón…"
+
+#: ../js/ui/status/bluetooth.js:262 ../js/ui/status/volume.js:63
+msgid "Sound Settings"
+msgstr "Configuración del sonido"
+
+#: ../js/ui/status/bluetooth.js:336 ../js/ui/status/bluetooth.js:370
+#: ../js/ui/status/bluetooth.js:410 ../js/ui/status/bluetooth.js:443
+msgid "Bluetooth Agent"
+msgstr "Agente Bluetooth"
+
+#: ../js/ui/status/bluetooth.js:371
+#, c-format
+msgid "Authorization request from %s"
+msgstr "Solicitud de autorización de %s"
+
+#: ../js/ui/status/bluetooth.js:377
+#, c-format
+msgid "Device %s wants access to the service '%s'"
+msgstr "El dispositivo %s quiere acceder al servicio «%s»"
+
+#: ../js/ui/status/bluetooth.js:379
+msgid "Always grant access"
+msgstr "Conceder acceso siempre"
+
+#: ../js/ui/status/bluetooth.js:380
+msgid "Grant this time only"
+msgstr "Conceder sólo esta vez"
+
+#: ../js/ui/status/bluetooth.js:381
+msgid "Reject"
+msgstr "Rechazar"
+
+#: ../js/ui/status/bluetooth.js:411
+#, c-format
+msgid "Pairing confirmation for %s"
+msgstr "Confirmación de emparejamiento para «%s»"
+
+#: ../js/ui/status/bluetooth.js:417 ../js/ui/status/bluetooth.js:451
+#, c-format
+msgid "Device %s wants to pair with this computer"
+msgstr "El dispositivo «%s» quiere emparejarse con este equipo"
+
+#: ../js/ui/status/bluetooth.js:418
+#, c-format
+msgid "Please confirm whether the PIN '%s' matches the one on the device."
+msgstr "Confirme que el PIN mostrado en «%s» coincide con el del dispositivo."
+
+#: ../js/ui/status/bluetooth.js:420
+msgid "Matches"
+msgstr "Coincide"
+
+#: ../js/ui/status/bluetooth.js:421
+msgid "Does not match"
+msgstr "No coincide"
+
+#: ../js/ui/status/bluetooth.js:444
+#, c-format
+msgid "Pairing request for %s"
+msgstr "Solicitud de emparejamiento para «%s»"
+
+#: ../js/ui/status/bluetooth.js:452
+msgid "Please enter the PIN mentioned on the device."
+msgstr "Introduzca el PIN mencionado en el dispositivo."
+
+#: ../js/ui/status/bluetooth.js:468
+msgid "OK"
+msgstr "Aceptar"
+
#: ../js/ui/status/power.js:85
msgid "Power Settings"
msgstr "Configuración de energía"
@@ -690,82 +815,78 @@ msgid_plural "%d minutes remaining"
msgstr[0] "Queda %d minuto"
msgstr[1] "Queda %d minutos"
-#: ../js/ui/status/power.js:237
+#: ../js/ui/status/power.js:235
msgid "AC adapter"
msgstr "Adaptador de corriente"
-#: ../js/ui/status/power.js:239
+#: ../js/ui/status/power.js:237
msgid "Laptop battery"
msgstr "Batería del portátil"
-#: ../js/ui/status/power.js:241
+#: ../js/ui/status/power.js:239
msgid "UPS"
msgstr "SAI"
-#: ../js/ui/status/power.js:243
+#: ../js/ui/status/power.js:241
msgid "Monitor"
msgstr "Monitor"
-#: ../js/ui/status/power.js:245
+#: ../js/ui/status/power.js:243
msgid "Mouse"
msgstr "Ratón"
-#: ../js/ui/status/power.js:247
+#: ../js/ui/status/power.js:245
msgid "Keyboard"
msgstr "Teclado"
-#: ../js/ui/status/power.js:249
+#: ../js/ui/status/power.js:247
msgid "PDA"
msgstr "PDA"
-#: ../js/ui/status/power.js:251
+#: ../js/ui/status/power.js:249
msgid "Cell phone"
msgstr "Teléfono móvil"
-#: ../js/ui/status/power.js:253
+#: ../js/ui/status/power.js:251
msgid "Media player"
msgstr "Reproductor multimedia"
-#: ../js/ui/status/power.js:255
+#: ../js/ui/status/power.js:253
msgid "Tablet"
msgstr "Tableta"
-#: ../js/ui/status/power.js:257
+#: ../js/ui/status/power.js:255
msgid "Computer"
msgstr "Equipo"
-#: ../js/ui/status/power.js:259 ../src/shell-app-system.c:1012
+#: ../js/ui/status/power.js:257 ../src/shell-app-system.c:1012
msgid "Unknown"
msgstr "Desconocido"
-#: ../js/ui/status/volume.js:41
+#: ../js/ui/status/volume.js:42
msgid "Volume"
msgstr "Volumen"
-#: ../js/ui/status/volume.js:54
+#: ../js/ui/status/volume.js:55
msgid "Microphone"
msgstr "Micrófono"
-#: ../js/ui/status/volume.js:62
-msgid "Sound Settings"
-msgstr "Configuración del sonido"
-
-#: ../js/ui/telepathyClient.js:560
+#: ../js/ui/telepathyClient.js:561
#, c-format
msgid "%s is online."
msgstr "%s está conectado/a."
-#: ../js/ui/telepathyClient.js:565
+#: ../js/ui/telepathyClient.js:566
#, c-format
msgid "%s is offline."
msgstr "%s está desconectado/a."
-#: ../js/ui/telepathyClient.js:568
+#: ../js/ui/telepathyClient.js:569
#, c-format
msgid "%s is away."
msgstr "%s está ausente."
-#: ../js/ui/telepathyClient.js:571
+#: ../js/ui/telepathyClient.js:572
#, c-format
msgid "%s is busy."
msgstr "%s está ocupado/a."
@@ -773,7 +894,7 @@ msgstr "%s está ocupado/a."
#. Translators: this is a time format string followed by a date.
#. If applicable, replace %X with a strftime format valid for your
#. locale, without seconds.
-#: ../js/ui/telepathyClient.js:664
+#: ../js/ui/telepathyClient.js:666
#, no-c-format
msgid "Sent at %X on %A"
msgstr "Enviado a las %X el %A"
@@ -825,32 +946,32 @@ msgstr[1] "%u entradas"
msgid "System Sounds"
msgstr "Sonidos del sistema"
-#: ../src/shell-global.c:1155
+#: ../src/shell-global.c:1233
msgid "Less than a minute ago"
msgstr "Hace menos de un minuto"
-#: ../src/shell-global.c:1159
+#: ../src/shell-global.c:1237
#, c-format
msgid "%d minute ago"
msgid_plural "%d minutes ago"
msgstr[0] "Hace %d minuto"
msgstr[1] "Hace %d minutos"
-#: ../src/shell-global.c:1164
+#: ../src/shell-global.c:1242
#, c-format
msgid "%d hour ago"
msgid_plural "%d hours ago"
msgstr[0] "Hace %d hora"
msgstr[1] "Hace %d horas"
-#: ../src/shell-global.c:1169
+#: ../src/shell-global.c:1247
#, c-format
msgid "%d day ago"
msgid_plural "%d days ago"
msgstr[0] "Hace %d día"
msgstr[1] "Hace %d días"
-#: ../src/shell-global.c:1174
+#: ../src/shell-global.c:1252
#, c-format
msgid "%d week ago"
msgid_plural "%d weeks ago"
@@ -881,6 +1002,78 @@ msgstr "Buscar"
msgid "%1$s: %2$s"
msgstr "%1$s: %2$s"
+#~ msgid "Clock"
+#~ msgstr "Reloj"
+
+#~ msgid "Customize the panel clock"
+#~ msgstr "Personalizar el reloj del panel"
+
+#~ msgid "Custom format of the clock"
+#~ msgstr "Formato personalizado del reloj"
+
+#~ msgid "Hour format"
+#~ msgstr "Formato de la hora"
+
+#~ msgid ""
+#~ "If true and format is either \"12-hour\" or \"24-hour\", display seconds "
+#~ "in time."
+#~ msgstr ""
+#~ "Si es cierta y el formato es «12-horas» o «24-horas», muestra los "
+#~ "segundos en la hora."
+
+#~ msgid ""
+#~ "This key specifies the format used by the panel clock when the format key "
+#~ "is set to \"custom\". You can use conversion specifiers understood by "
+#~ "strftime() to obtain a specific format. See the strftime() manual for "
+#~ "more information."
+#~ msgstr ""
+#~ "Esta clave especifica el formato usado por el reloj del panel cuando la "
+#~ "clave del formato se establece a «custom» (personalizado). Puede usar "
+#~ "especificadores de conversión que entienda strftime() para obtener un "
+#~ "formato específico. Consulte el manual de strftime() para obtener más "
+#~ "información."
+
+#~ msgid ""
+#~ "This key specifies the hour format used by the panel clock. Possible "
+#~ "values are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to "
+#~ "\"unix\", the clock will display time in seconds since Epoch, i.e. "
+#~ "1970-01-01. If set to \"custom\", the clock will display time according "
+#~ "to the format specified in the custom_format key. Note that if set to "
+#~ "either \"unix\" or \"custom\", the show_date and show_seconds keys are "
+#~ "ignored."
+#~ msgstr ""
+#~ "Esta clave especifica el formato de la hora especificado por el reloj del "
+#~ "panel. Los valores posibles son «12-hour» (12 horas), «24-hour» (24 "
+#~ "horas), «unix» y «custom» (personalizado).Si se establece a «unix» el "
+#~ "reloj mostrará la hora en segundos desde la época (1 de enero de 1970). "
+#~ "Si se establece a «custom» el reloj mostrará la hora según el formato "
+#~ "especificado en la clave «custom_format». Note que si se establece a "
+#~ "«unix» o «custom» se ignoran las claves «show_date» y «show_seconds»."
+
+#~ msgid "Clock Format"
+#~ msgstr "Formato del reloj"
+
+#~ msgid "Clock Preferences"
+#~ msgstr "Preferencias del reloj"
+
+#~ msgid "Panel Display"
+#~ msgstr "Panel de visualización"
+
+#~ msgid "Show seco_nds"
+#~ msgstr "Mostrar los segu_ndos"
+
+#~ msgid "Show the _date"
+#~ msgstr "Mostrar la _fecha"
+
+#~ msgid "_12 hour format"
+#~ msgstr "Formato _12 horas"
+
+#~ msgid "_24 hour format"
+#~ msgstr "Formato _24 horas"
+
+#~ msgid "Preferences"
+#~ msgstr "Preferencias"
+
#~ msgid "What's using power..."
#~ msgstr "Lo que está usando energía…"
@@ -909,12 +1102,6 @@ msgstr "%1$s: %2$s"
#~ msgid "Invisible"
#~ msgstr "Invisible"
-#~ msgid "Restart..."
-#~ msgstr "Reiniciar…"
-
-#~ msgid "Account Information..."
-#~ msgstr "Información de la cuenta…"
-
#~ msgid "ON"
#~ msgstr "ENCENDIDO"
diff --git a/po/et.po b/po/et.po
index 84c9b65ed..bf15eb8e3 100644
--- a/po/et.po
+++ b/po/et.po
@@ -1,21 +1,26 @@
+# GNOME kesta eesti keele tõlge.
# Estonian translation for gnome-shell.
-# Copyright (C) 2010 The Gnome Project
+#
+# Copyright (C) 2010, 2011 The Gnome Project
+#
# This file is distributed under the same license as the gnome-shell package.
-# Mattias Põldaru , 2010.
+#
+# Mattias Põldaru , 2010, 2011.
+# Ivar Smolin , 2011.
#
msgid ""
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-"
"shell&component=general\n"
-"POT-Creation-Date: 2010-12-18 23:05+0000\n"
-"PO-Revision-Date: 2010-12-18 11:47+0200\n"
+"POT-Creation-Date: 2011-01-15 00:23+0000\n"
+"PO-Revision-Date: 2011-01-15 15:45+0200\n"
"Last-Translator: Ivar Smolin \n"
"Language-Team: Estonian \n"
-"Language: et\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Language: et\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Poedit-Language: Estonian\n"
"X-Poedit-Country: Estonia\n"
@@ -26,12 +31,6 @@ msgstr "GNOME kest"
msgid "Window management and application launching"
msgstr "Aknahaldur ja rakenduste käivitaja"
-msgid "Clock"
-msgstr "Kell"
-
-msgid "Customize the panel clock"
-msgstr "Paneelikella kohandamine"
-
msgid ""
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
"dialog."
@@ -39,15 +38,12 @@ msgstr ""
"Lubab ligipääsu sisemistele silumise ja monitoorimise tööriistadele Alt-F2 "
"dialoogi kaudu."
-msgid "Custom format of the clock"
-msgstr "Kellaaaja kohandatud vorming"
-
msgid "Enable internal tools useful for developers and testers from Alt-F2"
msgstr ""
"Arendajate ja testijate jaoks sisemiste tööriistade lubamine Alt-F2 alt"
msgid "File extension used for storing the screencast"
-msgstr "Faililaiend, mida kasutatakse ekraanivideo salvestamisel"
+msgstr "Ekraanivideo salvestamisel kasutatav faililaiend"
msgid "Framerate used for recording screencasts."
msgstr "Ekraanivideo lindistamisel kasutatav kaadrikiirus."
@@ -56,29 +52,20 @@ msgid ""
"GNOME Shell extensions have a uuid property; this key lists extensions which "
"should not be loaded."
msgstr ""
+"GNOME Shelli laiendustel on omadus UUID. Selle võtmega määratakse "
+"laiendused, mida ei peaks laaditama."
msgid "History for command (Alt-F2) dialog"
msgstr "Käsudialoogi (Alt-F2) ajalugu"
-msgid "Hour format"
-msgstr "Tundide vorming"
+msgid "If true, display date in the clock, in addition to time."
+msgstr "Kui määratud, siis kuvatakse kellaaja kõrval ka kuupäeva."
-msgid ""
-"If true and format is either \"12-hour\" or \"24-hour\", display date in the "
-"clock, in addition to time."
-msgstr ""
-"Kui tõene ja vorming on kas \"12-tundi\" või \"24-tundi\", kuvatakse "
-"kellaaja kõrval ka kuupäeva."
-
-msgid ""
-"If true and format is either \"12-hour\" or \"24-hour\", display seconds in "
-"time."
-msgstr ""
-"Kui tõene ja vorming on kas \"12-tundi\" või \"24-tundi\", kuvatakse "
-"kellaaega koos sekunditega."
+msgid "If true, display seconds in time."
+msgstr "Kui määratud, siis kuvatakse aja juures ka sekundeid."
msgid "If true, display the ISO week date in the calendar."
-msgstr "Kui tõene, kuvatakse kalendris kuupäeva ISO nädalate järgi."
+msgstr "Kui määratud, kuvatakse kalendris kuupäeva ISO nädalavormingus."
msgid "List of desktop file IDs for favorite applications"
msgstr "Lemmikrakenduste töölauafailide ID-de loend"
@@ -98,7 +85,7 @@ msgid "Show date in clock"
msgstr "Kell näitab kuupäeva"
msgid "Show the week date in the calendar"
-msgstr "Kalendris näidatakse nädala kuupäeva"
+msgstr "Kalendris näidatakse kuupäeva nädalavormingus"
msgid "Show time with seconds"
msgstr "Kellaaega näidatakse sekunditega"
@@ -113,6 +100,10 @@ msgid ""
"current date, and use this extension. It should be changed when recording to "
"a different container format."
msgstr ""
+"Ekraanivideo jaoks kasutatav failinimi on unikaalne, see sisaldab "
+"salvestamise kuupäeva ja ka käesoleva võtmega määratud laiendit. Mõnda teise "
+"konteinervormingusse salvestades tuleks ka sellele vormingule vastav laiend "
+"määrata."
msgid ""
"The framerate of the resulting screencast recordered by GNOME Shell's "
@@ -129,22 +120,6 @@ msgid ""
"remove already saved data."
msgstr ""
-msgid ""
-"This key specifies the format used by the panel clock when the format key is "
-"set to \"custom\". You can use conversion specifiers understood by strftime"
-"() to obtain a specific format. See the strftime() manual for more "
-"information."
-msgstr ""
-
-msgid ""
-"This key specifies the hour format used by the panel clock. Possible values "
-"are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to \"unix\", "
-"the clock will display time in seconds since Epoch, i.e. 1970-01-01. If set "
-"to \"custom\", the clock will display time according to the format specified "
-"in the custom_format key. Note that if set to either \"unix\" or \"custom\", "
-"the show_date and show_seconds keys are ignored."
-msgstr ""
-
msgid "Uuids of extensions to disable"
msgstr "Keelatavate laienduste UUID-d"
@@ -261,29 +236,21 @@ msgstr ""
msgid "Width of the vertical and horizontal lines that make up the crosshairs."
msgstr "Niitristi moodustavate püst- ja rõhtjoone laius"
-msgid "Clock Format"
-msgstr "Kellaaja vorming"
+#. Replace "Error invoking GLib.shell_parse_argv: " with
+#. something nicer
+msgid "Could not parse command:"
+msgstr "Käsku pole võimalik analüüsida:"
-msgid "Clock Preferences"
-msgstr "Kella eelistused"
+msgid "No such application"
+msgstr "Sellist rakendust ei ole"
-msgid "Panel Display"
-msgstr "Paneelikuva"
-
-msgid "Show seco_nds"
-msgstr "_Sekundeid näidatakse"
-
-msgid "Show the _date"
-msgstr "_Kuupäeva näidatakse"
-
-msgid "_12 hour format"
-msgstr "_12 tunni vorming"
-
-msgid "_24 hour format"
-msgstr "_24 tunni vorming"
+#, c-format
+msgid "Execution of '%s' failed:"
+msgstr "'%s' käivitamine nurjus:"
+#. Translators: Filter to display all applications
msgid "All"
-msgstr ""
+msgstr "Kõik"
msgid "APPLICATIONS"
msgstr "Rakendused"
@@ -309,11 +276,66 @@ msgid "%s has been removed from your favorites."
msgstr "%s eemaldati lemmikutest."
msgid "Remove"
-msgstr ""
+msgstr "Eemalda"
msgid "RECENT ITEMS"
msgstr "Hiljutised dokumendid"
+#, c-format
+msgid "Log Out %s"
+msgstr "Logi %s välja"
+
+msgid "Log Out"
+msgstr "Logi välja"
+
+msgid "Click Log Out to quit these applications and log out of the system."
+msgstr ""
+
+#, c-format
+msgid "%s will be logged out automatically in %d seconds."
+msgstr ""
+
+#, c-format
+msgid "You will be logged out automatically in %d seconds."
+msgstr ""
+
+msgid "Logging out of the system."
+msgstr "Süsteemist väljalogimine"
+
+msgid "Shut Down"
+msgstr "Lülita välja"
+
+msgid "Click Shut Down to quit these applications and shut down the system."
+msgstr ""
+
+#, c-format
+msgid "The system will shut down automatically in %d seconds."
+msgstr ""
+
+msgid "Shutting down the system."
+msgstr "Süsteemi seiskamine."
+
+msgid "Restart"
+msgstr "Taaskäivita"
+
+msgid "Click Restart to quit these applications and restart the system."
+msgstr ""
+"Nende rakenduste sulgemiseks ja süsteemi taaskäivitamiseks klõpsa "
+"\"Taaskäivita\"."
+
+#, c-format
+msgid "The system will restart automatically in %d seconds."
+msgstr "Süsteem taaskäivitatakse automaatselt %d sekundi pärast."
+
+msgid "Restarting the system."
+msgstr "Süsteemi taaskäivitamine."
+
+msgid "Confirm"
+msgstr "Kinnita"
+
+msgid "Cancel"
+msgstr "Katkesta"
+
msgid "No extensions installed"
msgstr "Ühtegi laiendust pole paigaldatud"
@@ -337,6 +359,9 @@ msgstr "Kuva lähtekoodi"
msgid "Web Page"
msgstr "Veebileht"
+msgid "System Information"
+msgstr "Süsteemi andmed"
+
msgid "Undo"
msgstr "Võta tagasi"
@@ -351,9 +376,6 @@ msgstr "Rakendused"
msgid "Quit %s"
msgstr "Lõpeta %s"
-msgid "Preferences"
-msgstr "Eelistused"
-
#. Translators: This is the time format with date used
#. in 24-hour mode.
msgid "%a %b %e, %R:%S"
@@ -415,10 +437,6 @@ msgstr "toggle-switch-intl"
msgid "Please enter a command:"
msgstr "Palun sisesta käsk:"
-#, c-format
-msgid "Execution of '%s' failed:"
-msgstr "'%s' käivitamine nurjus:"
-
msgid "Available"
msgstr "Saadaval"
@@ -441,7 +459,7 @@ msgid "Log Out..."
msgstr "Logi välja..."
msgid "Suspend..."
-msgstr ""
+msgstr "Peata..."
msgid "Shut Down..."
msgstr "Lülita välja..."
@@ -465,7 +483,7 @@ msgid "Slow Keys"
msgstr "Aeglased klahvid"
msgid "Bounce Keys"
-msgstr ""
+msgstr "Põrkeklahvid"
msgid "Mouse Keys"
msgstr "Hiireklahvid"
@@ -479,19 +497,107 @@ msgstr ""
msgid "Large Text"
msgstr ""
+msgid "Bluetooth"
+msgstr "Bluetooth"
+
+msgid "Visibility"
+msgstr "Nähtavus"
+
+msgid "Send Files to Device..."
+msgstr "Failide saatmine seadmesse..."
+
+msgid "Setup a New Device..."
+msgstr ""
+
+msgid "Bluetooth Settings"
+msgstr "Bluetoothi sätted"
+
+msgid "Connection"
+msgstr "Ühendus"
+
+msgid "Send Files..."
+msgstr "Failide saatmine..."
+
+msgid "Browse Files..."
+msgstr "Failide sirvimine..."
+
+msgid "Error browsing device"
+msgstr "Viga seadme sirvimisel"
+
+#, c-format
+msgid "The requested device cannot be browsed, error is '%s'"
+msgstr ""
+
+msgid "Keyboard Settings"
+msgstr "Klaviatuurisätted"
+
+msgid "Mouse Settings"
+msgstr "Hiiresätted"
+
+msgid "Sound Settings"
+msgstr "Helisätted"
+
+msgid "Bluetooth Agent"
+msgstr "Bluetoothi agent"
+
+#, c-format
+msgid "Authorization request from %s"
+msgstr "Autoriseerimise päring seadmelt %s"
+
+#, c-format
+msgid "Device %s wants access to the service '%s'"
+msgstr "Seade %s soovib ligipääsu teenusele '%s'"
+
+msgid "Always grant access"
+msgstr "Luba alati"
+
+msgid "Grant this time only"
+msgstr "Luba ainult seekord"
+
+msgid "Reject"
+msgstr "Lükka tagasi"
+
+#, c-format
+msgid "Pairing confirmation for %s"
+msgstr "Paardumise kinnitus seadmele %s"
+
+#, c-format
+msgid "Device %s wants to pair with this computer"
+msgstr "Seade '%s' tahab selle arvutiga paarduda"
+
+#, c-format
+msgid "Please confirm whether the PIN '%s' matches the one on the device."
+msgstr "Palun kontrolli, et PIN-kood '%s' kattuks seadme parooliga."
+
+msgid "Matches"
+msgstr "Kattub"
+
+msgid "Does not match"
+msgstr "Ei kattu"
+
+#, c-format
+msgid "Pairing request for %s"
+msgstr "Seadmega %s paardumise päring"
+
+msgid "Please enter the PIN mentioned on the device."
+msgstr "Palun sisesta seadme poolt öeldav PIN-kood."
+
+msgid "OK"
+msgstr "Olgu"
+
msgid "Power Settings"
msgstr "Toitesätted..."
#, c-format
msgid "%d hour remaining"
msgid_plural "%d hours remaining"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "jäänud %d tund"
+msgstr[1] "jäänud %d tundi"
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
#, c-format
msgid "%d %s %d %s remaining"
-msgstr ""
+msgstr "jäänud %d %s ja %d %s"
msgid "hour"
msgid_plural "hours"
@@ -506,8 +612,8 @@ msgstr[1] "minutit"
#, c-format
msgid "%d minute remaining"
msgid_plural "%d minutes remaining"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "jäänud %d minut"
+msgstr[1] "jäänud %d minutit"
msgid "AC adapter"
msgstr "Võrgutoite adapter"
@@ -528,7 +634,7 @@ msgid "Keyboard"
msgstr "Klaviatuur"
msgid "PDA"
-msgstr ""
+msgstr "Elektronmärkmik"
msgid "Cell phone"
msgstr "Mobiiltelefon"
@@ -537,7 +643,7 @@ msgid "Media player"
msgstr "Meediaesitaja"
msgid "Tablet"
-msgstr ""
+msgstr "Graafikalaud"
msgid "Computer"
msgstr "Arvuti"
@@ -551,9 +657,6 @@ msgstr "Helivaljus"
msgid "Microphone"
msgstr "Mikrofon"
-msgid "Sound Settings"
-msgstr "Helisätted"
-
#, c-format
msgid "%s is online."
msgstr "%s on ühendatud."
@@ -575,7 +678,7 @@ msgstr "%s on hõivatud."
#. locale, without seconds.
#, no-c-format
msgid "Sent at %X on %A"
-msgstr ""
+msgstr "Saadetud: %a, kell %X"
msgid "Search your computer"
msgstr ""
@@ -661,6 +764,42 @@ msgstr "Otsing"
msgid "%1$s: %2$s"
msgstr "%1$s: %2$s"
+#~ msgid "Clock"
+#~ msgstr "Kell"
+
+#~ msgid "Customize the panel clock"
+#~ msgstr "Paneelikella kohandamine"
+
+#~ msgid "Custom format of the clock"
+#~ msgstr "Kellaaaja kohandatud vorming"
+
+#~ msgid "Hour format"
+#~ msgstr "Tundide vorming"
+
+#~ msgid "Clock Format"
+#~ msgstr "Kellaaja vorming"
+
+#~ msgid "Clock Preferences"
+#~ msgstr "Kella eelistused"
+
+#~ msgid "Panel Display"
+#~ msgstr "Paneelikuva"
+
+#~ msgid "Show seco_nds"
+#~ msgstr "_Sekundeid näidatakse"
+
+#~ msgid "Show the _date"
+#~ msgstr "_Kuupäeva näidatakse"
+
+#~ msgid "_12 hour format"
+#~ msgstr "_12 tunni vorming"
+
+#~ msgid "_24 hour format"
+#~ msgstr "_24 tunni vorming"
+
+#~ msgid "Preferences"
+#~ msgstr "Eelistused"
+
#~ msgid "Drag here to add favorites"
#~ msgstr "Lemmikute lisamiseks lohista need siia"
@@ -675,6 +814,3 @@ msgstr "%1$s: %2$s"
#~ msgid "Invisible"
#~ msgstr "Nähtamatu"
-
-#~ msgid "Account Information..."
-#~ msgstr "Konto andmed..."
diff --git a/po/gl.po b/po/gl.po
index fca041fbe..7be837e71 100644
--- a/po/gl.po
+++ b/po/gl.po
@@ -4,14 +4,14 @@
#
# Anton Meixome , 2009.
# Antón Méixome , 2009.
-# Fran Diéguez , 2009, 2010.
+# Fran Diéguez , 2009, 2010, 2011.
#
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-12-10 23:25+0100\n"
-"PO-Revision-Date: 2010-12-10 23:29+0100\n"
+"POT-Creation-Date: 2011-01-19 15:01+0100\n"
+"PO-Revision-Date: 2011-01-19 15:01+0100\n"
"Last-Translator: Fran Diéguez \n"
"Language-Team: Galician \n"
"Language: gl\n"
@@ -29,14 +29,6 @@ msgstr "GNOME Shell"
msgid "Window management and application launching"
msgstr "Xestor de xanelas e inicio de aplicativos"
-#: ../data/gnome-shell-clock-preferences.desktop.in.in.h:1
-msgid "Clock"
-msgstr "Reloxo"
-
-#: ../data/gnome-shell-clock-preferences.desktop.in.in.h:2
-msgid "Customize the panel clock"
-msgstr "Personalizar o reloxo do panel"
-
#: ../data/org.gnome.shell.gschema.xml.in.h:1
msgid ""
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
@@ -46,24 +38,20 @@ msgstr ""
"usando o diálogo Alt-F2."
#: ../data/org.gnome.shell.gschema.xml.in.h:2
-msgid "Custom format of the clock"
-msgstr "Formato personalizado o reloxo do panel"
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:3
msgid "Enable internal tools useful for developers and testers from Alt-F2"
msgstr ""
"Activar as ferramentas internas útiles para os desenvolvedores e probadores "
"usando Alt-F2"
-#: ../data/org.gnome.shell.gschema.xml.in.h:4
+#: ../data/org.gnome.shell.gschema.xml.in.h:3
msgid "File extension used for storing the screencast"
msgstr "Extensión de ficheiro usada para o almacenamento da screencast"
-#: ../data/org.gnome.shell.gschema.xml.in.h:5
+#: ../data/org.gnome.shell.gschema.xml.in.h:4
msgid "Framerate used for recording screencasts."
msgstr "Taxa de marcos usada para gravar as capturas de pantalla."
-#: ../data/org.gnome.shell.gschema.xml.in.h:6
+#: ../data/org.gnome.shell.gschema.xml.in.h:5
msgid ""
"GNOME Shell extensions have a uuid property; this key lists extensions which "
"should not be loaded."
@@ -71,39 +59,27 @@ msgstr ""
"As extensións do GNOME Shell teñen unha propiedade uuid. Esta chave lista as "
"extensións que non deberían cargarse."
-#: ../data/org.gnome.shell.gschema.xml.in.h:7
+#: ../data/org.gnome.shell.gschema.xml.in.h:6
msgid "History for command (Alt-F2) dialog"
msgstr "Historial do diálogo de orde (Alt-F2)"
+#: ../data/org.gnome.shell.gschema.xml.in.h:7
+msgid "If true, display date in the clock, in addition to time."
+msgstr "Se é verdadeiro, móstrase a data no reloxo, ademais da hora."
+
#: ../data/org.gnome.shell.gschema.xml.in.h:8
-msgid "Hour format"
-msgstr "Formato da hora"
+msgid "If true, display seconds in time."
+msgstr "Se é verdadeiro, móstranse os segundos na hora."
#: ../data/org.gnome.shell.gschema.xml.in.h:9
-msgid ""
-"If true and format is either \"12-hour\" or \"24-hour\", display date in the "
-"clock, in addition to time."
-msgstr ""
-"Se é verdadeiro e o formato é «12-hour» ou «24-hour» móstrase a data no "
-"reloxo, ademais da hora."
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:10
-msgid ""
-"If true and format is either \"12-hour\" or \"24-hour\", display seconds in "
-"time."
-msgstr ""
-"Se é verdadeiro e o formato é «12-hour» ou «24-hour» móstranse os segundos "
-"na hora."
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:11
msgid "If true, display the ISO week date in the calendar."
msgstr "Se é verdadeiro, móstrase a data da semana ISO no calendario."
-#: ../data/org.gnome.shell.gschema.xml.in.h:12
+#: ../data/org.gnome.shell.gschema.xml.in.h:10
msgid "List of desktop file IDs for favorite applications"
msgstr "Mostra os ID de ficheiros desktop para os aplicativos preferidos"
-#: ../data/org.gnome.shell.gschema.xml.in.h:13
+#: ../data/org.gnome.shell.gschema.xml.in.h:11
msgid ""
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
"used for gst-launch. The pipeline should have an unconnected sink pad where "
@@ -124,19 +100,19 @@ msgstr ""
"está a un valor baleiro, usarase a tubería predeterminada. Actualmente é "
"«videorate ! theoraenc ! oggmux» e grava en Ogg Theora."
-#: ../data/org.gnome.shell.gschema.xml.in.h:14
+#: ../data/org.gnome.shell.gschema.xml.in.h:12
msgid "Show date in clock"
msgstr "Mostrar a data no reloxo"
-#: ../data/org.gnome.shell.gschema.xml.in.h:15
+#: ../data/org.gnome.shell.gschema.xml.in.h:13
msgid "Show the week date in the calendar"
msgstr "Mostrar a data da semana no calendario"
-#: ../data/org.gnome.shell.gschema.xml.in.h:16
+#: ../data/org.gnome.shell.gschema.xml.in.h:14
msgid "Show time with seconds"
msgstr "Mostrar a hora con segundos"
-#: ../data/org.gnome.shell.gschema.xml.in.h:17
+#: ../data/org.gnome.shell.gschema.xml.in.h:15
msgid ""
"The applications corresponding to these identifiers will be displayed in the "
"favorites area."
@@ -144,7 +120,7 @@ msgstr ""
"Os aplicativos que corresponden a estes identificadores mostraranse na área "
"de preferidos."
-#: ../data/org.gnome.shell.gschema.xml.in.h:18
+#: ../data/org.gnome.shell.gschema.xml.in.h:16
msgid ""
"The filename for recorded screencasts will be a unique filename based on the "
"current date, and use this extension. It should be changed when recording to "
@@ -154,7 +130,7 @@ msgstr ""
"baseado na data actual e usa esta extensión. Debería cambiar ao grabar nun "
"formato de contedor diferente."
-#: ../data/org.gnome.shell.gschema.xml.in.h:19
+#: ../data/org.gnome.shell.gschema.xml.in.h:17
msgid ""
"The framerate of the resulting screencast recordered by GNOME Shell's "
"screencast recorder in frames-per-second."
@@ -162,11 +138,11 @@ msgstr ""
"A taxa de marcos do screencast resultante grabado polo grabador de "
"screencasts de GNOME Shell en marcos-por-segundo."
-#: ../data/org.gnome.shell.gschema.xml.in.h:20
+#: ../data/org.gnome.shell.gschema.xml.in.h:18
msgid "The gstreamer pipeline used to encode the screencast"
msgstr "A tubería de gstreamer usada para codificar o screencast"
-#: ../data/org.gnome.shell.gschema.xml.in.h:21
+#: ../data/org.gnome.shell.gschema.xml.in.h:19
msgid ""
"The shell normally monitors active applications in order to present the most "
"used ones (e.g. in launchers). While this data will be kept private, you may "
@@ -178,43 +154,18 @@ msgstr ""
"privados, vostede pode desactivar isto por motivos de privacidade. Teña en "
"conta que facendo isto non eliminará os datos gardados."
-#: ../data/org.gnome.shell.gschema.xml.in.h:22
-msgid ""
-"This key specifies the format used by the panel clock when the format key is "
-"set to \"custom\". You can use conversion specifiers understood by strftime"
-"() to obtain a specific format. See the strftime() manual for more "
-"information."
-msgstr ""
-"Esta chave especifica o formato usado polo reloxo do panel cando a chave de "
-"formato está estabelecida a \"custom\". Vostede pode usar os especificadores "
-"de conversión que entende strftime() para obter un formato de hora "
-"especificado. Vexa o manual de strftime() para obter máis información."
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:23
-msgid ""
-"This key specifies the hour format used by the panel clock. Possible values "
-"are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to \"unix\", "
-"the clock will display time in seconds since Epoch, i.e. 1970-01-01. If set "
-"to \"custom\", the clock will display time according to the format specified "
-"in the custom_format key. Note that if set to either \"unix\" or \"custom\", "
-"the show_date and show_seconds keys are ignored."
-msgstr ""
-"Esta chave especifica o formato de hora usado polo reloxo do panel. Os "
-"posíbeis valores son «12-hour», «24-hour», «unix» e «custom». Se está "
-"estabelecido a «unix», o reloxo mostrará a hora en segundos desde Epoch, p."
-"ex. 01-01-1970. Se está estabelecido a «custom», o reloxo mostrará a hora "
-"segundo o formato especificado na chave custom_format. Teña en conta que se "
-"está estabelecido a «unix» ou «custom», as chaves show_date e show_seconds "
-"ignoraranse."
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:24
+#: ../data/org.gnome.shell.gschema.xml.in.h:20
msgid "Uuids of extensions to disable"
msgstr "Os Uuid das extensións a desactivar"
-#: ../data/org.gnome.shell.gschema.xml.in.h:25
+#: ../data/org.gnome.shell.gschema.xml.in.h:21
msgid "Whether to collect stats about applications usage"
msgstr "Indica se recoller estatísticas sobre o uso dos aplicativos"
+#: ../data/org.gnome.shell.gschema.xml.in.h:22
+msgid "disabled OpenSearch providers"
+msgstr "fornecedores de OpenSearch desactivados"
+
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:1
msgid "Clip the crosshairs at the center"
msgstr "Poñer o punto de mira no centro"
@@ -369,51 +320,43 @@ msgstr ""
msgid "Width of the vertical and horizontal lines that make up the crosshairs."
msgstr "Anchura das liñas verticais e horizontais que contén o punto de mira."
-#: ../data/clock-preferences.ui.h:1
-msgid "Clock Format"
-msgstr "Formato do reloxo"
+#. Replace "Error invoking GLib.shell_parse_argv: " with
+#. something nicer
+#: ../js/misc/util.js:108
+msgid "Could not parse command:"
+msgstr "Non foi posíbel analizar a orde:"
-#: ../data/clock-preferences.ui.h:2
-msgid "Clock Preferences"
-msgstr "Preferencias do reloxo"
+#: ../js/misc/util.js:130
+msgid "No such application"
+msgstr "Non existe o aplicativo"
-#: ../data/clock-preferences.ui.h:3
-msgid "Panel Display"
-msgstr "Panel de visualización"
+#: ../js/misc/util.js:143 ../js/ui/runDialog.js:351
+#, c-format
+msgid "Execution of '%s' failed:"
+msgstr "Produciuse un fallo na execución de «%s»:"
-#: ../data/clock-preferences.ui.h:4
-msgid "Show seco_nds"
-msgstr "Mostrar os segu_ndos"
+#. Translators: Filter to display all applications
+#: ../js/ui/appDisplay.js:155
+msgid "All"
+msgstr "Todos"
-#: ../data/clock-preferences.ui.h:5
-msgid "Show the _date"
-msgstr "Mostrar a _data"
-
-#: ../data/clock-preferences.ui.h:6
-msgid "_12 hour format"
-msgstr "Formato _12 horas"
-
-#: ../data/clock-preferences.ui.h:7
-msgid "_24 hour format"
-msgstr "Formato _24 horas"
-
-#: ../js/ui/appDisplay.js:215
+#: ../js/ui/appDisplay.js:236
msgid "APPLICATIONS"
msgstr "APLICATIVOS"
-#: ../js/ui/appDisplay.js:245
+#: ../js/ui/appDisplay.js:266
msgid "PREFERENCES"
msgstr "PREFERENCIAS"
-#: ../js/ui/appDisplay.js:542
+#: ../js/ui/appDisplay.js:563
msgid "New Window"
msgstr "Xanela nova"
-#: ../js/ui/appDisplay.js:546
+#: ../js/ui/appDisplay.js:567
msgid "Remove from Favorites"
msgstr "Eliminar dos favoritos"
-#: ../js/ui/appDisplay.js:547
+#: ../js/ui/appDisplay.js:568
msgid "Add to Favorites"
msgstr "Engadir aos favoritos"
@@ -431,114 +374,195 @@ msgstr "%s foi eliminado dos seus favoritos."
msgid "Remove"
msgstr "Eliminar"
-#: ../js/ui/docDisplay.js:494
+#: ../js/ui/docDisplay.js:18
msgid "RECENT ITEMS"
msgstr "ELEMENTOS RECENTES"
-#: ../js/ui/lookingGlass.js:552
+#: ../js/ui/endSessionDialog.js:63
+#, c-format
+msgid "Log Out %s"
+msgstr "Saír da sesión de %s"
+
+#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:69
+msgid "Log Out"
+msgstr "Saír da sesión"
+
+#: ../js/ui/endSessionDialog.js:65
+msgid "Click Log Out to quit these applications and log out of the system."
+msgstr ""
+"Prema sobre Saír da sesión para saír de estes aplicativos e pechar a sesión."
+
+#: ../js/ui/endSessionDialog.js:66
+#, c-format
+msgid "%s will be logged out automatically in %d seconds."
+msgstr "Vaise pechar a sesión de %s de forma automática en %d segundos."
+
+#: ../js/ui/endSessionDialog.js:67
+#, c-format
+msgid "You will be logged out automatically in %d seconds."
+msgstr "A súa sesión pecharase automaticamente en %d segundos."
+
+#: ../js/ui/endSessionDialog.js:68
+msgid "Logging out of the system."
+msgstr "Saíndo da sesión."
+
+#: ../js/ui/endSessionDialog.js:74 ../js/ui/endSessionDialog.js:78
+msgid "Shut Down"
+msgstr "Apagar"
+
+#: ../js/ui/endSessionDialog.js:75
+msgid "Click Shut Down to quit these applications and shut down the system."
+msgstr ""
+"Prema sobre Apagar para saír de estes aplicativos e apagar o computador."
+
+#: ../js/ui/endSessionDialog.js:76
+#, c-format
+msgid "The system will shut down automatically in %d seconds."
+msgstr "O computador apagarase automaticamente en %d segundos."
+
+#: ../js/ui/endSessionDialog.js:77
+msgid "Shutting down the system."
+msgstr "Apagando o computador."
+
+#: ../js/ui/endSessionDialog.js:84 ../js/ui/endSessionDialog.js:88
+msgid "Restart"
+msgstr "Reiniciar"
+
+#: ../js/ui/endSessionDialog.js:85
+msgid "Click Restart to quit these applications and restart the system."
+msgstr ""
+"Prema sobre Reiniciar para saír de estes aplicativos e reiniciar o seu "
+"computador."
+
+#: ../js/ui/endSessionDialog.js:86
+#, c-format
+msgid "The system will restart automatically in %d seconds."
+msgstr "O seu computador reiniciarase automaticamente en %d segundos."
+
+#: ../js/ui/endSessionDialog.js:87
+msgid "Restarting the system."
+msgstr "Reiniciando o computador."
+
+#: ../js/ui/endSessionDialog.js:395
+msgid "Confirm"
+msgstr "Confirmar"
+
+#: ../js/ui/endSessionDialog.js:400 ../js/ui/status/bluetooth.js:470
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: ../js/ui/lookingGlass.js:556
msgid "No extensions installed"
msgstr "Non hai ningunha extensión instalada"
-#: ../js/ui/lookingGlass.js:589
+#: ../js/ui/lookingGlass.js:593
msgid "Enabled"
msgstr "Activado"
#. translators:
#. * The device has been disabled
-#: ../js/ui/lookingGlass.js:591 ../src/gvc/gvc-mixer-control.c:1087
+#: ../js/ui/lookingGlass.js:595 ../src/gvc/gvc-mixer-control.c:1087
msgid "Disabled"
msgstr "Desactivado"
-#: ../js/ui/lookingGlass.js:593
+#: ../js/ui/lookingGlass.js:597
msgid "Error"
msgstr "Erro"
-#: ../js/ui/lookingGlass.js:595
+#: ../js/ui/lookingGlass.js:599
msgid "Out of date"
msgstr "Desactualizado"
-#: ../js/ui/lookingGlass.js:620
+#: ../js/ui/lookingGlass.js:624
msgid "View Source"
msgstr "Ver fonte"
-#: ../js/ui/lookingGlass.js:626
+#: ../js/ui/lookingGlass.js:630
msgid "Web Page"
msgstr "Páxina web"
-#: ../js/ui/overview.js:112
+#: ../js/ui/messageTray.js:1765
+msgid "System Information"
+msgstr "Información do sistema"
+
+#: ../js/ui/overview.js:75
msgid "Undo"
msgstr "Desfacer"
+#: ../js/ui/overview.js:140
+msgid "Windows"
+msgstr "Xanelas"
+
+#: ../js/ui/overview.js:143
+msgid "Applications"
+msgstr "Aplicativos"
+
#. TODO - _quit() doesn't really work on apps in state STARTING yet
-#: ../js/ui/panel.js:470
+#: ../js/ui/panel.js:479
#, c-format
msgid "Quit %s"
msgstr "Saír de %s"
-#: ../js/ui/panel.js:495
-msgid "Preferences"
-msgstr "Preferencias"
-
#. Translators: This is the time format with date used
#. in 24-hour mode.
-#: ../js/ui/panel.js:581
+#: ../js/ui/panel.js:564
msgid "%a %b %e, %R:%S"
msgstr "%a %e de %b, %R:%S"
-#: ../js/ui/panel.js:582
+#: ../js/ui/panel.js:565
msgid "%a %b %e, %R"
msgstr "%a %e de %b, %R"
#. Translators: This is the time format without date used
#. in 24-hour mode.
-#: ../js/ui/panel.js:586
+#: ../js/ui/panel.js:569
msgid "%a %R:%S"
msgstr "%a %R:%S"
-#: ../js/ui/panel.js:587
+#: ../js/ui/panel.js:570
msgid "%a %R"
msgstr "%a %R"
#. Translators: This is a time format with date used
#. for AM/PM.
-#: ../js/ui/panel.js:594
+#: ../js/ui/panel.js:577
msgid "%a %b %e, %l:%M:%S %p"
msgstr "%a %e de %b, %H:%M:%S"
-#: ../js/ui/panel.js:595
+#: ../js/ui/panel.js:578
msgid "%a %b %e, %l:%M %p"
msgstr "%a %e de %b, %H:%M"
#. Translators: This is a time format without date used
#. for AM/PM.
-#: ../js/ui/panel.js:599
+#: ../js/ui/panel.js:582
msgid "%a %l:%M:%S %p"
msgstr "%a %H:%M:%S"
-#: ../js/ui/panel.js:600
+#: ../js/ui/panel.js:583
msgid "%a %l:%M %p"
msgstr "%a %l:%M %p"
#. Button on the left side of the panel.
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
-#: ../js/ui/panel.js:745
+#: ../js/ui/panel.js:728
msgid "Activities"
msgstr "Actividades"
-#: ../js/ui/placeDisplay.js:111
+#: ../js/ui/placeDisplay.js:106
#, c-format
msgid "Failed to unmount '%s'"
msgstr "Produciuse un fallo ao desmontar «%s»"
-#: ../js/ui/placeDisplay.js:114
+#: ../js/ui/placeDisplay.js:109
msgid "Retry"
msgstr "Reintentar"
-#: ../js/ui/placeDisplay.js:159
+#: ../js/ui/placeDisplay.js:150
msgid "Connect to..."
msgstr "Conectar con..."
-#: ../js/ui/placeDisplay.js:558
+#: ../js/ui/placeDisplay.js:386
msgid "PLACES & DEVICES"
msgstr "LUGARES E DISPOSITIVOS"
@@ -551,84 +575,79 @@ msgstr "LUGARES E DISPOSITIVOS"
msgid "toggle-switch-us"
msgstr "toggle-switch-intl"
-#: ../js/ui/runDialog.js:233
+#: ../js/ui/runDialog.js:209
msgid "Please enter a command:"
msgstr "Insira unha orde:"
-#: ../js/ui/runDialog.js:378
-#, c-format
-msgid "Execution of '%s' failed:"
-msgstr "Produciuse un fallo na execución de «%s»:"
-
-#: ../js/ui/statusMenu.js:101
+#: ../js/ui/statusMenu.js:102
msgid "Available"
msgstr "Dispoñíbel"
-#: ../js/ui/statusMenu.js:106
+#: ../js/ui/statusMenu.js:107
msgid "Busy"
msgstr "Ocupado"
-#: ../js/ui/statusMenu.js:114
+#: ../js/ui/statusMenu.js:115
msgid "My Account"
msgstr "A miña conta"
-#: ../js/ui/statusMenu.js:118
+#: ../js/ui/statusMenu.js:119
msgid "System Settings"
msgstr "Configuracións do sistema"
-#: ../js/ui/statusMenu.js:125
+#: ../js/ui/statusMenu.js:126
msgid "Lock Screen"
msgstr "Bloquear pantalla"
-#: ../js/ui/statusMenu.js:129
+#: ../js/ui/statusMenu.js:130
msgid "Switch User"
msgstr "Cambiar de usuario"
-#: ../js/ui/statusMenu.js:134
+#: ../js/ui/statusMenu.js:135
msgid "Log Out..."
msgstr "Saír da sesión..."
-#: ../js/ui/statusMenu.js:141
+#: ../js/ui/statusMenu.js:142
msgid "Suspend..."
msgstr "Suspender..."
-#: ../js/ui/statusMenu.js:145
+#: ../js/ui/statusMenu.js:146
msgid "Shut Down..."
msgstr "Apagar..."
-#: ../js/ui/status/accessibility.js:82
+#: ../js/ui/status/accessibility.js:83
msgid "Zoom"
msgstr "Ampliación"
-#: ../js/ui/status/accessibility.js:88
+#: ../js/ui/status/accessibility.js:89
msgid "Screen Reader"
msgstr "Lector de pantalla"
-#: ../js/ui/status/accessibility.js:91
+#: ../js/ui/status/accessibility.js:92
msgid "Screen Keyboard"
msgstr "Teclado en pantalla"
-#: ../js/ui/status/accessibility.js:94
+#: ../js/ui/status/accessibility.js:95
msgid "Visual Alerts"
msgstr "Alertas visuais"
-#: ../js/ui/status/accessibility.js:97
+#: ../js/ui/status/accessibility.js:98
msgid "Sticky Keys"
msgstr "Teclas persistentes"
-#: ../js/ui/status/accessibility.js:100
+#: ../js/ui/status/accessibility.js:101
msgid "Slow Keys"
msgstr "Teclas lentas"
-#: ../js/ui/status/accessibility.js:103
+#: ../js/ui/status/accessibility.js:104
msgid "Bounce Keys"
msgstr "Rebote das teclas"
-#: ../js/ui/status/accessibility.js:106
+#: ../js/ui/status/accessibility.js:107
msgid "Mouse Keys"
msgstr "Teclas do Rato"
-#: ../js/ui/status/accessibility.js:110
+#: ../js/ui/status/accessibility.js:111
msgid "Universal Access Settings"
msgstr "Configuracións de acceso universal"
@@ -640,15 +659,127 @@ msgstr "Alto contraste"
msgid "Large Text"
msgstr "Texto máis grande"
-#: ../js/ui/status/power.js:87
-msgid "What's using power..."
-msgstr "Que está usando enerxía..."
+#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:241
+msgid "Bluetooth"
+msgstr "Bluetooth"
-#: ../js/ui/status/power.js:90
+#: ../js/ui/status/bluetooth.js:55
+msgid "Visibility"
+msgstr "Visibilidade"
+
+#: ../js/ui/status/bluetooth.js:69
+msgid "Send Files to Device..."
+msgstr "Enviar ficheiros ao dispositivo..."
+
+#: ../js/ui/status/bluetooth.js:70
+msgid "Setup a New Device..."
+msgstr "Configurar un novo dispositivo..."
+
+#: ../js/ui/status/bluetooth.js:95
+msgid "Bluetooth Settings"
+msgstr "Configuracións de Bluetooth"
+
+#: ../js/ui/status/bluetooth.js:192
+msgid "Connection"
+msgstr "Conexión"
+
+#: ../js/ui/status/bluetooth.js:228
+msgid "Send Files..."
+msgstr "Enviar ficheiros..."
+
+#: ../js/ui/status/bluetooth.js:233
+msgid "Browse Files..."
+msgstr "Explorar ficheiros..."
+
+#: ../js/ui/status/bluetooth.js:242
+msgid "Error browsing device"
+msgstr "Produciuse un erro ao explorar o dispositivo"
+
+#: ../js/ui/status/bluetooth.js:243
+#, c-format
+msgid "The requested device cannot be browsed, error is '%s'"
+msgstr "O dispositivo solicitado non pode explorarse, o erro foi «%s»"
+
+#: ../js/ui/status/bluetooth.js:251 ../js/ui/status/keyboard.js:78
+msgid "Keyboard Settings"
+msgstr "Configuracións do teclado"
+
+#: ../js/ui/status/bluetooth.js:256
+msgid "Mouse Settings"
+msgstr "Configuracións do rato"
+
+#: ../js/ui/status/bluetooth.js:263 ../js/ui/status/volume.js:63
+msgid "Sound Settings"
+msgstr "Configuracións do son"
+
+#: ../js/ui/status/bluetooth.js:337 ../js/ui/status/bluetooth.js:371
+#: ../js/ui/status/bluetooth.js:411 ../js/ui/status/bluetooth.js:444
+msgid "Bluetooth Agent"
+msgstr "Axente Bluetooth"
+
+#: ../js/ui/status/bluetooth.js:372
+#, c-format
+msgid "Authorization request from %s"
+msgstr "Solicitude de autorización de %s"
+
+#: ../js/ui/status/bluetooth.js:378
+#, c-format
+msgid "Device %s wants access to the service '%s'"
+msgstr "O dispositivo %s quere acceder ao servizo «%s»"
+
+#: ../js/ui/status/bluetooth.js:380
+msgid "Always grant access"
+msgstr "Conceder acceso sempre"
+
+#: ../js/ui/status/bluetooth.js:381
+msgid "Grant this time only"
+msgstr "Conceder só esta vez"
+
+#: ../js/ui/status/bluetooth.js:382
+msgid "Reject"
+msgstr "Rexeitar"
+
+#: ../js/ui/status/bluetooth.js:412
+#, c-format
+msgid "Pairing confirmation for %s"
+msgstr "Confirmación de emparellado para «%s»"
+
+#: ../js/ui/status/bluetooth.js:418 ../js/ui/status/bluetooth.js:452
+#, c-format
+msgid "Device %s wants to pair with this computer"
+msgstr "O dispositivo «%s» quere emparellarse con este equipo"
+
+#: ../js/ui/status/bluetooth.js:419
+#, c-format
+msgid "Please confirm whether the PIN '%s' matches the one on the device."
+msgstr "Confirme que o PIN mostrado en «%s» coincide co do dispositivo."
+
+#: ../js/ui/status/bluetooth.js:421
+msgid "Matches"
+msgstr "Coincide"
+
+#: ../js/ui/status/bluetooth.js:422
+msgid "Does not match"
+msgstr "Non coincide"
+
+#: ../js/ui/status/bluetooth.js:445
+#, c-format
+msgid "Pairing request for %s"
+msgstr "Solicitude de emparellamento para «%s»"
+
+#: ../js/ui/status/bluetooth.js:453
+msgid "Please enter the PIN mentioned on the device."
+msgstr "Introduza o PIN mencionado no dispositivo."
+
+#: ../js/ui/status/bluetooth.js:469
+msgid "OK"
+msgstr "Aceptar"
+
+#: ../js/ui/status/power.js:85
msgid "Power Settings"
msgstr "Configuracións de enerxía"
-#: ../js/ui/status/power.js:117
+#: ../js/ui/status/power.js:112
#, c-format
msgid "%d hour remaining"
msgid_plural "%d hours remaining"
@@ -656,89 +787,113 @@ msgstr[0] "%d hora restante"
msgstr[1] "%d horas restante"
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
-#: ../js/ui/status/power.js:120
+#: ../js/ui/status/power.js:115
#, c-format
msgid "%d %s %d %s remaining"
msgstr "%d %s %d %s retante"
-#: ../js/ui/status/power.js:122
+#: ../js/ui/status/power.js:117
msgid "hour"
msgid_plural "hours"
msgstr[0] "hora"
msgstr[1] "horas"
-#: ../js/ui/status/power.js:122
+#: ../js/ui/status/power.js:117
msgid "minute"
msgid_plural "minutes"
msgstr[0] "minuto"
msgstr[1] "minutos"
-#: ../js/ui/status/power.js:125
+#: ../js/ui/status/power.js:120
#, c-format
msgid "%d minute remaining"
msgid_plural "%d minutes remaining"
msgstr[0] "%d minuto restante"
msgstr[1] "%d minutos restantes"
-#: ../js/ui/status/power.js:244
+#: ../js/ui/status/power.js:235
msgid "AC adapter"
msgstr "Adaptador de corrente"
-#: ../js/ui/status/power.js:246
+#: ../js/ui/status/power.js:237
msgid "Laptop battery"
msgstr "Batería do portátil"
-#: ../js/ui/status/power.js:248
+#: ../js/ui/status/power.js:239
msgid "UPS"
msgstr "UPS"
-#: ../js/ui/status/power.js:250
+#: ../js/ui/status/power.js:241
msgid "Monitor"
msgstr "Monitor"
-#: ../js/ui/status/power.js:252
+#: ../js/ui/status/power.js:243
msgid "Mouse"
msgstr "Rato"
-#: ../js/ui/status/power.js:254
+#: ../js/ui/status/power.js:245
msgid "Keyboard"
msgstr "Teclado"
-#: ../js/ui/status/power.js:256
+#: ../js/ui/status/power.js:247
msgid "PDA"
msgstr "PDA"
-#: ../js/ui/status/power.js:258
+#: ../js/ui/status/power.js:249
msgid "Cell phone"
msgstr "Teléfono móbil"
-#: ../js/ui/status/power.js:260
+#: ../js/ui/status/power.js:251
msgid "Media player"
msgstr "Reprodutor multimedia"
-#: ../js/ui/status/power.js:262
+#: ../js/ui/status/power.js:253
msgid "Tablet"
msgstr "Tablet"
-#: ../js/ui/status/power.js:264
+#: ../js/ui/status/power.js:255
msgid "Computer"
msgstr "Computador"
-#: ../js/ui/status/power.js:266 ../src/shell-app-system.c:1012
+#: ../js/ui/status/power.js:257 ../src/shell-app-system.c:1012
msgid "Unknown"
msgstr "Descoñecido"
-#: ../js/ui/status/volume.js:41
+#: ../js/ui/status/volume.js:42
msgid "Volume"
msgstr "Volume"
-#: ../js/ui/status/volume.js:54
+#: ../js/ui/status/volume.js:55
msgid "Microphone"
msgstr "Micrófono"
-#: ../js/ui/status/volume.js:62
-msgid "Sound Settings"
-msgstr "Configuracións de son"
+#: ../js/ui/telepathyClient.js:561
+#, c-format
+msgid "%s is online."
+msgstr "%s está conectado/a."
+
+#: ../js/ui/telepathyClient.js:566
+#, c-format
+msgid "%s is offline."
+msgstr "%s está desconectado/a."
+
+#: ../js/ui/telepathyClient.js:569
+#, c-format
+msgid "%s is away."
+msgstr "%s está ausente."
+
+#: ../js/ui/telepathyClient.js:572
+#, c-format
+msgid "%s is busy."
+msgstr "%s está ocupado/a."
+
+#. Translators: this is a time format string followed by a date.
+#. If applicable, replace %X with a strftime format valid for your
+#. locale, without seconds.
+#: ../js/ui/telepathyClient.js:666
+#, no-c-format
+msgid "Sent at %X on %A"
+msgstr "Enviado ás %X o %A"
#: ../js/ui/viewSelector.js:26
msgid "Search your computer"
@@ -787,32 +942,32 @@ msgstr[1] "%u entradas"
msgid "System Sounds"
msgstr "Sons do sistema"
-#: ../src/shell-global.c:1155
+#: ../src/shell-global.c:1366
msgid "Less than a minute ago"
msgstr "Hai menos dun minuto"
-#: ../src/shell-global.c:1159
+#: ../src/shell-global.c:1370
#, c-format
msgid "%d minute ago"
msgid_plural "%d minutes ago"
msgstr[0] "hai %d minuto"
msgstr[1] "hai %d minutos"
-#: ../src/shell-global.c:1164
+#: ../src/shell-global.c:1375
#, c-format
msgid "%d hour ago"
msgid_plural "%d hours ago"
msgstr[0] "hai %d hora"
msgstr[1] "hai %d horas"
-#: ../src/shell-global.c:1169
+#: ../src/shell-global.c:1380
#, c-format
msgid "%d day ago"
msgid_plural "%d days ago"
msgstr[0] "hai %d día"
msgstr[1] "hai %d días"
-#: ../src/shell-global.c:1174
+#: ../src/shell-global.c:1385
#, c-format
msgid "%d week ago"
msgid_plural "%d weeks ago"
@@ -843,6 +998,81 @@ msgstr "Buscar"
msgid "%1$s: %2$s"
msgstr "%1$s: %2$s"
+#~ msgid "Clock"
+#~ msgstr "Reloxo"
+
+#~ msgid "Customize the panel clock"
+#~ msgstr "Personalizar o reloxo do panel"
+
+#~ msgid "Custom format of the clock"
+#~ msgstr "Formato personalizado o reloxo do panel"
+
+#~ msgid "Hour format"
+#~ msgstr "Formato da hora"
+
+#~ msgid ""
+#~ "If true and format is either \"12-hour\" or \"24-hour\", display seconds "
+#~ "in time."
+#~ msgstr ""
+#~ "Se é verdadeiro e o formato é «12-hour» ou «24-hour» móstranse os "
+#~ "segundos na hora."
+
+#~ msgid ""
+#~ "This key specifies the format used by the panel clock when the format key "
+#~ "is set to \"custom\". You can use conversion specifiers understood by "
+#~ "strftime() to obtain a specific format. See the strftime() manual for "
+#~ "more information."
+#~ msgstr ""
+#~ "Esta chave especifica o formato usado polo reloxo do panel cando a chave "
+#~ "de formato está estabelecida a \"custom\". Vostede pode usar os "
+#~ "especificadores de conversión que entende strftime() para obter un "
+#~ "formato de hora especificado. Vexa o manual de strftime() para obter máis "
+#~ "información."
+
+#~ msgid ""
+#~ "This key specifies the hour format used by the panel clock. Possible "
+#~ "values are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to "
+#~ "\"unix\", the clock will display time in seconds since Epoch, i.e. "
+#~ "1970-01-01. If set to \"custom\", the clock will display time according "
+#~ "to the format specified in the custom_format key. Note that if set to "
+#~ "either \"unix\" or \"custom\", the show_date and show_seconds keys are "
+#~ "ignored."
+#~ msgstr ""
+#~ "Esta chave especifica o formato de hora usado polo reloxo do panel. Os "
+#~ "posíbeis valores son «12-hour», «24-hour», «unix» e «custom». Se está "
+#~ "estabelecido a «unix», o reloxo mostrará a hora en segundos desde Epoch, "
+#~ "p.ex. 01-01-1970. Se está estabelecido a «custom», o reloxo mostrará a "
+#~ "hora segundo o formato especificado na chave custom_format. Teña en conta "
+#~ "que se está estabelecido a «unix» ou «custom», as chaves show_date e "
+#~ "show_seconds ignoraranse."
+
+#~ msgid "Clock Format"
+#~ msgstr "Formato do reloxo"
+
+#~ msgid "Clock Preferences"
+#~ msgstr "Preferencias do reloxo"
+
+#~ msgid "Panel Display"
+#~ msgstr "Panel de visualización"
+
+#~ msgid "Show seco_nds"
+#~ msgstr "Mostrar os segu_ndos"
+
+#~ msgid "Show the _date"
+#~ msgstr "Mostrar a _data"
+
+#~ msgid "_12 hour format"
+#~ msgstr "Formato _12 horas"
+
+#~ msgid "_24 hour format"
+#~ msgstr "Formato _24 horas"
+
+#~ msgid "Preferences"
+#~ msgstr "Preferencias"
+
+#~ msgid "What's using power..."
+#~ msgstr "Que está usando enerxía..."
+
#~ msgid "Overview workspace view mode"
#~ msgstr "Modo de visualización do espazo de traballo de vista previa"
@@ -868,15 +1098,9 @@ msgstr "%1$s: %2$s"
#~ msgid "Invisible"
#~ msgstr "Invisíbel"
-#~ msgid "Restart..."
-#~ msgstr "Reiniciar..."
-
#~ msgid "System Preferences..."
#~ msgstr "Preferencias do sistema..."
-#~ msgid "Account Information..."
-#~ msgstr "Información da conta..."
-
#~ msgid "ON"
#~ msgstr "⚫"
diff --git a/po/he.po b/po/he.po
index 630aa81c1..fda1af7c1 100644
--- a/po/he.po
+++ b/po/he.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-12-19 01:04+0200\n"
-"PO-Revision-Date: 2010-12-19 01:04+0200\n"
+"POT-Creation-Date: 2011-01-18 13:02+0200\n"
+"PO-Revision-Date: 2011-01-18 13:05+0200\n"
"Last-Translator: Yaron Shahrabani \n"
"Language-Team: Hebrew \n"
"MIME-Version: 1.0\n"
@@ -25,14 +25,6 @@ msgstr "מעטפת GNOME"
msgid "Window management and application launching"
msgstr "ניהול חלונות והרצת יישומים"
-#: ../data/gnome-shell-clock-preferences.desktop.in.in.h:1
-msgid "Clock"
-msgstr "שעון"
-
-#: ../data/gnome-shell-clock-preferences.desktop.in.in.h:2
-msgid "Customize the panel clock"
-msgstr "התאמת לוח השעון"
-
#: ../data/org.gnome.shell.gschema.xml.in.h:1
msgid ""
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
@@ -42,22 +34,18 @@ msgstr ""
"dialog."
#: ../data/org.gnome.shell.gschema.xml.in.h:2
-msgid "Custom format of the clock"
-msgstr "Custom format of the clock"
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:3
msgid "Enable internal tools useful for developers and testers from Alt-F2"
msgstr "Enable internal tools useful for developers and testers from Alt-F2"
-#: ../data/org.gnome.shell.gschema.xml.in.h:4
+#: ../data/org.gnome.shell.gschema.xml.in.h:3
msgid "File extension used for storing the screencast"
msgstr "File extension used for storing the screencast"
-#: ../data/org.gnome.shell.gschema.xml.in.h:5
+#: ../data/org.gnome.shell.gschema.xml.in.h:4
msgid "Framerate used for recording screencasts."
msgstr "Framerate used for recording screencasts."
-#: ../data/org.gnome.shell.gschema.xml.in.h:6
+#: ../data/org.gnome.shell.gschema.xml.in.h:5
msgid ""
"GNOME Shell extensions have a uuid property; this key lists extensions which "
"should not be loaded."
@@ -65,39 +53,27 @@ msgstr ""
"GNOME Shell extensions have a uuid property; this key lists extensions which "
"should not be loaded."
-#: ../data/org.gnome.shell.gschema.xml.in.h:7
+#: ../data/org.gnome.shell.gschema.xml.in.h:6
msgid "History for command (Alt-F2) dialog"
msgstr "History for command (Alt-F2) dialog"
+#: ../data/org.gnome.shell.gschema.xml.in.h:7
+msgid "If true, display date in the clock, in addition to time."
+msgstr "If true, display date in the clock, in addition to time."
+
#: ../data/org.gnome.shell.gschema.xml.in.h:8
-msgid "Hour format"
-msgstr "Hour format"
+msgid "If true, display seconds in time."
+msgstr "If true, display seconds in time."
#: ../data/org.gnome.shell.gschema.xml.in.h:9
-msgid ""
-"If true and format is either \"12-hour\" or \"24-hour\", display date in the "
-"clock, in addition to time."
-msgstr ""
-"If true and format is either \"12-hour\" or \"24-hour\", display date in the "
-"clock, in addition to time."
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:10
-msgid ""
-"If true and format is either \"12-hour\" or \"24-hour\", display seconds in "
-"time."
-msgstr ""
-"If true and format is either \"12-hour\" or \"24-hour\", display seconds in "
-"time."
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:11
msgid "If true, display the ISO week date in the calendar."
msgstr "If true, display the ISO week date in the calendar."
-#: ../data/org.gnome.shell.gschema.xml.in.h:12
+#: ../data/org.gnome.shell.gschema.xml.in.h:10
msgid "List of desktop file IDs for favorite applications"
msgstr "List of desktop file IDs for favorite applications"
-#: ../data/org.gnome.shell.gschema.xml.in.h:13
+#: ../data/org.gnome.shell.gschema.xml.in.h:11
msgid ""
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
"used for gst-launch. The pipeline should have an unconnected sink pad where "
@@ -117,49 +93,49 @@ msgstr ""
"to an empty value, the default pipeline will be used. This is currently "
"'videorate ! theoraenc ! oggmux' and records to Ogg Theora."
-#: ../data/org.gnome.shell.gschema.xml.in.h:14
+#: ../data/org.gnome.shell.gschema.xml.in.h:12
msgid "Show date in clock"
msgstr "Show date in clock"
-#: ../data/org.gnome.shell.gschema.xml.in.h:15
+#: ../data/org.gnome.shell.gschema.xml.in.h:13
msgid "Show the week date in the calendar"
msgstr "Show the week date in the calendar"
-#: ../data/org.gnome.shell.gschema.xml.in.h:16
+#: ../data/org.gnome.shell.gschema.xml.in.h:14
msgid "Show time with seconds"
msgstr "Show time with seconds"
+#: ../data/org.gnome.shell.gschema.xml.in.h:15
+msgid ""
+"The applications corresponding to these identifiers will be displayed in the "
+"favorites area."
+msgstr ""
+"The applications corresponding to these identifiers will be displayed in the "
+"favorites area."
+
+#: ../data/org.gnome.shell.gschema.xml.in.h:16
+msgid ""
+"The filename for recorded screencasts will be a unique filename based on the "
+"current date, and use this extension. It should be changed when recording to "
+"a different container format."
+msgstr ""
+"The filename for recorded screencasts will be a unique filename based on the "
+"current date, and use this extension. It should be changed when recording to "
+"a different container format."
+
#: ../data/org.gnome.shell.gschema.xml.in.h:17
msgid ""
-"The applications corresponding to these identifiers will be displayed in the "
-"favorites area."
+"The framerate of the resulting screencast recordered by GNOME Shell's "
+"screencast recorder in frames-per-second."
msgstr ""
-"The applications corresponding to these identifiers will be displayed in the "
-"favorites area."
+"The framerate of the resulting screencast recordered by GNOME Shell's "
+"screencast recorder in frames-per-second."
#: ../data/org.gnome.shell.gschema.xml.in.h:18
-msgid ""
-"The filename for recorded screencasts will be a unique filename based on the "
-"current date, and use this extension. It should be changed when recording to "
-"a different container format."
-msgstr ""
-"The filename for recorded screencasts will be a unique filename based on the "
-"current date, and use this extension. It should be changed when recording to "
-"a different container format."
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:19
-msgid ""
-"The framerate of the resulting screencast recordered by GNOME Shell's "
-"screencast recorder in frames-per-second."
-msgstr ""
-"The framerate of the resulting screencast recordered by GNOME Shell's "
-"screencast recorder in frames-per-second."
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:20
msgid "The gstreamer pipeline used to encode the screencast"
msgstr "The gstreamer pipeline used to encode the screencast"
-#: ../data/org.gnome.shell.gschema.xml.in.h:21
+#: ../data/org.gnome.shell.gschema.xml.in.h:19
msgid ""
"The shell normally monitors active applications in order to present the most "
"used ones (e.g. in launchers). While this data will be kept private, you may "
@@ -171,42 +147,18 @@ msgstr ""
"want to disable this for privacy reasons. Please note that doing so won't "
"remove already saved data."
-#: ../data/org.gnome.shell.gschema.xml.in.h:22
-msgid ""
-"This key specifies the format used by the panel clock when the format key is "
-"set to \"custom\". You can use conversion specifiers understood by strftime"
-"() to obtain a specific format. See the strftime() manual for more "
-"information."
-msgstr ""
-"This key specifies the format used by the panel clock when the format key is "
-"set to \"custom\". You can use conversion specifiers understood by strftime"
-"() to obtain a specific format. See the strftime() manual for more "
-"information."
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:23
-msgid ""
-"This key specifies the hour format used by the panel clock. Possible values "
-"are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to \"unix\", "
-"the clock will display time in seconds since Epoch, i.e. 1970-01-01. If set "
-"to \"custom\", the clock will display time according to the format specified "
-"in the custom_format key. Note that if set to either \"unix\" or \"custom\", "
-"the show_date and show_seconds keys are ignored."
-msgstr ""
-"This key specifies the hour format used by the panel clock. Possible values "
-"are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to \"unix\", "
-"the clock will display time in seconds since Epoch, i.e. 1970-01-01. If set "
-"to \"custom\", the clock will display time according to the format specified "
-"in the custom_format key. Note that if set to either \"unix\" or \"custom\", "
-"the show_date and show_seconds keys are ignored."
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:24
+#: ../data/org.gnome.shell.gschema.xml.in.h:20
msgid "Uuids of extensions to disable"
msgstr "Uuids of extensions to disable"
-#: ../data/org.gnome.shell.gschema.xml.in.h:25
+#: ../data/org.gnome.shell.gschema.xml.in.h:21
msgid "Whether to collect stats about applications usage"
msgstr "Whether to collect stats about applications usage"
+#: ../data/org.gnome.shell.gschema.xml.in.h:22
+msgid "disabled OpenSearch providers"
+msgstr "disabled OpenSearch providers"
+
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:1
msgid "Clip the crosshairs at the center"
msgstr "Clip the crosshairs at the center"
@@ -362,55 +314,43 @@ msgid "Width of the vertical and horizontal lines that make up the crosshairs."
msgstr ""
"Width of the vertical and horizontal lines that make up the crosshairs."
-#: ../data/clock-preferences.ui.h:1
-msgid "Clock Format"
-msgstr "מבנה השעון"
+#. Replace "Error invoking GLib.shell_parse_argv: " with
+#. something nicer
+#: ../js/misc/util.js:108
+msgid "Could not parse command:"
+msgstr "לא ניתן לפענח את הפקודה:"
-#: ../data/clock-preferences.ui.h:2
-msgid "Clock Preferences"
-msgstr "העדפות השעון"
+#: ../js/misc/util.js:130
+msgid "No such application"
+msgstr "אין כזה יישום"
-#: ../data/clock-preferences.ui.h:3
-msgid "Panel Display"
-msgstr "תצוגת הלוח"
+#: ../js/misc/util.js:143 ../js/ui/runDialog.js:351
+#, c-format
+msgid "Execution of '%s' failed:"
+msgstr "ההרצה של '%s' נכשלה:"
-#: ../data/clock-preferences.ui.h:4
-msgid "Show seco_nds"
-msgstr "הצגת ש_ניות"
-
-#: ../data/clock-preferences.ui.h:5
-msgid "Show the _date"
-msgstr "הצגת ה_תאריך"
-
-#: ../data/clock-preferences.ui.h:6
-msgid "_12 hour format"
-msgstr "מבנה _12 שעות"
-
-#: ../data/clock-preferences.ui.h:7
-msgid "_24 hour format"
-msgstr "מבנה _24 שעות"
-
-#: ../js/ui/appDisplay.js:154
+#. Translators: Filter to display all applications
+#: ../js/ui/appDisplay.js:155
msgid "All"
msgstr "הכול"
-#: ../js/ui/appDisplay.js:235
+#: ../js/ui/appDisplay.js:236
msgid "APPLICATIONS"
msgstr "יישומים"
-#: ../js/ui/appDisplay.js:265
+#: ../js/ui/appDisplay.js:266
msgid "PREFERENCES"
msgstr "העדפות"
-#: ../js/ui/appDisplay.js:562
+#: ../js/ui/appDisplay.js:563
msgid "New Window"
msgstr "חלון חדש"
-#: ../js/ui/appDisplay.js:566
+#: ../js/ui/appDisplay.js:567
msgid "Remove from Favorites"
msgstr "הסרה מהמועדפים"
-#: ../js/ui/appDisplay.js:567
+#: ../js/ui/appDisplay.js:568
msgid "Add to Favorites"
msgstr "הוספה למועדפים"
@@ -428,122 +368,191 @@ msgstr "%s הוסר מהמועדפים שלך."
msgid "Remove"
msgstr "הסרה"
-#: ../js/ui/docDisplay.js:494
+#: ../js/ui/docDisplay.js:18
msgid "RECENT ITEMS"
msgstr "פריטים אחרונים"
-#: ../js/ui/lookingGlass.js:552
+#: ../js/ui/endSessionDialog.js:63
+#, c-format
+msgid "Log Out %s"
+msgstr "הוצאת %s"
+
+#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:69
+msgid "Log Out"
+msgstr "יציאה"
+
+#: ../js/ui/endSessionDialog.js:65
+msgid "Click Log Out to quit these applications and log out of the system."
+msgstr "יש ללחוץ על יציאה כדי לסגור יישומים אלה ולצאת מהמערכת."
+
+#: ../js/ui/endSessionDialog.js:66
+#, c-format
+msgid "%s will be logged out automatically in %d seconds."
+msgstr "המשתמש %s ייצא אוטומטית בעוד %d שניות."
+
+#: ../js/ui/endSessionDialog.js:67
+#, c-format
+msgid "You will be logged out automatically in %d seconds."
+msgstr "המערכת תוציא אותך אוטומטית בעוד %d שניות."
+
+#: ../js/ui/endSessionDialog.js:68
+msgid "Logging out of the system."
+msgstr "מתבצעת יציאה מהמערכת."
+
+#: ../js/ui/endSessionDialog.js:74 ../js/ui/endSessionDialog.js:78
+msgid "Shut Down"
+msgstr "כיבוי"
+
+#: ../js/ui/endSessionDialog.js:75
+msgid "Click Shut Down to quit these applications and shut down the system."
+msgstr "יש ללחוץ על יציאה כדי לסגור יישומים אלה ולכבות את המערכת."
+
+#: ../js/ui/endSessionDialog.js:76
+#, c-format
+msgid "The system will shut down automatically in %d seconds."
+msgstr "המערכת תכבה אוטומטית בעוד %d שניות."
+
+#: ../js/ui/endSessionDialog.js:77
+msgid "Shutting down the system."
+msgstr "המערכת נכבית."
+
+#: ../js/ui/endSessionDialog.js:84 ../js/ui/endSessionDialog.js:88
+msgid "Restart"
+msgstr "הפעלה מחדש"
+
+#: ../js/ui/endSessionDialog.js:85
+msgid "Click Restart to quit these applications and restart the system."
+msgstr "יש ללחוץ על יציאה כדי לסגור יישומים אלה ולהפעיל את המערכת מחדש."
+
+#: ../js/ui/endSessionDialog.js:86
+#, c-format
+msgid "The system will restart automatically in %d seconds."
+msgstr "המערכת תופעל מחדש בעוד %d שניות."
+
+#: ../js/ui/endSessionDialog.js:87
+msgid "Restarting the system."
+msgstr "המערכת מופעלת מחדש"
+
+#: ../js/ui/endSessionDialog.js:395
+msgid "Confirm"
+msgstr "אישור"
+
+#: ../js/ui/endSessionDialog.js:400 ../js/ui/status/bluetooth.js:470
+msgid "Cancel"
+msgstr "ביטול"
+
+#: ../js/ui/lookingGlass.js:556
msgid "No extensions installed"
msgstr "לא מותקנות הרחבות"
-#: ../js/ui/lookingGlass.js:589
+#: ../js/ui/lookingGlass.js:593
msgid "Enabled"
msgstr "פעיל"
#. translators:
#. * The device has been disabled
-#: ../js/ui/lookingGlass.js:591 ../src/gvc/gvc-mixer-control.c:1087
+#: ../js/ui/lookingGlass.js:595 ../src/gvc/gvc-mixer-control.c:1087
msgid "Disabled"
msgstr "מנוטרל"
-#: ../js/ui/lookingGlass.js:593
+#: ../js/ui/lookingGlass.js:597
msgid "Error"
msgstr "שגיאה"
-#: ../js/ui/lookingGlass.js:595
+#: ../js/ui/lookingGlass.js:599
msgid "Out of date"
msgstr "לא בתוקף"
-#: ../js/ui/lookingGlass.js:620
+#: ../js/ui/lookingGlass.js:624
msgid "View Source"
msgstr "צפייה במקור"
-#: ../js/ui/lookingGlass.js:626
+#: ../js/ui/lookingGlass.js:630
msgid "Web Page"
msgstr "דף אינטרנט"
-#: ../js/ui/overview.js:96
+#: ../js/ui/messageTray.js:1748
+msgid "System Information"
+msgstr "פרטי המערכת"
+
+#: ../js/ui/overview.js:75
msgid "Undo"
msgstr "ביטול"
-#: ../js/ui/overview.js:158
+#: ../js/ui/overview.js:140
msgid "Windows"
msgstr "חלונות"
-#: ../js/ui/overview.js:161
+#: ../js/ui/overview.js:143
msgid "Applications"
msgstr "יישומים"
#. TODO - _quit() doesn't really work on apps in state STARTING yet
-#: ../js/ui/panel.js:474
+#: ../js/ui/panel.js:479
#, c-format
msgid "Quit %s"
msgstr "יציאה מ־%s"
-#: ../js/ui/panel.js:499
-msgid "Preferences"
-msgstr "העדפות"
-
#. Translators: This is the time format with date used
#. in 24-hour mode.
-#: ../js/ui/panel.js:585
+#: ../js/ui/panel.js:564
msgid "%a %b %e, %R:%S"
msgstr "%a %b %e, %R:%S"
-#: ../js/ui/panel.js:586
+#: ../js/ui/panel.js:565
msgid "%a %b %e, %R"
msgstr "%a %b %e, %R"
#. Translators: This is the time format without date used
#. in 24-hour mode.
-#: ../js/ui/panel.js:590
+#: ../js/ui/panel.js:569
msgid "%a %R:%S"
msgstr "%a %R:%S"
-#: ../js/ui/panel.js:591
+#: ../js/ui/panel.js:570
msgid "%a %R"
msgstr "%a %R"
#. Translators: This is a time format with date used
#. for AM/PM.
-#: ../js/ui/panel.js:598
+#: ../js/ui/panel.js:577
msgid "%a %b %e, %l:%M:%S %p"
msgstr "%a %b %e, %l:%M:%S %p"
-#: ../js/ui/panel.js:599
+#: ../js/ui/panel.js:578
msgid "%a %b %e, %l:%M %p"
msgstr "%a %b %e, %l:%M %p"
#. Translators: This is a time format without date used
#. for AM/PM.
-#: ../js/ui/panel.js:603
+#: ../js/ui/panel.js:582
msgid "%a %l:%M:%S %p"
msgstr "%a %l:%M:%S %p"
-#: ../js/ui/panel.js:604
+#: ../js/ui/panel.js:583
msgid "%a %l:%M %p"
msgstr "%a %l:%M %p"
#. Button on the left side of the panel.
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
-#: ../js/ui/panel.js:749
+#: ../js/ui/panel.js:728
msgid "Activities"
msgstr "פעילויות"
-#: ../js/ui/placeDisplay.js:111
+#: ../js/ui/placeDisplay.js:106
#, c-format
msgid "Failed to unmount '%s'"
msgstr "אירע כשל בניתוק '%s'"
-#: ../js/ui/placeDisplay.js:114
+#: ../js/ui/placeDisplay.js:109
msgid "Retry"
msgstr "ניסיון חוזר"
-#: ../js/ui/placeDisplay.js:159
+#: ../js/ui/placeDisplay.js:150
msgid "Connect to..."
msgstr "התחברות אל..."
-#: ../js/ui/placeDisplay.js:558
+#: ../js/ui/placeDisplay.js:386
msgid "PLACES & DEVICES"
msgstr "מקומות והתקנים"
@@ -556,84 +565,79 @@ msgstr "מקומות והתקנים"
msgid "toggle-switch-us"
msgstr "toggle-switch-intl"
-#: ../js/ui/runDialog.js:233
+#: ../js/ui/runDialog.js:209
msgid "Please enter a command:"
msgstr "נא להזין פקודה:"
-#: ../js/ui/runDialog.js:378
-#, c-format
-msgid "Execution of '%s' failed:"
-msgstr "ההרצה של '%s' נכשלה:"
-
-#: ../js/ui/statusMenu.js:101
+#: ../js/ui/statusMenu.js:102
msgid "Available"
msgstr "זמין"
-#: ../js/ui/statusMenu.js:106
+#: ../js/ui/statusMenu.js:107
msgid "Busy"
msgstr "עסוק"
-#: ../js/ui/statusMenu.js:114
+#: ../js/ui/statusMenu.js:115
msgid "My Account"
msgstr "החשבון שלי"
-#: ../js/ui/statusMenu.js:118
+#: ../js/ui/statusMenu.js:119
msgid "System Settings"
msgstr "הגדרות המערכת"
-#: ../js/ui/statusMenu.js:125
+#: ../js/ui/statusMenu.js:126
msgid "Lock Screen"
msgstr "נעילת המסך"
-#: ../js/ui/statusMenu.js:129
+#: ../js/ui/statusMenu.js:130
msgid "Switch User"
msgstr "החלפת משתמש"
-#: ../js/ui/statusMenu.js:134
+#: ../js/ui/statusMenu.js:135
msgid "Log Out..."
msgstr "ניתוק..."
-#: ../js/ui/statusMenu.js:141
+#: ../js/ui/statusMenu.js:142
msgid "Suspend..."
msgstr "השהיה..."
-#: ../js/ui/statusMenu.js:145
+#: ../js/ui/statusMenu.js:146
msgid "Shut Down..."
msgstr "כיבוי..."
-#: ../js/ui/status/accessibility.js:82
+#: ../js/ui/status/accessibility.js:83
msgid "Zoom"
msgstr "תקריב"
-#: ../js/ui/status/accessibility.js:88
+#: ../js/ui/status/accessibility.js:89
msgid "Screen Reader"
msgstr "מקריא מסך"
-#: ../js/ui/status/accessibility.js:91
+#: ../js/ui/status/accessibility.js:92
msgid "Screen Keyboard"
msgstr "מקלדת מסך"
-#: ../js/ui/status/accessibility.js:94
+#: ../js/ui/status/accessibility.js:95
msgid "Visual Alerts"
msgstr "התראות חזותיות"
-#: ../js/ui/status/accessibility.js:97
+#: ../js/ui/status/accessibility.js:98
msgid "Sticky Keys"
msgstr "מקשים דביקים"
-#: ../js/ui/status/accessibility.js:100
+#: ../js/ui/status/accessibility.js:101
msgid "Slow Keys"
msgstr "מקשים אטיים"
-#: ../js/ui/status/accessibility.js:103
+#: ../js/ui/status/accessibility.js:104
msgid "Bounce Keys"
msgstr "מקשים קופצים"
-#: ../js/ui/status/accessibility.js:106
+#: ../js/ui/status/accessibility.js:107
msgid "Mouse Keys"
msgstr "מקשי עכבר"
-#: ../js/ui/status/accessibility.js:110
+#: ../js/ui/status/accessibility.js:111
msgid "Universal Access Settings"
msgstr "הגדרות גישה אוניברסלית"
@@ -645,6 +649,122 @@ msgstr "ניגודיות גבוהה"
msgid "Large Text"
msgstr "טקסט גדול"
+#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:241
+msgid "Bluetooth"
+msgstr "Bluetooth"
+
+#: ../js/ui/status/bluetooth.js:55
+msgid "Visibility"
+msgstr "הצגה"
+
+#: ../js/ui/status/bluetooth.js:69
+msgid "Send Files to Device..."
+msgstr "שליחת קובץ להתקן..."
+
+#: ../js/ui/status/bluetooth.js:70
+msgid "Setup a New Device..."
+msgstr "הגדרת התקן חדש..."
+
+#: ../js/ui/status/bluetooth.js:95
+msgid "Bluetooth Settings"
+msgstr "הגדרות Bluetooth"
+
+#: ../js/ui/status/bluetooth.js:192
+msgid "Connection"
+msgstr "חיבור"
+
+#: ../js/ui/status/bluetooth.js:228
+msgid "Send Files..."
+msgstr "שליחת קבצים..."
+
+#: ../js/ui/status/bluetooth.js:233
+msgid "Browse Files..."
+msgstr "עיון בקבצים..."
+
+#: ../js/ui/status/bluetooth.js:242
+msgid "Error browsing device"
+msgstr "שגיאה בעיון בהתקן"
+
+#: ../js/ui/status/bluetooth.js:243
+#, c-format
+msgid "The requested device cannot be browsed, error is '%s'"
+msgstr "לא ניתן לעיין בהתקן הנבחר, השגיאה היא '%s'"
+
+#: ../js/ui/status/bluetooth.js:251 ../js/ui/status/keyboard.js:78
+msgid "Keyboard Settings"
+msgstr "הגדרות מקלדת"
+
+#: ../js/ui/status/bluetooth.js:256
+msgid "Mouse Settings"
+msgstr "הגדרות עכבר"
+
+#: ../js/ui/status/bluetooth.js:263 ../js/ui/status/volume.js:63
+msgid "Sound Settings"
+msgstr "הגדרות שמע"
+
+#: ../js/ui/status/bluetooth.js:337 ../js/ui/status/bluetooth.js:371
+#: ../js/ui/status/bluetooth.js:411 ../js/ui/status/bluetooth.js:444
+msgid "Bluetooth Agent"
+msgstr "סוכן Bluetooth"
+
+#: ../js/ui/status/bluetooth.js:372
+#, c-format
+msgid "Authorization request from %s"
+msgstr "בקשת אישור מאת %s"
+
+#: ../js/ui/status/bluetooth.js:378
+#, c-format
+msgid "Device %s wants access to the service '%s'"
+msgstr "ההתקן %s מעוניין לגשת אל השירות '%s'"
+
+#: ../js/ui/status/bluetooth.js:380
+msgid "Always grant access"
+msgstr "תמיד להעניק גישה"
+
+#: ../js/ui/status/bluetooth.js:381
+msgid "Grant this time only"
+msgstr "הענקת גישה הפעם בלבד"
+
+#: ../js/ui/status/bluetooth.js:382
+msgid "Reject"
+msgstr "סירוב"
+
+#: ../js/ui/status/bluetooth.js:412
+#, c-format
+msgid "Pairing confirmation for %s"
+msgstr "אישור צימוד עבור %s"
+
+#: ../js/ui/status/bluetooth.js:418 ../js/ui/status/bluetooth.js:452
+#, c-format
+msgid "Device %s wants to pair with this computer"
+msgstr "ההתקן %s מעוניין בצימוד עם מחשב זה"
+
+#: ../js/ui/status/bluetooth.js:419
+#, c-format
+msgid "Please confirm whether the PIN '%s' matches the one on the device."
+msgstr "נא לאשר האם קוד ה־PIN '%s' תואם את זה שמופיע בהתקן."
+
+#: ../js/ui/status/bluetooth.js:421
+msgid "Matches"
+msgstr "התאמות"
+
+#: ../js/ui/status/bluetooth.js:422
+msgid "Does not match"
+msgstr "אינו תואם"
+
+#: ../js/ui/status/bluetooth.js:445
+#, c-format
+msgid "Pairing request for %s"
+msgstr "בקשת צימוד עבור %s"
+
+#: ../js/ui/status/bluetooth.js:453
+msgid "Please enter the PIN mentioned on the device."
+msgstr "נא להזין את קוד ה־PIN המוזכר בהתקן."
+
+#: ../js/ui/status/bluetooth.js:469
+msgid "OK"
+msgstr "אישור"
+
#: ../js/ui/status/power.js:85
msgid "Power Settings"
msgstr "הגדרות צריכת החשמל"
@@ -685,82 +805,78 @@ msgstr[0] "דקה אחת נותרה"
msgstr[1] "%d דקות נותרו"
msgstr[2] "שתי דקות נותרו"
-#: ../js/ui/status/power.js:237
+#: ../js/ui/status/power.js:235
msgid "AC adapter"
msgstr "מתאם חשמל"
-#: ../js/ui/status/power.js:239
+#: ../js/ui/status/power.js:237
msgid "Laptop battery"
msgstr "סוללת נייד"
-#: ../js/ui/status/power.js:241
+#: ../js/ui/status/power.js:239
msgid "UPS"
msgstr "אל־פסק"
-#: ../js/ui/status/power.js:243
+#: ../js/ui/status/power.js:241
msgid "Monitor"
msgstr "צג"
-#: ../js/ui/status/power.js:245
+#: ../js/ui/status/power.js:243
msgid "Mouse"
msgstr "עכבר"
-#: ../js/ui/status/power.js:247
+#: ../js/ui/status/power.js:245
msgid "Keyboard"
msgstr "מקלדת"
-#: ../js/ui/status/power.js:249
+#: ../js/ui/status/power.js:247
msgid "PDA"
msgstr "מחשב כף יד"
-#: ../js/ui/status/power.js:251
+#: ../js/ui/status/power.js:249
msgid "Cell phone"
msgstr "טלפון סלולרי"
-#: ../js/ui/status/power.js:253
+#: ../js/ui/status/power.js:251
msgid "Media player"
msgstr "נגן מדיה"
-#: ../js/ui/status/power.js:255
+#: ../js/ui/status/power.js:253
msgid "Tablet"
msgstr "טבלת שליטה"
-#: ../js/ui/status/power.js:257
+#: ../js/ui/status/power.js:255
msgid "Computer"
msgstr "מחשב"
-#: ../js/ui/status/power.js:259 ../src/shell-app-system.c:1012
+#: ../js/ui/status/power.js:257 ../src/shell-app-system.c:1012
msgid "Unknown"
msgstr "לא ידוע"
-#: ../js/ui/status/volume.js:41
+#: ../js/ui/status/volume.js:42
msgid "Volume"
msgstr "עצמה"
-#: ../js/ui/status/volume.js:54
+#: ../js/ui/status/volume.js:55
msgid "Microphone"
msgstr "מיקרופון"
-#: ../js/ui/status/volume.js:62
-msgid "Sound Settings"
-msgstr "הגדרות שמע"
-
-#: ../js/ui/telepathyClient.js:560
+#: ../js/ui/telepathyClient.js:561
#, c-format
msgid "%s is online."
msgstr "%s התחבר/ה."
-#: ../js/ui/telepathyClient.js:565
+#: ../js/ui/telepathyClient.js:566
#, c-format
msgid "%s is offline."
msgstr "%s התנתק/ה."
-#: ../js/ui/telepathyClient.js:568
+#: ../js/ui/telepathyClient.js:569
#, c-format
msgid "%s is away."
msgstr "'%s' מרוחק/ת."
-#: ../js/ui/telepathyClient.js:571
+#: ../js/ui/telepathyClient.js:572
#, c-format
msgid "%s is busy."
msgstr "%s עסוק/ה."
@@ -768,7 +884,7 @@ msgstr "%s עסוק/ה."
#. Translators: this is a time format string followed by a date.
#. If applicable, replace %X with a strftime format valid for your
#. locale, without seconds.
-#: ../js/ui/telepathyClient.js:664
+#: ../js/ui/telepathyClient.js:666
#, no-c-format
msgid "Sent at %X on %A"
msgstr "נשלח ב־%X בשעה %A"
@@ -820,11 +936,11 @@ msgstr[2] "2 קלטים"
msgid "System Sounds"
msgstr "צלילי מערכת"
-#: ../src/shell-global.c:1155
+#: ../src/shell-global.c:1366
msgid "Less than a minute ago"
msgstr "לפני פחות מדקה"
-#: ../src/shell-global.c:1159
+#: ../src/shell-global.c:1370
#, c-format
msgid "%d minute ago"
msgid_plural "%d minutes ago"
@@ -832,7 +948,7 @@ msgstr[0] "לפני דקה"
msgstr[1] "לפני %d דקות"
msgstr[2] "לפני 2 דקות"
-#: ../src/shell-global.c:1164
+#: ../src/shell-global.c:1375
#, c-format
msgid "%d hour ago"
msgid_plural "%d hours ago"
@@ -840,7 +956,7 @@ msgstr[0] "לפני שעה"
msgstr[1] "לפני %d שעות"
msgstr[2] "לפני שעתיים"
-#: ../src/shell-global.c:1169
+#: ../src/shell-global.c:1380
#, c-format
msgid "%d day ago"
msgid_plural "%d days ago"
@@ -848,7 +964,7 @@ msgstr[0] "לפני יום"
msgstr[1] "לפני %d ימים"
msgstr[2] "לפני יומיים"
-#: ../src/shell-global.c:1174
+#: ../src/shell-global.c:1385
#, c-format
msgid "%d week ago"
msgid_plural "%d weeks ago"
@@ -880,6 +996,75 @@ msgstr "חיפוש"
msgid "%1$s: %2$s"
msgstr "%1$s: %2$s"
+#~ msgid "Clock"
+#~ msgstr "שעון"
+
+#~ msgid "Customize the panel clock"
+#~ msgstr "התאמת לוח השעון"
+
+#~ msgid "Custom format of the clock"
+#~ msgstr "Custom format of the clock"
+
+#~ msgid "Hour format"
+#~ msgstr "Hour format"
+
+#~ msgid ""
+#~ "If true and format is either \"12-hour\" or \"24-hour\", display seconds "
+#~ "in time."
+#~ msgstr ""
+#~ "If true and format is either \"12-hour\" or \"24-hour\", display seconds "
+#~ "in time."
+
+#~ msgid ""
+#~ "This key specifies the format used by the panel clock when the format key "
+#~ "is set to \"custom\". You can use conversion specifiers understood by "
+#~ "strftime() to obtain a specific format. See the strftime() manual for "
+#~ "more information."
+#~ msgstr ""
+#~ "This key specifies the format used by the panel clock when the format key "
+#~ "is set to \"custom\". You can use conversion specifiers understood by "
+#~ "strftime() to obtain a specific format. See the strftime() manual for "
+#~ "more information."
+
+#~ msgid ""
+#~ "This key specifies the hour format used by the panel clock. Possible "
+#~ "values are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to "
+#~ "\"unix\", the clock will display time in seconds since Epoch, i.e. 1970-"
+#~ "01-01. If set to \"custom\", the clock will display time according to the "
+#~ "format specified in the custom_format key. Note that if set to either "
+#~ "\"unix\" or \"custom\", the show_date and show_seconds keys are ignored."
+#~ msgstr ""
+#~ "This key specifies the hour format used by the panel clock. Possible "
+#~ "values are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to "
+#~ "\"unix\", the clock will display time in seconds since Epoch, i.e. 1970-"
+#~ "01-01. If set to \"custom\", the clock will display time according to the "
+#~ "format specified in the custom_format key. Note that if set to either "
+#~ "\"unix\" or \"custom\", the show_date and show_seconds keys are ignored."
+
+#~ msgid "Clock Format"
+#~ msgstr "מבנה השעון"
+
+#~ msgid "Clock Preferences"
+#~ msgstr "העדפות השעון"
+
+#~ msgid "Panel Display"
+#~ msgstr "תצוגת הלוח"
+
+#~ msgid "Show seco_nds"
+#~ msgstr "הצגת ש_ניות"
+
+#~ msgid "Show the _date"
+#~ msgstr "הצגת ה_תאריך"
+
+#~ msgid "_12 hour format"
+#~ msgstr "מבנה _12 שעות"
+
+#~ msgid "_24 hour format"
+#~ msgstr "מבנה _24 שעות"
+
+#~ msgid "Preferences"
+#~ msgstr "העדפות"
+
#~ msgid "What's using power..."
#~ msgstr "מה צורך חשמל..."
@@ -908,12 +1093,6 @@ msgstr "%1$s: %2$s"
#~ msgid "Invisible"
#~ msgstr "בלתי נראה"
-#~ msgid "Restart..."
-#~ msgstr "הפעלה מחדש..."
-
-#~ msgid "Account Information..."
-#~ msgstr "פרטי המשתמש..."
-
#~ msgid "ON"
#~ msgstr "1"
diff --git a/po/it.po b/po/it.po
index bd57cc42b..4b6f085ed 100644
--- a/po/it.po
+++ b/po/it.po
@@ -3,19 +3,19 @@
# This file is distributed under the same license as the gnome-shell package.
#
# Milo Casagrande , 2009, 2010.
-# Luca Ferretti , 2010.
+# Luca Ferretti , 2010, 2011.
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-12-13 21:30+0100\n"
-"PO-Revision-Date: 2010-12-13 22:40+0100\n"
+"POT-Creation-Date: 2011-01-15 01:10+0100\n"
+"PO-Revision-Date: 2011-01-15 01:19+0100\n"
"Last-Translator: Luca Ferretti \n"
"Language-Team: Italian \n"
-"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: ../data/gnome-shell.desktop.in.in.h:1
@@ -26,14 +26,6 @@ msgstr "GNOME Shell"
msgid "Window management and application launching"
msgstr "Gestisce finestre e avvia applicazioni"
-#: ../data/gnome-shell-clock-preferences.desktop.in.in.h:1
-msgid "Clock"
-msgstr "Orologio"
-
-#: ../data/gnome-shell-clock-preferences.desktop.in.in.h:2
-msgid "Customize the panel clock"
-msgstr "Personalizza l'orologio sul pannello"
-
#: ../data/org.gnome.shell.gschema.xml.in.h:1
msgid ""
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
@@ -43,24 +35,20 @@ msgstr ""
"utilizzando il dialogo Alt-F2."
#: ../data/org.gnome.shell.gschema.xml.in.h:2
-msgid "Custom format of the clock"
-msgstr "Formato personalizzato dell'orologio"
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:3
msgid "Enable internal tools useful for developers and testers from Alt-F2"
msgstr ""
"Abilita gli strumenti interni utili a sviluppatori e beta-tester attraverso "
"Alt-F2"
-#: ../data/org.gnome.shell.gschema.xml.in.h:4
+#: ../data/org.gnome.shell.gschema.xml.in.h:3
msgid "File extension used for storing the screencast"
msgstr "Estensione del file utilizzato per salvare lo screencast"
-#: ../data/org.gnome.shell.gschema.xml.in.h:5
+#: ../data/org.gnome.shell.gschema.xml.in.h:4
msgid "Framerate used for recording screencasts."
msgstr "Framerate per la registrazione di screencast."
-#: ../data/org.gnome.shell.gschema.xml.in.h:6
+#: ../data/org.gnome.shell.gschema.xml.in.h:5
msgid ""
"GNOME Shell extensions have a uuid property; this key lists extensions which "
"should not be loaded."
@@ -68,39 +56,27 @@ msgstr ""
"Le estensioni per la GNOME Shell dispongono di una proprietà UUID: questa "
"chiave elenca le estensioni che non dovrebbero essere caricate."
-#: ../data/org.gnome.shell.gschema.xml.in.h:7
+#: ../data/org.gnome.shell.gschema.xml.in.h:6
msgid "History for command (Alt-F2) dialog"
msgstr "Cronologia per il dialogo dei comandi (Alt-F2)"
+#: ../data/org.gnome.shell.gschema.xml.in.h:7
+msgid "If true, display date in the clock, in addition to time."
+msgstr "Se VERO, mostra nell'orologio la data, oltre all'orario."
+
#: ../data/org.gnome.shell.gschema.xml.in.h:8
-msgid "Hour format"
-msgstr "Formato orario"
+msgid "If true, display seconds in time."
+msgstr "Se VERO, mostra i secondi nell'orario."
#: ../data/org.gnome.shell.gschema.xml.in.h:9
-msgid ""
-"If true and format is either \"12-hour\" or \"24-hour\", display date in the "
-"clock, in addition to time."
-msgstr ""
-"Se VERO e il formato è \"12-hour\" oppure \"24-hour\", visualizza anche la "
-"data nell'orologio oltre all'orario."
+msgid "If true, display the ISO week date in the calendar."
+msgstr "Se VERO, mostra il giorno della settimana ISO nel calendario."
#: ../data/org.gnome.shell.gschema.xml.in.h:10
-msgid ""
-"If true and format is either \"12-hour\" or \"24-hour\", display seconds in "
-"time."
-msgstr ""
-"Se VERO e il formato è \"12-hour\" oppure \"24-hour\", visualizza i secondi "
-"nell'ora."
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:11
-msgid "If true, display the ISO week date in the calendar."
-msgstr "Se VERO, visualizza il giorno della settimana ISO nel calendario."
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:12
msgid "List of desktop file IDs for favorite applications"
msgstr "Elenco di ID di file desktop per le applicazioni preferite"
-#: ../data/org.gnome.shell.gschema.xml.in.h:13
+#: ../data/org.gnome.shell.gschema.xml.in.h:11
msgid ""
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
"used for gst-launch. The pipeline should have an unconnected sink pad where "
@@ -121,19 +97,19 @@ msgstr ""
"alcun valore, viene usata la pipeline predefinita il cui valore è "
"\"videorate ! theoraenc ! oggmux\" e che registra nel formato Ogg Theora."
-#: ../data/org.gnome.shell.gschema.xml.in.h:14
+#: ../data/org.gnome.shell.gschema.xml.in.h:12
msgid "Show date in clock"
msgstr "Mostra la data nell'orologio"
-#: ../data/org.gnome.shell.gschema.xml.in.h:15
+#: ../data/org.gnome.shell.gschema.xml.in.h:13
msgid "Show the week date in the calendar"
msgstr "Mostra il giorno della settimana nel calendario"
-#: ../data/org.gnome.shell.gschema.xml.in.h:16
+#: ../data/org.gnome.shell.gschema.xml.in.h:14
msgid "Show time with seconds"
msgstr "Mostra l'ora con i secondi"
-#: ../data/org.gnome.shell.gschema.xml.in.h:17
+#: ../data/org.gnome.shell.gschema.xml.in.h:15
msgid ""
"The applications corresponding to these identifiers will be displayed in the "
"favorites area."
@@ -141,7 +117,7 @@ msgstr ""
"Le applicazioni che corrispondono a questi identificatori vengono "
"visualizzate nell'area dei preferiti."
-#: ../data/org.gnome.shell.gschema.xml.in.h:18
+#: ../data/org.gnome.shell.gschema.xml.in.h:16
msgid ""
"The filename for recorded screencasts will be a unique filename based on the "
"current date, and use this extension. It should be changed when recording to "
@@ -151,7 +127,7 @@ msgstr ""
"data corrente e utilizza questa estensione. Dovrebbe essere modificato "
"quando si registra utilizzando un diverso formato contenitore."
-#: ../data/org.gnome.shell.gschema.xml.in.h:19
+#: ../data/org.gnome.shell.gschema.xml.in.h:17
msgid ""
"The framerate of the resulting screencast recordered by GNOME Shell's "
"screencast recorder in frames-per-second."
@@ -159,12 +135,12 @@ msgstr ""
"Il framerate in fotogrammi al secondo dello screencast registrato attraverso "
"il registratore della GNOME Shell."
-#: ../data/org.gnome.shell.gschema.xml.in.h:20
+#: ../data/org.gnome.shell.gschema.xml.in.h:18
msgid "The gstreamer pipeline used to encode the screencast"
msgstr "La pipeline di gstreamer utilizzata per codificare lo screencast"
# (ndt) quel "in launchers" non mi convince...
-#: ../data/org.gnome.shell.gschema.xml.in.h:21
+#: ../data/org.gnome.shell.gschema.xml.in.h:19
msgid ""
"The shell normally monitors active applications in order to present the most "
"used ones (e.g. in launchers). While this data will be kept private, you may "
@@ -176,40 +152,11 @@ msgstr ""
"disabilitare questa funzionalità per motivi di privacy. I dati già salvati "
"non verranno comunque rimossi."
-#: ../data/org.gnome.shell.gschema.xml.in.h:22
-msgid ""
-"This key specifies the format used by the panel clock when the format key is "
-"set to \"custom\". You can use conversion specifiers understood by strftime"
-"() to obtain a specific format. See the strftime() manual for more "
-"information."
-msgstr ""
-"Questa chiave indica il formato usato dall'orologio nel pannello quando la "
-"chiave specifica è impostata a \"custom\". È possibile utilizzare gli "
-"specificatori di formato compatibili con strftime(). Per maggiori "
-"informazioni, consultare il manuale di strftime()."
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:23
-msgid ""
-"This key specifies the hour format used by the panel clock. Possible values "
-"are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to \"unix\", "
-"the clock will display time in seconds since Epoch, i.e. 1970-01-01. If set "
-"to \"custom\", the clock will display time according to the format specified "
-"in the custom_format key. Note that if set to either \"unix\" or \"custom\", "
-"the show_date and show_seconds keys are ignored."
-msgstr ""
-"Questa chiave indica il formato orario usato dall'orologio. I possibili "
-"valori sono \"12-hour\", \"24-hour\", \"unix\" e \"custom\". Se impostata a "
-"\"unix\", l'orologio visualizza l'ora in secondi a partire dall'era Epoch, "
-"cioè dal 1970-01-01. Se impostata a \"custom\", l'orologio visualizza l'ora "
-"in base al formato specificato nella chiave custom_format. Notare che se "
-"impostata a \"unix\" o \"custom\", le chiavi show_date e show_seconds non "
-"vengono considerate."
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:24
+#: ../data/org.gnome.shell.gschema.xml.in.h:20
msgid "Uuids of extensions to disable"
msgstr "UUID delle estensioni da disabilitare"
-#: ../data/org.gnome.shell.gschema.xml.in.h:25
+#: ../data/org.gnome.shell.gschema.xml.in.h:21
msgid "Whether to collect stats about applications usage"
msgstr ""
"Indica se raccogliere statistiche riguardo l'utilizzo delle applicazioni"
@@ -339,51 +286,43 @@ msgstr ""
msgid "Width of the vertical and horizontal lines that make up the crosshairs."
msgstr ""
-#: ../data/clock-preferences.ui.h:1
-msgid "Clock Format"
-msgstr "Formato ora"
+#. Replace "Error invoking GLib.shell_parse_argv: " with
+#. something nicer
+#: ../js/misc/util.js:108
+msgid "Could not parse command:"
+msgstr "Impossibile analizzare il comando:"
-#: ../data/clock-preferences.ui.h:2
-msgid "Clock Preferences"
-msgstr "Preferenze di Orologio"
+#: ../js/misc/util.js:130
+msgid "No such application"
+msgstr "Applicazione inesistente"
-#: ../data/clock-preferences.ui.h:3
-msgid "Panel Display"
-msgstr "Visualizzazione sul pannello"
+#: ../js/misc/util.js:143 ../js/ui/runDialog.js:364
+#, c-format
+msgid "Execution of '%s' failed:"
+msgstr "Esecuzione di «%s» non riuscita:"
-#: ../data/clock-preferences.ui.h:4
-msgid "Show seco_nds"
-msgstr "Mostrare i _secondi"
+#. Translators: Filter to display all applications
+#: ../js/ui/appDisplay.js:155
+msgid "All"
+msgstr "Tutte"
-#: ../data/clock-preferences.ui.h:5
-msgid "Show the _date"
-msgstr "Mostrare la _data"
-
-#: ../data/clock-preferences.ui.h:6
-msgid "_12 hour format"
-msgstr "Formato _12 ore"
-
-#: ../data/clock-preferences.ui.h:7
-msgid "_24 hour format"
-msgstr "Formato _24 ore"
-
-#: ../js/ui/appDisplay.js:215
+#: ../js/ui/appDisplay.js:236
msgid "APPLICATIONS"
-msgstr "Applicazioni"
+msgstr "APPLICAZIONI"
-#: ../js/ui/appDisplay.js:245
+#: ../js/ui/appDisplay.js:266
msgid "PREFERENCES"
-msgstr "Preferenze"
+msgstr "PREFERENZE"
-#: ../js/ui/appDisplay.js:542
+#: ../js/ui/appDisplay.js:563
msgid "New Window"
msgstr "Nuova finestra"
-#: ../js/ui/appDisplay.js:546
+#: ../js/ui/appDisplay.js:567
msgid "Remove from Favorites"
msgstr "Rimuovi dai preferiti"
-#: ../js/ui/appDisplay.js:547
+#: ../js/ui/appDisplay.js:568
msgid "Add to Favorites"
msgstr "Aggiungi ai preferiti"
@@ -403,118 +342,197 @@ msgstr "%s è stato rimosso dai preferiti."
msgid "Remove"
msgstr "Rimuovi"
-#: ../js/ui/docDisplay.js:494
+#: ../js/ui/docDisplay.js:18
msgid "RECENT ITEMS"
msgstr "Elementi recenti"
-#: ../js/ui/lookingGlass.js:552
+#: ../js/ui/endSessionDialog.js:63
+#, c-format
+msgid "Log Out %s"
+msgstr "Termina sessione di %s"
+
+#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:69
+msgid "Log Out"
+msgstr "Termina sessione"
+
+# oddio... abbandonare il sistema sembra la nave che affonda... (LF)
+#: ../js/ui/endSessionDialog.js:65
+msgid "Click Log Out to quit these applications and log out of the system."
+msgstr "Fare clic su «Termina sessione» per chiudere queste applicazioni e abbandonare il sistema."
+
+#: ../js/ui/endSessionDialog.js:66
+#, c-format
+msgid "%s will be logged out automatically in %d seconds."
+msgstr "La sessione di %s verrà terminata automaticamente tra %d secondi."
+
+#: ../js/ui/endSessionDialog.js:67
+#, c-format
+msgid "You will be logged out automatically in %d seconds."
+msgstr "La sessione verrà terminata automaticamente tra %d secondi."
+
+#: ../js/ui/endSessionDialog.js:68
+msgid "Logging out of the system."
+msgstr "Chiusura della sessione."
+
+#: ../js/ui/endSessionDialog.js:74 ../js/ui/endSessionDialog.js:78
+msgid "Shut Down"
+msgstr "Arresta"
+
+# usato un termine diverso, magari si capisce meglio (LF)
+#: ../js/ui/endSessionDialog.js:75
+msgid "Click Shut Down to quit these applications and shut down the system."
+msgstr "Fare clic su «Arresta» per chiudere queste applicazioni e spegnere il sistema."
+
+#: ../js/ui/endSessionDialog.js:76
+#, c-format
+msgid "The system will shut down automatically in %d seconds."
+msgstr "Il sistema verrà arrestato automaticamente tra %d secondi."
+
+#: ../js/ui/endSessionDialog.js:77
+msgid "Shutting down the system."
+msgstr "Arresto del sistema."
+
+#: ../js/ui/endSessionDialog.js:84 ../js/ui/endSessionDialog.js:88
+msgid "Restart"
+msgstr "Riavvia"
+
+#: ../js/ui/endSessionDialog.js:85
+msgid "Click Restart to quit these applications and restart the system."
+msgstr "Fare clic su «Riavvia» per chiudere queste applicazioni e riavviare il sistema."
+
+#: ../js/ui/endSessionDialog.js:86
+#, c-format
+msgid "The system will restart automatically in %d seconds."
+msgstr "Il sistema verrà riavviato automaticamente tra %d secondi."
+
+#: ../js/ui/endSessionDialog.js:87
+msgid "Restarting the system."
+msgstr "Riavvio del sistema."
+
+#: ../js/ui/endSessionDialog.js:395
+msgid "Confirm"
+msgstr "Conferma"
+
+#: ../js/ui/endSessionDialog.js:400 ../js/ui/status/bluetooth.js:469
+msgid "Cancel"
+msgstr "Annulla"
+
+#: ../js/ui/lookingGlass.js:556
msgid "No extensions installed"
msgstr "Nessuna estensione installata"
# (ndt) o abilitata?
-#: ../js/ui/lookingGlass.js:589
+#: ../js/ui/lookingGlass.js:593
msgid "Enabled"
msgstr "Abilitato"
# (ndt) o disabilitata?
#. translators:
#. * The device has been disabled
-#: ../js/ui/lookingGlass.js:591 ../src/gvc/gvc-mixer-control.c:1087
+#: ../js/ui/lookingGlass.js:595 ../src/gvc/gvc-mixer-control.c:1087
msgid "Disabled"
msgstr "Disabilitato"
-#: ../js/ui/lookingGlass.js:593
+#: ../js/ui/lookingGlass.js:597
msgid "Error"
msgstr "Errore"
-#: ../js/ui/lookingGlass.js:595
+#: ../js/ui/lookingGlass.js:599
msgid "Out of date"
msgstr "Non aggiornato"
-#: ../js/ui/lookingGlass.js:620
+#: ../js/ui/lookingGlass.js:624
msgid "View Source"
msgstr "Visualizza sorgente"
-#: ../js/ui/lookingGlass.js:626
+#: ../js/ui/lookingGlass.js:630
msgid "Web Page"
msgstr "Pagina web"
-#: ../js/ui/overview.js:112
+#: ../js/ui/messageTray.js:1748
+msgid "System Information"
+msgstr "Informazione di sistema"
+
+#: ../js/ui/overview.js:75
msgid "Undo"
msgstr "Annulla"
+#: ../js/ui/overview.js:140
+msgid "Windows"
+msgstr "Finestre"
+
+#: ../js/ui/overview.js:143
+msgid "Applications"
+msgstr "Applicazioni"
+
#. TODO - _quit() doesn't really work on apps in state STARTING yet
-#: ../js/ui/panel.js:470
+#: ../js/ui/panel.js:479
#, c-format
msgid "Quit %s"
msgstr "Chiudi %s"
-#: ../js/ui/panel.js:495
-msgid "Preferences"
-msgstr "Preferenze"
-
#. Translators: This is the time format with date used
#. in 24-hour mode.
-#: ../js/ui/panel.js:581
+#: ../js/ui/panel.js:564
msgid "%a %b %e, %R:%S"
msgstr "%a %e %b, %k.%M.%S"
# (ndt) proviamo col k, se non funge, sappiamo il perché...
-#: ../js/ui/panel.js:582
+#: ../js/ui/panel.js:565
msgid "%a %b %e, %R"
msgstr "%a %e %b, %k.%M"
#. Translators: This is the time format without date used
#. in 24-hour mode.
-#: ../js/ui/panel.js:586
+#: ../js/ui/panel.js:569
msgid "%a %R:%S"
msgstr "%a %k.%M.%S"
-#: ../js/ui/panel.js:587
+#: ../js/ui/panel.js:570
msgid "%a %R"
msgstr "%a %k.%M"
#. Translators: This is a time format with date used
#. for AM/PM.
-#: ../js/ui/panel.js:594
+#: ../js/ui/panel.js:577
msgid "%a %b %e, %l:%M:%S %p"
msgstr "%a %e %b, %l.%M.%S %P"
-#: ../js/ui/panel.js:595
+#: ../js/ui/panel.js:578
msgid "%a %b %e, %l:%M %p"
msgstr "%a %e %b, %l.%M %P"
#. Translators: This is a time format without date used
#. for AM/PM.
-#: ../js/ui/panel.js:599
+#: ../js/ui/panel.js:582
msgid "%a %l:%M:%S %p"
msgstr "%a %l.%M.%S %P"
-#: ../js/ui/panel.js:600
+#: ../js/ui/panel.js:583
msgid "%a %l:%M %p"
msgstr "%a %l.%M %P"
#. Button on the left side of the panel.
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
-#: ../js/ui/panel.js:745
+#: ../js/ui/panel.js:728
msgid "Activities"
msgstr "Attività"
# (ndt) libera, ma unmount non si può proprio vedere...
-#: ../js/ui/placeDisplay.js:111
+#: ../js/ui/placeDisplay.js:112
#, c-format
msgid "Failed to unmount '%s'"
msgstr "Impossibile scollegare «%s»"
-#: ../js/ui/placeDisplay.js:114
+#: ../js/ui/placeDisplay.js:115
msgid "Retry"
msgstr "Riprova"
-#: ../js/ui/placeDisplay.js:159
+#: ../js/ui/placeDisplay.js:160
msgid "Connect to..."
msgstr "Connetti a..."
-#: ../js/ui/placeDisplay.js:558
+#: ../js/ui/placeDisplay.js:559
msgid "PLACES & DEVICES"
msgstr "Risorse e dispositivi"
@@ -527,84 +545,79 @@ msgstr "Risorse e dispositivi"
msgid "toggle-switch-us"
msgstr "toggle-switch-intl"
-#: ../js/ui/runDialog.js:233
+#: ../js/ui/runDialog.js:222
msgid "Please enter a command:"
msgstr "Inserire un comando:"
-#: ../js/ui/runDialog.js:378
-#, c-format
-msgid "Execution of '%s' failed:"
-msgstr "Esecuzione di «%s» non riuscita:"
-
-#: ../js/ui/statusMenu.js:101
+#: ../js/ui/statusMenu.js:102
msgid "Available"
msgstr "Disponibile"
-#: ../js/ui/statusMenu.js:106
+#: ../js/ui/statusMenu.js:107
msgid "Busy"
msgstr "Non disponibile"
-#: ../js/ui/statusMenu.js:114
+#: ../js/ui/statusMenu.js:115
msgid "My Account"
msgstr "Account personale"
-#: ../js/ui/statusMenu.js:118
+#: ../js/ui/statusMenu.js:119
msgid "System Settings"
msgstr "Impostazioni di sistema"
-#: ../js/ui/statusMenu.js:125
+#: ../js/ui/statusMenu.js:126
msgid "Lock Screen"
msgstr "Blocca schermo"
-#: ../js/ui/statusMenu.js:129
+#: ../js/ui/statusMenu.js:130
msgid "Switch User"
msgstr "Cambia utente"
-#: ../js/ui/statusMenu.js:134
+#: ../js/ui/statusMenu.js:135
msgid "Log Out..."
msgstr "Termina sessione..."
-#: ../js/ui/statusMenu.js:141
+#: ../js/ui/statusMenu.js:142
msgid "Suspend..."
msgstr "Sospendi..."
-#: ../js/ui/statusMenu.js:145
+#: ../js/ui/statusMenu.js:146
msgid "Shut Down..."
msgstr "Arresta..."
-#: ../js/ui/status/accessibility.js:82
+#: ../js/ui/status/accessibility.js:83
msgid "Zoom"
msgstr "Ingrandimento"
-#: ../js/ui/status/accessibility.js:88
+#: ../js/ui/status/accessibility.js:89
msgid "Screen Reader"
msgstr "Lettore schermo"
-#: ../js/ui/status/accessibility.js:91
+#: ../js/ui/status/accessibility.js:92
msgid "Screen Keyboard"
msgstr "Tastiera a schermo"
-#: ../js/ui/status/accessibility.js:94
+#: ../js/ui/status/accessibility.js:95
msgid "Visual Alerts"
msgstr "Allerte visive"
-#: ../js/ui/status/accessibility.js:97
+#: ../js/ui/status/accessibility.js:98
msgid "Sticky Keys"
msgstr "Permanenza tasti"
-#: ../js/ui/status/accessibility.js:100
+#: ../js/ui/status/accessibility.js:101
msgid "Slow Keys"
msgstr "Rallentamento tasti"
-#: ../js/ui/status/accessibility.js:103
+#: ../js/ui/status/accessibility.js:104
msgid "Bounce Keys"
msgstr "Pressione ravvicinata tasti"
-#: ../js/ui/status/accessibility.js:106
+#: ../js/ui/status/accessibility.js:107
msgid "Mouse Keys"
msgstr "Mouse da tastiera"
-#: ../js/ui/status/accessibility.js:110
+#: ../js/ui/status/accessibility.js:111
msgid "Universal Access Settings"
msgstr "Impostazioni accesso universale"
@@ -616,16 +629,130 @@ msgstr "Contrasto elevato"
msgid "Large Text"
msgstr "Caratteri grandi"
-# Sarebbe da vedere uhmmm...
-#: ../js/ui/status/power.js:87
-msgid "What's using power..."
-msgstr "Consumi energetici..."
+#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:240
+msgid "Bluetooth"
+msgstr "Bluetooth"
-#: ../js/ui/status/power.js:90
+# as on Android :P
+#: ../js/ui/status/bluetooth.js:55
+msgid "Visibility"
+msgstr "Rilevabile"
+
+#: ../js/ui/status/bluetooth.js:69
+msgid "Send Files to Device..."
+msgstr "Invia file al dispositivo..."
+
+#: ../js/ui/status/bluetooth.js:70
+msgid "Setup a New Device..."
+msgstr "Imposta un nuovo dispositivo..."
+
+#: ../js/ui/status/bluetooth.js:94
+msgid "Bluetooth Settings"
+msgstr "Impostazioni Bluetooth"
+
+# indica lo stato del device BT, per esempio gli auricolari
+# credo sia meglio l'aggettivo che il sostantivo
+#: ../js/ui/status/bluetooth.js:191
+msgid "Connection"
+msgstr "Collegato"
+
+#: ../js/ui/status/bluetooth.js:227
+msgid "Send Files..."
+msgstr "Invia file..."
+
+#: ../js/ui/status/bluetooth.js:232
+msgid "Browse Files..."
+msgstr "Esplora file..."
+
+#: ../js/ui/status/bluetooth.js:241
+msgid "Error browsing device"
+msgstr "Errore nell'esplorare il dispositivo"
+
+#: ../js/ui/status/bluetooth.js:242
+#, c-format
+msgid "The requested device cannot be browsed, error is '%s'"
+msgstr "Non è possibile esplorare il dispositivo richiesto, l'errore è «%s»"
+
+#: ../js/ui/status/bluetooth.js:250 ../js/ui/status/keyboard.js:78
+msgid "Keyboard Settings"
+msgstr "Impostazioni tastiera"
+
+#: ../js/ui/status/bluetooth.js:255
+msgid "Mouse Settings"
+msgstr "Impostazioni mouse"
+
+#: ../js/ui/status/bluetooth.js:262 ../js/ui/status/volume.js:63
+msgid "Sound Settings"
+msgstr "Impostazioni audio"
+
+#: ../js/ui/status/bluetooth.js:336 ../js/ui/status/bluetooth.js:370
+#: ../js/ui/status/bluetooth.js:410 ../js/ui/status/bluetooth.js:443
+msgid "Bluetooth Agent"
+msgstr ""
+
+#: ../js/ui/status/bluetooth.js:371
+#, c-format
+msgid "Authorization request from %s"
+msgstr "Richesta autorizzazione da %s"
+
+#: ../js/ui/status/bluetooth.js:377
+#, c-format
+msgid "Device %s wants access to the service '%s'"
+msgstr "Il dispositivo %s vuole accedere al servizio «%s»"
+
+#: ../js/ui/status/bluetooth.js:379
+msgid "Always grant access"
+msgstr "Consenti sempre accesso"
+
+#: ../js/ui/status/bluetooth.js:380
+msgid "Grant this time only"
+msgstr "Consenti solo stavolta"
+
+#: ../js/ui/status/bluetooth.js:381
+msgid "Reject"
+msgstr "Rifiuta"
+
+#: ../js/ui/status/bluetooth.js:411
+#, c-format
+msgid "Pairing confirmation for %s"
+msgstr "Conferma associazione per %s"
+
+#: ../js/ui/status/bluetooth.js:417 ../js/ui/status/bluetooth.js:451
+#, c-format
+msgid "Device %s wants to pair with this computer"
+msgstr "Il dispositivo %s vuole associarsi con questo computer"
+
+#: ../js/ui/status/bluetooth.js:418
+#, c-format
+msgid "Please confirm whether the PIN '%s' matches the one on the device."
+msgstr "Confermare la corrispondenza del PIN «%s» con quello sul dispositivo."
+
+#: ../js/ui/status/bluetooth.js:420
+msgid "Matches"
+msgstr "Corrisponde"
+
+#: ../js/ui/status/bluetooth.js:421
+msgid "Does not match"
+msgstr "Non corrisponde"
+
+#: ../js/ui/status/bluetooth.js:444
+#, c-format
+msgid "Pairing request for %s"
+msgstr "Richiesta associazione per %s"
+
+#: ../js/ui/status/bluetooth.js:452
+msgid "Please enter the PIN mentioned on the device."
+msgstr "Inserire il PIN indicato sul dispositivo."
+
+#: ../js/ui/status/bluetooth.js:468
+msgid "OK"
+msgstr "OK"
+
+#: ../js/ui/status/power.js:85
msgid "Power Settings"
msgstr "Impostazioni alimentazione"
-#: ../js/ui/status/power.js:117
+#: ../js/ui/status/power.js:112
#, c-format
msgid "%d hour remaining"
msgid_plural "%d hours remaining"
@@ -633,125 +760,120 @@ msgstr[0] "%d ora rimanente"
msgstr[1] "%d ore rimanenti"
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
-#: ../js/ui/status/power.js:120
+#: ../js/ui/status/power.js:115
#, c-format
msgid "%d %s %d %s remaining"
msgstr "%d %s e %d %s rimanenti"
-#: ../js/ui/status/power.js:122
+#: ../js/ui/status/power.js:117
msgid "hour"
msgid_plural "hours"
msgstr[0] "ora"
msgstr[1] "ore"
-#: ../js/ui/status/power.js:122
+#: ../js/ui/status/power.js:117
msgid "minute"
msgid_plural "minutes"
msgstr[0] "minuto"
msgstr[1] "minuti"
-#: ../js/ui/status/power.js:125
+#: ../js/ui/status/power.js:120
#, c-format
msgid "%d minute remaining"
msgid_plural "%d minutes remaining"
msgstr[0] "%d minuto rimanente"
msgstr[1] "%d minuti rimanenti"
-#: ../js/ui/status/power.js:244
+#: ../js/ui/status/power.js:235
msgid "AC adapter"
msgstr "Alimentatore di corrente"
-#: ../js/ui/status/power.js:246
+#: ../js/ui/status/power.js:237
msgid "Laptop battery"
msgstr "Batteria del portatile"
-#: ../js/ui/status/power.js:248
+#: ../js/ui/status/power.js:239
msgid "UPS"
msgstr "UPS"
-#: ../js/ui/status/power.js:250
+#: ../js/ui/status/power.js:241
msgid "Monitor"
msgstr "Monitor"
-#: ../js/ui/status/power.js:252
+#: ../js/ui/status/power.js:243
msgid "Mouse"
msgstr "Mouse"
-#: ../js/ui/status/power.js:254
+#: ../js/ui/status/power.js:245
msgid "Keyboard"
msgstr "Tastiera"
-#: ../js/ui/status/power.js:256
+#: ../js/ui/status/power.js:247
msgid "PDA"
msgstr "PDS"
# c'era una discussione su tp...
-#: ../js/ui/status/power.js:258
+#: ../js/ui/status/power.js:249
msgid "Cell phone"
msgstr "Cellulare"
-#: ../js/ui/status/power.js:260
+#: ../js/ui/status/power.js:251
msgid "Media player"
msgstr "Lettore multimediale"
-#: ../js/ui/status/power.js:262
+#: ../js/ui/status/power.js:253
msgid "Tablet"
msgstr "Tablet"
-#: ../js/ui/status/power.js:264
+#: ../js/ui/status/power.js:255
msgid "Computer"
msgstr "Computer"
-#: ../js/ui/status/power.js:266 ../src/shell-app-system.c:1012
+#: ../js/ui/status/power.js:257 ../src/shell-app-system.c:1012
msgid "Unknown"
msgstr "Sconosciuto"
-#: ../js/ui/status/volume.js:41
+#: ../js/ui/status/volume.js:42
msgid "Volume"
msgstr "Volume"
-#: ../js/ui/status/volume.js:54
+#: ../js/ui/status/volume.js:55
msgid "Microphone"
msgstr "Microfono"
-#: ../js/ui/status/volume.js:62
-msgid "Sound Settings"
-msgstr "Impostazioni audio"
+#: ../js/ui/telepathyClient.js:561
+#, c-format
+msgid "%s is online."
+msgstr "%s è disponibile."
+
+#: ../js/ui/telepathyClient.js:566
+#, c-format
+msgid "%s is offline."
+msgstr "%s è fuori rete."
+
+#: ../js/ui/telepathyClient.js:569
+#, c-format
+msgid "%s is away."
+msgstr "%s è assente."
+
+#: ../js/ui/telepathyClient.js:572
+#, c-format
+msgid "%s is busy."
+msgstr "%s non è disponibile."
+
+#. Translators: this is a time format string followed by a date.
+#. If applicable, replace %X with a strftime format valid for your
+#. locale, without seconds.
+#: ../js/ui/telepathyClient.js:666
+#, no-c-format
+msgid "Sent at %X on %A"
+msgstr "Inviato alle %-H.%M.%S di %A"
# FIXME ma ha senso in inglese???
#: ../js/ui/viewSelector.js:26
msgid "Search your computer"
msgstr "Cerca nel computer"
-#: ../js/ui/telepathyClient.js:560
-#, c-format
-msgid "%s is online."
-msgstr "%s è disponibile."
-
-#: ../js/ui/telepathyClient.js:565
-#, c-format
-msgid "%s is offline."
-msgstr "%s è furi rete."
-
-#: ../js/ui/telepathyClient.js:568
-#, c-format
-msgid "%s is away."
-msgstr "%s è assente."
-
-#: ../js/ui/telepathyClient.js:571
-#, c-format
-msgid "%s is busy."
-msgstr "%s non è disponibile."
-
-# FIXME -- Da rifinire..
-#. Translators: this is a time format string followed by a date.
-#. If applicable, replace %X with a strftime format valid for your
-#. locale, without seconds.
-#: ../js/ui/telepathyClient.js:663
-#, c-format, fuzzy
-msgid "Sent at %X on %A"
-msgstr "Inviato alle %-H.%M.%S di %A"
-
#: ../js/ui/windowAttentionHandler.js:43
#, c-format
msgid "%s has finished starting"
@@ -797,32 +919,32 @@ msgstr[1] "%u ingressi"
msgid "System Sounds"
msgstr "Audio di sistema"
-#: ../src/shell-global.c:1155
+#: ../src/shell-global.c:1233
msgid "Less than a minute ago"
msgstr "Meno di un minuto fa"
-#: ../src/shell-global.c:1159
+#: ../src/shell-global.c:1237
#, c-format
msgid "%d minute ago"
msgid_plural "%d minutes ago"
msgstr[0] "%d minuto fa"
msgstr[1] "%d minuti fa"
-#: ../src/shell-global.c:1164
+#: ../src/shell-global.c:1242
#, c-format
msgid "%d hour ago"
msgid_plural "%d hours ago"
msgstr[0] "%d ora fa"
msgstr[1] "%d ore fa"
-#: ../src/shell-global.c:1169
+#: ../src/shell-global.c:1247
#, c-format
msgid "%d day ago"
msgid_plural "%d days ago"
msgstr[0] "%d giorno fa"
msgstr[1] "%d giorni fa"
-#: ../src/shell-global.c:1174
+#: ../src/shell-global.c:1252
#, c-format
msgid "%d week ago"
msgid_plural "%d weeks ago"
diff --git a/po/nb.po b/po/nb.po
index 18e0e0a5b..2cf41fc43 100644
--- a/po/nb.po
+++ b/po/nb.po
@@ -1,21 +1,23 @@
# Norwegian bokmål translation of gnome-shell.
# Copyright (C) 2009 THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the gnome-shell package.
-# Kjartan Maraas , 2009-2010.
#
+# Kjartan Maraas , 2009-2010.
+# Torstein Adolf Winterseth , 2010.
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell 2.91.x\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-12-17 14:18+0100\n"
-"PO-Revision-Date: 2010-12-17 14:19+0100\n"
-"Last-Translator: Kjartan Maraas \n"
-"Language-Team: Norwegian bokmål \n"
+"POT-Creation-Date: 2011-01-15 12:41+0100\n"
+"PO-Revision-Date: 2011-01-15 12:44+0100\n"
+"Last-Translator: Torstein Adolf Winterseth \n"
+"Language-Team: Norwegian Bokmål \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Lokalize 1.1\n"
#: ../data/gnome-shell.desktop.in.in.h:1
msgid "GNOME Shell"
@@ -25,14 +27,6 @@ msgstr "GNOME Shell"
msgid "Window management and application launching"
msgstr "Vindushåndtering og oppstart av programmer"
-#: ../data/gnome-shell-clock-preferences.desktop.in.in.h:1
-msgid "Clock"
-msgstr "Klokke"
-
-#: ../data/gnome-shell-clock-preferences.desktop.in.in.h:2
-msgid "Customize the panel clock"
-msgstr "Tilpass klokken på panelet"
-
#: ../data/org.gnome.shell.gschema.xml.in.h:1
msgid ""
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
@@ -42,56 +36,44 @@ msgstr ""
"F2-dialogen."
#: ../data/org.gnome.shell.gschema.xml.in.h:2
-msgid "Custom format of the clock"
-msgstr "Egendefinert format for klokken"
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:3
msgid "Enable internal tools useful for developers and testers from Alt-F2"
msgstr ""
-#: ../data/org.gnome.shell.gschema.xml.in.h:4
+#: ../data/org.gnome.shell.gschema.xml.in.h:3
msgid "File extension used for storing the screencast"
msgstr ""
-#: ../data/org.gnome.shell.gschema.xml.in.h:5
+#: ../data/org.gnome.shell.gschema.xml.in.h:4
msgid "Framerate used for recording screencasts."
msgstr ""
-#: ../data/org.gnome.shell.gschema.xml.in.h:6
+#: ../data/org.gnome.shell.gschema.xml.in.h:5
msgid ""
"GNOME Shell extensions have a uuid property; this key lists extensions which "
"should not be loaded."
msgstr ""
-#: ../data/org.gnome.shell.gschema.xml.in.h:7
+#: ../data/org.gnome.shell.gschema.xml.in.h:6
msgid "History for command (Alt-F2) dialog"
msgstr ""
+#: ../data/org.gnome.shell.gschema.xml.in.h:7
+msgid "If true, display date in the clock, in addition to time."
+msgstr ""
+
#: ../data/org.gnome.shell.gschema.xml.in.h:8
-msgid "Hour format"
-msgstr "Timeformat"
+msgid "If true, display seconds in time."
+msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.h:9
-msgid ""
-"If true and format is either \"12-hour\" or \"24-hour\", display date in the "
-"clock, in addition to time."
-msgstr ""
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:10
-msgid ""
-"If true and format is either \"12-hour\" or \"24-hour\", display seconds in "
-"time."
-msgstr ""
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:11
msgid "If true, display the ISO week date in the calendar."
msgstr ""
-#: ../data/org.gnome.shell.gschema.xml.in.h:12
+#: ../data/org.gnome.shell.gschema.xml.in.h:10
msgid "List of desktop file IDs for favorite applications"
msgstr ""
-#: ../data/org.gnome.shell.gschema.xml.in.h:13
+#: ../data/org.gnome.shell.gschema.xml.in.h:11
msgid ""
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
"used for gst-launch. The pipeline should have an unconnected sink pad where "
@@ -103,42 +85,42 @@ msgid ""
"'videorate ! theoraenc ! oggmux' and records to Ogg Theora."
msgstr ""
-#: ../data/org.gnome.shell.gschema.xml.in.h:14
+#: ../data/org.gnome.shell.gschema.xml.in.h:12
msgid "Show date in clock"
msgstr "Vis dato i klokken"
-#: ../data/org.gnome.shell.gschema.xml.in.h:15
+#: ../data/org.gnome.shell.gschema.xml.in.h:13
msgid "Show the week date in the calendar"
msgstr "Vis dato for uken i kalender"
-#: ../data/org.gnome.shell.gschema.xml.in.h:16
+#: ../data/org.gnome.shell.gschema.xml.in.h:14
msgid "Show time with seconds"
msgstr "Vis tid med sekunder"
-#: ../data/org.gnome.shell.gschema.xml.in.h:17
+#: ../data/org.gnome.shell.gschema.xml.in.h:15
msgid ""
"The applications corresponding to these identifiers will be displayed in the "
"favorites area."
msgstr ""
-#: ../data/org.gnome.shell.gschema.xml.in.h:18
+#: ../data/org.gnome.shell.gschema.xml.in.h:16
msgid ""
"The filename for recorded screencasts will be a unique filename based on the "
"current date, and use this extension. It should be changed when recording to "
"a different container format."
msgstr ""
-#: ../data/org.gnome.shell.gschema.xml.in.h:19
+#: ../data/org.gnome.shell.gschema.xml.in.h:17
msgid ""
"The framerate of the resulting screencast recordered by GNOME Shell's "
"screencast recorder in frames-per-second."
msgstr ""
-#: ../data/org.gnome.shell.gschema.xml.in.h:20
+#: ../data/org.gnome.shell.gschema.xml.in.h:18
msgid "The gstreamer pipeline used to encode the screencast"
msgstr ""
-#: ../data/org.gnome.shell.gschema.xml.in.h:21
+#: ../data/org.gnome.shell.gschema.xml.in.h:19
msgid ""
"The shell normally monitors active applications in order to present the most "
"used ones (e.g. in launchers). While this data will be kept private, you may "
@@ -146,29 +128,11 @@ msgid ""
"remove already saved data."
msgstr ""
-#: ../data/org.gnome.shell.gschema.xml.in.h:22
-msgid ""
-"This key specifies the format used by the panel clock when the format key is "
-"set to \"custom\". You can use conversion specifiers understood by strftime"
-"() to obtain a specific format. See the strftime() manual for more "
-"information."
-msgstr ""
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:23
-msgid ""
-"This key specifies the hour format used by the panel clock. Possible values "
-"are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to \"unix\", "
-"the clock will display time in seconds since Epoch, i.e. 1970-01-01. If set "
-"to \"custom\", the clock will display time according to the format specified "
-"in the custom_format key. Note that if set to either \"unix\" or \"custom\", "
-"the show_date and show_seconds keys are ignored."
-msgstr ""
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:24
+#: ../data/org.gnome.shell.gschema.xml.in.h:20
msgid "Uuids of extensions to disable"
msgstr "Uuider på utvidelser som skal slås av"
-#: ../data/org.gnome.shell.gschema.xml.in.h:25
+#: ../data/org.gnome.shell.gschema.xml.in.h:21
msgid "Whether to collect stats about applications usage"
msgstr "Om det skal samles statistikk om bruk av programmer"
@@ -297,51 +261,43 @@ msgstr ""
msgid "Width of the vertical and horizontal lines that make up the crosshairs."
msgstr ""
-#: ../data/clock-preferences.ui.h:1
-msgid "Clock Format"
-msgstr "Klokkeformat"
+#. Replace "Error invoking GLib.shell_parse_argv: " with
+#. something nicer
+#: ../js/misc/util.js:108
+msgid "Could not parse command:"
+msgstr "Klarte ikke å lese kommando:"
-#: ../data/clock-preferences.ui.h:2
-msgid "Clock Preferences"
-msgstr "Brukervalg for klokke"
+#: ../js/misc/util.js:130
+msgid "No such application"
+msgstr "Programmet finnes ikke"
-#: ../data/clock-preferences.ui.h:3
-msgid "Panel Display"
-msgstr "Panelvisning"
+#: ../js/misc/util.js:143 ../js/ui/runDialog.js:364
+#, c-format
+msgid "Execution of '%s' failed:"
+msgstr "Kjøring av «%s» feilet:"
-#: ../data/clock-preferences.ui.h:4
-msgid "Show seco_nds"
-msgstr "Vis seku_nder"
+#. Translators: Filter to display all applications
+#: ../js/ui/appDisplay.js:155
+msgid "All"
+msgstr "Alle"
-#: ../data/clock-preferences.ui.h:5
-msgid "Show the _date"
-msgstr "Vis _dato"
-
-#: ../data/clock-preferences.ui.h:6
-msgid "_12 hour format"
-msgstr "_12-timers format"
-
-#: ../data/clock-preferences.ui.h:7
-msgid "_24 hour format"
-msgstr "_24-timers format"
-
-#: ../js/ui/appDisplay.js:215
+#: ../js/ui/appDisplay.js:236
msgid "APPLICATIONS"
msgstr "PROGRAMMER"
-#: ../js/ui/appDisplay.js:245
+#: ../js/ui/appDisplay.js:266
msgid "PREFERENCES"
msgstr "BRUKERVALG"
-#: ../js/ui/appDisplay.js:542
+#: ../js/ui/appDisplay.js:563
msgid "New Window"
msgstr "Nytt vindu"
-#: ../js/ui/appDisplay.js:546
+#: ../js/ui/appDisplay.js:567
msgid "Remove from Favorites"
msgstr "Fjern fra favoritter"
-#: ../js/ui/appDisplay.js:547
+#: ../js/ui/appDisplay.js:568
msgid "Add to Favorites"
msgstr "Legg til i favoritter"
@@ -359,122 +315,191 @@ msgstr "%s ble fjernet fra dine favoritter."
msgid "Remove"
msgstr "Fjern"
-#: ../js/ui/docDisplay.js:494
+#: ../js/ui/docDisplay.js:18
msgid "RECENT ITEMS"
msgstr "SISTE OPPFØRINGER"
-#: ../js/ui/lookingGlass.js:552
+#: ../js/ui/endSessionDialog.js:63
+#, c-format
+msgid "Log Out %s"
+msgstr "Logg ut %s"
+
+#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:69
+msgid "Log Out"
+msgstr "Logg ut …"
+
+#: ../js/ui/endSessionDialog.js:65
+msgid "Click Log Out to quit these applications and log out of the system."
+msgstr ""
+
+#: ../js/ui/endSessionDialog.js:66
+#, c-format
+msgid "%s will be logged out automatically in %d seconds."
+msgstr "%s vil bli logget ut automatisk om %d sekunder."
+
+#: ../js/ui/endSessionDialog.js:67
+#, c-format
+msgid "You will be logged out automatically in %d seconds."
+msgstr "Du vil bli logget ut automatisk om %d sekunder."
+
+#: ../js/ui/endSessionDialog.js:68
+msgid "Logging out of the system."
+msgstr "Logger ut av systemet"
+
+#: ../js/ui/endSessionDialog.js:74 ../js/ui/endSessionDialog.js:78
+msgid "Shut Down"
+msgstr "Avslutt"
+
+#: ../js/ui/endSessionDialog.js:75
+msgid "Click Shut Down to quit these applications and shut down the system."
+msgstr ""
+
+#: ../js/ui/endSessionDialog.js:76
+#, c-format
+msgid "The system will shut down automatically in %d seconds."
+msgstr "Systemet vil slås av automatisk om %d sekunder."
+
+#: ../js/ui/endSessionDialog.js:77
+msgid "Shutting down the system."
+msgstr "Slår av systemet."
+
+#: ../js/ui/endSessionDialog.js:84 ../js/ui/endSessionDialog.js:88
+msgid "Restart"
+msgstr "Start på nytt"
+
+#: ../js/ui/endSessionDialog.js:85
+msgid "Click Restart to quit these applications and restart the system."
+msgstr ""
+
+#: ../js/ui/endSessionDialog.js:86
+#, c-format
+msgid "The system will restart automatically in %d seconds."
+msgstr "Systemet vil starte på nytt automatisk om %d sekunder."
+
+#: ../js/ui/endSessionDialog.js:87
+msgid "Restarting the system."
+msgstr "Starter systemet på nytt."
+
+#: ../js/ui/endSessionDialog.js:395
+msgid "Confirm"
+msgstr "Bekreft"
+
+#: ../js/ui/endSessionDialog.js:400 ../js/ui/status/bluetooth.js:469
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: ../js/ui/lookingGlass.js:556
msgid "No extensions installed"
msgstr "Ingen utvidelser installert"
-#: ../js/ui/lookingGlass.js:589
+#: ../js/ui/lookingGlass.js:593
msgid "Enabled"
msgstr "Aktivert"
#. translators:
#. * The device has been disabled
-#: ../js/ui/lookingGlass.js:591 ../src/gvc/gvc-mixer-control.c:1087
+#: ../js/ui/lookingGlass.js:595 ../src/gvc/gvc-mixer-control.c:1087
msgid "Disabled"
msgstr "Deaktivert"
-#: ../js/ui/lookingGlass.js:593
+#: ../js/ui/lookingGlass.js:597
msgid "Error"
msgstr "Feil"
-#: ../js/ui/lookingGlass.js:595
+#: ../js/ui/lookingGlass.js:599
msgid "Out of date"
msgstr "Utdatert"
-#: ../js/ui/lookingGlass.js:620
+#: ../js/ui/lookingGlass.js:624
msgid "View Source"
msgstr "Vis kildekode"
-#: ../js/ui/lookingGlass.js:626
+#: ../js/ui/lookingGlass.js:630
msgid "Web Page"
msgstr "Nettside"
-#: ../js/ui/overview.js:96
+#: ../js/ui/messageTray.js:1748
+msgid "System Information"
+msgstr "Systeminformasjon"
+
+#: ../js/ui/overview.js:75
msgid "Undo"
msgstr "Angre"
-#: ../js/ui/overview.js:158
+#: ../js/ui/overview.js:140
msgid "Windows"
msgstr "Vinduer"
-#: ../js/ui/overview.js:161
+#: ../js/ui/overview.js:143
msgid "Applications"
msgstr "Programmer"
#. TODO - _quit() doesn't really work on apps in state STARTING yet
-#: ../js/ui/panel.js:470
+#: ../js/ui/panel.js:479
#, c-format
msgid "Quit %s"
msgstr "Avslutt %s"
-#: ../js/ui/panel.js:495
-msgid "Preferences"
-msgstr "Brukervalg"
-
#. Translators: This is the time format with date used
#. in 24-hour mode.
-#: ../js/ui/panel.js:581
+#: ../js/ui/panel.js:564
msgid "%a %b %e, %R:%S"
msgstr "%a %e %b, %R.%S"
-#: ../js/ui/panel.js:582
+#: ../js/ui/panel.js:565
msgid "%a %b %e, %R"
msgstr "%a %e %b, %R"
#. Translators: This is the time format without date used
#. in 24-hour mode.
-#: ../js/ui/panel.js:586
+#: ../js/ui/panel.js:569
msgid "%a %R:%S"
msgstr "%a %R.%S"
-#: ../js/ui/panel.js:587
+#: ../js/ui/panel.js:570
msgid "%a %R"
msgstr "%a %R"
#. Translators: This is a time format with date used
#. for AM/PM.
-#: ../js/ui/panel.js:594
+#: ../js/ui/panel.js:577
msgid "%a %b %e, %l:%M:%S %p"
msgstr "%a %e %b, %l.%M.%S %p"
-#: ../js/ui/panel.js:595
+#: ../js/ui/panel.js:578
msgid "%a %b %e, %l:%M %p"
msgstr "%a %e %b, %l.%M %p"
#. Translators: This is a time format without date used
#. for AM/PM.
-#: ../js/ui/panel.js:599
+#: ../js/ui/panel.js:582
msgid "%a %l:%M:%S %p"
msgstr "%a %l.%M.%S %p"
-#: ../js/ui/panel.js:600
+#: ../js/ui/panel.js:583
msgid "%a %l:%M %p"
msgstr "%a %l.%M %p"
#. Button on the left side of the panel.
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
-#: ../js/ui/panel.js:745
+#: ../js/ui/panel.js:728
msgid "Activities"
msgstr "Aktiviteter"
-#: ../js/ui/placeDisplay.js:111
+#: ../js/ui/placeDisplay.js:112
#, c-format
msgid "Failed to unmount '%s'"
msgstr "Klarte ikke å avmontere «%s»"
-#: ../js/ui/placeDisplay.js:114
+#: ../js/ui/placeDisplay.js:115
msgid "Retry"
msgstr "Prøv igjen"
-#: ../js/ui/placeDisplay.js:159
+#: ../js/ui/placeDisplay.js:160
msgid "Connect to..."
-msgstr "Koble til..."
+msgstr "Koble til …"
-#: ../js/ui/placeDisplay.js:558
+#: ../js/ui/placeDisplay.js:559
msgid "PLACES & DEVICES"
msgstr "STEDER & ENHETER"
@@ -487,84 +512,79 @@ msgstr "STEDER & ENHETER"
msgid "toggle-switch-us"
msgstr "toggle-switch-intl"
-#: ../js/ui/runDialog.js:233
+#: ../js/ui/runDialog.js:222
msgid "Please enter a command:"
msgstr "Oppgi en kommando:"
-#: ../js/ui/runDialog.js:378
-#, c-format
-msgid "Execution of '%s' failed:"
-msgstr "Kjøring av «%s» feilet:"
-
-#: ../js/ui/statusMenu.js:101
+#: ../js/ui/statusMenu.js:102
msgid "Available"
msgstr "Tilgjengelig"
-#: ../js/ui/statusMenu.js:106
+#: ../js/ui/statusMenu.js:107
msgid "Busy"
msgstr "Opptatt"
-#: ../js/ui/statusMenu.js:114
+#: ../js/ui/statusMenu.js:115
msgid "My Account"
msgstr "Min konto"
-#: ../js/ui/statusMenu.js:118
+#: ../js/ui/statusMenu.js:119
msgid "System Settings"
msgstr "Systeminnstillinger"
-#: ../js/ui/statusMenu.js:125
+#: ../js/ui/statusMenu.js:126
msgid "Lock Screen"
msgstr "Lås skjerm"
-#: ../js/ui/statusMenu.js:129
+#: ../js/ui/statusMenu.js:130
msgid "Switch User"
msgstr "Bytt bruker"
-#: ../js/ui/statusMenu.js:134
+#: ../js/ui/statusMenu.js:135
msgid "Log Out..."
-msgstr "Logg ut..."
+msgstr "Logg ut …"
-#: ../js/ui/statusMenu.js:141
+#: ../js/ui/statusMenu.js:142
msgid "Suspend..."
-msgstr "Hvilemodus..."
+msgstr "Hvilemodus …"
-#: ../js/ui/statusMenu.js:145
+#: ../js/ui/statusMenu.js:146
msgid "Shut Down..."
-msgstr "Avslutt..."
+msgstr "Avslutt …"
-#: ../js/ui/status/accessibility.js:82
+#: ../js/ui/status/accessibility.js:83
msgid "Zoom"
msgstr "Zoom"
-#: ../js/ui/status/accessibility.js:88
+#: ../js/ui/status/accessibility.js:89
msgid "Screen Reader"
msgstr "Skjermleser"
-#: ../js/ui/status/accessibility.js:91
+#: ../js/ui/status/accessibility.js:92
msgid "Screen Keyboard"
msgstr "Tastatur på skjermen"
-#: ../js/ui/status/accessibility.js:94
+#: ../js/ui/status/accessibility.js:95
msgid "Visual Alerts"
msgstr "Synlig varsling"
-#: ../js/ui/status/accessibility.js:97
+#: ../js/ui/status/accessibility.js:98
msgid "Sticky Keys"
msgstr "Klebrige taster"
-#: ../js/ui/status/accessibility.js:100
+#: ../js/ui/status/accessibility.js:101
msgid "Slow Keys"
msgstr "Trege taster"
-#: ../js/ui/status/accessibility.js:103
+#: ../js/ui/status/accessibility.js:104
msgid "Bounce Keys"
msgstr "Spretne taster"
-#: ../js/ui/status/accessibility.js:106
+#: ../js/ui/status/accessibility.js:107
msgid "Mouse Keys"
msgstr "Mustaster"
-#: ../js/ui/status/accessibility.js:110
+#: ../js/ui/status/accessibility.js:111
msgid "Universal Access Settings"
msgstr "Innstillinger for tilgjengelighet"
@@ -576,15 +596,127 @@ msgstr "Høy kontrast"
msgid "Large Text"
msgstr "Stor tekst"
-#: ../js/ui/status/power.js:85
-msgid "What's using power..."
-msgstr "Hva bruker strøm..."
+#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:240
+msgid "Bluetooth"
+msgstr "Bluetooth"
-#: ../js/ui/status/power.js:88
+#: ../js/ui/status/bluetooth.js:55
+msgid "Visibility"
+msgstr "Synlighet"
+
+#: ../js/ui/status/bluetooth.js:69
+msgid "Send Files to Device..."
+msgstr "Send filer til enhet..."
+
+#: ../js/ui/status/bluetooth.js:70
+msgid "Setup a New Device..."
+msgstr "Sett opp en ny enhet..."
+
+#: ../js/ui/status/bluetooth.js:94
+msgid "Bluetooth Settings"
+msgstr "Innstillinger for Bluetooth"
+
+#: ../js/ui/status/bluetooth.js:191
+msgid "Connection"
+msgstr "Tilkobling"
+
+#: ../js/ui/status/bluetooth.js:227
+msgid "Send Files..."
+msgstr "Send filer..."
+
+#: ../js/ui/status/bluetooth.js:232
+msgid "Browse Files..."
+msgstr "Bla gjennom filer..."
+
+#: ../js/ui/status/bluetooth.js:241
+msgid "Error browsing device"
+msgstr "Feil under lesing av enhet"
+
+#: ../js/ui/status/bluetooth.js:242
+#, c-format
+msgid "The requested device cannot be browsed, error is '%s'"
+msgstr "Kan ikke bla gjennom forespurt enhet. Feilen er «%s»"
+
+#: ../js/ui/status/bluetooth.js:250 ../js/ui/status/keyboard.js:78
+msgid "Keyboard Settings"
+msgstr "Innstillinger for tastatur"
+
+#: ../js/ui/status/bluetooth.js:255
+msgid "Mouse Settings"
+msgstr "Innstillinger for mus"
+
+#: ../js/ui/status/bluetooth.js:262 ../js/ui/status/volume.js:63
+msgid "Sound Settings"
+msgstr "Innstillinger for lyd"
+
+#: ../js/ui/status/bluetooth.js:336 ../js/ui/status/bluetooth.js:370
+#: ../js/ui/status/bluetooth.js:410 ../js/ui/status/bluetooth.js:443
+msgid "Bluetooth Agent"
+msgstr "Bluetooth-agent"
+
+#: ../js/ui/status/bluetooth.js:371
+#, c-format
+msgid "Authorization request from %s"
+msgstr "Forespørsel om autorisering fra %s"
+
+#: ../js/ui/status/bluetooth.js:377
+#, c-format
+msgid "Device %s wants access to the service '%s'"
+msgstr "Enhet %s vil ha tilgang til tjenesten «%s»"
+
+#: ../js/ui/status/bluetooth.js:379
+msgid "Always grant access"
+msgstr "Alltid gi tilgang"
+
+#: ../js/ui/status/bluetooth.js:380
+msgid "Grant this time only"
+msgstr "Gi tilgang kun denne ene gangen"
+
+#: ../js/ui/status/bluetooth.js:381
+msgid "Reject"
+msgstr "Avvis"
+
+#: ../js/ui/status/bluetooth.js:411
+#, c-format
+msgid "Pairing confirmation for %s"
+msgstr "Bekreftelse for tilkobling for %s"
+
+#: ../js/ui/status/bluetooth.js:417 ../js/ui/status/bluetooth.js:451
+#, c-format
+msgid "Device %s wants to pair with this computer"
+msgstr "Enhet %s vil koble seg sammen med denne datamaskinen"
+
+#: ../js/ui/status/bluetooth.js:418
+#, c-format
+msgid "Please confirm whether the PIN '%s' matches the one on the device."
+msgstr "Vennligst bekreft om PIN «%s» er lik den som brukes på enheten."
+
+#: ../js/ui/status/bluetooth.js:420
+msgid "Matches"
+msgstr "Stemmer overens"
+
+#: ../js/ui/status/bluetooth.js:421
+msgid "Does not match"
+msgstr "Stemmer ikke overens"
+
+#: ../js/ui/status/bluetooth.js:444
+#, c-format
+msgid "Pairing request for %s"
+msgstr "Forespørsel om tilkobling for %s"
+
+#: ../js/ui/status/bluetooth.js:452
+msgid "Please enter the PIN mentioned on the device."
+msgstr "Vennligst oppgi PIN som oppgitt på enheten."
+
+#: ../js/ui/status/bluetooth.js:468
+msgid "OK"
+msgstr "OK"
+
+#: ../js/ui/status/power.js:85
msgid "Power Settings"
msgstr "Innstillinger for strøm"
-#: ../js/ui/status/power.js:115
+#: ../js/ui/status/power.js:112
#, c-format
msgid "%d hour remaining"
msgid_plural "%d hours remaining"
@@ -592,106 +724,102 @@ msgstr[0] "%d time gjenstår"
msgstr[1] "%d timer gjenstår"
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
-#: ../js/ui/status/power.js:118
+#: ../js/ui/status/power.js:115
#, c-format
msgid "%d %s %d %s remaining"
msgstr "%d %s %d %s gjenstår"
-#: ../js/ui/status/power.js:120
+#: ../js/ui/status/power.js:117
msgid "hour"
msgid_plural "hours"
msgstr[0] "time"
msgstr[1] "timer"
-#: ../js/ui/status/power.js:120
+#: ../js/ui/status/power.js:117
msgid "minute"
msgid_plural "minutes"
msgstr[0] "minutt"
msgstr[1] "minutter"
-#: ../js/ui/status/power.js:123
+#: ../js/ui/status/power.js:120
#, c-format
msgid "%d minute remaining"
msgid_plural "%d minutes remaining"
msgstr[0] "%d minutt gjenstår"
msgstr[1] "%d minutter gjenstår"
-#: ../js/ui/status/power.js:240
+#: ../js/ui/status/power.js:235
msgid "AC adapter"
msgstr "Strømadapter"
-#: ../js/ui/status/power.js:242
+#: ../js/ui/status/power.js:237
msgid "Laptop battery"
msgstr "Batteri på bærbar"
-#: ../js/ui/status/power.js:244
+#: ../js/ui/status/power.js:239
msgid "UPS"
msgstr "UPS"
-#: ../js/ui/status/power.js:246
+#: ../js/ui/status/power.js:241
msgid "Monitor"
msgstr "Skjerm"
-#: ../js/ui/status/power.js:248
+#: ../js/ui/status/power.js:243
msgid "Mouse"
msgstr "Mus"
-#: ../js/ui/status/power.js:250
+#: ../js/ui/status/power.js:245
msgid "Keyboard"
msgstr "Tastatur"
-#: ../js/ui/status/power.js:252
+#: ../js/ui/status/power.js:247
msgid "PDA"
msgstr "PDA"
-#: ../js/ui/status/power.js:254
+#: ../js/ui/status/power.js:249
msgid "Cell phone"
msgstr "Mobiltelefon"
-#: ../js/ui/status/power.js:256
+#: ../js/ui/status/power.js:251
msgid "Media player"
msgstr "Medieavspiller"
-#: ../js/ui/status/power.js:258
+#: ../js/ui/status/power.js:253
msgid "Tablet"
msgstr "Nettbrett"
-#: ../js/ui/status/power.js:260
+#: ../js/ui/status/power.js:255
msgid "Computer"
msgstr "Datamaskin"
-#: ../js/ui/status/power.js:262 ../src/shell-app-system.c:1012
+#: ../js/ui/status/power.js:257 ../src/shell-app-system.c:1012
msgid "Unknown"
msgstr "Ukjent"
-#: ../js/ui/status/volume.js:41
+#: ../js/ui/status/volume.js:42
msgid "Volume"
msgstr "Volum"
-#: ../js/ui/status/volume.js:54
+#: ../js/ui/status/volume.js:55
msgid "Microphone"
msgstr "Mikrofon"
-#: ../js/ui/status/volume.js:62
-msgid "Sound Settings"
-msgstr "Innstillinger for lyd"
-
-#: ../js/ui/telepathyClient.js:560
+#: ../js/ui/telepathyClient.js:561
#, c-format
msgid "%s is online."
msgstr "%s er tilkoblet."
-#: ../js/ui/telepathyClient.js:565
+#: ../js/ui/telepathyClient.js:566
#, c-format
msgid "%s is offline."
msgstr "%s er frakoblet."
-#: ../js/ui/telepathyClient.js:568
+#: ../js/ui/telepathyClient.js:569
#, c-format
msgid "%s is away."
msgstr "«%s» er borte."
-#: ../js/ui/telepathyClient.js:571
+#: ../js/ui/telepathyClient.js:572
#, c-format
msgid "%s is busy."
msgstr "%s er opptatt."
@@ -699,7 +827,7 @@ msgstr "%s er opptatt."
#. Translators: this is a time format string followed by a date.
#. If applicable, replace %X with a strftime format valid for your
#. locale, without seconds.
-#: ../js/ui/telepathyClient.js:664
+#: ../js/ui/telepathyClient.js:666
#, no-c-format
msgid "Sent at %X on %A"
msgstr "Sendt %X på %A"
@@ -751,32 +879,32 @@ msgstr[1] "%u innganger"
msgid "System Sounds"
msgstr "Systemlyder"
-#: ../src/shell-global.c:1155
+#: ../src/shell-global.c:1233
msgid "Less than a minute ago"
msgstr "Mindre enn ett minutt siden"
-#: ../src/shell-global.c:1159
+#: ../src/shell-global.c:1237
#, c-format
msgid "%d minute ago"
msgid_plural "%d minutes ago"
msgstr[0] "%d minutt siden"
msgstr[1] "%d minutter siden"
-#: ../src/shell-global.c:1164
+#: ../src/shell-global.c:1242
#, c-format
msgid "%d hour ago"
msgid_plural "%d hours ago"
msgstr[0] "%d time siden"
msgstr[1] "%d timer siden"
-#: ../src/shell-global.c:1169
+#: ../src/shell-global.c:1247
#, c-format
msgid "%d day ago"
msgid_plural "%d days ago"
msgstr[0] "%d dag siden"
msgstr[1] "%d dager siden"
-#: ../src/shell-global.c:1174
+#: ../src/shell-global.c:1252
#, c-format
msgid "%d week ago"
msgid_plural "%d weeks ago"
diff --git a/po/pa.po b/po/pa.po
index 187856782..ddbe5fd39 100644
--- a/po/pa.po
+++ b/po/pa.po
@@ -1,22 +1,22 @@
# Punjabi translation for gnome-shell.
# Copyright (C) 2009 gnome-shell's COPYRIGHT HOLDER
# This file is distributed under the same license as the gnome-shell package.
-# A S Alam , 2009, 2010.
+# A S Alam , 2009, 2010, 2011.
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell master\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
-"shell&component=general\n"
-"POT-Creation-Date: 2010-11-29 15:38+0000\n"
-"PO-Revision-Date: 2010-12-01 08:23+0530\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug."
+"cgi?product=gnome-shell&component=general\n"
+"POT-Creation-Date: 2011-01-15 00:23+0000\n"
+"PO-Revision-Date: 2011-01-16 11:07+0530\n"
"Last-Translator: A S Alam \n"
-"Language-Team: punjabi-users@lists.sf.net\n"
-"Language: pa\n"
+"Language-Team: Punjabi/Panjabi \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Language: pa\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Virtaal 0.6.1\n"
+"X-Generator: Lokalize 1.2\n"
#: ../data/gnome-shell.desktop.in.in.h:1
msgid "GNOME Shell"
@@ -26,72 +26,55 @@ msgstr "ਗਨੋਮ ਸ਼ੈਲ"
msgid "Window management and application launching"
msgstr "ਵਿੰਡੋ ਪਰਬੰਧ ਅਤੇ ਐਪਲੀਕੇਸ਼ਨ ਚਲਾਓ"
-#: ../data/gnome-shell-clock-preferences.desktop.in.in.h:1
-msgid "Clock"
-msgstr "ਘੜੀ"
-
-#: ../data/gnome-shell-clock-preferences.desktop.in.in.h:2
-msgid "Customize the panel clock"
-msgstr "ਪੈਨਲ ਘੜੀ ਕਸਟਮਾਈਜ਼ ਕਰੋ"
-
#: ../data/org.gnome.shell.gschema.xml.in.h:1
msgid ""
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
"dialog."
-msgstr "Alt-F2 ਡਾਈਲਾਗ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਅੰਦਰੂਨੀ ਡੀਬੱਗਿਗ ਤੇ ਮਾਨੀਟਰਿੰਗ ਟੂਲ ਵਰਤੋਂ ਕਰਨ ਲਈ ਸਹਾਇਕ ਹੈ"
+msgstr ""
+"Alt-F2 ਡਾਈਲਾਗ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਅੰਦਰੂਨੀ ਡੀਬੱਗਿਗ ਤੇ ਮਾਨੀਟਰਿੰਗ ਟੂਲ ਵਰਤੋਂ ਕਰਨ ਲਈ "
+"ਸਹਾਇਕ ਹੈ"
#: ../data/org.gnome.shell.gschema.xml.in.h:2
-msgid "Custom format of the clock"
-msgstr "ਘੜੀ ਲਈ ਪਸੰਦੀਦਾ ਫਾਰਮੈਟ"
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:3
msgid "Enable internal tools useful for developers and testers from Alt-F2"
msgstr "Alt-F2 ਤੋਂ ਡਿਵੈਲਪਰਾਂ ਤੇ ਟੈਸਟਰਾਂ ਲਈ ਫਾਇਦੇਮੰਦ ਅੰਦਰੂਨੀ ਟੂਲ ਚਾਲੂ ਕਰਦਾ ਹੈ"
-#: ../data/org.gnome.shell.gschema.xml.in.h:4
+#: ../data/org.gnome.shell.gschema.xml.in.h:3
msgid "File extension used for storing the screencast"
msgstr "ਸਕਰੀਨਕਾਸਟ ਸੰਭਾਲਣ ਲਈ ਵਰਤਣ ਵਾਸਤੇ ਫਾਇਲ ਇਕਟੈਨਸ਼ਨ"
-#: ../data/org.gnome.shell.gschema.xml.in.h:5
+#: ../data/org.gnome.shell.gschema.xml.in.h:4
msgid "Framerate used for recording screencasts."
msgstr "ਸਕਰੀਨਕਾਸਟ ਰਿਕਾਰਡ ਕਰਨ ਲਈ ਫਰੇਮਰੇਟ ਹੈ।"
-#: ../data/org.gnome.shell.gschema.xml.in.h:6
+#: ../data/org.gnome.shell.gschema.xml.in.h:5
msgid ""
"GNOME Shell extensions have a uuid property; this key lists extensions which "
"should not be loaded."
msgstr ""
-"ਗਨੋਮ ਸ਼ੈਲ ਇਕਸਟੈਨਸ਼ਨ ਲਈ ਇੱਕ uuid ਵਿਸ਼ੇਸ਼ਤਾ ਹੈ; ਇਹ ਕੁੰਜੀ ਇਕਸਟੈਨਸ਼ਨ ਦਰਸਾਉਂਦੀ ਹੈ, ਜੋ ਲੋਡ ਨਹੀਂ ਹਨ।"
+"ਗਨੋਮ ਸ਼ੈਲ ਇਕਸਟੈਨਸ਼ਨ ਲਈ ਇੱਕ uuid ਵਿਸ਼ੇਸ਼ਤਾ ਹੈ; ਇਹ ਕੁੰਜੀ ਇਕਸਟੈਨਸ਼ਨ ਦਰਸਾਉਂਦੀ ਹੈ, "
+"ਜੋ ਲੋਡ ਨਹੀਂ ਹਨ।"
-#: ../data/org.gnome.shell.gschema.xml.in.h:7
+#: ../data/org.gnome.shell.gschema.xml.in.h:6
msgid "History for command (Alt-F2) dialog"
msgstr "ਕਮਾਂਡ (Alt-F2) ਡਾਈਲਾਗ ਲਈ ਅਤੀਤ"
+#: ../data/org.gnome.shell.gschema.xml.in.h:7
+msgid "If true, display date in the clock, in addition to time."
+msgstr "ਜੇ ਸੱਚ ਹੈ ਤਾਂ, ਘੜੀ ਵਿਚ ਸਮਾਂ ਨਾਲ ਮਿਤੀ ਵੀ ਵੇਖਾਈ ਜਾਵੇਗੀ।"
+
#: ../data/org.gnome.shell.gschema.xml.in.h:8
-msgid "Hour format"
-msgstr "ਘੰਟਾ ਫਾਰਮੈਟ"
+msgid "If true, display seconds in time."
+msgstr "ਜੇ ਸੱਚ ਹੈ ਤਾਂ ਸਮਾਂ ਵਿੱਚ ਸਕਿੰਟ ਵੀ ਵੇਖਾਏ ਜਾਣਗੇ।"
#: ../data/org.gnome.shell.gschema.xml.in.h:9
-msgid ""
-"If true and format is either \"12-hour\" or \"24-hour\", display date in the "
-"clock, in addition to time."
-msgstr "ਜੇ ਚੋਣ ਕੀਤੀ ਤਾਂ ਘੜੀ ਵਿੱਚ \"12-hour\" ਜਾਂ \" 24-hour\" ਸਮੇਂ ਦੇ ਨਾਲ ਵੇਖਾਏ ਜਾਣਗੇ।"
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:10
-msgid ""
-"If true and format is either \"12-hour\" or \"24-hour\", display seconds in "
-"time."
-msgstr "ਜੇ ਚੋਣ ਕੀਤੀ ਤਾਂ ਸਮੇਂ ਵਿੱਚ \"12-hour\" ਜਾਂ \" 24-hour\" ਸਕਿੰਟ ਵੇਖਾਏ ਜਾਣਗੇ।"
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:11
msgid "If true, display the ISO week date in the calendar."
msgstr "ਜੇ ਚੋਣ ਕੀਤੀ ਤਾਂ ਕੈਲੰਡਰ ਵਿੱਚ ISO ਹਫਤਾ ਮਿਤੀ ਵੇਖਾਈ ਜਾਵੇਗੀ।"
-#: ../data/org.gnome.shell.gschema.xml.in.h:12
+#: ../data/org.gnome.shell.gschema.xml.in.h:10
msgid "List of desktop file IDs for favorite applications"
msgstr "ਪਸੰਦੀਦਾ ਐਪਲੀਕੇਸ਼ਨ ਲਈ ਡੈਸਕਟਾਪ ਫਾਇਲ ID ਦੀ ਲਿਸਟ ਹੈ"
-#: ../data/org.gnome.shell.gschema.xml.in.h:13
+#: ../data/org.gnome.shell.gschema.xml.in.h:11
msgid ""
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
"used for gst-launch. The pipeline should have an unconnected sink pad where "
@@ -103,83 +86,70 @@ msgid ""
"'videorate ! theoraenc ! oggmux' and records to Ogg Theora."
msgstr ""
-#: ../data/org.gnome.shell.gschema.xml.in.h:14
+#: ../data/org.gnome.shell.gschema.xml.in.h:12
msgid "Show date in clock"
msgstr "ਘੜੀ ਵਿੱਚ ਮਿਤੀ ਵੇਖੋ"
-#: ../data/org.gnome.shell.gschema.xml.in.h:15
+#: ../data/org.gnome.shell.gschema.xml.in.h:13
msgid "Show the week date in the calendar"
msgstr "ਕੈਲੰਡਰ ਵਿੱਚ ਹਫ਼ਤਾ ਮਿਤੀ ਵੇਖੋ"
-#: ../data/org.gnome.shell.gschema.xml.in.h:16
+#: ../data/org.gnome.shell.gschema.xml.in.h:14
msgid "Show time with seconds"
msgstr "ਸਮਾਂ ਵਿੱਚ ਸਕਿੰਟ ਵੇਖੋ"
-#: ../data/org.gnome.shell.gschema.xml.in.h:17
+#: ../data/org.gnome.shell.gschema.xml.in.h:15
msgid ""
"The applications corresponding to these identifiers will be displayed in the "
"favorites area."
-msgstr "ਇਹਨਾਂ ਐਂਡਟਟੀਫਾਇਰ ਨਾਲ ਸਬੰਧਿਤ ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਪਸੰਦੀਦਾ ਖੇਤਰ 'ਚ ਵੇਖਾਇਆ ਜਾਵੇਗਾ।"
+msgstr ""
+"ਇਹਨਾਂ ਐਂਡਟਟੀਫਾਇਰ ਨਾਲ ਸਬੰਧਿਤ ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਪਸੰਦੀਦਾ ਖੇਤਰ 'ਚ ਵੇਖਾਇਆ ਜਾਵੇਗਾ।"
-#: ../data/org.gnome.shell.gschema.xml.in.h:18
+#: ../data/org.gnome.shell.gschema.xml.in.h:16
msgid ""
"The filename for recorded screencasts will be a unique filename based on the "
"current date, and use this extension. It should be changed when recording to "
"a different container format."
msgstr ""
+"ਰਿਕਾਰਡ ਕੀਤੇ ਸਕਰੀਨਕਾਸਟ ਲਈ ਫਾਇਲ ਨਾਂ ਮੌਜੂਦਾ ਮਿਤੀ ਦੇ ਮੁਤਾਬਕ ਵਿਲੱਖਣ ਫਾਇਲ ਨਾਂ "
+"ਹੋਵੇਗਾ ਅਤੇ ਇਹ "
+"ਇਕਸਟੈਨਸ਼ਨ ਵਰਤੀ ਜਾਵੇਗੀ। ਇਸ ਨੂੰ ਬਦਲਿਆ ਜਾਵੇਗਾ, ਜਦੋਂ ਵੱਖਰੇ ਕੰਨਟੇਨਰ ਫਾਰਮੈਟ ਵਿੱਚ "
+"ਰਿਕਾਰਡ ਕੀਤਾ "
+"ਜਾਵੇਗਾ।"
-#: ../data/org.gnome.shell.gschema.xml.in.h:19
+#: ../data/org.gnome.shell.gschema.xml.in.h:17
msgid ""
"The framerate of the resulting screencast recordered by GNOME Shell's "
"screencast recorder in frames-per-second."
msgstr ""
-"ਗਨੋਮ ਸ਼ੈੱਲ ਦੇ ਸਕਰੀਨਕਾਸਟ ਰਿਕਾਰਡਰ ਵਲੋਂ ਰਿਕਾਰਡ ਕਰਕੇ ਬਣਾਈ ਗਈ ਸਕਰੀਨਕਾਸਟ ਦਾ ਫਰੇਮਰੇਟ ਫਰੇਮ ਪ੍ਰਤੀ "
+"ਗਨੋਮ ਸ਼ੈੱਲ ਦੇ ਸਕਰੀਨਕਾਸਟ ਰਿਕਾਰਡਰ ਵਲੋਂ ਰਿਕਾਰਡ ਕਰਕੇ ਬਣਾਈ ਗਈ ਸਕਰੀਨਕਾਸਟ ਦਾ ਫਰੇਮਰੇਟ "
+"ਫਰੇਮ ਪ੍ਰਤੀ "
"ਸਕਿੰਟ 'ਚ ਹੈ।"
-#: ../data/org.gnome.shell.gschema.xml.in.h:20
+#: ../data/org.gnome.shell.gschema.xml.in.h:18
msgid "The gstreamer pipeline used to encode the screencast"
msgstr "ਸਕਰੀਨਕਾਸਟ ਇੰਕੋਡ ਕਰਨ ਲਈ ਵਰਤਣ ਵਾਸਤੇ ਜੀਸਟਰੀਮਰ ਪਾਇਪਲਾਇਨ"
-#: ../data/org.gnome.shell.gschema.xml.in.h:21
+#: ../data/org.gnome.shell.gschema.xml.in.h:19
msgid ""
"The shell normally monitors active applications in order to present the most "
"used ones (e.g. in launchers). While this data will be kept private, you may "
"want to disable this for privacy reasons. Please note that doing so won't "
"remove already saved data."
msgstr ""
+"ਸ਼ੈੱਲ ਲਗਾਤਾਰ ਸਰਗਰਮ ਐਪਲੀਕੇਸ਼ਨ ਦੀ ਨਿਗਰਾਨੀ ਕਰਦੀ ਰਹਿੰਦੀ ਹੈ ਤਾਂ ਕਿ ਸਭ ਤੋਂ ਵੱਧ "
+"ਵਰਤੀਆਂ ਐਪਲੀਕੇਸ਼ਨਾਂ "
+"ਨੂੰ ਵੇਖਾਇਆ ਜਾ ਸਕੇ (ਜਿਵੇਂ ਕਿ ਲਾਂਚਰ ਵਿੱਚ)। ਹਾਲਾਂਕਿ ਇਹ ਡਾਟਾ ਪ੍ਰਾਈਵੇਟ ਹੀ ਰੱਖਿਆ "
+"ਜਾਵੇਗਾ, ਤਾਂ ਵੀ "
+"ਜੇ ਤੁਸੀਂ ਚਾਹੋ ਤਾਂ ਇਸ ਨੂੰ ਸੁਰੱਖਿਆ ਕਾਰਨਾਂ ਕਰਕੇ ਬੰਦ ਕਰ ਸਕਦੇ ਹੋ। ਯਾਦ ਰੱਖੋ ਕਿ ਇੰਝ "
+"ਕਰਨ ਨਾਲ ਪਹਿਲਾਂ "
+"ਸੰਭਾਲਿਆ ਗਿਆ ਡਾਟਾ ਹਟਾਇਆ ਨਹੀਂ ਜਾਵੇਗਾ।"
-#: ../data/org.gnome.shell.gschema.xml.in.h:22
-msgid ""
-"This key specifies the format used by the panel clock when the format key is "
-"set to \"custom\". You can use conversion specifiers understood by strftime"
-"() to obtain a specific format. See the strftime() manual for more "
-"information."
-msgstr ""
-"ਇਹ ਕੁੰਜੀ ਪੈਨਲ ਘੜੀ ਲਈ ਵਰਤਣ ਵਾਸਤੇ ਫਾਰਮੈਟ ਦਿੰਦੀ ਹੈ, ਜਦੋਂ ਕਿ ਫਾਰਮੈਟ ਕੁੰਜੀ \"ਕਸਟਮ\" ਸੈੱਟ ਕੀਤੀ "
-"ਹੋਵੇ। ਤੁਸੀਂ ਖਾਸ ਫਾਰਮੈਟ ਦੇਣ ਲਈ ਹਦਾਇਤਾਂ ਵਾਸਤੇ strftime () ਨੂੰ ਵਰਤ ਸਕਦੇ ਹੋ। ਹੋਰ ਜਾਣਕਾਰੀ ਲਈ "
-"strftime () ਦਸਤਾਵੇਜ਼ ਵੇਖੋ।"
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:23
-msgid ""
-"This key specifies the hour format used by the panel clock. Possible values "
-"are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to \"unix\", "
-"the clock will display time in seconds since Epoch, i.e. 1970-01-01. If set "
-"to \"custom\", the clock will display time according to the format specified "
-"in the custom_format key. Note that if set to either \"unix\" or \"custom\", "
-"the show_date and show_seconds keys are ignored."
-msgstr ""
-"ਇਹ ਕੁੰਜੀ ਤਹਿ ਕਰਦੀ ਹੈ ਕਿ ਕਿਹੜਾ ਪੈਨਲ ਘੜੀ ਵਿੱਚ ਘੰਟਾ ਫਾਰਮੈਟ ਵਰਤਿਆ ਜਾਵੇ। ਸੰਭਵ ਮੁੱਲ ਹਨ \"12-"
-"hour\"(੧੨-ਘੰਟੇ), \"24-hour\" (੨੪-ਘੰਟੇ), \"unix\" (ਯੂਨੈਕਸ) ਅਤੇ \"custom\" (ਪਸੰਦੀਦਾ)। "
-"ਜੇ \"ਯੂਨੈਕਸ\" ਸੈੱਟ ਕੀਤਾ ਗਿਆ ਤਾਂ ਘੜੀ ਨੂੰ ਈਪੋਚ (੦੧-ਜਨਵਰੀ-੧੯੭੦) ਤੋਂ ਵੇਖਾਇਆ\n"
-"ਜਾਵੇਗਾ। ਜੇ \"ਪਸੰਦੀਦਾ\" ਲਈ ਸੈੱਟ ਕੀਤਾ ਗਿਆ ਤਾਂ, ਘੜੀ ਨੂੰ custom_format ਕੁੰਜੀ ਵਿੱਚ ਦਿੱਤੇ ਫਾਰਮੈਟ "
-"ਮੁਤਾਬਕ ਵੇਖਾਇਆ ਜਾਵੇਗਾ। ਯਾਦ ਰੱਖੋ ਕਿ ਜੇ \"ਯੂਨੈਕਸ\" ਜਾਂ \"ਪਸੰਦੀਦਾ\" ਸੈੱਟ ਕੀਤਾ ਤਾਂ ਅੱਪਗਰੇਡ ਮਿਤੀ "
-"ਵੇਖਾਓ ਤੇ ਸਕਿੰਟ ਵੇਖਾਓ ਨੂੰ ਅਣਡਿੱਠਾ ਕੀਤਾ ਜਾਵੇਗਾ।"
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:24
+#: ../data/org.gnome.shell.gschema.xml.in.h:20
msgid "Uuids of extensions to disable"
msgstr "ਇਕਟੈਨਸ਼ਨ ਦੀ Uuids ਬੰਦ ਹੈ"
-#: ../data/org.gnome.shell.gschema.xml.in.h:25
+#: ../data/org.gnome.shell.gschema.xml.in.h:21
msgid "Whether to collect stats about applications usage"
msgstr "ਐਪਲੀਕੇਸ਼ਨ ਵਰਤੋਂ ਬਾਰੇ ਅੰਕੜੇ ਇੱਕਠੇ ਕਰਨੇ ਹਨ"
@@ -232,6 +202,7 @@ msgid ""
"Enables/disables display of crosshairs centered on the magnified mouse "
"sprite."
msgstr ""
+"ਵੱਡਦਰਸ਼ੀ ਮਾਊਸ ਸਪਰਿਟ ਉੱਤੇ ਸੈਂਟਰ ਕੀਤੇ ਕਰਾਂਸਹੇਅਰ ਵੇਖਾਉਣਾ ਚਾਲੂ ਜਾਂ ਬੰਦ ਕਰੋ।"
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:9
msgid ""
@@ -239,6 +210,11 @@ msgid ""
"of the screen, the magnified contents continue to scroll such that the "
"screen edge moves into the magnified view."
msgstr ""
+"ਸੈਂਟਰਡ ਮਾਊਸ ਟਰੈਕ ਕਰਨ ਲਈ, ਜਦੋਂ ਸਿਸਟਮ ਪੁਆਇੰਟਰ ਸਕਰੀਨ ਦੇ ਕਿਸੇ ਕੋਨੇ ਕੋਲ ਜਾਂਦਾ ਹੈ "
+"ਤਾਂ ਵੱਡੇ ਰੂਪ ਵਿੱਚ "
+"ਵੇਖਾਈ ਜਾਂਦੀ ਸਮੱਗਰੀ ਇੰਝ ਸਕਰੋਲ ਕੀਤੀ ਜਾਂਦੀ ਹੈ ਤਾਂ ਕਿ ਸਕਰੀਨ ਕੋਨੇ ਵੱਡਦਰਸ਼ ਝਲਕ ਦੇ "
+"ਰੂਪ ਵਿੱਚ ਵੇਖਾਈ "
+"ਜਾਂਦੇ ਰਹਿੰਦੇ ਹਨ।"
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:10
msgid "Length of the crosshairs"
@@ -287,12 +263,17 @@ msgid ""
"The magnified view either fills the entire screen, or occupies the top-half, "
"bottom-half, left-half, or right-half of the screen."
msgstr ""
+"ਵੱਡਦਰਸ਼ੀ ਝਲਕ ਪੂਰੀ ਸਕਰੀਨ ਨੂੰ ਭਰ ਸਕਦਾ ਹੈ ਜਾਂ ਅੱਧਾ-ਉੱਤੇ, ਅੱਧਾ ਹੇਠਾਂ, ਅੱਧਾ ਖੱਬੇ "
+"ਜਾਂ ਅੱਧਾ-ਸੱਜੇ ਭਾਗ ਨੂੰ "
+"ਭਰ ਸਕਦਾ ਹੈ।"
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:21
msgid ""
"The power of the magnification. A value of 1.0 means no magnification. A "
"value of 2.0 doubles the size."
-msgstr "ਵੱਡਦਰਸ਼ੀ ਦੀ ਤਾਕਤ ਹੈ। ੧.੦ ਦਾ ਮਤਲਬ ਹੈ ਕਿ ਕੋਈ ਵੀ ਨਹੀਂ। ੨.੦ ਦਾ ਮਤਲਬ ਹੈ ਆਕਾਰ ਦਾ ਦੋ ਗੁਣਾ।"
+msgstr ""
+"ਵੱਡਦਰਸ਼ੀ ਦੀ ਤਾਕਤ ਹੈ। ੧.੦ ਦਾ ਮਤਲਬ ਹੈ ਕਿ ਕੋਈ ਵੀ ਨਹੀਂ। ੨.੦ ਦਾ ਮਤਲਬ ਹੈ ਆਕਾਰ ਦਾ ਦੋ "
+"ਗੁਣਾ।"
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:22
msgid "Thickness of the crosshairs"
@@ -303,56 +284,51 @@ msgid ""
"Whether the magnified view should be centered over the location of the "
"system mouse and move with it."
msgstr ""
+"ਕੀ ਵੱਡਦਰਸ਼ੀ ਝਲਕ ਦੀ ਸਥਿਤੀ ਸਿਸਟਮ ਮਾਊਂਸ ਦੁਆਲੇ ਕੇਂਦਰਤ ਰਹੇ ਅਤੇ ਉਸ ਨਾਲ ਹੀ ਹਿੱਲੇ।"
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:24
msgid "Width of the vertical and horizontal lines that make up the crosshairs."
msgstr "ਵਰਟੀਕਲ ਤੇ ਹਰੀਜੱਟਲ ਲਾਈਨਾਂ ਦੀ ਚੌੜਾਈ, ਜੋ ਕਿ ਕਰਾਂਸਹੇਅਰ ਬਣਾਉਂਦੀਆਂ ਹਨ"
-#: ../data/clock-preferences.ui.h:1
-msgid "Clock Format"
-msgstr "ਘੜੀ ਫਾਰਮੈਟ"
+#. Replace "Error invoking GLib.shell_parse_argv: " with
+#. something nicer
+#: ../js/misc/util.js:108
+#| msgid "Please enter a command:"
+msgid "Could not parse command:"
+msgstr "ਕਮਾਂਡ ਪਾਰਸ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕੀ:"
-#: ../data/clock-preferences.ui.h:2
-msgid "Clock Preferences"
-msgstr "ਘੜੀ ਪਸੰਦ"
+#: ../js/misc/util.js:130
+#| msgid "Applications"
+msgid "No such application"
+msgstr "ਇੰਞ ਦੀ ਕੋਈ ਐਪਲੀਕੇਸ਼ਨ ਨਹੀਂ ਹੈ"
-#: ../data/clock-preferences.ui.h:3
-msgid "Panel Display"
-msgstr "ਪੈਨਲ ਦਿੱਖ"
+#: ../js/misc/util.js:143 ../js/ui/runDialog.js:364
+#, c-format
+msgid "Execution of '%s' failed:"
+msgstr "'%s' ਚਲਾਉਣ ਲਈ ਫੇਲ੍ਹ:"
-#: ../data/clock-preferences.ui.h:4
-msgid "Show seco_nds"
-msgstr "ਸਕਿੰਟ ਵੇਖੋ(_n)"
+#. Translators: Filter to display all applications
+#: ../js/ui/appDisplay.js:155
+msgid "All"
+msgstr "ਸਭ"
-#: ../data/clock-preferences.ui.h:5
-msgid "Show the _date"
-msgstr "ਮਿਤੀ ਵੇਖੋ(_d)"
-
-#: ../data/clock-preferences.ui.h:6
-msgid "_12 hour format"
-msgstr "_੧੨ ਘੰਟੇ ਫਾਰਮੈਟ"
-
-#: ../data/clock-preferences.ui.h:7
-msgid "_24 hour format"
-msgstr "_੨੪ ਘੰਟੇ ਫਾਰਮੈਟ"
-
-#: ../js/ui/appDisplay.js:215
+#: ../js/ui/appDisplay.js:236
msgid "APPLICATIONS"
msgstr "ਐਪਲੀਕੇਸ਼ਨ"
-#: ../js/ui/appDisplay.js:245
+#: ../js/ui/appDisplay.js:266
msgid "PREFERENCES"
msgstr "ਪਸੰਦ"
-#: ../js/ui/appDisplay.js:538
+#: ../js/ui/appDisplay.js:563
msgid "New Window"
msgstr "ਨਵੀਂ ਵਿੰਡੋ"
-#: ../js/ui/appDisplay.js:542
+#: ../js/ui/appDisplay.js:567
msgid "Remove from Favorites"
msgstr "ਪਸੰਦ ਵਿੱਚੋਂ ਹਟਾਓ"
-#: ../js/ui/appDisplay.js:543
+#: ../js/ui/appDisplay.js:568
msgid "Add to Favorites"
msgstr "ਪਸੰਦ 'ਚ ਸ਼ਾਮਲ ਕਰੋ"
@@ -370,114 +346,198 @@ msgstr "%s ਨੂੰ ਤੁਹਾਡੀ ਪਸੰਦ ਤੋਂ ਹਟਾਇਆ
msgid "Remove"
msgstr "ਹਟਾਓ"
-#: ../js/ui/docDisplay.js:494
+#: ../js/ui/docDisplay.js:18
msgid "RECENT ITEMS"
msgstr "ਤਾਜ਼ਾ ਆਈਟਮਾਂ"
-#: ../js/ui/lookingGlass.js:552
+#: ../js/ui/endSessionDialog.js:63
+#, c-format
+#| msgid "Log Out..."
+msgid "Log Out %s"
+msgstr "%s ਲਾਗਆਉਟ"
+
+#: ../js/ui/endSessionDialog.js:64 ../js/ui/endSessionDialog.js:69
+#| msgid "Log Out..."
+msgid "Log Out"
+msgstr "ਲਾਗਆਉਟ"
+
+#: ../js/ui/endSessionDialog.js:65
+msgid "Click Log Out to quit these applications and log out of the system."
+msgstr ""
+"ਇਹ ਐਪਲੀਕੇਸ਼ਨ ਬੰਦ ਕਰਨ ਤੇ ਸਿਸਟਮ ਨੂੰ ਲਾਗਆਉਟ ਕਰਨ ਲਈ ਲਾਗਆਉਟ ਕਰੋ ਨੂੰ ਕਲਿੱਕ ਕਰੋ।"
+
+#: ../js/ui/endSessionDialog.js:66
+#, c-format
+msgid "%s will be logged out automatically in %d seconds."
+msgstr "%s %d ਸਕਿੰਟ ਵਿੱਚ ਆਟੋਮੈਟਿਕ ਹੀ ਲਾਗ ਆਉਟ ਹੋ ਜਾਵੇਗਾ।"
+
+#: ../js/ui/endSessionDialog.js:67
+#, c-format
+msgid "You will be logged out automatically in %d seconds."
+msgstr "ਤੁਹਾਨੂੰ %d ਸਕਿੰਟਾਂ ਵਿੱਚ ਆਟੋਮੈਟਿਕ ਹੀ ਲਾਗਆਉਟ ਕਰ ਦਿੱਤਾ ਜਾਵੇਗਾ।"
+
+#: ../js/ui/endSessionDialog.js:68
+msgid "Logging out of the system."
+msgstr "ਸਿਸਟਮ ਲਾਗ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ।"
+
+#: ../js/ui/endSessionDialog.js:74 ../js/ui/endSessionDialog.js:78
+#| msgid "Shut Down..."
+msgid "Shut Down"
+msgstr "ਬੰਦ ਕਰੋ"
+
+#: ../js/ui/endSessionDialog.js:75
+msgid "Click Shut Down to quit these applications and shut down the system."
+msgstr "ਇਹ ਐਪਲੀਕੇਸ਼ਨ ਬੰਦ ਕਰਕੇ ਸਿਸਟਮ ਨੂੰ ਬੰਦ ਕਰਨ ਲਈ ਬੰਦ ਕਰੋ ਨੂੰ ਕਲਿੱਕ ਕਰੋ।"
+
+#: ../js/ui/endSessionDialog.js:76
+#, c-format
+msgid "The system will shut down automatically in %d seconds."
+msgstr "ਸਿਸਟਮ ਨੂੰ ਆਟੋਮੈਟਿਕ ਹੀ %d ਸਕਿੰਟਾਂ ਵਿੱਚ ਬੰਦ ਕੀਤਾ ਜਾਵੇਗਾ।"
+
+#: ../js/ui/endSessionDialog.js:77
+msgid "Shutting down the system."
+msgstr "ਸਿਸਟਮ ਬੰਦ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ।"
+
+#: ../js/ui/endSessionDialog.js:84 ../js/ui/endSessionDialog.js:88
+#| msgid "Restart..."
+msgid "Restart"
+msgstr "ਮੁੜ-ਚਾਲੂ ਕਰੋ"
+
+#: ../js/ui/endSessionDialog.js:85
+msgid "Click Restart to quit these applications and restart the system."
+msgstr ""
+"ਇਹ ਐਪਲੀਕੇਸ਼ਨ ਬੰਦ ਕਰਨ ਤੇ ਸਿਸਟਮ ਨੂੰ ਮੁੜ-ਚਾਲੂ ਕਰਨ ਲਈ ਮੁੜ-ਚਾਲੂ ਕਰੋ ਨੂੰ ਕਲਿੱਕ ਕਰੋ।"
+
+#: ../js/ui/endSessionDialog.js:86
+#, c-format
+msgid "The system will restart automatically in %d seconds."
+msgstr "ਸਿਸਟਮ ਨੂੰ ਆਟੋਮੈਟਿਕ ਹੀ %d ਸਕਿੰਟਾਂ ਵਿੱਚ ਮੁੜ-ਚਾਲੂ ਕੀਤਾ ਜਾ ਜਾਵੇਗਾ।"
+
+#: ../js/ui/endSessionDialog.js:87
+msgid "Restarting the system."
+msgstr "ਸਿਸਟਮ ਮੁੜ-ਚਾਲੂ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ।"
+
+#: ../js/ui/endSessionDialog.js:395
+msgid "Confirm"
+msgstr "ਪੁਸ਼ਟੀ"
+
+#: ../js/ui/endSessionDialog.js:400 ../js/ui/status/bluetooth.js:469
+msgid "Cancel"
+msgstr "ਰੱਦ ਕਰੋ"
+
+#: ../js/ui/lookingGlass.js:556
msgid "No extensions installed"
msgstr "ਕੋਈ ਇਕਸਟੈਨਸ਼ਨ ਇੰਸਟਾਲ ਨਹੀਂ ਹੈ"
-#: ../js/ui/lookingGlass.js:589
+#: ../js/ui/lookingGlass.js:593
msgid "Enabled"
msgstr "ਚਾਲੂ ਹੈ"
#. translators:
#. * The device has been disabled
-#: ../js/ui/lookingGlass.js:591 ../src/gvc/gvc-mixer-control.c:1087
+#: ../js/ui/lookingGlass.js:595 ../src/gvc/gvc-mixer-control.c:1087
msgid "Disabled"
msgstr "ਬੰਦ ਹੈ"
-#: ../js/ui/lookingGlass.js:593
+#: ../js/ui/lookingGlass.js:597
msgid "Error"
msgstr "ਗਲਤੀ"
-#: ../js/ui/lookingGlass.js:595
+#: ../js/ui/lookingGlass.js:599
msgid "Out of date"
msgstr "ਪੁਰਾਣਾ"
-#: ../js/ui/lookingGlass.js:620
+#: ../js/ui/lookingGlass.js:624
msgid "View Source"
msgstr "ਸਰੋਤ ਵੇਖੋ"
-#: ../js/ui/lookingGlass.js:626
+#: ../js/ui/lookingGlass.js:630
msgid "Web Page"
msgstr "ਵੈੱਬ ਪੇਜ਼"
-#: ../js/ui/overview.js:112
+#: ../js/ui/messageTray.js:1748
+#| msgid "Account Information..."
+msgid "System Information"
+msgstr "ਸਿਸਟਮ ਜਾਣਕਾਰੀ"
+
+#: ../js/ui/overview.js:75
msgid "Undo"
msgstr "ਵਾਪਸ"
+#: ../js/ui/overview.js:140
+msgid "Windows"
+msgstr "ਵਿੰਡੋ"
+
+#: ../js/ui/overview.js:143
+msgid "Applications"
+msgstr "ਐਪਲੀਕੇਸ਼ਨ"
+
#. TODO - _quit() doesn't really work on apps in state STARTING yet
-#: ../js/ui/panel.js:470
+#: ../js/ui/panel.js:479
#, c-format
msgid "Quit %s"
msgstr "%s ਬੰਦ ਕਰੋ"
-#: ../js/ui/panel.js:495
-msgid "Preferences"
-msgstr "ਮੇਰੀ ਪਸੰਦ"
-
#. Translators: This is the time format with date used
#. in 24-hour mode.
-#: ../js/ui/panel.js:581
+#: ../js/ui/panel.js:564
msgid "%a %b %e, %R:%S"
msgstr "%a, %e %b %R:%S"
-#: ../js/ui/panel.js:582
+#: ../js/ui/panel.js:565
msgid "%a %b %e, %R"
msgstr "%a %e %b, %R"
#. Translators: This is the time format without date used
#. in 24-hour mode.
-#: ../js/ui/panel.js:586
+#: ../js/ui/panel.js:569
msgid "%a %R:%S"
msgstr "%a %R:%S"
-#: ../js/ui/panel.js:587
+#: ../js/ui/panel.js:570
msgid "%a %R"
msgstr "%a %R"
#. Translators: This is a time format with date used
#. for AM/PM.
-#: ../js/ui/panel.js:594
+#: ../js/ui/panel.js:577
msgid "%a %b %e, %l:%M:%S %p"
msgstr "%a %e %b, %l:%M:%S %p"
-#: ../js/ui/panel.js:595
+#: ../js/ui/panel.js:578
msgid "%a %b %e, %l:%M %p"
msgstr "%a %e %b, %l:%M %p"
#. Translators: This is a time format without date used
#. for AM/PM.
-#: ../js/ui/panel.js:599
+#: ../js/ui/panel.js:582
msgid "%a %l:%M:%S %p"
msgstr "%a %l:%M:%S %p"
-#: ../js/ui/panel.js:600
+#: ../js/ui/panel.js:583
msgid "%a %l:%M %p"
msgstr "%a %l:%M %p"
#. Button on the left side of the panel.
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
-#: ../js/ui/panel.js:745
+#: ../js/ui/panel.js:728
msgid "Activities"
msgstr "ਸਰਗਰਮੀਆਂ"
-#: ../js/ui/placeDisplay.js:111
+#: ../js/ui/placeDisplay.js:112
#, c-format
msgid "Failed to unmount '%s'"
msgstr "'%s' ਅਣ-ਮਾਊਂਟ ਕਰਨ ਲਈ ਫੇਲ੍ਹ"
-#: ../js/ui/placeDisplay.js:114
+#: ../js/ui/placeDisplay.js:115
msgid "Retry"
msgstr "ਮੁੜ-ਕੋਸ਼ਿਸ਼"
-#: ../js/ui/placeDisplay.js:159
+#: ../js/ui/placeDisplay.js:160
msgid "Connect to..."
msgstr "...ਨਾਲ ਕੁਨੈਕਟ ਕਰੋ"
-#: ../js/ui/placeDisplay.js:558
+#: ../js/ui/placeDisplay.js:559
msgid "PLACES & DEVICES"
msgstr "ਥਾਵਾਂ ਤੇ ਜੰਤਰ"
@@ -490,83 +550,79 @@ msgstr "ਥਾਵਾਂ ਤੇ ਜੰਤਰ"
msgid "toggle-switch-us"
msgstr "toggle-switch-us"
-#: ../js/ui/runDialog.js:233
+#: ../js/ui/runDialog.js:222
msgid "Please enter a command:"
msgstr "ਕਮਾਂਡ ਦਿਓ ਜੀ:"
-#: ../js/ui/runDialog.js:378
-#, c-format
-msgid "Execution of '%s' failed:"
-msgstr "'%s' ਚਲਾਉਣ ਲਈ ਫੇਲ੍ਹ:"
-
-#: ../js/ui/statusMenu.js:101
+#: ../js/ui/statusMenu.js:102
msgid "Available"
msgstr "ਉਪਲੱਬਧ"
-#: ../js/ui/statusMenu.js:106
+#: ../js/ui/statusMenu.js:107
msgid "Busy"
msgstr "ਰੁਝਿਆ"
-#: ../js/ui/statusMenu.js:114
-#| msgid "My Account..."
+#: ../js/ui/statusMenu.js:115
msgid "My Account"
msgstr "ਮੇਰਾ ਅਕਾਊਂਟ"
-#: ../js/ui/statusMenu.js:118
-#| msgid "System Sounds"
+#: ../js/ui/statusMenu.js:119
msgid "System Settings"
msgstr "ਸਿਸਟਮ ਸੈਟਿੰਗ"
-#: ../js/ui/statusMenu.js:125
+#: ../js/ui/statusMenu.js:126
msgid "Lock Screen"
msgstr "ਸਕਰੀਨ ਲਾਕ ਕਰੋ"
-#: ../js/ui/statusMenu.js:129
+#: ../js/ui/statusMenu.js:130
msgid "Switch User"
msgstr "ਯੂਜ਼ਰ ਬਦਲੋ"
-#: ../js/ui/statusMenu.js:134
+#: ../js/ui/statusMenu.js:135
msgid "Log Out..."
msgstr "ਲਾਗਆਉਟ..."
-#: ../js/ui/statusMenu.js:141
-#| msgid "Suspend"
+#: ../js/ui/statusMenu.js:142
msgid "Suspend..."
msgstr "ਸਸਪੈਂਡ..."
-#: ../js/ui/statusMenu.js:145
+#: ../js/ui/statusMenu.js:146
msgid "Shut Down..."
msgstr "ਬੰਦ ਕਰੋ..."
-#: ../js/ui/status/accessibility.js:88
+#: ../js/ui/status/accessibility.js:83
+msgid "Zoom"
+msgstr "ਜ਼ੂਮ"
+
+#: ../js/ui/status/accessibility.js:89
msgid "Screen Reader"
msgstr "ਸਕਰੀਨ ਰੀਡਰ"
-#: ../js/ui/status/accessibility.js:91
+#: ../js/ui/status/accessibility.js:92
msgid "Screen Keyboard"
msgstr "ਸਕਰੀਨ ਕੀਬੋਰਡ"
-#: ../js/ui/status/accessibility.js:94
+#: ../js/ui/status/accessibility.js:95
msgid "Visual Alerts"
msgstr "ਦਿੱਖ ਚੇਤਾਵਨੀ"
-#: ../js/ui/status/accessibility.js:97
+#: ../js/ui/status/accessibility.js:98
msgid "Sticky Keys"
msgstr "ਸਟਿੱਕੀ ਸਵਿੱਚਾਂ"
-#: ../js/ui/status/accessibility.js:100
+#: ../js/ui/status/accessibility.js:101
msgid "Slow Keys"
msgstr "ਹੌਲੀ ਸਵਿੱਚਾਂ"
-#: ../js/ui/status/accessibility.js:103
+#: ../js/ui/status/accessibility.js:104
msgid "Bounce Keys"
msgstr "ਬਾਊਂਸ ਸਵਿੱਚਾਂ"
-#: ../js/ui/status/accessibility.js:106
+#: ../js/ui/status/accessibility.js:107
msgid "Mouse Keys"
msgstr "ਮਾਊਸ ਸਵਿੱਚਾਂ"
-#: ../js/ui/status/accessibility.js:110
+#: ../js/ui/status/accessibility.js:111
msgid "Universal Access Settings"
msgstr "ਯੂਨੀਵਰਸਲ ਅਸੈੱਸ ਸੈਟਿੰਗ"
@@ -578,9 +634,241 @@ msgstr "ਵੱਧ ਕਨਟਰਾਸਟ"
msgid "Large Text"
msgstr "ਵੱਡੇ ਅੱਖਰ"
-#: ../js/ui/status/accessibility.js:224
-msgid "Zoom"
-msgstr "ਜ਼ੂਮ"
+#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:240
+msgid "Bluetooth"
+msgstr "ਬਲਿਊਟੁੱਥ"
+
+#: ../js/ui/status/bluetooth.js:55
+msgid "Visibility"
+msgstr "ਦਿੱਖ"
+
+#: ../js/ui/status/bluetooth.js:69
+msgid "Send Files to Device..."
+msgstr "...ਜੰਤਰ ਨੂੰ ਫਾਇਲਾਂ ਭੇਜੋ"
+
+#: ../js/ui/status/bluetooth.js:70
+msgid "Setup a New Device..."
+msgstr "...ਨਵਾਂ ਜੰਤਰ ਸੈਟਅੱਪ"
+
+#: ../js/ui/status/bluetooth.js:94
+msgid "Bluetooth Settings"
+msgstr "ਬਲਿਊਟੁੱਥ ਸੈਟਿੰਗ"
+
+#: ../js/ui/status/bluetooth.js:191
+msgid "Connection"
+msgstr "ਕੁਨੈਕਸ਼ਨ"
+
+#: ../js/ui/status/bluetooth.js:227
+msgid "Send Files..."
+msgstr "...ਫਾਇਲਾਂ ਭੇਜੋ"
+
+#: ../js/ui/status/bluetooth.js:232
+msgid "Browse Files..."
+msgstr "...ਫਾਇਲਾਂ ਦੀ ਝਲਕ"
+
+#: ../js/ui/status/bluetooth.js:241
+msgid "Error browsing device"
+msgstr "ਜੰਤਰ ਬਰਾਊਜ਼ ਕਰਨ ਲਈ ਗਲਤੀ"
+
+#: ../js/ui/status/bluetooth.js:242
+#, c-format
+msgid "The requested device cannot be browsed, error is '%s'"
+msgstr "ਮੰਗ ਕੀਤੇ ਗਏ ਜੰਤਰ ਨੂੰ ਬਰਾਊਜ਼ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ, ਗਲਤੀ ਸੀ '%s'"
+
+#: ../js/ui/status/bluetooth.js:250 ../js/ui/status/keyboard.js:78
+msgid "Keyboard Settings"
+msgstr "ਕੀਬੋਰਡ ਸੈਟਿੰਗ"
+
+#: ../js/ui/status/bluetooth.js:255
+msgid "Mouse Settings"
+msgstr "ਮਾਊਸ ਸੈਟਿੰਗ"
+
+#: ../js/ui/status/bluetooth.js:262 ../js/ui/status/volume.js:63
+msgid "Sound Settings"
+msgstr "ਸਾਊਂਡ ਸੈਟਿੰਗ"
+
+#: ../js/ui/status/bluetooth.js:336 ../js/ui/status/bluetooth.js:370
+#: ../js/ui/status/bluetooth.js:410 ../js/ui/status/bluetooth.js:443
+msgid "Bluetooth Agent"
+msgstr "ਬਲਿਊਟੁੱਥ ਏਜੰਟ"
+
+#: ../js/ui/status/bluetooth.js:371
+#, c-format
+msgid "Authorization request from %s"
+msgstr "'%s' ਤੋਂ ਪਰਮਾਣਕਿਤਾ ਮੰਗ"
+
+#: ../js/ui/status/bluetooth.js:377
+#, c-format
+msgid "Device %s wants access to the service '%s'"
+msgstr "ਜੰਤਰ %s ਸਰਵਿਸ '%s' ਨੂੰ ਵਰਤਣੀ ਚਾਹੁੰਦਾ ਹੈ।"
+
+#: ../js/ui/status/bluetooth.js:379
+msgid "Always grant access"
+msgstr "ਹਮੇਸ਼ਾ ਪਹੁੰਚ ਮਨਜ਼ੂਰ"
+
+#: ../js/ui/status/bluetooth.js:380
+msgid "Grant this time only"
+msgstr "ਕੇਵਲ ਇਸ ਸਮੇਂ ਹੀ ਮਨਜ਼ੂਰ"
+
+#: ../js/ui/status/bluetooth.js:381
+msgid "Reject"
+msgstr "ਨਾ-ਮਨਜ਼ੂਰ"
+
+#: ../js/ui/status/bluetooth.js:411
+#, c-format
+msgid "Pairing confirmation for %s"
+msgstr "%s ਲਈ ਪੇਅਰ ਕਰਨ ਦੀ ਪੁਸ਼ਟੀ"
+
+#: ../js/ui/status/bluetooth.js:417 ../js/ui/status/bluetooth.js:451
+#, c-format
+msgid "Device %s wants to pair with this computer"
+msgstr "ਜੰਤਰ %s ਇਸ ਕੰਪਿਊਟਰ ਨਾਲ ਪੇਅਰ ਹੋਣਾ ਚਾਹੁੰਦਾ ਹੈ"
+
+#: ../js/ui/status/bluetooth.js:418
+#, c-format
+msgid "Please confirm whether the PIN '%s' matches the one on the device."
+msgstr "ਪੁਸ਼ਟੀ ਕਰੋ ਜੀ ਕਿ ਪਿੰਨ '%s' ਜੰਤਰ ਉੱਤੇ ਮੌਜੂਦ ਪਿੰਨ ਨਾਲ ਮਿਲਦਾ ਹੈ।"
+
+#: ../js/ui/status/bluetooth.js:420
+msgid "Matches"
+msgstr "ਮਿਲਦਾ ਹੈ"
+
+#: ../js/ui/status/bluetooth.js:421
+msgid "Does not match"
+msgstr "ਮਿਲਦਾ ਨਹੀਂ ਹੈ"
+
+#: ../js/ui/status/bluetooth.js:444
+#, c-format
+msgid "Pairing request for %s"
+msgstr "%s ਲਈ ਪੇਅਰ ਕਰਨ ਦੀ ਮੰਗ"
+
+#: ../js/ui/status/bluetooth.js:452
+msgid "Please enter the PIN mentioned on the device."
+msgstr "ਜੰਤਰ ਉੱਤੇ ਦਿੱਤਾ ਗਿਆ ਪਿੰਨ ਦਿਉ ਜੀ।"
+
+#: ../js/ui/status/bluetooth.js:468
+msgid "OK"
+msgstr "ਠੀਕ ਹੈ"
+
+#: ../js/ui/status/power.js:85
+msgid "Power Settings"
+msgstr "ਪਾਵਰ ਸੈਟਿੰਗ"
+
+#: ../js/ui/status/power.js:112
+#, c-format
+msgid "%d hour remaining"
+msgid_plural "%d hours remaining"
+msgstr[0] "%d ਘੰਟਾ ਬਾਕੀ"
+msgstr[1] "%d ਘੰਟੇ ਬਾਕੀ"
+
+#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
+#: ../js/ui/status/power.js:115
+#, c-format
+msgid "%d %s %d %s remaining"
+msgstr "%d %s %d %s ਬਾਕੀ"
+
+#: ../js/ui/status/power.js:117
+msgid "hour"
+msgid_plural "hours"
+msgstr[0] "ਘੰਟਾ"
+msgstr[1] "ਘੰਟੇ"
+
+#: ../js/ui/status/power.js:117
+msgid "minute"
+msgid_plural "minutes"
+msgstr[0] "ਮਿੰਟ"
+msgstr[1] "ਮਿੰਟ"
+
+#: ../js/ui/status/power.js:120
+#, c-format
+msgid "%d minute remaining"
+msgid_plural "%d minutes remaining"
+msgstr[0] "%d ਮਿੰਟ ਬਾਕੀ"
+msgstr[1] "%d ਮਿੰਟ ਬਾਕੀ"
+
+#: ../js/ui/status/power.js:235
+msgid "AC adapter"
+msgstr "AC ਐਡਪਟਰ"
+
+#: ../js/ui/status/power.js:237
+msgid "Laptop battery"
+msgstr "ਲੈਪਟਾਪ ਬੈਟਰੀ"
+
+#: ../js/ui/status/power.js:239
+msgid "UPS"
+msgstr "UPS"
+
+#: ../js/ui/status/power.js:241
+msgid "Monitor"
+msgstr "ਮਾਨੀਟਰ"
+
+#: ../js/ui/status/power.js:243
+msgid "Mouse"
+msgstr "ਮਾਊਸ"
+
+#: ../js/ui/status/power.js:245
+msgid "Keyboard"
+msgstr "ਕੀਬੋਰਡ"
+
+#: ../js/ui/status/power.js:247
+msgid "PDA"
+msgstr "PDA"
+
+#: ../js/ui/status/power.js:249
+msgid "Cell phone"
+msgstr "ਸੈੱਲ ਫੋਨ"
+
+#: ../js/ui/status/power.js:251
+msgid "Media player"
+msgstr "ਮੀਡਿਆ ਪਲੇਅਰ"
+
+#: ../js/ui/status/power.js:253
+msgid "Tablet"
+msgstr "ਟੇਬਲੇਟ"
+
+#: ../js/ui/status/power.js:255
+msgid "Computer"
+msgstr "ਕੰਪਿਊਟਰ"
+
+#: ../js/ui/status/power.js:257 ../src/shell-app-system.c:1012
+msgid "Unknown"
+msgstr "ਅਣਜਾਣ"
+
+#: ../js/ui/status/volume.js:42
+msgid "Volume"
+msgstr "ਆਵਾਜ਼"
+
+#: ../js/ui/status/volume.js:55
+msgid "Microphone"
+msgstr "ਮਾਈਕਰੋਫੋਨ"
+
+#: ../js/ui/telepathyClient.js:561
+#, c-format
+msgid "%s is online."
+msgstr "%s ਆਨਲਾਈਨ ਹੈ।"
+
+#: ../js/ui/telepathyClient.js:566
+#, c-format
+msgid "%s is offline."
+msgstr "%s ਆਫਲਾਈਨ ਹੈ।"
+
+#: ../js/ui/telepathyClient.js:569
+#, c-format
+msgid "%s is away."
+msgstr "%s ਦੂਰ ਹੈ।"
+
+#: ../js/ui/telepathyClient.js:572
+#, c-format
+msgid "%s is busy."
+msgstr "%s ਰੁੱਝਿਆ/ਰੁੱਝੀ ਹੈ।"
+
+#. Translators: this is a time format string followed by a date.
+#. If applicable, replace %X with a strftime format valid for your
+#. locale, without seconds.
+#: ../js/ui/telepathyClient.js:666
+#, no-c-format
+msgid "Sent at %X on %A"
+msgstr "%2$A ਨੂੰ %1$X ਵਜੇ ਭੇਜਿਆ"
#: ../js/ui/viewSelector.js:26
msgid "Search your computer"
@@ -597,8 +885,11 @@ msgid "'%s' is ready"
msgstr "'%s' ਤਿਆਰ ਹੈ"
#: ../js/ui/workspacesView.js:244
-msgid "Can't add a new workspace because maximum workspaces limit has been reached."
-msgstr "ਨਵਾਂ ਵਰਕਸਪੇਸ ਜੋੜਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ, ਕਿਉਂਕਿ ਵਰਕਸਪੇਸਾਂ ਦੀ ਵੱਧੋ-ਵੱਧ ਗਿਣਤੀ ਪੂਰੀ ਹੋ ਚੁੱਕੀ ਹੈ।"
+msgid ""
+"Can't add a new workspace because maximum workspaces limit has been reached."
+msgstr ""
+"ਨਵਾਂ ਵਰਕਸਪੇਸ ਜੋੜਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ, ਕਿਉਂਕਿ ਵਰਕਸਪੇਸਾਂ ਦੀ ਵੱਧੋ-ਵੱਧ ਗਿਣਤੀ ਪੂਰੀ ਹੋ "
+"ਚੁੱਕੀ ਹੈ।"
#: ../js/ui/workspacesView.js:260
msgid "Can't remove the first workspace."
@@ -626,36 +917,32 @@ msgstr[1] "%u ਇੰਪੁੱਟ"
msgid "System Sounds"
msgstr "ਸਿਸਟਮ ਸਾਊਂਡ"
-#: ../src/shell-app-system.c:1012
-msgid "Unknown"
-msgstr "ਅਣਜਾਣ"
-
-#: ../src/shell-global.c:1163
+#: ../src/shell-global.c:1233
msgid "Less than a minute ago"
msgstr "ਇੱਕ ਮਿੰਟ ਤੋਂ ਘੱਟ ਚਿਰ ਪਹਿਲਾਂ"
-#: ../src/shell-global.c:1167
+#: ../src/shell-global.c:1237
#, c-format
msgid "%d minute ago"
msgid_plural "%d minutes ago"
msgstr[0] "%d ਮਿੰਟ ਪਹਿਲਾਂ"
msgstr[1] "%d ਮਿੰਟ ਪਹਿਲਾਂ"
-#: ../src/shell-global.c:1172
+#: ../src/shell-global.c:1242
#, c-format
msgid "%d hour ago"
msgid_plural "%d hours ago"
msgstr[0] "%d ਘੰਟਾ ਪਹਿਲਾਂ"
msgstr[1] "%d ਘੰਟੇ ਪਹਿਲਾਂ"
-#: ../src/shell-global.c:1177
+#: ../src/shell-global.c:1247
#, c-format
msgid "%d day ago"
msgid_plural "%d days ago"
msgstr[0] "%d ਦਿਨ ਪਹਿਲਾਂ"
msgstr[1] "%d ਦਿਨ ਪਹਿਲਾਂ"
-#: ../src/shell-global.c:1182
+#: ../src/shell-global.c:1252
#, c-format
msgid "%d week ago"
msgid_plural "%d weeks ago"
@@ -686,6 +973,72 @@ msgstr "ਖੋਜ"
msgid "%1$s: %2$s"
msgstr "%1$s: %2$s"
+#~ msgid "Clock"
+#~ msgstr "ਘੜੀ"
+
+#~ msgid "Customize the panel clock"
+#~ msgstr "ਪੈਨਲ ਘੜੀ ਕਸਟਮਾਈਜ਼ ਕਰੋ"
+
+#~ msgid "Custom format of the clock"
+#~ msgstr "ਘੜੀ ਲਈ ਪਸੰਦੀਦਾ ਫਾਰਮੈਟ"
+
+#~ msgid "Hour format"
+#~ msgstr "ਘੰਟਾ ਫਾਰਮੈਟ"
+
+#~ msgid ""
+#~ "If true and format is either \"12-hour\" or \"24-hour\", display seconds "
+#~ "in time."
+#~ msgstr "ਜੇ ਚੋਣ ਕੀਤੀ ਤਾਂ ਸਮੇਂ ਵਿੱਚ \"12-hour\" ਜਾਂ \" 24-hour\" ਸਕਿੰਟ ਵੇਖਾਏ ਜਾਣਗੇ।"
+
+#~ msgid ""
+#~ "This key specifies the format used by the panel clock when the format key "
+#~ "is set to \"custom\". You can use conversion specifiers understood by "
+#~ "strftime() to obtain a specific format. See the strftime() manual for "
+#~ "more information."
+#~ msgstr ""
+#~ "ਇਹ ਕੁੰਜੀ ਪੈਨਲ ਘੜੀ ਲਈ ਵਰਤਣ ਵਾਸਤੇ ਫਾਰਮੈਟ ਦਿੰਦੀ ਹੈ, ਜਦੋਂ ਕਿ ਫਾਰਮੈਟ ਕੁੰਜੀ \"ਕਸਟਮ\" ਸੈੱਟ "
+#~ "ਕੀਤੀ ਹੋਵੇ। ਤੁਸੀਂ ਖਾਸ ਫਾਰਮੈਟ ਦੇਣ ਲਈ ਹਦਾਇਤਾਂ ਵਾਸਤੇ strftime () ਨੂੰ ਵਰਤ ਸਕਦੇ ਹੋ। ਹੋਰ "
+#~ "ਜਾਣਕਾਰੀ ਲਈ strftime () ਦਸਤਾਵੇਜ਼ ਵੇਖੋ।"
+
+#~ msgid ""
+#~ "This key specifies the hour format used by the panel clock. Possible "
+#~ "values are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to "
+#~ "\"unix\", the clock will display time in seconds since Epoch, i.e. 1970-"
+#~ "01-01. If set to \"custom\", the clock will display time according to the "
+#~ "format specified in the custom_format key. Note that if set to either "
+#~ "\"unix\" or \"custom\", the show_date and show_seconds keys are ignored."
+#~ msgstr ""
+#~ "ਇਹ ਕੁੰਜੀ ਤਹਿ ਕਰਦੀ ਹੈ ਕਿ ਕਿਹੜਾ ਪੈਨਲ ਘੜੀ ਵਿੱਚ ਘੰਟਾ ਫਾਰਮੈਟ ਵਰਤਿਆ ਜਾਵੇ। ਸੰਭਵ ਮੁੱਲ ਹਨ "
+#~ "\"12-hour\"(੧੨-ਘੰਟੇ), \"24-hour\" (੨੪-ਘੰਟੇ), \"unix\" (ਯੂਨੈਕਸ) ਅਤੇ \"custom"
+#~ "\" (ਪਸੰਦੀਦਾ)। ਜੇ \"ਯੂਨੈਕਸ\" ਸੈੱਟ ਕੀਤਾ ਗਿਆ ਤਾਂ ਘੜੀ ਨੂੰ ਈਪੋਚ (੦੧-ਜਨਵਰੀ-੧੯੭੦) ਤੋਂ ਵੇਖਾਇਆ\n"
+#~ "ਜਾਵੇਗਾ। ਜੇ \"ਪਸੰਦੀਦਾ\" ਲਈ ਸੈੱਟ ਕੀਤਾ ਗਿਆ ਤਾਂ, ਘੜੀ ਨੂੰ custom_format ਕੁੰਜੀ ਵਿੱਚ ਦਿੱਤੇ "
+#~ "ਫਾਰਮੈਟ ਮੁਤਾਬਕ ਵੇਖਾਇਆ ਜਾਵੇਗਾ। ਯਾਦ ਰੱਖੋ ਕਿ ਜੇ \"ਯੂਨੈਕਸ\" ਜਾਂ \"ਪਸੰਦੀਦਾ\" ਸੈੱਟ ਕੀਤਾ ਤਾਂ "
+#~ "ਅੱਪਗਰੇਡ ਮਿਤੀ ਵੇਖਾਓ ਤੇ ਸਕਿੰਟ ਵੇਖਾਓ ਨੂੰ ਅਣਡਿੱਠਾ ਕੀਤਾ ਜਾਵੇਗਾ।"
+
+#~ msgid "Clock Format"
+#~ msgstr "ਘੜੀ ਫਾਰਮੈਟ"
+
+#~ msgid "Clock Preferences"
+#~ msgstr "ਘੜੀ ਪਸੰਦ"
+
+#~ msgid "Panel Display"
+#~ msgstr "ਪੈਨਲ ਦਿੱਖ"
+
+#~ msgid "Show seco_nds"
+#~ msgstr "ਸਕਿੰਟ ਵੇਖੋ(_n)"
+
+#~ msgid "Show the _date"
+#~ msgstr "ਮਿਤੀ ਵੇਖੋ(_d)"
+
+#~ msgid "_12 hour format"
+#~ msgstr "_੧੨ ਘੰਟੇ ਫਾਰਮੈਟ"
+
+#~ msgid "_24 hour format"
+#~ msgstr "_੨੪ ਘੰਟੇ ਫਾਰਮੈਟ"
+
+#~ msgid "Preferences"
+#~ msgstr "ਮੇਰੀ ਪਸੰਦ"
+
#~ msgid "Overview workspace view mode"
#~ msgstr "ਵਰਕਸਪੇਸ ਝਲਕ ਮੋਡ ਦੀ ਝਲਕ"
@@ -715,21 +1068,12 @@ msgstr "%1$s: %2$s"
#~ msgid "System Preferences..."
#~ msgstr "ਸਿਸਟਮ ਪਸੰਦ..."
-#~ msgid "Restart..."
-#~ msgstr "...ਮੁੜ-ਚਾਲੂ"
-
-#~ msgid "Account Information..."
-#~ msgstr "ਅਕਾਊਂਟ ਜਾਣਕਾਰੀ..."
-
#~ msgid "Sidebar"
#~ msgstr "ਬਾਹੀ"
#~ msgid "%H:%M"
#~ msgstr "%H:%M"
-#~ msgid "Applications"
-#~ msgstr "ਐਪਲੀਕੇਸ਼ਨ"
-
#~ msgid "Recent Documents"
#~ msgstr "ਤਾਜ਼ਾ ਡੌਕੂਮੈਂਟ"
diff --git a/po/sv.po b/po/sv.po
index 5a3f9f1aa..32f6c410d 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -7,10 +7,11 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-06 22:51+0200\n"
-"PO-Revision-Date: 2010-09-06 22:56+0100\n"
+"POT-Creation-Date: 2010-12-31 12:58+0100\n"
+"PO-Revision-Date: 2010-12-31 12:57+0100\n"
"Last-Translator: Daniel Nylander \n"
"Language-Team: Swedish \n"
+"Language: sv\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -33,8 +34,12 @@ msgid "Customize the panel clock"
msgstr "Anpassa panelklockan"
#: ../data/org.gnome.shell.gschema.xml.in.h:1
-msgid "Allows access to internal debugging and monitoring tools using the Alt-F2 dialog."
-msgstr "Tillåter åtkomst till interna verktyg för felsökning och övervakning med dialogen Alt-F2."
+msgid ""
+"Allows access to internal debugging and monitoring tools using the Alt-F2 "
+"dialog."
+msgstr ""
+"Tillåter åtkomst till interna verktyg för felsökning och övervakning med "
+"dialogen Alt-F2."
#: ../data/org.gnome.shell.gschema.xml.in.h:2
msgid "Custom format of the clock"
@@ -42,7 +47,8 @@ msgstr "Anpassat format för klockan"
#: ../data/org.gnome.shell.gschema.xml.in.h:3
msgid "Enable internal tools useful for developers and testers from Alt-F2"
-msgstr "Aktivera interna verktyg användbara för utvecklare och testare från Alt-F2"
+msgstr ""
+"Aktivera interna verktyg användbara för utvecklare och testare från Alt-F2"
#: ../data/org.gnome.shell.gschema.xml.in.h:4
msgid "File extension used for storing the screencast"
@@ -53,7 +59,9 @@ msgid "Framerate used for recording screencasts."
msgstr "Bildfrekvens för inspelade skärminspelningar."
#: ../data/org.gnome.shell.gschema.xml.in.h:6
-msgid "GNOME Shell extensions have a uuid property; this key lists extensions which should not be loaded."
+msgid ""
+"GNOME Shell extensions have a uuid property; this key lists extensions which "
+"should not be loaded."
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.h:7
@@ -65,12 +73,20 @@ msgid "Hour format"
msgstr "Timmesformat"
#: ../data/org.gnome.shell.gschema.xml.in.h:9
-msgid "If true and format is either \"12-hour\" or \"24-hour\", display date in the clock, in addition to time."
-msgstr "Om true och formatet antingen är \"12-hour\" eller \"24-hour\", visa datum i klockan, i tillägg till tiden."
+msgid ""
+"If true and format is either \"12-hour\" or \"24-hour\", display date in the "
+"clock, in addition to time."
+msgstr ""
+"Om true och formatet antingen är \"12-hour\" eller \"24-hour\", visa datum i "
+"klockan, i tillägg till tiden."
#: ../data/org.gnome.shell.gschema.xml.in.h:10
-msgid "If true and format is either \"12-hour\" or \"24-hour\", display seconds in time."
-msgstr "Om true och formatet antingen är \"12-hour\" eller \"24-hour\", visa sekunder i tiden."
+msgid ""
+"If true and format is either \"12-hour\" or \"24-hour\", display seconds in "
+"time."
+msgstr ""
+"Om true och formatet antingen är \"12-hour\" eller \"24-hour\", visa "
+"sekunder i tiden."
#: ../data/org.gnome.shell.gschema.xml.in.h:11
msgid "If true, display the ISO week date in the calendar."
@@ -81,65 +97,213 @@ msgid "List of desktop file IDs for favorite applications"
msgstr "Lista över skrivbordsfil-id för favoritprogram"
#: ../data/org.gnome.shell.gschema.xml.in.h:13
-msgid "Overview workspace view mode"
+msgid ""
+"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
+"used for gst-launch. The pipeline should have an unconnected sink pad where "
+"the recorded video is recorded. It will normally have a unconnected source "
+"pad; output from that pad will be written into the output file. However the "
+"pipeline can also take care of its own output - this might be used to send "
+"the output to an icecast server via shout2send or similar. When unset or set "
+"to an empty value, the default pipeline will be used. This is currently "
+"'videorate ! theoraenc ! oggmux' and records to Ogg Theora."
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.h:14
-msgid "Sets the GStreamer pipeline used to encode recordings. It follows the syntax used for gst-launch. The pipeline should have an unconnected sink pad where the recorded video is recorded. It will normally have a unconnected source pad; output from that pad will be written into the output file. However the pipeline can also take care of its own output - this might be used to send the output to an icecast server via shout2send or similar. When unset or set to an empty value, the default pipeline will be used. This is currently 'videorate ! theoraenc ! oggmux' and records to Ogg Theora."
-msgstr ""
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:15
msgid "Show date in clock"
msgstr "Visa datum i klocka"
-#: ../data/org.gnome.shell.gschema.xml.in.h:16
+#: ../data/org.gnome.shell.gschema.xml.in.h:15
msgid "Show the week date in the calendar"
msgstr "Visa veckodatum i kalendern"
-#: ../data/org.gnome.shell.gschema.xml.in.h:17
+#: ../data/org.gnome.shell.gschema.xml.in.h:16
msgid "Show time with seconds"
msgstr "Visa tid med sekunder"
+#: ../data/org.gnome.shell.gschema.xml.in.h:17
+msgid ""
+"The applications corresponding to these identifiers will be displayed in the "
+"favorites area."
+msgstr ""
+"Programmen som motsvarar dessa identifierare kommer att visas i "
+"favoritområdet."
+
#: ../data/org.gnome.shell.gschema.xml.in.h:18
-msgid "The applications corresponding to these identifiers will be displayed in the favorites area."
-msgstr "Programmen som motsvarar dessa identifierare kommer att visas i favoritområdet."
+msgid ""
+"The filename for recorded screencasts will be a unique filename based on the "
+"current date, and use this extension. It should be changed when recording to "
+"a different container format."
+msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.h:19
-msgid "The filename for recorded screencasts will be a unique filename based on the current date, and use this extension. It should be changed when recording to a different container format."
+msgid ""
+"The framerate of the resulting screencast recordered by GNOME Shell's "
+"screencast recorder in frames-per-second."
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.h:20
-msgid "The framerate of the resulting screencast recordered by GNOME Shell's screencast recorder in frames-per-second."
-msgstr ""
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:21
msgid "The gstreamer pipeline used to encode the screencast"
msgstr ""
+#: ../data/org.gnome.shell.gschema.xml.in.h:21
+msgid ""
+"The shell normally monitors active applications in order to present the most "
+"used ones (e.g. in launchers). While this data will be kept private, you may "
+"want to disable this for privacy reasons. Please note that doing so won't "
+"remove already saved data."
+msgstr ""
+
#: ../data/org.gnome.shell.gschema.xml.in.h:22
-msgid "The selected workspace view mode in the overview. Supported values are \"single\" and \"grid\"."
+msgid ""
+"This key specifies the format used by the panel clock when the format key is "
+"set to \"custom\". You can use conversion specifiers understood by strftime"
+"() to obtain a specific format. See the strftime() manual for more "
+"information."
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.h:23
-msgid "The shell normally monitors active applications in order to present the most used ones (e.g. in launchers). While this data will be kept private, you may want to disable this for privacy reasons. Please note that doing so won't remove already saved data."
+msgid ""
+"This key specifies the hour format used by the panel clock. Possible values "
+"are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to \"unix\", "
+"the clock will display time in seconds since Epoch, i.e. 1970-01-01. If set "
+"to \"custom\", the clock will display time according to the format specified "
+"in the custom_format key. Note that if set to either \"unix\" or \"custom\", "
+"the show_date and show_seconds keys are ignored."
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.h:24
-msgid "This key specifies the format used by the panel clock when the format key is set to \"custom\". You can use conversion specifiers understood by strftime() to obtain a specific format. See the strftime() manual for more information."
-msgstr ""
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:25
-msgid "This key specifies the hour format used by the panel clock. Possible values are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to \"unix\", the clock will display time in seconds since Epoch, i.e. 1970-01-01. If set to \"custom\", the clock will display time according to the format specified in the custom_format key. Note that if set to either \"unix\" or \"custom\", the show_date and show_seconds keys are ignored."
-msgstr ""
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:26
msgid "Uuids of extensions to disable"
msgstr "Uuid:er för tillägg att inaktivera"
-#: ../data/org.gnome.shell.gschema.xml.in.h:27
+#: ../data/org.gnome.shell.gschema.xml.in.h:25
msgid "Whether to collect stats about applications usage"
msgstr "Huruvida statistik ska samlas in för programanvändning"
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:1
+msgid "Clip the crosshairs at the center"
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:2
+msgid "Color of the crosshairs"
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:3
+msgid ""
+"Determines the length of the vertical and horizontal lines that make up the "
+"crosshairs."
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:4
+msgid ""
+"Determines the position of the magnified mouse image within the magnified "
+"view and how it reacts to system mouse movement. The values are - none: no "
+"mouse tracking; - centered: the mouse image is displayed at the center of "
+"the zoom region (which also represents the point under the system mouse) and "
+"the magnified contents are scrolled as the system mouse moves; - "
+"proportional: the position of the magnified mouse in the zoom region is "
+"proportionally the same as the position of the system mouse on screen; - "
+"push: when the magnified mouse intersects a boundary of the zoom region, the "
+"contents are scrolled into view."
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:5
+msgid ""
+"Determines the transparency of the crosshairs, from fully opaque to fully "
+"transparent."
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:6
+msgid ""
+"Determines whether the crosshairs intersect the magnified mouse sprite, or "
+"are clipped such that the ends of the horizontal and vertical lines surround "
+"the mouse image."
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:7
+msgid "Enable lens mode"
+msgstr "Aktivera linsläge"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:8
+msgid ""
+"Enables/disables display of crosshairs centered on the magnified mouse "
+"sprite."
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:9
+msgid ""
+"For centered mouse tracking, when the system pointer is at or near the edge "
+"of the screen, the magnified contents continue to scroll such that the "
+"screen edge moves into the magnified view."
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:10
+msgid "Length of the crosshairs"
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:11
+msgid "Magnification factor"
+msgstr "Förstoringsfaktor"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:12
+msgid "Mouse Tracking Mode"
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:13
+msgid "Opacity of the crosshairs"
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:14
+msgid "Screen position"
+msgstr "Skärmposition"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:15
+msgid "Scroll magnified contents beyond the edges of the desktop"
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:16
+msgid "Show or hide crosshairs"
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:17
+msgid "Show or hide the magnifier"
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:18
+msgid "Show or hide the magnifier and all of its zoom regions."
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:19
+msgid ""
+"The color of the the vertical and horizontal lines that make up the "
+"crosshairs."
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:20
+msgid ""
+"The magnified view either fills the entire screen, or occupies the top-half, "
+"bottom-half, left-half, or right-half of the screen."
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:21
+msgid ""
+"The power of the magnification. A value of 1.0 means no magnification. A "
+"value of 2.0 doubles the size."
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:22
+msgid "Thickness of the crosshairs"
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:23
+msgid ""
+"Whether the magnified view should be centered over the location of the "
+"system mouse and move with it."
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:24
+msgid "Width of the vertical and horizontal lines that make up the crosshairs."
+msgstr ""
+
#: ../data/clock-preferences.ui.h:1
msgid "Clock Format"
msgstr "Klockformat"
@@ -168,64 +332,45 @@ msgstr "_12-timmarsformat"
msgid "_24 hour format"
msgstr "_24-timmarsformat"
-#. **** Applications ****
-#: ../js/ui/appDisplay.js:384
-#: ../js/ui/dash.js:778
+#. Translators: Filter to display all applications
+#: ../js/ui/appDisplay.js:155
+msgid "All"
+msgstr "Alla"
+
+#: ../js/ui/appDisplay.js:236
msgid "APPLICATIONS"
msgstr "PROGRAM"
-#: ../js/ui/appDisplay.js:416
+#: ../js/ui/appDisplay.js:266
msgid "PREFERENCES"
msgstr "INSTÄLLNINGAR"
-#: ../js/ui/appDisplay.js:721
+#: ../js/ui/appDisplay.js:563
msgid "New Window"
msgstr "Nytt fönster"
-#: ../js/ui/appDisplay.js:725
+#: ../js/ui/appDisplay.js:567
msgid "Remove from Favorites"
msgstr "Ta bort från favoriter"
-#: ../js/ui/appDisplay.js:726
+#: ../js/ui/appDisplay.js:568
msgid "Add to Favorites"
msgstr "Lägg till som favorit"
-#: ../js/ui/appDisplay.js:1033
-msgid "Drag here to add favorites"
-msgstr "Dra hit för att lägga till favorit"
-
-#: ../js/ui/appFavorites.js:88
+#: ../js/ui/appFavorites.js:91
#, c-format
msgid "%s has been added to your favorites."
msgstr "%s har lagts till i dina favoriter."
-#: ../js/ui/appFavorites.js:107
+#: ../js/ui/appFavorites.js:122
#, c-format
msgid "%s has been removed from your favorites."
msgstr "%s har tagits bort från dina favoriter."
-#: ../js/ui/dash.js:142
-msgid "Find"
-msgstr "Sök"
+#: ../js/ui/dash.js:27
+msgid "Remove"
+msgstr "Ta bort"
-#: ../js/ui/dash.js:473
-msgid "Searching..."
-msgstr "Söker..."
-
-#: ../js/ui/dash.js:487
-msgid "No matching results."
-msgstr "Inga sökträffar."
-
-#. **** Places ****
-#. Translators: This is in the sense of locations for documents,
-#. network locations, etc.
-#: ../js/ui/dash.js:797
-#: ../js/ui/placeDisplay.js:554
-msgid "PLACES & DEVICES"
-msgstr "PLATSER OCH ENHETER"
-
-#. **** Documents ****
-#: ../js/ui/dash.js:804
#: ../js/ui/docDisplay.js:494
msgid "RECENT ITEMS"
msgstr "TIDIGARE OBJEKT"
@@ -238,7 +383,9 @@ msgstr "Inga tillägg installerade"
msgid "Enabled"
msgstr "Aktiverad"
-#: ../js/ui/lookingGlass.js:591
+#. translators:
+#. * The device has been disabled
+#: ../js/ui/lookingGlass.js:591 ../src/gvc/gvc-mixer-control.c:1087
msgid "Disabled"
msgstr "Inaktiverad"
@@ -258,63 +405,71 @@ msgstr "Visa källa"
msgid "Web Page"
msgstr "Webbsida"
-#: ../js/ui/overview.js:160
+#: ../js/ui/overview.js:96
msgid "Undo"
msgstr "Ångra"
+#: ../js/ui/overview.js:158
+msgid "Windows"
+msgstr "Fönster"
+
+#: ../js/ui/overview.js:161
+msgid "Applications"
+msgstr "Program"
+
#. TODO - _quit() doesn't really work on apps in state STARTING yet
-#: ../js/ui/panel.js:473
+#: ../js/ui/panel.js:474
#, c-format
msgid "Quit %s"
msgstr "Avsluta %s"
-#: ../js/ui/panel.js:498
+#: ../js/ui/panel.js:499
msgid "Preferences"
msgstr "Inställningar"
#. Translators: This is the time format with date used
#. in 24-hour mode.
-#: ../js/ui/panel.js:584
+#: ../js/ui/panel.js:585
msgid "%a %b %e, %R:%S"
msgstr "%a %e %b, %R.%S"
-#: ../js/ui/panel.js:585
+#: ../js/ui/panel.js:586
msgid "%a %b %e, %R"
msgstr "%a %e %b, %R"
#. Translators: This is the time format without date used
#. in 24-hour mode.
-#: ../js/ui/panel.js:589
+#: ../js/ui/panel.js:590
msgid "%a %R:%S"
msgstr "%a %R.%S"
-#: ../js/ui/panel.js:590
+#: ../js/ui/panel.js:591
msgid "%a %R"
msgstr "%a %R"
#. Translators: This is a time format with date used
#. for AM/PM.
-#: ../js/ui/panel.js:597
-msgid "%a %b %e, %l:%M:%S %p"
-msgstr "%a %e %b, %l.%M.%S %p"
-
#: ../js/ui/panel.js:598
+msgid "%a %b %e, %l:%M:%S %p"
+msgstr "%a %e %b, %H.%M.%S"
+
+#: ../js/ui/panel.js:599
msgid "%a %b %e, %l:%M %p"
-msgstr "%a %e %b, %l:%M %p"
+msgstr "%a %e %b, %H.%M"
#. Translators: This is a time format without date used
#. for AM/PM.
-#: ../js/ui/panel.js:602
-msgid "%a %l:%M:%S %p"
-msgstr "%a %l.%M.%S %p"
-
#: ../js/ui/panel.js:603
+msgid "%a %l:%M:%S %p"
+msgstr "%a %H.%M.%S"
+
+#: ../js/ui/panel.js:604
msgid "%a %l:%M %p"
msgstr "%a %H.%M"
#. Button on the left side of the panel.
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
-#: ../js/ui/panel.js:748
+#: ../js/ui/panel.js:749
msgid "Activities"
msgstr "Aktiviteter"
@@ -331,19 +486,18 @@ msgstr "Försök igen"
msgid "Connect to..."
msgstr "Anslut till..."
-#. Translators: the "ON" and "OFF" strings are used in the
-#. toggle switches in the status area menus, and must be SHORT.
-#. If you don't have suitable short words, consider initials,
-#. "0"/"1", "⚪"/"⚫", etc.
-#: ../js/ui/popupMenu.js:30
-#: ../js/ui/popupMenu.js:40
-msgid "ON"
-msgstr "PÅ"
+#: ../js/ui/placeDisplay.js:558
+msgid "PLACES & DEVICES"
+msgstr "PLATSER OCH ENHETER"
-#: ../js/ui/popupMenu.js:31
-#: ../js/ui/popupMenu.js:45
-msgid "OFF"
-msgstr "AV"
+#. 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:33
+msgid "toggle-switch-us"
+msgstr ""
#: ../js/ui/runDialog.js:233
msgid "Please enter a command:"
@@ -354,42 +508,330 @@ msgstr "Ange ett kommando:"
msgid "Execution of '%s' failed:"
msgstr "Körning av \"%s\" misslyckades:"
-#: ../js/ui/statusMenu.js:91
+#: ../js/ui/statusMenu.js:101
msgid "Available"
msgstr "Tillgänglig"
-#: ../js/ui/statusMenu.js:95
+#: ../js/ui/statusMenu.js:106
msgid "Busy"
msgstr "Upptagen"
-#: ../js/ui/statusMenu.js:99
-msgid "Invisible"
-msgstr "Osynlig"
+#: ../js/ui/statusMenu.js:114
+msgid "My Account"
+msgstr "Mitt konto"
-#: ../js/ui/statusMenu.js:106
-msgid "Account Information..."
-msgstr "Kontoinformation..."
+#: ../js/ui/statusMenu.js:118
+msgid "System Settings"
+msgstr "Systeminställningar"
-#: ../js/ui/statusMenu.js:110
-msgid "System Preferences..."
-msgstr "Systeminställningar..."
-
-#: ../js/ui/statusMenu.js:117
+#: ../js/ui/statusMenu.js:125
msgid "Lock Screen"
msgstr "Lås skärmen"
-#: ../js/ui/statusMenu.js:121
+#: ../js/ui/statusMenu.js:129
msgid "Switch User"
msgstr "Växla användare"
-#: ../js/ui/statusMenu.js:126
+#: ../js/ui/statusMenu.js:134
msgid "Log Out..."
msgstr "Logga ut..."
-#: ../js/ui/statusMenu.js:130
+#: ../js/ui/statusMenu.js:141
+msgid "Suspend..."
+msgstr "Vänteläge..."
+
+#: ../js/ui/statusMenu.js:145
msgid "Shut Down..."
msgstr "Stäng av..."
+#: ../js/ui/status/accessibility.js:82
+msgid "Zoom"
+msgstr "Zooma"
+
+#: ../js/ui/status/accessibility.js:88
+msgid "Screen Reader"
+msgstr "Skärmläsare"
+
+#: ../js/ui/status/accessibility.js:91
+msgid "Screen Keyboard"
+msgstr "Skärmtangentbord"
+
+#: ../js/ui/status/accessibility.js:94
+msgid "Visual Alerts"
+msgstr "Visuella larm"
+
+#: ../js/ui/status/accessibility.js:97
+msgid "Sticky Keys"
+msgstr "Klistriga tangenter"
+
+#: ../js/ui/status/accessibility.js:100
+msgid "Slow Keys"
+msgstr "Tröga tangenter"
+
+#: ../js/ui/status/accessibility.js:103
+msgid "Bounce Keys"
+msgstr "Studsande tangenter"
+
+#: ../js/ui/status/accessibility.js:106
+msgid "Mouse Keys"
+msgstr "Mustangenter"
+
+#: ../js/ui/status/accessibility.js:110
+msgid "Universal Access Settings"
+msgstr "Inställningar för allmän åtkomst"
+
+#: ../js/ui/status/accessibility.js:163
+msgid "High Contrast"
+msgstr "Hög kontrast"
+
+#: ../js/ui/status/accessibility.js:205
+msgid "Large Text"
+msgstr "Stor text"
+
+#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:234
+msgid "Bluetooth"
+msgstr "Bluetooth"
+
+#: ../js/ui/status/bluetooth.js:55
+msgid "Visibility"
+msgstr "Synlighet"
+
+#: ../js/ui/status/bluetooth.js:69
+msgid "Send Files to Device..."
+msgstr "Skicka filer till enhet..."
+
+#: ../js/ui/status/bluetooth.js:70
+msgid "Setup a New Device..."
+msgstr "Konfigurera en ny enhet..."
+
+#: ../js/ui/status/bluetooth.js:94
+msgid "Bluetooth Settings"
+msgstr "Inställningar för Bluetooth"
+
+#: ../js/ui/status/bluetooth.js:185
+msgid "Connection"
+msgstr "Anslutning"
+
+#: ../js/ui/status/bluetooth.js:221
+msgid "Send Files..."
+msgstr "Skicka filer..."
+
+#: ../js/ui/status/bluetooth.js:226
+msgid "Browse Files..."
+msgstr "Bläddra efter filer..."
+
+#: ../js/ui/status/bluetooth.js:235
+msgid "Error browsing device"
+msgstr ""
+
+#: ../js/ui/status/bluetooth.js:236
+#, c-format
+msgid "The requested device cannot be browsed, error is '%s'"
+msgstr ""
+
+#: ../js/ui/status/bluetooth.js:244
+msgid "Keyboard Settings"
+msgstr "Tangentbordsinställningar"
+
+#: ../js/ui/status/bluetooth.js:249
+msgid "Mouse Settings"
+msgstr "Musinställningar"
+
+#: ../js/ui/status/bluetooth.js:256 ../js/ui/status/volume.js:62
+msgid "Sound Settings"
+msgstr "Ljudinställningar"
+
+#: ../js/ui/status/bluetooth.js:327 ../js/ui/status/bluetooth.js:361
+#: ../js/ui/status/bluetooth.js:401 ../js/ui/status/bluetooth.js:434
+msgid "Bluetooth Agent"
+msgstr ""
+
+#: ../js/ui/status/bluetooth.js:362
+#, c-format
+msgid "Authorization request from %s"
+msgstr ""
+
+#: ../js/ui/status/bluetooth.js:368
+#, c-format
+msgid "Device %s wants access to the service '%s'"
+msgstr "Enheten %s vill ha åtkomst till tjänsten \"%s\""
+
+#: ../js/ui/status/bluetooth.js:370
+msgid "Always grant access"
+msgstr "Tillåt alltid åtkomst"
+
+#: ../js/ui/status/bluetooth.js:371
+msgid "Grant this time only"
+msgstr "Tillåt för denna gång"
+
+#: ../js/ui/status/bluetooth.js:372
+msgid "Reject"
+msgstr "Neka"
+
+#: ../js/ui/status/bluetooth.js:402
+#, c-format
+msgid "Pairing confirmation for %s"
+msgstr ""
+
+#: ../js/ui/status/bluetooth.js:408 ../js/ui/status/bluetooth.js:442
+#, c-format
+msgid "Device %s wants to pair with this computer"
+msgstr ""
+
+#: ../js/ui/status/bluetooth.js:409
+#, c-format
+msgid "Please confirm whether the PIN '%s' matches the one on the device."
+msgstr ""
+
+#: ../js/ui/status/bluetooth.js:411
+msgid "Matches"
+msgstr ""
+
+#: ../js/ui/status/bluetooth.js:412
+msgid "Does not match"
+msgstr ""
+
+#: ../js/ui/status/bluetooth.js:435
+#, c-format
+msgid "Pairing request for %s"
+msgstr "Ihopparningsbegäran för %s"
+
+#: ../js/ui/status/bluetooth.js:443
+msgid "Please enter the PIN mentioned on the device."
+msgstr ""
+
+#: ../js/ui/status/bluetooth.js:459
+msgid "OK"
+msgstr "OK"
+
+#: ../js/ui/status/bluetooth.js:460
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: ../js/ui/status/power.js:85
+msgid "Power Settings"
+msgstr "Ströminställningar"
+
+#: ../js/ui/status/power.js:112
+#, c-format
+msgid "%d hour remaining"
+msgid_plural "%d hours remaining"
+msgstr[0] "%d timme återstår"
+msgstr[1] "%d timmar återstår"
+
+#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
+#: ../js/ui/status/power.js:115
+#, c-format
+msgid "%d %s %d %s remaining"
+msgstr "%d %s %d %s återstår"
+
+#: ../js/ui/status/power.js:117
+msgid "hour"
+msgid_plural "hours"
+msgstr[0] "timme"
+msgstr[1] "timmar"
+
+#: ../js/ui/status/power.js:117
+msgid "minute"
+msgid_plural "minutes"
+msgstr[0] "minut"
+msgstr[1] "minuter"
+
+#: ../js/ui/status/power.js:120
+#, c-format
+msgid "%d minute remaining"
+msgid_plural "%d minutes remaining"
+msgstr[0] "%d minut återstår"
+msgstr[1] "%d minuter återstår"
+
+#: ../js/ui/status/power.js:237
+msgid "AC adapter"
+msgstr ""
+
+#: ../js/ui/status/power.js:239
+msgid "Laptop battery"
+msgstr ""
+
+#: ../js/ui/status/power.js:241
+msgid "UPS"
+msgstr "UPS-reservström"
+
+#: ../js/ui/status/power.js:243
+msgid "Monitor"
+msgstr "Skärm"
+
+#: ../js/ui/status/power.js:245
+msgid "Mouse"
+msgstr "Mus"
+
+#: ../js/ui/status/power.js:247
+msgid "Keyboard"
+msgstr "Tangentbord"
+
+#: ../js/ui/status/power.js:249
+msgid "PDA"
+msgstr "Handdator"
+
+#: ../js/ui/status/power.js:251
+msgid "Cell phone"
+msgstr "Mobiltelefon"
+
+#: ../js/ui/status/power.js:253
+msgid "Media player"
+msgstr "Mediaspelare"
+
+#: ../js/ui/status/power.js:255
+msgid "Tablet"
+msgstr "Pekdator"
+
+#: ../js/ui/status/power.js:257
+msgid "Computer"
+msgstr "Dator"
+
+#: ../js/ui/status/power.js:259 ../src/shell-app-system.c:1012
+msgid "Unknown"
+msgstr "Okänt"
+
+#: ../js/ui/status/volume.js:41
+msgid "Volume"
+msgstr "Volym"
+
+#: ../js/ui/status/volume.js:54
+msgid "Microphone"
+msgstr "Mikrofon"
+
+#: ../js/ui/telepathyClient.js:560
+#, c-format
+msgid "%s is online."
+msgstr "%s är ansluten."
+
+#: ../js/ui/telepathyClient.js:565
+#, c-format
+msgid "%s is offline."
+msgstr "%s är frånkopplad."
+
+#: ../js/ui/telepathyClient.js:568
+#, c-format
+msgid "%s is away."
+msgstr "%s är frånvarande."
+
+#: ../js/ui/telepathyClient.js:571
+#, c-format
+msgid "%s is busy."
+msgstr "%s är upptagen."
+
+#. Translators: this is a time format string followed by a date.
+#. If applicable, replace %X with a strftime format valid for your
+#. locale, without seconds.
+#: ../js/ui/telepathyClient.js:665
+#, no-c-format
+msgid "Sent at %X on %A"
+msgstr "Skickades klockan %X på %A"
+
+#: ../js/ui/viewSelector.js:26
+msgid "Search your computer"
+msgstr "Sök i din dator"
+
#: ../js/ui/windowAttentionHandler.js:43
#, c-format
msgid "%s has finished starting"
@@ -400,57 +842,82 @@ msgstr "%s har startat"
msgid "'%s' is ready"
msgstr "\"%s\" är redo"
-#: ../js/ui/workspacesView.js:230
-msgid "Can't add a new workspace because maximum workspaces limit has been reached."
-msgstr "Kan inte lägga till en ny arbetsyta eftersom maximalt antal arbetsytor har uppnåtts."
+#: ../js/ui/workspacesView.js:244
+msgid ""
+"Can't add a new workspace because maximum workspaces limit has been reached."
+msgstr ""
+"Kan inte lägga till en ny arbetsyta eftersom maximalt antal arbetsytor har "
+"uppnåtts."
-#: ../js/ui/workspacesView.js:247
+#: ../js/ui/workspacesView.js:260
msgid "Can't remove the first workspace."
msgstr "Kan inte ta bort första arbetsytan."
-#: ../src/shell-global.c:1105
+#. translators:
+#. * The number of sound outputs on a particular device
+#: ../src/gvc/gvc-mixer-control.c:1094
+#, c-format
+msgid "%u Output"
+msgid_plural "%u Outputs"
+msgstr[0] "%u utgång"
+msgstr[1] "%u utgångar"
+
+#. translators:
+#. * The number of sound inputs on a particular device
+#: ../src/gvc/gvc-mixer-control.c:1104
+#, c-format
+msgid "%u Input"
+msgid_plural "%u Inputs"
+msgstr[0] "%u ingång"
+msgstr[1] "%u ingångar"
+
+#: ../src/gvc/gvc-mixer-control.c:1402
+msgid "System Sounds"
+msgstr "Systemljud"
+
+#: ../src/shell-global.c:1156
msgid "Less than a minute ago"
msgstr "Mindre än en minut sedan"
-#: ../src/shell-global.c:1109
+#: ../src/shell-global.c:1160
#, c-format
msgid "%d minute ago"
msgid_plural "%d minutes ago"
msgstr[0] "%d minut sedan"
msgstr[1] "%d minuter sedan"
-#: ../src/shell-global.c:1114
+#: ../src/shell-global.c:1165
#, c-format
msgid "%d hour ago"
msgid_plural "%d hours ago"
msgstr[0] "%d timme sedan"
msgstr[1] "%d timmar sedan"
-#: ../src/shell-global.c:1119
+#: ../src/shell-global.c:1170
#, c-format
msgid "%d day ago"
msgid_plural "%d days ago"
msgstr[0] "%d dag sedan"
msgstr[1] "%d dagar sedan"
-#: ../src/shell-global.c:1124
+#: ../src/shell-global.c:1175
#, c-format
msgid "%d week ago"
msgid_plural "%d weeks ago"
msgstr[0] "%d vecka sedan"
msgstr[1] "%d veckor sedan"
-#: ../src/shell-uri-util.c:89
+#: ../src/shell-util.c:89
msgid "Home Folder"
msgstr "Hemmapp"
#. Translators: this is the same string as the one found in
#. * nautilus
-#: ../src/shell-uri-util.c:104
+#: ../src/shell-util.c:104
msgid "File System"
msgstr "Filsystem"
-#: ../src/shell-uri-util.c:250
+#: ../src/shell-util.c:250
msgid "Search"
msgstr "Sök"
@@ -459,41 +926,73 @@ msgstr "Sök"
#. * example, "Trash: some-directory". It means that the
#. * directory called "some-directory" is in the trash.
#.
-#: ../src/shell-uri-util.c:300
+#: ../src/shell-util.c:300
#, c-format
msgid "%1$s: %2$s"
msgstr "%1$s: %2$s"
+#~ msgid "Drag here to add favorites"
+#~ msgstr "Dra hit för att lägga till favorit"
+
+#~ msgid "Find"
+#~ msgstr "Sök"
+
+#~ msgid "Searching..."
+#~ msgstr "Söker..."
+
+#~ msgid "No matching results."
+#~ msgstr "Inga sökträffar."
+
+#~ msgid "ON"
+#~ msgstr "PÅ"
+
+#~ msgid "OFF"
+#~ msgstr "AV"
+
+#~ msgid "Invisible"
+#~ msgstr "Osynlig"
+
+#~ msgid "Account Information..."
+#~ msgstr "Kontoinformation..."
+
#~ msgid "PLACES"
#~ msgstr "PLATSER"
+
#~ msgid "SEARCH RESULTS"
#~ msgstr "SÖKRESULTAT"
+
#~ msgid "%H:%M"
#~ msgstr "%H.%M"
-#~ msgid "Applications"
-#~ msgstr "Program"
+
#~ msgid "Recent Documents"
#~ msgstr "Senaste dokument"
+
#~ msgid "(see all)"
#~ msgstr "(se alla)"
-#~ msgid "Unknown"
-#~ msgstr "Okänt"
+
#~ msgid "Can't lock screen: %s"
#~ msgstr "Kan inte låsa skärmen: %s"
+
#~ msgid "Can't temporarily set screensaver to blank screen: %s"
#~ msgstr "Kan inte temporärt ställa in skärmsläckaren till blank skärm: %s"
+
#~ msgid "Can't logout: %s"
#~ msgstr "Kan inte logga ut: %s"
+
#~ msgid "Sidebar"
#~ msgstr "Sidopanel"
+
#~ msgid "Browse"
#~ msgstr "Bläddra"
+
#~ msgid "Find apps or documents"
#~ msgstr "Hitta program eller dokument"
+
#~ msgid "DOCUMENTS"
#~ msgstr "DOKUMENT"
+
#~ msgid "Manager"
#~ msgstr "Hanterare"
+
#~ msgid "The user manager object this user is controlled by."
#~ msgstr "Användarhanteringsobjektet som denna användare styrs av."
-
diff --git a/po/ug.po b/po/ug.po
index 1e58f50de..527677a47 100644
--- a/po/ug.po
+++ b/po/ug.po
@@ -1,16 +1,15 @@
-# Uyghur translation for gnome-shell.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# Gheyret Kenji,2010.
-# Sahran , 2010.
-# Zeper , 2010.
-#
+# Uyghur translation for gnome-shell.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Gheyret Kenji,2010.
+# Sahran , 2010.
+# Zeper , 2010.
+#
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
-"shell&component=general\n"
-"POT-Creation-Date: 2010-11-25 14:32+0000\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell&component=general\n"
+"POT-Creation-Date: 2010-12-20 21:07+0000\n"
"PO-Revision-Date: 2010-11-25 14:28+0600\n"
"Last-Translator: Sahran \n"
"Language-Team: Uyghur Computer Science Association \n"
@@ -47,28 +46,21 @@ msgstr "سائەتنىڭ ئىختىيارىي فورماتى"
#: ../data/org.gnome.shell.gschema.xml.in.h:3
msgid "Enable internal tools useful for developers and testers from Alt-F2"
-msgstr ""
-"ئىچكى قورال قوزغىتىلسا ئىجادكارلار ۋە سىنىغۇچىلارنىڭ Alt-F2 ئارقىلىق "
-"كىرىشىگە قۇلايلىق"
+msgstr "ئىچكى قورال قوزغىتىلسا ئىجادكارلار ۋە سىنىغۇچىلارنىڭ Alt-F2 ئارقىلىق كىرىشىگە قۇلايلىق"
#: ../data/org.gnome.shell.gschema.xml.in.h:4
msgid "File extension used for storing the screencast"
-msgstr ""
-"ئېكران كەسمىسى (screencasts) ساقلاشتا ئىشلىتىلىدىغان ھۆججەتنىڭ كېڭەيتىلگەن "
-"ئاتى "
+msgstr "ئېكران كەسمىسى (screencasts) ساقلاشتا ئىشلىتىلىدىغان ھۆججەتنىڭ كېڭەيتىلگەن ئاتى"
#: ../data/org.gnome.shell.gschema.xml.in.h:5
msgid "Framerate used for recording screencasts."
-msgstr ""
-"ئېكران كەسمىسى (screencasts) خاتىرىلەشتە ئىشلىتىلىدىغان كاندۇك تېزلىكى."
+msgstr "ئېكران كەسمىسى (screencasts) خاتىرىلەشتە ئىشلىتىلىدىغان كاندۇك تېزلىكى."
#: ../data/org.gnome.shell.gschema.xml.in.h:6
msgid ""
"GNOME Shell extensions have a uuid property; this key lists extensions which "
"should not be loaded."
-msgstr ""
-"GNOME چاپان (Shell)كېڭەيتىلمىسىنىڭ uuid خاسلىقى بار؛ بۇ كۇنۇپكا "
-"يۈكلەنمەيدىغان كېڭەيتىلمىلەر تىزىملىكىنى كۆرسىتىدۇ."
+msgstr "GNOME چاپان (Shell)كېڭەيتىلمىسىنىڭ uuid خاسلىقى بار؛ بۇ كۇنۇپكا يۈكلەنمەيدىغان كېڭەيتىلمىلەر تىزىملىكىنى كۆرسىتىدۇ."
#: ../data/org.gnome.shell.gschema.xml.in.h:7
msgid "History for command (Alt-F2) dialog"
@@ -82,17 +74,13 @@ msgstr "سائەت فورماتى"
msgid ""
"If true and format is either \"12-hour\" or \"24-hour\", display date in the "
"clock, in addition to time."
-msgstr ""
-"ئەگەر راست (true) بولسا سائەتتە ۋاقىت فورماتىنى «12 سائەت» ياكى «24 سائەت» "
-"كۆرسەتكەندىن سىرت چېسلانىمۇ كۆرسىتىدۇ."
+msgstr "ئەگەر راست (true) بولسا سائەتتە ۋاقىت فورماتىنى «12 سائەت» ياكى «24 سائەت» كۆرسەتكەندىن سىرت چېسلانىمۇ كۆرسىتىدۇ."
#: ../data/org.gnome.shell.gschema.xml.in.h:10
msgid ""
"If true and format is either \"12-hour\" or \"24-hour\", display seconds in "
"time."
-msgstr ""
-"ئەگەر راست (true) بولسا سائەتتە ۋاقىت فورماتىنى «12 سائەت» ياكى «24 سائەت» "
-"كۆرسەتكەندىن سىرت سېكۇنتنىمۇ كۆرسىتىدۇ. "
+msgstr "ئەگەر راست (true) بولسا سائەتتە ۋاقىت فورماتىنى «12 سائەت» ياكى «24 سائەت» كۆرسەتكەندىن سىرت سېكۇنتنىمۇ كۆرسىتىدۇ."
#: ../data/org.gnome.shell.gschema.xml.in.h:11
msgid "If true, display the ISO week date in the calendar."
@@ -100,13 +88,9 @@ msgstr "ئەگەر راست(true) بولسا يىلنامىدىكى ISO ھەپت
#: ../data/org.gnome.shell.gschema.xml.in.h:12
msgid "List of desktop file IDs for favorite applications"
-msgstr "ئامراق قوللىنىشچان پروگراممىلارنىڭ ئۈستەل ئۈستى ھۆججەت ID تىزىملىكى"
+msgstr "ئامراق پروگراممىلارنىڭ ئۈستەلئۈستى ھۆججەت ID تىزىملىكى"
#: ../data/org.gnome.shell.gschema.xml.in.h:13
-msgid "Overview workspace view mode"
-msgstr "خىزمەت رايون كۆرۈنۈش ھالىتى ھەققىدە قىسقىچە بايان"
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:14
msgid ""
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
"used for gst-launch. The pipeline should have an unconnected sink pad where "
@@ -116,91 +100,60 @@ msgid ""
"the output to an icecast server via shout2send or similar. When unset or set "
"to an empty value, the default pipeline will be used. This is currently "
"'videorate ! theoraenc ! oggmux' and records to Ogg Theora."
-msgstr ""
-"ئۈن ئېلىشنى كودلاشتا ئىشلىتىلىدىغان GStreamer ئاقما لىنىيىنى تەڭشەيدۇ. ئۇ "
-"gst-launch گرامماتىكىسىغا بوي سۇنىدۇ. بۇ ئاقما لىنىيىدە ئۇلانمىغان sink pad "
-"بولۇشى لازىم، خاتىرىلىنىدىغان سىن مۇشۇ جايدا خاتىرىلىنىدۇ. بۇ لىنىيىدە "
-"ئادەتتە يەنە بىر ئۇلانمىغان مەنبە pad بولىدۇ؛ بۇ pad چىقارغان ئۇچۇرلار "
-"ھۆججەتكە يېزىلىدۇ. ئەمما ئاقما لىنىيە ئۆزىنىڭ چىقىرىشىنى بىر تەرەپ "
-"قىلالايدۇ، بۇنداق بولغاندا shout2send ئارقىلىق ياكى شۇنىڭغا ئوخشاش ئۇسۇلدا "
-"چىقىرىشنى icecast مۇلازىمېتىرىغا يوللايدۇ. ئاقما لىنىيە تەڭشەلمىگەن ياكى بوش "
-"قىممەتكە تەڭشەلگەندە كۆڭۈلدىكى ئاقما لىنىيە قوزغىتىلىدۇ. ئۇنىڭ نۆۋەتتىكى "
-"قىممىتى 'videorate ! theoraenc ! oggmux' بولۇپ، فورماتى Ogg شەكلىدە "
-"خاتىرىلىنىدۇ."
+msgstr "ئۈن ئېلىشنى كودلاشتا ئىشلىتىلىدىغان GStreamer ئاقما لىنىيىنى تەڭشەيدۇ. ئۇ gst-launch گرامماتىكىسىغا بوي سۇنىدۇ. بۇ ئاقما لىنىيىدە ئۇلانمىغان sink pad بولۇشى لازىم، خاتىرىلىنىدىغان سىن مۇشۇ جايدا خاتىرىلىنىدۇ. بۇ لىنىيىدە ئادەتتە يەنە بىر ئۇلانمىغان مەنبە pad بولىدۇ؛ بۇ pad چىقارغان ئۇچۇرلار ھۆججەتكە يېزىلىدۇ. ئەمما ئاقما لىنىيە ئۆزىنىڭ چىقىرىشىنى بىر تەرەپ قىلالايدۇ، بۇنداق بولغاندا shout2send ئارقىلىق ياكى شۇنىڭغا ئوخشاش ئۇسۇلدا چىقىرىشنى icecast مۇلازىمېتىرىغا يوللايدۇ. ئاقما لىنىيە تەڭشەلمىگەن ياكى بوش قىممەتكە تەڭشەلگەندە كۆڭۈلدىكى ئاقما لىنىيە قوزغىتىلىدۇ. ئۇنىڭ نۆۋەتتىكى قىممىتى 'videorate ! theoraenc ! oggmux' بولۇپ، فورماتى Ogg شەكلىدە خاتىرىلىنىدۇ."
-#: ../data/org.gnome.shell.gschema.xml.in.h:15
+#: ../data/org.gnome.shell.gschema.xml.in.h:14
msgid "Show date in clock"
msgstr "سائەت ئىچىدە چېسلا كۆرسەت"
-#: ../data/org.gnome.shell.gschema.xml.in.h:16
+#: ../data/org.gnome.shell.gschema.xml.in.h:15
msgid "Show the week date in the calendar"
msgstr "يىلنامىدە ھەپتىنى كۆرسىتىدۇ"
-#: ../data/org.gnome.shell.gschema.xml.in.h:17
+#: ../data/org.gnome.shell.gschema.xml.in.h:16
msgid "Show time with seconds"
msgstr "ۋاقىت ئىچىدە سېكۇنتنى بىللە كۆرسەت"
-#: ../data/org.gnome.shell.gschema.xml.in.h:18
+#: ../data/org.gnome.shell.gschema.xml.in.h:17
msgid ""
"The applications corresponding to these identifiers will be displayed in the "
"favorites area."
msgstr "مۇناسىپ پروگرامما بەلگىسى يىغقۇچ رايونىدا كۆرسىتىلىدۇ."
-#: ../data/org.gnome.shell.gschema.xml.in.h:19
+#: ../data/org.gnome.shell.gschema.xml.in.h:18
msgid ""
"The filename for recorded screencasts will be a unique filename based on the "
"current date, and use this extension. It should be changed when recording to "
"a different container format."
-msgstr ""
-"خاتىرىلەنگەن ئېكراننىڭ ھۆججەت ئاتى نۆۋەتتىكى چېسلا ئاساسىدا بىردىنبىر بولۇپ "
-"بۇ كېڭەيتىلگەن ئاتىنى ئىشلىتىدۇ. ئۇ ئۆزگەرسە ئوخشاش بولمىغان قاچا فورماتىدا "
-"خاتىرىلەيدۇ."
+msgstr "خاتىرىلەنگەن ئېكراننىڭ ھۆججەت ئاتى نۆۋەتتىكى چېسلا ئاساسىدا بىردىنبىر بولۇپ بۇ كېڭەيتىلگەن ئاتىنى ئىشلىتىدۇ. ئۇ ئۆزگەرسە ئوخشاش بولمىغان قاچا فورماتىدا خاتىرىلەيدۇ."
-#: ../data/org.gnome.shell.gschema.xml.in.h:20
+#: ../data/org.gnome.shell.gschema.xml.in.h:19
msgid ""
"The framerate of the resulting screencast recordered by GNOME Shell's "
"screencast recorder in frames-per-second."
-msgstr ""
-"GNOME Shell ئېكران خاتىرىلىگۈچ ھەر سېكۇنتتا خاتىرىلەيدىغان ئېكران كەسمىسى "
-"كاندۇك سۈرىتى(ھەر سېكۇنتتىكى كاندۇك سانى)."
+msgstr "GNOME Shell ئېكران خاتىرىلىگۈچ ھەر سېكۇنتتا خاتىرىلەيدىغان ئېكران كەسمىسى كاندۇك سۈرىتى(ھەر سېكۇنتتىكى كاندۇك سانى)."
-#: ../data/org.gnome.shell.gschema.xml.in.h:21
+#: ../data/org.gnome.shell.gschema.xml.in.h:20
msgid "The gstreamer pipeline used to encode the screencast"
msgstr "ئېكران كەسمىسىنى كودلاشتا ئىشلىتىلىدىغان gstreamer ئاقما لىنىيىسى"
-#: ../data/org.gnome.shell.gschema.xml.in.h:22
-msgid ""
-"The selected workspace view mode in the overview. Supported values are "
-"\"single\" and \"grid\"."
-msgstr ""
-"قىسقىچە باياندىكى تاللانغان خىزمەت رايونىنىڭ كۆرۈنۈش ھالىتى. ئىشلىتىشكە "
-"بولىدىغان قىممەتلەر «يەككە» ۋە «سېتكا»"
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:23
+#: ../data/org.gnome.shell.gschema.xml.in.h:21
msgid ""
"The shell normally monitors active applications in order to present the most "
"used ones (e.g. in launchers). While this data will be kept private, you may "
"want to disable this for privacy reasons. Please note that doing so won't "
"remove already saved data."
-msgstr ""
-"چاپان (shell) ئادەتتىكى ئەھۋالدا كۆپ ئىشلىتىلىدىغان ئاكتىپ پروگراممىلار"
-"(مەسىلەن، ئىجرا قىلىنىۋاتقان)نى كۆزىتىدۇ. گەرچە بۇ سانلىق مەلۇماتلار مەخپىي "
-"ساقلانسىمۇ، شەخسىي سىر سەۋەبىدىن بۇنى چەكلىشىڭىز مۇمكىن. دىققەت بۇنداق "
-"قىلغاندا ئاللىبۇرۇن ساقلانغان سانلىق مەلۇماتلار چىقىرىۋېتىلمەيدۇ."
+msgstr "چاپان (shell) ئادەتتىكى ئەھۋالدا كۆپ ئىشلىتىلىدىغان ئاكتىپ پروگراممىلار(مەسىلەن، ئىجرا قىلىنىۋاتقان)نى كۆزىتىدۇ. گەرچە بۇ سانلىق مەلۇماتلار مەخپىي ساقلانسىمۇ، شەخسىي سىر سەۋەبىدىن بۇنى چەكلىشىڭىز مۇمكىن. دىققەت بۇنداق قىلغاندا ئاللىبۇرۇن ساقلانغان سانلىق مەلۇماتلار چىقىرىۋېتىلمەيدۇ."
-#: ../data/org.gnome.shell.gschema.xml.in.h:24
+#: ../data/org.gnome.shell.gschema.xml.in.h:22
msgid ""
"This key specifies the format used by the panel clock when the format key is "
"set to \"custom\". You can use conversion specifiers understood by strftime"
"() to obtain a specific format. See the strftime() manual for more "
"information."
-msgstr ""
-"format (فورمات) كۇنۇپكىسى \"custom\" (ئىختىيارى) قىلىپ تەڭشەلسە بۇ كۇنۇپكا "
-"تاختا سائەت ئىشلىتىدىغان فورماتنى بەلگىلەيدۇ. سىز strftime()نىڭ فورمات "
-"بەلگىسىنى ئىشلىتىپ بەلگىلەنگەن فورماتقا ئېرىشەلەيسىز. تەپسىلاتىنى strftime() "
-"نىڭ قوللانمىسىدىن كۆرۈڭ."
+msgstr "format (فورمات) كۇنۇپكىسى \"custom\" (ئىختىيارى) قىلىپ تەڭشەلسە بۇ كۇنۇپكا تاختا سائەت ئىشلىتىدىغان فورماتنى بەلگىلەيدۇ. سىز strftime()نىڭ فورمات بەلگىسىنى ئىشلىتىپ بەلگىلەنگەن فورماتقا ئېرىشەلەيسىز. تەپسىلاتىنى strftime() نىڭ قوللانمىسىدىن كۆرۈڭ."
-#: ../data/org.gnome.shell.gschema.xml.in.h:25
+#: ../data/org.gnome.shell.gschema.xml.in.h:23
msgid ""
"This key specifies the hour format used by the panel clock. Possible values "
"are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to \"unix\", "
@@ -208,20 +161,13 @@ msgid ""
"to \"custom\", the clock will display time according to the format specified "
"in the custom_format key. Note that if set to either \"unix\" or \"custom\", "
"the show_date and show_seconds keys are ignored."
-msgstr ""
-"بۇ كۇنۇپكا تاختا سائەت ئىشلەتكەن سائەت فورماتىنى بەلگىلىگەن. ئىشلەتكىلى "
-"بولىدىغان قىممىتى \"12-hour\" يەنى (12 سائەت)، \"24-hour\" يەنى (24 سائەت)، "
-"\"unix\" ۋە \"custom\" (ئىختىيارى). ئەگەر \"unix\" قىلىپ تەڭشەلسە سائەت "
-"ئۆزلۈكىدىن يېڭى ئېرا (يەنى، 1970-01-01) دىن ئۆتكەن سېكۇنتنى ئاساس قىلىدۇ. "
-"ئەگەر \"custom\" قىلىپ تەڭشەلسە سائەت custom_format كۇنۇپكا قىممىتىگە "
-"ئاساسەن ۋاقىتنى كۆرسىتىدۇ. ئەگەر \"unix\" ياكى \"custom\" قىلىپ تەڭشەلسە "
-"show_date ۋە show_seconds قىممىتىگە پەرۋا قىلمايدۇ"
+msgstr "بۇ كۇنۇپكا تاختا سائەت ئىشلەتكەن سائەت فورماتىنى بەلگىلىگەن. ئىشلەتكىلى بولىدىغان قىممىتى \"12-hour\" يەنى (12 سائەت)، \"24-hour\" يەنى (24 سائەت)، \"unix\" ۋە \"custom\" (ئىختىيارى). ئەگەر \"unix\" قىلىپ تەڭشەلسە سائەت ئۆزلۈكىدىن يېڭى ئېرا (يەنى، 1970-01-01) دىن ئۆتكەن سېكۇنتنى ئاساس قىلىدۇ. ئەگەر \"custom\" قىلىپ تەڭشەلسە سائەت custom_format كۇنۇپكا قىممىتىگە ئاساسەن ۋاقىتنى كۆرسىتىدۇ. ئەگەر \"unix\" ياكى \"custom\" قىلىپ تەڭشەلسە show_date ۋە show_seconds قىممىتىگە پەرۋا قىلمايدۇ"
-#: ../data/org.gnome.shell.gschema.xml.in.h:26
+#: ../data/org.gnome.shell.gschema.xml.in.h:24
msgid "Uuids of extensions to disable"
msgstr "چەكلىنىدىغان كېڭەيتىلمىنىڭ Uuid سى"
-#: ../data/org.gnome.shell.gschema.xml.in.h:27
+#: ../data/org.gnome.shell.gschema.xml.in.h:25
msgid "Whether to collect stats about applications usage"
msgstr "پروگراممىنىڭ ئىشلىتىلىشى ھەققىدىكى ستاتىستىكىنى توپلامدۇ يوق"
@@ -237,8 +183,7 @@ msgstr "نىشانلىغۇچنىڭ رەڭگى"
msgid ""
"Determines the length of the vertical and horizontal lines that make up the "
"crosshairs."
-msgstr ""
-"نىشانلىغۇچنى ھاسىل قىلىدىغان توغرا ۋە بوي سىزىقنىڭ ئۇزۇنلۇقى بەلگىلىنىدۇ."
+msgstr "نىشانلىغۇچنى ھاسىل قىلىدىغان توغرا ۋە بوي سىزىقنىڭ ئۇزۇنلۇقى بەلگىلىنىدۇ."
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:4
msgid ""
@@ -305,7 +250,7 @@ msgstr "ئېكران ئورنى"
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:15
msgid "Scroll magnified contents beyond the edges of the desktop"
-msgstr "دومىلىما چوڭايتقۇچ ئۈستەل ئۈستى گىرۋەك مەزمۇنىدىن ھالقىپ كەتتى"
+msgstr "دومىلىما چوڭايتقۇچ ئۈستەلئۈستى گىرۋەك مەزمۇنىدىن ھالقىپ كەتتى"
#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:16
msgid "Show or hide crosshairs"
@@ -379,62 +324,45 @@ msgstr "_12 سائەت فورماتى"
msgid "_24 hour format"
msgstr "_24 سائەت فورماتى"
-#. **** Applications ****
-#: ../js/ui/appDisplay.js:316 ../js/ui/dash.js:778
+#: ../js/ui/appDisplay.js:154
+msgid "All"
+msgstr "ھەممىسى"
+
+#: ../js/ui/appDisplay.js:235
msgid "APPLICATIONS"
msgstr "پروگراممىلار"
-#: ../js/ui/appDisplay.js:348
+#: ../js/ui/appDisplay.js:265
msgid "PREFERENCES"
msgstr "مايىللىق"
-#: ../js/ui/appDisplay.js:647
+#: ../js/ui/appDisplay.js:562
msgid "New Window"
msgstr "يېڭى كۆزنەك"
-#: ../js/ui/appDisplay.js:651
+#: ../js/ui/appDisplay.js:566
msgid "Remove from Favorites"
msgstr "يىغقۇچتىن چىقىرىۋەت"
-#: ../js/ui/appDisplay.js:652
+#: ../js/ui/appDisplay.js:567
msgid "Add to Favorites"
msgstr "يىغقۇچقا قوش"
-#: ../js/ui/appDisplay.js:829
-msgid "Drag here to add favorites"
-msgstr "بۇ جايغا سۆرەپ يىغقۇچقا قوش"
-
-#: ../js/ui/appFavorites.js:88
+#: ../js/ui/appFavorites.js:91
#, c-format
msgid "%s has been added to your favorites."
msgstr "%s يىغقۇچىڭىزغا قوشۇلدى."
-#: ../js/ui/appFavorites.js:107
+#: ../js/ui/appFavorites.js:122
#, c-format
msgid "%s has been removed from your favorites."
msgstr "%s يىغقۇچىڭىزدىن چىقىرىۋېتىلىدۇ."
-#: ../js/ui/dash.js:142
-msgid "Find"
-msgstr "ئىزدە"
+#: ../js/ui/dash.js:27
+msgid "Remove"
+msgstr "چىقىرىۋەت"
-#: ../js/ui/dash.js:473
-msgid "Searching..."
-msgstr "ئىزدەۋاتىدۇ..."
-
-#: ../js/ui/dash.js:487
-msgid "No matching results."
-msgstr "ماس كېلىدىغان نەتىجە يوق."
-
-#. **** Places ****
-#. Translators: This is in the sense of locations for documents,
-#. network locations, etc.
-#: ../js/ui/dash.js:797 ../js/ui/placeDisplay.js:558
-msgid "PLACES & DEVICES"
-msgstr "ئورۇن ۋە ئۈسكۈنىلەر"
-
-#. **** Documents ****
-#: ../js/ui/dash.js:804 ../js/ui/docDisplay.js:494
+#: ../js/ui/docDisplay.js:494
msgid "RECENT ITEMS"
msgstr "يېقىنقى تۈرلەر"
@@ -468,63 +396,72 @@ msgstr "مەنبەنى كۆرسەت"
msgid "Web Page"
msgstr "توربەت"
-#: ../js/ui/overview.js:160
+#: ../js/ui/overview.js:96
msgid "Undo"
msgstr "يېنىۋال"
+#: ../js/ui/overview.js:158
+#| msgid "New Window"
+msgid "Windows"
+msgstr "كۆزنەكلەر"
+
+#: ../js/ui/overview.js:161
+msgid "Applications"
+msgstr "پروگراممىلار"
+
#. TODO - _quit() doesn't really work on apps in state STARTING yet
-#: ../js/ui/panel.js:470
+#: ../js/ui/panel.js:474
#, c-format
msgid "Quit %s"
msgstr "%s چېكىن"
-#: ../js/ui/panel.js:495
+#: ../js/ui/panel.js:499
msgid "Preferences"
msgstr "مايىللىق"
#. Translators: This is the time format with date used
#. in 24-hour mode.
-#: ../js/ui/panel.js:581
+#: ../js/ui/panel.js:585
msgid "%a %b %e, %R:%S"
msgstr "%a %b %e، %R:%S"
-#: ../js/ui/panel.js:582
+#: ../js/ui/panel.js:586
msgid "%a %b %e, %R"
msgstr "%a %b %e، %R"
#. Translators: This is the time format without date used
#. in 24-hour mode.
-#: ../js/ui/panel.js:586
+#: ../js/ui/panel.js:590
msgid "%a %R:%S"
msgstr "%a %R:%S"
-#: ../js/ui/panel.js:587
+#: ../js/ui/panel.js:591
msgid "%a %R"
msgstr "%a %R"
#. Translators: This is a time format with date used
#. for AM/PM.
-#: ../js/ui/panel.js:594
+#: ../js/ui/panel.js:598
msgid "%a %b %e, %l:%M:%S %p"
msgstr "%a %b %e، %l:%M:%S %p"
-#: ../js/ui/panel.js:595
+#: ../js/ui/panel.js:599
msgid "%a %b %e, %l:%M %p"
msgstr "%a %b %e، %l:%M %p"
#. Translators: This is a time format without date used
#. for AM/PM.
-#: ../js/ui/panel.js:599
+#: ../js/ui/panel.js:603
msgid "%a %l:%M:%S %p"
msgstr "%a %l:%M:%S %p"
-#: ../js/ui/panel.js:600
+#: ../js/ui/panel.js:604
msgid "%a %l:%M %p"
msgstr "%p%l:%M (%a)"
#. Button on the left side of the panel.
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
-#: ../js/ui/panel.js:745
+#: ../js/ui/panel.js:749
msgid "Activities"
msgstr "پائالىيەتلەر"
@@ -541,6 +478,10 @@ msgstr "قايتا سىنا"
msgid "Connect to..."
msgstr "باغلىنىش…"
+#: ../js/ui/placeDisplay.js:558
+msgid "PLACES & DEVICES"
+msgstr "ئورۇن ۋە ئۈسكۈنىلەر"
+
#. Translators: this MUST be either "toggle-switch-us"
#. (for toggle switches containing the English words
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
@@ -568,16 +509,14 @@ msgid "Busy"
msgstr "ئالدىراش"
#: ../js/ui/statusMenu.js:114
-#, fuzzy
#| msgid "My Account..."
msgid "My Account"
-msgstr "ھېساباتىم…"
+msgstr "ھېساباتىم"
#: ../js/ui/statusMenu.js:118
-#, fuzzy
#| msgid "System Settings..."
msgid "System Settings"
-msgstr "سىستېما تەڭشەكلىرى..."
+msgstr "سىستېما تەڭشىكى"
#: ../js/ui/statusMenu.js:125
msgid "Lock Screen"
@@ -592,15 +531,18 @@ msgid "Log Out..."
msgstr "تىزىمدىن چىقىش…"
#: ../js/ui/statusMenu.js:141
-#, fuzzy
#| msgid "Suspend"
msgid "Suspend..."
-msgstr "توڭلات"
+msgstr ""
#: ../js/ui/statusMenu.js:145
msgid "Shut Down..."
msgstr "تاقا…"
+#: ../js/ui/status/accessibility.js:82
+msgid "Zoom"
+msgstr "كېڭەيت تارايت"
+
#: ../js/ui/status/accessibility.js:88
msgid "Screen Reader"
msgstr "ئېكران ئوقۇغۇچ"
@@ -641,9 +583,262 @@ msgstr "يۇقىرى ئاق-قارىلىقى"
msgid "Large Text"
msgstr "چوڭ تېكىست"
-#: ../js/ui/status/accessibility.js:224
-msgid "Zoom"
-msgstr "كېڭەيت تارايت"
+#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:200
+msgid "Bluetooth"
+msgstr "كۆكچىش"
+
+#: ../js/ui/status/bluetooth.js:55
+msgid "Visibility"
+msgstr "كۆرۈشچانلىقى"
+
+#: ../js/ui/status/bluetooth.js:68
+msgid "Send Files to Device..."
+msgstr ""
+
+#: ../js/ui/status/bluetooth.js:71
+msgid "Setup a New Device..."
+msgstr ""
+
+#: ../js/ui/status/bluetooth.js:94
+#| msgid "System Settings..."
+msgid "Bluetooth Settings"
+msgstr ""
+
+#: ../js/ui/status/bluetooth.js:151
+#| msgid "Connect to..."
+msgid "Connection"
+msgstr "باغلىنىش"
+
+#: ../js/ui/status/bluetooth.js:187
+#| msgid "Suspend"
+msgid "Send Files..."
+msgstr ""
+
+#: ../js/ui/status/bluetooth.js:192
+msgid "Browse Files..."
+msgstr ""
+
+#: ../js/ui/status/bluetooth.js:201
+msgid "Error browsing device"
+msgstr ""
+
+#: ../js/ui/status/bluetooth.js:202
+#, c-format
+msgid "The requested device cannot be browsed, error is '%s'"
+msgstr ""
+
+#: ../js/ui/status/bluetooth.js:210
+#| msgid "System Settings..."
+msgid "Keyboard Settings"
+msgstr ""
+
+#: ../js/ui/status/bluetooth.js:215
+#| msgid "System Settings..."
+msgid "Mouse Settings"
+msgstr ""
+
+#: ../js/ui/status/bluetooth.js:222 ../js/ui/status/volume.js:62
+#| msgid "System Settings..."
+msgid "Sound Settings"
+msgstr ""
+
+#: ../js/ui/status/bluetooth.js:293 ../js/ui/status/bluetooth.js:327
+#: ../js/ui/status/bluetooth.js:367 ../js/ui/status/bluetooth.js:400
+msgid "Bluetooth Agent"
+msgstr ""
+
+#: ../js/ui/status/bluetooth.js:328
+#, c-format
+msgid "Authorization request from %s"
+msgstr ""
+
+#: ../js/ui/status/bluetooth.js:334
+#, c-format
+msgid "Device %s wants access to the service '%s'"
+msgstr ""
+
+#: ../js/ui/status/bluetooth.js:336
+msgid "Always grant access"
+msgstr ""
+
+#: ../js/ui/status/bluetooth.js:337
+msgid "Grant this time only"
+msgstr ""
+
+#: ../js/ui/status/bluetooth.js:338
+msgid "Reject"
+msgstr "رەت قىل"
+
+#: ../js/ui/status/bluetooth.js:368
+#, c-format
+msgid "Pairing confirmation for %s"
+msgstr ""
+
+#: ../js/ui/status/bluetooth.js:374 ../js/ui/status/bluetooth.js:408
+#, c-format
+msgid "Device %s wants to pair with this computer"
+msgstr ""
+
+#: ../js/ui/status/bluetooth.js:375
+#, c-format
+msgid "Please confirm whether the PIN '%s' matches the one on the device."
+msgstr ""
+
+#: ../js/ui/status/bluetooth.js:377
+msgid "Matches"
+msgstr "جۈپلەش تۈرى"
+
+#: ../js/ui/status/bluetooth.js:378
+msgid "Does not match"
+msgstr "جۈپلىمە"
+
+#: ../js/ui/status/bluetooth.js:401
+#, c-format
+msgid "Pairing request for %s"
+msgstr ""
+
+#: ../js/ui/status/bluetooth.js:409
+msgid "Please enter the PIN mentioned on the device."
+msgstr ""
+
+#: ../js/ui/status/bluetooth.js:425
+msgid "OK"
+msgstr "جەزملە"
+
+#: ../js/ui/status/bluetooth.js:426
+msgid "Cancel"
+msgstr "ۋاز كەچ"
+
+#: ../js/ui/status/power.js:85
+#| msgid "System Settings..."
+msgid "Power Settings"
+msgstr ""
+
+#: ../js/ui/status/power.js:112
+#, c-format
+#| msgid "%d hour ago"
+#| msgid_plural "%d hours ago"
+msgid "%d hour remaining"
+msgid_plural "%d hours remaining"
+msgstr[0] ""
+
+#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
+#: ../js/ui/status/power.js:115
+#, c-format
+msgid "%d %s %d %s remaining"
+msgstr ""
+
+#: ../js/ui/status/power.js:117
+msgid "hour"
+msgid_plural "hours"
+msgstr[0] "سائەت"
+
+#: ../js/ui/status/power.js:117
+#| msgid "%d minute ago"
+#| msgid_plural "%d minutes ago"
+msgid "minute"
+msgid_plural "minutes"
+msgstr[0] "مىنۇت"
+
+#: ../js/ui/status/power.js:120
+#, c-format
+#| msgid "%d minute ago"
+#| msgid_plural "%d minutes ago"
+msgid "%d minute remaining"
+msgid_plural "%d minutes remaining"
+msgstr[0] ""
+
+#: ../js/ui/status/power.js:237
+msgid "AC adapter"
+msgstr ""
+
+#: ../js/ui/status/power.js:239
+msgid "Laptop battery"
+msgstr ""
+
+#: ../js/ui/status/power.js:241
+msgid "UPS"
+msgstr "UPS"
+
+#: ../js/ui/status/power.js:243
+msgid "Monitor"
+msgstr "ئېكران"
+
+#: ../js/ui/status/power.js:245
+#| msgid "Mouse Keys"
+msgid "Mouse"
+msgstr "چاشقىنەك"
+
+#: ../js/ui/status/power.js:247
+#| msgid "Screen Keyboard"
+msgid "Keyboard"
+msgstr "ھەرپتاختا"
+
+#: ../js/ui/status/power.js:249
+msgid "PDA"
+msgstr "PDA"
+
+#: ../js/ui/status/power.js:251
+msgid "Cell phone"
+msgstr ""
+
+#: ../js/ui/status/power.js:253
+msgid "Media player"
+msgstr "Media چالغۇ"
+
+#: ../js/ui/status/power.js:255
+#| msgid "Enabled"
+msgid "Tablet"
+msgstr "سەزمە تاختا"
+
+#: ../js/ui/status/power.js:257
+msgid "Computer"
+msgstr "كومپيۇتېر"
+
+#: ../js/ui/status/power.js:259 ../src/shell-app-system.c:1012
+msgid "Unknown"
+msgstr "نامەلۇم"
+
+#: ../js/ui/status/volume.js:41
+msgid "Volume"
+msgstr "دىسكا"
+
+#: ../js/ui/status/volume.js:54
+msgid "Microphone"
+msgstr ""
+
+#: ../js/ui/telepathyClient.js:560
+#, c-format
+msgid "%s is online."
+msgstr ""
+
+#: ../js/ui/telepathyClient.js:565
+#, c-format
+msgid "%s is offline."
+msgstr ""
+
+#: ../js/ui/telepathyClient.js:568
+#, c-format
+#| msgid "'%s' is ready"
+msgid "%s is away."
+msgstr ""
+
+#: ../js/ui/telepathyClient.js:571
+#, c-format
+msgid "%s is busy."
+msgstr ""
+
+#. Translators: this is a time format string followed by a date.
+#. If applicable, replace %X with a strftime format valid for your
+#. locale, without seconds.
+#: ../js/ui/telepathyClient.js:664
+#, no-c-format
+msgid "Sent at %X on %A"
+msgstr ""
+
+#: ../js/ui/viewSelector.js:26
+msgid "Search your computer"
+msgstr ""
#: ../js/ui/windowAttentionHandler.js:43
#, c-format
@@ -655,12 +850,12 @@ msgstr "%s باشلاشنى تاماملىدى"
msgid "'%s' is ready"
msgstr "«%s» تەييار"
-#: ../js/ui/workspacesView.js:229
+#: ../js/ui/workspacesView.js:244
msgid ""
"Can't add a new workspace because maximum workspaces limit has been reached."
msgstr "يېڭى خىزمەت رايونى قوشالمايدۇ چۈنكى ئەڭ كۆپ خىزمەت رايون چېكىگە يەتتى."
-#: ../js/ui/workspacesView.js:246
+#: ../js/ui/workspacesView.js:260
msgid "Can't remove the first workspace."
msgstr "بىرىنچى خىزمەت رايونىنى چىقىرىۋەتكىلى بولمايدۇ."
@@ -684,33 +879,29 @@ msgstr[0] "%u كىرگۈزۈلمە"
msgid "System Sounds"
msgstr "سىستېما ئاۋازى"
-#: ../src/shell-app-system.c:1012
-msgid "Unknown"
-msgstr "نامەلۇم"
-
-#: ../src/shell-global.c:1163
+#: ../src/shell-global.c:1155
msgid "Less than a minute ago"
msgstr "بىر مىنۇتتىنمۇ ئىلگىرى"
-#: ../src/shell-global.c:1167
+#: ../src/shell-global.c:1159
#, c-format
msgid "%d minute ago"
msgid_plural "%d minutes ago"
msgstr[0] "%d مىنۇت ئىلگىرى"
-#: ../src/shell-global.c:1172
+#: ../src/shell-global.c:1164
#, c-format
msgid "%d hour ago"
msgid_plural "%d hours ago"
msgstr[0] "%d سائەت ئىلگىرى"
-#: ../src/shell-global.c:1177
+#: ../src/shell-global.c:1169
#, c-format
msgid "%d day ago"
msgid_plural "%d days ago"
msgstr[0] "%d كۈن ئىلگىرى"
-#: ../src/shell-global.c:1182
+#: ../src/shell-global.c:1174
#, c-format
msgid "%d week ago"
msgid_plural "%d weeks ago"
@@ -738,7 +929,29 @@ msgstr "ئىزدە"
#: ../src/shell-util.c:300
#, c-format
msgid "%1$s: %2$s"
-msgstr "%1$s: %2$s "
+msgstr "%1$s: %2$s"
+
+#~ msgid "Overview workspace view mode"
+#~ msgstr "خىزمەت رايون كۆرۈنۈش ھالىتى ھەققىدە قىسقىچە بايان"
+
+#~ msgid ""
+#~ "The selected workspace view mode in the overview. Supported values are "
+#~ "\"single\" and \"grid\"."
+#~ msgstr ""
+#~ "قىسقىچە باياندىكى تاللانغان خىزمەت رايونىنىڭ كۆرۈنۈش ھالىتى. ئىشلىتىشكە "
+#~ "بولىدىغان قىممەتلەر «يەككە» ۋە «سېتكا»"
+
+#~ msgid "Drag here to add favorites"
+#~ msgstr "بۇ جايغا سۆرەپ يىغقۇچقا قوش"
+
+#~ msgid "Find"
+#~ msgstr "ئىزدە"
+
+#~ msgid "Searching..."
+#~ msgstr "ئىزدەۋاتىدۇ..."
+
+#~ msgid "No matching results."
+#~ msgstr "ماس كېلىدىغان نەتىجە يوق."
#~ msgid "Invisible"
#~ msgstr "يوشۇرۇن"
diff --git a/po/vi.po b/po/vi.po
index 9ef8f02db..fe87bf320 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -6,9 +6,10 @@
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-16 19:32+0700\n"
-"PO-Revision-Date: 2010-02-16 19:36+0700\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
+"shell&component=general\n"
+"POT-Creation-Date: 2010-12-20 21:07+0000\n"
+"PO-Revision-Date: 2010-12-29 21:22+0700\n"
"Last-Translator: Duy \n"
"Language-Team: Vietnamese \n"
"MIME-Version: 1.0\n"
@@ -24,218 +25,895 @@ msgstr "GNOME Shell"
msgid "Window management and application launching"
msgstr "Quản lý cửa sổ và chạy ứng dụng"
-#. **** Applications ****
-#: ../js/ui/appDisplay.js:252 ../js/ui/dash.js:880
+#: ../data/gnome-shell-clock-preferences.desktop.in.in.h:1
+msgid "Clock"
+msgstr "Đồng hồ"
+
+#: ../data/gnome-shell-clock-preferences.desktop.in.in.h:2
+msgid "Customize the panel clock"
+msgstr "Tuỳ biến đồng hồ"
+
+#: ../data/org.gnome.shell.gschema.xml.in.h:1
+msgid ""
+"Allows access to internal debugging and monitoring tools using the Alt-F2 "
+"dialog."
+msgstr ""
+
+#: ../data/org.gnome.shell.gschema.xml.in.h:2
+msgid "Custom format of the clock"
+msgstr ""
+
+#: ../data/org.gnome.shell.gschema.xml.in.h:3
+msgid "Enable internal tools useful for developers and testers from Alt-F2"
+msgstr ""
+
+#: ../data/org.gnome.shell.gschema.xml.in.h:4
+msgid "File extension used for storing the screencast"
+msgstr ""
+
+#: ../data/org.gnome.shell.gschema.xml.in.h:5
+msgid "Framerate used for recording screencasts."
+msgstr ""
+
+#: ../data/org.gnome.shell.gschema.xml.in.h:6
+msgid ""
+"GNOME Shell extensions have a uuid property; this key lists extensions which "
+"should not be loaded."
+msgstr ""
+
+#: ../data/org.gnome.shell.gschema.xml.in.h:7
+msgid "History for command (Alt-F2) dialog"
+msgstr ""
+
+#: ../data/org.gnome.shell.gschema.xml.in.h:8
+msgid "Hour format"
+msgstr ""
+
+#: ../data/org.gnome.shell.gschema.xml.in.h:9
+msgid ""
+"If true and format is either \"12-hour\" or \"24-hour\", display date in the "
+"clock, in addition to time."
+msgstr ""
+
+#: ../data/org.gnome.shell.gschema.xml.in.h:10
+msgid ""
+"If true and format is either \"12-hour\" or \"24-hour\", display seconds in "
+"time."
+msgstr ""
+
+#: ../data/org.gnome.shell.gschema.xml.in.h:11
+msgid "If true, display the ISO week date in the calendar."
+msgstr ""
+
+#: ../data/org.gnome.shell.gschema.xml.in.h:12
+msgid "List of desktop file IDs for favorite applications"
+msgstr ""
+
+#: ../data/org.gnome.shell.gschema.xml.in.h:13
+msgid ""
+"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
+"used for gst-launch. The pipeline should have an unconnected sink pad where "
+"the recorded video is recorded. It will normally have a unconnected source "
+"pad; output from that pad will be written into the output file. However the "
+"pipeline can also take care of its own output - this might be used to send "
+"the output to an icecast server via shout2send or similar. When unset or set "
+"to an empty value, the default pipeline will be used. This is currently "
+"'videorate ! theoraenc ! oggmux' and records to Ogg Theora."
+msgstr ""
+
+#: ../data/org.gnome.shell.gschema.xml.in.h:14
+msgid "Show date in clock"
+msgstr ""
+
+#: ../data/org.gnome.shell.gschema.xml.in.h:15
+msgid "Show the week date in the calendar"
+msgstr ""
+
+#: ../data/org.gnome.shell.gschema.xml.in.h:16
+msgid "Show time with seconds"
+msgstr ""
+
+#: ../data/org.gnome.shell.gschema.xml.in.h:17
+msgid ""
+"The applications corresponding to these identifiers will be displayed in the "
+"favorites area."
+msgstr ""
+
+#: ../data/org.gnome.shell.gschema.xml.in.h:18
+msgid ""
+"The filename for recorded screencasts will be a unique filename based on the "
+"current date, and use this extension. It should be changed when recording to "
+"a different container format."
+msgstr ""
+
+#: ../data/org.gnome.shell.gschema.xml.in.h:19
+msgid ""
+"The framerate of the resulting screencast recordered by GNOME Shell's "
+"screencast recorder in frames-per-second."
+msgstr ""
+
+#: ../data/org.gnome.shell.gschema.xml.in.h:20
+msgid "The gstreamer pipeline used to encode the screencast"
+msgstr ""
+
+#: ../data/org.gnome.shell.gschema.xml.in.h:21
+msgid ""
+"The shell normally monitors active applications in order to present the most "
+"used ones (e.g. in launchers). While this data will be kept private, you may "
+"want to disable this for privacy reasons. Please note that doing so won't "
+"remove already saved data."
+msgstr ""
+
+#: ../data/org.gnome.shell.gschema.xml.in.h:22
+msgid ""
+"This key specifies the format used by the panel clock when the format key is "
+"set to \"custom\". You can use conversion specifiers understood by strftime"
+"() to obtain a specific format. See the strftime() manual for more "
+"information."
+msgstr ""
+
+#: ../data/org.gnome.shell.gschema.xml.in.h:23
+msgid ""
+"This key specifies the hour format used by the panel clock. Possible values "
+"are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to \"unix\", "
+"the clock will display time in seconds since Epoch, i.e. 1970-01-01. If set "
+"to \"custom\", the clock will display time according to the format specified "
+"in the custom_format key. Note that if set to either \"unix\" or \"custom\", "
+"the show_date and show_seconds keys are ignored."
+msgstr ""
+
+#: ../data/org.gnome.shell.gschema.xml.in.h:24
+#| msgid "No extensions installed"
+msgid "Uuids of extensions to disable"
+msgstr "UUID của phần mở rộng cần tắt"
+
+#: ../data/org.gnome.shell.gschema.xml.in.h:25
+msgid "Whether to collect stats about applications usage"
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:1
+msgid "Clip the crosshairs at the center"
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:2
+msgid "Color of the crosshairs"
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:3
+msgid ""
+"Determines the length of the vertical and horizontal lines that make up the "
+"crosshairs."
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:4
+msgid ""
+"Determines the position of the magnified mouse image within the magnified "
+"view and how it reacts to system mouse movement. The values are - none: no "
+"mouse tracking; - centered: the mouse image is displayed at the center of "
+"the zoom region (which also represents the point under the system mouse) and "
+"the magnified contents are scrolled as the system mouse moves; - "
+"proportional: the position of the magnified mouse in the zoom region is "
+"proportionally the same as the position of the system mouse on screen; - "
+"push: when the magnified mouse intersects a boundary of the zoom region, the "
+"contents are scrolled into view."
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:5
+msgid ""
+"Determines the transparency of the crosshairs, from fully opaque to fully "
+"transparent."
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:6
+msgid ""
+"Determines whether the crosshairs intersect the magnified mouse sprite, or "
+"are clipped such that the ends of the horizontal and vertical lines surround "
+"the mouse image."
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:7
+#| msgid "Enabled"
+msgid "Enable lens mode"
+msgstr "Bật chế độ gương"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:8
+msgid ""
+"Enables/disables display of crosshairs centered on the magnified mouse "
+"sprite."
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:9
+msgid ""
+"For centered mouse tracking, when the system pointer is at or near the edge "
+"of the screen, the magnified contents continue to scroll such that the "
+"screen edge moves into the magnified view."
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:10
+msgid "Length of the crosshairs"
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:11
+msgid "Magnification factor"
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:12
+msgid "Mouse Tracking Mode"
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:13
+msgid "Opacity of the crosshairs"
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:14
+msgid "Screen position"
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:15
+msgid "Scroll magnified contents beyond the edges of the desktop"
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:16
+msgid "Show or hide crosshairs"
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:17
+msgid "Show or hide the magnifier"
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:18
+msgid "Show or hide the magnifier and all of its zoom regions."
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:19
+msgid ""
+"The color of the the vertical and horizontal lines that make up the "
+"crosshairs."
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:20
+msgid ""
+"The magnified view either fills the entire screen, or occupies the top-half, "
+"bottom-half, left-half, or right-half of the screen."
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:21
+msgid ""
+"The power of the magnification. A value of 1.0 means no magnification. A "
+"value of 2.0 doubles the size."
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:22
+msgid "Thickness of the crosshairs"
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:23
+msgid ""
+"Whether the magnified view should be centered over the location of the "
+"system mouse and move with it."
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:24
+msgid "Width of the vertical and horizontal lines that make up the crosshairs."
+msgstr "Độ rộng của đường dọc/ngang hình thành dấu gạch chéo."
+
+#: ../data/clock-preferences.ui.h:1
+msgid "Clock Format"
+msgstr "Dạng đồng hồ"
+
+#: ../data/clock-preferences.ui.h:2
+#| msgid "System Preferences..."
+msgid "Clock Preferences"
+msgstr "Thiết lập đồng hồ"
+
+#: ../data/clock-preferences.ui.h:3
+msgid "Panel Display"
+msgstr "Khung hiển thị"
+
+#: ../data/clock-preferences.ui.h:4
+msgid "Show seco_nds"
+msgstr "Hiện _giây"
+
+#: ../data/clock-preferences.ui.h:5
+msgid "Show the _date"
+msgstr "Hiện _ngày"
+
+#: ../data/clock-preferences.ui.h:6
+msgid "_12 hour format"
+msgstr "Dạng _12 giờ"
+
+#: ../data/clock-preferences.ui.h:7
+msgid "_24 hour format"
+msgstr "Dạng _24 giờ"
+
+#: ../js/ui/appDisplay.js:154
+msgid "All"
+msgstr "Tất cả"
+
+#: ../js/ui/appDisplay.js:235
msgid "APPLICATIONS"
msgstr "ỨNG DỤNG"
-#: ../js/ui/appDisplay.js:276
+#: ../js/ui/appDisplay.js:265
msgid "PREFERENCES"
msgstr "TUỲ THÍCH"
-#: ../js/ui/appDisplay.js:649
+#: ../js/ui/appDisplay.js:562
msgid "New Window"
msgstr "Cửa sổ mới"
-#: ../js/ui/appDisplay.js:653
+#: ../js/ui/appDisplay.js:566
msgid "Remove from Favorites"
msgstr "Bỏ đánh dấu ưa thích"
-#: ../js/ui/appDisplay.js:654
+#: ../js/ui/appDisplay.js:567
msgid "Add to Favorites"
msgstr "Đánh dấu ưa thích"
-#: ../js/ui/appDisplay.js:1006
-msgid "Drag here to add favorites"
-msgstr "Kéo vào đây để thêm vào danh mục ưa thích"
-
-#: ../js/ui/appFavorites.js:89
+#: ../js/ui/appFavorites.js:91
#, c-format
msgid "%s has been added to your favorites."
msgstr "Đã được đánh dấu ưa thích cho %s."
-#: ../js/ui/appFavorites.js:107
+#: ../js/ui/appFavorites.js:122
#, c-format
msgid "%s has been removed from your favorites."
msgstr "Đã bỏ đánh dấu ưa thích cho %s"
-#: ../js/ui/dash.js:241
-msgid "Find..."
-msgstr "Tìm"
+#: ../js/ui/dash.js:27
+msgid "Remove"
+msgstr "Loại bỏ"
-#: ../js/ui/dash.js:508
-msgid "Searching..."
-msgstr "Đang tìm..."
-
-#: ../js/ui/dash.js:522
-msgid "No matching results."
-msgstr "Không tìm thấy."
-
-#. **** Places ****
-#. Translators: This is in the sense of locations for documents,
-#. network locations, etc.
-#: ../js/ui/dash.js:900 ../js/ui/placeDisplay.js:529
-msgid "PLACES & DEVICES"
-msgstr "ĐỊA ĐIỂM & THIẾT BỊ"
-
-#. **** Documents ****
-#: ../js/ui/dash.js:907 ../js/ui/docDisplay.js:488
+#: ../js/ui/docDisplay.js:494
msgid "RECENT ITEMS"
msgstr "MỤC GẦN ĐÂY"
-#: ../js/ui/lookingGlass.js:356
+#: ../js/ui/lookingGlass.js:552
msgid "No extensions installed"
msgstr "Chưa cài phần mở rộng"
-#: ../js/ui/lookingGlass.js:393
+#: ../js/ui/lookingGlass.js:589
msgid "Enabled"
msgstr "Bật"
-#: ../js/ui/lookingGlass.js:395
+#. translators:
+#. * The device has been disabled
+#: ../js/ui/lookingGlass.js:591 ../src/gvc/gvc-mixer-control.c:1087
msgid "Disabled"
msgstr "Tắt"
-#: ../js/ui/lookingGlass.js:397
+#: ../js/ui/lookingGlass.js:593
msgid "Error"
msgstr "Lỗi"
-#: ../js/ui/lookingGlass.js:399
+#: ../js/ui/lookingGlass.js:595
msgid "Out of date"
msgstr "Hết hạn"
-#: ../js/ui/lookingGlass.js:424
+#: ../js/ui/lookingGlass.js:620
msgid "View Source"
msgstr "Xem mã nguồn"
-#: ../js/ui/lookingGlass.js:430
+#: ../js/ui/lookingGlass.js:626
msgid "Web Page"
msgstr "Trang Web"
-#: ../js/ui/overview.js:92
+#: ../js/ui/overview.js:96
msgid "Undo"
msgstr "Hoàn lại"
-#. Button on the left side of the panel.
-#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
-#: ../js/ui/panel.js:336
-msgid "Activities"
-msgstr "Hoạt động"
+#: ../js/ui/overview.js:158
+#| msgid "New Window"
+msgid "Windows"
+msgstr "Cửa sổ"
-#. Translators: This is the time format used in 24-hour mode.
-#: ../js/ui/panel.js:560
+#: ../js/ui/overview.js:161
+msgid "Applications"
+msgstr "Ứng dụng"
+
+#. TODO - _quit() doesn't really work on apps in state STARTING yet
+#: ../js/ui/panel.js:474
+#, c-format
+msgid "Quit %s"
+msgstr "Thoát %s"
+
+#: ../js/ui/panel.js:499
+#| msgid "System Preferences..."
+msgid "Preferences"
+msgstr "Thiết lập"
+
+#. Translators: This is the time format with date used
+#. in 24-hour mode.
+#: ../js/ui/panel.js:585
+msgid "%a %b %e, %R:%S"
+msgstr "%a %b %e, %R:%S"
+
+#: ../js/ui/panel.js:586
+#| msgid "%a %l:%M %p"
+msgid "%a %b %e, %R"
+msgstr "%a %b %e, %R"
+
+#. Translators: This is the time format without date used
+#. in 24-hour mode.
+#: ../js/ui/panel.js:590
+#| msgid "%a %R"
+msgid "%a %R:%S"
+msgstr "%a %R:%S"
+
+#: ../js/ui/panel.js:591
msgid "%a %R"
msgstr "%a %R"
-#. Translators: This is a time format used for AM/PM.
-#: ../js/ui/panel.js:563
+#. Translators: This is a time format with date used
+#. for AM/PM.
+#: ../js/ui/panel.js:598
+#| msgid "%a %l:%M %p"
+msgid "%a %b %e, %l:%M:%S %p"
+msgstr "%a %b %e, %l:%M:%S %p"
+
+#: ../js/ui/panel.js:599
+#| msgid "%a %l:%M %p"
+msgid "%a %b %e, %l:%M %p"
+msgstr "%a %b %e, %l:%M %p"
+
+#. Translators: This is a time format without date used
+#. for AM/PM.
+#: ../js/ui/panel.js:603
+#| msgid "%a %l:%M %p"
+msgid "%a %l:%M:%S %p"
+msgstr "%a %l:%M:%S %p"
+
+#: ../js/ui/panel.js:604
msgid "%a %l:%M %p"
msgstr "%a %l:%M %p"
-#: ../js/ui/placeDisplay.js:144
+#. Button on the left side of the panel.
+#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
+#: ../js/ui/panel.js:749
+msgid "Activities"
+msgstr "Hoạt động"
+
+#: ../js/ui/placeDisplay.js:111
+#, c-format
+msgid "Failed to unmount '%s'"
+msgstr "Lỗi bỏ gắn '%s'"
+
+#: ../js/ui/placeDisplay.js:114
+msgid "Retry"
+msgstr "Thử lại"
+
+#: ../js/ui/placeDisplay.js:159
msgid "Connect to..."
msgstr "Kết nối đến..."
-#: ../js/ui/runDialog.js:245
+#: ../js/ui/placeDisplay.js:558
+msgid "PLACES & DEVICES"
+msgstr "ĐỊA ĐIỂM & THIẾT BỊ"
+
+#. 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:33
+msgid "toggle-switch-us"
+msgstr "toggle-switch-intl"
+
+#: ../js/ui/runDialog.js:233
msgid "Please enter a command:"
msgstr "Vui lòng nhập lệnh:"
-#: ../js/ui/runDialog.js:361
+#: ../js/ui/runDialog.js:378
#, c-format
msgid "Execution of '%s' failed:"
msgstr "Lỗi thực hiện '%s':"
-#: ../js/ui/statusMenu.js:107
+#: ../js/ui/statusMenu.js:101
msgid "Available"
msgstr "Có mặt"
-#: ../js/ui/statusMenu.js:112
+#: ../js/ui/statusMenu.js:106
msgid "Busy"
msgstr "Bận"
-#: ../js/ui/statusMenu.js:117
-msgid "Invisible"
-msgstr "Giấu mặt"
+#: ../js/ui/statusMenu.js:114
+msgid "My Account"
+msgstr "Tài khoản"
-#: ../js/ui/statusMenu.js:126
-msgid "Account Information..."
-msgstr "Thông tin tài khoản..."
+#: ../js/ui/statusMenu.js:118
+msgid "System Settings"
+msgstr "Thiết lập hệ thống"
-#: ../js/ui/statusMenu.js:132
-msgid "Sidebar"
-msgstr "Thanh bên"
-
-#: ../js/ui/statusMenu.js:142
-msgid "System Preferences..."
-msgstr "Thiết lập hệ thống..."
-
-#: ../js/ui/statusMenu.js:151
+#: ../js/ui/statusMenu.js:125
msgid "Lock Screen"
msgstr "Khoá màn hình"
-#: ../js/ui/statusMenu.js:156
+#: ../js/ui/statusMenu.js:129
msgid "Switch User"
msgstr "Chuyển người dùng"
-#: ../js/ui/statusMenu.js:162
+#: ../js/ui/statusMenu.js:134
msgid "Log Out..."
msgstr "Đăng xuất..."
-#: ../js/ui/statusMenu.js:167
+#: ../js/ui/statusMenu.js:141
+msgid "Suspend..."
+msgstr "Ngưng..."
+
+#: ../js/ui/statusMenu.js:145
msgid "Shut Down..."
msgstr "Tắt máy..."
-#. Translators: This is a time format.
-#: ../js/ui/widget.js:163
-msgid "%H:%M"
-msgstr "%H:%M"
+#: ../js/ui/status/accessibility.js:82
+msgid "Zoom"
+msgstr "Thu/Phóng"
-#: ../js/ui/widget.js:317
-msgid "Applications"
-msgstr "Ứng dụng"
+#: ../js/ui/status/accessibility.js:88
+msgid "Screen Reader"
+msgstr "Trình đọc màn hình"
-#: ../js/ui/widget.js:339
-msgid "Recent Documents"
-msgstr "Tài liệu gần đây"
+#: ../js/ui/status/accessibility.js:91
+msgid "Screen Keyboard"
+msgstr "Bàn phím màn hình"
-#: ../src/shell-global.c:976
+#: ../js/ui/status/accessibility.js:94
+msgid "Visual Alerts"
+msgstr "Cảnh báo trực quan"
+
+#: ../js/ui/status/accessibility.js:97
+msgid "Sticky Keys"
+msgstr "Phím dính"
+
+#: ../js/ui/status/accessibility.js:100
+msgid "Slow Keys"
+msgstr "Phím chậm"
+
+#: ../js/ui/status/accessibility.js:103
+msgid "Bounce Keys"
+msgstr "Phím dội"
+
+#: ../js/ui/status/accessibility.js:106
+msgid "Mouse Keys"
+msgstr "Phím chuột"
+
+#: ../js/ui/status/accessibility.js:110
+msgid "Universal Access Settings"
+msgstr "Thiết lập hỗ trợ truy cập"
+
+#: ../js/ui/status/accessibility.js:163
+msgid "High Contrast"
+msgstr "Tương phản cao"
+
+#: ../js/ui/status/accessibility.js:205
+msgid "Large Text"
+msgstr "Chữ lớn"
+
+#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:200
+msgid "Bluetooth"
+msgstr "Bluetooth"
+
+#: ../js/ui/status/bluetooth.js:55
+msgid "Visibility"
+msgstr "Tầm nhìn"
+
+#: ../js/ui/status/bluetooth.js:68
+msgid "Send Files to Device..."
+msgstr "Gửi tập tin đến thiết bị..."
+
+#: ../js/ui/status/bluetooth.js:71
+msgid "Setup a New Device..."
+msgstr "Thiết lập thiết bị mới..."
+
+#: ../js/ui/status/bluetooth.js:94
+msgid "Bluetooth Settings"
+msgstr "Thiết lập Bluetooth"
+
+#: ../js/ui/status/bluetooth.js:151
+#| msgid "Connect to..."
+msgid "Connection"
+msgstr "Kết nối"
+
+#: ../js/ui/status/bluetooth.js:187
+msgid "Send Files..."
+msgstr "Gửi tập tin..."
+
+#: ../js/ui/status/bluetooth.js:192
+msgid "Browse Files..."
+msgstr "Duyệt tập tin..."
+
+#: ../js/ui/status/bluetooth.js:201
+msgid "Error browsing device"
+msgstr "Lỗi duyệt tập tin"
+
+#: ../js/ui/status/bluetooth.js:202
+#, c-format
+msgid "The requested device cannot be browsed, error is '%s'"
+msgstr "Không thể duyệt thiết bị yêu cầu , lỗi là '%s'"
+
+#: ../js/ui/status/bluetooth.js:210
+msgid "Keyboard Settings"
+msgstr "Thiết lập bàn phím"
+
+#: ../js/ui/status/bluetooth.js:215
+msgid "Mouse Settings"
+msgstr "Thiết lập chuột"
+
+#: ../js/ui/status/bluetooth.js:222 ../js/ui/status/volume.js:62
+msgid "Sound Settings"
+msgstr "Thiết lập âm thanh"
+
+#: ../js/ui/status/bluetooth.js:293 ../js/ui/status/bluetooth.js:327
+#: ../js/ui/status/bluetooth.js:367 ../js/ui/status/bluetooth.js:400
+msgid "Bluetooth Agent"
+msgstr ""
+
+#: ../js/ui/status/bluetooth.js:328
+#, c-format
+msgid "Authorization request from %s"
+msgstr "Yêu cầu cấp quyền từ %s"
+
+#: ../js/ui/status/bluetooth.js:334
+#, c-format
+msgid "Device %s wants access to the service '%s'"
+msgstr "Thiết bị %s muốn truy cập dịch vụ '%s'"
+
+#: ../js/ui/status/bluetooth.js:336
+msgid "Always grant access"
+msgstr "Luôn cho phép"
+
+#: ../js/ui/status/bluetooth.js:337
+msgid "Grant this time only"
+msgstr "Chỉ cho phép lần này"
+
+#: ../js/ui/status/bluetooth.js:338
+msgid "Reject"
+msgstr "Từ chối"
+
+#: ../js/ui/status/bluetooth.js:368
+#, c-format
+msgid "Pairing confirmation for %s"
+msgstr "Xác nhận kết nối cho %s"
+
+#: ../js/ui/status/bluetooth.js:374 ../js/ui/status/bluetooth.js:408
+#, c-format
+msgid "Device %s wants to pair with this computer"
+msgstr "Thiết bị %s muốn kết nối với máy tính này"
+
+#: ../js/ui/status/bluetooth.js:375
+#, c-format
+msgid "Please confirm whether the PIN '%s' matches the one on the device."
+msgstr "Vui lòng xác nhận PIN '%s' khớp với số trên thiết bị."
+
+#: ../js/ui/status/bluetooth.js:377
+msgid "Matches"
+msgstr "Khớp"
+
+#: ../js/ui/status/bluetooth.js:378
+msgid "Does not match"
+msgstr "Không khớp"
+
+#: ../js/ui/status/bluetooth.js:401
+#, c-format
+msgid "Pairing request for %s"
+msgstr "Yêu cầu kết nối cho %s"
+
+#: ../js/ui/status/bluetooth.js:409
+msgid "Please enter the PIN mentioned on the device."
+msgstr "Vui lòng nhập số PIN ghi trên thiết bị."
+
+#: ../js/ui/status/bluetooth.js:425
+msgid "OK"
+msgstr "OK"
+
+#: ../js/ui/status/bluetooth.js:426
+msgid "Cancel"
+msgstr "Thôi"
+
+#: ../js/ui/status/power.js:85
+msgid "Power Settings"
+msgstr "Thiết lập năng lượng"
+
+#: ../js/ui/status/power.js:112
+#, c-format
+#| msgid "%d hour ago"
+#| msgid_plural "%d hours ago"
+msgid "%d hour remaining"
+msgid_plural "%d hours remaining"
+msgstr[0] "%d giờ còn lại"
+
+#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
+#: ../js/ui/status/power.js:115
+#, c-format
+msgid "%d %s %d %s remaining"
+msgstr "%d %s %d %s còn lại"
+
+#: ../js/ui/status/power.js:117
+msgid "hour"
+msgid_plural "hours"
+msgstr[0] "giờ"
+
+#: ../js/ui/status/power.js:117
+#| msgid "%d minute ago"
+#| msgid_plural "%d minutes ago"
+msgid "minute"
+msgid_plural "minutes"
+msgstr[0] "%d phút"
+
+#: ../js/ui/status/power.js:120
+#, c-format
+#| msgid "%d minute ago"
+#| msgid_plural "%d minutes ago"
+msgid "%d minute remaining"
+msgid_plural "%d minutes remaining"
+msgstr[0] "%d phút còn lại"
+
+#: ../js/ui/status/power.js:237
+msgid "AC adapter"
+msgstr "Bộ đổi điện AC"
+
+#: ../js/ui/status/power.js:239
+msgid "Laptop battery"
+msgstr "Pin laptop"
+
+#: ../js/ui/status/power.js:241
+msgid "UPS"
+msgstr "UPS"
+
+#: ../js/ui/status/power.js:243
+msgid "Monitor"
+msgstr "Màn hình"
+
+#: ../js/ui/status/power.js:245
+msgid "Mouse"
+msgstr "Chuột"
+
+#: ../js/ui/status/power.js:247
+msgid "Keyboard"
+msgstr "Bàn phím"
+
+#: ../js/ui/status/power.js:249
+msgid "PDA"
+msgstr "PDA"
+
+#: ../js/ui/status/power.js:251
+msgid "Cell phone"
+msgstr "Điện thoại cầm tay"
+
+#: ../js/ui/status/power.js:253
+msgid "Media player"
+msgstr "Máy phát"
+
+#: ../js/ui/status/power.js:255
+#| msgid "Enabled"
+msgid "Tablet"
+msgstr ""
+
+#: ../js/ui/status/power.js:257
+msgid "Computer"
+msgstr "Máy tính"
+
+#: ../js/ui/status/power.js:259 ../src/shell-app-system.c:1012
+msgid "Unknown"
+msgstr "Không biết"
+
+#: ../js/ui/status/volume.js:41
+msgid "Volume"
+msgstr "Âm lượng"
+
+#: ../js/ui/status/volume.js:54
+msgid "Microphone"
+msgstr "Micrô"
+
+#: ../js/ui/telepathyClient.js:560
+#, c-format
+msgid "%s is online."
+msgstr "%s trực tuyến."
+
+#: ../js/ui/telepathyClient.js:565
+#, c-format
+msgid "%s is offline."
+msgstr "%s ngoại tuyến."
+
+#: ../js/ui/telepathyClient.js:568
+#, c-format
+msgid "%s is away."
+msgstr "%s đi vắng."
+
+#: ../js/ui/telepathyClient.js:571
+#, c-format
+msgid "%s is busy."
+msgstr "%s bận."
+
+#. Translators: this is a time format string followed by a date.
+#. If applicable, replace %X with a strftime format valid for your
+#. locale, without seconds.
+#: ../js/ui/telepathyClient.js:664
+#, no-c-format
+msgid "Sent at %X on %A"
+msgstr "Đã gửi %X lúc %A"
+
+#: ../js/ui/viewSelector.js:26
+msgid "Search your computer"
+msgstr "Tìm trong máy"
+
+#: ../js/ui/windowAttentionHandler.js:43
+#, c-format
+msgid "%s has finished starting"
+msgstr "%s đã hoàn tất khởi chạy"
+
+#: ../js/ui/windowAttentionHandler.js:45
+#, c-format
+msgid "'%s' is ready"
+msgstr "'%s' đã sẵn sàng"
+
+#: ../js/ui/workspacesView.js:244
+msgid ""
+"Can't add a new workspace because maximum workspaces limit has been reached."
+msgstr "Không thể thêm vùng làm việc mới vì đã đạt giới hạn số vùng làm việc tối đa."
+
+#: ../js/ui/workspacesView.js:260
+msgid "Can't remove the first workspace."
+msgstr "Không thể bỏ vùng làm việc đầu tiên."
+
+#. translators:
+#. * The number of sound outputs on a particular device
+#: ../src/gvc/gvc-mixer-control.c:1094
+#, c-format
+msgid "%u Output"
+msgid_plural "%u Outputs"
+msgstr[0] "%u đầu ra"
+
+#. translators:
+#. * The number of sound inputs on a particular device
+#: ../src/gvc/gvc-mixer-control.c:1104
+#, c-format
+msgid "%u Input"
+msgid_plural "%u Inputs"
+msgstr[0] "%u đầu vào"
+
+#: ../src/gvc/gvc-mixer-control.c:1402
+msgid "System Sounds"
+msgstr "Âm thanh hệ thống"
+
+#: ../src/shell-global.c:1155
msgid "Less than a minute ago"
msgstr "Chưa đến một phút"
-#: ../src/shell-global.c:980
+#: ../src/shell-global.c:1159
#, c-format
msgid "%d minute ago"
msgid_plural "%d minutes ago"
msgstr[0] "%d phút trước"
-#: ../src/shell-global.c:985
+#: ../src/shell-global.c:1164
#, c-format
msgid "%d hour ago"
msgid_plural "%d hours ago"
msgstr[0] "%d giờ trước"
-#: ../src/shell-global.c:990
+#: ../src/shell-global.c:1169
#, c-format
msgid "%d day ago"
msgid_plural "%d days ago"
msgstr[0] "%d ngày trước"
-#: ../src/shell-global.c:995
+#: ../src/shell-global.c:1174
#, c-format
msgid "%d week ago"
msgid_plural "%d weeks ago"
msgstr[0] "%d tuần trước"
-#: ../src/shell-uri-util.c:89
+#: ../src/shell-util.c:89
msgid "Home Folder"
msgstr "Thư mục chính"
#. Translators: this is the same string as the one found in
#. * nautilus
-#: ../src/shell-uri-util.c:104
+#: ../src/shell-util.c:104
msgid "File System"
msgstr "Hệ tập tin"
-#: ../src/shell-uri-util.c:250
+#: ../src/shell-util.c:250
msgid "Search"
msgstr "Tìm"
@@ -244,7 +922,34 @@ msgstr "Tìm"
#. * example, "Trash: some-directory". It means that the
#. * directory called "some-directory" is in the trash.
#.
-#: ../src/shell-uri-util.c:300
+#: ../src/shell-util.c:300
#, c-format
msgid "%1$s: %2$s"
msgstr "%1$s: %2$s"
+
+#~ msgid "Drag here to add favorites"
+#~ msgstr "Kéo vào đây để thêm vào danh mục ưa thích"
+
+#~ msgid "Find..."
+#~ msgstr "Tìm"
+
+#~ msgid "Searching..."
+#~ msgstr "Đang tìm..."
+
+#~ msgid "No matching results."
+#~ msgstr "Không tìm thấy."
+
+#~ msgid "Invisible"
+#~ msgstr "Giấu mặt"
+
+#~ msgid "Account Information..."
+#~ msgstr "Thông tin tài khoản..."
+
+#~ msgid "Sidebar"
+#~ msgstr "Thanh bên"
+
+#~ msgid "%H:%M"
+#~ msgstr "%H:%M"
+
+#~ msgid "Recent Documents"
+#~ msgstr "Tài liệu gần đây"
diff --git a/po/zh_CN.po b/po/zh_CN.po
index 05c19dfd3..0d36398e4 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -7,14 +7,15 @@
# Jessica Ban , 2010.
# YunQiang Su , 2010.
# zhang ping , 2010.
+# 指冷玉笙寒 (dhyang) , 2010
#
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&component=general\n"
-"POT-Creation-Date: 2010-12-10 00:17+0000\n"
-"PO-Revision-Date: 2010-12-12 15:45+0800\n"
+"POT-Creation-Date: 2010-12-23 17:30+0000\n"
+"PO-Revision-Date: 2010-12-25 20:54+0800\n"
"Last-Translator: Aron Xu \n"
"Language-Team: Chinese (simplified) \n"
"MIME-Version: 1.0\n"
@@ -356,23 +357,28 @@ msgstr "_12 时格式"
msgid "_24 hour format"
msgstr "_24 小时格式"
-#: ../js/ui/appDisplay.js:215
+#. Translators: Filter to display all applications
+#: ../js/ui/appDisplay.js:155
+msgid "All"
+msgstr "全部"
+
+#: ../js/ui/appDisplay.js:236
msgid "APPLICATIONS"
msgstr "应用程序"
-#: ../js/ui/appDisplay.js:245
+#: ../js/ui/appDisplay.js:266
msgid "PREFERENCES"
msgstr "首选项"
-#: ../js/ui/appDisplay.js:542
+#: ../js/ui/appDisplay.js:563
msgid "New Window"
msgstr "新窗口"
-#: ../js/ui/appDisplay.js:546
+#: ../js/ui/appDisplay.js:567
msgid "Remove from Favorites"
msgstr "从收藏夹中移除"
-#: ../js/ui/appDisplay.js:547
+#: ../js/ui/appDisplay.js:568
msgid "Add to Favorites"
msgstr "添加到收藏夹"
@@ -424,63 +430,71 @@ msgstr "查看源"
msgid "Web Page"
msgstr "网页"
-#: ../js/ui/overview.js:112
+#: ../js/ui/overview.js:96
msgid "Undo"
msgstr "撤销"
+#: ../js/ui/overview.js:158
+msgid "Windows"
+msgstr "窗口"
+
+#: ../js/ui/overview.js:161
+msgid "Applications"
+msgstr "应用程序"
+
#. TODO - _quit() doesn't really work on apps in state STARTING yet
-#: ../js/ui/panel.js:470
+#: ../js/ui/panel.js:474
#, c-format
msgid "Quit %s"
msgstr "退出 %s"
-#: ../js/ui/panel.js:495
+#: ../js/ui/panel.js:499
msgid "Preferences"
msgstr "首选项"
#. Translators: This is the time format with date used
#. in 24-hour mode.
-#: ../js/ui/panel.js:581
+#: ../js/ui/panel.js:585
msgid "%a %b %e, %R:%S"
msgstr "%A %b %e, %R:%S"
-#: ../js/ui/panel.js:582
+#: ../js/ui/panel.js:586
msgid "%a %b %e, %R"
msgstr "%A %m月%d日 %R"
#. Translators: This is the time format without date used
#. in 24-hour mode.
-#: ../js/ui/panel.js:586
+#: ../js/ui/panel.js:590
msgid "%a %R:%S"
msgstr "%A %R:%S"
-#: ../js/ui/panel.js:587
+#: ../js/ui/panel.js:591
msgid "%a %R"
msgstr "%A %R"
#. Translators: This is a time format with date used
#. for AM/PM.
-#: ../js/ui/panel.js:594
+#: ../js/ui/panel.js:598
msgid "%a %b %e, %l:%M:%S %p"
msgstr "%A %m月%d日 %p%I:%M:%S"
-#: ../js/ui/panel.js:595
+#: ../js/ui/panel.js:599
msgid "%a %b %e, %l:%M %p"
msgstr "%A %m月%d日 %p%I:%M"
#. Translators: This is a time format without date used
#. for AM/PM.
-#: ../js/ui/panel.js:599
+#: ../js/ui/panel.js:603
msgid "%a %l:%M:%S %p"
msgstr "%A %p%I:%M:%S"
-#: ../js/ui/panel.js:600
+#: ../js/ui/panel.js:604
msgid "%a %l:%M %p"
msgstr "%a %l:%M %p"
#. Button on the left side of the panel.
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
-#: ../js/ui/panel.js:745
+#: ../js/ui/panel.js:749
msgid "Activities"
msgstr "活动"
@@ -599,87 +613,203 @@ msgstr "高对比度"
msgid "Large Text"
msgstr "大号文本"
-#: ../js/ui/status/power.js:87
-msgid "What's using power..."
-msgstr "哪些设备在用电..."
+#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:234
+msgid "Bluetooth"
+msgstr "蓝牙"
-#: ../js/ui/status/power.js:90
+#: ../js/ui/status/bluetooth.js:55
+msgid "Visibility"
+msgstr "可见性"
+
+#: ../js/ui/status/bluetooth.js:69
+msgid "Send Files to Device..."
+msgstr "发送文件到设备..."
+
+#: ../js/ui/status/bluetooth.js:70
+msgid "Setup a New Device..."
+msgstr "安装新设备..."
+
+#: ../js/ui/status/bluetooth.js:94
+msgid "Bluetooth Settings"
+msgstr "蓝牙设置"
+
+#: ../js/ui/status/bluetooth.js:185
+msgid "Connection"
+msgstr "连接"
+
+#: ../js/ui/status/bluetooth.js:221
+msgid "Send Files..."
+msgstr "发送文件..."
+
+#: ../js/ui/status/bluetooth.js:226
+msgid "Browse Files..."
+msgstr "浏览文件..."
+
+#: ../js/ui/status/bluetooth.js:235
+msgid "Error browsing device"
+msgstr "浏览设备出错"
+
+#: ../js/ui/status/bluetooth.js:236
+#, c-format
+msgid "The requested device cannot be browsed, error is '%s'"
+msgstr "无法浏览请求的设备,错误为 %s"
+
+#: ../js/ui/status/bluetooth.js:244
+msgid "Keyboard Settings"
+msgstr "键盘设置"
+
+#: ../js/ui/status/bluetooth.js:249
+msgid "Mouse Settings"
+msgstr "鼠标设置"
+
+#: ../js/ui/status/bluetooth.js:256 ../js/ui/status/volume.js:62
+msgid "Sound Settings"
+msgstr "声音设置"
+
+#: ../js/ui/status/bluetooth.js:327 ../js/ui/status/bluetooth.js:361
+#: ../js/ui/status/bluetooth.js:401 ../js/ui/status/bluetooth.js:434
+msgid "Bluetooth Agent"
+msgstr "蓝牙助手"
+
+#: ../js/ui/status/bluetooth.js:362
+#, c-format
+msgid "Authorization request from %s"
+msgstr "来自 %s 的认证请求"
+
+#: ../js/ui/status/bluetooth.js:368
+#, c-format
+msgid "Device %s wants access to the service '%s'"
+msgstr "设备 %s 希望访问 %s 服务"
+
+#: ../js/ui/status/bluetooth.js:370
+msgid "Always grant access"
+msgstr "始终允许"
+
+#: ../js/ui/status/bluetooth.js:371
+msgid "Grant this time only"
+msgstr "允许一次"
+
+#: ../js/ui/status/bluetooth.js:372
+msgid "Reject"
+msgstr "拒绝"
+
+#: ../js/ui/status/bluetooth.js:402
+#, c-format
+msgid "Pairing confirmation for %s"
+msgstr "%s 的配对确认"
+
+#: ../js/ui/status/bluetooth.js:408 ../js/ui/status/bluetooth.js:442
+#, c-format
+msgid "Device %s wants to pair with this computer"
+msgstr "设备 %s 希望与此电脑配对"
+
+#: ../js/ui/status/bluetooth.js:409
+#, c-format
+msgid "Please confirm whether the PIN '%s' matches the one on the device."
+msgstr "请确认 PIN 码 %s 和要配对的设备是否相同。"
+
+#: ../js/ui/status/bluetooth.js:411
+msgid "Matches"
+msgstr "相同"
+
+#: ../js/ui/status/bluetooth.js:412
+msgid "Does not match"
+msgstr "不同"
+
+#: ../js/ui/status/bluetooth.js:435
+#, c-format
+msgid "Pairing request for %s"
+msgstr "%s 的配对请求"
+
+#: ../js/ui/status/bluetooth.js:443
+msgid "Please enter the PIN mentioned on the device."
+msgstr "请输入设备上的 PIN 码。"
+
+#: ../js/ui/status/bluetooth.js:459
+msgid "OK"
+msgstr "确定"
+
+#: ../js/ui/status/bluetooth.js:460
+msgid "Cancel"
+msgstr "取消"
+
+#: ../js/ui/status/power.js:85
msgid "Power Settings"
msgstr "电源设置"
-#: ../js/ui/status/power.js:117
+#: ../js/ui/status/power.js:112
#, c-format
msgid "%d hour remaining"
msgid_plural "%d hours remaining"
msgstr[0] "剩余 %d 小时"
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
-#: ../js/ui/status/power.js:120
+#: ../js/ui/status/power.js:115
#, c-format
msgid "%d %s %d %s remaining"
msgstr "剩余 %d %s %d %s"
-#: ../js/ui/status/power.js:122
+#: ../js/ui/status/power.js:117
msgid "hour"
msgid_plural "hours"
msgstr[0] "小时"
-#: ../js/ui/status/power.js:122
+#: ../js/ui/status/power.js:117
msgid "minute"
msgid_plural "minutes"
msgstr[0] "分钟"
-#: ../js/ui/status/power.js:125
+#: ../js/ui/status/power.js:120
#, c-format
msgid "%d minute remaining"
msgid_plural "%d minutes remaining"
msgstr[0] "剩余 %d 分钟"
-#: ../js/ui/status/power.js:244
+#: ../js/ui/status/power.js:237
msgid "AC adapter"
msgstr "AC 适配器"
-#: ../js/ui/status/power.js:246
+#: ../js/ui/status/power.js:239
msgid "Laptop battery"
msgstr "笔记本电池"
-#: ../js/ui/status/power.js:248
+#: ../js/ui/status/power.js:241
msgid "UPS"
msgstr "UPS"
-#: ../js/ui/status/power.js:250
+#: ../js/ui/status/power.js:243
msgid "Monitor"
msgstr "显示器"
-#: ../js/ui/status/power.js:252
+#: ../js/ui/status/power.js:245
msgid "Mouse"
msgstr "鼠标"
-#: ../js/ui/status/power.js:254
+#: ../js/ui/status/power.js:247
msgid "Keyboard"
msgstr "键盘"
-#: ../js/ui/status/power.js:256
+#: ../js/ui/status/power.js:249
msgid "PDA"
msgstr "PDA"
-#: ../js/ui/status/power.js:258
+#: ../js/ui/status/power.js:251
msgid "Cell phone"
msgstr "手机"
-#: ../js/ui/status/power.js:260
+#: ../js/ui/status/power.js:253
msgid "Media player"
msgstr "媒体播放器"
-#: ../js/ui/status/power.js:262
+#: ../js/ui/status/power.js:255
msgid "Tablet"
msgstr "触摸板"
-#: ../js/ui/status/power.js:264
+#: ../js/ui/status/power.js:257
msgid "Computer"
msgstr "计算机"
-#: ../js/ui/status/power.js:266 ../src/shell-app-system.c:1012
+#: ../js/ui/status/power.js:259 ../src/shell-app-system.c:1012
msgid "Unknown"
msgstr "未知"
@@ -691,9 +821,33 @@ msgstr "音量"
msgid "Microphone"
msgstr "麦克风"
-#: ../js/ui/status/volume.js:62
-msgid "Sound Settings"
-msgstr "声音设置"
+#: ../js/ui/telepathyClient.js:560
+#, c-format
+msgid "%s is online."
+msgstr "%s 在线。"
+
+#: ../js/ui/telepathyClient.js:565
+#, c-format
+msgid "%s is offline."
+msgstr "%s 离线。"
+
+#: ../js/ui/telepathyClient.js:568
+#, c-format
+msgid "%s is away."
+msgstr "%s 离开。"
+
+#: ../js/ui/telepathyClient.js:571
+#, c-format
+msgid "%s is busy."
+msgstr "%s 忙碌。"
+
+#. Translators: this is a time format string followed by a date.
+#. If applicable, replace %X with a strftime format valid for your
+#. locale, without seconds.
+#: ../js/ui/telepathyClient.js:665
+#, no-c-format
+msgid "Sent at %X on %A"
+msgstr "发送于 %X on %A"
#: ../js/ui/viewSelector.js:26
msgid "Search your computer"
@@ -738,29 +892,29 @@ msgstr[0] "%u 个输入"
msgid "System Sounds"
msgstr "系统声音"
-#: ../src/shell-global.c:1155
+#: ../src/shell-global.c:1156
msgid "Less than a minute ago"
msgstr "少于一分钟前"
-#: ../src/shell-global.c:1159
+#: ../src/shell-global.c:1160
#, c-format
msgid "%d minute ago"
msgid_plural "%d minutes ago"
msgstr[0] "%d 分钟前"
-#: ../src/shell-global.c:1164
+#: ../src/shell-global.c:1165
#, c-format
msgid "%d hour ago"
msgid_plural "%d hours ago"
msgstr[0] "%d 小时前"
-#: ../src/shell-global.c:1169
+#: ../src/shell-global.c:1170
#, c-format
msgid "%d day ago"
msgid_plural "%d days ago"
msgstr[0] "%d 天前"
-#: ../src/shell-global.c:1174
+#: ../src/shell-global.c:1175
#, c-format
msgid "%d week ago"
msgid_plural "%d weeks ago"
@@ -790,6 +944,9 @@ msgstr "搜索"
msgid "%1$s: %2$s"
msgstr "%1$s: %2$s"
+#~ msgid "What's using power..."
+#~ msgstr "哪些设备在用电..."
+
#~ msgid "Overview workspace view mode"
#~ msgstr "工作区视图模式的总览"
@@ -830,9 +987,6 @@ msgstr "%1$s: %2$s"
#~ msgid "%H:%M"
#~ msgstr "%H:%M"
-#~ msgid "Applications"
-#~ msgstr "应用程序"
-
#~ msgid "Recent Documents"
#~ msgstr "最近文档"
diff --git a/po/zh_HK.po b/po/zh_HK.po
index 579f283c3..9f04787db 100644
--- a/po/zh_HK.po
+++ b/po/zh_HK.po
@@ -2,15 +2,17 @@
# Copyright (C) 2010 gnome-shell's COPYRIGHT HOLDER
# This file is distributed under the same license as the gnome-shell package.
# Chao-Hsiung Liao , 2010.
+# Wei-Lun Chao , 2010.
#
msgid ""
msgstr ""
-"Project-Id-Version: gnome-shell 2.31.5\n"
+"Project-Id-Version: gnome-shell 2.91.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-21 20:42+0800\n"
-"PO-Revision-Date: 2010-08-21 20:43+0800\n"
+"POT-Creation-Date: 2011-01-07 09:43+0800\n"
+"PO-Revision-Date: 2011-01-07 09:44+0800\n"
"Last-Translator: Chao-Hsiung Liao \n"
"Language-Team: Chinese (Hong Kong) \n"
+"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -24,14 +26,6 @@ msgstr "GNOME Shell"
msgid "Window management and application launching"
msgstr "視窗管理與應用程式的執行"
-#: ../data/gnome-shell-clock-preferences.desktop.in.in.h:1
-msgid "Clock"
-msgstr "時鐘"
-
-#: ../data/gnome-shell-clock-preferences.desktop.in.in.h:2
-msgid "Customize the panel clock"
-msgstr "自選面板時鐘"
-
#: ../data/org.gnome.shell.gschema.xml.in.h:1
msgid ""
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
@@ -39,60 +33,50 @@ msgid ""
msgstr "允許使用 Alt-F2 對話盒存取內部除錯和監控工具。"
#: ../data/org.gnome.shell.gschema.xml.in.h:2
-msgid "Custom format of the clock"
-msgstr "自選時鐘的格式"
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:3
msgid "Enable internal tools useful for developers and testers from Alt-F2"
msgstr "啟用讓開發者與測試者能以 Alt-F2 使用好用的內部工具"
-#: ../data/org.gnome.shell.gschema.xml.in.h:4
+#: ../data/org.gnome.shell.gschema.xml.in.h:3
msgid "File extension used for storing the screencast"
msgstr "用來儲存畫面廣播的延伸檔名"
-#: ../data/org.gnome.shell.gschema.xml.in.h:5
+#: ../data/org.gnome.shell.gschema.xml.in.h:4
msgid "Framerate used for recording screencasts."
msgstr "錄製畫面廣播的框架率。"
-#: ../data/org.gnome.shell.gschema.xml.in.h:6
+#: ../data/org.gnome.shell.gschema.xml.in.h:5
msgid ""
"GNOME Shell extensions have a uuid property; this key lists extensions which "
"should not be loaded."
msgstr "GNOME Shell 擴充功能有 uuid 屬性;這個設定鍵列出了不應載入的擴充功能。"
-#: ../data/org.gnome.shell.gschema.xml.in.h:7
+#: ../data/org.gnome.shell.gschema.xml.in.h:6
msgid "History for command (Alt-F2) dialog"
msgstr "指令 (Alt-F2) 對話盒歷史紀錄"
-#: ../data/org.gnome.shell.gschema.xml.in.h:8
-msgid "Hour format"
-msgstr "小時格式"
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:9
-msgid ""
-"If true and format is either \"12-hour\" or \"24-hour\", display date in the "
-"clock, in addition to time."
+#: ../data/org.gnome.shell.gschema.xml.in.h:7
+#, fuzzy
+#| msgid ""
+#| "If true and format is either \"12-hour\" or \"24-hour\", display date in "
+#| "the clock, in addition to time."
+msgid "If true, display date in the clock, in addition to time."
msgstr "如果設為 true 且格式為「12-小時」或「24-小時」,在時鐘裏顯示日期,加在時刻後面。"
-#: ../data/org.gnome.shell.gschema.xml.in.h:10
-msgid ""
-"If true and format is either \"12-hour\" or \"24-hour\", display seconds in "
-"time."
-msgstr "如果設為 true 且格式為「12-小時」或「24-小時」,在時刻裏顯示秒鐘。"
+#: ../data/org.gnome.shell.gschema.xml.in.h:8
+#, fuzzy
+#| msgid "If true, display the ISO week date in the calendar."
+msgid "If true, display seconds in time."
+msgstr "如果設為 true,在日曆中顯示 ISO 週數。"
-#: ../data/org.gnome.shell.gschema.xml.in.h:11
+#: ../data/org.gnome.shell.gschema.xml.in.h:9
msgid "If true, display the ISO week date in the calendar."
msgstr "如果設為 true,在日曆中顯示 ISO 週數。"
-#: ../data/org.gnome.shell.gschema.xml.in.h:12
+#: ../data/org.gnome.shell.gschema.xml.in.h:10
msgid "List of desktop file IDs for favorite applications"
msgstr "喜好的應用程式桌面檔案 ID 清單"
-#: ../data/org.gnome.shell.gschema.xml.in.h:13
-msgid "Overview workspace view mode"
-msgstr "概覽工作區檢視模式"
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:14
+#: ../data/org.gnome.shell.gschema.xml.in.h:11
msgid ""
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
"used for gst-launch. The pipeline should have an unconnected sink pad where "
@@ -104,48 +88,42 @@ msgid ""
"'videorate ! theoraenc ! oggmux' and records to Ogg Theora."
msgstr ""
-#: ../data/org.gnome.shell.gschema.xml.in.h:15
+#: ../data/org.gnome.shell.gschema.xml.in.h:12
msgid "Show date in clock"
msgstr "在時鐘內顯示日期"
-#: ../data/org.gnome.shell.gschema.xml.in.h:16
+#: ../data/org.gnome.shell.gschema.xml.in.h:13
msgid "Show the week date in the calendar"
msgstr "在日曆中顯示週數"
-#: ../data/org.gnome.shell.gschema.xml.in.h:17
+#: ../data/org.gnome.shell.gschema.xml.in.h:14
msgid "Show time with seconds"
msgstr "在時刻中顯示秒數"
-#: ../data/org.gnome.shell.gschema.xml.in.h:18
+#: ../data/org.gnome.shell.gschema.xml.in.h:15
msgid ""
"The applications corresponding to these identifiers will be displayed in the "
"favorites area."
msgstr "對應這些辨別碼的應用程式會顯示在喜好區域。"
-#: ../data/org.gnome.shell.gschema.xml.in.h:19
+#: ../data/org.gnome.shell.gschema.xml.in.h:16
msgid ""
"The filename for recorded screencasts will be a unique filename based on the "
"current date, and use this extension. It should be changed when recording to "
"a different container format."
msgstr "錄製好的畫面廣播檔案名稱會以目前的時刻作為獨特的檔名,並使用這個延伸檔名。當錄製為不同的容器格式時應該做適當更改。"
-#: ../data/org.gnome.shell.gschema.xml.in.h:20
+#: ../data/org.gnome.shell.gschema.xml.in.h:17
msgid ""
"The framerate of the resulting screencast recordered by GNOME Shell's "
"screencast recorder in frames-per-second."
msgstr "由 GNOME Shell 的畫面廣播錄製程式所錄製成果的框架率,以 frames-per-second 計。"
-#: ../data/org.gnome.shell.gschema.xml.in.h:21
+#: ../data/org.gnome.shell.gschema.xml.in.h:18
msgid "The gstreamer pipeline used to encode the screencast"
msgstr "用來編碼畫面廣播的 gstreamer 管線"
-#: ../data/org.gnome.shell.gschema.xml.in.h:22
-msgid ""
-"The selected workspace view mode in the overview. Supported values are "
-"\"single\" and \"grid\"."
-msgstr "在概覽中選取的工作區檢視模式。支援的數值有「single」(單一)和「grid」(格線)。"
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:23
+#: ../data/org.gnome.shell.gschema.xml.in.h:19
msgid ""
"The shell normally monitors active applications in order to present the most "
"used ones (e.g. in launchers). While this data will be kept private, you may "
@@ -153,204 +131,275 @@ msgid ""
"remove already saved data."
msgstr "這個 shell 通常會監控使用中的應用程式以便能顯示出最常使用的(例如,在程式執行器中)。雖然這個資料會保持隱密,但是你可能會基於私隱的理由想要停用這個功能。請注意這麼做並不會移除已儲存的資料。"
-#: ../data/org.gnome.shell.gschema.xml.in.h:24
-msgid ""
-"This key specifies the format used by the panel clock when the format key is "
-"set to \"custom\". You can use conversion specifiers understood by strftime"
-"() to obtain a specific format. See the strftime() manual for more "
-"information."
-msgstr "這個設定鍵是在面板時鐘的「format」設定鍵被設為「custom」時使用的自選格式。你可以用可被 strftime() 理解的轉換規範來取得所指定的格式。請查閱 strftime() 手冊以獲取更多資訊。"
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:25
-msgid ""
-"This key specifies the hour format used by the panel clock. Possible values "
-"are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to \"unix\", "
-"the clock will display time in seconds since Epoch, i.e. 1970-01-01. If set "
-"to \"custom\", the clock will display time according to the format specified "
-"in the custom_format key. Note that if set to either \"unix\" or \"custom\", "
-"the show_date and show_seconds keys are ignored."
-msgstr ""
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:26
+#: ../data/org.gnome.shell.gschema.xml.in.h:20
msgid "Uuids of extensions to disable"
msgstr "要停用的延伸檔名 Uuid"
-#: ../data/org.gnome.shell.gschema.xml.in.h:27
+#: ../data/org.gnome.shell.gschema.xml.in.h:21
msgid "Whether to collect stats about applications usage"
msgstr "是否收集關於應用程式使用率的狀態"
-#: ../data/clock-preferences.ui.h:1
-msgid "Clock Format"
-msgstr "時鐘格式"
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:1
+msgid "Clip the crosshairs at the center"
+msgstr ""
-#: ../data/clock-preferences.ui.h:2
-msgid "Clock Preferences"
-msgstr "時鐘偏好設定"
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:2
+msgid "Color of the crosshairs"
+msgstr "十字準星的顏色"
-#: ../data/clock-preferences.ui.h:3
-msgid "Panel Display"
-msgstr "面板顯示"
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:3
+msgid ""
+"Determines the length of the vertical and horizontal lines that make up the "
+"crosshairs."
+msgstr "決定組成十字準星的垂直和水平線條的長度。"
-#: ../data/clock-preferences.ui.h:4
-msgid "Show seco_nds"
-msgstr "顯示秒數(_N)"
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:4
+msgid ""
+"Determines the position of the magnified mouse image within the magnified "
+"view and how it reacts to system mouse movement. The values are - none: no "
+"mouse tracking; - centered: the mouse image is displayed at the center of "
+"the zoom region (which also represents the point under the system mouse) and "
+"the magnified contents are scrolled as the system mouse moves; - "
+"proportional: the position of the magnified mouse in the zoom region is "
+"proportionally the same as the position of the system mouse on screen; - "
+"push: when the magnified mouse intersects a boundary of the zoom region, the "
+"contents are scrolled into view."
+msgstr ""
-#: ../data/clock-preferences.ui.h:5
-msgid "Show the _date"
-msgstr "顯示日期(_D)"
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:5
+msgid ""
+"Determines the transparency of the crosshairs, from fully opaque to fully "
+"transparent."
+msgstr "決定十字準星的透明度,從完全不透明到完全透明。"
-#: ../data/clock-preferences.ui.h:6
-msgid "_12 hour format"
-msgstr "_12 小時制"
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:6
+msgid ""
+"Determines whether the crosshairs intersect the magnified mouse sprite, or "
+"are clipped such that the ends of the horizontal and vertical lines surround "
+"the mouse image."
+msgstr ""
-#: ../data/clock-preferences.ui.h:7
-msgid "_24 hour format"
-msgstr "_24 小時制"
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:7
+#, fuzzy
+#| msgid "Enabled"
+msgid "Enable lens mode"
+msgstr "啟用觸控螢幕模式"
-#. **** Applications ****
-#: ../js/ui/appDisplay.js:384 ../js/ui/dash.js:778
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:8
+msgid ""
+"Enables/disables display of crosshairs centered on the magnified mouse "
+"sprite."
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:9
+msgid ""
+"For centered mouse tracking, when the system pointer is at or near the edge "
+"of the screen, the magnified contents continue to scroll such that the "
+"screen edge moves into the magnified view."
+msgstr "對於置中式的滑鼠追蹤,當系統指標位於或接近螢幕的邊緣時,放大的內容也會持續捲動,讓螢幕的邊緣移進放大的檢視範圍。"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:10
+msgid "Length of the crosshairs"
+msgstr "十字準星長度"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:11
+msgid "Magnification factor"
+msgstr "放大率"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:12
+msgid "Mouse Tracking Mode"
+msgstr "滑鼠追蹤模式"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:13
+msgid "Opacity of the crosshairs"
+msgstr "十字準星透明度"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:14
+msgid "Screen position"
+msgstr "螢幕位置"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:15
+msgid "Scroll magnified contents beyond the edges of the desktop"
+msgstr "在桌面邊緣時捲動放大的內容"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:16
+msgid "Show or hide crosshairs"
+msgstr "顯示或隱藏十字準星"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:17
+msgid "Show or hide the magnifier"
+msgstr "顯示或隱藏放大鏡"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:18
+msgid "Show or hide the magnifier and all of its zoom regions."
+msgstr "顯示或隱藏放大鏡和所有被它放大的區域。"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:19
+msgid ""
+"The color of the the vertical and horizontal lines that make up the "
+"crosshairs."
+msgstr "組成十字準星的垂直和水平線條的顏色。"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:20
+msgid ""
+"The magnified view either fills the entire screen, or occupies the top-half, "
+"bottom-half, left-half, or right-half of the screen."
+msgstr "放大的檢視要佔據整個螢幕,或是只佔螢幕的上半、下半、左半或右半邊。"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:21
+msgid ""
+"The power of the magnification. A value of 1.0 means no magnification. A "
+"value of 2.0 doubles the size."
+msgstr "放大的倍數。數值 1.0 表示不放大。數值 2.0 為放大兩倍。"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:22
+msgid "Thickness of the crosshairs"
+msgstr "十字準星厚度"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:23
+msgid ""
+"Whether the magnified view should be centered over the location of the "
+"system mouse and move with it."
+msgstr "放大的檢視是否應以系統滑鼠的位置為中心點並隨滑鼠移動。"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:24
+msgid "Width of the vertical and horizontal lines that make up the crosshairs."
+msgstr "組成十字準星的垂直和水平線條的闊度。"
+
+#. Translators: Filter to display all applications
+#: ../js/ui/appDisplay.js:155
+msgid "All"
+msgstr "全部"
+
+#: ../js/ui/appDisplay.js:236
msgid "APPLICATIONS"
msgstr "程式集"
-#: ../js/ui/appDisplay.js:416
+#: ../js/ui/appDisplay.js:266
msgid "PREFERENCES"
msgstr "偏好設定"
-#: ../js/ui/appDisplay.js:721
+#: ../js/ui/appDisplay.js:563
msgid "New Window"
msgstr "新視窗"
-#: ../js/ui/appDisplay.js:725
+#: ../js/ui/appDisplay.js:567
msgid "Remove from Favorites"
msgstr "自喜好中移除"
-#: ../js/ui/appDisplay.js:726
+#: ../js/ui/appDisplay.js:568
msgid "Add to Favorites"
msgstr "加入喜好"
-#: ../js/ui/appDisplay.js:1033
-msgid "Drag here to add favorites"
-msgstr "拖放到這裏加入喜好"
-
-#: ../js/ui/appFavorites.js:88
+#: ../js/ui/appFavorites.js:91
#, c-format
msgid "%s has been added to your favorites."
msgstr "%s 已加入你的喜好中。"
-#: ../js/ui/appFavorites.js:107
+#: ../js/ui/appFavorites.js:122
#, c-format
msgid "%s has been removed from your favorites."
msgstr "%s 已經從你的喜好中移除。"
-#: ../js/ui/dash.js:142
-msgid "Find"
-msgstr "尋找"
+#: ../js/ui/dash.js:27
+msgid "Remove"
+msgstr "移除"
-#: ../js/ui/dash.js:473
-msgid "Searching..."
-msgstr "搜尋中..."
-
-#: ../js/ui/dash.js:487
-msgid "No matching results."
-msgstr "沒有相符的結果。"
-
-#. **** Places ****
-#. Translators: This is in the sense of locations for documents,
-#. network locations, etc.
-#: ../js/ui/dash.js:797 ../js/ui/placeDisplay.js:554
-msgid "PLACES & DEVICES"
-msgstr "位置 & 裝置"
-
-#. **** Documents ****
-#: ../js/ui/dash.js:804 ../js/ui/docDisplay.js:494
+#: ../js/ui/docDisplay.js:494
msgid "RECENT ITEMS"
msgstr "最近使用項目"
-#: ../js/ui/lookingGlass.js:471
+#: ../js/ui/lookingGlass.js:552
msgid "No extensions installed"
msgstr "沒有安裝擴充功能"
-#: ../js/ui/lookingGlass.js:508
+#: ../js/ui/lookingGlass.js:589
msgid "Enabled"
msgstr "已啟用"
-#: ../js/ui/lookingGlass.js:510
+#. translators:
+#. * The device has been disabled
+#: ../js/ui/lookingGlass.js:591 ../src/gvc/gvc-mixer-control.c:1087
msgid "Disabled"
msgstr "已停用"
-#: ../js/ui/lookingGlass.js:512
+#: ../js/ui/lookingGlass.js:593
msgid "Error"
msgstr "錯誤"
-#: ../js/ui/lookingGlass.js:514
+#: ../js/ui/lookingGlass.js:595
msgid "Out of date"
msgstr "過期"
-#: ../js/ui/lookingGlass.js:539
+#: ../js/ui/lookingGlass.js:620
msgid "View Source"
msgstr "檢示來源"
-#: ../js/ui/lookingGlass.js:545
+#: ../js/ui/lookingGlass.js:626
msgid "Web Page"
msgstr "網頁"
-#: ../js/ui/overview.js:160
+#: ../js/ui/overview.js:101
msgid "Undo"
msgstr "復原"
+#: ../js/ui/overview.js:166
+msgid "Windows"
+msgstr "視窗"
+
+#: ../js/ui/overview.js:169
+msgid "Applications"
+msgstr "應用程式"
+
#. TODO - _quit() doesn't really work on apps in state STARTING yet
-#: ../js/ui/panel.js:473
+#: ../js/ui/panel.js:478
#, c-format
msgid "Quit %s"
msgstr "結束 %s"
-#: ../js/ui/panel.js:498
-msgid "Preferences"
-msgstr "偏好設定"
-
#. Translators: This is the time format with date used
#. in 24-hour mode.
-#: ../js/ui/panel.js:584
+#: ../js/ui/panel.js:563
msgid "%a %b %e, %R:%S"
msgstr "%b %e %a, %R:%S"
-#: ../js/ui/panel.js:585
+#: ../js/ui/panel.js:564
msgid "%a %b %e, %R"
msgstr "%b %e %a, %R"
#. Translators: This is the time format without date used
#. in 24-hour mode.
-#: ../js/ui/panel.js:589
+#: ../js/ui/panel.js:568
msgid "%a %R:%S"
msgstr "%a %R:%S"
-#: ../js/ui/panel.js:590
+#: ../js/ui/panel.js:569
msgid "%a %R"
msgstr "%a %R"
#. Translators: This is a time format with date used
#. for AM/PM.
-#: ../js/ui/panel.js:597
+#: ../js/ui/panel.js:576
msgid "%a %b %e, %l:%M:%S %p"
msgstr "%b %e %a, %p %l:%M:%S"
-#: ../js/ui/panel.js:598
+#: ../js/ui/panel.js:577
msgid "%a %b %e, %l:%M %p"
msgstr "%b %e %a, %p %l:%M"
#. Translators: This is a time format without date used
#. for AM/PM.
-#: ../js/ui/panel.js:602
+#: ../js/ui/panel.js:581
msgid "%a %l:%M:%S %p"
msgstr "%a %p %l:%M:%S"
-#: ../js/ui/panel.js:603
+#: ../js/ui/panel.js:582
msgid "%a %l:%M %p"
msgstr "%a %p %l:%M"
#. Button on the left side of the panel.
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
-#: ../js/ui/panel.js:748
+#: ../js/ui/panel.js:727
msgid "Activities"
msgstr "概覽 "
@@ -365,19 +414,21 @@ msgstr "重試"
#: ../js/ui/placeDisplay.js:159
msgid "Connect to..."
-msgstr "連接到..."
+msgstr "連接到…"
-#. Translators: the "ON" and "OFF" strings are used in the
-#. toggle switches in the status area menus, and must be SHORT.
-#. If you don't have suitable short words, consider initials,
-#. "0"/"1", "⚪"/"⚫", etc.
-#: ../js/ui/popupMenu.js:30 ../js/ui/popupMenu.js:40
-msgid "ON"
-msgstr "開"
+#: ../js/ui/placeDisplay.js:558
+msgid "PLACES & DEVICES"
+msgstr "位置 & 裝置"
-#: ../js/ui/popupMenu.js:31 ../js/ui/popupMenu.js:45
-msgid "OFF"
-msgstr "關"
+#. Translators: this MUST be either "toggle-switch-us"
+#. (for toggle switches containing the English words
+#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
+#. switches containing "◯" and "|"). Other values will
+#. simply result in invisible toggle switches.
+#: ../js/ui/popupMenu.js:33
+#, fuzzy
+msgid "toggle-switch-us"
+msgstr "美式 84 鍵鍵盤"
#: ../js/ui/runDialog.js:233
msgid "Please enter a command:"
@@ -388,100 +439,404 @@ msgstr "請輸入指令:"
msgid "Execution of '%s' failed:"
msgstr "執行「%s」失敗:"
-#: ../js/ui/statusMenu.js:91
+#: ../js/ui/statusMenu.js:101
msgid "Available"
msgstr "可用"
-#: ../js/ui/statusMenu.js:95
+#: ../js/ui/statusMenu.js:106
msgid "Busy"
msgstr "忙碌"
-#: ../js/ui/statusMenu.js:99
-msgid "Invisible"
-msgstr "隱形"
+#: ../js/ui/statusMenu.js:114
+msgid "My Account"
+msgstr "我的帳號"
-#: ../js/ui/statusMenu.js:106
-msgid "Account Information..."
-msgstr "帳號資訊..."
+#: ../js/ui/statusMenu.js:118
+msgid "System Settings"
+msgstr "系統設定值"
-#: ../js/ui/statusMenu.js:110
-msgid "System Preferences..."
-msgstr "系統偏好設定..."
-
-#: ../js/ui/statusMenu.js:117
+#: ../js/ui/statusMenu.js:125
msgid "Lock Screen"
msgstr "鎖定畫面"
-#: ../js/ui/statusMenu.js:121
+#: ../js/ui/statusMenu.js:129
msgid "Switch User"
msgstr "切換使用者"
-#: ../js/ui/statusMenu.js:126
+#: ../js/ui/statusMenu.js:134
msgid "Log Out..."
-msgstr "登出..."
+msgstr "登出…"
-#: ../js/ui/statusMenu.js:130
+#: ../js/ui/statusMenu.js:141
+msgid "Suspend..."
+msgstr "暫停…"
+
+#: ../js/ui/statusMenu.js:145
msgid "Shut Down..."
-msgstr "關機..."
+msgstr "關機…"
-#: ../js/ui/windowAttentionHandler.js:45
+#: ../js/ui/status/accessibility.js:82
+msgid "Zoom"
+msgstr "縮放"
+
+#: ../js/ui/status/accessibility.js:88
+msgid "Screen Reader"
+msgstr "螢幕閱讀器"
+
+#: ../js/ui/status/accessibility.js:91
+msgid "Screen Keyboard"
+msgstr "螢幕鍵盤"
+
+#: ../js/ui/status/accessibility.js:94
+msgid "Visual Alerts"
+msgstr "視覺警示"
+
+#: ../js/ui/status/accessibility.js:97
+msgid "Sticky Keys"
+msgstr "黏性特殊鍵"
+
+#: ../js/ui/status/accessibility.js:100
+msgid "Slow Keys"
+msgstr "遲緩按鍵"
+
+#: ../js/ui/status/accessibility.js:103
+msgid "Bounce Keys"
+msgstr "回鍵"
+
+#: ../js/ui/status/accessibility.js:106
+msgid "Mouse Keys"
+msgstr "滑鼠按鍵"
+
+#: ../js/ui/status/accessibility.js:110
+msgid "Universal Access Settings"
+msgstr "無障礙功能設定值"
+
+#: ../js/ui/status/accessibility.js:163
+msgid "High Contrast"
+msgstr "高反差"
+
+#: ../js/ui/status/accessibility.js:205
+msgid "Large Text"
+msgstr "大型文字"
+
+#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:240
+msgid "Bluetooth"
+msgstr "藍牙"
+
+#: ../js/ui/status/bluetooth.js:55
+msgid "Visibility"
+msgstr "顯示狀態"
+
+#: ../js/ui/status/bluetooth.js:69
+msgid "Send Files to Device..."
+msgstr "傳送檔案到裝置…"
+
+#: ../js/ui/status/bluetooth.js:70
+msgid "Setup a New Device..."
+msgstr "設定新的裝置…"
+
+#: ../js/ui/status/bluetooth.js:94
+msgid "Bluetooth Settings"
+msgstr "藍牙設定值"
+
+#: ../js/ui/status/bluetooth.js:191
+msgid "Connection"
+msgstr "連線"
+
+#: ../js/ui/status/bluetooth.js:227
+msgid "Send Files..."
+msgstr "傳送檔案…"
+
+#: ../js/ui/status/bluetooth.js:232
+msgid "Browse Files..."
+msgstr "瀏覽檔案…"
+
+#: ../js/ui/status/bluetooth.js:241
+msgid "Error browsing device"
+msgstr "瀏覽裝置時發生錯誤"
+
+#: ../js/ui/status/bluetooth.js:242
+#, c-format
+msgid "The requested device cannot be browsed, error is '%s'"
+msgstr "要求的裝置是不能瀏覽的,錯誤為「%s」"
+
+#: ../js/ui/status/bluetooth.js:250
+msgid "Keyboard Settings"
+msgstr "鍵盤設定值"
+
+#: ../js/ui/status/bluetooth.js:255
+msgid "Mouse Settings"
+msgstr "滑鼠設定值"
+
+#: ../js/ui/status/bluetooth.js:262 ../js/ui/status/volume.js:62
+msgid "Sound Settings"
+msgstr "音效設定值"
+
+#: ../js/ui/status/bluetooth.js:336 ../js/ui/status/bluetooth.js:370
+#: ../js/ui/status/bluetooth.js:410 ../js/ui/status/bluetooth.js:443
+msgid "Bluetooth Agent"
+msgstr "藍牙代理程式"
+
+#: ../js/ui/status/bluetooth.js:371
+#, c-format
+msgid "Authorization request from %s"
+msgstr "來自「%s」的驗證要求"
+
+#: ../js/ui/status/bluetooth.js:377
+#, c-format
+msgid "Device %s wants access to the service '%s'"
+msgstr "裝置 %s 想要存取服務「%s」"
+
+#: ../js/ui/status/bluetooth.js:379
+msgid "Always grant access"
+msgstr "永遠准許存取"
+
+#: ../js/ui/status/bluetooth.js:380
+msgid "Grant this time only"
+msgstr "只有這次准許"
+
+#: ../js/ui/status/bluetooth.js:381
+msgid "Reject"
+msgstr "拒絕"
+
+#: ../js/ui/status/bluetooth.js:411
+#, c-format
+msgid "Pairing confirmation for %s"
+msgstr "%s 的配對確認"
+
+#: ../js/ui/status/bluetooth.js:417 ../js/ui/status/bluetooth.js:451
+#, c-format
+msgid "Device %s wants to pair with this computer"
+msgstr "裝置 %s 想要和這個電腦配對"
+
+#: ../js/ui/status/bluetooth.js:418
+#, c-format
+msgid "Please confirm whether the PIN '%s' matches the one on the device."
+msgstr "請確認 PIN「%s」是否和裝置上的相符。"
+
+#: ../js/ui/status/bluetooth.js:420
+msgid "Matches"
+msgstr "相符"
+
+#: ../js/ui/status/bluetooth.js:421
+msgid "Does not match"
+msgstr "不相符"
+
+#: ../js/ui/status/bluetooth.js:444
+#, c-format
+msgid "Pairing request for %s"
+msgstr "%s 的配對請求"
+
+#: ../js/ui/status/bluetooth.js:452
+msgid "Please enter the PIN mentioned on the device."
+msgstr "請輸入裝置所提及的 PIN。"
+
+#: ../js/ui/status/bluetooth.js:468
+msgid "OK"
+msgstr "確定"
+
+#: ../js/ui/status/bluetooth.js:469
+msgid "Cancel"
+msgstr "取消"
+
+#: ../js/ui/status/power.js:85
+msgid "Power Settings"
+msgstr "電源定值"
+
+#: ../js/ui/status/power.js:112
+#, c-format
+msgid "%d hour remaining"
+msgid_plural "%d hours remaining"
+msgstr[0] "可使用 %d 小時"
+
+#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
+#: ../js/ui/status/power.js:115
+#, c-format
+msgid "%d %s %d %s remaining"
+msgstr "剩下 %d %s %d %s"
+
+#: ../js/ui/status/power.js:117
+msgid "hour"
+msgid_plural "hours"
+msgstr[0] "小時"
+
+#: ../js/ui/status/power.js:117
+msgid "minute"
+msgid_plural "minutes"
+msgstr[0] "分鐘"
+
+#: ../js/ui/status/power.js:120
+#, c-format
+msgid "%d minute remaining"
+msgid_plural "%d minutes remaining"
+msgstr[0] "剩下 %d 分鐘"
+
+#: ../js/ui/status/power.js:237
+msgid "AC adapter"
+msgstr "AC 電源"
+
+#: ../js/ui/status/power.js:239
+msgid "Laptop battery"
+msgstr "手提電腦電池"
+
+#: ../js/ui/status/power.js:241
+msgid "UPS"
+msgstr "不斷電系統"
+
+#: ../js/ui/status/power.js:243
+msgid "Monitor"
+msgstr "監視器"
+
+#: ../js/ui/status/power.js:245
+msgid "Mouse"
+msgstr "滑鼠"
+
+#: ../js/ui/status/power.js:247
+msgid "Keyboard"
+msgstr "鍵盤"
+
+#: ../js/ui/status/power.js:249
+msgid "PDA"
+msgstr "PDA"
+
+#: ../js/ui/status/power.js:251
+msgid "Cell phone"
+msgstr "流動電話"
+
+#: ../js/ui/status/power.js:253
+msgid "Media player"
+msgstr "媒體播放器"
+
+#: ../js/ui/status/power.js:255
+msgid "Tablet"
+msgstr "手寫板"
+
+#: ../js/ui/status/power.js:257
+msgid "Computer"
+msgstr "電腦"
+
+#: ../js/ui/status/power.js:259 ../src/shell-app-system.c:1012
+msgid "Unknown"
+msgstr "不明"
+
+#: ../js/ui/status/volume.js:41
+msgid "Volume"
+msgstr "音量"
+
+#: ../js/ui/status/volume.js:54
+msgid "Microphone"
+msgstr "麥克風"
+
+#: ../js/ui/telepathyClient.js:561
+#, c-format
+msgid "%s is online."
+msgstr "%s 現在上線。"
+
+#: ../js/ui/telepathyClient.js:566
+#, c-format
+msgid "%s is offline."
+msgstr "%s 現在離線。"
+
+#: ../js/ui/telepathyClient.js:569
+#, c-format
+msgid "%s is away."
+msgstr "%s 已離開。"
+
+#: ../js/ui/telepathyClient.js:572
+#, c-format
+msgid "%s is busy."
+msgstr "%s 正忙碌。"
+
+#. Translators: this is a time format string followed by a date.
+#. If applicable, replace %X with a strftime format valid for your
+#. locale, without seconds.
+#: ../js/ui/telepathyClient.js:666
+#, no-c-format
+msgid "Sent at %X on %A"
+msgstr "傳送於 %X %A"
+
+#: ../js/ui/viewSelector.js:26
+msgid "Search your computer"
+msgstr "搜尋你的電腦"
+
+#: ../js/ui/windowAttentionHandler.js:43
#, c-format
msgid "%s has finished starting"
msgstr "%s 已完成啟動"
-#: ../js/ui/windowAttentionHandler.js:47
+#: ../js/ui/windowAttentionHandler.js:45
#, c-format
msgid "'%s' is ready"
msgstr "「%s」已就緒"
-#: ../js/ui/workspacesView.js:230
+#: ../js/ui/workspacesView.js:244
msgid ""
"Can't add a new workspace because maximum workspaces limit has been reached."
msgstr "不能加入新的工作區,因為已達到最大工作區上限。"
-#: ../js/ui/workspacesView.js:247
+#: ../js/ui/workspacesView.js:260
msgid "Can't remove the first workspace."
msgstr "不能移除第一個工作區。"
-#: ../src/shell-global.c:1105
+#. translators:
+#. * The number of sound outputs on a particular device
+#: ../src/gvc/gvc-mixer-control.c:1094
+#, c-format
+msgid "%u Output"
+msgid_plural "%u Outputs"
+msgstr[0] "%u 輸出"
+
+#. translators:
+#. * The number of sound inputs on a particular device
+#: ../src/gvc/gvc-mixer-control.c:1104
+#, c-format
+msgid "%u Input"
+msgid_plural "%u Inputs"
+msgstr[0] "%u 輸入"
+
+#: ../src/gvc/gvc-mixer-control.c:1402
+msgid "System Sounds"
+msgstr "系統音效"
+
+#: ../src/shell-global.c:1233
msgid "Less than a minute ago"
msgstr "少於一分鐘之前"
-#: ../src/shell-global.c:1109
+#: ../src/shell-global.c:1237
#, c-format
msgid "%d minute ago"
msgid_plural "%d minutes ago"
msgstr[0] "%d 分鐘前"
-#: ../src/shell-global.c:1114
+#: ../src/shell-global.c:1242
#, c-format
msgid "%d hour ago"
msgid_plural "%d hours ago"
msgstr[0] "%d 小時前"
-#: ../src/shell-global.c:1119
+#: ../src/shell-global.c:1247
#, c-format
msgid "%d day ago"
msgid_plural "%d days ago"
msgstr[0] "%d 天前"
-#: ../src/shell-global.c:1124
+#: ../src/shell-global.c:1252
#, c-format
msgid "%d week ago"
msgid_plural "%d weeks ago"
msgstr[0] "%d 週前"
-#: ../src/shell-uri-util.c:89
+#: ../src/shell-util.c:89
msgid "Home Folder"
msgstr "家目錄"
#. Translators: this is the same string as the one found in
#. * nautilus
-#: ../src/shell-uri-util.c:104
+#: ../src/shell-util.c:104
msgid "File System"
msgstr "檔案系統"
-#: ../src/shell-uri-util.c:250
+#: ../src/shell-util.c:250
msgid "Search"
msgstr "搜尋"
@@ -490,7 +845,107 @@ msgstr "搜尋"
#. * example, "Trash: some-directory". It means that the
#. * directory called "some-directory" is in the trash.
#.
-#: ../src/shell-uri-util.c:300
+#: ../src/shell-util.c:300
#, c-format
msgid "%1$s: %2$s"
msgstr "%1$s:%2$s"
+
+#~ msgid "Clock"
+#~ msgstr "時鐘"
+
+#~ msgid "Customize the panel clock"
+#~ msgstr "自訂面板時鐘"
+
+#~ msgid "Custom format of the clock"
+#~ msgstr "自訂時鐘的格式"
+
+#~ msgid "Hour format"
+#~ msgstr "小時格式"
+
+#~ msgid ""
+#~ "If true and format is either \"12-hour\" or \"24-hour\", display seconds "
+#~ "in time."
+#~ msgstr "如果設為 true 且格式為「12-小時」或「24-小時」,在時刻裡顯示秒鐘。"
+
+#~ msgid ""
+#~ "This key specifies the format used by the panel clock when the format key "
+#~ "is set to \"custom\". You can use conversion specifiers understood by "
+#~ "strftime() to obtain a specific format. See the strftime() manual for "
+#~ "more information."
+#~ msgstr ""
+#~ "這個設定鍵是在面板時鐘的「format」設定鍵被設為「custom」時使用的自訂格式。"
+#~ "您可以用可被 strftime() 理解的轉換規範來取得所指定的格式。請查閱 strftime"
+#~ "() 手冊以獲取更多資訊。"
+
+#~ msgid ""
+#~ "This key specifies the hour format used by the panel clock. Possible "
+#~ "values are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to "
+#~ "\"unix\", the clock will display time in seconds since Epoch, i.e. "
+#~ "1970-01-01. If set to \"custom\", the clock will display time according "
+#~ "to the format specified in the custom_format key. Note that if set to "
+#~ "either \"unix\" or \"custom\", the show_date and show_seconds keys are "
+#~ "ignored."
+#~ msgstr ""
+#~ "這個設定值指定了面板時鐘使用的小時格式。可用的數值有「12-hour」、「24-"
+#~ "hour」、「unix」和「custom」。如果設定為「unix」,時鐘會顯示自 Epoch,即 "
+#~ "1970-01-01 以來的秒數。如果設定為「custom」,時鐘會根據 custom_format 設定"
+#~ "鍵顯示時刻。注意不管設為「unix」或「custom」,show_date 和 show_seconds 設"
+#~ "定鍵都會被忽略。"
+
+#~ msgid "Clock Format"
+#~ msgstr "時鐘格式"
+
+#~ msgid "Clock Preferences"
+#~ msgstr "時鐘偏好設定"
+
+#~ msgid "Panel Display"
+#~ msgstr "面板顯示"
+
+#~ msgid "Show seco_nds"
+#~ msgstr "顯示秒數(_N)"
+
+#~ msgid "Show the _date"
+#~ msgstr "顯示日期(_D)"
+
+#~ msgid "_12 hour format"
+#~ msgstr "_12 小時制"
+
+#~ msgid "_24 hour format"
+#~ msgstr "_24 小時制"
+
+#~ msgid "Preferences"
+#~ msgstr "偏好設定"
+
+#~ msgid "Overview workspace view mode"
+#~ msgstr "概覽工作區檢視模式"
+
+#~ msgid ""
+#~ "The selected workspace view mode in the overview. Supported values are "
+#~ "\"single\" and \"grid\"."
+#~ msgstr ""
+#~ "在概覽中選取的工作區檢視模式。支援的數值有「single」(單一)和「grid」(格"
+#~ "線)。"
+
+#~ msgid "Drag here to add favorites"
+#~ msgstr "拖放到這裡加入喜好"
+
+#~ msgid "Find"
+#~ msgstr "尋找"
+
+#~ msgid "Searching..."
+#~ msgstr "搜尋中…"
+
+#~ msgid "No matching results."
+#~ msgstr "沒有相符的結果。"
+
+#~ msgid "Invisible"
+#~ msgstr "隱形"
+
+#~ msgid "Account Information..."
+#~ msgstr "帳號資訊…"
+
+#~ msgid "ON"
+#~ msgstr "開"
+
+#~ msgid "OFF"
+#~ msgstr "關"
diff --git a/po/zh_TW.po b/po/zh_TW.po
index 664b36402..b4d8d9b49 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -2,15 +2,17 @@
# Copyright (C) 2010 gnome-shell's COPYRIGHT HOLDER
# This file is distributed under the same license as the gnome-shell package.
# Chao-Hsiung Liao , 2010.
+# Wei-Lun Chao , 2010.
#
msgid ""
msgstr ""
-"Project-Id-Version: gnome-shell 2.31.5\n"
+"Project-Id-Version: gnome-shell 2.91.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-21 20:42+0800\n"
-"PO-Revision-Date: 2010-08-20 13:40+0800\n"
+"POT-Creation-Date: 2011-01-07 09:43+0800\n"
+"PO-Revision-Date: 2011-01-05 13:31+0800\n"
"Last-Translator: Chao-Hsiung Liao \n"
"Language-Team: Chinese (Taiwan) \n"
+"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -24,14 +26,6 @@ msgstr "GNOME Shell"
msgid "Window management and application launching"
msgstr "視窗管理與應用程式的執行"
-#: ../data/gnome-shell-clock-preferences.desktop.in.in.h:1
-msgid "Clock"
-msgstr "時鐘"
-
-#: ../data/gnome-shell-clock-preferences.desktop.in.in.h:2
-msgid "Customize the panel clock"
-msgstr "自訂面板時鐘"
-
#: ../data/org.gnome.shell.gschema.xml.in.h:1
msgid ""
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
@@ -39,62 +33,52 @@ msgid ""
msgstr "允許使用 Alt-F2 對話盒存取內部除錯和監控工具。"
#: ../data/org.gnome.shell.gschema.xml.in.h:2
-msgid "Custom format of the clock"
-msgstr "自訂時鐘的格式"
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:3
msgid "Enable internal tools useful for developers and testers from Alt-F2"
msgstr "啟用讓開發者與測試者能以 Alt-F2 使用好用的內部工具"
-#: ../data/org.gnome.shell.gschema.xml.in.h:4
+#: ../data/org.gnome.shell.gschema.xml.in.h:3
msgid "File extension used for storing the screencast"
msgstr "用來儲存畫面廣播的延伸檔名"
-#: ../data/org.gnome.shell.gschema.xml.in.h:5
+#: ../data/org.gnome.shell.gschema.xml.in.h:4
msgid "Framerate used for recording screencasts."
msgstr "錄製畫面廣播的框架率。"
-#: ../data/org.gnome.shell.gschema.xml.in.h:6
+#: ../data/org.gnome.shell.gschema.xml.in.h:5
msgid ""
"GNOME Shell extensions have a uuid property; this key lists extensions which "
"should not be loaded."
msgstr "GNOME Shell 擴充功能有 uuid 屬性;這個設定鍵列出了不應載入的擴充功能。"
-#: ../data/org.gnome.shell.gschema.xml.in.h:7
+#: ../data/org.gnome.shell.gschema.xml.in.h:6
msgid "History for command (Alt-F2) dialog"
msgstr "指令 (Alt-F2) 對話盒歷史紀錄"
-#: ../data/org.gnome.shell.gschema.xml.in.h:8
-msgid "Hour format"
-msgstr "小時格式"
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:9
-msgid ""
-"If true and format is either \"12-hour\" or \"24-hour\", display date in the "
-"clock, in addition to time."
+#: ../data/org.gnome.shell.gschema.xml.in.h:7
+#, fuzzy
+#| msgid ""
+#| "If true and format is either \"12-hour\" or \"24-hour\", display date in "
+#| "the clock, in addition to time."
+msgid "If true, display date in the clock, in addition to time."
msgstr ""
"如果設為 true 且格式為「12-小時」或「24-小時」,在時鐘裡顯示日期,加在時刻後"
"面。"
-#: ../data/org.gnome.shell.gschema.xml.in.h:10
-msgid ""
-"If true and format is either \"12-hour\" or \"24-hour\", display seconds in "
-"time."
-msgstr "如果設為 true 且格式為「12-小時」或「24-小時」,在時刻裡顯示秒鐘。"
+#: ../data/org.gnome.shell.gschema.xml.in.h:8
+#, fuzzy
+#| msgid "If true, display the ISO week date in the calendar."
+msgid "If true, display seconds in time."
+msgstr "如果設為 true,在日曆中顯示 ISO 週數。"
-#: ../data/org.gnome.shell.gschema.xml.in.h:11
+#: ../data/org.gnome.shell.gschema.xml.in.h:9
msgid "If true, display the ISO week date in the calendar."
msgstr "如果設為 true,在日曆中顯示 ISO 週數。"
-#: ../data/org.gnome.shell.gschema.xml.in.h:12
+#: ../data/org.gnome.shell.gschema.xml.in.h:10
msgid "List of desktop file IDs for favorite applications"
msgstr "喜好的應用程式桌面檔案 ID 清單"
-#: ../data/org.gnome.shell.gschema.xml.in.h:13
-msgid "Overview workspace view mode"
-msgstr "概覽工作區檢視模式"
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:14
+#: ../data/org.gnome.shell.gschema.xml.in.h:11
msgid ""
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
"used for gst-launch. The pipeline should have an unconnected sink pad where "
@@ -106,25 +90,25 @@ msgid ""
"'videorate ! theoraenc ! oggmux' and records to Ogg Theora."
msgstr ""
-#: ../data/org.gnome.shell.gschema.xml.in.h:15
+#: ../data/org.gnome.shell.gschema.xml.in.h:12
msgid "Show date in clock"
msgstr "在時鐘內顯示日期"
-#: ../data/org.gnome.shell.gschema.xml.in.h:16
+#: ../data/org.gnome.shell.gschema.xml.in.h:13
msgid "Show the week date in the calendar"
msgstr "在日曆中顯示週數"
-#: ../data/org.gnome.shell.gschema.xml.in.h:17
+#: ../data/org.gnome.shell.gschema.xml.in.h:14
msgid "Show time with seconds"
msgstr "在時刻中顯示秒數"
-#: ../data/org.gnome.shell.gschema.xml.in.h:18
+#: ../data/org.gnome.shell.gschema.xml.in.h:15
msgid ""
"The applications corresponding to these identifiers will be displayed in the "
"favorites area."
msgstr "對應這些辨別碼的應用程式會顯示在喜好區域。"
-#: ../data/org.gnome.shell.gschema.xml.in.h:19
+#: ../data/org.gnome.shell.gschema.xml.in.h:16
msgid ""
"The filename for recorded screencasts will be a unique filename based on the "
"current date, and use this extension. It should be changed when recording to "
@@ -133,7 +117,7 @@ msgstr ""
"錄製好的畫面廣播檔案名稱會以目前的時刻作為獨特的檔名,並使用這個延伸檔名。當"
"錄製為不同的容器格式時應該做適當變更。"
-#: ../data/org.gnome.shell.gschema.xml.in.h:20
+#: ../data/org.gnome.shell.gschema.xml.in.h:17
msgid ""
"The framerate of the resulting screencast recordered by GNOME Shell's "
"screencast recorder in frames-per-second."
@@ -141,18 +125,11 @@ msgstr ""
"由 GNOME Shell 的畫面廣播錄製程式所錄製成果的框架率,以 frames-per-second "
"計。"
-#: ../data/org.gnome.shell.gschema.xml.in.h:21
+#: ../data/org.gnome.shell.gschema.xml.in.h:18
msgid "The gstreamer pipeline used to encode the screencast"
msgstr "用來編碼畫面廣播的 gstreamer 管線"
-#: ../data/org.gnome.shell.gschema.xml.in.h:22
-msgid ""
-"The selected workspace view mode in the overview. Supported values are "
-"\"single\" and \"grid\"."
-msgstr ""
-"在概覽中選取的工作區檢視模式。支援的數值有「single」(單一)和「grid」(格線)。"
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:23
+#: ../data/org.gnome.shell.gschema.xml.in.h:19
msgid ""
"The shell normally monitors active applications in order to present the most "
"used ones (e.g. in launchers). While this data will be kept private, you may "
@@ -163,207 +140,277 @@ msgstr ""
"器中)。雖然這個資料會保持隱密,但是您可能會基於隱私的理由想要停用這個功能。"
"請注意這麼做並不會移除已儲存的資料。"
-#: ../data/org.gnome.shell.gschema.xml.in.h:24
-msgid ""
-"This key specifies the format used by the panel clock when the format key is "
-"set to \"custom\". You can use conversion specifiers understood by strftime"
-"() to obtain a specific format. See the strftime() manual for more "
-"information."
-msgstr ""
-"這個設定鍵是在面板時鐘的「format」設定鍵被設為「custom」時使用的自訂格式。您"
-"可以用可被 strftime() 理解的轉換規範來取得所指定的格式。請查閱 strftime() 手"
-"冊以獲取更多資訊。"
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:25
-msgid ""
-"This key specifies the hour format used by the panel clock. Possible values "
-"are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to \"unix\", "
-"the clock will display time in seconds since Epoch, i.e. 1970-01-01. If set "
-"to \"custom\", the clock will display time according to the format specified "
-"in the custom_format key. Note that if set to either \"unix\" or \"custom\", "
-"the show_date and show_seconds keys are ignored."
-msgstr ""
-
-#: ../data/org.gnome.shell.gschema.xml.in.h:26
+#: ../data/org.gnome.shell.gschema.xml.in.h:20
msgid "Uuids of extensions to disable"
msgstr "要停用的延伸檔名 Uuid"
-#: ../data/org.gnome.shell.gschema.xml.in.h:27
+#: ../data/org.gnome.shell.gschema.xml.in.h:21
msgid "Whether to collect stats about applications usage"
msgstr "是否收集關於應用程式使用率的狀態"
-#: ../data/clock-preferences.ui.h:1
-msgid "Clock Format"
-msgstr "時鐘格式"
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:1
+msgid "Clip the crosshairs at the center"
+msgstr ""
-#: ../data/clock-preferences.ui.h:2
-msgid "Clock Preferences"
-msgstr "時鐘偏好設定"
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:2
+msgid "Color of the crosshairs"
+msgstr "十字準星的顏色"
-#: ../data/clock-preferences.ui.h:3
-msgid "Panel Display"
-msgstr "面板顯示"
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:3
+msgid ""
+"Determines the length of the vertical and horizontal lines that make up the "
+"crosshairs."
+msgstr "決定組成十字準星的垂直和水平線條的長度。"
-#: ../data/clock-preferences.ui.h:4
-msgid "Show seco_nds"
-msgstr "顯示秒數(_N)"
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:4
+msgid ""
+"Determines the position of the magnified mouse image within the magnified "
+"view and how it reacts to system mouse movement. The values are - none: no "
+"mouse tracking; - centered: the mouse image is displayed at the center of "
+"the zoom region (which also represents the point under the system mouse) and "
+"the magnified contents are scrolled as the system mouse moves; - "
+"proportional: the position of the magnified mouse in the zoom region is "
+"proportionally the same as the position of the system mouse on screen; - "
+"push: when the magnified mouse intersects a boundary of the zoom region, the "
+"contents are scrolled into view."
+msgstr ""
-#: ../data/clock-preferences.ui.h:5
-msgid "Show the _date"
-msgstr "顯示日期(_D)"
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:5
+msgid ""
+"Determines the transparency of the crosshairs, from fully opaque to fully "
+"transparent."
+msgstr "決定十字準星的透明度,從完全不透明到完全透明。"
-#: ../data/clock-preferences.ui.h:6
-msgid "_12 hour format"
-msgstr "_12 小時制"
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:6
+msgid ""
+"Determines whether the crosshairs intersect the magnified mouse sprite, or "
+"are clipped such that the ends of the horizontal and vertical lines surround "
+"the mouse image."
+msgstr ""
-#: ../data/clock-preferences.ui.h:7
-msgid "_24 hour format"
-msgstr "_24 小時制"
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:7
+#, fuzzy
+#| msgid "Enabled"
+msgid "Enable lens mode"
+msgstr "啟用觸控螢幕模式"
-#. **** Applications ****
-#: ../js/ui/appDisplay.js:384 ../js/ui/dash.js:778
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:8
+msgid ""
+"Enables/disables display of crosshairs centered on the magnified mouse "
+"sprite."
+msgstr ""
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:9
+msgid ""
+"For centered mouse tracking, when the system pointer is at or near the edge "
+"of the screen, the magnified contents continue to scroll such that the "
+"screen edge moves into the magnified view."
+msgstr ""
+"對於置中式的滑鼠追蹤,當系統指標位於或接近螢幕的邊緣時,放大的內容也會持續捲"
+"動,讓螢幕的邊緣移進放大的檢視範圍。"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:10
+msgid "Length of the crosshairs"
+msgstr "十字準星長度"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:11
+msgid "Magnification factor"
+msgstr "放大率"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:12
+msgid "Mouse Tracking Mode"
+msgstr "滑鼠追蹤模式"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:13
+msgid "Opacity of the crosshairs"
+msgstr "十字準星透明度"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:14
+msgid "Screen position"
+msgstr "螢幕位置"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:15
+msgid "Scroll magnified contents beyond the edges of the desktop"
+msgstr "在桌面邊緣時捲動放大的內容"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:16
+msgid "Show or hide crosshairs"
+msgstr "顯示或隱藏十字準星"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:17
+msgid "Show or hide the magnifier"
+msgstr "顯示或隱藏放大鏡"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:18
+msgid "Show or hide the magnifier and all of its zoom regions."
+msgstr "顯示或隱藏放大鏡和所有被它放大的區域。"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:19
+msgid ""
+"The color of the the vertical and horizontal lines that make up the "
+"crosshairs."
+msgstr "組成十字準星的垂直和水平線條的顏色。"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:20
+msgid ""
+"The magnified view either fills the entire screen, or occupies the top-half, "
+"bottom-half, left-half, or right-half of the screen."
+msgstr "放大的檢視要佔據整個螢幕,或是只佔螢幕的上半、下半、左半或右半邊。"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:21
+msgid ""
+"The power of the magnification. A value of 1.0 means no magnification. A "
+"value of 2.0 doubles the size."
+msgstr "放大的倍數。數值 1.0 表示不放大。數值 2.0 為放大兩倍。"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:22
+msgid "Thickness of the crosshairs"
+msgstr "十字準星厚度"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:23
+msgid ""
+"Whether the magnified view should be centered over the location of the "
+"system mouse and move with it."
+msgstr "放大的檢視是否應以系統滑鼠的位置為中心點並隨滑鼠移動。"
+
+#: ../data/org.gnome.accessibility.magnifier.gschema.xml.in.h:24
+msgid "Width of the vertical and horizontal lines that make up the crosshairs."
+msgstr "組成十字準星的垂直和水平線條的寬度。"
+
+#. Translators: Filter to display all applications
+#: ../js/ui/appDisplay.js:155
+msgid "All"
+msgstr "全部"
+
+#: ../js/ui/appDisplay.js:236
msgid "APPLICATIONS"
msgstr "程式集"
-#: ../js/ui/appDisplay.js:416
+#: ../js/ui/appDisplay.js:266
msgid "PREFERENCES"
msgstr "偏好設定"
-#: ../js/ui/appDisplay.js:721
+#: ../js/ui/appDisplay.js:563
msgid "New Window"
msgstr "新視窗"
-#: ../js/ui/appDisplay.js:725
+#: ../js/ui/appDisplay.js:567
msgid "Remove from Favorites"
msgstr "自喜好中移除"
-#: ../js/ui/appDisplay.js:726
+#: ../js/ui/appDisplay.js:568
msgid "Add to Favorites"
msgstr "加入喜好"
-#: ../js/ui/appDisplay.js:1033
-msgid "Drag here to add favorites"
-msgstr "拖放到這裡加入喜好"
-
-#: ../js/ui/appFavorites.js:88
+#: ../js/ui/appFavorites.js:91
#, c-format
msgid "%s has been added to your favorites."
msgstr "%s 已加入您的喜好中。"
-#: ../js/ui/appFavorites.js:107
+#: ../js/ui/appFavorites.js:122
#, c-format
msgid "%s has been removed from your favorites."
msgstr "%s 已經從您的喜好中移除。"
-#: ../js/ui/dash.js:142
-msgid "Find"
-msgstr "尋找"
+#: ../js/ui/dash.js:27
+msgid "Remove"
+msgstr "移除"
-#: ../js/ui/dash.js:473
-msgid "Searching..."
-msgstr "搜尋中..."
-
-#: ../js/ui/dash.js:487
-msgid "No matching results."
-msgstr "沒有相符的結果。"
-
-#. **** Places ****
-#. Translators: This is in the sense of locations for documents,
-#. network locations, etc.
-#: ../js/ui/dash.js:797 ../js/ui/placeDisplay.js:554
-msgid "PLACES & DEVICES"
-msgstr "位置 & 裝置"
-
-#. **** Documents ****
-#: ../js/ui/dash.js:804 ../js/ui/docDisplay.js:494
+#: ../js/ui/docDisplay.js:494
msgid "RECENT ITEMS"
msgstr "最近使用項目"
-#: ../js/ui/lookingGlass.js:471
+#: ../js/ui/lookingGlass.js:552
msgid "No extensions installed"
msgstr "沒有安裝擴充功能"
-#: ../js/ui/lookingGlass.js:508
+#: ../js/ui/lookingGlass.js:589
msgid "Enabled"
msgstr "已啟用"
-#: ../js/ui/lookingGlass.js:510
+#. translators:
+#. * The device has been disabled
+#: ../js/ui/lookingGlass.js:591 ../src/gvc/gvc-mixer-control.c:1087
msgid "Disabled"
msgstr "已停用"
-#: ../js/ui/lookingGlass.js:512
+#: ../js/ui/lookingGlass.js:593
msgid "Error"
msgstr "錯誤"
-#: ../js/ui/lookingGlass.js:514
+#: ../js/ui/lookingGlass.js:595
msgid "Out of date"
msgstr "過期"
-#: ../js/ui/lookingGlass.js:539
+#: ../js/ui/lookingGlass.js:620
msgid "View Source"
msgstr "檢示來源"
-#: ../js/ui/lookingGlass.js:545
+#: ../js/ui/lookingGlass.js:626
msgid "Web Page"
msgstr "網頁"
-#: ../js/ui/overview.js:160
+#: ../js/ui/overview.js:101
msgid "Undo"
msgstr "復原"
+#: ../js/ui/overview.js:166
+msgid "Windows"
+msgstr "視窗"
+
+#: ../js/ui/overview.js:169
+msgid "Applications"
+msgstr "應用程式"
+
#. TODO - _quit() doesn't really work on apps in state STARTING yet
-#: ../js/ui/panel.js:473
+#: ../js/ui/panel.js:478
#, c-format
msgid "Quit %s"
msgstr "結束 %s"
-#: ../js/ui/panel.js:498
-msgid "Preferences"
-msgstr "偏好設定"
-
#. Translators: This is the time format with date used
#. in 24-hour mode.
-#: ../js/ui/panel.js:584
+#: ../js/ui/panel.js:563
msgid "%a %b %e, %R:%S"
msgstr "%b %e %a, %R:%S"
-#: ../js/ui/panel.js:585
+#: ../js/ui/panel.js:564
msgid "%a %b %e, %R"
msgstr "%b %e %a, %R"
#. Translators: This is the time format without date used
#. in 24-hour mode.
-#: ../js/ui/panel.js:589
+#: ../js/ui/panel.js:568
msgid "%a %R:%S"
msgstr "%a %R:%S"
-#: ../js/ui/panel.js:590
+#: ../js/ui/panel.js:569
msgid "%a %R"
msgstr "%a %R"
#. Translators: This is a time format with date used
#. for AM/PM.
-#: ../js/ui/panel.js:597
+#: ../js/ui/panel.js:576
msgid "%a %b %e, %l:%M:%S %p"
msgstr "%b %e %a, %p %l:%M:%S"
-#: ../js/ui/panel.js:598
+#: ../js/ui/panel.js:577
msgid "%a %b %e, %l:%M %p"
msgstr "%b %e %a, %p %l:%M"
#. Translators: This is a time format without date used
#. for AM/PM.
-#: ../js/ui/panel.js:602
+#: ../js/ui/panel.js:581
msgid "%a %l:%M:%S %p"
msgstr "%a %p %l:%M:%S"
-#: ../js/ui/panel.js:603
+#: ../js/ui/panel.js:582
msgid "%a %l:%M %p"
msgstr "%a %p %l:%M"
#. Button on the left side of the panel.
#. Translators: If there is no suitable word for "Activities" in your language, you can use the word for "Overview".
-#: ../js/ui/panel.js:748
+#: ../js/ui/panel.js:727
msgid "Activities"
msgstr "概覽 "
@@ -378,19 +425,21 @@ msgstr "重試"
#: ../js/ui/placeDisplay.js:159
msgid "Connect to..."
-msgstr "連接到..."
+msgstr "連接到…"
-#. Translators: the "ON" and "OFF" strings are used in the
-#. toggle switches in the status area menus, and must be SHORT.
-#. If you don't have suitable short words, consider initials,
-#. "0"/"1", "⚪"/"⚫", etc.
-#: ../js/ui/popupMenu.js:30 ../js/ui/popupMenu.js:40
-msgid "ON"
-msgstr "開"
+#: ../js/ui/placeDisplay.js:558
+msgid "PLACES & DEVICES"
+msgstr "位置 & 裝置"
-#: ../js/ui/popupMenu.js:31 ../js/ui/popupMenu.js:45
-msgid "OFF"
-msgstr "關"
+#. Translators: this MUST be either "toggle-switch-us"
+#. (for toggle switches containing the English words
+#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
+#. switches containing "◯" and "|"). Other values will
+#. simply result in invisible toggle switches.
+#: ../js/ui/popupMenu.js:33
+#, fuzzy
+msgid "toggle-switch-us"
+msgstr "美式 84 鍵鍵盤"
#: ../js/ui/runDialog.js:233
msgid "Please enter a command:"
@@ -401,100 +450,404 @@ msgstr "請輸入指令:"
msgid "Execution of '%s' failed:"
msgstr "執行「%s」失敗:"
-#: ../js/ui/statusMenu.js:91
+#: ../js/ui/statusMenu.js:101
msgid "Available"
msgstr "可用"
-#: ../js/ui/statusMenu.js:95
+#: ../js/ui/statusMenu.js:106
msgid "Busy"
msgstr "忙碌"
-#: ../js/ui/statusMenu.js:99
-msgid "Invisible"
-msgstr "隱形"
+#: ../js/ui/statusMenu.js:114
+msgid "My Account"
+msgstr "我的帳號"
-#: ../js/ui/statusMenu.js:106
-msgid "Account Information..."
-msgstr "帳號資訊..."
+#: ../js/ui/statusMenu.js:118
+msgid "System Settings"
+msgstr "系統設定值"
-#: ../js/ui/statusMenu.js:110
-msgid "System Preferences..."
-msgstr "系統偏好設定..."
-
-#: ../js/ui/statusMenu.js:117
+#: ../js/ui/statusMenu.js:125
msgid "Lock Screen"
msgstr "鎖定畫面"
-#: ../js/ui/statusMenu.js:121
+#: ../js/ui/statusMenu.js:129
msgid "Switch User"
msgstr "切換使用者"
-#: ../js/ui/statusMenu.js:126
+#: ../js/ui/statusMenu.js:134
msgid "Log Out..."
-msgstr "登出..."
+msgstr "登出…"
-#: ../js/ui/statusMenu.js:130
+#: ../js/ui/statusMenu.js:141
+msgid "Suspend..."
+msgstr "暫停…"
+
+#: ../js/ui/statusMenu.js:145
msgid "Shut Down..."
-msgstr "關機..."
+msgstr "關機…"
-#: ../js/ui/windowAttentionHandler.js:45
+#: ../js/ui/status/accessibility.js:82
+msgid "Zoom"
+msgstr "縮放"
+
+#: ../js/ui/status/accessibility.js:88
+msgid "Screen Reader"
+msgstr "螢幕閱讀器"
+
+#: ../js/ui/status/accessibility.js:91
+msgid "Screen Keyboard"
+msgstr "螢幕鍵盤"
+
+#: ../js/ui/status/accessibility.js:94
+msgid "Visual Alerts"
+msgstr "視覺警示"
+
+#: ../js/ui/status/accessibility.js:97
+msgid "Sticky Keys"
+msgstr "黏性特殊鍵"
+
+#: ../js/ui/status/accessibility.js:100
+msgid "Slow Keys"
+msgstr "遲緩按鍵"
+
+#: ../js/ui/status/accessibility.js:103
+msgid "Bounce Keys"
+msgstr "回鍵"
+
+#: ../js/ui/status/accessibility.js:106
+msgid "Mouse Keys"
+msgstr "滑鼠按鍵"
+
+#: ../js/ui/status/accessibility.js:110
+msgid "Universal Access Settings"
+msgstr "無障礙功能設定值"
+
+#: ../js/ui/status/accessibility.js:163
+msgid "High Contrast"
+msgstr "高反差"
+
+#: ../js/ui/status/accessibility.js:205
+msgid "Large Text"
+msgstr "大型文字"
+
+#: ../js/ui/status/bluetooth.js:42 ../js/ui/status/bluetooth.js:240
+msgid "Bluetooth"
+msgstr "藍牙"
+
+#: ../js/ui/status/bluetooth.js:55
+msgid "Visibility"
+msgstr "顯示狀態"
+
+#: ../js/ui/status/bluetooth.js:69
+msgid "Send Files to Device..."
+msgstr "傳送檔案到裝置…"
+
+#: ../js/ui/status/bluetooth.js:70
+msgid "Setup a New Device..."
+msgstr "設定新的裝置…"
+
+#: ../js/ui/status/bluetooth.js:94
+msgid "Bluetooth Settings"
+msgstr "藍牙設定值"
+
+#: ../js/ui/status/bluetooth.js:191
+msgid "Connection"
+msgstr "連線"
+
+#: ../js/ui/status/bluetooth.js:227
+msgid "Send Files..."
+msgstr "傳送檔案…"
+
+#: ../js/ui/status/bluetooth.js:232
+msgid "Browse Files..."
+msgstr "瀏覽檔案…"
+
+#: ../js/ui/status/bluetooth.js:241
+msgid "Error browsing device"
+msgstr "瀏覽裝置時發生錯誤"
+
+#: ../js/ui/status/bluetooth.js:242
+#, c-format
+msgid "The requested device cannot be browsed, error is '%s'"
+msgstr "要求的裝置是不能瀏覽的,錯誤為「%s」"
+
+#: ../js/ui/status/bluetooth.js:250
+msgid "Keyboard Settings"
+msgstr "鍵盤設定值"
+
+#: ../js/ui/status/bluetooth.js:255
+msgid "Mouse Settings"
+msgstr "滑鼠設定值"
+
+#: ../js/ui/status/bluetooth.js:262 ../js/ui/status/volume.js:62
+msgid "Sound Settings"
+msgstr "音效設定值"
+
+#: ../js/ui/status/bluetooth.js:336 ../js/ui/status/bluetooth.js:370
+#: ../js/ui/status/bluetooth.js:410 ../js/ui/status/bluetooth.js:443
+msgid "Bluetooth Agent"
+msgstr "藍牙代理程式"
+
+#: ../js/ui/status/bluetooth.js:371
+#, c-format
+msgid "Authorization request from %s"
+msgstr "來自「%s」的驗證要求"
+
+#: ../js/ui/status/bluetooth.js:377
+#, c-format
+msgid "Device %s wants access to the service '%s'"
+msgstr "裝置 %s 想要存取服務「%s」"
+
+#: ../js/ui/status/bluetooth.js:379
+msgid "Always grant access"
+msgstr "永遠准許存取"
+
+#: ../js/ui/status/bluetooth.js:380
+msgid "Grant this time only"
+msgstr "只有這次准許"
+
+#: ../js/ui/status/bluetooth.js:381
+msgid "Reject"
+msgstr "拒絕"
+
+#: ../js/ui/status/bluetooth.js:411
+#, c-format
+msgid "Pairing confirmation for %s"
+msgstr "%s 的配對確認"
+
+#: ../js/ui/status/bluetooth.js:417 ../js/ui/status/bluetooth.js:451
+#, c-format
+msgid "Device %s wants to pair with this computer"
+msgstr "裝置 %s 想要和這個電腦配對"
+
+#: ../js/ui/status/bluetooth.js:418
+#, c-format
+msgid "Please confirm whether the PIN '%s' matches the one on the device."
+msgstr "請確認 PIN「%s」是否和裝置上的相符。"
+
+#: ../js/ui/status/bluetooth.js:420
+msgid "Matches"
+msgstr "相符"
+
+#: ../js/ui/status/bluetooth.js:421
+msgid "Does not match"
+msgstr "不相符"
+
+#: ../js/ui/status/bluetooth.js:444
+#, c-format
+msgid "Pairing request for %s"
+msgstr "%s 的配對請求"
+
+#: ../js/ui/status/bluetooth.js:452
+msgid "Please enter the PIN mentioned on the device."
+msgstr "請輸入裝置所提及的 PIN。"
+
+#: ../js/ui/status/bluetooth.js:468
+msgid "OK"
+msgstr "確定"
+
+#: ../js/ui/status/bluetooth.js:469
+msgid "Cancel"
+msgstr "取消"
+
+#: ../js/ui/status/power.js:85
+msgid "Power Settings"
+msgstr "電源定值"
+
+#: ../js/ui/status/power.js:112
+#, c-format
+msgid "%d hour remaining"
+msgid_plural "%d hours remaining"
+msgstr[0] "可使用 %d 小時"
+
+#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
+#: ../js/ui/status/power.js:115
+#, c-format
+msgid "%d %s %d %s remaining"
+msgstr "剩下 %d %s %d %s"
+
+#: ../js/ui/status/power.js:117
+msgid "hour"
+msgid_plural "hours"
+msgstr[0] "小時"
+
+#: ../js/ui/status/power.js:117
+msgid "minute"
+msgid_plural "minutes"
+msgstr[0] "分鐘"
+
+#: ../js/ui/status/power.js:120
+#, c-format
+msgid "%d minute remaining"
+msgid_plural "%d minutes remaining"
+msgstr[0] "剩下 %d 分鐘"
+
+#: ../js/ui/status/power.js:237
+msgid "AC adapter"
+msgstr "AC 電源"
+
+#: ../js/ui/status/power.js:239
+msgid "Laptop battery"
+msgstr "筆記型電腦電池"
+
+#: ../js/ui/status/power.js:241
+msgid "UPS"
+msgstr "不斷電系統"
+
+#: ../js/ui/status/power.js:243
+msgid "Monitor"
+msgstr "監視器"
+
+#: ../js/ui/status/power.js:245
+msgid "Mouse"
+msgstr "滑鼠"
+
+#: ../js/ui/status/power.js:247
+msgid "Keyboard"
+msgstr "鍵盤"
+
+#: ../js/ui/status/power.js:249
+msgid "PDA"
+msgstr "PDA"
+
+#: ../js/ui/status/power.js:251
+msgid "Cell phone"
+msgstr "行動電話"
+
+#: ../js/ui/status/power.js:253
+msgid "Media player"
+msgstr "媒體播放器"
+
+#: ../js/ui/status/power.js:255
+msgid "Tablet"
+msgstr "手寫板"
+
+#: ../js/ui/status/power.js:257
+msgid "Computer"
+msgstr "電腦"
+
+#: ../js/ui/status/power.js:259 ../src/shell-app-system.c:1012
+msgid "Unknown"
+msgstr "不明"
+
+#: ../js/ui/status/volume.js:41
+msgid "Volume"
+msgstr "音量"
+
+#: ../js/ui/status/volume.js:54
+msgid "Microphone"
+msgstr "麥克風"
+
+#: ../js/ui/telepathyClient.js:561
+#, c-format
+msgid "%s is online."
+msgstr "%s 現在上線。"
+
+#: ../js/ui/telepathyClient.js:566
+#, c-format
+msgid "%s is offline."
+msgstr "%s 現在離線。"
+
+#: ../js/ui/telepathyClient.js:569
+#, c-format
+msgid "%s is away."
+msgstr "%s 已離開。"
+
+#: ../js/ui/telepathyClient.js:572
+#, c-format
+msgid "%s is busy."
+msgstr "%s 正忙碌。"
+
+#. Translators: this is a time format string followed by a date.
+#. If applicable, replace %X with a strftime format valid for your
+#. locale, without seconds.
+#: ../js/ui/telepathyClient.js:666
+#, no-c-format
+msgid "Sent at %X on %A"
+msgstr "傳送於 %X %A"
+
+#: ../js/ui/viewSelector.js:26
+msgid "Search your computer"
+msgstr "搜尋您的電腦"
+
+#: ../js/ui/windowAttentionHandler.js:43
#, c-format
msgid "%s has finished starting"
msgstr "%s 已完成啟動"
-#: ../js/ui/windowAttentionHandler.js:47
+#: ../js/ui/windowAttentionHandler.js:45
#, c-format
msgid "'%s' is ready"
msgstr "「%s」已就緒"
-#: ../js/ui/workspacesView.js:230
+#: ../js/ui/workspacesView.js:244
msgid ""
"Can't add a new workspace because maximum workspaces limit has been reached."
msgstr "不能加入新的工作區,因為已達到最大工作區上限。"
-#: ../js/ui/workspacesView.js:247
+#: ../js/ui/workspacesView.js:260
msgid "Can't remove the first workspace."
msgstr "不能移除第一個工作區。"
-#: ../src/shell-global.c:1105
+#. translators:
+#. * The number of sound outputs on a particular device
+#: ../src/gvc/gvc-mixer-control.c:1094
+#, c-format
+msgid "%u Output"
+msgid_plural "%u Outputs"
+msgstr[0] "%u 輸出"
+
+#. translators:
+#. * The number of sound inputs on a particular device
+#: ../src/gvc/gvc-mixer-control.c:1104
+#, c-format
+msgid "%u Input"
+msgid_plural "%u Inputs"
+msgstr[0] "%u 輸入"
+
+#: ../src/gvc/gvc-mixer-control.c:1402
+msgid "System Sounds"
+msgstr "系統音效"
+
+#: ../src/shell-global.c:1233
msgid "Less than a minute ago"
msgstr "少於一分鐘之前"
-#: ../src/shell-global.c:1109
+#: ../src/shell-global.c:1237
#, c-format
msgid "%d minute ago"
msgid_plural "%d minutes ago"
msgstr[0] "%d 分鐘前"
-#: ../src/shell-global.c:1114
+#: ../src/shell-global.c:1242
#, c-format
msgid "%d hour ago"
msgid_plural "%d hours ago"
msgstr[0] "%d 小時前"
-#: ../src/shell-global.c:1119
+#: ../src/shell-global.c:1247
#, c-format
msgid "%d day ago"
msgid_plural "%d days ago"
msgstr[0] "%d 天前"
-#: ../src/shell-global.c:1124
+#: ../src/shell-global.c:1252
#, c-format
msgid "%d week ago"
msgid_plural "%d weeks ago"
msgstr[0] "%d 週前"
-#: ../src/shell-uri-util.c:89
+#: ../src/shell-util.c:89
msgid "Home Folder"
msgstr "家目錄"
#. Translators: this is the same string as the one found in
#. * nautilus
-#: ../src/shell-uri-util.c:104
+#: ../src/shell-util.c:104
msgid "File System"
msgstr "檔案系統"
-#: ../src/shell-uri-util.c:250
+#: ../src/shell-util.c:250
msgid "Search"
msgstr "搜尋"
@@ -503,7 +856,107 @@ msgstr "搜尋"
#. * example, "Trash: some-directory". It means that the
#. * directory called "some-directory" is in the trash.
#.
-#: ../src/shell-uri-util.c:300
+#: ../src/shell-util.c:300
#, c-format
msgid "%1$s: %2$s"
msgstr "%1$s:%2$s"
+
+#~ msgid "Clock"
+#~ msgstr "時鐘"
+
+#~ msgid "Customize the panel clock"
+#~ msgstr "自訂面板時鐘"
+
+#~ msgid "Custom format of the clock"
+#~ msgstr "自訂時鐘的格式"
+
+#~ msgid "Hour format"
+#~ msgstr "小時格式"
+
+#~ msgid ""
+#~ "If true and format is either \"12-hour\" or \"24-hour\", display seconds "
+#~ "in time."
+#~ msgstr "如果設為 true 且格式為「12-小時」或「24-小時」,在時刻裡顯示秒鐘。"
+
+#~ msgid ""
+#~ "This key specifies the format used by the panel clock when the format key "
+#~ "is set to \"custom\". You can use conversion specifiers understood by "
+#~ "strftime() to obtain a specific format. See the strftime() manual for "
+#~ "more information."
+#~ msgstr ""
+#~ "這個設定鍵是在面板時鐘的「format」設定鍵被設為「custom」時使用的自訂格式。"
+#~ "您可以用可被 strftime() 理解的轉換規範來取得所指定的格式。請查閱 strftime"
+#~ "() 手冊以獲取更多資訊。"
+
+#~ msgid ""
+#~ "This key specifies the hour format used by the panel clock. Possible "
+#~ "values are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to "
+#~ "\"unix\", the clock will display time in seconds since Epoch, i.e. "
+#~ "1970-01-01. If set to \"custom\", the clock will display time according "
+#~ "to the format specified in the custom_format key. Note that if set to "
+#~ "either \"unix\" or \"custom\", the show_date and show_seconds keys are "
+#~ "ignored."
+#~ msgstr ""
+#~ "這個設定值指定了面板時鐘使用的小時格式。可用的數值有「12-hour」、「24-"
+#~ "hour」、「unix」和「custom」。如果設定為「unix」,時鐘會顯示自 Epoch,即 "
+#~ "1970-01-01 以來的秒數。如果設定為「custom」,時鐘會根據 custom_format 設定"
+#~ "鍵顯示時刻。注意不管設為「unix」或「custom」,show_date 和 show_seconds 設"
+#~ "定鍵都會被忽略。"
+
+#~ msgid "Clock Format"
+#~ msgstr "時鐘格式"
+
+#~ msgid "Clock Preferences"
+#~ msgstr "時鐘偏好設定"
+
+#~ msgid "Panel Display"
+#~ msgstr "面板顯示"
+
+#~ msgid "Show seco_nds"
+#~ msgstr "顯示秒數(_N)"
+
+#~ msgid "Show the _date"
+#~ msgstr "顯示日期(_D)"
+
+#~ msgid "_12 hour format"
+#~ msgstr "_12 小時制"
+
+#~ msgid "_24 hour format"
+#~ msgstr "_24 小時制"
+
+#~ msgid "Preferences"
+#~ msgstr "偏好設定"
+
+#~ msgid "Overview workspace view mode"
+#~ msgstr "概覽工作區檢視模式"
+
+#~ msgid ""
+#~ "The selected workspace view mode in the overview. Supported values are "
+#~ "\"single\" and \"grid\"."
+#~ msgstr ""
+#~ "在概覽中選取的工作區檢視模式。支援的數值有「single」(單一)和「grid」(格"
+#~ "線)。"
+
+#~ msgid "Drag here to add favorites"
+#~ msgstr "拖放到這裡加入喜好"
+
+#~ msgid "Find"
+#~ msgstr "尋找"
+
+#~ msgid "Searching..."
+#~ msgstr "搜尋中…"
+
+#~ msgid "No matching results."
+#~ msgstr "沒有相符的結果。"
+
+#~ msgid "Invisible"
+#~ msgstr "隱形"
+
+#~ msgid "Account Information..."
+#~ msgstr "帳號資訊…"
+
+#~ msgid "ON"
+#~ msgstr "開"
+
+#~ msgid "OFF"
+#~ msgstr "關"
diff --git a/src/Makefile-st.am b/src/Makefile-st.am
index 4d5d5476e..e952a4abd 100644
--- a/src/Makefile-st.am
+++ b/src/Makefile-st.am
@@ -100,13 +100,19 @@ st_source_h = \
st/st-widget.h \
$(NULL)
-st.h: Makefile
+st.h: stamp-st.h
+ @true
+stamp-st.h: Makefile
$(AM_V_GEN) (echo "#define ST_H_INSIDE 1"; \
for name in $(st_source_h); do \
echo "#include <"$$name">"; \
- done; echo "#undef ST_H_INSIDE") > st.h.tmp && mv st.h.tmp st.h
+ done; echo "#undef ST_H_INSIDE") > $@.tmp && \
+ (cmp -s $@.tmp st.h || cp $@.tmp st.h) && \
+ rm -f $@.tmp && \
+ echo timestamp > $(@F)
BUILT_SOURCES += st.h
+CLEANFILES += stamp-st.h
st_source_private_h = \
st/st-private.h \
diff --git a/src/Makefile-tray.am b/src/Makefile-tray.am
index 6634324f8..1377e0c34 100644
--- a/src/Makefile-tray.am
+++ b/src/Makefile-tray.am
@@ -15,7 +15,6 @@ TRAY_STAMP_FILES = stamp-na-marshal.h
# please, keep this sorted alphabetically
tray_source = \
- gtk-compat.h \
tray/na-tray-child.c \
tray/na-tray-child.h \
tray/na-tray-manager.c \
diff --git a/src/Makefile.am b/src/Makefile.am
index 61b58260a..0740f0667 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -8,7 +8,7 @@ noinst_PROGRAMS =
.AUTOPARALLEL:
-bin_SCRIPTS = gnome-shell gnome-shell-clock-preferences
+bin_SCRIPTS = gnome-shell
gnome-shell: gnome-shell.in
$(AM_V_GEN) sed -e "s|@MUTTER_BIN_DIR[@]|$(MUTTER_BIN_DIR)|" \
@@ -23,15 +23,6 @@ gnome-shell: gnome-shell.in
CLEANFILES += gnome-shell
EXTRA_DIST += gnome-shell.in
-gnome-shell-clock-preferences: gnome-shell-clock-preferences.in
- $(AM_V_GEN) sed -e "s|@datadir[@]|$(datadir)|" \
- -e "s|@pkgdatadir[@]|$(pkgdatadir)|" \
- -e "s|@localedir[@]|$(datadir)/locale|" \
- -e "s|@GJS_CONSOLE[@]|$(GJS_CONSOLE)|" \
- $< > $@ && chmod a+x $@
-CLEANFILES += gnome-shell-clock-preferences
-EXTRA_DIST += gnome-shell-clock-preferences.in
-
include Makefile-gdmuser.am
include Makefile-st.am
include Makefile-tray.am
@@ -68,7 +59,6 @@ shell_public_headers_h = \
shell-embedded-window.h \
shell-generic-container.h \
shell-gtk-embed.h \
- shell-process.h \
shell-global.h \
shell-perf-log.h \
shell-slicer.h \
@@ -90,7 +80,6 @@ libgnome_shell_la_SOURCES = \
shell-window-tracker-private.h \
shell-wm-private.h \
gnome-shell-plugin.c \
- gtk-compat.h \
shell-app.c \
shell-app-system.c \
shell-app-usage.c \
@@ -100,7 +89,6 @@ libgnome_shell_la_SOURCES = \
shell-embedded-window.c \
shell-generic-container.c \
shell-gtk-embed.c \
- shell-process.c \
shell-global.c \
shell-perf-log.c \
shell-slicer.c \
diff --git a/src/gdmuser/gdm-user-manager.c b/src/gdmuser/gdm-user-manager.c
index d3df15ac7..a39bea1ca 100644
--- a/src/gdmuser/gdm-user-manager.c
+++ b/src/gdmuser/gdm-user-manager.c
@@ -3059,15 +3059,6 @@ gdm_user_manager_finalize (GObject *object)
G_OBJECT_CLASS (gdm_user_manager_parent_class)->finalize (object);
}
-static void
-gdm_user_muted_debug_log_handler (const char *log_domain,
- GLogLevelFlags log_level,
- const char *message,
- gpointer data)
-{
- /* Intentionally empty to discard message */
-}
-
/**
* gdm_user_manager_ref_default:
*
@@ -3086,11 +3077,6 @@ gdm_user_manager_ref_default (void)
user_manager_object = g_object_new (GDM_TYPE_USER_MANAGER, NULL);
g_object_add_weak_pointer (user_manager_object,
(gpointer *) &user_manager_object);
-
- /* We don't normally care about user manager messages in the shell,
- * so mute them */
- g_log_set_handler (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG,
- gdm_user_muted_debug_log_handler, NULL);
}
return GDM_USER_MANAGER (user_manager_object);
diff --git a/src/gnome-shell-clock-preferences.in b/src/gnome-shell-clock-preferences.in
deleted file mode 100644
index 76391a8e0..000000000
--- a/src/gnome-shell-clock-preferences.in
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/bin/sh
-
-if [ -f "$0.in" ]
-then
- scriptDir="`dirname $0`"
- uiDir="$scriptDir/../data"
- jsDir="$scriptDir/../js"
- schemaDir="$scriptDir/../data"
-else
- uiDir="@pkgdatadir@"
- jsDir="@pkgdatadir@/js"
- schemaDir="@datadir@/glib-2.0/schemas"
-fi
-
-progName="`basename $0`"
-localeDir="@localedir@"
-uiFile="$uiDir/clock-preferences.ui"
-export GJS_PATH="$jsDir"
-export GSETTINGS_SCHEMA_DIR="$schemaDir"
-
-@GJS_CONSOLE@ --js-version 1.8 -c "const ClockPreferences = imports.prefs.clockPreferences;
-ClockPreferences.main({ progName: '$progName',
- uiFile: '$uiFile',
- localeDir: '$localeDir' });"
diff --git a/src/gnome-shell-plugin.c b/src/gnome-shell-plugin.c
index ec23bf317..c77cbdae4 100644
--- a/src/gnome-shell-plugin.c
+++ b/src/gnome-shell-plugin.c
@@ -113,6 +113,8 @@ struct _GnomeShellPlugin
int glx_error_base;
int glx_event_base;
guint have_swap_event : 1;
+
+ ShellGlobal *global;
};
struct _GnomeShellPluginClass
@@ -299,11 +301,104 @@ add_statistics (GnomeShellPlugin *shell_plugin)
NULL, NULL);
}
+/* This is an IBus workaround. The flow of events with IBus is that every time
+ * it gets gets a key event, it:
+ *
+ * Sends it to the daemon via D-Bus asynchronously
+ * When it gets an reply, synthesizes a new GdkEvent and puts it into the
+ * GDK event queue with gdk_event_put(), including
+ * IBUS_FORWARD_MASK = 1 << 25 in the state to prevent a loop.
+ *
+ * (Normally, IBus uses the GTK+ key snooper mechanism to get the key
+ * events early, but since our key events aren't visible to GTK+ key snoopers,
+ * IBus will instead get the events via the standard
+ * GtkIMContext.filter_keypress() mechanism.)
+ *
+ * There are a number of potential problems here; probably the worst
+ * problem is that IBus doesn't forward the timestamp with the event
+ * so that every key event that gets delivered ends up with
+ * GDK_CURRENT_TIME. This creates some very subtle bugs; for example
+ * if you have IBus running and a keystroke is used to trigger
+ * launching an application, focus stealing prevention won't work
+ * right. http://code.google.com/p/ibus/issues/detail?id=1184
+ *
+ * In any case, our normal flow of key events is:
+ *
+ * GDK filter function => clutter_x11_handle_event => clutter actor
+ *
+ * So, if we see a key event that gets delivered via the GDK event handler
+ * function - then we know it must be one of these synthesized events, and
+ * we should push it back to clutter.
+ *
+ * To summarize, the full key event flow with IBus is:
+ *
+ * GDK filter function
+ * => Mutter
+ * => gnome_shell_plugin_xevent_filter()
+ * => clutter_x11_handle_event()
+ * => clutter event delivery to actor
+ * => gtk_im_context_filter_event()
+ * => sent to IBus daemon
+ * => response received from IBus daemon
+ * => gdk_event_put()
+ * => GDK event handler
+ * =>
+ * => clutter_event_put()
+ * => clutter event delivery to actor
+ *
+ * Anything else we see here we just pass on to the normal GDK event handler
+ * gtk_main_do_event().
+ */
static void
-gvc_muted_debug_log_handler (const char *log_domain,
- GLogLevelFlags log_level,
- const char *message,
- gpointer data)
+gnome_shell_gdk_event_handler (GdkEvent *event_gdk,
+ gpointer data)
+{
+ if (event_gdk->type == GDK_KEY_PRESS || event_gdk->type == GDK_KEY_RELEASE)
+ {
+ ClutterActor *stage;
+ Window stage_xwindow;
+
+ stage = clutter_stage_get_default ();
+ stage_xwindow = clutter_x11_get_stage_window (CLUTTER_STAGE (stage));
+
+ if (GDK_WINDOW_XID (event_gdk->key.window) == stage_xwindow)
+ {
+ ClutterDeviceManager *device_manager = clutter_device_manager_get_default ();
+ ClutterInputDevice *keyboard = clutter_device_manager_get_core_device (device_manager,
+ CLUTTER_KEYBOARD_DEVICE);
+
+ ClutterEvent *event_clutter = clutter_event_new ((event_gdk->type == GDK_KEY_RELEASE) ?
+ CLUTTER_KEY_PRESS : CLUTTER_KEY_RELEASE);
+ event_clutter->key.time = event_gdk->key.time;
+ event_clutter->key.flags = CLUTTER_EVENT_NONE;
+ event_clutter->key.stage = CLUTTER_STAGE (stage);
+ event_clutter->key.source = NULL;
+
+ /* This depends on ClutterModifierType and GdkModifierType being
+ * identical, which they are currently. (They both match the X
+ * modifier state in the low 16-bits and have the same extensions.) */
+ event_clutter->key.modifier_state = event_gdk->key.state;
+
+ event_clutter->key.keyval = event_gdk->key.keyval;
+ event_clutter->key.hardware_keycode = event_gdk->key.hardware_keycode;
+ event_clutter->key.unicode_value = gdk_keyval_to_unicode (event_clutter->key.keyval);
+ event_clutter->key.device = keyboard;
+
+ clutter_event_put (event_clutter);
+ clutter_event_free (event_clutter);
+
+ return;
+ }
+ }
+
+ gtk_main_do_event (event_gdk);
+}
+
+static void
+muted_log_handler (const char *log_domain,
+ GLogLevelFlags log_level,
+ const char *message,
+ gpointer data)
{
/* Intentionally empty to discard message */
}
@@ -320,7 +415,6 @@ gnome_shell_plugin_start (MetaPlugin *plugin)
int status;
const char *shell_js;
char **search_path;
- ShellGlobal *global;
const char *glx_extensions;
bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
@@ -339,6 +433,8 @@ gnome_shell_plugin_start (MetaPlugin *plugin)
NULL);
update_font_options (settings);
+ gdk_event_handler_set (gnome_shell_gdk_event_handler, plugin, NULL);
+
screen = meta_plugin_get_screen (plugin);
display = meta_screen_get_display (screen);
@@ -374,15 +470,19 @@ gnome_shell_plugin_start (MetaPlugin *plugin)
NULL);
g_strfreev(search_path);
- /* Disable the gnome-volume-control debug */
+ /* Disable debug spew from various libraries */
g_log_set_handler ("Gvc", G_LOG_LEVEL_DEBUG,
- gvc_muted_debug_log_handler, NULL);
+ muted_log_handler, NULL);
+ g_log_set_handler ("GdmUser", G_LOG_LEVEL_DEBUG,
+ muted_log_handler, NULL);
+ g_log_set_handler ("libgnome-bluetooth", G_LOG_LEVEL_DEBUG | G_LOG_LEVEL_MESSAGE,
+ muted_log_handler, NULL);
/* Initialize the global object here. */
- global = shell_global_get ();
+ shell_plugin->global = shell_global_get ();
- _shell_global_set_plugin (global, META_PLUGIN(shell_plugin));
- _shell_global_set_gjs_context (global, shell_plugin->gjs_context);
+ _shell_global_set_plugin (shell_plugin->global, META_PLUGIN(shell_plugin));
+ _shell_global_set_gjs_context (shell_plugin->global, shell_plugin->gjs_context);
add_statistics (shell_plugin);
@@ -511,9 +611,9 @@ static gboolean
gnome_shell_plugin_xevent_filter (MetaPlugin *plugin,
XEvent *xev)
{
-#ifdef GLX_INTEL_swap_event
- GnomeShellPlugin *shell_plugin = GNOME_SHELL_PLUGIN (plugin);
+ GnomeShellPlugin *shell_plugin = GNOME_SHELL_PLUGIN (plugin);
+#ifdef GLX_INTEL_swap_event
if (shell_plugin->have_swap_event &&
xev->type == (shell_plugin->glx_event_base + GLX_BufferSwapComplete))
{
@@ -545,6 +645,12 @@ gnome_shell_plugin_xevent_filter (MetaPlugin *plugin,
&& xev->xcrossing.window == clutter_x11_get_stage_window (CLUTTER_STAGE (clutter_stage_get_default ())))
return TRUE;
+ /*
+ * Pass the event to shell-global
+ */
+ if (_shell_global_check_xdnd_event (shell_plugin->global, xev))
+ return TRUE;
+
return clutter_x11_handle_event (xev) != CLUTTER_X11_FILTER_CONTINUE;
}
diff --git a/src/gnome-shell.in b/src/gnome-shell.in
index 2abd7d5cc..8500d98cb 100755
--- a/src/gnome-shell.in
+++ b/src/gnome-shell.in
@@ -152,7 +152,7 @@ def start_dconf_await_service():
# dconf is linked without libtool, so unlike other GNOME modules,
# won't have an embedded rpath for its library directory.
env = dict(os.environ)
- if 'LD_LIBRARY_PATH' in env:
+ if 'LD_LIBRARY_PATH' in env and env['LD_LIBRARY_PATH']:
ld_library_path = '@libdir@:' + env['LD_LIBRARY_PATH']
else:
ld_library_path = '@libdir@'
@@ -246,7 +246,7 @@ def start_shell(perf_output=None):
if pkgconfig.returncode == 0:
mozjs_libdir = re.sub('-(sdk|devel)', '', mozjs_sdkdir)
if os.path.exists(mozjs_libdir + '/libmozjs.so'):
- if 'LD_LIBRARY_PATH' in env:
+ if 'LD_LIBRARY_PATH' in env and env['LD_LIBRARY_PATH']:
ld_library_path = env['LD_LIBRARY_PATH'] + ':' + mozjs_libdir
else:
ld_library_path = mozjs_libdir
@@ -672,7 +672,8 @@ use an extension title clicktofocus@janedoe.example.com.'''
os.makedirs(extension_path)
meta = { 'name': name,
'description': description,
- 'uuid': uuid }
+ 'uuid': uuid,
+ 'shell-version': ['@VERSION@'] }
f = open(os.path.join(extension_path, 'metadata.json'), 'w')
try:
json.dump(meta, f)
diff --git a/src/gtk-compat.h b/src/gtk-compat.h
deleted file mode 100644
index 9515205ab..000000000
--- a/src/gtk-compat.h
+++ /dev/null
@@ -1,19 +0,0 @@
-#ifndef __GTK_COMPAT_H__
-#define __GTK_COMPAT_H__
-
-#include
-
-/* Provide a compatibility layer for accessor functions introduced
- * in GTK+ 2.20 which we need to build with GSEAL_ENABLE.
- * That way it is still possible to build with GTK+ 2.18 when not
- * using GSEAL_ENABLE
- */
-
-#if !GTK_CHECK_VERSION(2, 20, 0)
-
-#define gtk_widget_get_realized(w) GTK_WIDGET_REALIZED (w)
-#define gtk_widget_get_mapped(w) GTK_WIDGET_MAPPED (w)
-
-#endif /* GTK_CHECK_VERSION(2, 20, 0) */
-
-#endif /* __GTK_COMPAT_H__ */
diff --git a/src/shell-app-system.h b/src/shell-app-system.h
index 696972b11..07684b791 100644
--- a/src/shell-app-system.h
+++ b/src/shell-app-system.h
@@ -34,63 +34,69 @@ struct _ShellAppSystemClass
void (*favorites_changed)(ShellAppSystem *appsys, gpointer user_data);
};
-GType shell_app_system_get_type (void) G_GNUC_CONST;
-ShellAppSystem* shell_app_system_get_default(void);
+GType shell_app_system_get_type (void) G_GNUC_CONST;
+ShellAppSystem *shell_app_system_get_default (void);
typedef struct _ShellAppInfo ShellAppInfo;
#define SHELL_TYPE_APP_INFO (shell_app_info_get_type ())
-GType shell_app_info_get_type (void);
+GType shell_app_info_get_type (void);
-ShellAppInfo* shell_app_info_ref (ShellAppInfo *info);
-void shell_app_info_unref (ShellAppInfo *info);
+ShellAppInfo *shell_app_info_ref (ShellAppInfo *info);
+void shell_app_info_unref (ShellAppInfo *info);
-const char *shell_app_info_get_id (ShellAppInfo *info);
-char *shell_app_info_get_name (ShellAppInfo *info);
-char *shell_app_info_get_description (ShellAppInfo *info);
-char *shell_app_info_get_executable (ShellAppInfo *info);
-char *shell_app_info_get_desktop_file_path (ShellAppInfo *info);
-GIcon *shell_app_info_get_icon (ShellAppInfo *info);
-ClutterActor *shell_app_info_create_icon_texture (ShellAppInfo *info, float size);
-char *shell_app_info_get_section (ShellAppInfo *info);
-gboolean shell_app_info_get_is_nodisplay (ShellAppInfo *info);
-gboolean shell_app_info_is_transient (ShellAppInfo *info);
+const char *shell_app_info_get_id (ShellAppInfo *info);
+char *shell_app_info_get_name (ShellAppInfo *info);
+char *shell_app_info_get_description (ShellAppInfo *info);
+char *shell_app_info_get_executable (ShellAppInfo *info);
+char *shell_app_info_get_desktop_file_path (ShellAppInfo *info);
+GIcon *shell_app_info_get_icon (ShellAppInfo *info);
+ClutterActor *shell_app_info_create_icon_texture (ShellAppInfo *info,
+ float size);
+char *shell_app_info_get_section (ShellAppInfo *info);
+gboolean shell_app_info_get_is_nodisplay (ShellAppInfo *info);
+gboolean shell_app_info_is_transient (ShellAppInfo *info);
+MetaWindow *shell_app_info_get_source_window (ShellAppInfo *info);
-MetaWindow *shell_app_info_get_source_window (ShellAppInfo *info);
+gboolean shell_app_info_launch (ShellAppInfo *info,
+ GError **error);
+gboolean shell_app_info_launch_full (ShellAppInfo *info,
+ guint timestamp,
+ GList *uris,
+ int workspace,
+ char **startup_id,
+ GError **error);
-gboolean shell_app_info_launch_full (ShellAppInfo *info,
- guint timestamp,
- GList *uris,
- int workspace,
- char **startup_id,
- GError **error);
-gboolean shell_app_info_launch (ShellAppInfo *info,
- GError **error);
-ShellAppInfo *shell_app_system_load_from_desktop_file (ShellAppSystem *system, const char *filename, GError **error);
+GList *shell_app_system_get_sections (ShellAppSystem *system);
+GSList *shell_app_system_get_flattened_apps (ShellAppSystem *system);
+GSList *shell_app_system_get_all_settings (ShellAppSystem *system);
-GList *shell_app_system_get_sections (ShellAppSystem *system);
-ShellApp *shell_app_system_get_app (ShellAppSystem *system, const char *id);
-ShellApp *shell_app_system_get_app_for_path (ShellAppSystem *system, const char *desktop_path);
-ShellApp *shell_app_system_get_app_for_window (ShellAppSystem *self, MetaWindow *window);
+ShellApp *shell_app_system_get_app (ShellAppSystem *system,
+ const char *id);
+ShellApp *shell_app_system_get_app_for_path (ShellAppSystem *system,
+ const char *desktop_path);
+ShellApp *shell_app_system_get_app_for_window (ShellAppSystem *self,
+ MetaWindow *window);
+ShellApp *shell_app_system_lookup_heuristic_basename (ShellAppSystem *system,
+ const char *id);
-void _shell_app_system_register_app (ShellAppSystem *self, ShellApp *app);
+ShellAppInfo *shell_app_system_load_from_desktop_file (ShellAppSystem *system,
+ const char *filename,
+ GError **error);
+ShellAppInfo *shell_app_system_create_from_window (ShellAppSystem *system,
+ MetaWindow *window);
-ShellApp *shell_app_system_lookup_heuristic_basename (ShellAppSystem *system, const char *id);
+GSList *shell_app_system_initial_search (ShellAppSystem *system,
+ gboolean prefs,
+ GSList *terms);
+GSList *shell_app_system_subsearch (ShellAppSystem *system,
+ gboolean prefs,
+ GSList *previous_results,
+ GSList *terms);
-ShellAppInfo *shell_app_system_create_from_window (ShellAppSystem *system, MetaWindow *window);
-
-GSList *shell_app_system_get_flattened_apps (ShellAppSystem *system);
-
-GSList *shell_app_system_get_all_settings (ShellAppSystem *system);
-
-GSList *shell_app_system_initial_search (ShellAppSystem *system,
- gboolean prefs,
- GSList *terms);
-
-GSList *shell_app_system_subsearch (ShellAppSystem *system,
- gboolean prefs,
- GSList *previous_results,
- GSList *terms);
+/* internal API */
+void _shell_app_system_register_app (ShellAppSystem *self,
+ ShellApp *app);
#endif /* __SHELL_APP_SYSTEM_H__ */
diff --git a/src/shell-app.c b/src/shell-app.c
index fae61c4d4..0f733a429 100644
--- a/src/shell-app.c
+++ b/src/shell-app.c
@@ -577,7 +577,8 @@ shell_app_is_on_workspace (ShellApp *app,
if (shell_app_get_state (app) == SHELL_APP_STATE_STARTING)
{
- if (meta_workspace_index (workspace) == app->started_on_workspace)
+ if (app->started_on_workspace == -1 ||
+ meta_workspace_index (workspace) == app->started_on_workspace)
return TRUE;
else
return FALSE;
diff --git a/src/shell-embedded-window.c b/src/shell-embedded-window.c
index 01a5a4d27..a87844842 100644
--- a/src/shell-embedded-window.c
+++ b/src/shell-embedded-window.c
@@ -6,7 +6,6 @@
#include
#include "shell-embedded-window-private.h"
-#include "gtk-compat.h"
/* This type is a subclass of GtkWindow that ties the window to a
* ShellGtkEmbed; the window is reparented into the stage
diff --git a/src/shell-generic-container.c b/src/shell-generic-container.c
index 8be3a96c5..c54ebf278 100644
--- a/src/shell-generic-container.c
+++ b/src/shell-generic-container.c
@@ -233,6 +233,8 @@ shell_generic_container_set_skip_paint (ShellGenericContainer *self,
g_hash_table_remove (self->priv->skip_paint, child);
else
g_hash_table_insert (self->priv->skip_paint, child, child);
+
+ clutter_actor_queue_redraw (CLUTTER_ACTOR (self));
}
static void
diff --git a/src/shell-global-private.h b/src/shell-global-private.h
index 201ace86d..e17514530 100644
--- a/src/shell-global-private.h
+++ b/src/shell-global-private.h
@@ -11,4 +11,6 @@ void _shell_global_set_plugin (ShellGlobal *global,
void _shell_global_set_gjs_context (ShellGlobal *global,
GjsContext *context);
+gboolean _shell_global_check_xdnd_event (ShellGlobal *global,
+ XEvent *xev);
#endif /* __SHELL_GLOBAL_PRIVATE_H__ */
diff --git a/src/shell-global.c b/src/shell-global.c
index 71eb72895..8e0463ddd 100644
--- a/src/shell-global.c
+++ b/src/shell-global.c
@@ -6,6 +6,7 @@
#include "shell-enum-types.h"
#include "shell-perf-log.h"
#include "shell-window-tracker.h"
+#include "shell-marshal.h"
#include "shell-wm.h"
#include "st.h"
@@ -26,6 +27,9 @@
#include
#include
#include
+#include
+#include
+#include
#ifdef HAVE_SYS_RESOURCE_H
#include
#endif
@@ -70,6 +74,8 @@ struct _ShellGlobal {
/* For sound notifications */
ca_context *sound_context;
+
+ guint32 xdnd_timestamp;
};
enum {
@@ -92,8 +98,19 @@ enum {
PROP_FOCUS_MANAGER,
};
+/* Signals */
+enum
+{
+ XDND_POSITION_CHANGED,
+ XDND_LEAVE,
+ XDND_ENTER,
+ LAST_SIGNAL
+};
+
G_DEFINE_TYPE(ShellGlobal, shell_global, G_TYPE_OBJECT);
+static guint shell_global_signals [LAST_SIGNAL] = { 0 };
+
static void
shell_global_set_property(GObject *object,
guint prop_id,
@@ -238,6 +255,36 @@ shell_global_class_init (ShellGlobalClass *klass)
gobject_class->get_property = shell_global_get_property;
gobject_class->set_property = shell_global_set_property;
+ /* Emitted from gnome-shell-plugin.c during event handling */
+ shell_global_signals[XDND_POSITION_CHANGED] =
+ g_signal_new ("xdnd-position-changed",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ _shell_marshal_VOID__INT_INT,
+ G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_INT);
+
+ /* Emitted from gnome-shell-plugin.c during event handling */
+ shell_global_signals[XDND_LEAVE] =
+ g_signal_new ("xdnd-leave",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ /* Emitted from gnome-shell-plugin.c during event handling */
+ shell_global_signals[XDND_ENTER] =
+ g_signal_new ("xdnd-enter",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
g_object_class_install_property (gobject_class,
PROP_OVERLAY_GROUP,
g_param_spec_object ("overlay-group",
@@ -530,7 +577,8 @@ shell_global_set_cursor (ShellGlobal *global,
{
ClutterStage *stage = CLUTTER_STAGE (meta_plugin_get_stage (global->plugin));
- global->stage_window = gdk_window_foreign_new (clutter_x11_get_stage_window (stage));
+ global->stage_window = gdk_x11_window_foreign_new_for_display (gdk_display_get_default (),
+ clutter_x11_get_stage_window (stage));
}
gdk_window_set_cursor (global->stage_window, cursor);
@@ -1025,6 +1073,136 @@ shell_global_breakpoint (ShellGlobal *global)
G_BREAKPOINT ();
}
+/**
+ * shell_global_parse_search_provider:
+ * @global: A #ShellGlobal
+ * @data: description of provider
+ * @name: (out): location to store a display name
+ * @url: (out): location to store template of url
+ * @langs: (out) (transfer full) (element-type utf8): list of supported languages
+ * @icon_data_uri: (out): location to store uri
+ * @error: location to store GError
+ *
+ * Returns: %TRUE on success
+ */
+gboolean
+shell_global_parse_search_provider (ShellGlobal *global,
+ const char *data,
+ char **name,
+ char **url,
+ GList **langs,
+ char **icon_data_uri,
+ GError **error)
+{
+ xmlDocPtr doc = xmlParseMemory (data, strlen(data));
+ xmlNode *root;
+
+ *name = NULL;
+ *url = NULL;
+ *icon_data_uri = NULL;
+ *langs = NULL;
+
+ if (!doc)
+ {
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "Malformed xml");
+ return FALSE;
+ }
+
+ root = xmlDocGetRootElement (doc);
+ if (root && root->name && xmlStrcmp (root->name, (const xmlChar *)"OpenSearchDescription") == 0)
+ {
+ xmlNode *child;
+ for (child = root->children; child; child = child->next)
+ {
+ if (!child->name)
+ continue;
+ if (xmlStrcmp (child->name, (const xmlChar *)"Language") == 0)
+ {
+ xmlChar *val = xmlNodeListGetString(doc, child->xmlChildrenNode, 1);
+ if (!val)
+ continue;
+ *langs = g_list_append (*langs, g_strdup ((char *)val));
+ xmlFree (val);
+ }
+ if (!*name && xmlStrcmp (child->name, (const xmlChar *)"ShortName") == 0)
+ {
+ xmlChar *val = xmlNodeListGetString(doc, child->xmlChildrenNode, 1);
+ *name = g_strdup ((char *)val);
+ xmlFree (val);
+ }
+ if (!*icon_data_uri && xmlStrcmp (child->name, (const xmlChar *)"Image") == 0)
+ {
+ xmlChar *val = xmlNodeListGetString(doc, child->xmlChildrenNode, 1);
+ if (val)
+ *icon_data_uri = g_strdup ((char *)val);
+ xmlFree (val);
+ }
+ if (!*url && xmlStrcmp (child->name, (const xmlChar *)"Url") == 0)
+ {
+ xmlChar *template;
+ xmlChar *type;
+
+ type = xmlGetProp(child, (const xmlChar *)"type");
+ if (!type)
+ continue;
+
+ if (xmlStrcmp (type, (const xmlChar *)"text/html") != 0)
+ {
+ xmlFree (type);
+ continue;
+ }
+ xmlFree (type);
+
+ template = xmlGetProp(child, (const xmlChar *)"template");
+ if (!template)
+ continue;
+ *url = g_strdup ((char *)template);
+ xmlFree (template);
+ }
+ }
+ }
+ else
+ {
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "Invalid OpenSearch document");
+ xmlFreeDoc (doc);
+ return FALSE;
+ }
+ xmlFreeDoc (doc);
+ if (*icon_data_uri && *name && *url)
+ return TRUE;
+
+ if (*icon_data_uri)
+ g_free (*icon_data_uri);
+ else
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
+ "search provider doesn't have icon");
+
+ if (*name)
+ g_free (*name);
+ else if (error && !*error)
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
+ "search provider doesn't have ShortName");
+
+ if (*url)
+ g_free (*url);
+ else if (error && !*error)
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
+ "search provider doesn't have template for url");
+
+ if (*langs)
+ {
+ g_list_foreach (*langs, (GFunc)g_free, NULL);
+ g_list_free (*langs);
+ }
+
+ *url = NULL;
+ *name = NULL;
+ *icon_data_uri = NULL;
+ *langs = NULL;
+
+ return FALSE;
+}
+
/**
* shell_global_gc:
* @global: A #ShellGlobal
@@ -1129,6 +1307,39 @@ grab_notify (GtkWidget *widget, gboolean was_grabbed, gpointer user_data)
shell_global_set_stage_input_mode (global, global->input_mode);
}
+/**
+ * shell_global_init_xdnd:
+ * @global: the #ShellGlobal
+ *
+ * Enables tracking of Xdnd events
+ */
+void shell_global_init_xdnd (ShellGlobal *global)
+{
+ long xdnd_version = 5;
+
+ MetaScreen *screen = shell_global_get_screen (global);
+ Window output_window = meta_get_overlay_window (screen);
+
+ MetaDisplay *display = meta_screen_get_display (screen);
+ Display *xdisplay = meta_display_get_xdisplay (display);
+
+ ClutterStage *stage = CLUTTER_STAGE(meta_plugin_get_stage (global->plugin));
+ Window stage_win = clutter_x11_get_stage_window (stage);
+
+ XChangeProperty (xdisplay, stage_win, gdk_x11_get_xatom_by_name ("XdndAware"), XA_ATOM,
+ 32, PropModeReplace, (const unsigned char *)&xdnd_version, 1);
+
+ XChangeProperty (xdisplay, output_window, gdk_x11_get_xatom_by_name ("XdndProxy"), XA_WINDOW,
+ 32, PropModeReplace, (const unsigned char *)&stage_win, 1);
+
+ /*
+ * XdndProxy is additionally set on the proxy window as verification that the
+ * XdndProxy property on the target window isn't a left-over
+ */
+ XChangeProperty (xdisplay, stage_win, gdk_x11_get_xatom_by_name ("XdndProxy"), XA_WINDOW,
+ 32, PropModeReplace, (const unsigned char *)&stage_win, 1);
+}
+
/**
* shell_global_format_time_relative_pretty:
* @global:
@@ -1421,6 +1632,10 @@ shell_global_get_current_time (ShellGlobal *global)
guint32 time;
MetaDisplay *display;
+ /* In case we have a xdnd timestamp use it */
+ if (global->xdnd_timestamp != 0)
+ return global->xdnd_timestamp;
+
/* meta_display_get_current_time() will return the correct time
when handling an X or Gdk event, but will return CurrentTime
from some Clutter event callbacks.
@@ -1688,3 +1903,67 @@ shell_global_play_theme_sound (ShellGlobal *global,
{
ca_context_play (global->sound_context, 0, CA_PROP_EVENT_ID, name, NULL);
}
+
+/*
+ * Process Xdnd events
+ *
+ * We pass the position and leave events to JS via a signal
+ * where the actual drag & drop handling happens.
+ *
+ * http://www.freedesktop.org/wiki/Specifications/XDND
+ */
+gboolean _shell_global_check_xdnd_event (ShellGlobal *global,
+ XEvent *xev)
+{
+ MetaScreen *screen = meta_plugin_get_screen (global->plugin);
+ Window output_window = meta_get_overlay_window (screen);
+ MetaDisplay *display = meta_screen_get_display (screen);
+ Display *xdisplay = meta_display_get_xdisplay (display);
+
+ ClutterStage *stage = CLUTTER_STAGE (meta_plugin_get_stage (global->plugin));
+ Window stage_win = clutter_x11_get_stage_window (stage);
+
+ if (xev->xany.window != output_window && xev->xany.window != stage_win)
+ return FALSE;
+
+ if (xev->xany.type == ClientMessage && xev->xclient.message_type == gdk_x11_get_xatom_by_name ("XdndPosition"))
+ {
+ XEvent xevent;
+ Window src = xev->xclient.data.l[0];
+
+ memset (&xevent, 0, sizeof(xevent));
+ xevent.xany.type = ClientMessage;
+ xevent.xany.display = xdisplay;
+ xevent.xclient.window = src;
+ xevent.xclient.message_type = gdk_x11_get_xatom_by_name ("XdndStatus");
+ xevent.xclient.format = 32;
+ xevent.xclient.data.l[0] = output_window;
+ /* flags: bit 0: will we accept the drop? bit 1: do we want more position messages */
+ xevent.xclient.data.l[1] = 2;
+ xevent.xclient.data.l[4] = None;
+
+ XSendEvent (xdisplay, src, False, 0, &xevent);
+
+ /* Store the timestamp of the xdnd position event */
+ global->xdnd_timestamp = xev->xclient.data.l[3];
+ g_signal_emit_by_name (G_OBJECT (global), "xdnd-position-changed",
+ (int)(xev->xclient.data.l[2] >> 16), (int)(xev->xclient.data.l[2] & 0xFFFF));
+ global->xdnd_timestamp = 0;
+
+ return TRUE;
+ }
+ else if (xev->xany.type == ClientMessage && xev->xclient.message_type == gdk_x11_get_xatom_by_name ("XdndLeave"))
+ {
+ g_signal_emit_by_name (G_OBJECT (global), "xdnd-leave");
+
+ return TRUE;
+ }
+ else if (xev->xany.type == ClientMessage && xev->xclient.message_type == gdk_x11_get_xatom_by_name ("XdndEnter"))
+ {
+ g_signal_emit_by_name (G_OBJECT (global), "xdnd-enter");
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
diff --git a/src/shell-global.h b/src/shell-global.h
index 91a82c454..1afbdc465 100644
--- a/src/shell-global.h
+++ b/src/shell-global.h
@@ -84,6 +84,14 @@ void shell_global_reexec_self (ShellGlobal *global);
void shell_global_breakpoint (ShellGlobal *global);
+gboolean shell_global_parse_search_provider (ShellGlobal *global,
+ const char *data,
+ char **name,
+ char **url,
+ GList **langs,
+ char **icon_data_uri,
+ GError **error);
+
void shell_global_gc (ShellGlobal *global);
void shell_global_maybe_gc (ShellGlobal *global);
@@ -132,6 +140,8 @@ void shell_global_run_at_leisure (ShellGlobal *global,
void shell_global_play_theme_sound (ShellGlobal *global,
const char *name);
+void shell_global_init_xdnd (ShellGlobal *global);
+
G_END_DECLS
#endif /* __SHELL_GLOBAL_H__ */
diff --git a/src/shell-gtk-embed.c b/src/shell-gtk-embed.c
index a7c7bbe10..f1caa93c1 100644
--- a/src/shell-gtk-embed.c
+++ b/src/shell-gtk-embed.c
@@ -3,7 +3,6 @@
#include "config.h"
#include "shell-embedded-window-private.h"
-#include "gtk-compat.h"
#include
@@ -167,25 +166,19 @@ shell_gtk_embed_get_preferred_height (ClutterActor *actor,
}
static void
-shell_gtk_embed_paint (ClutterActor *actor)
+shell_gtk_embed_allocate (ClutterActor *actor,
+ const ClutterActorBox *box,
+ ClutterAllocationFlags flags)
{
ShellGtkEmbed *embed = SHELL_GTK_EMBED (actor);
float wx = 0.0, wy = 0.0, x, y, ax, ay;
- float w, h;
- CLUTTER_ACTOR_CLASS (shell_gtk_embed_parent_class)->paint (actor);
+ CLUTTER_ACTOR_CLASS (shell_gtk_embed_parent_class)->
+ allocate (actor, box, flags);
- if (!embed->priv->window)
- return;
-
- /* Move the X window to the same position as the actor; it's much
- * easier to just do this from paint() than it is to tray to track
- * the position and allocation of @embed and each of its ancestors
- * as they change. We don't use get_transformed_position() here
- * because we know that the icon isn't scaled or rotated, and so
- * it's faster to avoid the floating-point transformations.
+ /* Find the actor's new coordinates in terms of the stage (which is
+ * priv->window's parent window.
*/
- clutter_actor_get_size (actor, &w, &h);
while (actor)
{
clutter_actor_get_position (actor, &x, &y);
@@ -199,7 +192,8 @@ shell_gtk_embed_paint (ClutterActor *actor)
_shell_embedded_window_allocate (embed->priv->window,
(int)(0.5 + wx), (int)(0.5 + wy),
- w, h);
+ box->x2 - box->x1,
+ box->y2 - box->y1);
}
static void
@@ -246,7 +240,7 @@ shell_gtk_embed_class_init (ShellGtkEmbedClass *klass)
actor_class->get_preferred_width = shell_gtk_embed_get_preferred_width;
actor_class->get_preferred_height = shell_gtk_embed_get_preferred_height;
- actor_class->paint = shell_gtk_embed_paint;
+ actor_class->allocate = shell_gtk_embed_allocate;
actor_class->realize = shell_gtk_embed_realize;
actor_class->unrealize = shell_gtk_embed_unrealize;
diff --git a/src/shell-marshal.list b/src/shell-marshal.list
index 588693dc1..34d107884 100644
--- a/src/shell-marshal.list
+++ b/src/shell-marshal.list
@@ -4,3 +4,4 @@ VOID:BOXED
VOID:BOXED,OBJECT
VOID:OBJECT,OBJECT
VOID:STRING,OBJECT,BOOLEAN
+VOID:INT,INT
diff --git a/src/shell-process.c b/src/shell-process.c
deleted file mode 100644
index afa3abdf6..000000000
--- a/src/shell-process.c
+++ /dev/null
@@ -1,129 +0,0 @@
-/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
-
-#include "config.h"
-
-#include "shell-process.h"
-
-#include
-#include
-
-struct _ShellProcessPrivate {
- char **args;
- GPid pid;
-};
-
-enum {
- PROP_0,
- PROP_ARGS,
-};
-
-static void shell_process_dispose (GObject *object);
-static void shell_process_finalize (GObject *object);
-static void shell_process_set_property ( GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec );
-static void shell_process_get_property( GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec );
-
-G_DEFINE_TYPE( ShellProcess, shell_process, G_TYPE_OBJECT);
-
-static void shell_process_class_init( ShellProcessClass *klass)
-{
- GObjectClass *gobject_class = (GObjectClass *)klass;
-
- gobject_class->dispose = shell_process_dispose;
- gobject_class->finalize = shell_process_finalize;
- gobject_class->set_property = shell_process_set_property;
- gobject_class->get_property = shell_process_get_property;
-
- g_object_class_install_property (gobject_class,
- PROP_ARGS,
- g_param_spec_boxed ("args",
- "Arguments",
- "",
- G_TYPE_STRV,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-
-}
-
-static void shell_process_init (ShellProcess *self)
-{
- self->priv = g_new0 (ShellProcessPrivate, 1);
-}
-
-static void shell_process_dispose (GObject *object)
-{
- G_OBJECT_CLASS (shell_process_parent_class)->dispose(object);
-}
-
-static void shell_process_finalize (GObject *object)
-{
- ShellProcess *self = (ShellProcess*)object;
-
- g_free (self->priv);
- g_signal_handlers_destroy(object);
- G_OBJECT_CLASS (shell_process_parent_class)->finalize(object);
-}
-static void shell_process_set_property ( GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec )
-{
- ShellProcess* self = SHELL_PROCESS(object);
- switch (property_id) {
- case PROP_ARGS:
- self->priv->args = (char**) g_value_dup_boxed (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-
-static void shell_process_get_property ( GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec )
-{
- ShellProcess* self = SHELL_PROCESS(object);
- switch (property_id) {
- case PROP_ARGS:
- g_value_set_boxed (value, self->priv->args);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-ShellProcess* shell_process_new(char **args)
-{
- return (ShellProcess*) g_object_new(SHELL_TYPE_PROCESS,
- "args", args,
- NULL);
-}
-
-gboolean
-shell_process_run (ShellProcess *self,
- GError **error)
-{
- return g_spawn_async (NULL, self->priv->args, NULL,
- G_SPAWN_SEARCH_PATH, NULL, NULL,
- &self->priv->pid,
- error);
-}
-/*
-int
-shell_process_wait (ShellProcess *self)
-{
- int status;
-
- waitpid ((pid_t) self->priv->pid, &status, 0);
-
- return status;
-}
-*/
diff --git a/src/shell-process.h b/src/shell-process.h
deleted file mode 100644
index ef6b2a878..000000000
--- a/src/shell-process.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
-#ifndef __SHELL_PROCESS_H__
-#define __SHELL_PROCESS_H__
-
-#include
-
-#define SHELL_TYPE_PROCESS (shell_process_get_type ())
-#define SHELL_PROCESS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SHELL_TYPE_PROCESS, ShellProcess))
-#define SHELL_PROCESS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_PROCESS, ShellProcessClass))
-#define SHELL_IS_PROCESS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SHELL_TYPE_PROCESS))
-#define SHELL_IS_PROCESS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_PROCESS))
-#define SHELL_PROCESS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_PROCESS, ShellProcessClass))
-
-typedef struct _ShellProcess ShellProcess;
-typedef struct _ShellProcessClass ShellProcessClass;
-
-typedef struct _ShellProcessPrivate ShellProcessPrivate;
-
-struct _ShellProcess
-{
- GObject parent;
-
- ShellProcessPrivate *priv;
-};
-
-struct _ShellProcessClass
-{
- GObjectClass parent_class;
-
-};
-
-GType shell_process_get_type (void) G_GNUC_CONST;
-ShellProcess* shell_process_new(char **args);
-
-gboolean shell_process_run (ShellProcess *process, GError **error);
-
-#endif /* __SHELL_PROCESS_H__ */
diff --git a/src/shell-tray-icon.c b/src/shell-tray-icon.c
index dce8630f7..079a48e51 100644
--- a/src/shell-tray-icon.c
+++ b/src/shell-tray-icon.c
@@ -5,7 +5,6 @@
#include "shell-tray-icon.h"
#include "shell-gtk-embed.h"
#include "shell-window-tracker.h"
-#include "gtk-compat.h"
#include "tray/na-tray-child.h"
#include
#include "st.h"
diff --git a/src/shell-tray-manager.c b/src/shell-tray-manager.c
index ec6c8aeee..370297ffa 100644
--- a/src/shell-tray-manager.c
+++ b/src/shell-tray-manager.c
@@ -198,6 +198,7 @@ shell_tray_manager_manage_stage (ShellTrayManager *manager,
{
Window stage_xwindow;
GdkWindow *stage_window;
+ GdkDisplay *display;
GdkScreen *screen;
g_return_if_fail (manager->priv->stage == NULL);
@@ -212,13 +213,15 @@ shell_tray_manager_manage_stage (ShellTrayManager *manager,
* in in some way. (The Clutter/Mutter combo is currently incapable
* of multi-screen operation, so alternatively we could just assume
* that clutter_x11_get_default_screen() gives us the right
- * screen.)
+ * screen.) We assume, in any case, that we are using the default
+ * GDK display.
*/
- stage_window = gdk_window_lookup (stage_xwindow);
+ display = gdk_display_get_default();
+ stage_window = gdk_x11_window_lookup_for_display (display, stage_xwindow);
if (stage_window)
g_object_ref (stage_window);
else
- stage_window = gdk_window_foreign_new (stage_xwindow);
+ stage_window = gdk_x11_window_foreign_new_for_display (display, stage_xwindow);
screen = gdk_window_get_screen (stage_window);
diff --git a/src/st/st-box-layout.c b/src/st/st-box-layout.c
index ae26cd76d..0aa5ef2e8 100644
--- a/src/st/st-box-layout.c
+++ b/src/st/st-box-layout.c
@@ -1213,3 +1213,14 @@ st_box_layout_insert_actor (StBoxLayout *self,
clutter_container_add_actor((ClutterContainer*) self, actor);
st_container_move_child (ST_CONTAINER (self), actor, pos);
}
+
+void
+st_box_layout_insert_before (StBoxLayout *self,
+ ClutterActor *actor,
+ ClutterActor *sibling)
+{
+ g_return_if_fail (ST_IS_BOX_LAYOUT (self));
+
+ clutter_container_add_actor(CLUTTER_CONTAINER (self), actor);
+ st_container_move_before (ST_CONTAINER (self), actor, sibling);
+}
diff --git a/src/st/st-box-layout.h b/src/st/st-box-layout.h
index 54372d53c..f19a065d0 100644
--- a/src/st/st-box-layout.h
+++ b/src/st/st-box-layout.h
@@ -90,6 +90,10 @@ void st_box_layout_insert_actor (StBoxLayout *self,
ClutterActor *actor,
int pos);
+void st_box_layout_insert_before (StBoxLayout *self,
+ ClutterActor *actor,
+ ClutterActor *sibling);
+
G_END_DECLS
#endif /* _ST_BOX_LAYOUT_H */
diff --git a/src/st/st-container.c b/src/st/st-container.c
index 4d140a16a..0fb5eb462 100644
--- a/src/st/st-container.c
+++ b/src/st/st-container.c
@@ -159,6 +159,29 @@ st_container_move_child (StContainer *container,
clutter_actor_queue_relayout ((ClutterActor*) container);
}
+void
+st_container_move_before (StContainer *container,
+ ClutterActor *actor,
+ ClutterActor *sibling)
+{
+ StContainerPrivate *priv = container->priv;
+ GList *actor_item = NULL;
+ GList *sibling_item = NULL;
+
+ actor_item = g_list_find (priv->children, actor);
+ sibling_item = g_list_find (priv->children, sibling);
+
+ g_return_if_fail (actor_item != NULL);
+ g_return_if_fail (sibling_item != NULL);
+
+ priv->children = g_list_delete_link (priv->children, actor_item);
+ priv->children = g_list_insert_before (priv->children, sibling_item, actor);
+
+ st_container_update_pseudo_classes (container);
+
+ clutter_actor_queue_relayout (CLUTTER_ACTOR (container));
+}
+
/**
* st_container_get_children_list:
* @container: An #StContainer
diff --git a/src/st/st-container.h b/src/st/st-container.h
index f5f04aa09..91f457f26 100644
--- a/src/st/st-container.h
+++ b/src/st/st-container.h
@@ -62,6 +62,9 @@ GList * st_container_get_focus_chain (StContainer *container);
void st_container_move_child (StContainer *container,
ClutterActor *actor,
int pos);
+void st_container_move_before (StContainer *container,
+ ClutterActor *actor,
+ ClutterActor *sibling);
GList * st_container_get_children_list (StContainer *container);
G_END_DECLS
diff --git a/src/st/st-icon.c b/src/st/st-icon.c
index 7235dc1a8..6101107f1 100644
--- a/src/st/st-icon.c
+++ b/src/st/st-icon.c
@@ -149,7 +149,7 @@ st_icon_dispose (GObject *gobject)
{
clutter_actor_destroy (priv->pending_texture);
g_object_unref (priv->pending_texture);
- priv->icon_texture = NULL;
+ priv->pending_texture = NULL;
}
if (priv->gicon)
diff --git a/src/st/st-im-text.c b/src/st/st-im-text.c
index 2b3f0fd21..c2a0bf55a 100644
--- a/src/st/st-im-text.c
+++ b/src/st/st-im-text.c
@@ -61,6 +61,7 @@
#include
#include
#include
+#include
#include
#include "st-im-text.h"
@@ -200,11 +201,11 @@ window_for_actor (ClutterActor *actor)
stage = clutter_actor_get_stage (actor);
xwindow = clutter_x11_get_stage_window ((ClutterStage *)stage);
- window = gdk_window_lookup_for_display (display, xwindow);
+ window = gdk_x11_window_lookup_for_display (display, xwindow);
if (window)
g_object_ref (window);
else
- window = gdk_window_foreign_new_for_display (display, xwindow);
+ window = gdk_x11_window_foreign_new_for_display (display, xwindow);
return window;
}
diff --git a/src/st/st-texture-cache.c b/src/st/st-texture-cache.c
index 520b7d750..c7906ab9c 100644
--- a/src/st/st-texture-cache.c
+++ b/src/st/st-texture-cache.c
@@ -437,6 +437,67 @@ out:
return rotated_pixbuf;
}
+static GdkPixbuf*
+decode_image (const char *val)
+{
+ int i;
+ GError *error = NULL;
+ GdkPixbuf *res = NULL;
+ struct {
+ const char *prefix;
+ const char *mime_type;
+ } formats[] = {
+ { "data:image/x-icon;base64,", "image/x-icon" },
+ { "data:image/png;base64,", "image/png" }
+ };
+
+ g_return_val_if_fail (val, NULL);
+
+ for (i = 0; i < G_N_ELEMENTS (formats); i++)
+ {
+ if (g_str_has_prefix (val, formats[i].prefix))
+ {
+ gsize len;
+ guchar *data = NULL;
+ char *unescaped;
+
+ unescaped = g_uri_unescape_string (val + strlen (formats[i].prefix), NULL);
+ if (unescaped)
+ {
+ data = g_base64_decode (unescaped, &len);
+ g_free (unescaped);
+ }
+
+ if (data)
+ {
+ GdkPixbufLoader *loader;
+
+ loader = gdk_pixbuf_loader_new_with_mime_type (formats[i].mime_type, &error);
+ if (loader &&
+ gdk_pixbuf_loader_write (loader, data, len, &error) &&
+ gdk_pixbuf_loader_close (loader, &error))
+ {
+ res = gdk_pixbuf_loader_get_pixbuf (loader);
+ g_object_ref (res);
+ }
+ g_object_unref (loader);
+ g_free (data);
+ }
+ }
+ }
+ if (!res)
+ {
+ if (error)
+ {
+ g_warning ("%s\n", error->message);
+ g_error_free (error);
+ }
+ else
+ g_warning ("incorrect data uri");
+ }
+ return res;
+}
+
static GdkPixbuf *
impl_load_pixbuf_file (const char *uri,
int available_width,
@@ -448,6 +509,9 @@ impl_load_pixbuf_file (const char *uri,
char *contents = NULL;
gsize size;
+ if (g_str_has_prefix (uri, "data:"))
+ return decode_image (uri);
+
file = g_file_new_for_uri (uri);
if (g_file_load_contents (file, NULL, &contents, &size, NULL, error))
{
@@ -1615,7 +1679,7 @@ st_texture_cache_load_from_data (StTextureCache *cache,
/**
* st_texture_cache_load_from_raw:
* @cache: a #StTextureCache
- * @data: raw pixel data
+ * @data: (array length=len): raw pixel data
* @len: the length of @data
* @has_alpha: whether @data includes an alpha channel
* @width: width in pixels of @data
diff --git a/src/tray/na-tray-child.c b/src/tray/na-tray-child.c
index 37db2e0ed..36cd4a064 100644
--- a/src/tray/na-tray-child.c
+++ b/src/tray/na-tray-child.c
@@ -23,7 +23,6 @@
#include
#include "na-tray-child.h"
-#include "gtk-compat.h"
#include
#include
diff --git a/src/tray/na-tray-manager.c b/src/tray/na-tray-manager.c
index 64300bc82..86e3ef33e 100644
--- a/src/tray/na-tray-manager.c
+++ b/src/tray/na-tray-manager.c
@@ -25,9 +25,7 @@
#include
#include "na-tray-manager.h"
-#include "gtk-compat.h"
-#include
#include
#if defined (GDK_WINDOWING_X11)
#include
diff --git a/tools/build/gnome-shell-build-setup.sh b/tools/build/gnome-shell-build-setup.sh
index b6c48734f..78e94d018 100755
--- a/tools/build/gnome-shell-build-setup.sh
+++ b/tools/build/gnome-shell-build-setup.sh
@@ -62,7 +62,7 @@ fi
# libxklavier, libxml2, ORBit2, pam, python, readline,
# spidermonkey ({mozilla,firefox,xulrunner}-js), startup-notification,
# xdamage, icon-naming-utils, upower, libtool-ltdl, libvorbis,
-# libgcrypt, libtasn1, libgnome-keyring
+# libgcrypt, libtasn1, libgnome-keyring, libgtop, cups
#
# Non-devel packages needed by gnome-shell and its deps:
# glxinfo, gstreamer-plugins-base, gstreamer-plugins-good,
@@ -76,13 +76,14 @@ if test "x$system" = xUbuntu -o "x$system" = xDebian -o "x$system" = xLinuxMint
build-essential curl
automake bison flex gettext git-core gnome-common gtk-doc-tools
gvfs gvfs-backends icon-naming-utils
- libdbus-glib-1-dev libexpat-dev libffi-dev libgnome-menu-dev libgnome-desktop-dev
+ libdbus-glib-1-dev libexpat-dev libffi-dev libgnome-menu-dev libgnome-desktop-dev libgtop2-dev
libjasper-dev libjpeg-dev libpng-dev libstartup-notification0-dev libtiff-dev
libwnck-dev libgl1-mesa-dev liborbit2-dev libpulse-dev libreadline5-dev libxml2-dev
mesa-common-dev mesa-utils libpam-dev python-dev python-gconf python-gobject
xulrunner-dev xserver-xephyr gnome-terminal libcroco3-dev
libgstreamer0.10-dev gstreamer0.10-plugins-base gstreamer0.10-plugins-good
- libltdl-dev libvorbis-dev libxklavier-dev libgnome-keyring-dev libupower-glib-dev
+ libltdl-dev libvorbis-dev libxklavier-dev libgnome-keyring-dev
+ libupower-glib-dev libcups2-dev
"
if apt-cache show autopoint > /dev/null 2> /dev/null; then
@@ -120,7 +121,7 @@ if test "x$system" = xFedora ; then
startup-notification-devel xorg-x11-server-Xephyr gnome-terminal zenity
icon-naming-utils upower-devel libtool-ltdl-devel libvorbis-devel
libxklavier-devel libgcrypt-devel libtasn1-devel libtasn1-tools
- libgnome-keyring-devel
+ libgnome-keyring-devel libgtop2-devel cups-devel
"
if expr $version \>= 14 > /dev/null ; then
@@ -143,7 +144,7 @@ if test "x$system" = xSUSE -o "x$system" = "xSUSE LINUX" ; then
curl \
bison flex gtk-doc gnome-common gnome-doc-utils-devel \
gnome-desktop-devel gnome-menus-devel icon-naming-utils \
- libpulse-devel libtiff-devel cups-devel libffi-devel \
+ libgtop-devel libpulse-devel libtiff-devel cups-devel libffi-devel \
orbit2-devel libwnck-devel xorg-x11-proto-devel readline-devel \
mozilla-xulrunner191-devel libcroco-devel \
xorg-x11-devel xorg-x11 xorg-x11-server-extra \
diff --git a/tools/build/gnome-shell.modules b/tools/build/gnome-shell.modules
index 94828aa98..60b810723 100644
--- a/tools/build/gnome-shell.modules
+++ b/tools/build/gnome-shell.modules
@@ -25,10 +25,10 @@
-
-
+
+