Compare commits

..

7 Commits

Author SHA1 Message Date
1afb04d1e4 overview: new transition 2014-01-31 17:57:57 -05:00
51e63233ce viewSelector: Move to a sync() model for deciding which page to show
https://bugzilla.gnome.org/show_bug.cgi?id=722196
2014-01-31 17:57:57 -05:00
a7d7f94892 screenShield: Don't hide windows until we've fully locked the shield
Revert the commit that ties hasWindows to the session mode, as we
need to do the "transition" manually. Instead, show/hide the
sessionGroup ourselves.

For optimization purposes, we also need to hide the window groups
when in the overview. Ideally, these would be culled out by Clutter,
but they are not from experimentation.
2014-01-31 17:57:57 -05:00
427f516d45 layout: Replace SystemBackground with CSS on the systemGroup
This merges the implementation of the noise texture on the lockScreenDialog
and the startup animation -- they now just use the systemGroup.
2014-01-31 17:57:57 -05:00
cbb88ffdbb layout: Add sessionGroup / systemGroup to better-define layers
In order to build a better transition animation from the lock screen, we
need to split the world into layers, as per this reference:

https://raw.github.com/gnome-design-team/gnome-mockups/master/system-lock-login-boot/system-layers2.png

Everything that pertains to the user's session is in the "session group",
which includes the window group, overview, message tray (for now),
keyboard, OSDs, menus, etc.

For implementation sake, we did not match this mockup exactly. The new layers
look like this, from top to bottom:

 * Stage
   * Magnifier (clones the uiGroup)
   * uiGroup
     * overlayGroup
       * menuGroup
     * panelGroup
     * screenShieldGroup
     * sessionGroup
       * top_window_group
       * other boxes (trayBox, keyboardBox, etc.)
       * other groups (osdGroup, switcherPopupGroup, etc.)
       * overviewGroup
       * window_group
     * systemGroup

The "session startup" animation now only zooms in the sessionGroup.

The panel is now outside the session, as it needs to sit above the screen
shield. This also means that it's not zoomed in as part of startup. I think
this is OK.

This also means that the lightboxes that the screen shield uses to fade out
the screen have to go in a new group, above the panel. This is known as the
overlayGroup, which has no relation to the old mutter group of the same name.

We also change the screen shield to put the lockDialogGroup in the system
group, and put the lockScreenGroup in the screenShieldGroup, which means
that the layer stacking is correct. Note that we don't hide the session
group in the lock screen yet, which is something I want to do.

Since not a lot of items need to be in the uiGroup anymore, we've removed
the Main.uiGroup fallback; others should use sessionGroup instead, when
appropriate.
2014-01-31 17:57:57 -05:00
71670bad3b layout: Add different groups in the LayoutManager for discrete UI components
This helps take cruft out of the uiGroup, and ensures that components remain
stacked properly on top of each other. In the future, we'll use this group
to ensure that grabs are ordered properly, as well.
2014-01-31 17:57:57 -05:00
a2e4153fa0 background: Fix cancellable issues
If we have the following sequence:

    cache.getImageContent({ filename: "foo", cancellable: cancellable1 });
    cache.getImageContent({ filename: "foo", cancellable: cancellable2 });
    cancellable1.cancel();

Then the second load will complete with "null" as its content, even though
it was never cancelled, and we'll see a blank image. Meanwhile, since the
second load simply appends to the list of callers for the second load,
cancellable2 does absolutely nothing: cancelling it won't stop the load,
and it will still receive onFinished handling.

To prevent this from happening, give the actual load operation its own
Gio.Cancellable, which is "ref-counted" -- only cancel it when all the other
possible callers cancel.

Additionally, clean up the large nested loops by splitting out duplicated
code and other stuff.

https://bugzilla.gnome.org/show_bug.cgi?id=722149
2014-01-31 17:57:57 -05:00
86 changed files with 4599 additions and 6331 deletions

66
NEWS
View File

@ -1,69 +1,3 @@
3.11.90
=======
* Stop showing two bluetooth entries [Giovanni; #709353]
* Improve styling of login/lock screen [Reda; #723833]
* Fix magnifier crosshairs [Magdalen; #723709]
* Make NetworkManager support optional [Michael; #669495]
* Make middle-click open a new instance [Florian; #695010]
* Scale the UI on high resolution displays [Cosimo, Adel; #705410, #724607]
* Remove notification counter on screen shield [Carlos; #709275]
* Improve app picker transition [Carlos; #722331]
* Add geolocation indicator to status menu [Zeeshan; #723684]
* Improve timestamps in chat notifications [Carlos; #708031, #715158]
* Improve network menus [Giovanni; #723570]
* Add "VPN Setting" item to VPN submenu [Giovanni; #709167]
* Improve appearance of disclosure arrows [Carlos; #720206]
* Add GSetting key to disable version validation of extensions [Adel; #724683]
* Delay auto-removing empty workspaces [Florian; #709064]
* Offer offline updates in the shutdown dialog [Kalev; #722898]
* Animate tile previews [Florian; #665758]
* Misc. bug fixes and cleanups [Giovanni, Ryan, Debarshi, Florian; #709128,
#722342, #723661, #724184, #724256, #724293, #724305, #722554, #724282,
#724690, #722928]
Contributors:
Zeeshan Ali (Khattak), Magdalen Berns, Michael Biebl, Giovanni Campagna,
Cosimo Cecchi, Adel Gadllah, Reda Lazri, Kalev Lember, Ryan Lortie,
Florian Müllner, Debarshi Ray, Carlos Soriano, Jasper St. Pierre,
Colin Walters
Translations:
Victor Ibragimov [tg], Daniel Mustieles [es], Khaled Hosny [ar],
Enrico Nicoletto [pt_BR], Yosef Or Boczko [he], Fran Diéguez [gl],
Marek Černocký [cs], Baurzhan Muftakhidinov [kk], Jorge Pérez Pérez [an],
Kjartan Maraas [nb], David Lüder [de], Daniel Korostil [uk], ngoswami [as],
Rafael Ferreira [pt_BR]
3.11.5
======
* Fix extension preference tool [Florian; #722334]
* Fix keyboard activation of legacy tray icons [Giovanni; #721267]
* Add radial background shade for modal dialogs [Giovanni; #669798]
* Show attached modal windows in the overview [Giovanni; #650843]
* Add support for desktop actions [Giovanni; #669603]
* Indicate in system status when location service is used [Zeeshan; #709372]
* Add support for extended app folder schema [Jasper; #723179]
* Show status icon for wired network connections [Jasper; #708966]
* Indicate airplane mode in network selection dialog [Giovanni; #709128]
* Misc bug fixes and cleanups [Florian, Sebastian, Giovanni, Tim, Matt, Jasper;
#722417, #722494, #722547, #722593, #722434, #722787, #722690, #722840,
#722660, #722812, #723197, #722927, #723306, #723308, #723523, #709685,
#723570]
Contributors:
Zeeshan Ali (Khattak), Magdalen Berns, Giovanni Campagna, William Jon McCann,
Sebastian Keller, Tim Lunn, Florian Müllner, Carlos Soriano,
Jasper St. Pierre, Rico Tzschichholz, Matt Watson
Translations:
Marek Černocký [cs], Mattias Põldaru [et], Tong Hui [zh_CN],
Victor Ibragimov [tg], Enrico Nicoletto [pt_BR], Daniel Mustieles [es],
Fran Diéguez [gl], Kjartan Maraas [nb], Nilamdyuti Goswami [as],
Aurimas Černius [lt], Stas Solovey [ru], Yosef Or Boczko [he],
Jorge Pérez Pérez [an], Dimitris Spingos [el], Baurzhan Muftakhidinov [kk],
Chao-Hsiung Liao [zh_HK, zh_TW], Shankar Prasad [kn], Yaron Shahrabani [he],
Andika Triwidada [id]
3.11.4
======
* Fix removal of workspacaes that are not at the end [Giovanni; #721417]

View File

@ -1,4 +1,4 @@
#!/bin/sh
#!/bin/bash
# Run this to generate all the initial makefiles, etc.
srcdir=`dirname $0`

View File

@ -41,8 +41,6 @@
#define PLUGIN_API_VERSION 5
#define EXTENSION_DISABLE_VERSION_CHECK_KEY "disable-extension-version-validation"
typedef struct {
GDBusProxy *proxy;
} PluginData;
@ -833,16 +831,6 @@ plugin_get_shell_version (PluginObject *obj,
return ret;
}
static gboolean
plugin_get_version_validation_enabled (PluginObject *obj,
NPVariant *result)
{
gboolean is_enabled = !g_settings_get_boolean (obj->settings, EXTENSION_DISABLE_VERSION_CHECK_KEY);
BOOLEAN_TO_NPVARIANT(is_enabled, *result);
return TRUE;
}
#define METHODS \
METHOD (list_extensions) \
METHOD (get_info) \
@ -862,8 +850,6 @@ static NPIdentifier api_version_id;
static NPIdentifier shell_version_id;
static NPIdentifier onextension_changed_id;
static NPIdentifier onrestart_id;
static NPIdentifier version_validation_enabled_id;
static bool
plugin_object_has_method (NPObject *npobj,
@ -906,8 +892,7 @@ plugin_object_has_property (NPObject *npobj,
return (name == onextension_changed_id ||
name == onrestart_id ||
name == api_version_id ||
name == shell_version_id ||
name == version_validation_enabled_id);
name == shell_version_id);
}
static bool
@ -925,8 +910,6 @@ plugin_object_get_property (NPObject *npobj,
return plugin_get_api_version (obj, result);
else if (name == shell_version_id)
return plugin_get_shell_version (obj, result);
else if (name == version_validation_enabled_id)
return plugin_get_version_validation_enabled (obj, result);
else if (name == onextension_changed_id)
{
if (obj->listener)
@ -1005,7 +988,6 @@ init_methods_and_properties (void)
/* this is the JS public API; it is manipulated through NPIdentifiers for speed */
api_version_id = funcs.getstringidentifier ("apiVersion");
shell_version_id = funcs.getstringidentifier ("shellVersion");
version_validation_enabled_id = funcs.getstringidentifier ("versionValidationEnabled");
get_info_id = funcs.getstringidentifier ("getExtensionInfo");
list_extensions_id = funcs.getstringidentifier ("listExtensions");

View File

@ -1,5 +1,5 @@
AC_PREREQ(2.63)
AC_INIT([gnome-shell],[3.11.90],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_INIT([gnome-shell],[3.11.4],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_SRCDIR([src/shell-global.c])
@ -76,7 +76,7 @@ AC_MSG_RESULT($enable_systemd)
CLUTTER_MIN_VERSION=1.15.90
GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
GJS_MIN_VERSION=1.39.0
MUTTER_MIN_VERSION=3.11.90
MUTTER_MIN_VERSION=3.11.1
GTK_MIN_VERSION=3.7.9
GIO_MIN_VERSION=2.37.0
LIBECAL_MIN_VERSION=3.5.3
@ -105,7 +105,9 @@ SHARED_PCS="gio-unix-2.0 >= $GIO_MIN_VERSION
libcanberra libcanberra-gtk3
telepathy-glib >= $TELEPATHY_GLIB_MIN_VERSION
polkit-agent-1 >= $POLKIT_MIN_VERSION
gcr-base-3 >= $GCR_MIN_VERSION"
libnm-glib libnm-util >= $NETWORKMANAGER_MIN_VERSION
libnm-gtk >= $NETWORKMANAGER_MIN_VERSION
libsecret-unstable gcr-base-3 >= $GCR_MIN_VERSION"
if test x$have_systemd = xyes; then
SHARED_PCS="${SHARED_PCS} libsystemd-journal"
fi
@ -180,38 +182,6 @@ if test "$langinfo_ok" = "yes"; then
[Define if _NL_TIME_FIRST_WEEKDAY is available])
fi
AC_ARG_ENABLE(networkmanager,
AS_HELP_STRING([--disable-networkmanager],
[disable NetworkManager support @<:@default=auto@:>@]),,
[enable_networkmanager=auto])
if test "x$enable_networkmanager" != "xno"; then
PKG_CHECK_MODULES(NETWORKMANAGER,
[libnm-glib
libnm-util >= $NETWORKMANAGER_MIN_VERSION
libnm-gtk >= $NETWORKMANAGER_MIN_VERSION
libsecret-unstable],
[have_networkmanager=yes],
[have_networkmanager=no])
GNOME_SHELL_CFLAGS="$GNOME_SHELL_CFLAGS $NETWORKMANAGER_CFLAGS"
GNOME_SHELL_LIBS="$GNOME_SHELL_LIBS $NETWORKMANAGER_LIBS"
else
have_networkmanager="no (disabled)"
fi
if test "x$have_networkmanager" = "xyes"; then
AC_DEFINE(HAVE_NETWORKMANAGER, [1], [Define if we have NetworkManager])
AC_SUBST([HAVE_NETWORKMANAGER], [1])
else
if test "x$enable_networkmanager" = "xyes"; then
AC_MSG_ERROR([Couldn't find NetworkManager.])
fi
AC_SUBST([HAVE_NETWORKMANAGER], [0])
fi
AM_CONDITIONAL(HAVE_NETWORKMANAGER, test "$have_networkmanager" = "yes")
# Sets GLIB_GENMARSHAL and GLIB_MKENUMS
AM_PATH_GLIB_2_0()
@ -253,15 +223,3 @@ AC_CONFIG_FILES([
man/Makefile
])
AC_OUTPUT
echo "
Build configuration:
Prefix: ${prefix}
Source code location: ${srcdir}
Compiler: ${CC}
Compiler Warnings: $enable_compile_warnings
Support for NetworkManager: $have_networkmanager
Support for GStreamer recording: $build_recorder
"

View File

@ -39,7 +39,6 @@ dist_theme_DATA = \
theme/filter-selected-rtl.svg \
theme/gnome-shell.css \
theme/logged-in-indicator.svg \
theme/menu-arrow-symbolic.svg \
theme/message-tray-background.png \
theme/more-results.svg \
theme/noise-texture.png \

View File

@ -21,15 +21,6 @@
EnableExtension and DisableExtension D-Bus methods on org.gnome.Shell.
</_description>
</key>
<key name="disable-extension-version-validation" type="b">
<default>false</default>
<_summary>Disables the validation of extension version compatibility</_summary>
<_description>
GNOME Shell will only load extensions that claim to support the current
running version. Enabling this option will disable this check and try to
load all extensions regardless of the versions they claim to support.
</_description>
</key>
<key name="favorite-apps" type="as">
<default>[ 'epiphany.desktop', 'evolution.desktop', 'empathy.desktop', 'rhythmbox.desktop', 'shotwell.desktop', 'libreoffice-writer.desktop', 'nautilus.desktop', 'gnome-documents.desktop' ]</default>
<_summary>List of desktop file IDs for favorite applications</_summary>
@ -74,7 +65,6 @@
<child name="calendar" schema="org.gnome.shell.calendar"/>
<child name="keybindings" schema="org.gnome.shell.keybindings"/>
<child name="keyboard" schema="org.gnome.shell.keyboard"/>
<child name="location" schema="org.gnome.shell.location"/>
</schema>
<schema id="org.gnome.shell.calendar" path="/org/gnome/shell/calendar/"
@ -144,32 +134,6 @@
</key>
</schema>
<enum id="org.gnome.shell.geoclue.AccuracyLevel">
<value value="0" nick="off"/>
<value value="1" nick="country"/>
<value value="4" nick="city"/>
<value value="5" nick="neighborhood"/>
<value value="6" nick="street"/>
<value value="8" nick="exact"/>
</enum>
<schema id="org.gnome.shell.location"
path="/org/gnome/shell/location/"
gettext-domain="@GETTEXT_PACKAGE@">
<key name="max-accuracy-level" enum="org.gnome.shell.geoclue.AccuracyLevel">
<default>'exact'</default>
<_summary>The maximum accuracy level of location.</_summary>
<_description>
Configures the maximum level of location accuracy applications are
allowed to see. Valid options are 'off' (disable location tracking),
'country', 'city', 'neighborhood', 'street', and 'exact' (typically
requires GPS receiver). Please keep in mind that this only controls
what Geoclue will allow applications to see and they can find user's
location on their own using network resources (albeit with street-level
accuracy at best).
</_description>
</key>
</schema>
<schema id="org.gnome.shell.app-switcher"
path="/org/gnome/shell/app-switcher/"
gettext-domain="@GETTEXT_PACKAGE@">

View File

@ -157,9 +157,8 @@ StScrollBar StButton#vhandle:active {
min-width: 200px;
}
.popup-menu-arrow {
width: 16px;
height: 16px;
.unicode-arrow {
font-size: 120%;
}
.popup-submenu-menu-item:open {
@ -290,20 +289,6 @@ StScrollBar StButton#vhandle:active {
spacing: 10px;
}
.nm-dialog-airplane-box {
spacing: 12px;
}
.nm-dialog-airplane-headline {
font-size: 1.1em;
font-weight: bold;
text-align: center;
}
.nm-dialog-airplane-text {
color: #999999;
}
.nm-dialog-header-icon {
icon-size: 32px;
}
@ -1468,10 +1453,6 @@ StScrollBar StButton#vhandle:active {
color: #999999;
}
.no-networks-box {
spacing: 12px;
}
.notification {
border-radius: 10px 10px 0px 0px;
background: rgba(0,0,0,0.9);
@ -1649,8 +1630,8 @@ StScrollBar StButton#vhandle:active {
color: #888888;
}
.chat-empty-line {
font-size: 4px;
.chat-group-sent, .chat-group-meta {
padding: 8px 0;
}
.chat-received {
@ -1675,7 +1656,6 @@ StScrollBar StButton#vhandle:active {
.chat-meta-message {
padding-left: 4px;
font-size: 9pt;
font-weight: bold;
color: #bbbbbb;
}
@ -1877,27 +1857,6 @@ StScrollBar StButton#vhandle:active {
border-radius: 8px;
}
/* Tile previews */
.tile-preview {
background-color: rgba(74, 144, 217, 0.35);
border: 1px solid #4a90d9; /* Adwaita selected bg color */
}
.tile-preview-left.on-primary {
/* keep in sync with -panel-corner-radius */
border-radius: 6px 0 0 0;
}
.tile-preview-right.on-primary {
/* keep in sync with -panel-corner-radius */
border-radius: 0 6px 0 0;
}
.tile-preview-left.tile-preview-right.on-primary {
/* keep in sync with -panel-corner-radius */
border-radius: 6px 6px 0 0;
}
/* Modal Dialogs */
/* Dialog Subject Text Style */
@ -1968,57 +1927,45 @@ StScrollBar StButton#vhandle:active {
padding-top: 20px;
}
.end-session-dialog-layout {
.end-session-dialog-subject {
padding-left: 17px;
padding-bottom: 20px;
}
.end-session-dialog-layout:rtl {
.end-session-dialog-subject:rtl {
padding-left: 0px;
padding-right: 17px;
}
.end-session-dialog-description {
padding-left: 17px;
width: 28em;
padding-bottom: 10px;
}
.end-session-dialog-description:rtl {
width: 28em;
padding-bottom: 10px;
text-align: right;
}
.end-session-dialog-warning {
width: 28em;
color: #f57900;
padding-top: 6px;
}
.end-session-dialog-warning:rtl {
width: 28em;
color: #f57900;
padding-top: 6px;
padding-right: 17px;
text-align: right;
}
.end-session-dialog-logout-icon {
border: 2px solid #8b8b8b;
border-radius: 5px;
width: 48px;
height: 48px;
width: 32px;
height: 32px;
background-size: contain;
}
.end-session-dialog-shutdown-icon {
color: #bebebe;
width: 48px;
height: 48px;
width: 32px;
height: 32px;
}
.end-session-dialog-inhibitor-layout {
spacing: 16px;
max-height: 200px;
padding-right: 65px;
padding-left: 65px;
padding-right: 50px;
padding-left: 50px;
}
.end-session-dialog-session-list,
@ -2441,13 +2388,12 @@ StScrollBar StButton#vhandle:active {
color: #E8E8E8;
}
.login-dialog-username,
.user-widget-label {
.login-dialog-username {
font-size: 16pt;
font-weight: bold;
text-align: left;
padding-left: 15px;
text-shadow: rgba(0, 0, 0, 0.5) 0px 2px 1px 0px;
text-shadow: black 0px 4px 3px 0px;
}
.login-dialog-prompt-layout {
@ -2539,6 +2485,11 @@ StScrollBar StButton#vhandle:active {
}
.user-widget-label {
font-size: 20px;
font-weight: bold;
text-align: left;
color:white;
text-shadow: black 0px 4px 3px 0px;
}
.user-widget-label:ltr {
@ -2561,7 +2512,7 @@ StScrollBar StButton#vhandle:active {
box-shadow: 0px 4px 8px rgba(0,0,0,0.9);
}
#lockDialogGroup {
#systemGroup {
background: #2e3436 url(noise-texture.png);
background-repeat: repeat;
}

View File

@ -1,90 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="16"
height="16"
id="svg3863"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="menu-arrow.svg">
<defs
id="defs3865" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="15.836083"
inkscape:cx="-3.1641676"
inkscape:cy="11.823817"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:grid-bbox="true"
inkscape:document-units="px"
showguides="true"
inkscape:guide-bbox="true"
inkscape:window-width="1366"
inkscape:window-height="702"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:snap-bbox="true">
<sodipodi:guide
orientation="1,0"
position="15.996443,16.922964"
id="guide3873" />
<sodipodi:guide
orientation="0,1"
position="28.041217,3.1256134"
id="guide3875" />
<sodipodi:guide
orientation="0,1"
position="-0.80372916,24.469088"
id="guide3877" />
<sodipodi:guide
orientation="1,0"
position="3.0363102,34.649657"
id="guide3879" />
<sodipodi:guide
orientation="1,0"
position="29.023553,28.577037"
id="guide3881" />
<inkscape:grid
type="xygrid"
id="grid2988" />
</sodipodi:namedview>
<metadata
id="metadata3868">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer"
transform="translate(0,-16)">
<path
style="fill:#ffffff;fill-opacity:1;stroke:none"
d="m 4,23 8,0 -4,5 z"
id="path3883"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -6,7 +6,6 @@ misc/config.js: misc/config.js.in Makefile
sed -e "s|[@]PACKAGE_NAME@|$(PACKAGE_NAME)|g" \
-e "s|[@]PACKAGE_VERSION@|$(PACKAGE_VERSION)|g" \
-e "s|[@]HAVE_BLUETOOTH@|$(HAVE_BLUETOOTH)|g" \
-e "s|[@]HAVE_NETWORKMANAGER@|$(HAVE_NETWORKMANAGER)|g" \
-e "s|[@]GETTEXT_PACKAGE@|$(GETTEXT_PACKAGE)|g" \
-e "s|[@]datadir@|$(datadir)|g" \
-e "s|[@]libexecdir@|$(libexecdir)|g" \

View File

@ -274,7 +274,7 @@ const SessionMenuButton = new Lang.Class({
this.actor = new St.Bin({ child: this._button });
this._menu = new PopupMenu.PopupMenu(this._button, 0, St.Side.TOP);
Main.uiGroup.add_actor(this._menu.actor);
Main.layoutManager.menuGroup.add_actor(this._menu.actor);
this._menu.actor.hide();
this._menu.connect('open-state-changed',

View File

@ -6,8 +6,6 @@ const PACKAGE_NAME = '@PACKAGE_NAME@';
const PACKAGE_VERSION = '@PACKAGE_VERSION@';
/* 1 if gnome-bluetooth is available, 0 otherwise */
const HAVE_BLUETOOTH = @HAVE_BLUETOOTH@;
/* 1 if networkmanager is available, 0 otherwise */
const HAVE_NETWORKMANAGER = @HAVE_NETWORKMANAGER@;
/* gettext package */
const GETTEXT_PACKAGE = '@GETTEXT_PACKAGE@';
/* locale dir */

View File

@ -24,7 +24,7 @@ const WINDOW_PREVIEW_SIZE = 128;
const APP_ICON_SIZE = 96;
const APP_ICON_SIZE_SMALL = 48;
const baseIconSizes = [96, 64, 48, 32, 22];
const iconSizes = [96, 64, 48, 32, 22];
const AppIconMode = {
THUMBNAIL_ONLY: 1,
@ -430,6 +430,7 @@ const AppIcon = new Lang.Class({
set_size: function(size) {
this.icon = this.app.create_icon_texture(size);
this._iconBin.set_size(size, size);
this._iconBin.child = this.icon;
}
});
@ -478,13 +479,12 @@ const AppSwitcher = new Lang.Class({
Mainloop.source_remove(this._mouseTimeOutId);
},
_setIconSize: function() {
_getPreferredHeight: function (actor, forWidth, alloc) {
let j = 0;
while(this._items.length > 1 && this._items[j].style_class != 'item-box') {
j++;
}
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);
@ -495,22 +495,19 @@ const AppSwitcher = new Lang.Class({
let primary = Main.layoutManager.primaryMonitor;
let parentPadding = this.actor.get_parent().get_theme_node().get_horizontal_padding();
let availWidth = primary.width - parentPadding - this.actor.get_theme_node().get_horizontal_padding();
let height = 0;
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
let iconSizes = baseIconSizes.map(function(s) {
return s * scaleFactor;
});
if (this._items.length == 1) {
this._iconSize = baseIconSizes[0];
} else {
for(let i = 0; i < baseIconSizes.length; i++) {
this._iconSize = baseIconSizes[i];
let height = iconSizes[i] + iconSpacing;
for(let i = 0; i < iconSizes.length; i++) {
this._iconSize = iconSizes[i];
height = iconSizes[i] + iconSpacing;
let w = height * this._items.length + totalSpacing;
if (w <= availWidth)
break;
}
break;
}
if (this._items.length == 1) {
this._iconSize = iconSizes[0];
height = iconSizes[0] + iconSpacing;
}
for(let i = 0; i < this.icons.length; i++) {
@ -518,11 +515,9 @@ const AppSwitcher = new Lang.Class({
break;
this.icons[i].set_size(this._iconSize);
}
},
_getPreferredHeight: function (actor, forWidth, alloc) {
this._setIconSize();
this.parent(actor, forWidth, alloc);
alloc.min_size = height;
alloc.natural_size = height;
},
_allocate: function (actor, box, flags) {
@ -655,19 +650,17 @@ const ThumbnailList = new Lang.Class({
totalPadding += this.actor.get_theme_node().get_horizontal_padding() + this.actor.get_theme_node().get_vertical_padding();
let [labelMinHeight, labelNaturalHeight] = this._labels[0].get_preferred_height(-1);
let spacing = this._items[0].child.get_theme_node().get_length('spacing');
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
let thumbnailSize = THUMBNAIL_DEFAULT_SIZE * scaleFactor;
availHeight = Math.min(availHeight - labelNaturalHeight - totalPadding - spacing, thumbnailSize);
availHeight = Math.min(availHeight - labelNaturalHeight - totalPadding - spacing, THUMBNAIL_DEFAULT_SIZE);
let binHeight = availHeight + this._items[0].get_theme_node().get_vertical_padding() + this.actor.get_theme_node().get_vertical_padding() - spacing;
binHeight = Math.min(thumbnailSize, binHeight);
binHeight = Math.min(THUMBNAIL_DEFAULT_SIZE, binHeight);
for (let i = 0; i < this._thumbnailBins.length; i++) {
let mutterWindow = this._windows[i].get_compositor_private();
if (!mutterWindow)
continue;
let clone = _createWindowClone(mutterWindow, thumbnailSize);
let clone = _createWindowClone(mutterWindow, THUMBNAIL_DEFAULT_SIZE);
this._thumbnailBins[i].set_height(binHeight);
this._thumbnailBins[i].add_actor(clone);
this._clones.push(clone);

View File

@ -46,9 +46,6 @@ const INDICATORS_ANIMATION_MAX_TIME = 0.75;
const PAGE_SWITCH_TRESHOLD = 0.2;
const PAGE_SWITCH_TIME = 0.3;
const VIEWS_SWITCH_TIME = 0.4;
const VIEWS_SWITCH_ANIMATION_DELAY = 0.1;
function _getCategories(info) {
let categoriesStr = info.get_categories();
if (!categoriesStr)
@ -56,6 +53,14 @@ function _getCategories(info) {
return categoriesStr.split(';');
}
function _isTerminal(app) {
let info = app.get_app_info();
if (!info)
return false;
let categories = _getCategories(info);
return categories.indexOf('TerminalEmulator') > -1;
}
function _listsIntersect(a, b) {
for (let itemA of a)
if (b.indexOf(itemA) >= 0)
@ -251,8 +256,7 @@ const PageIndicators = new Lang.Class({
Tweener.addTween(children[i],
{ translation_x: 0,
time: INDICATORS_BASE_TIME + delay * i,
transition: 'easeInOutQuad',
delay: VIEWS_SWITCH_ANIMATION_DELAY
transition: 'easeInOutQuad'
});
}
}
@ -787,10 +791,8 @@ const AppDisplay = new Lang.Class({
_showView: function(activeIndex) {
for (let i = 0; i < this._views.length; i++) {
let actor = this._views[i].view.actor;
let params = { time: VIEWS_SWITCH_TIME,
opacity: (i == activeIndex) ? 255 : 0,
delay: (i == activeIndex) ? VIEWS_SWITCH_ANIMATION_DELAY : 0 };
let params = { time: OverviewControls.SIDE_CONTROLS_ANIMATION_TIME,
opacity: (i == activeIndex) ? 255 : 0 };
if (i == activeIndex)
actor.visible = true;
else
@ -886,7 +888,7 @@ const AppSearchProvider = new Lang.Class({
let app = this._appSys.lookup_app(result);
let event = Clutter.get_current_event();
let modifiers = event ? event.get_state() : 0;
let openNewWindow = modifiers & Clutter.ModifierType.CONTROL_MASK;
let openNewWindow = (modifiers & Clutter.ModifierType.CONTROL_MASK) || _isTerminal(app);
if (openNewWindow)
app.open_new_window(-1);
@ -930,9 +932,9 @@ const FolderView = new Lang.Class({
},
createFolderIcon: function(size) {
let layout = new Clutter.TableLayout();
let icon = new St.Widget({ layout_manager: layout,
style_class: 'app-folder-icon' });
let icon = new St.Widget({ layout_manager: new Clutter.BinLayout(),
style_class: 'app-folder-icon',
width: size, height: size });
let subSize = Math.floor(FOLDER_SUBICON_FRACTION * size);
let aligns = [ Clutter.ActorAlign.START, Clutter.ActorAlign.END ];
@ -942,7 +944,7 @@ const FolderView = new Lang.Class({
x_expand: true, y_expand: true });
bin.set_x_align(aligns[i % 2]);
bin.set_y_align(aligns[Math.floor(i / 2)]);
layout.pack(bin, i % 2, Math.floor(i / 2));
icon.add_actor(bin);
}
return icon;
@ -1401,6 +1403,9 @@ const AppIcon = new Lang.Class({
if (button == 1) {
this._onActivate(Clutter.get_current_event());
} else if (button == 2) {
// Last workspace is always empty
let launchWorkspace = global.screen.get_workspace_by_index(global.screen.n_workspaces - 1);
launchWorkspace.activate(global.get_current_time());
this.app.open_new_window(-1);
Main.overview.hide();
}
@ -1461,8 +1466,9 @@ const AppIcon = new Lang.Class({
_onActivate: function (event) {
let modifiers = event.get_state();
if (modifiers & Clutter.ModifierType.CONTROL_MASK
&& this.app.state == Shell.AppState.RUNNING) {
if ((modifiers & Clutter.ModifierType.CONTROL_MASK
&& this.app.state == Shell.AppState.RUNNING)
|| _isTerminal(this.app)) {
this.app.open_new_window(-1);
} else {
this.app.activate();
@ -1519,7 +1525,7 @@ const AppIconMenu = new Lang.Class({
}));
source.actor.connect('destroy', Lang.bind(this, function () { this.actor.destroy(); }));
Main.uiGroup.add_actor(this.actor);
Main.layoutManager.menuGroup.add_actor(this.actor);
},
_redisplay: function() {

View File

@ -132,6 +132,46 @@ const BackgroundCache = new Lang.Class({
this._removeContent(this._images, content);
},
_loadImageContentInternal: function(filename, style) {
let cancellable = new Gio.Cancellable();
let content = new Meta.Background({ meta_screen: global.screen });
let info = { filename: filename,
style: style,
cancellable: cancellable,
callers: [] };
content.load_file_async(filename, style, cancellable, Lang.bind(this, function(object, result) {
if (cancellable.is_cancelled())
return;
try {
content.load_file_finish(result);
} catch(e) {
content = null;
}
if (content) {
this._monitorFile(filename);
info.callers.forEach(Lang.bind(this, function(caller) {
let newContent = content.copy(caller.monitorIndex, caller.effects);
this._images.push(newContent);
caller.onFinished(newContent);
}));
} else {
info.callers.forEach(Lang.bind(this, function(caller) {
caller.onFinished(null);
}));
}
let idx = this._pendingFileLoads.indexOf(info);
this._pendingFileLoads.splice(idx, 1);
}));
this._pendingFileLoads.push(info);
return info;
},
_loadImageContent: function(params) {
params = Params.parse(params, { monitorIndex: 0,
style: null,
@ -140,67 +180,38 @@ const BackgroundCache = new Lang.Class({
cancellable: null,
onFinished: null });
let caller = { monitorIndex: params.monitorIndex,
effects: params.effects,
cancellable: params.cancellable,
onFinished: params.onFinished };
let info = null;
for (let i = 0; i < this._pendingFileLoads.length; i++) {
if (this._pendingFileLoads[i].filename == params.filename &&
this._pendingFileLoads[i].style == params.style) {
this._pendingFileLoads[i].callers.push({ shouldCopy: true,
monitorIndex: params.monitorIndex,
effects: params.effects,
onFinished: params.onFinished });
return;
let pendingLoad = this._pendingFileLoads[i];
if (pendingLoad.filename == params.filename && pendingLoad.style == params.style) {
info = pendingLoad;
break;
}
}
this._pendingFileLoads.push({ filename: params.filename,
style: params.style,
callers: [{ shouldCopy: false,
monitorIndex: params.monitorIndex,
effects: params.effects,
onFinished: params.onFinished }] });
if (!info)
info = this._loadImageContentInternal(params.filename, params.style);
let content = new Meta.Background({ meta_screen: global.screen,
monitor: params.monitorIndex,
effects: params.effects });
info.callers.push(caller);
content.load_file_async(params.filename,
params.style,
params.cancellable,
Lang.bind(this,
function(object, result) {
try {
content.load_file_finish(result);
if (caller.cancellable) {
caller.cancellable.connect(Lang.bind(this, function() {
let idx = info.callers.indexOf(caller);
info.callers.splice(idx, 1);
this._monitorFile(params.filename);
this._images.push(content);
} catch(e) {
content = null;
}
if (info.callers.length == 0) {
info.cancellable.cancel();
for (let i = 0; i < this._pendingFileLoads.length; i++) {
let pendingLoad = this._pendingFileLoads[i];
if (pendingLoad.filename != params.filename ||
pendingLoad.style != params.style)
continue;
for (let j = 0; j < pendingLoad.callers.length; j++) {
if (pendingLoad.callers[j].onFinished) {
let newContent;
if (content && pendingLoad.callers[j].shouldCopy) {
newContent = content.copy(pendingLoad.callers[j].monitorIndex,
pendingLoad.callers[j].effects);
this._images.push(newContent);
} else {
newContent = content;
}
pendingLoad.callers[j].onFinished(newContent);
}
}
this._pendingFileLoads.splice(i, 1);
}
}));
let idx = this._pendingFileLoads.indexOf(info);
this._pendingFileLoads.splice(idx, 1);
}
}));
}
},
getImageContent: function(params) {
@ -250,7 +261,6 @@ const BackgroundCache = new Lang.Class({
monitorIndex: params.monitorIndex,
cancellable: params.cancellable,
onFinished: params.onFinished });
}
},
@ -624,31 +634,6 @@ const Background = new Lang.Class({
});
Signals.addSignalMethods(Background.prototype);
const SystemBackground = new Lang.Class({
Name: 'SystemBackground',
_init: function() {
this._cache = getBackgroundCache();
this.actor = new Meta.BackgroundActor();
this._cache.getImageContent({ style: GDesktopEnums.BackgroundStyle.WALLPAPER,
filename: global.datadir + '/theme/noise-texture.png',
effects: Meta.BackgroundEffects.NONE,
onFinished: Lang.bind(this, function(content) {
this.actor.content = content;
this.emit('loaded');
})
});
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
},
_onDestroy: function() {
this._cache.removeImageContent(this.actor.content);
},
});
Signals.addSignalMethods(SystemBackground.prototype);
const Animation = new Lang.Class({
Name: 'Animation',

View File

@ -22,7 +22,7 @@ const BackgroundMenu = new Lang.Class({
this.actor.add_style_class_name('background-menu');
layoutManager.uiGroup.add_actor(this.actor);
layoutManager.menuGroup.add_actor(this.actor);
this.actor.hide();
}
});

View File

@ -1,6 +1,5 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Clutter = imports.gi.Clutter;
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const Lang = imports.lang;
@ -29,8 +28,6 @@ const SCROLLBACK_HISTORY_LINES = 10;
// See Notification._onEntryChanged
const COMPOSING_STOP_TIMEOUT = 5;
const CLOCK_FORMAT_KEY = 'clock-format';
const NotificationDirection = {
SENT: 'chat-sent',
RECEIVED: 'chat-received'
@ -908,14 +905,14 @@ const ChatNotification = new Lang.Class({
let group = props.group;
if (group != this._lastGroup) {
let style = 'chat-group-' + group;
this._lastGroup = group;
let emptyLine = new St.Label({ style_class: 'chat-empty-line' });
this.addActor(emptyLine);
this._lastGroupActor = new St.BoxLayout({ style_class: style,
vertical: true });
this.addActor(this._lastGroupActor);
}
this._lastMessageBox = new St.BoxLayout({ vertical: false });
this._lastMessageBox.add(body, props.childProps);
this.addActor(this._lastMessageBox);
this._lastGroupActor.add(body, props.childProps);
this.updated();
@ -944,81 +941,32 @@ const ChatNotification = new Lang.Class({
let format;
let desktopSettings = new Gio.Settings({ schema: 'org.gnome.desktop.interface' });
let clockFormat = desktopSettings.get_string(CLOCK_FORMAT_KEY);
switch (clockFormat) {
case '24h':
// Show only the time if date is on today
if(daysAgo < 1){
/* Translators: Time in 24h format */
format = _("%H\u2236%M");
}
// Show the word "Yesterday" and time if date is on yesterday
else if(daysAgo <2){
/* Translators: this is the word "Yesterday" followed by a
time string in 24h format. i.e. "Yesterday, 14:30" */
// xgettext:no-c-format
format = _("Yesterday, %H\u2236%M");
}
// Show a week day and time if date is in the last week
else if (daysAgo < 7) {
/* Translators: this is the week day name followed by a time
string in 24h format. i.e. "Monday, 14:30" */
// xgettext:no-c-format
format = _("%A, %H\u2236%M");
} else if (date.getYear() == now.getYear()) {
/* Translators: this is the month name and day number
followed by a time string in 24h format.
i.e. "May 25, 14:30" */
// xgettext:no-c-format
format = _("%B %d, %H\u2236%M");
} else {
/* Translators: this is the month name, day number, year
number followed by a time string in 24h format.
i.e. "May 25 2012, 14:30" */
// xgettext:no-c-format
format = _("%B %d %Y, %H\u2236%M");
}
break;
default:
/* explicit fall-through */
case '12h':
// Show only the time if date is on today
if(daysAgo < 1){
/* Translators: Time in 24h format */
format = _("%l\u2236%M %p");
}
// Show the word "Yesterday" and time if date is on yesterday
else if(daysAgo <2){
/* Translators: this is the word "Yesterday" followed by a
time string in 12h format. i.e. "Yesterday, 2:30 pm" */
// xgettext:no-c-format
format = _("Yesterday, %l\u2236%M %p");
}
// Show a week day and time if date is in the last week
else if (daysAgo < 7) {
/* Translators: this is the week day name followed by a time
string in 12h format. i.e. "Monday, 2:30 pm" */
// xgettext:no-c-format
format = _("%A, %l\u2236%M %p");
} else if (date.getYear() == now.getYear()) {
/* Translators: this is the month name and day number
followed by a time string in 12h format.
i.e. "May 25, 2:30 pm" */
// xgettext:no-c-format
format = _("%B %d, %l\u2236%M %p");
} else {
/* Translators: this is the month name, day number, year
number followed by a time string in 12h format.
i.e. "May 25 2012, 2:30 pm"*/
// xgettext:no-c-format
format = _("%B %d %Y, %l\u2236%M %p");
}
break;
// Show only the hour if date is on today
if(daysAgo < 1){
format = "<b>%H:%M</b>";
}
// Show the word "Yesterday" and time if date is on yesterday
else if(daysAgo <2){
/* Translators: this is the word "Yesterday" followed by a time string. i.e. "Yesterday, 14:30"*/
// xgettext:no-c-format
format = _("<b>Yesterday</b>, <b>%H:%M</b>");
}
// Show a week day and time if date is in the last week
else if (daysAgo < 7) {
/* Translators: this is the week day name followed by a time string. i.e. "Monday, 14:30*/
// xgettext:no-c-format
format = _("<b>%A</b>, <b>%H:%M</b>");
} else if (date.getYear() == now.getYear()) {
/* Translators: this is the month name and day number followed by a time string. i.e. "May 25, 14:30"*/
// xgettext:no-c-format
format = _("<b>%B</b> <b>%d</b>, <b>%H:%M</b>");
} else {
/* Translators: this is the month name, day number, year number followed by a time string. i.e. "May 25 2012, 14:30"*/
// xgettext:no-c-format
format = _("<b>%B</b> <b>%d</b> <b>%Y</b>, <b>%H:%M</b> ");
}
return date.toLocaleFormat(format);
},
@ -1028,14 +976,13 @@ const ChatNotification = new Lang.Class({
let lastMessageTime = this._history[0].time;
let lastMessageDate = new Date(lastMessageTime * 1000);
let timeLabel = new St.Label({ text: this._formatTimestamp(lastMessageDate),
style_class: 'chat-meta-message',
x_expand: true,
y_expand: true,
x_align: Clutter.ActorAlign.END,
y_align: Clutter.ActorAlign.END });
this._lastMessageBox.add_actor(timeLabel);
let timeLabel = this._append({ body: this._formatTimestamp(lastMessageDate),
group: 'meta',
styles: ['chat-meta-message'],
childProps: { expand: true, x_fill: false,
x_align: St.Align.END },
noTimestamp: true,
timestamp: lastMessageTime });
this._filterMessages();

View File

@ -381,8 +381,6 @@ const DashActor = new Lang.Class({
}
});
const baseIconSizes = [ 16, 22, 24, 32, 48, 64 ];
const Dash = new Lang.Class({
Name: 'Dash',
@ -634,24 +632,25 @@ const Dash = new Lang.Class({
let minHeight, natHeight;
// Enforce the current icon size during the size request
firstIcon.setIconSize(this.iconSize);
let [currentWidth, currentHeight] = firstIcon.icon.get_size();
firstIcon.icon.set_size(this.iconSize, this.iconSize);
[minHeight, natHeight] = firstButton.get_preferred_height(-1);
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
let iconSizes = baseIconSizes.map(function(s) {
return s * scaleFactor;
});
firstIcon.icon.set_size(currentWidth, currentHeight);
// Subtract icon padding and box spacing from the available height
availHeight -= iconChildren.length * (natHeight - this.iconSize * scaleFactor) +
availHeight -= iconChildren.length * (natHeight - this.iconSize) +
(iconChildren.length - 1) * spacing;
let availSize = availHeight / iconChildren.length;
let newIconSize = baseIconSizes[0];
let iconSizes = [ 16, 22, 24, 32, 48, 64 ];
let newIconSize = 16;
for (let i = 0; i < iconSizes.length; i++) {
if (iconSizes[i] < availSize)
newIconSize = baseIconSizes[i];
newIconSize = iconSizes[i];
}
if (newIconSize == this.iconSize)

View File

@ -202,7 +202,7 @@ const DateMenuButton = new Lang.Class({
},
_getClockApp: function() {
return Shell.AppSystem.get_default().lookup_app('org.gnome.clocks.desktop');
return Shell.AppSystem.get_default().lookup_app('gnome-clocks.desktop');
},
_onOpenCalendarActivate: function() {

View File

@ -46,7 +46,7 @@ let dragMonitors = [];
function _getEventHandlerActor() {
if (!eventHandlerActor) {
eventHandlerActor = new Clutter.Actor({ width: 0, height: 0 });
Main.uiGroup.add_actor(eventHandlerActor);
Main.layoutManager.sessionGroup.add_actor(eventHandlerActor);
// We connect to 'event' rather than 'captured-event' because the capturing phase doesn't happen
// when you've grabbed the pointer.
eventHandlerActor.connect('event',
@ -236,7 +236,7 @@ const _Draggable = new Lang.Class({
if (this.actor._delegate && this.actor._delegate.getDragActor) {
this._dragActor = this.actor._delegate.getDragActor();
Main.uiGroup.add_child(this._dragActor);
Main.layoutManager.sessionGroup.add_child(this._dragActor);
this._dragActor.raise_top();
Shell.util_set_hidden_from_pick(this._dragActor, true);
@ -276,7 +276,7 @@ const _Draggable = new Lang.Class({
this._dragOrigScale = this._dragActor.scale_x;
// Set the actor's scale such that it will keep the same
// transformed size when it's reparented to the uiGroup
// transformed size when it's reparented to the sessionGroup
let [scaledWidth, scaledHeight] = this.actor.get_transformed_size();
this._dragActor.set_scale(scaledWidth / this.actor.width,
scaledHeight / this.actor.height);
@ -286,7 +286,7 @@ const _Draggable = new Lang.Class({
this._dragOffsetY = actorStageY - this._dragStartY;
this._dragOrigParent.remove_actor(this._dragActor);
Main.uiGroup.add_child(this._dragActor);
Main.layoutManager.sessionGroup.add_child(this._dragActor);
this._dragActor.raise_top();
Shell.util_set_hidden_from_pick(this._dragActor, true);
}
@ -448,7 +448,7 @@ const _Draggable = new Lang.Class({
event.get_time())) {
// If it accepted the drop without taking the actor,
// handle it ourselves.
if (this._dragActor.get_parent() == Main.uiGroup) {
if (this._dragActor.get_parent() == Main.layoutManager.sessionGroup) {
if (this._restoreOnSuccess) {
this._restoreDragActor(event.get_time());
return true;
@ -557,7 +557,7 @@ const _Draggable = new Lang.Class({
_onAnimationComplete : function (dragActor, eventTime) {
if (this._dragOrigParent) {
Main.uiGroup.remove_child(this._dragActor);
Main.layoutManager.sessionGroup.remove_child(this._dragActor);
this._dragOrigParent.add_actor(this._dragActor);
dragActor.set_scale(this._dragOrigScale, this._dragOrigScale);
dragActor.set_position(this._dragOrigX, this._dragOrigY);

View File

@ -25,11 +25,9 @@ const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const Gtk = imports.gi.Gtk;
const Pango = imports.gi.Pango;
const Polkit = imports.gi.Polkit;
const St = imports.gi.St;
const Shell = imports.gi.Shell;
const CheckBox = imports.ui.checkBox;
const GnomeSession = imports.misc.gnomeSession;
const LoginManager = imports.misc.loginManager;
const ModalDialog = imports.ui.modalDialog;
@ -38,10 +36,8 @@ const UserWidget = imports.ui.userWidget;
let _endSessionDialog = null;
const TRIGGER_OFFLINE_UPDATE = '/usr/libexec/pk-trigger-offline-update';
const _ITEM_ICON_SIZE = 48;
const _DIALOG_ICON_SIZE = 48;
const _DIALOG_ICON_SIZE = 32;
const GSM_SESSION_MANAGER_LOGOUT_FORCE = 2;
@ -75,7 +71,6 @@ const logoutDialogContent = {
"You will be logged out automatically in %d seconds.",
seconds).format(seconds);
},
showBatteryWarning: false,
confirmButtons: [{ signal: 'ConfirmedLogout',
label: C_("button", "Log Out") }],
iconStyleClass: 'end-session-dialog-logout-icon',
@ -84,14 +79,11 @@ const logoutDialogContent = {
const shutdownDialogContent = {
subject: C_("title", "Power Off"),
subjectWithUpdates: C_("title", "Install Updates & Power Off"),
description: function(seconds) {
return ngettext("The system will power off automatically in %d second.",
"The system will power off automatically in %d seconds.",
seconds).format(seconds);
},
checkBoxText: C_("checkbox", "Install pending software updates"),
showBatteryWarning: true,
confirmButtons: [{ signal: 'ConfirmedReboot',
label: C_("button", "Restart") },
{ signal: 'ConfirmedShutdown',
@ -108,7 +100,6 @@ const restartDialogContent = {
"The system will restart automatically in %d seconds.",
seconds).format(seconds);
},
showBatteryWarning: false,
confirmButtons: [{ signal: 'ConfirmedReboot',
label: C_("button", "Restart") }],
iconName: 'view-refresh-symbolic',
@ -124,11 +115,8 @@ const restartInstallDialogContent = {
"The system will automatically restart and install updates in %d seconds.",
seconds).format(seconds);
},
showBatteryWarning: true,
confirmButtons: [{ signal: 'ConfirmedReboot',
label: C_("button", "Restart &amp; Install") }],
unusedFutureButtonForTranslation: C_("button", "Install &amp; Power Off"),
unusedFutureCheckBoxForTranslation: C_("checkbox", "Power off after updates are installed"),
label: C_("button", "Restart & Install") }],
iconName: 'view-refresh-symbolic',
iconStyleClass: 'end-session-dialog-shutdown-icon',
showOtherSessions: true,
@ -155,14 +143,6 @@ const LogindSessionIface = '<node> \
const LogindSession = Gio.DBusProxy.makeProxyWrapper(LogindSessionIface);
const UPowerIface = '<node> \
<interface name="org.freedesktop.UPower"> \
<property name="OnBattery" type="b" access="read"/> \
</interface> \
</node>';
const UPowerProxy = Gio.DBusProxy.makeProxyWrapper(UPowerIface);
function findAppFromInhibitor(inhibitor) {
let desktopFile;
try {
@ -215,18 +195,6 @@ function _setLabelText(label, text) {
}
}
function _setCheckBoxLabel(checkBox, text) {
let label = checkBox.getLabelActor();
if (text) {
label.set_text(text);
checkBox.actor.show();
} else {
label.set_text('');
checkBox.actor.hide();
}
}
function init() {
// This always returns the same singleton object
// By instantiating it initially, we register the
@ -246,20 +214,6 @@ const EndSessionDialog = new Lang.Class({
this._userManager = AccountsService.UserManager.get_default();
this._user = this._userManager.get_user(GLib.get_user_name());
this._updatesFile = Gio.File.new_for_path('/system-update');
this._preparedUpdateFile = Gio.File.new_for_path('/var/lib/PackageKit/prepared-update');
this._powerProxy = new UPowerProxy(Gio.DBus.system,
'org.freedesktop.UPower',
'/org/freedesktop/UPower',
Lang.bind(this, function(proxy, error) {
if (error) {
log(error.message);
return;
}
this._powerProxy.connect('g-properties-changed',
Lang.bind(this, this._sync));
this._sync();
}));
this._secondsLeft = 0;
this._totalSecondsToStayOpen = 0;
@ -286,8 +240,7 @@ const EndSessionDialog = new Lang.Class({
x_align: St.Align.END,
y_align: St.Align.START });
let messageLayout = new St.BoxLayout({ vertical: true,
style_class: 'end-session-dialog-layout' });
let messageLayout = new St.BoxLayout({ vertical: true });
mainContentLayout.add(messageLayout,
{ y_align: St.Align.START });
@ -307,16 +260,6 @@ const EndSessionDialog = new Lang.Class({
{ y_fill: true,
y_align: St.Align.START });
this._checkBox = new CheckBox.CheckBox();
this._checkBox.actor.connect('clicked', Lang.bind(this, this._sync));
messageLayout.add(this._checkBox.actor);
this._batteryWarning = new St.Label({ style_class: 'end-session-dialog-warning',
text: _("Running on battery power: please plug in before installing updates.") });
this._batteryWarning.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
this._batteryWarning.clutter_text.line_wrap = true;
messageLayout.add(this._batteryWarning);
this._scrollView = new St.ScrollView({ style_class: 'end-session-dialog-list' });
this._scrollView.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC);
this.contentLayout.add(this._scrollView,
@ -342,12 +285,6 @@ const EndSessionDialog = new Lang.Class({
this._inhibitorSection.add_actor(this._sessionHeader);
this._inhibitorSection.add_actor(this._sessionList);
try {
this._updatesPermission = Polkit.Permission.new_sync("org.freedesktop.packagekit.trigger-offline-update", null, null);
} catch(e) {
log('No permission to trigger offline updates: %s'.format(e.toString()));
}
this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(EndSessionDialogIface, this);
this._dbusImpl.export(Gio.DBus.session, '/org/gnome/SessionManager/EndSessionDialog');
},
@ -362,22 +299,13 @@ const EndSessionDialog = new Lang.Class({
if (!open)
return;
if (this._type == 2 && this._updatesFile.query_exists(null))
this._type = 3;
let dialogContent = DialogContent[this._type];
let subject = dialogContent.subject;
// Use different title when we are installing updates
if (dialogContent.subjectWithUpdates && this._checkBox.actor.checked)
subject = dialogContent.subjectWithUpdates;
if (dialogContent.showBatteryWarning) {
// Warn when running on battery power
if (this._powerProxy.OnBattery && this._checkBox.actor.checked)
this._batteryWarning.opacity = 255;
else
this._batteryWarning.opacity = 0;
}
let description;
let displayTime = _roundSecondsToInterval(this._totalSecondsToStayOpen,
this._secondsLeft,
@ -460,75 +388,15 @@ const EndSessionDialog = new Lang.Class({
},
_confirm: function(signal) {
let callback = Lang.bind(this, function() {
this._fadeOutDialog();
this._stopTimer();
this._dbusImpl.emit_signal(signal, null);
});
// Offline update not available; just emit the signal
if (!this._checkBox.actor.visible) {
callback();
return;
}
// Trigger the offline update as requested
if (this._checkBox.actor.checked) {
switch (signal) {
case "ConfirmedReboot":
this._triggerOfflineUpdateReboot(callback);
break;
case "ConfirmedShutdown":
// To actually trigger the offline update, we need to
// reboot to do the upgrade. When the upgrade is complete,
// the computer will shut down automatically.
signal = "ConfirmedReboot";
this._triggerOfflineUpdateShutdown(callback);
break;
default:
callback();
break;
}
} else {
this._triggerOfflineUpdateCancel(callback);
}
this._fadeOutDialog();
this._stopTimer();
this._dbusImpl.emit_signal(signal, null);
},
_onOpened: function() {
this._sync();
},
_triggerOfflineUpdateReboot: function(callback) {
this._pkexecSpawn([TRIGGER_OFFLINE_UPDATE, 'reboot'], callback);
},
_triggerOfflineUpdateShutdown: function(callback) {
this._pkexecSpawn([TRIGGER_OFFLINE_UPDATE, 'power-off'], callback);
},
_triggerOfflineUpdateCancel: function(callback) {
this._pkexecSpawn([TRIGGER_OFFLINE_UPDATE, '--cancel'], callback);
},
_pkexecSpawn: function(argv, callback) {
let ret, pid;
try {
[ret, pid] = GLib.spawn_async(null, ['pkexec'].concat(argv), null,
GLib.SpawnFlags.DO_NOT_REAP_CHILD | GLib.SpawnFlags.SEARCH_PATH,
null);
} catch (e) {
log('Error spawning "pkexec %s": %s'.format(argv.join(' '), e.toString()));
callback();
return;
}
GLib.child_watch_add(GLib.PRIORITY_DEFAULT, pid, function(pid, status) {
GLib.spawn_close_pid(pid);
callback();
});
},
_startTimer: function() {
let startTime = GLib.get_monotonic_time();
this._secondsLeft = this._totalSecondsToStayOpen;
@ -676,9 +544,6 @@ const EndSessionDialog = new Lang.Class({
this._totalSecondsToStayOpen = totalSecondsToStayOpen;
this._type = type;
if (this._type == 2 && this._updatesFile.query_exists(null))
this._type = 3;
this._applications = [];
this._applicationList.destroy_all_children();
@ -691,8 +556,6 @@ const EndSessionDialog = new Lang.Class({
return;
}
let dialogContent = DialogContent[this._type];
for (let i = 0; i < inhibitorObjectPaths.length; i++) {
let inhibitor = new GnomeSession.Inhibitor(inhibitorObjectPaths[i], Lang.bind(this, function(proxy, error) {
this._onInhibitorLoaded(proxy);
@ -701,23 +564,9 @@ const EndSessionDialog = new Lang.Class({
this._applications.push(inhibitor);
}
if (dialogContent.showOtherSessions)
if (DialogContent[type].showOtherSessions)
this._loadSessions();
let preparedUpdate = this._preparedUpdateFile.query_exists(null);
let updateAlreadyTriggered = this._updatesFile.query_exists(null);
let updatesAllowed = this._updatesPermission && this._updatesPermission.allowed;
_setCheckBoxLabel(this._checkBox, dialogContent.checkBoxText);
this._checkBox.actor.visible = (dialogContent.checkBoxText && preparedUpdate && updatesAllowed);
this._checkBox.actor.checked = (preparedUpdate && updateAlreadyTriggered);
// We show the warning either together with the checkbox, or when
// updates have already been triggered, but the user doesn't have
// enough permissions to cancel them.
this._batteryWarning.visible = (dialogContent.showBatteryWarning &&
(this._checkBox.actor.visible || preparedUpdate && updateAlreadyTriggered && !updatesAllowed));
this._updateButtons();
if (!this.open(timestamp)) {

View File

@ -38,7 +38,6 @@ const connect = Lang.bind(_signals, _signals.connect);
const disconnect = Lang.bind(_signals, _signals.disconnect);
const ENABLED_EXTENSIONS_KEY = 'enabled-extensions';
const EXTENSION_DISABLE_VERSION_CHECK_KEY = 'disable-extension-version-validation';
var initted = false;
var enabled;
@ -157,9 +156,7 @@ function loadExtension(extension) {
// Default to error, we set success as the last step
extension.state = ExtensionState.ERROR;
let checkVersion = !global.settings.get_boolean(EXTENSION_DISABLE_VERSION_CHECK_KEY);
if (checkVersion && ExtensionUtils.isOutOfDate(extension)) {
if (ExtensionUtils.isOutOfDate(extension)) {
extension.state = ExtensionState.OUT_OF_DATE;
} else {
let enabled = enabledExtensions.indexOf(extension.uuid) != -1;
@ -270,19 +267,8 @@ function onEnabledExtensionsChanged() {
enabledExtensions = newEnabledExtensions;
}
function _onVersionValidationChanged() {
if (Main.sessionMode.allowExtensions) {
enabledExtensions.forEach(function(uuid) {
if (ExtensionUtils.extensions[uuid])
reloadExtension(ExtensionUtils.extensions[uuid]);
});
}
}
function _loadExtensions() {
global.settings.connect('changed::' + ENABLED_EXTENSIONS_KEY, onEnabledExtensionsChanged);
global.settings.connect('changed::' + EXTENSION_DISABLE_VERSION_CHECK_KEY, _onVersionValidationChanged);
enabledExtensions = getEnabledExtensions();
let finder = new ExtensionUtils.ExtensionFinder();

View File

@ -34,11 +34,7 @@ const FocusCaretTracker = new Lang.Class({
_init: function() {
Atspi.init();
Atspi.set_timeout(250, 250);
this._atspiListener = Atspi.EventListener.new(Lang.bind(this, this._onChanged));
this._focusListenerRegistered = false;
this._caretListenerRegistered = false;
},
_onChanged: function(event) {
@ -49,39 +45,21 @@ const FocusCaretTracker = new Lang.Class({
},
registerFocusListener: function() {
if (this._focusListenerRegistered)
return;
// Ignore the return value, we get an exception if they fail
// And they should never fail
this._atspiListener.register(STATECHANGED + ':focused');
this._atspiListener.register(STATECHANGED + ':selected');
this._focusListenerRegistered = true;
return this._atspiListener.register(STATECHANGED + ':focused') &&
this._atspiListener.register(STATECHANGED + ':selected');
},
registerCaretListener: function() {
if (this._caretListenerRegistered)
return;
this._atspiListener.register(CARETMOVED);
this._caretListenerRegistered = true;
return this._atspiListener.register(CARETMOVED);
},
deregisterFocusListener: function() {
if (!this._focusListenerRegistered)
return;
this._atspiListener.deregister(STATECHANGED + ':focused');
this._atspiListener.deregister(STATECHANGED + ':selected');
this._focusListenerRegistered = false;
return this._atspiListener.deregister(STATECHANGED + ':focused') &&
this._atspiListener.deregister(STATECHANGED + ':selected');
},
deregisterCaretListener: function() {
if (!this._caretListenerRegistered)
return;
this._atspiListener.deregister(CARETMOVED);
this._caretListenerRegistered = false;
return this._atspiListener.deregister(CARETMOVED);
}
});
Signals.addSignalMethods(FocusCaretTracker.prototype);

View File

@ -143,6 +143,11 @@ const BaseIcon = new Lang.Class({
this.icon = this.createIcon(this.iconSize);
this._iconBin.child = this.icon;
// The icon returned by createIcon() might actually be smaller than
// the requested icon size (for instance StTextureCache does this
// for fallback icons), so set the size explicitly.
this._iconBin.set_size(this.iconSize, this.iconSize);
},
_onStyleChanged: function() {

View File

@ -162,9 +162,9 @@ const LayoutManager = new Lang.Class({
this._startingUp = true;
// Normally, the stage is always covered so Clutter doesn't need to clear
// it; however it becomes visible during the startup animation
// See the comment below for a longer explanation
// it; however it becomes visible when using the magnifier.
global.stage.color = DEFAULT_BACKGROUND_COLOR;
global.stage.no_clear_hint = true;
// Set up stage hierarchy to group all UI actors under one container.
this.uiGroup = new Shell.GenericContainer({ name: 'uiGroup' });
@ -184,29 +184,27 @@ const LayoutManager = new Lang.Class({
let height = global.stage.height;
[alloc.min_size, alloc.natural_size] = [height, height];
});
global.stage.add_child(this.uiGroup);
this.systemGroup = new St.Widget({ name: 'systemGroup',
layout_manager: new Clutter.BinLayout() });
this.uiGroup.add_actor(this.systemGroup);
this.sessionGroup = new St.Widget({ name: 'sessionGroup' });
this.uiGroup.add_child(this.sessionGroup);
global.stage.remove_actor(global.window_group);
this.uiGroup.add_actor(global.window_group);
global.stage.add_child(this.uiGroup);
this.sessionGroup.add_actor(global.window_group);
this.overviewGroup = new St.Widget({ name: 'overviewGroup',
visible: false });
this.addChrome(this.overviewGroup);
this.screenShieldGroup = new St.Widget({ name: 'screenShieldGroup',
visible: false,
clip_to_allocation: true,
layout_manager: new Clutter.BinLayout(),
});
this.addChrome(this.screenShieldGroup);
this.panelBox = new St.BoxLayout({ name: 'panelBox',
vertical: true });
this.addChrome(this.panelBox, { affectsStruts: true,
trackFullscreen: true });
this.panelBox.connect('allocation-changed',
Lang.bind(this, this._panelBoxChanged));
this.uiGroup.add_child(this.screenShieldGroup);
this.trayBox = new St.Widget({ name: 'trayBox',
layout_manager: new Clutter.BinLayout() });
@ -219,13 +217,39 @@ const LayoutManager = new Lang.Class({
this.addChrome(this.keyboardBox);
this._keyboardHeightNotifyId = 0;
this.osdGroup = new St.Widget();
this.sessionGroup.add_child(this.osdGroup);
this.switcherPopupGroup = new St.Widget();
this.sessionGroup.add_child(this.switcherPopupGroup);
this.dialogGroup = new St.Widget();
this.sessionGroup.add_child(this.dialogGroup);
// A dummy actor that tracks the mouse or text cursor, based on the
// position set in setDummyCursorPosition.
this.dummyCursor = new St.Widget({ width: 0, height: 0 });
this.uiGroup.add_actor(this.dummyCursor);
this.uiGroup.add_child(this.dummyCursor);
global.stage.remove_actor(global.top_window_group);
this.uiGroup.add_actor(global.top_window_group);
// The panel group isn't in the session, as it needs to go above the screen
// shield, and it isn't animated in the login animation.
this.panelGroup = new St.Widget({ name: 'panelGroup' });
this.uiGroup.add_child(this.panelGroup);
this._trackActor(this.panelGroup, { affectsStruts: true,
trackFullscreen: true });
this.panelGroup.connect('allocation-changed',
Lang.bind(this, this._panelGroupChanged));
this.overlayGroup = new St.Widget({ name: 'overlayGroup' });
this.uiGroup.add_child(this.overlayGroup);
this.menuGroup = new St.Widget();
this.overlayGroup.add_child(this.menuGroup);
this._topSessionGroup = new St.Widget();
this.overlayGroup.add_child(this._topSessionGroup);
global.stage.remove_child(global.top_window_group);
this._topSessionGroup.add_child(global.top_window_group);
this._backgroundGroup = new Meta.BackgroundGroup();
global.window_group.add_child(this._backgroundGroup);
@ -247,8 +271,7 @@ const LayoutManager = new Lang.Class({
// This is called by Main after everything else is constructed
init: function() {
Main.sessionMode.connect('updated', Lang.bind(this, this._sessionUpdated));
this._loadBackground();
this._prepareStartupAnimation();
},
showOverview: function() {
@ -257,6 +280,9 @@ const LayoutManager = new Lang.Class({
this._inOverview = true;
this._updateVisibility();
this._updateRegions();
global.window_group.hide();
global.top_window_group.hide();
},
hideOverview: function() {
@ -265,6 +291,9 @@ const LayoutManager = new Lang.Class({
this._inOverview = false;
this._updateVisibility();
this._queueUpdateRegions();
global.window_group.show();
global.top_window_group.show();
},
_sessionUpdated: function() {
@ -306,7 +335,7 @@ const LayoutManager = new Lang.Class({
});
this.hotCorners = [];
let size = this.panelBox.height;
let size = this.panelGroup.height;
// build new hot corners
for (let i = 0; i < this.monitors.length; i++) {
@ -406,11 +435,11 @@ const LayoutManager = new Lang.Class({
},
_updateBoxes: function() {
this.screenShieldGroup.set_position(0, 0);
this.screenShieldGroup.set_size(global.screen_width, global.screen_height);
this.systemGroup.set_position(0, 0);
this.systemGroup.set_size(global.screen_width, global.screen_height);
this.panelBox.set_position(this.primaryMonitor.x, this.primaryMonitor.y);
this.panelBox.set_size(this.primaryMonitor.width, -1);
this.panelGroup.set_position(this.primaryMonitor.x, this.primaryMonitor.y);
this.panelGroup.set_size(this.primaryMonitor.width, -1);
if (this.keyboardIndex < 0)
this.keyboardIndex = this.primaryIndex;
@ -420,10 +449,10 @@ const LayoutManager = new Lang.Class({
this.trayBox.set_size(this.bottomMonitor.width, -1);
},
_panelBoxChanged: function() {
_panelGroupChanged: function() {
this._updatePanelBarrier();
let size = this.panelBox.height;
let size = this.panelGroup.height;
this.hotCorners.forEach(function(corner) {
if (corner)
corner.setBarrierSize(size);
@ -436,12 +465,12 @@ const LayoutManager = new Lang.Class({
this._rightPanelBarrier = null;
}
if (this.panelBox.height) {
if (this.panelGroup.height) {
let primary = this.primaryMonitor;
this._rightPanelBarrier = new Meta.Barrier({ display: global.display,
x1: primary.x + primary.width, y1: primary.y,
x2: primary.x + primary.width, y2: primary.y + this.panelBox.height,
x2: primary.x + primary.width, y2: primary.y + this.panelGroup.height,
directions: Meta.BarrierDirection.NEGATIVE_X });
}
},
@ -547,25 +576,6 @@ const LayoutManager = new Lang.Class({
return this._keyboardIndex;
},
_loadBackground: function() {
this._systemBackground = new Background.SystemBackground();
this._systemBackground.actor.hide();
global.stage.insert_child_below(this._systemBackground.actor, null);
let constraint = new Clutter.BindConstraint({ source: global.stage,
coordinate: Clutter.BindCoordinate.ALL });
this._systemBackground.actor.add_constraint(constraint);
let signalId = this._systemBackground.connect('loaded', Lang.bind(this, function() {
this._systemBackground.disconnect(signalId);
this._systemBackground.actor.show();
global.stage.show();
this._prepareStartupAnimation();
}));
},
// Startup Animations
//
// We have two different animations, depending on whether we're a greeter
@ -586,6 +596,8 @@ const LayoutManager = new Lang.Class({
// screen. So, we set no_clear_hint at the end of the animation.
_prepareStartupAnimation: function() {
global.stage.show();
// During the initial transition, add a simple actor to block all events,
// so they don't get delivered to X11 windows that have been transformed.
this._coverPane = new Clutter.Actor({ opacity: 0,
@ -595,7 +607,7 @@ const LayoutManager = new Lang.Class({
this.addChrome(this._coverPane);
if (Main.sessionMode.isGreeter) {
this.panelBox.translation_y = -this.panelBox.height;
this.panelGroup.translation_y = -this.panelGroup.height;
} else {
this._updateBackgrounds();
@ -610,10 +622,10 @@ const LayoutManager = new Lang.Class({
let x = monitor.x + monitor.width / 2.0;
let y = monitor.y + monitor.height / 2.0;
this.uiGroup.set_pivot_point(x / global.screen_width,
y / global.screen_height);
this.uiGroup.scale_x = this.uiGroup.scale_y = 0.75;
this.uiGroup.opacity = 0;
this.sessionGroup.set_pivot_point(x / global.screen_width,
y / global.screen_height);
this.sessionGroup.scale_x = this.sessionGroup.scale_y = 0.75;
this.sessionGroup.opacity = 0;
global.window_group.set_clip(monitor.x, monitor.y, monitor.width, monitor.height);
}
@ -639,7 +651,7 @@ const LayoutManager = new Lang.Class({
},
_startupAnimationGreeter: function() {
Tweener.addTween(this.panelBox,
Tweener.addTween(this.panelGroup,
{ translation_y: 0,
time: STARTUP_ANIMATION_TIME,
transition: 'easeOutQuad',
@ -648,7 +660,7 @@ const LayoutManager = new Lang.Class({
},
_startupAnimationSession: function() {
Tweener.addTween(this.uiGroup,
Tweener.addTween(this.sessionGroup,
{ scale_x: 1,
scale_y: 1,
opacity: 255,
@ -659,16 +671,9 @@ const LayoutManager = new Lang.Class({
},
_startupAnimationComplete: function() {
// At this point, the UI group is covering everything, so
// we no longer need to clear the stage
global.stage.no_clear_hint = true;
this._coverPane.destroy();
this._coverPane = null;
this._systemBackground.actor.destroy();
this._systemBackground = null;
this._startingUp = false;
this.trayBox.show();
@ -758,9 +763,9 @@ const LayoutManager = new Lang.Class({
// monitor (it will be hidden whenever a fullscreen window is visible,
// and shown otherwise)
addChrome: function(actor, params) {
this.uiGroup.add_actor(actor);
if (this.uiGroup.contains(global.top_window_group))
this.uiGroup.set_child_below_sibling(actor, global.top_window_group);
this.sessionGroup.add_actor(actor);
if (this.sessionGroup.contains(global.top_window_group))
this.sessionGroup.set_child_below_sibling(actor, global.top_window_group);
this._trackActor(actor, params);
},
@ -811,7 +816,7 @@ const LayoutManager = new Lang.Class({
//
// Removes @actor from the chrome
removeChrome: function(actor) {
this.uiGroup.remove_actor(actor);
this.sessionGroup.remove_actor(actor);
this._untrackActor(actor);
},
@ -834,8 +839,6 @@ const LayoutManager = new Lang.Class({
Lang.bind(this, this._queueUpdateRegions));
actorData.allocationId = actor.connect('notify::allocation',
Lang.bind(this, this._queueUpdateRegions));
actorData.destroyId = actor.connect('destroy',
Lang.bind(this, this._untrackActor));
// Note that destroying actor will unset its parent, so we don't
// need to connect to 'destroy' too.
@ -853,7 +856,7 @@ const LayoutManager = new Lang.Class({
this._trackedActors.splice(i, 1);
actor.disconnect(actorData.visibleId);
actor.disconnect(actorData.allocationId);
actor.disconnect(actorData.destroyId);
actor.disconnect(actorData.parentSetId);
this._queueUpdateRegions();
},
@ -861,9 +864,6 @@ const LayoutManager = new Lang.Class({
_updateVisibility: function() {
let windowsVisible = Main.sessionMode.hasWindows && !this._inOverview;
global.window_group.visible = windowsVisible;
global.top_window_group.visible = windowsVisible;
for (let i = 0; i < this._trackedActors.length; i++) {
let actorData = this._trackedActors[i], visible;
if (!actorData.trackFullscreen)
@ -1082,9 +1082,9 @@ const HotCorner = new Lang.Class({
this._ripple2 = new St.BoxLayout({ style_class: 'ripple-box', opacity: 0, visible: false });
this._ripple3 = new St.BoxLayout({ style_class: 'ripple-box', opacity: 0, visible: false });
layoutManager.uiGroup.add_actor(this._ripple1);
layoutManager.uiGroup.add_actor(this._ripple2);
layoutManager.uiGroup.add_actor(this._ripple3);
layoutManager.sessionGroup.add_actor(this._ripple1);
layoutManager.sessionGroup.add_actor(this._ripple2);
layoutManager.sessionGroup.add_actor(this._ripple3);
},
setBarrierSize: function(size) {

View File

@ -503,7 +503,7 @@ const Inspector = new Lang.Class({
let container = new Shell.GenericContainer({ width: 0,
height: 0 });
container.connect('allocate', Lang.bind(this, this._allocate));
Main.uiGroup.add_actor(container);
Main.layoutManager.sessionGroup.add_actor(container);
let eventHandler = new St.BoxLayout({ name: 'LookingGlassDialog',
vertical: false,
@ -801,16 +801,14 @@ const LookingGlass = new Lang.Class({
this._updateFont();
// We want it to appear to slide out from underneath the panel
Main.uiGroup.add_actor(this.actor);
Main.uiGroup.set_child_below_sibling(this.actor,
Main.layoutManager.panelBox);
Main.layoutManager.panelBox.connect('allocation-changed',
Lang.bind(this, this._queueResize));
Main.layoutManager.sessionGroup.add_actor(this.actor);
Main.layoutManager.panelGroup.connect('allocation-changed',
Lang.bind(this, this._queueResize));
Main.layoutManager.keyboardBox.connect('allocation-changed',
Lang.bind(this, this._queueResize));
this._objInspector = new ObjInspector(this);
Main.uiGroup.add_actor(this._objInspector.actor);
Main.layoutManager.sessionGroup.add_actor(this._objInspector.actor);
this._objInspector.actor.hide();
let toolbar = new St.BoxLayout({ name: 'Toolbar' });
@ -1037,7 +1035,7 @@ const LookingGlass = new Lang.Class({
let availableHeight = primary.height - Main.layoutManager.keyboardBox.height;
let myHeight = Math.min(primary.height * 0.7, availableHeight * 0.9);
this.actor.x = primary.x + (primary.width - myWidth) / 2;
this._hiddenY = primary.y + Main.layoutManager.panelBox.height - myHeight - 4; // -4 to hide the top corners
this._hiddenY = primary.y + Main.layoutManager.panelGroup.height - myHeight - 4; // -4 to hide the top corners
this._targetY = this._hiddenY + myHeight;
this.actor.y = this._hiddenY;
this.actor.width = myWidth;

View File

@ -11,7 +11,6 @@ const Mainloop = imports.mainloop;
const Meta = imports.gi.Meta;
const Signals = imports.signals;
const Background = imports.ui.background;
const FocusCaretTracker = imports.ui.focusCaretTracker;
const Main = imports.ui.main;
const MagnifierDBus = imports.ui.magnifierDBus;
@ -58,6 +57,20 @@ const Magnifier = new Lang.Class({
// Magnifier is a manager of ZoomRegions.
this._zoomRegions = [];
// Export to dbus.
magDBusService = new MagnifierDBus.ShellMagnifier();
let showAtLaunch = this._settingsInit();
this.setActive(showAtLaunch);
},
_initialize: function() {
if (this._initialized)
return;
this._initialized = true;
this._settingsInitLate();
// Create small clutter tree for the magnified mouse.
let cursorTracker = Meta.CursorTracker.get_for_screen(global.screen);
this._mouseSprite = new Clutter.Texture();
@ -73,15 +86,11 @@ const Magnifier = new Lang.Class({
let aZoomRegion = new ZoomRegion(this, this._cursorRoot);
this._zoomRegions.push(aZoomRegion);
let showAtLaunch = this._settingsInit(aZoomRegion);
this._settingsInitRegion(aZoomRegion);
aZoomRegion.scrollContentsTo(this.xMouse, this.yMouse);
cursorTracker.connect('cursor-changed', Lang.bind(this, this._updateMouseSprite));
this._cursorTracker = cursorTracker;
// Export to dbus.
magDBusService = new MagnifierDBus.ShellMagnifier();
this.setActive(showAtLaunch);
},
/**
@ -106,21 +115,20 @@ const Magnifier = new Lang.Class({
* @activate: Boolean to activate or de-activate the magnifier.
*/
setActive: function(activate) {
let isActive = this.isActive();
if (activate == this.isActive())
return;
if (activate)
this._initialize();
this._zoomRegions.forEach (function(zoomRegion, index, array) {
zoomRegion.setActive(activate);
});
if (isActive != activate) {
if (activate) {
Meta.disable_unredirect_for_screen(global.screen);
this.startTrackingMouse();
} else {
Meta.enable_unredirect_for_screen(global.screen);
this.stopTrackingMouse();
}
}
if (activate)
this.startTrackingMouse();
else
this.stopTrackingMouse();
// Make sure system mouse pointer is shown when all zoom regions are
// invisible.
@ -440,64 +448,68 @@ const Magnifier = new Lang.Class({
this._mouseSprite.set_anchor_point(xHot, yHot);
},
_settingsInit: function(zoomRegion) {
_settingsInitRegion: function(zoomRegion) {
// Mag factor is accurate to two decimal places.
let aPref = parseFloat(this._settings.get_double(MAG_FACTOR_KEY).toFixed(2));
if (aPref != 0.0)
zoomRegion.setMagFactor(aPref, aPref);
aPref = this._settings.get_enum(SCREEN_POSITION_KEY);
if (aPref)
zoomRegion.setScreenPosition(aPref);
zoomRegion.setLensMode(this._settings.get_boolean(LENS_MODE_KEY));
zoomRegion.setClampScrollingAtEdges(!this._settings.get_boolean(CLAMP_MODE_KEY));
aPref = this._settings.get_enum(MOUSE_TRACKING_KEY);
if (aPref)
zoomRegion.setMouseTrackingMode(aPref);
aPref = this._settings.get_enum(FOCUS_TRACKING_KEY);
if (aPref)
zoomRegion.setFocusTrackingMode(aPref);
aPref = this._settings.get_enum(CARET_TRACKING_KEY);
if (aPref)
zoomRegion.setCaretTrackingMode(aPref);
aPref = this._settings.get_boolean(INVERT_LIGHTNESS_KEY);
if (aPref)
zoomRegion.setInvertLightness(aPref);
aPref = this._settings.get_double(COLOR_SATURATION_KEY);
if (aPref)
zoomRegion.setColorSaturation(aPref);
let bc = {};
bc.r = this._settings.get_double(BRIGHT_RED_KEY);
bc.g = this._settings.get_double(BRIGHT_GREEN_KEY);
bc.b = this._settings.get_double(BRIGHT_BLUE_KEY);
zoomRegion.setBrightness(bc);
bc.r = this._settings.get_double(CONTRAST_RED_KEY);
bc.g = this._settings.get_double(CONTRAST_GREEN_KEY);
bc.b = this._settings.get_double(CONTRAST_BLUE_KEY);
zoomRegion.setContrast(bc);
},
_settingsInit: function() {
this._appSettings = new Gio.Settings({ schema: APPLICATIONS_SCHEMA });
this._settings = new Gio.Settings({ schema: MAGNIFIER_SCHEMA });
if (zoomRegion) {
// Mag factor is accurate to two decimal places.
let aPref = parseFloat(this._settings.get_double(MAG_FACTOR_KEY).toFixed(2));
if (aPref != 0.0)
zoomRegion.setMagFactor(aPref, aPref);
this._appSettings.connect('changed::' + SHOW_KEY, Lang.bind(this, function() {
let active = this._appSettings.get_boolean(SHOW_KEY);
this.setActive(active);
}));
aPref = this._settings.get_enum(SCREEN_POSITION_KEY);
if (aPref)
zoomRegion.setScreenPosition(aPref);
zoomRegion.setLensMode(this._settings.get_boolean(LENS_MODE_KEY));
zoomRegion.setClampScrollingAtEdges(!this._settings.get_boolean(CLAMP_MODE_KEY));
aPref = this._settings.get_enum(MOUSE_TRACKING_KEY);
if (aPref)
zoomRegion.setMouseTrackingMode(aPref);
aPref = this._settings.get_enum(FOCUS_TRACKING_KEY);
if (aPref)
zoomRegion.setFocusTrackingMode(aPref);
aPref = this._settings.get_enum(CARET_TRACKING_KEY);
if (aPref)
zoomRegion.setCaretTrackingMode(aPref);
aPref = this._settings.get_boolean(INVERT_LIGHTNESS_KEY);
if (aPref)
zoomRegion.setInvertLightness(aPref);
aPref = this._settings.get_double(COLOR_SATURATION_KEY);
if (aPref)
zoomRegion.setColorSaturation(aPref);
let bc = {};
bc.r = this._settings.get_double(BRIGHT_RED_KEY);
bc.g = this._settings.get_double(BRIGHT_GREEN_KEY);
bc.b = this._settings.get_double(BRIGHT_BLUE_KEY);
zoomRegion.setBrightness(bc);
bc.r = this._settings.get_double(CONTRAST_RED_KEY);
bc.g = this._settings.get_double(CONTRAST_GREEN_KEY);
bc.b = this._settings.get_double(CONTRAST_BLUE_KEY);
zoomRegion.setContrast(bc);
}
return this._appSettings.get_boolean(SHOW_KEY);
},
_settingsInitLate: function() {
let showCrosshairs = this._settings.get_boolean(SHOW_CROSS_HAIRS_KEY);
this.addCrosshairs();
this.setCrosshairsVisible(showCrosshairs);
this._appSettings.connect('changed::' + SHOW_KEY,
Lang.bind(this, function() {
this.setActive(this._appSettings.get_boolean(SHOW_KEY));
}));
this._settings.connect('changed::' + SCREEN_POSITION_KEY,
Lang.bind(this, this._updateScreenPosition));
this._settings.connect('changed::' + MAG_FACTOR_KEY,
@ -561,7 +573,6 @@ const Magnifier = new Lang.Class({
Lang.bind(this, function() {
this.setCrosshairsClip(this._settings.get_boolean(CROSS_HAIRS_CLIP_KEY));
}));
return this._appSettings.get_boolean(SHOW_KEY);
},
_updateScreenPosition: function() {
@ -720,16 +731,8 @@ const ZoomRegion = new Lang.Class({
let component = event.source.get_component_iface();
if (!component || event.detail1 != 1)
return;
let extents;
try {
extents = component.get_extents(Atspi.CoordType.SCREEN);
} catch(e) {
log('Failed to read extents of focused component: ' + e.message);
return;
}
[this._xFocus, this._yFocus] = [extents.x + (extents.width / 2),
extents.y + (extents.height / 2)];
let extents = component.get_extents(Atspi.CoordType.SCREEN);
[this._xFocus, this._yFocus] = [extents.x, extents.y]
this._centerFromFocusPosition();
},
@ -737,14 +740,7 @@ const ZoomRegion = new Lang.Class({
let text = event.source.get_text_iface();
if (!text)
return;
let extents;
try {
extents = text.get_character_extents(text.get_caret_offset(), 0);
} catch(e) {
log('Failed to read extents of text caret: ' + e.message);
return;
}
let extents = text.get_character_extents(text.get_caret_offset(), 0);
[this._xCaret, this._yCaret] = [extents.x, extents.y];
this._centerFromCaretPosition();
},
@ -767,9 +763,6 @@ const ZoomRegion = new Lang.Class({
} else {
this._destroyActors();
}
this._syncCaretTracking();
this._syncFocusTracking();
},
/**
@ -829,7 +822,10 @@ const ZoomRegion = new Lang.Class({
*/
setFocusTrackingMode: function(mode) {
this._focusTrackingMode = mode;
this._syncFocusTracking();
if (this._focusTrackingMode == GDesktopEnums.MagnifierFocusTrackingMode.NONE)
this._focusCaretTracker.deregisterFocusListener();
else
this._focusCaretTracker.registerFocusListener();
},
/**
@ -838,27 +834,10 @@ const ZoomRegion = new Lang.Class({
*/
setCaretTrackingMode: function(mode) {
this._caretTrackingMode = mode;
this._syncCaretTracking();
},
_syncFocusTracking: function() {
let enabled = this._focusTrackingMode != GDesktopEnums.MagnifierFocusTrackingMode.NONE &&
this.isActive();
if (enabled)
this._focusCaretTracker.registerFocusListener();
else
this._focusCaretTracker.deregisterFocusListener();
},
_syncCaretTracking: function() {
let enabled = this._caretTrackingMode != GDesktopEnums.MagnifierCaretTrackingMode.NONE &&
this.isActive();
if (enabled)
this._focusCaretTracker.registerCaretListener();
else
if (this._caretTrackingMode == GDesktopEnums.MagnifierCaretTrackingMode.NONE)
this._focusCaretTracker.deregisterCaretListener();
else
this._focusCaretTracker.registerCaretListener();
},
/**
@ -1199,17 +1178,13 @@ const ZoomRegion = new Lang.Class({
// Add a background for when the magnified uiGroup is scrolled
// out of view (don't want to see desktop showing through).
this._background = new Clutter.Actor({ background_color: Main.DEFAULT_BACKGROUND_COLOR,
layout_manager: new Clutter.BinLayout(),
width: global.screen_width,
height: global.screen_height });
let noiseTexture = (new Background.SystemBackground()).actor;
this._background.add_actor(noiseTexture);
mainGroup.add_actor(this._background);
// Clone the group that contains all of UI on the screen. This is the
// chrome, the windows, etc.
this._uiGroupClone = new Clutter.Clone({ source: Main.uiGroup,
clip_to_allocation: true });
this._uiGroupClone = new Clutter.Clone({ source: Main.layoutManager.uiGroup });
mainGroup.add_actor(this._uiGroupClone);
// Add either the given mouseSourceActor to the ZoomRegion, or a clone of

View File

@ -64,7 +64,6 @@ let screencastService = null;
let modalCount = 0;
let keybindingMode = Shell.KeyBindingMode.NONE;
let modalActorFocusStack = [];
let uiGroup = null;
let magnifier = null;
let xdndHandler = null;
let keyboard = null;
@ -150,11 +149,6 @@ function _initializeUI() {
// Setup the stage hierarchy early
layoutManager = new Layout.LayoutManager();
// Various parts of the codebase still refers to Main.uiGroup
// instead using the layoutManager. This keeps that code
// working until it's updated.
uiGroup = layoutManager.uiGroup;
screencastService = new Screencast.ScreencastService();
xdndHandler = new XdndHandler.XdndHandler();
ctrlAltTabManager = new CtrlAltTab.CtrlAltTabManager();
@ -172,6 +166,19 @@ function _initializeUI() {
windowAttentionHandler = new WindowAttentionHandler.WindowAttentionHandler();
componentManager = new Components.ComponentManager();
if (sessionMode.isGreeter && screenShield) {
layoutManager.connect('startup-prepared', function() {
screenShield.showDialog();
});
}
layoutManager.connect('startup-complete', function() {
if (keybindingMode == Shell.KeyBindingMode.NONE)
keybindingMode = Shell.KeyBindingMode.NORMAL;
if (screenShield)
screenShield.lockIfWasLocked();
});
layoutManager.init();
overview.init();
@ -202,21 +209,6 @@ function _initializeUI() {
ExtensionDownloader.init();
ExtensionSystem.init();
if (sessionMode.isGreeter && screenShield) {
layoutManager.connect('startup-prepared', function() {
screenShield.showDialog();
});
}
layoutManager.connect('startup-complete', function() {
if (keybindingMode == Shell.KeyBindingMode.NONE) {
keybindingMode = Shell.KeyBindingMode.NORMAL;
}
if (screenShield) {
screenShield.lockIfWasLocked();
}
});
}
function _loadDefaultStylesheet() {

View File

@ -1162,10 +1162,32 @@ const SourceActor = new Lang.Class({
}));
this._actorDestroyed = false;
this._iconBin = new St.Bin({ x_fill: true,
this._counterLabel = new St.Label({ x_align: Clutter.ActorAlign.CENTER,
x_expand: true,
y_align: Clutter.ActorAlign.CENTER,
y_expand: true });
this._counterBin = new St.Bin({ style_class: 'summary-source-counter',
child: this._counterLabel,
layout_manager: new Clutter.BinLayout() });
this._counterBin.hide();
this._counterBin.connect('style-changed', Lang.bind(this, function() {
let themeNode = this._counterBin.get_theme_node();
this._counterBin.translation_x = themeNode.get_length('-shell-counter-overlap-x');
this._counterBin.translation_y = themeNode.get_length('-shell-counter-overlap-y');
}));
this._iconBin = new St.Bin({ width: size,
height: size,
x_fill: true,
y_fill: true });
this.actor.add_actor(this._iconBin);
this.actor.add_actor(this._counterBin);
this._source.connect('count-updated', Lang.bind(this, this._updateCount));
this._updateCount();
this._source.connect('icon-updated', Lang.bind(this, this._updateIcon));
this._updateIcon();
@ -1189,48 +1211,6 @@ const SourceActor = new Lang.Class({
_allocate: function(actor, box, flags) {
// the iconBin should fill our entire box
this._iconBin.allocate(box, flags);
},
_updateIcon: function() {
if (this._actorDestroyed)
return;
if (!this._iconSet)
this._iconBin.child = this._source.createIcon(this._size);
}
});
const SourceActorWithLabel = new Lang.Class({
Name: 'SourceActorWithLabel',
Extends: SourceActor,
_init: function(source, size) {
this.parent(source, size);
this._counterLabel = new St.Label({ x_align: Clutter.ActorAlign.CENTER,
x_expand: true,
y_align: Clutter.ActorAlign.CENTER,
y_expand: true });
this._counterBin = new St.Bin({ style_class: 'summary-source-counter',
child: this._counterLabel,
layout_manager: new Clutter.BinLayout() });
this._counterBin.hide();
this._counterBin.connect('style-changed', Lang.bind(this, function() {
let themeNode = this._counterBin.get_theme_node();
this._counterBin.translation_x = themeNode.get_length('-shell-counter-overlap-x');
this._counterBin.translation_y = themeNode.get_length('-shell-counter-overlap-y');
}));
this.actor.add_actor(this._counterBin);
this._source.connect('count-updated', Lang.bind(this, this._updateCount));
this._updateCount();
},
_allocate: function(actor, box, flags) {
this.parent(actor, box, flags);
let childBox = new Clutter.ActorBox();
@ -1253,6 +1233,14 @@ const SourceActorWithLabel = new Lang.Class({
this._counterBin.allocate(childBox, flags);
},
_updateIcon: function() {
if (this._actorDestroyed)
return;
if (!this._iconSet)
this._iconBin.child = this._source.createIcon(this._size);
},
_updateCount: function() {
if (this._actorDestroyed)
return;
@ -1365,7 +1353,7 @@ const Source = new Lang.Class({
if (this._mainIcon)
return;
this._mainIcon = new SourceActorWithLabel(this, this.SOURCE_ICON_SIZE);
this._mainIcon = new SourceActor(this, this.SOURCE_ICON_SIZE);
},
// Unlike createIcon, this always returns the same actor;
@ -1623,7 +1611,7 @@ const MessageTrayMenu = new Lang.Class({
this._accountManager.prepare_async(null, Lang.bind(this, this._onIMPresenceChanged));
this.actor.hide();
Main.layoutManager.addChrome(this.actor);
Main.layoutManager.menuGroup.add_child(this.actor);
this._busyItem = new PopupMenu.PopupSwitchMenuItem(_("Notifications"));
this._busyItem.connect('toggled', Lang.bind(this, this._updatePresence));
@ -2524,7 +2512,7 @@ const MessageTray = new Lang.Class({
let cloneSource = Main.overview.visible ? Main.layoutManager.overviewGroup : global.window_group;
this._desktopClone = new Clutter.Clone({ source: cloneSource,
clip: new Clutter.Geometry(this._bottomMonitorGeometry) });
Main.uiGroup.insert_child_above(this._desktopClone, cloneSource);
Main.layoutManager.sessionGroup.insert_child_above(this._desktopClone, cloneSource);
this._desktopClone.x = 0;
this._desktopClone.y = 0;
this._desktopClone.show();

View File

@ -41,7 +41,7 @@ const ModalDialog = new Lang.Class({
_init: function(params) {
params = Params.parse(params, { shellReactive: false,
styleClass: null,
parentActor: Main.uiGroup,
parentActor: Main.layoutManager.dialogGroup,
keybindingMode: Shell.KeyBindingMode.SYSTEM_MODAL,
shouldFadeIn: true,
destroyOnClose: true });

View File

@ -110,7 +110,7 @@ const OsdWindow = new Lang.Class({
Lang.bind(this, this._monitorsChanged));
this._monitorsChanged();
Main.uiGroup.add_child(this.actor);
Main.layoutManager.osdGroup.add_child(this.actor);
},
setIcon: function(icon) {
@ -200,9 +200,8 @@ const OsdWindow = new Lang.Class({
let scale = Math.min(scalew, scaleh);
this._popupSize = 110 * Math.max(1, scale);
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
this._icon.icon_size = this._popupSize / (2 * scaleFactor);
this._box.translation_y = monitor.height / 4;
this._icon.icon_size = this._popupSize / 2;
this._box.style_changed();
},
@ -218,10 +217,7 @@ const OsdWindow = new Lang.Class({
let minWidth = this._popupSize - verticalPadding - leftBorder - rightBorder;
let minHeight = this._popupSize - horizontalPadding - topBorder - bottomBorder;
// minWidth/minHeight here are in real pixels,
// but the theme takes measures in unscaled dimensions
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
this._box.style = 'min-height: %dpx;'.format(Math.max(minWidth, minHeight) / scaleFactor);
this._box.style = 'min-height: %dpx;'.format(Math.max(minWidth, minHeight));
},
setMonitor: function(index) {

View File

@ -493,13 +493,8 @@ const Overview = new Lang.Class({
},
fadeOutDesktop: function() {
if (!this._desktopFade.get_n_children()) {
let clone = this._getDesktopClone();
if (!clone)
return;
this._desktopFade.add_child(clone);
}
if (!this._desktopFade.get_n_children())
this._desktopFade.add_child(this._getDesktopClone());
this._desktopFade.opacity = 255;
this._desktopFade.show();
@ -627,7 +622,7 @@ const Overview = new Lang.Class({
this.animationInProgress = true;
this.visibleTarget = false;
this.viewSelector.zoomFromOverview();
this.viewSelector.leaveOverview();
// Make other elements fade out.
Tweener.addTween(this._stack,

View File

@ -213,7 +213,7 @@ const AppMenuButton = new Lang.Class({
this._label = new TextShadower();
this._label.actor.y_align = Clutter.ActorAlign.CENTER;
this._hbox.add_actor(this._label.actor);
this._arrow = PopupMenu.arrowIcon(St.Side.BOTTOM);
this._arrow = PopupMenu.unicodeArrow(St.Side.BOTTOM);
this._hbox.add_actor(this._arrow);
this._iconBottomClip = 0;
@ -812,11 +812,7 @@ const AggregateMenu = new Lang.Class({
this._indicators = new St.BoxLayout({ style_class: 'panel-status-indicators-box' });
this.actor.add_child(this._indicators);
if (Config.HAVE_NETWORKMANAGER) {
this._network = new imports.ui.status.network.NMApplet();
} else {
this._network = null;
}
this._network = new imports.ui.status.network.NMApplet();
if (Config.HAVE_BLUETOOTH) {
this._bluetooth = new imports.ui.status.bluetooth.Indicator();
} else {
@ -833,27 +829,22 @@ const AggregateMenu = new Lang.Class({
this._indicators.add_child(this._screencast.indicators);
this._indicators.add_child(this._location.indicators);
if (this._network) {
this._indicators.add_child(this._network.indicators);
}
this._indicators.add_child(this._network.indicators);
if (this._bluetooth) {
this._indicators.add_child(this._bluetooth.indicators);
}
this._indicators.add_child(this._rfkill.indicators);
this._indicators.add_child(this._volume.indicators);
this._indicators.add_child(this._power.indicators);
this._indicators.add_child(PopupMenu.arrowIcon(St.Side.BOTTOM));
this._indicators.add_child(PopupMenu.unicodeArrow(St.Side.BOTTOM));
this.menu.addMenuItem(this._volume.menu);
this.menu.addMenuItem(this._brightness.menu);
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
if (this._network) {
this.menu.addMenuItem(this._network.menu);
}
this.menu.addMenuItem(this._network.menu);
if (this._bluetooth) {
this.menu.addMenuItem(this._bluetooth.menu);
}
this.menu.addMenuItem(this._location.menu);
this.menu.addMenuItem(this._rfkill.menu);
this.menu.addMenuItem(this._power.menu);
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
@ -910,7 +901,7 @@ const Panel = new Lang.Class({
this.actor.remove_style_pseudo_class('overview');
}));
Main.layoutManager.panelBox.add(this.actor);
Main.layoutManager.panelGroup.add_child(this.actor);
Main.ctrlAltTabManager.addGroup(this.actor, _("Top Bar"), 'emblem-system-symbolic',
{ sortGroup: CtrlAltTab.SortGroup.TOP });

View File

@ -130,7 +130,7 @@ const Button = new Lang.Class({
this.menu.connect('open-state-changed', Lang.bind(this, this._onOpenStateChanged));
this.menu.actor.connect('key-press-event', Lang.bind(this, this._onMenuKeyPress));
Main.uiGroup.add_actor(this.menu.actor);
Main.layoutManager.menuGroup.add_child(this.menu.actor);
this.menu.actor.hide();
}
},

View File

@ -45,35 +45,28 @@ function isPopupMenuItemVisible(child) {
/**
* @side Side to which the arrow points.
*/
function arrowIcon(side) {
let rotation;
function unicodeArrow(side) {
let arrowChar;
switch (side) {
case St.Side.TOP:
rotation = 180;
arrowChar = '\u25B4';
break;
case St.Side.RIGHT:
rotation = - 90;
arrowChar = '\u25B8';
break;
case St.Side.BOTTOM:
rotation = 0;
arrowChar = '\u25BE';
break;
case St.Side.LEFT:
rotation = 90;
arrowChar = '\u25C2';
break;
}
let gicon = new Gio.FileIcon({ file: Gio.File.new_for_path(global.datadir +
'/theme/menu-arrow-symbolic.svg') });
let arrow = new St.Icon({ style_class: 'popup-menu-arrow',
gicon: gicon,
accessible_role: Atk.Role.ARROW,
y_expand: true,
y_align: Clutter.ActorAlign.CENTER });
arrow.rotation_angle_z = rotation;
return arrow;
return new St.Label({ text: arrowChar,
style_class: 'unicode-arrow',
accessible_role: Atk.Role.ARROW,
y_expand: true,
y_align: Clutter.ActorAlign.CENTER });
}
const PopupBaseMenuItem = new Lang.Class({
@ -118,7 +111,6 @@ const PopupBaseMenuItem = new Lang.Class({
this.actor.connect('key-focus-in', Lang.bind(this, this._onKeyFocusIn));
this.actor.connect('key-focus-out', Lang.bind(this, this._onKeyFocusOut));
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
},
_getTopMenu: function() {
@ -200,9 +192,6 @@ const PopupBaseMenuItem = new Lang.Class({
destroy: function() {
this.actor.destroy();
},
_onDestroy: function() {
this.emit('destroy');
},
@ -879,14 +868,14 @@ const PopupSubMenu = new Lang.Class({
if (animate) {
let [minHeight, naturalHeight] = this.actor.get_preferred_height(-1);
this.actor.height = 0;
this.actor._arrowRotation = this._arrow.rotation_angle_z;
this.actor._arrow_rotation = this._arrow.rotation_angle_z;
Tweener.addTween(this.actor,
{ _arrowRotation: this.actor._arrowRotation + 90,
{ _arrow_rotation: 90,
height: naturalHeight,
time: 0.25,
onUpdateScope: this,
onUpdate: function() {
this._arrow.rotation_angle_z = this.actor._arrowRotation;
this._arrow.rotation_angle_z = this.actor._arrow_rotation;
},
onCompleteScope: this,
onComplete: function() {
@ -894,7 +883,7 @@ const PopupSubMenu = new Lang.Class({
}
});
} else {
this._arrow.rotation_angle_z = this.actor._arrowRotation + 90;
this._arrow.rotation_angle_z = 90;
}
},
@ -912,14 +901,14 @@ const PopupSubMenu = new Lang.Class({
animate = false;
if (animate) {
this.actor._arrowRotation = this._arrow.rotation_angle_z;
this.actor._arrow_rotation = this._arrow.rotation_angle_z;
Tweener.addTween(this.actor,
{ _arrowRotation: this.actor._arrowRotation - 90,
{ _arrow_rotation: 0,
height: 0,
time: 0.25,
onUpdateScope: this,
onUpdate: function() {
this._arrow.rotation_angle_z = this.actor._arrowRotation;
this._arrow.rotation_angle_z = this.actor._arrow_rotation;
},
onCompleteScope: this,
onComplete: function() {
@ -928,7 +917,7 @@ const PopupSubMenu = new Lang.Class({
},
});
} else {
this._arrow.rotation_angle_z = this.actor._arrowRotation - 90;
this._arrow.rotation_angle_z = 0;
this.actor.hide();
}
},
@ -1000,7 +989,7 @@ const PopupSubMenuMenuItem = new Lang.Class({
y_align: Clutter.ActorAlign.CENTER });
this.actor.add_child(this.status);
this._triangle = arrowIcon(St.Side.RIGHT);
this._triangle = unicodeArrow(St.Side.RIGHT);
this._triangle.pivot_point = new Clutter.Point({ x: 0.5, y: 0.6 });
this._triangleBin = new St.Widget({ y_expand: true,

View File

@ -456,8 +456,6 @@ const ScreenShield = new Lang.Class({
Name: 'ScreenShield',
_init: function() {
this.actor = Main.layoutManager.screenShieldGroup;
this._lockScreenState = MessageTray.State.HIDDEN;
this._lockScreenGroup = new St.Widget({ x_expand: true,
y_expand: true,
@ -466,6 +464,7 @@ const ScreenShield = new Lang.Class({
name: 'lockScreenGroup',
visible: false,
});
this._lockScreenGroup.connect('key-press-event',
Lang.bind(this, this._onLockScreenKeyPress));
this._lockScreenGroup.connect('scroll-event',
@ -516,10 +515,9 @@ const ScreenShield = new Lang.Class({
reactive: true,
pivot_point: new Clutter.Point({ x: 0.5, y: 0.5 }),
name: 'lockDialogGroup' });
Main.layoutManager.systemGroup.add_child(this._lockDialogGroup);
this.actor.add_actor(this._lockDialogGroup);
this.actor.add_actor(this._lockScreenGroup);
Main.layoutManager.screenShieldGroup.add_child(this._lockScreenGroup);
this._presence = new GnomeSession.Presence(Lang.bind(this, function(proxy, error) {
if (error) {
logError(error, 'Error while reading gnome-session presence');
@ -577,19 +575,27 @@ const ScreenShield = new Lang.Class({
// The "long" lightbox is used for the longer (20 seconds) fade from session
// to idle status, the "short" is used for quickly fading to black when locking
// manually
this._longLightbox = new Lightbox.Lightbox(Main.uiGroup,
this._longLightbox = new Lightbox.Lightbox(Main.layoutManager.overlayGroup,
{ inhibitEvents: true,
fadeFactor: 1 });
this._longLightbox.connect('shown', Lang.bind(this, this._onLongLightboxShown));
this._shortLightbox = new Lightbox.Lightbox(Main.uiGroup,
this._shortLightbox = new Lightbox.Lightbox(Main.layoutManager.overlayGroup,
{ inhibitEvents: true,
fadeFactor: 1 });
this._shortLightbox.connect('shown', Lang.bind(this, this._onShortLightboxShown));
Main.layoutManager.connect('monitors-changed', Lang.bind(this, this._monitorsChanged));
this._monitorsChanged();
this.idleMonitor = Meta.IdleMonitor.get_core();
this._cursorTracker = Meta.CursorTracker.get_for_screen(global.screen);
},
_monitorsChanged: function() {
this._longLightbox.actor.set_size(global.screen_width, global.screen_height);
this._shortLightbox.actor.set_size(global.screen_width, global.screen_height);
},
_createBackground: function(monitorIndex) {
let monitor = Main.layoutManager.monitors[monitorIndex];
let widget = new St.Widget({ style_class: 'screen-shield-background',
@ -647,14 +653,14 @@ const ScreenShield = new Lang.Class({
if (this._isModal)
return true;
this._isModal = Main.pushModal(this.actor, { keybindingMode: Shell.KeyBindingMode.LOCK_SCREEN });
this._isModal = Main.pushModal(this._lockDialogGroup, { keybindingMode: Shell.KeyBindingMode.LOCK_SCREEN });
if (this._isModal)
return true;
// We failed to get a pointer grab, it means that
// something else has it. Try with a keyboard grab only
this._isModal = Main.pushModal(this.actor, { options: Meta.ModalOptions.POINTER_ALREADY_GRABBED,
keybindingMode: Shell.KeyBindingMode.LOCK_SCREEN });
this._isModal = Main.pushModal(this._lockDialogGroup, { options: Meta.ModalOptions.POINTER_ALREADY_GRABBED,
keybindingMode: Shell.KeyBindingMode.LOCK_SCREEN });
return this._isModal;
},
@ -912,7 +918,7 @@ const ScreenShield = new Lang.Class({
return false;
}));
this.actor.show();
this._lockDialogGroup.show();
this._isGreeter = Main.sessionMode.isGreeter;
this._isLocked = true;
if (this._ensureUnlockDialog(true, true))
@ -1002,6 +1008,7 @@ const ScreenShield = new Lang.Class({
return;
this._ensureLockScreen();
this._lockDialogGroup.hide();
this._lockDialogGroup.scale_x = 1;
this._lockDialogGroup.scale_y = 1;
@ -1100,8 +1107,10 @@ const ScreenShield = new Lang.Class({
}));
this._cursorTracker.set_pointer_visible(false);
this._lockScreenState = MessageTray.State.SHOWN;
this._lockDialogGroup.show();
this._lockScreenGroup.fixed_position_set = false;
this._lockScreenState = MessageTray.State.SHOWN;
Main.layoutManager.sessionGroup.hide();
this._lockScreenScrollCounter = 0;
if (params.fadeToBlack && params.animateFade) {
@ -1224,10 +1233,11 @@ const ScreenShield = new Lang.Class({
this._dialog.popModal();
if (this._isModal) {
Main.popModal(this.actor);
Main.popModal(this._lockDialogGroup);
this._isModal = false;
}
Main.layoutManager.sessionGroup.show();
Tweener.addTween(this._lockDialogGroup, {
scale_x: 0,
scale_y: 0,
@ -1246,7 +1256,7 @@ const ScreenShield = new Lang.Class({
this._longLightbox.hide();
this._shortLightbox.hide();
this.actor.hide();
this._lockScreenGroup.hide();
if (this._becameActiveId != 0) {
this.idleMonitor.remove_watch(this._becameActiveId);
@ -1270,7 +1280,7 @@ const ScreenShield = new Lang.Class({
if (this._activationTime == 0)
this._activationTime = GLib.get_monotonic_time();
this.actor.show();
this._lockScreenGroup.show();
if (Main.sessionMode.currentMode != 'unlock-dialog' &&
Main.sessionMode.currentMode != 'lock-screen') {

View File

@ -146,7 +146,7 @@ const SelectArea = new Lang.Class({
reactive: true,
x: 0,
y: 0 });
Main.uiGroup.add_actor(this._group);
Main.layoutManager.osdGroup.add_actor(this._group);
this._group.connect('button-press-event',
Lang.bind(this, this._onButtonPress));
@ -259,9 +259,9 @@ const Flashspot = new Lang.Class({
Extends: Lightbox.Lightbox,
_init: function(area) {
this.parent(Main.uiGroup, { inhibitEvents: true,
width: area.width,
height: area.height });
this.parent(Main.layoutManager.osdGroup, { inhibitEvents: true,
width: area.width,
height: area.height });
this.actor.style_class = 'flashspot';
this.actor.set_position(area.x, area.y);

View File

@ -10,8 +10,6 @@ const FileUtils = imports.misc.fileUtils;
const Main = imports.ui.main;
const Params = imports.misc.params;
const Config = imports.misc.config;
const DEFAULT_MODE = 'restrictive';
const _modes = {
@ -94,12 +92,8 @@ const _modes = {
isLocked: false,
isPrimary: true,
unlockDialog: imports.ui.unlockDialog.UnlockDialog,
components: Config.HAVE_NETWORKMANAGER ?
['networkAgent', 'polkitAgent', 'telepathyClient',
'keyring', 'autorunManager', 'automountManager'] :
['polkitAgent', 'telepathyClient',
components: ['networkAgent', 'polkitAgent', 'telepathyClient',
'keyring', 'autorunManager', 'automountManager'],
panel: {
left: ['activities', 'appMenu'],
center: ['dateMenu'],

View File

@ -36,7 +36,7 @@ const EntryMenu = new Lang.Class({
this._passwordItem = null;
Main.uiGroup.add_actor(this.actor);
Main.layoutManager.menuGroup.add_actor(this.actor);
this.actor.hide();
},

View File

@ -1,11 +1,11 @@
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
const Atk = imports.gi.Atk;
const Cairo = imports.cairo;
const Clutter = imports.gi.Clutter;
const Lang = imports.lang;
const St = imports.gi.St;
const Signals = imports.signals;
const Atk = imports.gi.Atk;
const SLIDER_SCROLL_STEP = 0.05; /* Slider scrolling step in % */

View File

@ -44,7 +44,7 @@ const ATIndicator = new Lang.Class({
this._hbox = new St.BoxLayout({ style_class: 'panel-status-menu-box' });
this._hbox.add_child(new St.Icon({ style_class: 'system-status-icon',
icon_name: 'preferences-desktop-accessibility-symbolic' }));
this._hbox.add_child(PopupMenu.arrowIcon(St.Side.BOTTOM));
this._hbox.add_child(PopupMenu.unicodeArrow(St.Side.BOTTOM));
this.actor.add_child(this._hbox);

View File

@ -38,10 +38,7 @@ const Indicator = new Lang.Class({
log(error.message);
return;
}
this._sync();
}));
this._proxy.connect('g-properties-changed', Lang.bind(this, this._sync));
// The Bluetooth menu only appears when Bluetooth is in use,
// so just statically build it with a "Turn Off" menu item.
@ -93,12 +90,11 @@ const Indicator = new Lang.Class({
_sync: function() {
let nDevices = this._getNConnectedDevices();
this._indicator.visible = nDevices > 0;
this._item.actor.visible = !this._proxy.BluetoothAirplaneMode;
let on = nDevices > 0;
this._indicator.visible = on;
this._item.actor.visible = on;
if (nDevices > 0)
if (on)
this._item.status.text = ngettext("%d Connected Device", "%d Connected Devices", nDevices).format(nDevices);
else
this._item.status.text = _("Not Connected");
},
});

View File

@ -341,7 +341,7 @@ const InputSourceIndicator = new Lang.Class({
this._hbox = new St.BoxLayout({ style_class: 'panel-status-menu-box' });
this._hbox.add_child(this._container);
this._hbox.add_child(PopupMenu.arrowIcon(St.Side.BOTTOM));
this._hbox.add_child(PopupMenu.unicodeArrow(St.Side.BOTTOM));
this.actor.add_child(this._hbox);
this.actor.add_style_class_name('panel-status-button');

View File

@ -1,40 +1,18 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio;
const Lang = imports.lang;
const Shell = imports.gi.Shell;
const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu;
const LOCATION_SCHEMA = 'org.gnome.shell.location';
const MAX_ACCURACY_LEVEL = 'max-accuracy-level';
var GeoclueIface = '<node> \
<interface name="org.freedesktop.GeoClue2.Manager"> \
<property name="InUse" type="b" access="read"/> \
<property name="AvailableAccuracyLevel" type="u" access="read"/> \
<method name="AddAgent"> \
<arg name="id" type="s" direction="in"/> \
</method> \
</interface> \
</node>';
const GeoclueManager = Gio.DBusProxy.makeProxyWrapper(GeoclueIface);
var AgentIface = '<node> \
<interface name="org.freedesktop.GeoClue2.Agent"> \
<property name="MaxAccuracyLevel" type="u" access="read"/> \
<method name="AuthorizeApp"> \
<arg name="desktop_id" type="s" direction="in"/> \
<arg name="req_accuracy_level" type="u" direction="in"/> \
<arg name="authorized" type="b" direction="out"/> \
<arg name="allowed_accuracy_level" type="u" direction="out"/> \
</method> \
</interface> \
</node>';
const Indicator = new Lang.Class({
Name: 'LocationIndicator',
Extends: PanelMenu.SystemIndicator,
@ -42,55 +20,18 @@ const Indicator = new Lang.Class({
_init: function() {
this.parent();
this._settings = new Gio.Settings({ schema: LOCATION_SCHEMA });
this._settings.connect('changed::' + MAX_ACCURACY_LEVEL,
Lang.bind(this, this._onMaxAccuracyLevelChanged));
this._indicator = this._addIndicator();
this._indicator.icon_name = 'find-location-symbolic';
this._item = new PopupMenu.PopupSubMenuMenuItem(_("Location"), true);
this._item.icon.icon_name = 'find-location-symbolic';
var credentials = new Gio.Credentials();
var uid = credentials.get_unix_user();
this._agent = Gio.DBusExportedObject.wrapJSObject(AgentIface, this);
this._agent.export(Gio.DBus.system,
'/org/freedesktop/GeoClue2/Agent/' + uid);
this._item.status.text = _("On");
this._onOffAction = this._item.menu.addAction(_("Turn Off"), Lang.bind(this, this._onOnOffAction));
this.menu.addMenuItem(this._item);
this._sync();
this._watchId = Gio.bus_watch_name(Gio.BusType.SYSTEM,
'org.freedesktop.GeoClue2',
0,
Lang.bind(this, this._connectToGeoclue),
Lang.bind(this, this._onGeoclueAppeared),
Lang.bind(this, this._onGeoclueVanished));
this._onMaxAccuracyLevelChanged();
this._connectToGeoclue();
},
get MaxAccuracyLevel() {
return this._getMaxAccuracyLevel();
},
// We (and geoclue) have currently no way to reliably identifying apps so
// for now, lets just authorize all apps as long as they provide a valid
// desktop ID. We also ensure they don't get more accuracy than global max.
AuthorizeApp: function(desktop_id, reqAccuracyLevel) {
var appSystem = Shell.AppSystem.get_default();
var app = appSystem.lookup_app(desktop_id + ".desktop");
if (app == null) {
return [false, 0];
}
let allowedAccuracyLevel = clamp(reqAccuracyLevel, 0, this._getMaxAccuracyLevel());
return [true, allowedAccuracyLevel];
},
_syncIndicator: function() {
_sync: function() {
if (this._proxy == null) {
this._indicator.visible = false;
return;
@ -99,98 +40,19 @@ const Indicator = new Lang.Class({
this._indicator.visible = this._proxy.InUse;
},
_connectToGeoclue: function() {
if (this._proxy != null || this._connecting)
return false;
_onGeoclueAppeared: function() {
// FIXME: This should be done async
this._proxy = new GeoclueManager(Gio.DBus.system,
'org.freedesktop.GeoClue2',
'/org/freedesktop/GeoClue2/Manager');
this._proxy.connect('g-properties-changed', Lang.bind(this, this._sync));
this._connecting = true;
new GeoclueManager(Gio.DBus.system,
'org.freedesktop.GeoClue2',
'/org/freedesktop/GeoClue2/Manager',
Lang.bind(this, this._onProxyReady));
return true;
},
_onProxyReady: function(proxy, error) {
if (error != null) {
log(error.message);
this._connecting = false;
return;
}
this._proxy = proxy;
this._propertiesChangedId = this._proxy.connect('g-properties-changed',
Lang.bind(this, this._onGeocluePropsChanged));
this._updateMenu();
this._syncIndicator();
this._proxy.AddAgentRemote('gnome-shell', Lang.bind(this, this._onAgentRegistered));
},
_onAgentRegistered: function(result, error) {
this._connecting = false;
this._notifyMaxAccuracyLevel();
if (error != null)
log(error.message);
this._sync();
},
_onGeoclueVanished: function() {
if (this._propertiesChangedId) {
this._proxy.disconnect(this._propertiesChangedId);
this._propertiesChangedId = 0;
}
this._proxy = null;
this._syncIndicator();
},
_onOnOffAction: function() {
if (this._getMaxAccuracyLevel() == 0)
this._settings.set_enum(MAX_ACCURACY_LEVEL, this._availableAccuracyLevel);
else
this._settings.set_enum(MAX_ACCURACY_LEVEL, 0);
},
_onMaxAccuracyLevelChanged: function() {
if (this._getMaxAccuracyLevel() == 0) {
this._item.status.text = _("Off");
this._onOffAction.label.text = _("Turn On");
} else {
this._item.status.text = _("On");
this._onOffAction.label.text = _("Turn Off");
}
// Gotta ensure geoclue is up and we are registered as agent to it
// before we emit the notify for this property change.
if (!this._connectToGeoclue())
this._notifyMaxAccuracyLevel();
},
_getMaxAccuracyLevel: function() {
return this._settings.get_enum(MAX_ACCURACY_LEVEL);
},
_notifyMaxAccuracyLevel: function() {
let variant = new GLib.Variant('u', this._getMaxAccuracyLevel());
this._agent.emit_property_changed('MaxAccuracyLevel', variant);
},
_updateMenu: function() {
this._availableAccuracyLevel = this._proxy.AvailableAccuracyLevel;
this.menu.actor.visible = (this._availableAccuracyLevel != 0);
},
_onGeocluePropsChanged: function(proxy, properties) {
let unpacked = properties.deep_unpack();
if ("InUse" in unpacked)
this._syncIndicator();
if ("AvailableAccuracyLevel" in unpacked)
this._updateMenu();
this._sync();
}
});
function clamp(value, min, max) {
return Math.max(min, Math.min(max, value));
}

View File

@ -9,17 +9,14 @@ const NetworkManager = imports.gi.NetworkManager;
const NMClient = imports.gi.NMClient;
const NMGtk = imports.gi.NMGtk;
const Signals = imports.signals;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
const Animation = imports.ui.animation;
const Main = imports.ui.main;
const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu;
const MessageTray = imports.ui.messageTray;
const ModalDialog = imports.ui.modalDialog;
const ModemManager = imports.misc.modemManager;
const Rfkill = imports.ui.status.rfkill;
const Util = imports.misc.util;
const NMConnectionCategory = {
@ -105,34 +102,18 @@ const NMConnectionItem = new Lang.Class({
this._activeConnection = null;
this._activeConnectionChangedId = 0;
this._buildUI();
this._sync();
},
_buildUI: function() {
this.labelItem = new PopupMenu.PopupMenuItem('');
this.labelItem.connect('activate', Lang.bind(this, this._toggle));
this.radioItem = new PopupMenu.PopupMenuItem(this._connection.get_id(), false);
this.radioItem.connect('activate', Lang.bind(this, this._activate));
this.switchItem = new PopupMenu.PopupSwitchMenuItem(connection.get_id(), false);
this.switchItem.connect('toggled', Lang.bind(this, this._toggle));
this._sync();
},
destroy: function() {
this.labelItem.destroy();
this.radioItem.destroy();
},
updateForConnection: function(connection) {
// connection should always be the same object
// (and object path) as this._connection, but
// this can be false if NetworkManager was restarted
// and picked up connections in a different order
// Just to be safe, we set it here again
this._connection = connection;
this.radioItem.label.text = connection.get_id();
this._sync();
this.emit('name-changed');
this.switchItem.destroy();
},
getName: function() {
@ -148,8 +129,9 @@ const NMConnectionItem = new Lang.Class({
_sync: function() {
let isActive = this.isActive();
this.labelItem.label.text = isActive ? _("Turn Off") : this._section.getConnectLabel();
this.radioItem.setOrnament(isActive ? PopupMenu.Ornament.DOT : PopupMenu.Ornament.NONE);
this.labelItem.label.text = isActive ? _("Turn Off") : _("Connect");
this.switchItem.setToggleState(isActive);
this.switchItem.setStatus(this._getStatus());
this.emit('icon-changed');
},
@ -162,11 +144,8 @@ const NMConnectionItem = new Lang.Class({
this._sync();
},
_activate: function() {
if (this._activeConnection == null)
this._section.activateConnection(this._connection);
this._sync();
_getStatus: function() {
return null;
},
_connectionStateChanged: function(ac, newstate, reason) {
@ -201,11 +180,11 @@ const NMConnectionSection = new Lang.Class({
this._connections = [];
this._labelSection = new PopupMenu.PopupMenuSection();
this._radioSection = new PopupMenu.PopupMenuSection();
this._switchSection = new PopupMenu.PopupMenuSection();
this.item = new PopupMenu.PopupSubMenuMenuItem('', true);
this.item.menu.addMenuItem(this._labelSection);
this.item.menu.addMenuItem(this._radioSection);
this.item.menu.addMenuItem(this._switchSection);
this.connect('icon-changed', Lang.bind(this, this._sync));
},
@ -217,7 +196,7 @@ const NMConnectionSection = new Lang.Class({
_sync: function() {
let nItems = this._connectionItems.size;
this._radioSection.actor.visible = (nItems > 1);
this._switchSection.actor.visible = (nItems > 1);
this._labelSection.actor.visible = (nItems == 1);
this.item.status.text = this._getStatus();
@ -232,10 +211,6 @@ const NMConnectionSection = new Lang.Class({
this.item.label.text = '';
},
_getMenuIcon: function() {
return this.getIndicatorIcon();
},
_getStatus: function() {
let values = this._connectionItems.values();
for (let item of values) {
@ -246,8 +221,8 @@ const NMConnectionSection = new Lang.Class({
return _("Off");
},
getConnectLabel: function() {
return _("Connect");
_hasConnection: function(connection) {
return this._connectionItems.has(connection.get_uuid());
},
_connectionValid: function(connection) {
@ -255,7 +230,10 @@ const NMConnectionSection = new Lang.Class({
},
_connectionSortFunction: function(one, two) {
return GLib.utf8_collate(one.get_id(), two.get_id());
if (one._timestamp == two._timestamp)
return GLib.utf8_collate(one.get_id(), two.get_id());
return two._timestamp - one._timestamp;
},
_makeConnectionItem: function(connection) {
@ -266,20 +244,10 @@ const NMConnectionSection = new Lang.Class({
if (!this._connectionValid(connection))
return;
// This function is called everytime connection is added or updated
// In the usual case, we already added this connection and UUID
// didn't change. So we need to check if we already have an item,
// and update it for properties in the connection that changed
// (the only one we care about is the name)
// But it's also possible we didn't know about this connection
// (eg, during coldplug, or because it was updated and suddenly
// it's valid for this device), in which case we add a new item
if (this._hasConnection(connection))
return;
let item = this._connectionItems.get(connection.get_uuid());
if (item)
item.updateForConnection(connection);
else
this._addConnection(connection);
this._addConnection(connection);
},
_addConnection: function(connection) {
@ -293,11 +261,10 @@ const NMConnectionSection = new Lang.Class({
item.connect('activation-failed', Lang.bind(this, function(item, reason) {
this.emit('activation-failed', reason);
}));
item.connect('name-changed', Lang.bind(this, this._sync));
let pos = Util.insertSorted(this._connections, connection, Lang.bind(this, this._connectionSortFunction));
this._labelSection.addMenuItem(item.labelItem, pos);
this._radioSection.addMenuItem(item.radioItem, pos);
this._switchSection.addMenuItem(item.switchItem, pos);
this._connectionItems.set(connection.get_uuid(), item);
this._sync();
},
@ -325,19 +292,11 @@ const NMConnectionDevice = new Lang.Class({
this._settings = settings;
this._autoConnectItem = this.item.menu.addAction(_("Connect"), Lang.bind(this, this._autoConnect));
this._deactivateItem = this._radioSection.addAction(_("Turn Off"), Lang.bind(this, this.deactivateConnection));
this._stateChangedId = this._device.connect('state-changed', Lang.bind(this, this._deviceStateChanged));
this._activeConnectionChangedId = this._device.connect('notify::active-connection', Lang.bind(this, this._activeConnectionChanged));
},
_canReachInternet: function() {
if (this._client.primary_connection != this._device.active_connection)
return true;
return this._client.connectivity == NetworkManager.ConnectivityState.FULL;
},
_autoConnect: function() {
let connection = new NetworkManager.Connection();
this._client.add_and_activate_connection(connection, this._device, null, null);
@ -412,7 +371,6 @@ const NMConnectionDevice = new Lang.Class({
_sync: function() {
let nItems = this._connectionItems.size;
this._autoConnectItem.actor.visible = (nItems == 0);
this._deactivateItem.actor.visible = this._device.state > NetworkManager.DeviceState.DISCONNECTED;
this.parent();
},
@ -472,33 +430,33 @@ const NMDeviceWired = new Lang.Class({
this.item.menu.addMenuItem(createSettingsAction(_("Wired Settings"), device));
},
_hasCarrier: function() {
if (this._device instanceof NMClient.DeviceEthernet)
return this._device.carrier;
else
return true;
_isConnected: function() {
if (!this._device.active_connection)
return false;
let state = this._device.active_connection.state;
return state >= NetworkManager.ActiveConnectionState.ACTIVATING;
},
_sync: function() {
this.item.actor.visible = this._hasCarrier();
this.item.actor.visible = this._isConnected();
this.parent();
},
getIndicatorIcon: function() {
if (this._device.active_connection) {
let state = this._device.active_connection.state;
_getMenuIcon: function() {
if (this._device.active_connection)
return this.getIndicatorIcon();
else
return 'network-wired-disconnected-symbolic';
},
if (state == NetworkManager.ActiveConnectionState.ACTIVATING) {
return 'network-wired-acquiring-symbolic';
} else if (state == NetworkManager.ActiveConnectionState.ACTIVATED) {
if (this._canReachInternet())
return 'network-wired-symbolic';
else
return 'network-wired-no-route-symbolic';
} else {
return 'network-wired-disconnected-symbolic';
}
} else
getIndicatorIcon: function() {
let state = this._device.active_connection.state;
if (state == NetworkManager.ActiveConnectionState.ACTIVATING)
return 'network-wired-acquiring-symbolic';
else if (state == NetworkManager.ActiveConnectionState.ACTIVATED)
return 'network-wired-symbolic';
else
return 'network-wired-disconnected-symbolic';
}
});
@ -565,20 +523,28 @@ const NMDeviceModem = new Lang.Class({
return this.parent();
},
getIndicatorIcon: function() {
if (this._device.active_connection) {
if (this._device.active_connection.state == NetworkManager.ActiveConnectionState.ACTIVATING)
return 'network-cellular-acquiring-symbolic';
return this._getSignalIcon();
} else {
_getMenuIcon: function() {
if (this._device.active_connection)
return this.getIndicatorIcon();
else
return 'network-cellular-signal-none-symbolic';
}
},
_getSignalIcon: function() {
return 'network-cellular-signal-' + signalToIcon(this._mobileDevice.signal_quality) + '-symbolic';
},
getIndicatorIcon: function() {
if (this._device.active_connection.state == NetworkManager.ActiveConnectionState.ACTIVATING)
return 'network-cellular-acquiring-symbolic';
if (!this._mobileDevice) {
// this can happen for bluetooth in PAN mode
return 'network-cellular-connected-symbolic';
}
return this._getSignalIcon();
}
});
const NMDeviceBluetooth = new Lang.Class({
@ -592,26 +558,21 @@ const NMDeviceBluetooth = new Lang.Class({
this.item.menu.addMenuItem(createSettingsAction(_("Mobile Broadband Settings"), device));
},
_getDescription: function() {
return this._device.name;
},
getConnectLabel: function() {
return _("Use as Internet connection");
_getMenuIcon: function() {
if (this._device.active_connection)
return this.getIndicatorIcon();
else
return 'network-cellular-signal-none-symbolic';
},
getIndicatorIcon: function() {
if (this._device.active_connection) {
let state = this._device.active_connection.state;
if (state == NetworkManager.ActiveConnectionState.ACTIVATING)
return 'network-cellular-acquiring-symbolic';
else if (state == NetworkManager.ActiveConnectionState.ACTIVATED)
return 'network-cellular-connected-symbolic';
else
return 'network-cellular-signal-none-symbolic';
} else {
let state = this._device.active_connection.state;
if (state == NetworkManager.ActiveConnectionState.ACTIVATING)
return 'network-cellular-acquiring-symbolic';
else if (state == NetworkManager.ActiveConnectionState.ACTIVATED)
return 'network-cellular-connected-symbolic';
else
return 'network-cellular-signal-none-symbolic';
}
}
});
@ -684,26 +645,16 @@ const NMWirelessDialog = new Lang.Class({
Name: 'NMWirelessDialog',
Extends: ModalDialog.ModalDialog,
_init: function(client, device, settings) {
_init: function(client, device) {
this.parent({ styleClass: 'nm-dialog' });
this._client = client;
this._device = device;
this._wirelessEnabledChangedId = this._client.connect('notify::wireless-enabled',
Lang.bind(this, this._syncView));
this._rfkill = Rfkill.getRfkillManager();
this._airplaneModeChangedId = this._rfkill.connect('airplane-mode-changed',
Lang.bind(this, this._syncView));
this._networks = [];
this._buildLayout();
let connections = settings.list_connections();
this._connections = connections.filter(Lang.bind(this, function(connection) {
return device.connection_valid(connection);
}));
this._connections = device.get_available_connections();
this._apAddedId = device.connect('access-point-added', Lang.bind(this, this._accessPointAdded));
this._apRemovedId = device.connect('access-point-removed', Lang.bind(this, this._accessPointRemoved));
@ -718,12 +669,6 @@ const NMWirelessDialog = new Lang.Class({
this._selectedNetwork = null;
this._activeApChanged();
this._updateSensitivity();
this._syncView();
if (accessPoints.length == 0) {
/* If there are no visible access points, request a scan */
this._device.request_scan_simple(null);
}
},
destroy: function() {
@ -739,14 +684,6 @@ const NMWirelessDialog = new Lang.Class({
GObject.Object.prototype.disconnect.call(this._device, this._activeApChangedId);
this._activeApChangedId = 0;
}
if (this._wirelessEnabledChangedId) {
this._client.disconnect(this._wirelessEnabledChangedId);
this._wirelessEnabledChangedId = 0;
}
if (this._airplaneModeChangedId) {
this._rfkill.disconnect(this._airplaneModeChangedId);
this._airplaneModeChangedId = 0;
}
this.parent();
},
@ -768,44 +705,13 @@ const NMWirelessDialog = new Lang.Class({
},
_updateSensitivity: function() {
let connectSensitive = this._client.wireless_enabled && this._selectedNetwork && (this._selectedNetwork != this._activeNetwork);
let connectSensitive = this._selectedNetwork && (this._selectedNetwork != this._activeNetwork);
this._connectButton.reactive = connectSensitive;
this._connectButton.can_focus = connectSensitive;
},
_syncView: function() {
if (this._rfkill.airplaneMode) {
this._airplaneBox.show();
this._airplaneIcon.icon_name = 'airplane-mode-symbolic';
this._airplaneHeadline.text = _("Airplane Mode is On");
this._airplaneText.text = _("Wi-Fi is disabled when airplane mode is on.");
this._airplaneButton.label = _("Turn Off Airplane Mode");
this._airplaneButton.visible = !this._rfkill.hwAirplaneMode;
this._airplaneInactive.visible = this._rfkill.hwAirplaneMode;
this._noNetworksBox.hide();
} else if (!this._client.wireless_enabled) {
this._airplaneBox.show();
this._airplaneIcon.icon_name = 'dialog-information-symbolic';
this._airplaneHeadline.text = _("Wi-Fi is Off");
this._airplaneText.text = _("Wi-Fi needs to be turned on in order to connect to a network.");
this._airplaneButton.label = _("Turn On Wi-Fi");
this._airplaneButton.show();
this._airplaneInactive.hide();
this._noNetworksBox.hide();
} else {
this._airplaneBox.hide();
this._noNetworksBox.visible = (this._networks.length == 0);
}
if (this._noNetworksBox.visible)
this._noNetworksSpinner.play();
else
this._noNetworksSpinner.stop();
_updateVisibility: function() {
this._noNetworksLabel.visible = (this._networks.length == 0);
},
_buildLayout: function() {
@ -839,43 +745,11 @@ const NMWirelessDialog = new Lang.Class({
this._scrollView.add_actor(this._itemBox);
this._stack.add_child(this._scrollView);
this._noNetworksBox = new St.BoxLayout({ vertical: true,
style_class: 'no-networks-box',
x_align: Clutter.ActorAlign.CENTER,
y_align: Clutter.ActorAlign.CENTER });
this._noNetworksSpinner = new Animation.AnimatedIcon(global.datadir + '/theme/process-working.svg', 24, 24);
this._noNetworksBox.add_actor(this._noNetworksSpinner.actor);
this._noNetworksBox.add_actor(new St.Label({ style_class: 'no-networks-label',
text: _("No Networks") }));
this._stack.add_child(this._noNetworksBox);
this._airplaneBox = new St.BoxLayout({ vertical: true,
style_class: 'nm-dialog-airplane-box',
this._noNetworksLabel = new St.Label({ style_class: 'no-networks-label',
x_align: Clutter.ActorAlign.CENTER,
y_align: Clutter.ActorAlign.CENTER });
this._airplaneIcon = new St.Icon({ icon_size: 48 });
this._airplaneHeadline = new St.Label({ style_class: 'nm-dialog-airplane-headline' });
this._airplaneText = new St.Label({ style_class: 'nm-dialog-airplane-text' });
let airplaneSubStack = new St.Widget({ layout_manager: new Clutter.BinLayout });
this._airplaneButton = new St.Button({ style_class: 'modal-dialog-button' });
this._airplaneButton.connect('clicked', Lang.bind(this, function() {
if (this._rfkill.airplaneMode)
this._rfkill.airplaneMode = false;
else
this._client.wireless_enabled = true;
}));
airplaneSubStack.add_actor(this._airplaneButton);
this._airplaneInactive = new St.Label({ style_class: 'nm-dialog-airplane-text',
text: _("Use hardware switch to turn off") });
airplaneSubStack.add_actor(this._airplaneInactive);
this._airplaneBox.add(this._airplaneIcon, { x_align: St.Align.MIDDLE });
this._airplaneBox.add(this._airplaneHeadline, { x_align: St.Align.MIDDLE });
this._airplaneBox.add(this._airplaneText, { x_align: St.Align.MIDDLE });
this._airplaneBox.add(airplaneSubStack, { x_align: St.Align.MIDDLE });
this._stack.add_child(this._airplaneBox);
y_align: Clutter.ActorAlign.CENTER,
text: _("No Networks") });
this._stack.add_child(this._noNetworksLabel);
this.contentLayout.add(this._stack, { expand: true });
@ -1068,7 +942,7 @@ const NMWirelessDialog = new Lang.Class({
this._itemBox.insert_child_at_index(network.item.actor, newPos);
}
this._syncView();
this._updateVisibility();
},
_accessPointRemoved: function(device, accessPoint) {
@ -1083,14 +957,14 @@ const NMWirelessDialog = new Lang.Class({
network.accessPoints.splice(res.ap, 1);
if (network.accessPoints.length == 0) {
network.item.actor.destroy();
network.item.destroy();
this._networks.splice(res.network, 1);
} else {
network.item.updateBestAP(network.accessPoints[0]);
this._resortItems();
}
this._syncView();
this._updateVisibility();
},
_resortItems: function() {
@ -1130,10 +1004,9 @@ const NMDeviceWireless = new Lang.Class({
Name: 'NMDeviceWireless',
category: NMConnectionCategory.WIRELESS,
_init: function(client, device, settings) {
_init: function(client, device) {
this._client = client;
this._device = device;
this._settings = settings;
this._description = '';
@ -1201,7 +1074,7 @@ const NMDeviceWireless = new Lang.Class({
},
_showDialog: function() {
this._dialog = new NMWirelessDialog(this._client, this._device, this._settings);
this._dialog = new NMWirelessDialog(this._client, this._device);
this._dialog.connect('closed', Lang.bind(this, this._dialogClosed));
this._dialog.open();
},
@ -1248,12 +1121,7 @@ const NMDeviceWireless = new Lang.Class({
_getStatus: function() {
let ap = this._device.active_access_point;
if (this._isHotSpotMaster())
return _("Hotspot Active");
else if (this._device.state >= NetworkManager.DeviceState.PREPARE &&
this._device.state < NetworkManager.DeviceState.ACTIVATED)
return _("Connecting");
else if (ap)
if (ap)
return ssidToLabel(ap.get_ssid());
else if (!this._client.wireless_hardware_enabled)
return _("Hardware Disabled");
@ -1272,52 +1140,20 @@ const NMDeviceWireless = new Lang.Class({
return 'network-wireless-signal-none-symbolic';
},
_canReachInternet: function() {
if (this._client.primary_connection != this._device.active_connection)
return true;
return this._client.connectivity == NetworkManager.ConnectivityState.FULL;
},
_isHotSpotMaster: function() {
if (!this._device.active_connection)
return false;
let connection = this._settings.get_connection_by_path(this._device.active_connection.connection);
if (!connection)
return false;
let ip4config = connection.get_setting_ip4_config();
if (!ip4config)
return false;
return ip4config.get_method() == NetworkManager.SETTING_IP4_CONFIG_METHOD_SHARED;
},
getIndicatorIcon: function() {
if (this._device.state < NetworkManager.DeviceState.PREPARE)
return 'network-wireless-disconnected-symbolic';
if (this._device.state < NetworkManager.DeviceState.ACTIVATED)
if (this._device.state >= NetworkManager.DeviceState.PREPARE &&
this._device.state < NetworkManager.DeviceState.ACTIVATED)
return 'network-wireless-acquiring-symbolic';
if (this._isHotSpotMaster())
return 'network-wireless-hotspot-symbolic';
let ap = this._device.active_access_point;
if (!ap) {
if (this._device.mode != NM80211Mode.ADHOC)
log('An active wireless connection, in infrastructure mode, involves no access point?');
if (this._canReachInternet())
return 'network-wireless-connected-symbolic';
else
return 'network-wireless-no-route-symbolic';
return 'network-wireless-connected-symbolic';
}
if (this._canReachInternet())
return 'network-wireless-signal-' + signalToIcon(ap.strength) + '-symbolic';
else
return 'network-wireless-no-route-symbolic';
return 'network-wireless-signal-' + signalToIcon(ap.strength) + '-symbolic';
},
});
Signals.addSignalMethods(NMDeviceWireless.prototype);
@ -1333,22 +1169,6 @@ const NMVPNConnectionItem = new Lang.Class({
return this._activeConnection.vpn_state != NetworkManager.VPNConnectionState.DISCONNECTED;
},
_buildUI: function() {
this.labelItem = new PopupMenu.PopupMenuItem('');
this.labelItem.connect('activate', Lang.bind(this, this._toggle));
this.radioItem = new PopupMenu.PopupSwitchMenuItem(this._connection.get_id(), false);
this.radioItem.connect('toggled', Lang.bind(this, this._toggle));
},
_sync: function() {
let isActive = this.isActive();
this.labelItem.label.text = isActive ? _("Turn Off") : this._section.getConnectLabel();
this.radioItem.setToggleState(isActive);
this.radioItem.setStatus(this._getStatus());
this.emit('icon-changed');
},
_getStatus: function() {
if (this._activeConnection == null)
return null;
@ -1418,39 +1238,15 @@ const NMVPNSection = new Lang.Class({
_init: function(client) {
this.parent(client);
this._vpnSettings = new PopupMenu.PopupMenuItem('');
this.item.menu.addMenuItem(this._vpnSettings);
this._vpnSettings.connect('activate', Lang.bind(this, this._onSettingsActivate));
this._sync();
},
_sync: function() {
let nItems = this._connectionItems.size;
this.item.actor.visible = (nItems > 0);
if (nItems > 1)
this._vpnSettings.label.text = _("Network Settings");
else
this._vpnSettings.label.text = _("VPN Settings");
this.parent();
},
_onSettingsActivate: function() {
let nItems = this._connectionItems.size;
if (nItems > 1) {
let appSys = Shell.AppSystem.get_default();
let app = appSys.lookup_app('gnome-network-panel.desktop');
app.launch(0, -1);
} else {
let connection = this._connections[0];
Util.spawnApp(['gnome-control-center', 'network', 'show-device',
connection.get_path()]);
}
},
_getDescription: function() {
return _("VPN");
},
@ -1833,6 +1629,7 @@ const NMApplet = new Lang.Class({
let connectionSettings = connection.get_setting_by_name(NetworkManager.SETTING_CONNECTION_SETTING_NAME);
connection._type = connectionSettings.type;
connection._section = this._ctypes[connection._type] || NMConnectionCategory.INVALID;
connection._timestamp = connectionSettings.timestamp;
let section = connection._section;

View File

@ -2,7 +2,6 @@
const Gio = imports.gi.Gio;
const Lang = imports.lang;
const Signals = imports.signals;
const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu;
@ -13,55 +12,11 @@ const OBJECT_PATH = '/org/gnome/SettingsDaemon/Rfkill';
const RfkillManagerInterface = '<node> \
<interface name="org.gnome.SettingsDaemon.Rfkill"> \
<property name="AirplaneMode" type="b" access="readwrite" /> \
<property name="HardwareAirplaneMode" type="b" access="read" /> \
</interface> \
</node>';
const RfkillManagerProxy = Gio.DBusProxy.makeProxyWrapper(RfkillManagerInterface);
const RfkillManager = new Lang.Class({
Name: 'RfkillManager',
_init: function() {
this._proxy = new RfkillManagerProxy(Gio.DBus.session, BUS_NAME, OBJECT_PATH,
Lang.bind(this, function(proxy, error) {
if (error) {
log(error.message);
return;
}
this._proxy.connect('g-properties-changed',
Lang.bind(this, this._changed));
this._changed();
}));
},
get airplaneMode() {
return this._proxy.AirplaneMode;
},
set airplaneMode(v) {
this._proxy.AirplaneMode = v;
},
get hwAirplaneMode() {
return this._proxy.HardwareAirplaneMode;
},
_changed: function() {
this.emit('airplane-mode-changed');
}
});
Signals.addSignalMethods(RfkillManager.prototype);
var _manager;
function getRfkillManager() {
if (_manager != null)
return _manager;
_manager = new RfkillManager();
return _manager;
}
const Indicator = new Lang.Class({
Name: 'RfkillIndicator',
Extends: PanelMenu.SystemIndicator,
@ -69,8 +24,16 @@ const Indicator = new Lang.Class({
_init: function() {
this.parent();
this._manager = getRfkillManager();
this._manager.connect('airplane-mode-changed', Lang.bind(this, this._sync));
this._proxy = new RfkillManagerProxy(Gio.DBus.session, BUS_NAME, OBJECT_PATH,
Lang.bind(this, function(proxy, error) {
if (error) {
log(error.message);
return;
}
this._proxy.connect('g-properties-changed',
Lang.bind(this, this._sync));
this._sync();
}));
this._indicator = this._addIndicator();
this._indicator.icon_name = 'airplane-mode-symbolic';
@ -82,7 +45,7 @@ const Indicator = new Lang.Class({
this._item = new PopupMenu.PopupSubMenuMenuItem(_("Airplane Mode"), true);
this._item.icon.icon_name = 'airplane-mode-symbolic';
this._item.status.text = _("On");
this._offItem = this._item.menu.addAction(_("Turn Off"), Lang.bind(this, function() {
this._item.menu.addAction(_("Turn Off"), Lang.bind(this, function() {
this._proxy.AirplaneMode = false;
}));
this._item.menu.addSettingsAction(_("Network Settings"), 'gnome-network-panel.desktop');
@ -90,18 +53,8 @@ const Indicator = new Lang.Class({
},
_sync: function() {
let airplaneMode = this._manager.airplaneMode;
let hwAirplaneMode = this._manager.hwAirplaneMode;
let changed = (airplaneMode != this._indicator.visible) ||
(hwAirplaneMode != this._offItem.actor.visible);
let airplaneMode = this._proxy.AirplaneMode;
this._indicator.visible = airplaneMode;
this._item.actor.visible = airplaneMode;
this._offItem.setSensitive(!hwAirplaneMode);
if (hwAirplaneMode)
this._offItem.label.text = _("Use hardware switch to turn off");
else
this._offItem.label.text = _("Turn Off");
},
});

View File

@ -54,7 +54,7 @@ const SwitcherPopup = new Lang.Class({
this.actor.connect('allocate', Lang.bind(this, this._allocate));
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
Main.uiGroup.add_actor(this.actor);
Main.layoutManager.switcherPopupGroup.add_child(this.actor);
this._haveModal = false;
this._modifierMask = 0;

View File

@ -118,13 +118,11 @@ const ViewSelector = new Lang.Class({
this._stageKeyPressId = 0;
Main.overview.connect('showing', Lang.bind(this,
function () {
this._resetShowAppsButton();
this._stageKeyPressId = global.stage.connect('key-press-event',
Lang.bind(this, this._onStageKeyPress));
}));
Main.overview.connect('hiding', Lang.bind(this,
function () {
this._resetShowAppsButton();
if (this._stageKeyPressId != 0) {
global.stage.disconnect(this._stageKeyPressId);
this._stageKeyPressId = 0;
@ -160,19 +158,26 @@ const ViewSelector = new Lang.Class({
show: function() {
this.reset();
this._showAppsBlocked = true;
this._showAppsButton.checked = false;
this._showAppsBlocked = false;
this._workspacesPage.opacity = 255;
this._workspacesDisplay.show();
this._activePage = null;
this._showPage(this._workspacesPage);
this._syncActivePage();
if (!this._workspacesDisplay.activeWorkspaceHasMaximizedWindows())
Main.overview.fadeOutDesktop();
},
zoomFromOverview: function() {
this._workspacesDisplay.zoomFromOverview();
leaveOverview: function() {
if (!this._workspacesDisplay.activeWorkspaceHasMaximizedWindows())
Main.overview.fadeInDesktop();
// If we're not on the windows page, don't zoom back the primary monitor.
let zoomPrimary = (this._activePage == this._workspacesPage);
this._workspacesDisplay.leaveOverview(zoomPrimary);
},
setWorkspacesFullGeometry: function(geom) {
@ -181,12 +186,16 @@ const ViewSelector = new Lang.Class({
hide: function() {
this._workspacesDisplay.hide();
if (this._activePage)
this._activePage.hide();
this._activePage = null;
},
_addPage: function(actor, name, a11yIcon, params) {
params = Params.parse(params, { a11yFocus: null });
let page = new St.Bin({ child: actor,
visible: false,
x_align: St.Align.START,
y_align: St.Align.START,
x_fill: true,
@ -211,16 +220,16 @@ const ViewSelector = new Lang.Class({
oldPage.hide();
this.emit('page-empty');
this._activePage.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
this._activePage.show();
Tweener.addTween(this._activePage,
{ opacity: 255,
time: OverviewControls.SIDE_CONTROLS_ANIMATION_TIME,
transition: 'easeOutQuad'
});
{ opacity: 255,
time: OverviewControls.SIDE_CONTROLS_ANIMATION_TIME,
transition: 'easeOutQuad'
});
},
_showPage: function(page, noFade) {
_setActivePage: function(page) {
if (page == this._activePage)
return;
@ -228,7 +237,7 @@ const ViewSelector = new Lang.Class({
this._activePage = page;
this.emit('page-changed');
if (oldPage && !noFade)
if (oldPage)
Tweener.addTween(oldPage,
{ opacity: 0,
time: OverviewControls.SIDE_CONTROLS_ANIMATION_TIME,
@ -247,20 +256,25 @@ const ViewSelector = new Lang.Class({
page.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
},
_onShowAppsButtonToggled: function() {
if (this._showAppsBlocked)
return;
this._showPage(this._showAppsButton.checked ?
this._appsPage : this._workspacesPage);
_getActivePage: function() {
if (this._searchActive)
return this._searchPage;
else if (this._showAppsButton.checked)
return this._appsPage;
else
return this._workspacesPage;
},
_resetShowAppsButton: function() {
this._showAppsBlocked = true;
this._showAppsButton.checked = false;
this._showAppsBlocked = false;
_syncActivePage: function() {
let activePage = this._getActivePage();
if (activePage == this._activePage)
return;
this._setActivePage(activePage);
},
this._showPage(this._workspacesPage, true);
_onShowAppsButtonToggled: function() {
if (!this._showAppsBlocked)
this._syncActivePage();
},
_onStageKeyPress: function(actor, event) {
@ -282,32 +296,10 @@ const ViewSelector = new Lang.Class({
return Clutter.EVENT_STOP;
} else if (this._shouldTriggerSearch(symbol)) {
this.startSearch(event);
} else if (!this._searchActive) {
if (symbol == Clutter.Tab || symbol == Clutter.Down) {
this._activePage.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
return true;
} else if (symbol == Clutter.ISO_Left_Tab) {
this._activePage.navigate_focus(null, Gtk.DirectionType.TAB_BACKWARD, false);
return true;
}
}
return Clutter.EVENT_PROPAGATE;
},
_searchCancelled: function() {
this._showPage(this._showAppsButton.checked ? this._appsPage
: this._workspacesPage);
// Leave the entry focused when it doesn't have any text;
// when replacing a selected search term, Clutter emits
// two 'text-changed' signals, one for deleting the previous
// text and one for the new one - the second one is handled
// incorrectly when we remove focus
// (https://bugzilla.gnome.org/show_bug.cgi?id=636341) */
if (this._text.text != '')
this.reset();
},
reset: function () {
global.stage.set_key_focus(null);
@ -398,8 +390,18 @@ const ViewSelector = new Lang.Class({
}
this._entry.set_secondary_icon(null);
this._searchCancelled();
// Leave the entry focused when it doesn't have any text;
// when replacing a selected search term, Clutter emits
// two 'text-changed' signals, one for deleting the previous
// text and one for the new one - the second one is handled
// incorrectly when we remove focus
// (https://bugzilla.gnome.org/show_bug.cgi?id=636341) */
if (this._text.text != '')
this.reset();
}
this._syncActivePage();
},
_onKeyPress: function(entry, event) {
@ -466,9 +468,7 @@ const ViewSelector = new Lang.Class({
this._searchTimeoutId = 0;
let terms = getTermsForSearchString(this._entry.get_text());
this._searchResults.setTerms(terms);
this._showPage(this._searchPage);
return GLib.SOURCE_REMOVE;
},

View File

@ -191,7 +191,6 @@ const WorkspaceTracker = new Lang.Class({
tracker.connect('startup-sequence-changed', Lang.bind(this, this._queueCheckWorkspaces));
global.screen.connect('notify::n-workspaces', Lang.bind(this, this._nWorkspacesChanged));
global.window_manager.connect('switch-workspace', Lang.bind(this, this._queueCheckWorkspaces));
global.screen.connect('window-entered-monitor', Lang.bind(this, this._windowEnteredMonitor));
global.screen.connect('window-left-monitor', Lang.bind(this, this._windowLeftMonitor));
@ -250,7 +249,13 @@ const WorkspaceTracker = new Lang.Class({
}
let activeWorkspaceIndex = global.screen.get_active_workspace_index();
emptyWorkspaces[activeWorkspaceIndex] = false;
let removingCurrentWorkspace = (emptyWorkspaces[activeWorkspaceIndex] &&
activeWorkspaceIndex < emptyWorkspaces.length - 1);
if (removingCurrentWorkspace) {
// "Merge" the empty workspace we are removing with the one at the end
this._wm.blockAnimations();
}
// Delete other empty workspaces; do it from the end to avoid index changes
for (i = emptyWorkspaces.length - 2; i >= 0; i--) {
@ -258,6 +263,11 @@ const WorkspaceTracker = new Lang.Class({
global.screen.remove_workspace(this._workspaces[i], global.get_current_time());
}
if (removingCurrentWorkspace) {
global.screen.get_workspace_by_index(global.screen.n_workspaces - 1).activate(global.get_current_time());
this._wm.unblockAnimations();
}
this._checkWorkspacesId = 0;
return false;
},
@ -358,93 +368,6 @@ const WorkspaceTracker = new Lang.Class({
}
});
const TilePreview = new Lang.Class({
Name: 'TilePreview',
_init: function() {
this.actor = new St.Widget();
global.window_group.add_actor(this.actor);
this._reset();
this._showing = false;
},
show: function(window, tileRect, monitorIndex) {
let windowActor = window.get_compositor_private();
if (!windowActor)
return;
global.window_group.set_child_below_sibling(this.actor, windowActor);
if (this._rect && this._rect.equal(tileRect))
return;
let changeMonitor = (this._monitorIndex == -1 ||
this._monitorIndex != monitorIndex);
this._monitorIndex = monitorIndex;
this._rect = tileRect;
let monitor = Main.layoutManager.monitors[monitorIndex];
this._updateStyle(monitor);
if (!this._showing || changeMonitor) {
let monitorRect = new Meta.Rectangle({ x: monitor.x,
y: monitor.y,
width: monitor.width,
height: monitor.height });
let [, rect] = window.get_outer_rect().intersect(monitorRect);
this.actor.set_size(rect.width, rect.height);
this.actor.set_position(rect.x, rect.y);
this.actor.opacity = 0;
}
this._showing = true;
this.actor.show();
Tweener.addTween(this.actor,
{ x: tileRect.x,
y: tileRect.y,
width: tileRect.width,
height: tileRect.height,
opacity: 255,
time: WINDOW_ANIMATION_TIME,
transition: 'easeOutQuad'
});
},
hide: function() {
if (!this._showing)
return;
this._showing = false;
Tweener.addTween(this.actor,
{ opacity: 0,
time: WINDOW_ANIMATION_TIME,
transition: 'easeOutQuad',
onComplete: Lang.bind(this, this._reset)
});
},
_reset: function() {
this.actor.hide();
this._rect = null;
this._monitorIndex = -1;
},
_updateStyle: function(monitor) {
let styles = ['tile-preview'];
if (this._monitorIndex == Main.layoutManager.primaryIndex)
styles.push('on-primary');
if (this._rect.x == monitor.x)
styles.push('tile-preview-left');
if (this._rect.x + this._rect.width == monitor.x + monitor.width)
styles.push('tile-preview-right');
this.actor.style_class = styles.join(' ');
}
});
const WindowManager = new Lang.Class({
Name: 'WindowManager',
@ -475,8 +398,6 @@ const WindowManager = new Lang.Class({
}));
this._shellwm.connect('switch-workspace', Lang.bind(this, this._switchWorkspace));
this._shellwm.connect('show-tile-preview', Lang.bind(this, this._showTilePreview));
this._shellwm.connect('hide-tile-preview', Lang.bind(this, this._hideTilePreview));
this._shellwm.connect('minimize', Lang.bind(this, this._minimizeWindow));
this._shellwm.connect('maximize', Lang.bind(this, this._maximizeWindow));
this._shellwm.connect('unmaximize', Lang.bind(this, this._unmaximizeWindow));
@ -486,8 +407,6 @@ const WindowManager = new Lang.Class({
this._shellwm.connect('confirm-display-change', Lang.bind(this, this._confirmDisplayChange));
this._workspaceSwitcherPopup = null;
this._tilePreview = null;
this.setCustomKeybindingHandler('switch-to-workspace-left',
Shell.KeyBindingMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW,
@ -1137,18 +1056,6 @@ const WindowManager = new Lang.Class({
shellwm.completed_switch_workspace();
},
_showTilePreview: function(shellwm, window, tileRect, monitorIndex) {
if (!this._tilePreview)
this._tilePreview = new TilePreview();
this._tilePreview.show(window, tileRect, monitorIndex);
},
_hideTilePreview: function(shellwm) {
if (!this._tilePreview)
return;
this._tilePreview.hide();
},
_startAppSwitcher : function(display, screen, window, binding) {
/* prevent a corner case where both popups show up at once */
if (this._workspaceSwitcherPopup != null)

View File

@ -131,7 +131,7 @@ const WindowClone = new Lang.Class({
this._dragSlot = [0, 0, 0, 0];
this._stackAbove = null;
this._windowClone._updateId = this.metaWindow.connect('size-changed',
this._windowClone._updateId = this.realWindow.connect('size-changed',
Lang.bind(this, this._onRealWindowSizeChanged));
this._windowClone._destroyId = this.realWindow.connect('destroy', Lang.bind(this, function() {
// First destroy the clone and then destroy everything
@ -199,7 +199,7 @@ const WindowClone = new Lang.Class({
_doAddAttachedDialog: function(metaWin, realWin) {
let clone = new Clutter.Clone({ source: realWin });
clone._updateId = metaWin.connect('size-changed', Lang.bind(this, function() {
clone._updateId = realWin.connect('size-changed', Lang.bind(this, function() {
this._computeBoundingBox();
this.emit('size-changed');
}));
@ -295,7 +295,7 @@ const WindowClone = new Lang.Class({
else
realWindow = child.source;
realWindow.meta_window.disconnect(child._updateId);
realWindow.disconnect(child._updateId);
realWindow.disconnect(child._destroyId);
}));
},
@ -1521,34 +1521,39 @@ const Workspace = new Lang.Class({
this._recalculateWindowPositions(WindowPositionFlags.ANIMATE | WindowPositionFlags.INITIAL);
},
// Animates the return from Overview mode
zoomFromOverview : function() {
_leavingOverview: function() {
let currentWorkspace = global.screen.get_active_workspace();
if (this.metaWorkspace != null && this.metaWorkspace != currentWorkspace)
return false;
this.leavingOverview = true;
this._overviewHiddenId = Main.overview.connect('hidden', Lang.bind(this,
this._doneLeavingOverview));
for (let i = 0; i < this._windows.length; i++) {
let clone = this._windows[i];
Tweener.removeTweens(clone.actor);
let overlay = this._windowOverlays[i];
if (overlay)
overlay.hide();
}
if (this._repositionWindowsId > 0) {
Mainloop.source_remove(this._repositionWindowsId);
this._repositionWindowsId = 0;
}
this._overviewHiddenId = Main.overview.connect('hidden', Lang.bind(this,
this._doneLeavingOverview));
if (this.metaWorkspace != null && this.metaWorkspace != currentWorkspace)
return true;
},
// Animates the return from Overview mode
zoomFromOverview : function() {
if (!this._leavingOverview())
return;
// Position and scale the windows.
for (let i = 0; i < this._windows.length; i++) {
let clone = this._windows[i];
let overlay = this._windowOverlays[i];
if (overlay)
overlay.hide();
if (clone.metaWindow.showing_on_its_workspace()) {
let [origX, origY] = clone.getOriginalPosition();
@ -1575,6 +1580,31 @@ const Workspace = new Lang.Class({
}
},
fadeFromOverview: function() {
if (!this._leavingOverview())
return;
for (let i = 0; i < this._windows.length; i++) {
let clone = this._windows[i];
if (clone.metaWindow.showing_on_its_workspace()) {
clone.actor.x = clone.origX;
clone.actor.y = clone.origY;
clone.actor.scale_x = 1.0;
clone.actor.scale_y = 1.0;
clone.actor.opacity = 0;
Tweener.addTween(clone.actor,
{ opacity: 255,
time: Overview.ANIMATION_TIME,
transition: 'easeOutQuad'
});
} else {
clone.actor.hide();
}
}
},
destroy : function() {
this.actor.destroy();
},

View File

@ -25,7 +25,7 @@ const WorkspaceSwitcherPopup = new Lang.Class({
width: global.screen_width,
height: global.screen_height,
style_class: 'workspace-switcher-group' });
Main.uiGroup.add_actor(this.actor);
Main.layoutManager.osdGroup.add_child(this.actor);
this._container = new St.BoxLayout({ style_class: 'workspace-switcher-container' });
this._list = new Shell.GenericContainer({ style_class: 'workspace-switcher' });

View File

@ -68,7 +68,7 @@ const WindowClone = new Lang.Class({
this.realWindow = realWindow;
this.metaWindow = realWindow.meta_window;
this.clone._updateId = this.metaWindow.connect('position-changed',
this.clone._updateId = this.realWindow.connect('position-changed',
Lang.bind(this, this._onPositionChanged));
this.clone._destroyId = this.realWindow.connect('destroy', Lang.bind(this, function() {
// First destroy the clone and then destroy everything
@ -151,7 +151,7 @@ const WindowClone = new Lang.Class({
let clone = new Clutter.Clone({ source: realDialog });
this._updateDialogPosition(realDialog, clone);
clone._updateId = metaDialog.connect('position-changed',
clone._updateId = realDialog.connect('position-changed',
Lang.bind(this, this._updateDialogPosition, clone));
clone._destroyId = realDialog.connect('destroy', Lang.bind(this, function() {
clone.destroy();
@ -176,7 +176,7 @@ const WindowClone = new Lang.Class({
this.actor.get_children().forEach(function(child) {
let realWindow = child.source;
realWindow.meta_window.disconnect(child._updateId);
realWindow.disconnect(child._updateId);
realWindow.disconnect(child._destroyId);
});
},
@ -804,25 +804,22 @@ const ThumbnailsBox = new Lang.Class({
[newWorkspaceIndex, this._dropPlaceholderPos] = [this._dropPlaceholderPos, -1];
// Nab all the windows below us.
let windows = global.get_window_actors().filter(function(winActor) {
let windows = global.get_window_actors().filter(function(win) {
// If the window is attached to an ancestor, we don't need/want to move it
let window = winActor.meta_window;
if (window.get_transient_for() != null)
if (!!win.meta_window.get_transient_for())
return false;
if (isWindow)
return window.get_workspace() >= newWorkspaceIndex && winActor != source;
return win.get_workspace() >= newWorkspaceIndex && win != source;
else
return window.get_workspace() >= newWorkspaceIndex;
return win.get_workspace() >= newWorkspaceIndex;
});
this._spliceIndex = newWorkspaceIndex;
// ... move them down one.
windows.forEach(function(winActor) {
let window = winActor.meta_window;
window.change_workspace_by_index(window.get_workspace() + 1, true);
windows.forEach(function(win) {
win.meta_window.change_workspace_by_index(win.get_workspace() + 1, true);
});
if (isWindow)

View File

@ -145,11 +145,22 @@ const WorkspacesView = new Lang.Class({
this._updateWorkspaceActors(false);
},
zoomFromOverview: function() {
_leaveOverview: function() {
this.actor.remove_clip();
},
for (let w = 0; w < this._workspaces.length; w++)
this._workspaces[w].zoomFromOverview();
zoomFromOverview: function() {
this._leaveOverview();
this._workspaces.forEach(function(w) {
w.zoomFromOverview();
});
},
fadeFromOverview: function() {
this._leaveOverview();
this._workspaces.forEach(function(w) {
w.fadeFromOverview();
});
},
syncStacking: function(stackIndices) {
@ -365,6 +376,10 @@ const ExtraWorkspaceView = new Lang.Class({
this._workspace.zoomFromOverview();
},
fadeFromOverview: function() {
this._workspace.fadeFromOverview();
},
syncStacking: function(stackIndices) {
this._workspace.syncStacking(stackIndices);
},
@ -466,9 +481,18 @@ const WorkspacesDisplay = new Lang.Class({
this._scrollEventId = Main.overview.connect('scroll-event', Lang.bind(this, this._onScrollEvent));
},
zoomFromOverview: function() {
for (let i = 0; i < this._workspacesViews.length; i++)
this._workspacesViews[i].zoomFromOverview();
leaveOverview: function(zoomPrimary) {
for (let i = 0; i < this._workspacesViews.length; i++) {
let view = this._workspacesViews[i];
if (i == this._primaryIndex) {
if (zoomPrimary)
view.zoomFromOverview();
else
view.fadeFromOverview();
} else {
view.zoomFromOverview();
}
}
},
hide: function() {

View File

@ -18,7 +18,7 @@ const XdndHandler = new Lang.Class({
// Used as a drag actor in case we don't have a cursor window clone
this._dummy = new Clutter.Actor({ width: 1, height: 1, opacity: 0 });
Main.uiGroup.add_actor(this._dummy);
Main.layoutManager.sessionGroup.add_actor(this._dummy);
this._dummy.hide();
if (!Meta.is_wayland_compositor())
@ -69,7 +69,7 @@ const XdndHandler = new Lang.Class({
source: cursorWindow});
this._cursorWindowClone = new Clutter.Clone({ source: cursorWindow });
Main.uiGroup.add_actor(this._cursorWindowClone);
Main.layoutManager.sessionGroup.add_actor(this._cursorWindowClone);
// Make sure that the clone has the same position as the source
this._cursorWindowClone.add_constraint(constraint_position);

View File

@ -45,7 +45,6 @@ js/ui/status/accessibility.js
js/ui/status/bluetooth.js
js/ui/status/brightness.js
js/ui/status/keyboard.js
js/ui/status/location.js
js/ui/status/network.js
js/ui/status/power.js
js/ui/status/rfkill.js

117
po/an.po
View File

@ -9,8 +9,8 @@ msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2014-02-08 10:22+0000\n"
"PO-Revision-Date: 2014-02-08 19:31+0100\n"
"POT-Creation-Date: 2014-01-29 20:43+0000\n"
"PO-Revision-Date: 2014-01-30 19:56+0100\n"
"Last-Translator: Jorge Pérez Pérez <jorgtum@gmail.com>\n"
"Language-Team: Aragonese <softaragones@googlegroups.com>\n"
"Language: an\n"
@ -280,7 +280,7 @@ msgstr ""
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:136
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:357
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/network.js:857
#: ../js/ui/status/network.js:757
msgid "Cancel"
msgstr "Cancelar"
@ -574,8 +574,8 @@ msgstr "Clau de paso:"
msgid "Type again:"
msgstr "Escriba atra vegada:"
#: ../js/ui/components/networkAgent.js:131 ../js/ui/status/network.js:227
#: ../js/ui/status/network.js:300 ../js/ui/status/network.js:860
#: ../js/ui/components/networkAgent.js:131 ../js/ui/status/network.js:132
#: ../js/ui/status/network.js:294 ../js/ui/status/network.js:760
msgid "Connect"
msgstr "Connectar"
@ -1077,7 +1077,7 @@ msgstr "Activau"
#. because it's disabled by rfkill (airplane mode) */
#. translators:
#. * The device has been disabled
#: ../js/ui/lookingGlass.js:717 ../js/ui/status/network.js:523
#: ../js/ui/lookingGlass.js:717 ../js/ui/status/network.js:518
#: ../src/gvc/gvc-mixer-control.c:1830
msgid "Disabled"
msgstr "Desactivau"
@ -1297,31 +1297,26 @@ msgstr "Contraste alto"
msgid "Large Text"
msgstr "Texto gran"
#: ../js/ui/status/bluetooth.js:48
#: ../js/ui/status/bluetooth.js:45
msgid "Bluetooth"
msgstr "Bluetooth"
#: ../js/ui/status/bluetooth.js:50 ../js/ui/status/network.js:134
#: ../js/ui/status/network.js:1209 ../js/ui/status/rfkill.js:85
#: ../js/ui/status/rfkill.js:105
#: ../js/ui/status/bluetooth.js:47 ../js/ui/status/network.js:132
#: ../js/ui/status/network.js:1108 ../js/ui/status/rfkill.js:48
msgid "Turn Off"
msgstr "Desenchegar"
#: ../js/ui/status/bluetooth.js:53
#: ../js/ui/status/bluetooth.js:50
msgid "Bluetooth Settings"
msgstr "Cofiguracion de Bluetooth"
#: ../js/ui/status/bluetooth.js:100
#: ../js/ui/status/bluetooth.js:98
#, javascript-format
msgid "%d Connected Device"
msgid_plural "%d Connected Devices"
msgstr[0] "%d dispositivo connectau"
msgstr[1] "%d dispositivos connectaus"
#: ../js/ui/status/bluetooth.js:102 ../js/ui/status/network.js:1232
msgid "Not Connected"
msgstr "No connectau"
#: ../js/ui/status/brightness.js:44
msgid "Brightness"
msgstr "Brilo"
@ -1330,133 +1325,103 @@ msgstr "Brilo"
msgid "Show Keyboard Layout"
msgstr "Amostrar a distribución d'o teclau"
#: ../js/ui/status/network.js:73
#: ../js/ui/status/network.js:71
msgid "<unknown>"
msgstr "<desconoxiu>"
#: ../js/ui/status/network.js:223 ../js/ui/status/network.js:389
#: ../js/ui/status/network.js:1230
#: ../js/ui/status/network.js:221 ../js/ui/status/network.js:383
#: ../js/ui/status/network.js:1129
msgid "Off"
msgstr "DESENCHEGAU"
#. Translators: this is for network devices that are physically present but are not
#. under NetworkManager's control (and thus cannot be used in the menu) */
#: ../js/ui/status/network.js:395
#: ../js/ui/status/network.js:389
msgid "unmanaged"
msgstr "no chestionada"
#: ../js/ui/status/network.js:397
#: ../js/ui/status/network.js:391
msgid "disconnecting..."
msgstr "deconectando…"
#: ../js/ui/status/network.js:403 ../js/ui/status/network.js:1284
#: ../js/ui/status/network.js:397 ../js/ui/status/network.js:1183
msgid "connecting..."
msgstr "conectando…"
#. Translators: this is for network connections that require some kind of key or password */
#: ../js/ui/status/network.js:406 ../js/ui/status/network.js:1287
#: ../js/ui/status/network.js:400 ../js/ui/status/network.js:1186
msgid "authentication required"
msgstr "s'amenista autenticacion"
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing */
#: ../js/ui/status/network.js:414
#: ../js/ui/status/network.js:408
msgid "firmware missing"
msgstr "falta o \"firmware\""
#. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage */
#: ../js/ui/status/network.js:418
#: ../js/ui/status/network.js:412
msgid "unavailable"
msgstr "no disponible"
#: ../js/ui/status/network.js:420 ../js/ui/status/network.js:1289
#: ../js/ui/status/network.js:414 ../js/ui/status/network.js:1188
msgid "connection failed"
msgstr "falló a connexión"
#: ../js/ui/status/network.js:436
#: ../js/ui/status/network.js:430
msgid "Wired Settings"
msgstr "Opcions inalambricas"
#: ../js/ui/status/network.js:477 ../js/ui/status/network.js:563
#: ../js/ui/status/network.js:472 ../js/ui/status/network.js:558
msgid "Mobile Broadband Settings"
msgstr "Opcions de Banda ampla mobil"
#: ../js/ui/status/network.js:519 ../js/ui/status/network.js:1228
#: ../js/ui/status/network.js:514 ../js/ui/status/network.js:1127
msgid "Hardware Disabled"
msgstr "Hardware desactivau"
#: ../js/ui/status/network.js:578
msgid "Use as Internet connection"
msgstr "Fer servir como una connexión a internet"
#: ../js/ui/status/network.js:755
msgid "Airplane Mode is On"
msgstr "O modo avión ye enchegau"
#: ../js/ui/status/network.js:756
msgid "Wi-Fi is disabled when airplane mode is on."
msgstr "O wi-Fi ye desactivau quan o modo avión ye enchegau."
#: ../js/ui/status/network.js:757
msgid "Turn Off Airplane Mode"
msgstr "Desenchegar o modo avión"
#: ../js/ui/status/network.js:766
msgid "Wi-Fi is Off"
msgstr "O wi-fi ye desenchegau"
#: ../js/ui/status/network.js:767
msgid "Wi-Fi needs to be turned on in order to connect to a network."
msgstr "O wi-Fi ameniste estar enchegau ta connectar-se a un ret."
#: ../js/ui/status/network.js:768
#, fuzzy
#| msgid "Turn On"
msgid "Turn On Wi-Fi"
msgstr "Enchegar"
#: ../js/ui/status/network.js:793
#: ../js/ui/status/network.js:725
msgid "Wi-Fi Networks"
msgstr "Retz inalambricos"
#: ../js/ui/status/network.js:795
#: ../js/ui/status/network.js:727
msgid "Select a network"
msgstr "Selecciona un ret"
#: ../js/ui/status/network.js:824
#: ../js/ui/status/network.js:751
msgid "No Networks"
msgstr "No bi ha retz"
#: ../js/ui/status/network.js:845 ../js/ui/status/rfkill.js:103
msgid "Use hardware switch to turn off"
msgstr "Fer servir o selector de hardware ta desenchegar-lo"
#: ../js/ui/status/network.js:1115
#: ../js/ui/status/network.js:1014
msgid "Select Network"
msgstr "Selecciona o ret"
#: ../js/ui/status/network.js:1121
#: ../js/ui/status/network.js:1020
msgid "Wi-Fi Settings"
msgstr "Opcions inalambricas"
#: ../js/ui/status/network.js:1209
#: ../js/ui/status/network.js:1108
msgid "Turn On"
msgstr "Enchegar"
#: ../js/ui/status/network.js:1352
#: ../js/ui/status/network.js:1131
msgid "Not Connected"
msgstr "No connectau"
#: ../js/ui/status/network.js:1251
msgid "VPN"
msgstr "VPN"
#: ../js/ui/status/network.js:1495
#: ../js/ui/status/network.js:1394
msgid "Network Manager"
msgstr "Chestor d'o rete"
#: ../js/ui/status/network.js:1534
#: ../js/ui/status/network.js:1433
msgid "Connection failed"
msgstr "Falló a connexión"
#: ../js/ui/status/network.js:1535
#: ../js/ui/status/network.js:1434
msgid "Activation of network connection failed"
msgstr "Falló l'activación d'a connexión de ret"
@ -1490,15 +1455,15 @@ msgstr "SAI"
msgid "Battery"
msgstr "Batería"
#: ../js/ui/status/rfkill.js:82
#: ../js/ui/status/rfkill.js:45
msgid "Airplane Mode"
msgstr "Modo avión"
#: ../js/ui/status/rfkill.js:84
#: ../js/ui/status/rfkill.js:47
msgid "On"
msgstr "Enchegau"
#: ../js/ui/status/rfkill.js:88
#: ../js/ui/status/rfkill.js:51
msgid "Network Settings"
msgstr "Configuracion d'o rete"

535
po/ar.po

File diff suppressed because it is too large Load Diff

283
po/as.po
View File

@ -9,8 +9,8 @@ msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2014-02-11 08:31+0000\n"
"PO-Revision-Date: 2014-02-11 18:44+0630\n"
"POT-Creation-Date: 2014-01-17 21:35+0000\n"
"PO-Revision-Date: 2014-01-23 19:06+0630\n"
"Last-Translator: Nilamdyuti Goswami <ngoswami@redhat.com>\n"
"Language-Team: Assamese <kde-i18n-doc@kde.org>\n"
"Language: as_IN\n"
@ -83,10 +83,16 @@ msgstr ""
"দিয়ে।"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:3
#| msgid "Uuids of extensions to enable"
msgid "UUIDs of extensions to enable"
msgstr "সামৰ্থবান কৰিব লগিয়া সম্প্ৰসাৰণসমূহৰ UUIDs"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:4
#| msgid ""
#| "GNOME Shell extensions have a uuid property; this key lists extensions "
#| "which should be loaded. Any extension that wants to be loaded needs to be "
#| "in this list. You can also manipulate this list with the EnableExtension "
#| "and DisableExtension DBus methods on org.gnome.Shell."
msgid ""
"GNOME Shell extensions have a UUID property; this key lists extensions which "
"should be loaded. Any extension that wants to be loaded needs to be in this "
@ -120,17 +126,20 @@ msgid "History for the looking glass dialog"
msgstr "চোৱা কাঁচ ডাইলগৰ কাৰণে ইতিহাস"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:9
#| msgid "Always show the 'Log out' menuitem in the user menu."
msgid "Always show the 'Log out' menu item in the user menu."
msgstr "ব্যৱহাৰকাৰী মেনুত 'লগ আউট' মেনু আইটেম সদায় দেখুৱাব।"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:10
#| msgid ""
#| "This key overrides the automatic hiding of the 'Log out' menuitem in "
#| "single-user, single-session situations."
msgid ""
"This key overrides the automatic hiding of the 'Log out' menu item in single-"
"user, single-session situations."
msgstr ""
"এই কি'য়ে এটা-ব্যৱহাৰকাৰী, এটা-অধিবেশন অৱস্থাবোৰত 'লগ আউট' মেনুআইটেম "
"স্বচালিতভাৱে "
"লুকুৱা অভাৰৰাইড কৰে।"
"স্বচালিতভাৱে লুকুৱা অভাৰৰাইড কৰে।"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:11
msgid ""
@ -280,7 +289,7 @@ msgstr "উপৰত দিয়া কম্বোবাকচ ব্যৱহা
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:136
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:357
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/network.js:857
#: ../js/ui/status/network.js:724
msgid "Cancel"
msgstr "বাতিল কৰক"
@ -338,30 +347,31 @@ msgstr "কমান্ড বিশ্লেষন কৰিব নোৱাৰ
#: ../js/misc/util.js:156
#, javascript-format
#| msgid "Execution of '%s' failed:"
msgid "Execution of “%s” failed:"
msgstr "“%s” ৰ প্ৰেৰণ ব্যৰ্থ হল:"
#: ../js/ui/appDisplay.js:633
#: ../js/ui/appDisplay.js:540
msgid "Frequently used applications will appear here"
msgstr "সঘনে ব্যৱহাৰ কৰা এপ্লিকেচনসমূহ ইয়াত উপস্থিত হব"
#: ../js/ui/appDisplay.js:744
#: ../js/ui/appDisplay.js:660
msgid "Frequent"
msgstr "সঘন"
#: ../js/ui/appDisplay.js:751
#: ../js/ui/appDisplay.js:667
msgid "All"
msgstr "সকলো"
#: ../js/ui/appDisplay.js:1558
#: ../js/ui/appDisplay.js:1498
msgid "New Window"
msgstr "নতুন উইন্ডো"
#: ../js/ui/appDisplay.js:1580 ../js/ui/dash.js:285
#: ../js/ui/appDisplay.js:1501 ../js/ui/dash.js:285
msgid "Remove from Favorites"
msgstr "পছন্দৰ পৰা আতৰাওক"
#: ../js/ui/appDisplay.js:1586
#: ../js/ui/appDisplay.js:1502
msgid "Add to Favorites"
msgstr "পছন্দলে যোগ কৰক"
@ -574,8 +584,8 @@ msgstr "পাছৱাৰ্ড:"
msgid "Type again:"
msgstr "আকৌ টাইপ কৰক:"
#: ../js/ui/components/networkAgent.js:131 ../js/ui/status/network.js:227
#: ../js/ui/status/network.js:300 ../js/ui/status/network.js:860
#: ../js/ui/components/networkAgent.js:131 ../js/ui/status/network.js:131
#: ../js/ui/status/network.js:293 ../js/ui/status/network.js:727
msgid "Connect"
msgstr "সংযোগ কৰক"
@ -609,6 +619,9 @@ msgstr "বেতাঁৰ নেটৱাৰ্কৰ দ্বাৰা প্
#: ../js/ui/components/networkAgent.js:312
#, javascript-format
#| msgid ""
#| "Passwords or encryption keys are required to access the wireless network "
#| "'%s'."
msgid ""
"Passwords or encryption keys are required to access the wireless network "
"“%s”."
@ -646,6 +659,7 @@ msgstr "মবাইল ব্ৰডবেণ্ড নেটৱাৰ্ক প
#: ../js/ui/components/networkAgent.js:339
#, javascript-format
#| msgid "A password is required to connect to '%s'."
msgid "A password is required to connect to “%s”."
msgstr "“%s” লে সংযোগ কৰিবলে এটা পাছৱাৰ্ডৰ প্ৰয়োজন।"
@ -694,35 +708,35 @@ msgid "Mute"
msgstr "মোন কৰক"
#. Translators: this is the word "Yesterday" followed by a time string. i.e. "Yesterday, 14:30"*/
#: ../js/ui/components/telepathyClient.js:952
#: ../js/ui/components/telepathyClient.js:941
msgid "<b>Yesterday</b>, <b>%H:%M</b>"
msgstr "<b>যোৱাকালী</b>, <b>%H:%M</b>"
#. Translators: this is the week day name followed by a time string. i.e. "Monday, 14:30*/
#: ../js/ui/components/telepathyClient.js:958
#: ../js/ui/components/telepathyClient.js:947
msgid "<b>%A</b>, <b>%H:%M</b>"
msgstr "<b>%A</b>, <b>%H:%M</b>"
#. Translators: this is the month name and day number followed by a time string. i.e. "May 25, 14:30"*/
#: ../js/ui/components/telepathyClient.js:963
#: ../js/ui/components/telepathyClient.js:952
msgid "<b>%B</b> <b>%d</b>, <b>%H:%M</b>"
msgstr "<b>%B</b> <b>%d</b>, <b>%H:%M</b>"
#. Translators: this is the month name, day number, year number followed by a time string. i.e. "May 25 2012, 14:30"*/
#: ../js/ui/components/telepathyClient.js:967
#: ../js/ui/components/telepathyClient.js:956
msgid "<b>%B</b> <b>%d</b> <b>%Y</b>, <b>%H:%M</b> "
msgstr "<b>%B</b> <b>%d</b> <b>%Y</b>, <b>%H:%M</b> "
#. Translators: this is the other person changing their old IM name to their new
#. IM name. */
#: ../js/ui/components/telepathyClient.js:998
#: ../js/ui/components/telepathyClient.js:987
#, javascript-format
msgid "%s is now known as %s"
msgstr "%s এতিয়া %s হিচাপে জনাজাত"
#. translators: argument is a room name like
#. * room@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1101
#: ../js/ui/components/telepathyClient.js:1090
#, javascript-format
msgid "Invitation to %s"
msgstr "%s লে নিমন্ত্ৰণ"
@ -730,38 +744,38 @@ msgstr "%s লে নিমন্ত্ৰণ"
#. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example. */
#: ../js/ui/components/telepathyClient.js:1109
#: ../js/ui/components/telepathyClient.js:1098
#, javascript-format
msgid "%s is inviting you to join %s"
msgstr "%s এ আপোনাক %s ত অংশগ্ৰহণ কৰিবলে আমন্ত্ৰণ জনাইছে"
#: ../js/ui/components/telepathyClient.js:1111
#: ../js/ui/components/telepathyClient.js:1146
#: ../js/ui/components/telepathyClient.js:1180
#: ../js/ui/components/telepathyClient.js:1237
#: ../js/ui/components/telepathyClient.js:1100
#: ../js/ui/components/telepathyClient.js:1135
#: ../js/ui/components/telepathyClient.js:1169
#: ../js/ui/components/telepathyClient.js:1226
msgid "Decline"
msgstr "নাকচ কৰক"
#: ../js/ui/components/telepathyClient.js:1117
#: ../js/ui/components/telepathyClient.js:1186
#: ../js/ui/components/telepathyClient.js:1242
#: ../js/ui/components/telepathyClient.js:1106
#: ../js/ui/components/telepathyClient.js:1175
#: ../js/ui/components/telepathyClient.js:1231
msgid "Accept"
msgstr "গ্ৰহন কৰক"
#. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1136
#: ../js/ui/components/telepathyClient.js:1125
#, javascript-format
msgid "Video call from %s"
msgstr "%s ৰ পৰা ভিডিঅ' কল"
#. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1139
#: ../js/ui/components/telepathyClient.js:1128
#, javascript-format
msgid "Call from %s"
msgstr "%s ৰ পৰা কল"
#. translators: this is a button label (verb), not a noun */
#: ../js/ui/components/telepathyClient.js:1153
#: ../js/ui/components/telepathyClient.js:1142
msgid "Answer"
msgstr "উত্তৰ দিয়ক"
@ -770,110 +784,110 @@ msgstr "উত্তৰ দিয়ক"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#. */
#: ../js/ui/components/telepathyClient.js:1174
#: ../js/ui/components/telepathyClient.js:1163
#, javascript-format
msgid "%s is sending you %s"
msgstr "%s এ আপোনাক %s পঠাই আছে"
#. To translators: The parameter is the contact's alias */
#: ../js/ui/components/telepathyClient.js:1203
#: ../js/ui/components/telepathyClient.js:1192
#, javascript-format
msgid "%s would like permission to see when you are online"
msgstr "আপুনি কেতিয়া অনলাইন আছে চাবলে %s এ অনুমতি বিচাৰিব"
#: ../js/ui/components/telepathyClient.js:1288
#: ../js/ui/components/telepathyClient.js:1277
msgid "Network error"
msgstr "নেটৱাৰ্ক ত্ৰুটি"
#: ../js/ui/components/telepathyClient.js:1290
#: ../js/ui/components/telepathyClient.js:1279
msgid "Authentication failed"
msgstr "প্ৰমাণীকৰণ ব্যৰ্থ"
#: ../js/ui/components/telepathyClient.js:1292
#: ../js/ui/components/telepathyClient.js:1281
msgid "Encryption error"
msgstr "ইনক্ৰিপষণ ত্ৰুটি"
#: ../js/ui/components/telepathyClient.js:1294
#: ../js/ui/components/telepathyClient.js:1283
msgid "Certificate not provided"
msgstr "প্ৰমাণপত্ৰ প্ৰদান কৰা হোৱা নাই"
#: ../js/ui/components/telepathyClient.js:1296
#: ../js/ui/components/telepathyClient.js:1285
msgid "Certificate untrusted"
msgstr "প্ৰমাণপত্ৰক ভৰষা কৰিব নোৱাৰি"
#: ../js/ui/components/telepathyClient.js:1298
#: ../js/ui/components/telepathyClient.js:1287
msgid "Certificate expired"
msgstr "প্ৰমাণপত্ৰৰ অৱসান ঘটিছে"
#: ../js/ui/components/telepathyClient.js:1300
#: ../js/ui/components/telepathyClient.js:1289
msgid "Certificate not activated"
msgstr "প্ৰমাণপত্ৰ সক্ৰিয় কৰা হোৱা নাই"
#: ../js/ui/components/telepathyClient.js:1302
#: ../js/ui/components/telepathyClient.js:1291
msgid "Certificate hostname mismatch"
msgstr "প্ৰমাণপত্ৰ হস্টনাম অমিল"
#: ../js/ui/components/telepathyClient.js:1304
#: ../js/ui/components/telepathyClient.js:1293
msgid "Certificate fingerprint mismatch"
msgstr "প্ৰমাণপত্ৰ ফিংগাৰপ্ৰিন্ট অমিল"
#: ../js/ui/components/telepathyClient.js:1306
#: ../js/ui/components/telepathyClient.js:1295
msgid "Certificate self-signed"
msgstr "প্ৰমাণপত্ৰ স্ব-স্বাক্ষৰীত"
#: ../js/ui/components/telepathyClient.js:1308
#: ../js/ui/components/telepathyClient.js:1297
msgid "Status is set to offline"
msgstr "অৱস্থা অফলাইনলে সংহতি কৰা হৈছে"
#: ../js/ui/components/telepathyClient.js:1310
#: ../js/ui/components/telepathyClient.js:1299
msgid "Encryption is not available"
msgstr "ইনক্ৰিপষণ উপলব্ধ নহয়"
#: ../js/ui/components/telepathyClient.js:1312
#: ../js/ui/components/telepathyClient.js:1301
msgid "Certificate is invalid"
msgstr "প্ৰমাণপত্ৰ অবৈধ"
#: ../js/ui/components/telepathyClient.js:1314
#: ../js/ui/components/telepathyClient.js:1303
msgid "Connection has been refused"
msgstr "সংযোগ নাকচ কৰা হৈছে"
#: ../js/ui/components/telepathyClient.js:1316
#: ../js/ui/components/telepathyClient.js:1305
msgid "Connection can't be established"
msgstr "সংযোগ স্থাপন কৰিব নোৱাৰি"
#: ../js/ui/components/telepathyClient.js:1318
#: ../js/ui/components/telepathyClient.js:1307
msgid "Connection has been lost"
msgstr "সংযোগ হেৰাইছে"
#: ../js/ui/components/telepathyClient.js:1320
#: ../js/ui/components/telepathyClient.js:1309
msgid "This account is already connected to the server"
msgstr "এই একাওন্ট ইতিমধ্যে চাৰ্ভাৰৰ সৈতে সংযোগিত"
#: ../js/ui/components/telepathyClient.js:1322
#: ../js/ui/components/telepathyClient.js:1311
msgid ""
"Connection has been replaced by a new connection using the same resource"
msgstr "সংযোগক একে সম্পদ ব্যৱহাৰ কৰি এটা নতুন সংযোগৰে প্ৰতিস্থাপন কৰা হৈছে"
#: ../js/ui/components/telepathyClient.js:1324
#: ../js/ui/components/telepathyClient.js:1313
msgid "The account already exists on the server"
msgstr "একাওন্ট ইতিমধ্যে চাৰ্ভাৰত উপস্থিত"
#: ../js/ui/components/telepathyClient.js:1326
#: ../js/ui/components/telepathyClient.js:1315
msgid "Server is currently too busy to handle the connection"
msgstr "চাৰ্ভাৰ সংযোগ ব্যৱস্থাপনা কৰিবলে বৰ্তমানে অতি ব্যস্ত"
#: ../js/ui/components/telepathyClient.js:1328
#: ../js/ui/components/telepathyClient.js:1317
msgid "Certificate has been revoked"
msgstr "প্ৰমাণপত্ৰ প্ৰত্যাহাৰ কৰা হৈছে"
#: ../js/ui/components/telepathyClient.js:1330
#: ../js/ui/components/telepathyClient.js:1319
msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr ""
"প্ৰমাণপত্ৰয় এটা অসুৰক্ষিত চিফাৰ এলগৰিথম ব্যৱহাৰ কৰে অথবা ক্ৰিপ্টোগ্ৰাফিয়ভাৱে "
"দুৰ্বল"
#: ../js/ui/components/telepathyClient.js:1332
#: ../js/ui/components/telepathyClient.js:1321
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
@ -882,22 +896,22 @@ msgstr ""
"ক্ৰিপ্টোগ্ৰাফী "
"লাইব্ৰেৰীয়ে প্ৰণয়ন কৰা সীমাসমূহত অতিক্ৰম কৰে"
#: ../js/ui/components/telepathyClient.js:1334
#: ../js/ui/components/telepathyClient.js:1323
msgid "Internal error"
msgstr "অভ্যন্তৰীক ত্ৰুটি"
#. translators: argument is the account name, like
#. * name@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1344
#: ../js/ui/components/telepathyClient.js:1333
#, javascript-format
msgid "Unable to connect to %s"
msgstr "%s ৰ সৈতে সংযোগ কৰিবলে অক্ষম"
#: ../js/ui/components/telepathyClient.js:1349
#: ../js/ui/components/telepathyClient.js:1338
msgid "View account"
msgstr "একাওন্ট দৰ্শন কৰক"
#: ../js/ui/components/telepathyClient.js:1381
#: ../js/ui/components/telepathyClient.js:1370
msgid "Unknown reason"
msgstr "অজ্ঞাত কাৰণ"
@ -1044,6 +1058,7 @@ msgstr "ইনস্টল কৰক"
#: ../js/ui/extensionDownloader.js:204
#, javascript-format
#| msgid "Download and install '%s' from extensions.gnome.org?"
msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "extensions.gnome.org ৰ পৰা “%s” ক ডাউনল'ড আৰু ইনস্টল কৰিব নে?"
@ -1077,7 +1092,7 @@ msgstr "সামৰ্থবান কৰা আছে"
#. because it's disabled by rfkill (airplane mode) */
#. translators:
#. * The device has been disabled
#: ../js/ui/lookingGlass.js:717 ../js/ui/status/network.js:523
#: ../js/ui/lookingGlass.js:717 ../js/ui/status/network.js:470
#: ../src/gvc/gvc-mixer-control.c:1830
msgid "Disabled"
msgstr "অসামৰ্থবান কৰা আছে"
@ -1102,43 +1117,43 @@ msgstr "উৎস দৰ্শন কৰক"
msgid "Web Page"
msgstr "ৱেব পৃষ্ঠা"
#: ../js/ui/messageTray.js:1312
#: ../js/ui/messageTray.js:1309
msgid "Open"
msgstr "খোলক"
#: ../js/ui/messageTray.js:1319
#: ../js/ui/messageTray.js:1316
msgid "Remove"
msgstr "আতৰাওক"
#: ../js/ui/messageTray.js:1616
#: ../js/ui/messageTray.js:1613
msgid "Notifications"
msgstr "অধিসূচনাসমূহ"
#: ../js/ui/messageTray.js:1623
#: ../js/ui/messageTray.js:1620
msgid "Clear Messages"
msgstr "বাৰ্তাসমূহ পৰিষ্কাৰ কৰক"
#: ../js/ui/messageTray.js:1642
#: ../js/ui/messageTray.js:1639
msgid "Notification Settings"
msgstr "অধিসূচনা সংহতিসমূহ"
#: ../js/ui/messageTray.js:1695
#: ../js/ui/messageTray.js:1692
msgid "Tray Menu"
msgstr "ট্ৰে মেনু"
#: ../js/ui/messageTray.js:1912
#: ../js/ui/messageTray.js:1909
msgid "No Messages"
msgstr "কোনো বাৰ্তা নাই"
#: ../js/ui/messageTray.js:1950
#: ../js/ui/messageTray.js:1947
msgid "Message Tray"
msgstr "বাৰ্তা ট্ৰে"
#: ../js/ui/messageTray.js:2934
#: ../js/ui/messageTray.js:2931
msgid "System Information"
msgstr "চিস্টেম তথ্য"
#: ../js/ui/notificationDaemon.js:515 ../src/shell-app.c:399
#: ../js/ui/notificationDaemon.js:515 ../src/shell-app.c:397
msgctxt "program"
msgid "Unknown"
msgstr "অজ্ঞাত"
@ -1176,7 +1191,7 @@ msgstr "প্ৰস্থান কৰক"
msgid "Activities"
msgstr "কাৰ্য্যসমূহ"
#: ../js/ui/panel.js:905
#: ../js/ui/panel.js:903
msgid "Top Bar"
msgstr "উপৰৰ বাৰ"
@ -1205,19 +1220,19 @@ msgid_plural "%d new notifications"
msgstr[0] "%d নতুন অধিসূচনা"
msgstr[1] "%d নতুন অধিসূচনাসমূহ"
#: ../js/ui/screenShield.js:473 ../js/ui/status/system.js:342
#: ../js/ui/screenShield.js:472 ../js/ui/status/system.js:342
msgid "Lock"
msgstr "লক কৰক"
#: ../js/ui/screenShield.js:707
#: ../js/ui/screenShield.js:706
msgid "GNOME needs to lock the screen"
msgstr "GNOME এ পৰ্দা লক কৰিব লাগিব"
#: ../js/ui/screenShield.js:834 ../js/ui/screenShield.js:1301
#: ../js/ui/screenShield.js:833 ../js/ui/screenShield.js:1300
msgid "Unable to lock"
msgstr "লক কৰিবলে অক্ষম"
#: ../js/ui/screenShield.js:835 ../js/ui/screenShield.js:1302
#: ../js/ui/screenShield.js:834 ../js/ui/screenShield.js:1301
msgid "Lock was blocked by an application"
msgstr "লক কাৰ্য্য এটা এপ্লিকেচন দ্বাৰা প্ৰতিৰোধ কৰা হৈছিল"
@ -1297,31 +1312,26 @@ msgstr "উচ্চ কন্ট্ৰাস্ট"
msgid "Large Text"
msgstr "ডাঙৰ লিখনী"
#: ../js/ui/status/bluetooth.js:48
#: ../js/ui/status/bluetooth.js:45
msgid "Bluetooth"
msgstr "ব্লুটুথ"
#: ../js/ui/status/bluetooth.js:50 ../js/ui/status/network.js:134
#: ../js/ui/status/network.js:1209 ../js/ui/status/rfkill.js:85
#: ../js/ui/status/rfkill.js:105
#: ../js/ui/status/bluetooth.js:47 ../js/ui/status/network.js:131
#: ../js/ui/status/network.js:1081 ../js/ui/status/rfkill.js:48
msgid "Turn Off"
msgstr "বন্ধ কৰক"
#: ../js/ui/status/bluetooth.js:53
#: ../js/ui/status/bluetooth.js:50
msgid "Bluetooth Settings"
msgstr "ব্লুটুথ সংহতিসমূহ"
#: ../js/ui/status/bluetooth.js:100
#: ../js/ui/status/bluetooth.js:98
#, javascript-format
msgid "%d Connected Device"
msgid_plural "%d Connected Devices"
msgstr[0] "%d সংযুক্ত ডিভাইচ"
msgstr[1] "%d সংযুক্ত ডিভাইচসমূহ"
#: ../js/ui/status/bluetooth.js:102 ../js/ui/status/network.js:1232
msgid "Not Connected"
msgstr "সংযুক্ত নহয়"
#: ../js/ui/status/brightness.js:44
msgid "Brightness"
msgstr "উজ্জ্বলতা"
@ -1330,136 +1340,103 @@ msgstr "উজ্জ্বলতা"
msgid "Show Keyboard Layout"
msgstr "কিবৰ্ড বিন্যাস দেখুৱাওক"
#: ../js/ui/status/network.js:73
#: ../js/ui/status/network.js:70
msgid "<unknown>"
msgstr "<unknown>"
#: ../js/ui/status/network.js:223 ../js/ui/status/network.js:389
#: ../js/ui/status/network.js:1230
#: ../js/ui/status/network.js:220 ../js/ui/status/network.js:377
#: ../js/ui/status/network.js:1102
msgid "Off"
msgstr "অফ"
#. Translators: this is for network devices that are physically present but are not
#. under NetworkManager's control (and thus cannot be used in the menu) */
#: ../js/ui/status/network.js:395
#: ../js/ui/status/network.js:383
msgid "unmanaged"
msgstr "অব্যৱস্থাপিত"
#: ../js/ui/status/network.js:397
#: ../js/ui/status/network.js:385
msgid "disconnecting..."
msgstr "বিচ্ছিনিত কৰা হৈছে..."
#: ../js/ui/status/network.js:403 ../js/ui/status/network.js:1284
#: ../js/ui/status/network.js:391 ../js/ui/status/network.js:1156
msgid "connecting..."
msgstr "সংযোগ কৰা হৈছে..."
#. Translators: this is for network connections that require some kind of key or password */
#: ../js/ui/status/network.js:406 ../js/ui/status/network.js:1287
#: ../js/ui/status/network.js:394 ../js/ui/status/network.js:1159
msgid "authentication required"
msgstr "প্ৰমাণীকৰণৰ প্ৰয়োজন"
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing */
#: ../js/ui/status/network.js:414
#: ../js/ui/status/network.js:402
msgid "firmware missing"
msgstr "ফাৰ্মৱেৰ সন্ধানহীন"
#. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage */
#: ../js/ui/status/network.js:418
#: ../js/ui/status/network.js:406
msgid "unavailable"
msgstr "উপলব্ধ নাই"
#: ../js/ui/status/network.js:420 ../js/ui/status/network.js:1289
#: ../js/ui/status/network.js:408 ../js/ui/status/network.js:1161
msgid "connection failed"
msgstr "সংযোগ ব্যৰ্থ"
#: ../js/ui/status/network.js:436
#| msgid "Wi-Fi Settings"
msgid "Wired Settings"
msgstr "তাঁৰযুক্ত সংহতিসমূহ"
#: ../js/ui/status/network.js:477 ../js/ui/status/network.js:563
#: ../js/ui/status/network.js:424 ../js/ui/status/network.js:510
#| msgid "Mobile broadband"
msgid "Mobile Broadband Settings"
msgstr "মবাইল ব্ৰডবেণ্ড সংহতিসমূহ"
#: ../js/ui/status/network.js:519 ../js/ui/status/network.js:1228
#: ../js/ui/status/network.js:466 ../js/ui/status/network.js:1100
#| msgid "hardware disabled"
msgid "Hardware Disabled"
msgstr "হাৰ্ডৱেৰ অসামৰ্থবান কৰা আছে"
#: ../js/ui/status/network.js:578
msgid "Use as Internet connection"
msgstr "ইন্টাৰনেট সংযোগ ৰূপে ব্যৱহাৰ কৰক"
#: ../js/ui/status/network.js:755
#| msgid "Airplane Mode"
msgid "Airplane Mode is On"
msgstr "বিমান অৱস্থা অন আছে"
#: ../js/ui/status/network.js:756
msgid "Wi-Fi is disabled when airplane mode is on."
msgstr "বিমান অৱস্থা অন থকা অৱস্থাত Wi-Fi অসামৰ্থবান থাকে।"
#: ../js/ui/status/network.js:757
#| msgid "Airplane Mode"
msgid "Turn Off Airplane Mode"
msgstr "বিমান অৱস্থা বন্ধ কৰক"
#: ../js/ui/status/network.js:766
#| msgid "Wi-Fi Settings"
msgid "Wi-Fi is Off"
msgstr "Wi-Fi অফ আছে"
#: ../js/ui/status/network.js:767
msgid "Wi-Fi needs to be turned on in order to connect to a network."
msgstr "এটা নেটৱাৰ্কৰ সৈতে সংযোগ কৰিবলে Wi-Fi অন কৰিব লাগিব।"
#: ../js/ui/status/network.js:768
#| msgid "Turn On"
msgid "Turn On Wi-Fi"
msgstr "Wi-Fi অন কৰক"
#: ../js/ui/status/network.js:793
#: ../js/ui/status/network.js:692
msgid "Wi-Fi Networks"
msgstr "Wi-Fi নেটৱাৰ্কসমূহ"
#: ../js/ui/status/network.js:795
#: ../js/ui/status/network.js:694
msgid "Select a network"
msgstr "এটা নেটৱাৰ্ক বাছক"
#: ../js/ui/status/network.js:824
#: ../js/ui/status/network.js:718
msgid "No Networks"
msgstr "কোনো নেটৱাৰ্ক নাই"
#: ../js/ui/status/network.js:845 ../js/ui/status/rfkill.js:103
msgid "Use hardware switch to turn off"
msgstr "বন্ধ কৰিবলে হাৰ্ডৱেৰ চুইচ ব্যৱহাৰ কৰক"
#: ../js/ui/status/network.js:1115
#: ../js/ui/status/network.js:987
msgid "Select Network"
msgstr "নেটৱাৰ্ক বাছক"
#: ../js/ui/status/network.js:1121
#: ../js/ui/status/network.js:993
#| msgid "Settings"
msgid "Wi-Fi Settings"
msgstr "Wi-Fi সংহতিসমূহ"
#: ../js/ui/status/network.js:1209
#: ../js/ui/status/network.js:1081
msgid "Turn On"
msgstr "অন কৰক"
#: ../js/ui/status/network.js:1352
#: ../js/ui/status/network.js:1104
#| msgid "Connect"
msgid "Not Connected"
msgstr "সংযুক্ত নহয়"
#: ../js/ui/status/network.js:1224
msgid "VPN"
msgstr "VPN"
#: ../js/ui/status/network.js:1495
#: ../js/ui/status/network.js:1364
msgid "Network Manager"
msgstr "নেটৱাৰ্ক ব্যৱস্থাপক"
#: ../js/ui/status/network.js:1534
#: ../js/ui/status/network.js:1403
msgid "Connection failed"
msgstr "সংযোগ ব্যৰ্থ"
#: ../js/ui/status/network.js:1535
#: ../js/ui/status/network.js:1404
msgid "Activation of network connection failed"
msgstr "নেটৱাৰ্ক সংযোগ সক্ৰিয়কৰণ ব্যৰ্থ হল"
@ -1493,15 +1470,15 @@ msgstr "UPS"
msgid "Battery"
msgstr "বেটাৰি"
#: ../js/ui/status/rfkill.js:82
#: ../js/ui/status/rfkill.js:45
msgid "Airplane Mode"
msgstr "বিমান অৱস্থা"
#: ../js/ui/status/rfkill.js:84
#: ../js/ui/status/rfkill.js:47
msgid "On"
msgstr "অন"
#: ../js/ui/status/rfkill.js:88
#: ../js/ui/status/rfkill.js:51
msgid "Network Settings"
msgstr "নেটৱাৰ্ক সংহতিসমূহ"
@ -1555,6 +1532,7 @@ msgstr "সন্ধান কৰক"
#: ../js/ui/windowAttentionHandler.js:19
#, javascript-format
#| msgid "'%s' is ready"
msgid "“%s” is ready"
msgstr "“%s” প্ৰস্তুত"
@ -1622,8 +1600,9 @@ msgstr "লগিন পৰ্দাৰ বাবে এটা বিশেষ
msgid "List possible modes"
msgstr "সম্ভাব্য অৱস্থাসমূহ তালিকাভুক্ত কৰক"
#: ../src/shell-app.c:642
#: ../src/shell-app.c:640
#, c-format
#| msgid "Failed to launch '%s'"
msgid "Failed to launch “%s”"
msgstr "“%s” লঞ্চ কৰিবলে ব্যৰ্থ"

288
po/cs.po
View File

@ -12,8 +12,8 @@ msgstr ""
"Project-Id-Version: gnome-shell\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2014-02-08 08:59+0000\n"
"PO-Revision-Date: 2014-02-08 11:21+0100\n"
"POT-Creation-Date: 2014-01-17 21:35+0000\n"
"PO-Revision-Date: 2014-01-18 12:21+0100\n"
"Last-Translator: Marek Černocký <marek@manet.cz>\n"
"Language-Team: Czech <gnome-cs-list@gnome.org>\n"
"Language: cs\n"
@ -258,7 +258,6 @@ msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr "Se změnou zaměření v režimu myši čekat na zastavení pohybu ukazatele"
#: ../js/extensionPrefs/main.js:127
#, javascript-format
msgid "There was an error loading the preferences dialog for %s:"
msgstr ""
"Nastala chyba při načítání dialogového okna předvoleb pro rozšíření %s:"
@ -275,7 +274,7 @@ msgstr ""
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:136
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:357
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/network.js:857
#: ../js/ui/status/network.js:724
msgid "Cancel"
msgstr "Zrušit"
@ -302,7 +301,6 @@ msgid "Not listed?"
msgstr "Nejste na seznamu?"
#: ../js/gdm/loginDialog.js:598
#, javascript-format
msgid "(e.g., user or %s)"
msgstr "(např. uživatel nebo %s)"
@ -332,41 +330,38 @@ msgid "Could not parse command:"
msgstr "Nelze analyzovat příkaz:"
#: ../js/misc/util.js:156
#, javascript-format
msgid "Execution of “%s” failed:"
msgstr "Vykonání „%s“ selhalo:"
#: ../js/ui/appDisplay.js:633
#: ../js/ui/appDisplay.js:540
msgid "Frequently used applications will appear here"
msgstr "Zde se objeví často používané aplikace"
#: ../js/ui/appDisplay.js:744
#: ../js/ui/appDisplay.js:660
msgid "Frequent"
msgstr "Časté"
#: ../js/ui/appDisplay.js:751
#: ../js/ui/appDisplay.js:667
msgid "All"
msgstr "Všechny"
#: ../js/ui/appDisplay.js:1558
#: ../js/ui/appDisplay.js:1498
msgid "New Window"
msgstr "Nové okno"
#: ../js/ui/appDisplay.js:1580 ../js/ui/dash.js:285
#: ../js/ui/appDisplay.js:1501 ../js/ui/dash.js:285
msgid "Remove from Favorites"
msgstr "Odstranit z oblíbených"
#: ../js/ui/appDisplay.js:1586
#: ../js/ui/appDisplay.js:1502
msgid "Add to Favorites"
msgstr "Přidat mezi oblíbené"
#: ../js/ui/appFavorites.js:87
#, javascript-format
msgid "%s has been added to your favorites."
msgstr "%s byl přidán mezi oblíbené."
#: ../js/ui/appFavorites.js:121
#, javascript-format
msgid "%s has been removed from your favorites."
msgstr "%s byl odstraněn z oblíbených."
@ -553,7 +548,6 @@ msgid "Removable Devices"
msgstr "Výměnná zařízení"
#: ../js/ui/components/autorunManager.js:596
#, javascript-format
msgid "Open with %s"
msgstr "Otevřít s %s"
@ -569,8 +563,8 @@ msgstr "Heslo:"
msgid "Type again:"
msgstr "Napište znovu:"
#: ../js/ui/components/networkAgent.js:131 ../js/ui/status/network.js:227
#: ../js/ui/status/network.js:300 ../js/ui/status/network.js:860
#: ../js/ui/components/networkAgent.js:131 ../js/ui/status/network.js:131
#: ../js/ui/status/network.js:293 ../js/ui/status/network.js:727
msgid "Connect"
msgstr "Připojit"
@ -603,7 +597,6 @@ msgid "Authentication required by wireless network"
msgstr "K bezdrátové síti je vyžadováno ověření"
#: ../js/ui/components/networkAgent.js:312
#, javascript-format
msgid ""
"Passwords or encryption keys are required to access the wireless network "
"“%s”."
@ -613,7 +606,7 @@ msgstr ""
#: ../js/ui/components/networkAgent.js:316
msgid "Wired 802.1X authentication"
msgstr "Ověření připojení po drátu 802.1X"
msgstr "Ověření drátového připojení 802.1X"
#: ../js/ui/components/networkAgent.js:318
msgid "Network name: "
@ -640,7 +633,6 @@ msgid "Mobile broadband network password"
msgstr "Heslo k mobilní širokopásmové síti"
#: ../js/ui/components/networkAgent.js:339
#, javascript-format
msgid "A password is required to connect to “%s”."
msgstr "Pro připojení k „%s“ je vyžadováno heslo."
@ -689,74 +681,69 @@ msgid "Mute"
msgstr "Ztlumit"
#. Translators: this is the word "Yesterday" followed by a time string. i.e. "Yesterday, 14:30"*/
#: ../js/ui/components/telepathyClient.js:952
#: ../js/ui/components/telepathyClient.js:941
msgid "<b>Yesterday</b>, <b>%H:%M</b>"
msgstr "<b>Včera</b>, <b>%H.%M</b>"
#. Translators: this is the week day name followed by a time string. i.e. "Monday, 14:30*/
#: ../js/ui/components/telepathyClient.js:958
#: ../js/ui/components/telepathyClient.js:947
msgid "<b>%A</b>, <b>%H:%M</b>"
msgstr "<b>%A</b>, <b>%H:%M</b>"
#. Translators: this is the month name and day number followed by a time string. i.e. "May 25, 14:30"*/
#: ../js/ui/components/telepathyClient.js:963
#: ../js/ui/components/telepathyClient.js:952
msgid "<b>%B</b> <b>%d</b>, <b>%H:%M</b>"
msgstr "<b>%d.</b> <b>%B</b>, <b>%H:%M</b>"
#. Translators: this is the month name, day number, year number followed by a time string. i.e. "May 25 2012, 14:30"*/
#: ../js/ui/components/telepathyClient.js:967
#: ../js/ui/components/telepathyClient.js:956
msgid "<b>%B</b> <b>%d</b> <b>%Y</b>, <b>%H:%M</b> "
msgstr "<b>%d.</b> <b>%B</b> <b>%Y</b>, <b>%H:%M</b> "
#. Translators: this is the other person changing their old IM name to their new
#. IM name. */
#: ../js/ui/components/telepathyClient.js:998
#, javascript-format
#: ../js/ui/components/telepathyClient.js:987
msgid "%s is now known as %s"
msgstr "%s je teď znám jako %s"
#. translators: argument is a room name like
#. * room@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1101
#, javascript-format
#: ../js/ui/components/telepathyClient.js:1090
msgid "Invitation to %s"
msgstr "Pozvánka na připojení k %s"
#. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example. */
#: ../js/ui/components/telepathyClient.js:1109
#, javascript-format
#: ../js/ui/components/telepathyClient.js:1098
msgid "%s is inviting you to join %s"
msgstr "%s vás zve do %s"
#: ../js/ui/components/telepathyClient.js:1111
#: ../js/ui/components/telepathyClient.js:1146
#: ../js/ui/components/telepathyClient.js:1180
#: ../js/ui/components/telepathyClient.js:1237
#: ../js/ui/components/telepathyClient.js:1100
#: ../js/ui/components/telepathyClient.js:1135
#: ../js/ui/components/telepathyClient.js:1169
#: ../js/ui/components/telepathyClient.js:1226
msgid "Decline"
msgstr "Odmítnout"
#: ../js/ui/components/telepathyClient.js:1117
#: ../js/ui/components/telepathyClient.js:1186
#: ../js/ui/components/telepathyClient.js:1242
#: ../js/ui/components/telepathyClient.js:1106
#: ../js/ui/components/telepathyClient.js:1175
#: ../js/ui/components/telepathyClient.js:1231
msgid "Accept"
msgstr "Přijmout"
#. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1136
#, javascript-format
#: ../js/ui/components/telepathyClient.js:1125
msgid "Video call from %s"
msgstr "Videohovor od %s"
#. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1139
#, javascript-format
#: ../js/ui/components/telepathyClient.js:1128
msgid "Call from %s"
msgstr "Hovor od %s"
#. translators: this is a button label (verb), not a noun */
#: ../js/ui/components/telepathyClient.js:1153
#: ../js/ui/components/telepathyClient.js:1142
msgid "Answer"
msgstr "Zvednout"
@ -765,110 +752,108 @@ msgstr "Zvednout"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#. */
#: ../js/ui/components/telepathyClient.js:1174
#, javascript-format
#: ../js/ui/components/telepathyClient.js:1163
msgid "%s is sending you %s"
msgstr "%s vám posílá %s"
#. To translators: The parameter is the contact's alias */
#: ../js/ui/components/telepathyClient.js:1203
#, javascript-format
#: ../js/ui/components/telepathyClient.js:1192
msgid "%s would like permission to see when you are online"
msgstr "%s vás žádá o oprávnění vidět, že jste dostupní"
#: ../js/ui/components/telepathyClient.js:1288
#: ../js/ui/components/telepathyClient.js:1277
msgid "Network error"
msgstr "Chyba sítě"
#: ../js/ui/components/telepathyClient.js:1290
#: ../js/ui/components/telepathyClient.js:1279
msgid "Authentication failed"
msgstr "Ověření selhalo"
#: ../js/ui/components/telepathyClient.js:1292
#: ../js/ui/components/telepathyClient.js:1281
msgid "Encryption error"
msgstr "Chyba šifrování"
#: ../js/ui/components/telepathyClient.js:1294
#: ../js/ui/components/telepathyClient.js:1283
msgid "Certificate not provided"
msgstr "Certifikát neposkytnut"
#: ../js/ui/components/telepathyClient.js:1296
#: ../js/ui/components/telepathyClient.js:1285
msgid "Certificate untrusted"
msgstr "Nedůvěryhodný certifikát"
#: ../js/ui/components/telepathyClient.js:1298
#: ../js/ui/components/telepathyClient.js:1287
msgid "Certificate expired"
msgstr "Platnost certifikátu vypršela"
#: ../js/ui/components/telepathyClient.js:1300
#: ../js/ui/components/telepathyClient.js:1289
msgid "Certificate not activated"
msgstr "Certifikát není aktivován"
#: ../js/ui/components/telepathyClient.js:1302
#: ../js/ui/components/telepathyClient.js:1291
msgid "Certificate hostname mismatch"
msgstr "Název počítače certifikátu nesouhlasí"
#: ../js/ui/components/telepathyClient.js:1304
#: ../js/ui/components/telepathyClient.js:1293
msgid "Certificate fingerprint mismatch"
msgstr "Otisk prstu certifikátu nesouhlasí"
#: ../js/ui/components/telepathyClient.js:1306
#: ../js/ui/components/telepathyClient.js:1295
msgid "Certificate self-signed"
msgstr "Certifikát je podepsán sám sebou"
#: ../js/ui/components/telepathyClient.js:1308
#: ../js/ui/components/telepathyClient.js:1297
msgid "Status is set to offline"
msgstr "Stav nastaven na „Odhlášen“"
#: ../js/ui/components/telepathyClient.js:1310
#: ../js/ui/components/telepathyClient.js:1299
msgid "Encryption is not available"
msgstr "Šifrování není dostupné"
#: ../js/ui/components/telepathyClient.js:1312
#: ../js/ui/components/telepathyClient.js:1301
msgid "Certificate is invalid"
msgstr "Certifikát je neplatný"
#: ../js/ui/components/telepathyClient.js:1314
#: ../js/ui/components/telepathyClient.js:1303
msgid "Connection has been refused"
msgstr "Spojení bylo odmítnuto"
#: ../js/ui/components/telepathyClient.js:1316
#: ../js/ui/components/telepathyClient.js:1305
msgid "Connection can't be established"
msgstr "Spojení nemohlo bát navázáno"
#: ../js/ui/components/telepathyClient.js:1318
#: ../js/ui/components/telepathyClient.js:1307
msgid "Connection has been lost"
msgstr "Spojení bylo ztraceno"
#: ../js/ui/components/telepathyClient.js:1320
#: ../js/ui/components/telepathyClient.js:1309
msgid "This account is already connected to the server"
msgstr "Tento účet je již připojen k serveru"
#: ../js/ui/components/telepathyClient.js:1322
#: ../js/ui/components/telepathyClient.js:1311
msgid ""
"Connection has been replaced by a new connection using the same resource"
msgstr "Spojení bylo nahrazeno novým spojením, které používá stejný zdroj"
#: ../js/ui/components/telepathyClient.js:1324
#: ../js/ui/components/telepathyClient.js:1313
msgid "The account already exists on the server"
msgstr "Takový účet již na serveru existuje"
#: ../js/ui/components/telepathyClient.js:1326
#: ../js/ui/components/telepathyClient.js:1315
msgid "Server is currently too busy to handle the connection"
msgstr "Server je právě příliš zaneprázdněn na to, aby obsloužil spojení"
#: ../js/ui/components/telepathyClient.js:1328
#: ../js/ui/components/telepathyClient.js:1317
msgid "Certificate has been revoked"
msgstr "Certifikát byl odvolán"
#: ../js/ui/components/telepathyClient.js:1330
#: ../js/ui/components/telepathyClient.js:1319
msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr ""
"Certifikát používá nepříliš bezpečný šifrovací algoritmus nebo je z "
"kryptografického hlediska slabý"
#: ../js/ui/components/telepathyClient.js:1332
#: ../js/ui/components/telepathyClient.js:1321
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
@ -876,22 +861,21 @@ msgstr ""
"Délka certifikátu serveru nebo délka zřetězených certifikátů serveru "
"přesáhla omezení dané kryptografickou knihovnou"
#: ../js/ui/components/telepathyClient.js:1334
#: ../js/ui/components/telepathyClient.js:1323
msgid "Internal error"
msgstr "Vnitřní chyba"
#. translators: argument is the account name, like
#. * name@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1344
#, javascript-format
#: ../js/ui/components/telepathyClient.js:1333
msgid "Unable to connect to %s"
msgstr "Nelze se připojit k „%s“"
#: ../js/ui/components/telepathyClient.js:1349
#: ../js/ui/components/telepathyClient.js:1338
msgid "View account"
msgstr "Zobrazit účet"
#: ../js/ui/components/telepathyClient.js:1381
#: ../js/ui/components/telepathyClient.js:1370
msgid "Unknown reason"
msgstr "Neznámý důvod"
@ -928,7 +912,6 @@ msgid "%A %B %e, %Y"
msgstr "%A, %e. %B, %Y"
#: ../js/ui/endSessionDialog.js:62
#, javascript-format
msgctxt "title"
msgid "Log Out %s"
msgstr "Odhlásit uživatele %s"
@ -939,7 +922,6 @@ msgid "Log Out"
msgstr "Odhlášení"
#: ../js/ui/endSessionDialog.js:65
#, javascript-format
msgid "%s will be logged out automatically in %d second."
msgid_plural "%s will be logged out automatically in %d seconds."
msgstr[0] "Uživatel %s bude automaticky odhlášen za %d sekundu."
@ -947,7 +929,6 @@ msgstr[1] "Uživatel %s bude automaticky odhlášen za %d sekundy."
msgstr[2] "Uživatel %s bude automaticky odhlášen za %d sekund."
#: ../js/ui/endSessionDialog.js:70
#, javascript-format
msgid "You will be logged out automatically in %d second."
msgid_plural "You will be logged out automatically in %d seconds."
msgstr[0] "Budete automaticky odhlášeni za %d sekundu."
@ -965,7 +946,6 @@ msgid "Power Off"
msgstr "Vypnutí"
#: ../js/ui/endSessionDialog.js:83
#, javascript-format
msgid "The system will power off automatically in %d second."
msgid_plural "The system will power off automatically in %d seconds."
msgstr[0] "Systém bude automaticky vypnut za %d sekundu."
@ -988,7 +968,6 @@ msgid "Restart"
msgstr "Restart"
#: ../js/ui/endSessionDialog.js:99
#, javascript-format
msgid "The system will restart automatically in %d second."
msgid_plural "The system will restart automatically in %d seconds."
msgstr[0] "Systém bude automaticky restartován za %d sekundu."
@ -1001,7 +980,6 @@ msgid "Restart & Install Updates"
msgstr "Restartovat a nainstalovat aktualizace"
#: ../js/ui/endSessionDialog.js:114
#, javascript-format
msgid "The system will automatically restart and install updates in %d second."
msgid_plural ""
"The system will automatically restart and install updates in %d seconds."
@ -1030,13 +1008,11 @@ msgstr "Jsou přihlášeni jiní uživatelé."
#. Translators: Remote here refers to a remote session, like a ssh login */
#: ../js/ui/endSessionDialog.js:486
#, javascript-format
msgid "%s (remote)"
msgstr "%s (vzdálený)"
#. Translators: Console here refers to a tty like a VT console */
#: ../js/ui/endSessionDialog.js:489
#, javascript-format
msgid "%s (console)"
msgstr "%s (konzola)"
@ -1045,7 +1021,6 @@ msgid "Install"
msgstr "Instalovat"
#: ../js/ui/extensionDownloader.js:204
#, javascript-format
msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "Stáhnout a nainstalovat „%s“ z extensions.gnome.org?"
@ -1059,7 +1034,6 @@ msgstr "Nejsou nainstalována žádná rozšíření"
#. Translators: argument is an extension UUID. */
#: ../js/ui/lookingGlass.js:695
#, javascript-format
msgid "%s has not emitted any errors."
msgstr "Rozšíření %s nevyvolalo žádné chyby."
@ -1079,7 +1053,7 @@ msgstr "Povoleno"
#. because it's disabled by rfkill (airplane mode) */
#. translators:
#. * The device has been disabled
#: ../js/ui/lookingGlass.js:717 ../js/ui/status/network.js:523
#: ../js/ui/lookingGlass.js:717 ../js/ui/status/network.js:470
#: ../src/gvc/gvc-mixer-control.c:1830
msgid "Disabled"
msgstr "Zakázáno"
@ -1104,49 +1078,48 @@ msgstr "Zobrazit zdroj"
msgid "Web Page"
msgstr "Webová stránka"
#: ../js/ui/messageTray.js:1312
#: ../js/ui/messageTray.js:1309
msgid "Open"
msgstr "Otevřít"
#: ../js/ui/messageTray.js:1319
#: ../js/ui/messageTray.js:1316
msgid "Remove"
msgstr "Odstranit"
#: ../js/ui/messageTray.js:1616
#: ../js/ui/messageTray.js:1613
msgid "Notifications"
msgstr "Upozornění"
#: ../js/ui/messageTray.js:1623
#: ../js/ui/messageTray.js:1620
msgid "Clear Messages"
msgstr "Vymazat zprávy"
#: ../js/ui/messageTray.js:1642
#: ../js/ui/messageTray.js:1639
msgid "Notification Settings"
msgstr "Nastavení upozornění"
#: ../js/ui/messageTray.js:1695
#: ../js/ui/messageTray.js:1692
msgid "Tray Menu"
msgstr "Nabídka lišty zpráv"
#: ../js/ui/messageTray.js:1912
#: ../js/ui/messageTray.js:1909
msgid "No Messages"
msgstr "Žádné zprávy"
#: ../js/ui/messageTray.js:1950
#: ../js/ui/messageTray.js:1947
msgid "Message Tray"
msgstr "Lišta zpráv"
#: ../js/ui/messageTray.js:2934
#: ../js/ui/messageTray.js:2931
msgid "System Information"
msgstr "Informace o systému"
#: ../js/ui/notificationDaemon.js:515 ../src/shell-app.c:399
#: ../js/ui/notificationDaemon.js:515 ../src/shell-app.c:397
msgctxt "program"
msgid "Unknown"
msgstr "Neznámé"
#: ../js/ui/overviewControls.js:483 ../js/ui/screenShield.js:151
#, javascript-format
msgid "%d new message"
msgid_plural "%d new messages"
msgstr[0] "%d nová zpráva"
@ -1179,7 +1152,7 @@ msgstr "Ukončit"
msgid "Activities"
msgstr "Činnosti"
#: ../js/ui/panel.js:905
#: ../js/ui/panel.js:903
msgid "Top Bar"
msgstr "Horní lišta"
@ -1202,26 +1175,25 @@ msgid "%A, %B %d"
msgstr "%A, %e. %B"
#: ../js/ui/screenShield.js:153
#, javascript-format
msgid "%d new notification"
msgid_plural "%d new notifications"
msgstr[0] "%d nové upozornění"
msgstr[1] "%d nová upozornění"
msgstr[2] "%d nových upozornění"
#: ../js/ui/screenShield.js:473 ../js/ui/status/system.js:342
#: ../js/ui/screenShield.js:472 ../js/ui/status/system.js:342
msgid "Lock"
msgstr "Uzamknout"
#: ../js/ui/screenShield.js:707
#: ../js/ui/screenShield.js:706
msgid "GNOME needs to lock the screen"
msgstr "GNOME potřebuje uzamknout obrazovku"
#: ../js/ui/screenShield.js:834 ../js/ui/screenShield.js:1301
#: ../js/ui/screenShield.js:833 ../js/ui/screenShield.js:1300
msgid "Unable to lock"
msgstr "Nelze uzamknout obrazovku"
#: ../js/ui/screenShield.js:835 ../js/ui/screenShield.js:1302
#: ../js/ui/screenShield.js:834 ../js/ui/screenShield.js:1301
msgid "Lock was blocked by an application"
msgstr "Zamknutí bylo zablokováno některou z aplikací"
@ -1301,32 +1273,26 @@ msgstr "Vysoký kontrast"
msgid "Large Text"
msgstr "Styl velkého textu"
#: ../js/ui/status/bluetooth.js:48
#: ../js/ui/status/bluetooth.js:45
msgid "Bluetooth"
msgstr "Bluetooth"
#: ../js/ui/status/bluetooth.js:50 ../js/ui/status/network.js:134
#: ../js/ui/status/network.js:1209 ../js/ui/status/rfkill.js:85
#: ../js/ui/status/rfkill.js:105
#: ../js/ui/status/bluetooth.js:47 ../js/ui/status/network.js:131
#: ../js/ui/status/network.js:1081 ../js/ui/status/rfkill.js:48
msgid "Turn Off"
msgstr "Vypnout"
#: ../js/ui/status/bluetooth.js:53
#: ../js/ui/status/bluetooth.js:50
msgid "Bluetooth Settings"
msgstr "Nastavení Bluetooth"
#: ../js/ui/status/bluetooth.js:100
#, javascript-format
#: ../js/ui/status/bluetooth.js:98
msgid "%d Connected Device"
msgid_plural "%d Connected Devices"
msgstr[0] "%d připojené zařízení"
msgstr[1] "%d připojená zařízení"
msgstr[2] "%d připojených zařízení"
#: ../js/ui/status/bluetooth.js:102 ../js/ui/status/network.js:1232
msgid "Not Connected"
msgstr "Nepřipojeno"
#: ../js/ui/status/brightness.js:44
msgid "Brightness"
msgstr "Jas"
@ -1335,131 +1301,99 @@ msgstr "Jas"
msgid "Show Keyboard Layout"
msgstr "Zobrazit rozložení klávesnice"
#: ../js/ui/status/network.js:73
#: ../js/ui/status/network.js:70
msgid "<unknown>"
msgstr "<neznámé>"
#: ../js/ui/status/network.js:223 ../js/ui/status/network.js:389
#: ../js/ui/status/network.js:1230
#: ../js/ui/status/network.js:220 ../js/ui/status/network.js:377
#: ../js/ui/status/network.js:1102
msgid "Off"
msgstr "Vypnuto"
#. Translators: this is for network devices that are physically present but are not
#. under NetworkManager's control (and thus cannot be used in the menu) */
#: ../js/ui/status/network.js:395
#: ../js/ui/status/network.js:383
msgid "unmanaged"
msgstr "nespravováno"
#: ../js/ui/status/network.js:397
#: ../js/ui/status/network.js:385
msgid "disconnecting..."
msgstr "odpojování…"
#: ../js/ui/status/network.js:403 ../js/ui/status/network.js:1284
#: ../js/ui/status/network.js:391 ../js/ui/status/network.js:1156
msgid "connecting..."
msgstr "připojování…"
#. Translators: this is for network connections that require some kind of key or password */
#: ../js/ui/status/network.js:406 ../js/ui/status/network.js:1287
#: ../js/ui/status/network.js:394 ../js/ui/status/network.js:1159
msgid "authentication required"
msgstr "je vyžadováno ověření"
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing */
#: ../js/ui/status/network.js:414
#: ../js/ui/status/network.js:402
msgid "firmware missing"
msgstr "nedostupný firmware"
#. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage */
#: ../js/ui/status/network.js:418
#: ../js/ui/status/network.js:406
msgid "unavailable"
msgstr "nedostupné"
#: ../js/ui/status/network.js:420 ../js/ui/status/network.js:1289
#: ../js/ui/status/network.js:408 ../js/ui/status/network.js:1161
msgid "connection failed"
msgstr "připojení selhalo"
#: ../js/ui/status/network.js:436
msgid "Wired Settings"
msgstr "Nastavení připojení po drátu"
#: ../js/ui/status/network.js:477 ../js/ui/status/network.js:563
#: ../js/ui/status/network.js:424 ../js/ui/status/network.js:510
msgid "Mobile Broadband Settings"
msgstr "Nastavení mobilní širokopásmové sítě"
#: ../js/ui/status/network.js:519 ../js/ui/status/network.js:1228
#: ../js/ui/status/network.js:466 ../js/ui/status/network.js:1100
msgid "Hardware Disabled"
msgstr "Hardware zakázán"
#: ../js/ui/status/network.js:578
msgid "Use as Internet connection"
msgstr "Použít jako připojení k Internetu"
#: ../js/ui/status/network.js:755
msgid "Airplane Mode is On"
msgstr "Režim „letadlo“ je zapnutý"
#: ../js/ui/status/network.js:756
msgid "Wi-Fi is disabled when airplane mode is on."
msgstr "Když je zapnutý režim „letadlo“, je WiFi zakázána."
#: ../js/ui/status/network.js:757
msgid "Turn Off Airplane Mode"
msgstr "Vypnout režim „letadlo“"
#: ../js/ui/status/network.js:766
msgid "Wi-Fi is Off"
msgstr "WiFi je vypnutá"
#: ../js/ui/status/network.js:767
msgid "Wi-Fi needs to be turned on in order to connect to a network."
msgstr "Abyste se připojili k síti, je zapotřebí zapnout WiFi."
#: ../js/ui/status/network.js:768
msgid "Turn On Wi-Fi"
msgstr "Zapnout WiFi"
#: ../js/ui/status/network.js:793
#: ../js/ui/status/network.js:692
msgid "Wi-Fi Networks"
msgstr "Sítě WiFi"
#: ../js/ui/status/network.js:795
#: ../js/ui/status/network.js:694
msgid "Select a network"
msgstr "Vyberte síť"
#: ../js/ui/status/network.js:824
#: ../js/ui/status/network.js:718
msgid "No Networks"
msgstr "Žádné sítě"
#: ../js/ui/status/network.js:845 ../js/ui/status/rfkill.js:103
msgid "Use hardware switch to turn off"
msgstr "K vypnutí použijte fyzický vypínač"
#: ../js/ui/status/network.js:1115
#: ../js/ui/status/network.js:987
msgid "Select Network"
msgstr "Vybrat síť"
#: ../js/ui/status/network.js:1121
#: ../js/ui/status/network.js:993
msgid "Wi-Fi Settings"
msgstr "Nastavení WiFi"
#: ../js/ui/status/network.js:1209
#: ../js/ui/status/network.js:1081
msgid "Turn On"
msgstr "Zapnout"
#: ../js/ui/status/network.js:1352
#: ../js/ui/status/network.js:1104
msgid "Not Connected"
msgstr "Nepřipojeno"
#: ../js/ui/status/network.js:1224
msgid "VPN"
msgstr "VPN"
#: ../js/ui/status/network.js:1495
#: ../js/ui/status/network.js:1364
msgid "Network Manager"
msgstr "Network Manager"
#: ../js/ui/status/network.js:1534
#: ../js/ui/status/network.js:1403
msgid "Connection failed"
msgstr "Připojení selhalo"
#: ../js/ui/status/network.js:1535
#: ../js/ui/status/network.js:1404
msgid "Activation of network connection failed"
msgstr "Aktivace síťového připojení selhala"
@ -1476,12 +1410,10 @@ msgid "Estimating…"
msgstr "Odhaduje se…"
#: ../js/ui/status/power.js:86
#, javascript-format
msgid "%d%02d Remaining (%d%%)"
msgstr "Zbývá %d%02d (%d%%)"
#: ../js/ui/status/power.js:91
#, javascript-format
msgid "%d%02d Until Full (%d%%)"
msgstr "%d%02d do nabití (%d%%)"
@ -1493,15 +1425,15 @@ msgstr "Záložní zdroj"
msgid "Battery"
msgstr "Baterie"
#: ../js/ui/status/rfkill.js:82
#: ../js/ui/status/rfkill.js:45
msgid "Airplane Mode"
msgstr "Režim „letadlo“"
#: ../js/ui/status/rfkill.js:84
#: ../js/ui/status/rfkill.js:47
msgid "On"
msgstr "Zapnuto"
#: ../js/ui/status/rfkill.js:88
#: ../js/ui/status/rfkill.js:51
msgid "Network Settings"
msgstr "Nastavení sítě"
@ -1554,7 +1486,6 @@ msgid "Search"
msgstr "Hledat"
#: ../js/ui/windowAttentionHandler.js:19
#, javascript-format
msgid "“%s” is ready"
msgstr "Připraveno „%s“"
@ -1574,7 +1505,6 @@ msgid "Keep Changes"
msgstr "Zachovat"
#: ../js/ui/windowManager.js:97
#, javascript-format
msgid "Settings changes will revert in %d second"
msgid_plural "Settings changes will revert in %d seconds"
msgstr[0] "Nastavení se obnoví na původní za %d sekundu"
@ -1625,7 +1555,7 @@ msgstr "Použít pro přihlašovací obrazovku zadaný režim, např. „gdm“.
msgid "List possible modes"
msgstr "Vypsat možné režimy"
#: ../src/shell-app.c:642
#: ../src/shell-app.c:640
#, c-format
msgid "Failed to launch “%s”"
msgstr "Nelze spustit „%s“"

452
po/de.po

File diff suppressed because it is too large Load Diff

313
po/el.po
View File

@ -7,16 +7,16 @@ msgstr ""
"Project-Id-Version: gnome-shell.po.master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2014-01-29 20:43+0000\n"
"PO-Revision-Date: 2014-01-30 20:22+0300\n"
"POT-Creation-Date: 2014-01-10 21:15+0000\n"
"PO-Revision-Date: 2014-01-11 14:55+0300\n"
"Last-Translator: Dimitris Spingos (Δημήτρης Σπίγγος) <dmtrs32@gmail.com>\n"
"Language-Team: team@lists.gnome.gr\n"
"Language-Team: www.gnome.gr\n"
"Language: el\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Virtaal 0.7.0\n"
"X-Generator: Virtaal 0.7.1\n"
"X-DamnedLies-Scope: partial\n"
"X-Poedit-SourceCharset: utf-8\n"
"X-Project-Style: gnome\n"
@ -111,18 +111,30 @@ msgstr ""
"περιοχή αγαπημένων."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:7
msgid "List of categories that should be displayed as folders"
msgstr "Η λίστα των κατηγοριών που πρέπει να εμφανίζονται ως φάκελοι"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:8
msgid ""
"Each category name in this list will be represented as folder in the "
"application view, rather than being displayed inline in the main view."
msgstr ""
"Το όνομα κάθε κατηγορίας σε αυτή τη λίστα θα αναπαριστάται ως φάκελος στην "
"προβολή εφαρμογής, αντί να εμφανίζεται ενσωματωμένο στην κύρια προβολή."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:9
msgid "History for command (Alt-F2) dialog"
msgstr "Ιστορικό του διαλόγου εντολών (Alt-F2)"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:8
#: ../data/org.gnome.shell.gschema.xml.in.in.h:10
msgid "History for the looking glass dialog"
msgstr "Ιστορικό του διαλόγου καθρέπτη"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:9
#: ../data/org.gnome.shell.gschema.xml.in.in.h:11
msgid "Always show the 'Log out' menu item in the user menu."
msgstr "Να εμφανίζεται πάντα το στοιχείο μενού 'Αποσύνδεση' στο μενού χρήστη."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:10
#: ../data/org.gnome.shell.gschema.xml.in.in.h:12
msgid ""
"This key overrides the automatic hiding of the 'Log out' menu item in single-"
"user, single-session situations."
@ -130,14 +142,14 @@ msgstr ""
"Αυτό το κλειδί υπερισχύει της αυτόματης απόκρυψης του στοιχείου μενού "
"'Αποσύνδεση' σε μεμονωμένο χρήστη, σε καταστάσεις μεμονωμένης συνεδρίας."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:11
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
msgid ""
"Whether to remember password for mounting encrypted or remote filesystems"
msgstr ""
"Εάν θα θυμάται τον κωδικό πρόσβασης για προσάρτηση κρυπτογραφημένων ή "
"απομακρυσμένων συστημάτων αρχείων"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:12
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
msgid ""
"The shell will request a password when an encrypted device or a remote "
"filesystem is mounted. If the password can be saved for future use a "
@ -150,71 +162,71 @@ msgstr ""
"μην απαιτείται ο κωδικός πρόσβασης'. Αυτό το κλειδί ορίζει την προεπιλεγμένη "
"κατάσταση του πλαισίου ελέγχου."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
msgid "Show the week date in the calendar"
msgstr "Εμφάνιση του αριθμού εβδομάδας στο ημερολόγιο"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
msgid "If true, display the ISO week date in the calendar."
msgstr ""
"Αν αληθές, εμφανίζει τον αριθμό εβδομάδας σύμφωνα με το ISO στο ημερολόγιο."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
msgid "Keybinding to open the application menu"
msgstr "Συνδυασμός πλήκτρων για το άνοιγμα του μενού εφαρμογών"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
msgid "Keybinding to open the application menu."
msgstr "Συνδυασμός πλήκτρων για το άνοιγμα του μενού εφαρμογών."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
msgid "Keybinding to open the \"Show Applications\" view"
msgstr "Συνδυασμός πλήκτρων για το άνοιγμα της προβολής \"Εμφάνιση εφαρμογών\""
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
msgid ""
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
msgstr ""
"Ο συνδυασμός πλήκτρων για το άνοιγμα της προβολής \"Εμφάνιση εφαρμογών\" της "
"επισκόπησης ενεργειών."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
msgid "Keybinding to open the overview"
msgstr "Συνδυασμός πλήκτρων για το άνοιγμα της επισκόπησης"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
msgid "Keybinding to open the Activities Overview."
msgstr "Συνδυασμός πλήκτρων για το άνοιγμα της επισκόπησης δραστηριοτήτων."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
msgid "Keybinding to toggle the visibility of the message tray"
msgstr "Συνδυασμός πλήκτρων για εναλλαγή ορατότητας της περιοχής ειδοποιήσεων"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
msgid "Keybinding to toggle the visibility of the message tray."
msgstr "Συνδυασμός πλήκτρων για εναλλαγή ορατότητας της περιοχής ειδοποιήσεων."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
msgid "Keybinding to focus the active notification"
msgstr "Συνδυασμός πλήκτρων για εστίαση της ενεργής ειδοποίησης"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
msgid "Keybinding to focus the active notification."
msgstr "Συνδυασμός πλήκτρων για εστίαση της ενεργής ειδοποίησης."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
msgid "Which keyboard to use"
msgstr "Ποιο πληκτρολόγιο θα χρησιμοποιηθεί"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
msgid "The type of keyboard to use."
msgstr "Ο τύπος του πληκτρολογίου που θα χρησιμοποιηθεί."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
msgid "The application icon mode."
msgstr "Η κατάσταση εικονιδίου εφαρμογής."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
msgid ""
"Configures how the windows are shown in the switcher. Valid possibilities "
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
@ -225,22 +237,22 @@ msgstr ""
"παραθύρου), 'app-icon-only' (εμφανίζει μόνο το εικονίδιο της εφαρμογής) ή "
"'both' - και τα δύο."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
msgid "Attach modal dialog to the parent window"
msgstr "Προσάρτηση αποκλειστικού διαλόγου στο γονικό παράθυρο"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
msgid ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgstr ""
"Αυτό το κλειδί υπερισχύει του κλειδιού στο org.gnome.mutter όταν εκτελείται "
"το GNOME Shell."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
msgid "Arrangement of buttons on the titlebar"
msgstr "Διάταξη των κουμπιών στη γραμμή τίτλου"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34
msgid ""
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
"GNOME Shell."
@ -248,21 +260,21 @@ msgstr ""
"Αυτό το κλειδί υπερισχύει του κλειδιού στο org.gnome.desktop.wm.preferences "
"όταν εκτελείται το GNOME Shell."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr ""
"Ενεργοποίηση της προσάρτηση άκρων, όταν αφήνετε παράθυρα στις άκρες της "
"οθόνης"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
msgid "Workspaces are managed dynamically"
msgstr "Οι χώροι εργασίας διαχειρίζονται δυναμικά"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
msgid "Workspaces only on primary monitor"
msgstr "Χώροι εργασίας μόνο στην κύρια οθόνη"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38
msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr ""
"Καθυστέρηση εστίασης αλλαγών στην κατάσταση ποντικιού μέχρι να σταματήσει να "
@ -288,7 +300,7 @@ msgstr ""
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:136
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:357
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/network.js:757
#: ../js/ui/status/network.js:726
msgid "Cancel"
msgstr "Ακύρωση"
@ -346,30 +358,30 @@ msgstr "Δεν ήταν δυνατό να επεξεργαστεί η εντολ
#: ../js/misc/util.js:156
#, javascript-format
msgid "Execution of %s failed:"
msgstr "Η εκτέλεση του %s απέτυχε:"
msgid "Execution of '%s' failed:"
msgstr "Η εκτέλεση του '%s' απέτυχε:"
#: ../js/ui/appDisplay.js:633
#: ../js/ui/appDisplay.js:600
msgid "Frequently used applications will appear here"
msgstr "Οι συχνά χρησιμοποιούμενες εφαρμογές θα εμφανιστούν εδώ"
#: ../js/ui/appDisplay.js:744
#: ../js/ui/appDisplay.js:719
msgid "Frequent"
msgstr "Συχνά"
#: ../js/ui/appDisplay.js:751
#: ../js/ui/appDisplay.js:726
msgid "All"
msgstr "Όλα"
#: ../js/ui/appDisplay.js:1558
#: ../js/ui/appDisplay.js:1546
msgid "New Window"
msgstr "Νέο παράθυρο"
#: ../js/ui/appDisplay.js:1580 ../js/ui/dash.js:285
#: ../js/ui/appDisplay.js:1549 ../js/ui/dash.js:285
msgid "Remove from Favorites"
msgstr "Αφαίρεση από τα αγαπημένα"
#: ../js/ui/appDisplay.js:1586
#: ../js/ui/appDisplay.js:1550
msgid "Add to Favorites"
msgstr "Προσθήκη στα αγαπημένα"
@ -583,7 +595,7 @@ msgid "Type again:"
msgstr "Πληκτρολογήστε ξανά:"
#: ../js/ui/components/networkAgent.js:131 ../js/ui/status/network.js:132
#: ../js/ui/status/network.js:294 ../js/ui/status/network.js:760
#: ../js/ui/status/network.js:295 ../js/ui/status/network.js:729
msgid "Connect"
msgstr "Σύνδεση"
@ -619,10 +631,10 @@ msgstr "Απαιτείται πιστοποίηση από το ασύρματο
#, javascript-format
msgid ""
"Passwords or encryption keys are required to access the wireless network "
"%s."
"'%s'."
msgstr ""
"Κωδικοί πρόσβασης ή κλειδιά κρυπτογράφησης απαιτούνται για πρόσβαση στο "
"ασύρματο δίκτυο %s."
"Κωδικοί ή κλειδιά κρυπτογράφησης απαιτούνται για πρόσβαση στο ασύρματο "
"δίκτυο '%s'."
#: ../js/ui/components/networkAgent.js:316
msgid "Wired 802.1X authentication"
@ -654,8 +666,8 @@ msgstr "Κωδικός δικτύου κινητής ευρυζωνικής σύ
#: ../js/ui/components/networkAgent.js:339
#, javascript-format
msgid "A password is required to connect to %s."
msgstr "Απαιτείται κωδικός πρόσβασης για σύνδεση στο %s."
msgid "A password is required to connect to '%s'."
msgstr "Απαιτείται κωδικός για σύνδεση στο '%s'."
#: ../js/ui/components/polkitAgent.js:54
msgid "Authentication Required"
@ -702,35 +714,35 @@ msgid "Mute"
msgstr "Σίγαση"
#. Translators: this is the word "Yesterday" followed by a time string. i.e. "Yesterday, 14:30"*/
#: ../js/ui/components/telepathyClient.js:952
#: ../js/ui/components/telepathyClient.js:941
msgid "<b>Yesterday</b>, <b>%H:%M</b>"
msgstr "<b>Χθες</b>, <b>%Ω:%Λ</b>"
#. Translators: this is the week day name followed by a time string. i.e. "Monday, 14:30*/
#: ../js/ui/components/telepathyClient.js:958
#: ../js/ui/components/telepathyClient.js:947
msgid "<b>%A</b>, <b>%H:%M</b>"
msgstr "<b>%ΗΗΗΗ</b>, <b>%Ω:%Λ</b>"
#. Translators: this is the month name and day number followed by a time string. i.e. "May 25, 14:30"*/
#: ../js/ui/components/telepathyClient.js:963
#: ../js/ui/components/telepathyClient.js:952
msgid "<b>%B</b> <b>%d</b>, <b>%H:%M</b>"
msgstr "<b>%Η</b> <b>%ΜΜΜΜ</b>, <b>%Ω:%Λ</b>"
#. Translators: this is the month name, day number, year number followed by a time string. i.e. "May 25 2012, 14:30"*/
#: ../js/ui/components/telepathyClient.js:967
#: ../js/ui/components/telepathyClient.js:956
msgid "<b>%B</b> <b>%d</b> <b>%Y</b>, <b>%H:%M</b> "
msgstr "<b>%Η</b> <b>%ΜΜΜΜ</b> <b>%ΕΕΕΕ</b>, <b>%Ω:%Λ</b> "
#. Translators: this is the other person changing their old IM name to their new
#. IM name. */
#: ../js/ui/components/telepathyClient.js:998
#: ../js/ui/components/telepathyClient.js:987
#, javascript-format
msgid "%s is now known as %s"
msgstr "Ο %s είναι τώρα γνωστός ως %s"
#. translators: argument is a room name like
#. * room@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1101
#: ../js/ui/components/telepathyClient.js:1090
#, javascript-format
msgid "Invitation to %s"
msgstr "Πρόσκληση στο %s"
@ -738,38 +750,38 @@ msgstr "Πρόσκληση στο %s"
#. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example. */
#: ../js/ui/components/telepathyClient.js:1109
#: ../js/ui/components/telepathyClient.js:1098
#, javascript-format
msgid "%s is inviting you to join %s"
msgstr "Ο %s σας προσκαλεί να μπείτε στο %s"
#: ../js/ui/components/telepathyClient.js:1111
#: ../js/ui/components/telepathyClient.js:1146
#: ../js/ui/components/telepathyClient.js:1180
#: ../js/ui/components/telepathyClient.js:1237
#: ../js/ui/components/telepathyClient.js:1100
#: ../js/ui/components/telepathyClient.js:1135
#: ../js/ui/components/telepathyClient.js:1169
#: ../js/ui/components/telepathyClient.js:1226
msgid "Decline"
msgstr "Απόρριψη"
#: ../js/ui/components/telepathyClient.js:1117
#: ../js/ui/components/telepathyClient.js:1186
#: ../js/ui/components/telepathyClient.js:1242
#: ../js/ui/components/telepathyClient.js:1106
#: ../js/ui/components/telepathyClient.js:1175
#: ../js/ui/components/telepathyClient.js:1231
msgid "Accept"
msgstr "Αποδοχή"
#. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1136
#: ../js/ui/components/telepathyClient.js:1125
#, javascript-format
msgid "Video call from %s"
msgstr "Βιντεοκλήση από %s"
#. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1139
#: ../js/ui/components/telepathyClient.js:1128
#, javascript-format
msgid "Call from %s"
msgstr "Κλήση από %s"
#. translators: this is a button label (verb), not a noun */
#: ../js/ui/components/telepathyClient.js:1153
#: ../js/ui/components/telepathyClient.js:1142
msgid "Answer"
msgstr "Απάντηση"
@ -778,112 +790,112 @@ msgstr "Απάντηση"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#. */
#: ../js/ui/components/telepathyClient.js:1174
#: ../js/ui/components/telepathyClient.js:1163
#, javascript-format
msgid "%s is sending you %s"
msgstr "Ο %s σας στέλνει το %s"
#. To translators: The parameter is the contact's alias */
#: ../js/ui/components/telepathyClient.js:1203
#: ../js/ui/components/telepathyClient.js:1192
#, javascript-format
msgid "%s would like permission to see when you are online"
msgstr "Ο %s ζητάει άδεια για να βλέπει πότε είστε συνδεδεμένος"
#: ../js/ui/components/telepathyClient.js:1288
#: ../js/ui/components/telepathyClient.js:1277
msgid "Network error"
msgstr "Σφάλμα δικτύου"
#: ../js/ui/components/telepathyClient.js:1290
#: ../js/ui/components/telepathyClient.js:1279
msgid "Authentication failed"
msgstr "Η πιστοποίηση απέτυχε"
#: ../js/ui/components/telepathyClient.js:1292
#: ../js/ui/components/telepathyClient.js:1281
msgid "Encryption error"
msgstr "Σφάλμα κρυπτογράφησης"
#: ../js/ui/components/telepathyClient.js:1294
#: ../js/ui/components/telepathyClient.js:1283
msgid "Certificate not provided"
msgstr "Δεν υπάρχει πιστοποιητικό"
#: ../js/ui/components/telepathyClient.js:1296
#: ../js/ui/components/telepathyClient.js:1285
msgid "Certificate untrusted"
msgstr "Μη έμπιστο πιστοποιητικό"
#: ../js/ui/components/telepathyClient.js:1298
#: ../js/ui/components/telepathyClient.js:1287
msgid "Certificate expired"
msgstr "Ληγμένο πιστοποιητικό"
#: ../js/ui/components/telepathyClient.js:1300
#: ../js/ui/components/telepathyClient.js:1289
msgid "Certificate not activated"
msgstr "Το πιστοποιητικό δεν ενεργοποιήθηκε"
#: ../js/ui/components/telepathyClient.js:1302
#: ../js/ui/components/telepathyClient.js:1291
msgid "Certificate hostname mismatch"
msgstr "Αναντιστοιχία ονόματος κεντρικού υπολογιστή στο πιστοποιητικό"
#: ../js/ui/components/telepathyClient.js:1304
#: ../js/ui/components/telepathyClient.js:1293
msgid "Certificate fingerprint mismatch"
msgstr "Αναντιστοιχία αποτυπώματος πιστοποιητικού"
#: ../js/ui/components/telepathyClient.js:1306
#: ../js/ui/components/telepathyClient.js:1295
msgid "Certificate self-signed"
msgstr "Αυτο-υπογεγραμμένο πιστοποιητικό"
#: ../js/ui/components/telepathyClient.js:1308
#: ../js/ui/components/telepathyClient.js:1297
msgid "Status is set to offline"
msgstr "Η κατάσταση έχει ορισθεί σε εκτός σύνδεσης"
#: ../js/ui/components/telepathyClient.js:1310
#: ../js/ui/components/telepathyClient.js:1299
msgid "Encryption is not available"
msgstr "Δεν υπάρχει διαθέσιμη κρυπτογράφηση"
#: ../js/ui/components/telepathyClient.js:1312
#: ../js/ui/components/telepathyClient.js:1301
msgid "Certificate is invalid"
msgstr "Το πιστοποιητικό είναι άκυρο"
#: ../js/ui/components/telepathyClient.js:1314
#: ../js/ui/components/telepathyClient.js:1303
msgid "Connection has been refused"
msgstr "Άρνηση σύνδεσης"
#: ../js/ui/components/telepathyClient.js:1316
#: ../js/ui/components/telepathyClient.js:1305
msgid "Connection can't be established"
msgstr "Δεν είναι δυνατή η σύνδεση"
#: ../js/ui/components/telepathyClient.js:1318
#: ../js/ui/components/telepathyClient.js:1307
msgid "Connection has been lost"
msgstr "Η σύνδεση χάθηκε"
#: ../js/ui/components/telepathyClient.js:1320
#: ../js/ui/components/telepathyClient.js:1309
msgid "This account is already connected to the server"
msgstr "Αυτός ο λογαριασμός είναι ήδη συνδεδεμένος στον εξυπηρετητή"
#: ../js/ui/components/telepathyClient.js:1322
#: ../js/ui/components/telepathyClient.js:1311
msgid ""
"Connection has been replaced by a new connection using the same resource"
msgstr ""
"Η σύνδεση έχει αντικατασταθεί από μια νέα σύνδεση που χρησιμοποιεί τον ίδιο "
"πόρο"
#: ../js/ui/components/telepathyClient.js:1324
#: ../js/ui/components/telepathyClient.js:1313
msgid "The account already exists on the server"
msgstr "Ο λογαριασμός υπάρχει ήδη στον εξυπηρετητή"
#: ../js/ui/components/telepathyClient.js:1326
#: ../js/ui/components/telepathyClient.js:1315
msgid "Server is currently too busy to handle the connection"
msgstr "Ο εξυπηρετητής είναι πολύ απασχολημένος ώστε να χειριστεί τη σύνδεση"
#: ../js/ui/components/telepathyClient.js:1328
#: ../js/ui/components/telepathyClient.js:1317
msgid "Certificate has been revoked"
msgstr "Το πιστοποιητικό έχει ανακληθεί"
#: ../js/ui/components/telepathyClient.js:1330
#: ../js/ui/components/telepathyClient.js:1319
msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr ""
"Το πιστοποιητικό χρησιμοποιεί ένα μη ασφαλή αλγόριθμο αποτυπώματος ή είναι "
"αδύναμο κρυπτογραφικά"
#: ../js/ui/components/telepathyClient.js:1332
#: ../js/ui/components/telepathyClient.js:1321
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
@ -892,22 +904,22 @@ msgstr ""
"πιστοποιητικού του εξυπηρετητή υπερβαίνει τα όρια που επιτρέπει η βιβλιοθήκη "
"κρυπτογραφίας"
#: ../js/ui/components/telepathyClient.js:1334
#: ../js/ui/components/telepathyClient.js:1323
msgid "Internal error"
msgstr "Εσωτερικό σφάλμα"
#. translators: argument is the account name, like
#. * name@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1344
#: ../js/ui/components/telepathyClient.js:1333
#, javascript-format
msgid "Unable to connect to %s"
msgstr "Αδυναμία σύνδεσης με %s"
#: ../js/ui/components/telepathyClient.js:1349
#: ../js/ui/components/telepathyClient.js:1338
msgid "View account"
msgstr "Προβολή λογαριασμού"
#: ../js/ui/components/telepathyClient.js:1381
#: ../js/ui/components/telepathyClient.js:1370
msgid "Unknown reason"
msgstr "Άγνωστος λόγος"
@ -1055,8 +1067,8 @@ msgstr "Εγκατάσταση"
#: ../js/ui/extensionDownloader.js:204
#, javascript-format
msgid "Download and install %s from extensions.gnome.org?"
msgstr "Λήψη και εγκατάσταση του “%s από το extensions.gnome.org;"
msgid "Download and install '%s' from extensions.gnome.org?"
msgstr "Λήψη και εγκατάσταση '%s' από το extensions.gnome.org;"
#: ../js/ui/keyboard.js:641 ../js/ui/status/keyboard.js:335
msgid "Keyboard"
@ -1088,7 +1100,7 @@ msgstr "Ενεργοποιημένο"
#. because it's disabled by rfkill (airplane mode) */
#. translators:
#. * The device has been disabled
#: ../js/ui/lookingGlass.js:717 ../js/ui/status/network.js:518
#: ../js/ui/lookingGlass.js:717 ../js/ui/status/network.js:472
#: ../src/gvc/gvc-mixer-control.c:1830
msgid "Disabled"
msgstr "Απενεργοποιημένο"
@ -1113,48 +1125,48 @@ msgstr "Προβολή πηγής"
msgid "Web Page"
msgstr "Ιστοσελίδα"
#: ../js/ui/messageTray.js:1312
#: ../js/ui/messageTray.js:1310
msgid "Open"
msgstr "Άνοιγμα"
#: ../js/ui/messageTray.js:1319
#: ../js/ui/messageTray.js:1317
msgid "Remove"
msgstr "Αφαίρεση"
#: ../js/ui/messageTray.js:1616
#: ../js/ui/messageTray.js:1614
msgid "Notifications"
msgstr "Ειδοποιήσεις"
#: ../js/ui/messageTray.js:1623
#: ../js/ui/messageTray.js:1621
msgid "Clear Messages"
msgstr "Καθαρισμός μηνυμάτων"
#: ../js/ui/messageTray.js:1642
#: ../js/ui/messageTray.js:1640
msgid "Notification Settings"
msgstr "Ρυθμίσεις ειδοποιήσεων"
#: ../js/ui/messageTray.js:1695
#: ../js/ui/messageTray.js:1693
msgid "Tray Menu"
msgstr "Μενού περιοχής ειδοποιήσεων"
#: ../js/ui/messageTray.js:1912
#: ../js/ui/messageTray.js:1910
msgid "No Messages"
msgstr "Κανένα μήνυμα"
#: ../js/ui/messageTray.js:1950
#: ../js/ui/messageTray.js:1948
msgid "Message Tray"
msgstr "Περιοχή ειδοποιήσεων μηνυμάτων"
#: ../js/ui/messageTray.js:2934
#: ../js/ui/messageTray.js:2931
msgid "System Information"
msgstr "Πληροφορίες συστήματος"
#: ../js/ui/notificationDaemon.js:515 ../src/shell-app.c:399
#: ../js/ui/notificationDaemon.js:515 ../src/shell-app.c:397
msgctxt "program"
msgid "Unknown"
msgstr "Άγνωστο"
#: ../js/ui/overviewControls.js:483 ../js/ui/screenShield.js:151
#: ../js/ui/overviewControls.js:483 ../js/ui/screenShield.js:153
#, javascript-format
msgid "%d new message"
msgid_plural "%d new messages"
@ -1187,7 +1199,7 @@ msgstr "Έξοδος"
msgid "Activities"
msgstr "Δραστηριότητες"
#: ../js/ui/panel.js:905
#: ../js/ui/panel.js:903
msgid "Top Bar"
msgstr "Πάνω μπάρα"
@ -1205,30 +1217,30 @@ msgstr "Κλείσιμο"
#. Translators: This is a time format for a date in
#. long format */
#: ../js/ui/screenShield.js:88
#: ../js/ui/screenShield.js:89
msgid "%A, %B %d"
msgstr "%A, %B %d"
#: ../js/ui/screenShield.js:153
#: ../js/ui/screenShield.js:155
#, javascript-format
msgid "%d new notification"
msgid_plural "%d new notifications"
msgstr[0] "%d νέα ειδοποίηση"
msgstr[1] "%d νέες ειδοποιήσεις"
#: ../js/ui/screenShield.js:473 ../js/ui/status/system.js:342
#: ../js/ui/screenShield.js:474 ../js/ui/status/system.js:342
msgid "Lock"
msgstr "Κλείδωμα"
#: ../js/ui/screenShield.js:707
#: ../js/ui/screenShield.js:708
msgid "GNOME needs to lock the screen"
msgstr "Το GNOME χρειάζεται να κλειδώσει την οθόνη"
#: ../js/ui/screenShield.js:834 ../js/ui/screenShield.js:1301
#: ../js/ui/screenShield.js:835 ../js/ui/screenShield.js:1302
msgid "Unable to lock"
msgstr "Αδυναμία κλειδώματος"
#: ../js/ui/screenShield.js:835 ../js/ui/screenShield.js:1302
#: ../js/ui/screenShield.js:836 ../js/ui/screenShield.js:1303
msgid "Lock was blocked by an application"
msgstr "Το κλείδωμα εμποδίστηκε από μια εφαρμογή"
@ -1313,7 +1325,7 @@ msgid "Bluetooth"
msgstr "Bluetooth"
#: ../js/ui/status/bluetooth.js:47 ../js/ui/status/network.js:132
#: ../js/ui/status/network.js:1108 ../js/ui/status/rfkill.js:48
#: ../js/ui/status/network.js:1083 ../js/ui/status/rfkill.js:48
msgid "Turn Off"
msgstr "Σβήσιμο"
@ -1340,99 +1352,95 @@ msgstr "Εμφάνιση διάταξης πληκτρολογίου"
msgid "<unknown>"
msgstr "<άγνωστο>"
#: ../js/ui/status/network.js:221 ../js/ui/status/network.js:383
#: ../js/ui/status/network.js:1129
#: ../js/ui/status/network.js:222 ../js/ui/status/network.js:379
#: ../js/ui/status/network.js:1104
msgid "Off"
msgstr "Εκτός σύνδεσης"
#. Translators: this is for network devices that are physically present but are not
#. under NetworkManager's control (and thus cannot be used in the menu) */
#: ../js/ui/status/network.js:389
#: ../js/ui/status/network.js:385
msgid "unmanaged"
msgstr "μη διαχειριζόμενες"
#: ../js/ui/status/network.js:391
#: ../js/ui/status/network.js:387
msgid "disconnecting..."
msgstr "αποσύνδεση..."
#: ../js/ui/status/network.js:397 ../js/ui/status/network.js:1183
#: ../js/ui/status/network.js:393 ../js/ui/status/network.js:1158
msgid "connecting..."
msgstr "σύνδεση..."
#. Translators: this is for network connections that require some kind of key or password */
#: ../js/ui/status/network.js:400 ../js/ui/status/network.js:1186
#: ../js/ui/status/network.js:396 ../js/ui/status/network.js:1161
msgid "authentication required"
msgstr "απαιτείται πιστοποίηση"
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing */
#: ../js/ui/status/network.js:408
#: ../js/ui/status/network.js:404
msgid "firmware missing"
msgstr "έλλειψη firmware"
#. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage */
#: ../js/ui/status/network.js:412
#: ../js/ui/status/network.js:408
msgid "unavailable"
msgstr "μη διαθέσιμο"
#: ../js/ui/status/network.js:414 ../js/ui/status/network.js:1188
#: ../js/ui/status/network.js:410 ../js/ui/status/network.js:1163
msgid "connection failed"
msgstr "αποτυχία σύνδεσης"
#: ../js/ui/status/network.js:430
msgid "Wired Settings"
msgstr "Ενσύρματες ρυθμίσεις"
#: ../js/ui/status/network.js:472 ../js/ui/status/network.js:558
#: ../js/ui/status/network.js:426 ../js/ui/status/network.js:512
msgid "Mobile Broadband Settings"
msgstr "Ρυθμίσεις Κινήτης Ευρυζωνικής"
#: ../js/ui/status/network.js:514 ../js/ui/status/network.js:1127
#: ../js/ui/status/network.js:468 ../js/ui/status/network.js:1102
msgid "Hardware Disabled"
msgstr "Το Υλικό Απενεργοποιήθηκε"
#: ../js/ui/status/network.js:725
#: ../js/ui/status/network.js:694
msgid "Wi-Fi Networks"
msgstr "Δίκτυα Wi-Fi"
#: ../js/ui/status/network.js:727
#: ../js/ui/status/network.js:696
msgid "Select a network"
msgstr "Επιλογή δικτύου"
#: ../js/ui/status/network.js:751
#: ../js/ui/status/network.js:720
msgid "No Networks"
msgstr "Χωρίς δίκτυα"
#: ../js/ui/status/network.js:1014
#: ../js/ui/status/network.js:989
msgid "Select Network"
msgstr "Επιλογή δικτύου"
#: ../js/ui/status/network.js:1020
#: ../js/ui/status/network.js:995
msgid "Wi-Fi Settings"
msgstr "Ρυθμίσεις Wi-Fi"
#: ../js/ui/status/network.js:1108
#: ../js/ui/status/network.js:1083
msgid "Turn On"
msgstr "Ενεργοποίηση"
#: ../js/ui/status/network.js:1131
#: ../js/ui/status/network.js:1106
msgid "Not Connected"
msgstr "Χωρίς σύνδεση"
#: ../js/ui/status/network.js:1251
#: ../js/ui/status/network.js:1226
msgid "VPN"
msgstr "VPN"
#: ../js/ui/status/network.js:1394
#: ../js/ui/status/network.js:1366
msgid "Network Manager"
msgstr "Διαχειριστής δικτύου"
#: ../js/ui/status/network.js:1433
#: ../js/ui/status/network.js:1405
msgid "Connection failed"
msgstr "Αποτυχία σύνδεσης"
#: ../js/ui/status/network.js:1434
#: ../js/ui/status/network.js:1406
msgid "Activation of network connection failed"
msgstr "Απέτυχε η ενεργοποίηση της σύνδεσης δικτύου"
@ -1528,8 +1536,8 @@ msgstr "Αναζήτηση"
#: ../js/ui/windowAttentionHandler.js:19
#, javascript-format
msgid "%s is ready"
msgstr "Το %s είναι έτοιμο"
msgid "'%s' is ready"
msgstr "Το '%s' είναι έτοιμο"
#: ../js/ui/windowManager.js:56
msgid "Do you want to keep these display settings?"
@ -1598,10 +1606,10 @@ msgstr ""
msgid "List possible modes"
msgstr "Λίστα πιθανών καταστάσεων λειτουργίας"
#: ../src/shell-app.c:642
#: ../src/shell-app.c:640
#, c-format
msgid "Failed to launch %s"
msgstr "Αποτυχία εκκίνησης του “%s"
msgid "Failed to launch '%s'"
msgstr "Αποτυχία εκκίνησης '%s'"
#: ../src/shell-keyring-prompt.c:714
msgid "Passwords do not match."
@ -1615,17 +1623,6 @@ msgstr "Ο κωδικός δεν μπορεί να είναι κενός"
msgid "Authentication dialog was dismissed by the user"
msgstr "Το παράθυρο πιστοποίησης έκλεισε από τον χρήστη"
#~ msgid "List of categories that should be displayed as folders"
#~ msgstr "Η λίστα των κατηγοριών που πρέπει να εμφανίζονται ως φάκελοι"
#~ msgid ""
#~ "Each category name in this list will be represented as folder in the "
#~ "application view, rather than being displayed inline in the main view."
#~ msgstr ""
#~ "Το όνομα κάθε κατηγορίας σε αυτή τη λίστα θα αναπαριστάται ως φάκελος "
#~ "στην προβολή εφαρμογής, αντί να εμφανίζεται ενσωματωμένο στην κύρια "
#~ "προβολή."
#~ msgid "Authorization request from %s"
#~ msgstr "Αίτηση εξουσιοδότησης από %s"

243
po/es.po
View File

@ -10,8 +10,8 @@ msgstr ""
"Project-Id-Version: gnome-shell.master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2014-02-07 08:57+0000\n"
"PO-Revision-Date: 2014-02-07 10:54+0100\n"
"POT-Creation-Date: 2014-01-19 15:04+0000\n"
"PO-Revision-Date: 2014-01-20 12:32+0100\n"
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
"Language-Team: Español <gnome-es-list@gnome.org>\n"
"Language: es\n"
@ -279,7 +279,7 @@ msgstr ""
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:136
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:357
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/network.js:857
#: ../js/ui/status/network.js:724
msgid "Cancel"
msgstr "Cancelar"
@ -335,30 +335,31 @@ msgid "Could not parse command:"
msgstr "No se pudo analizar el comando:"
#: ../js/misc/util.js:156
#| msgid "Execution of '%s' failed:"
msgid "Execution of “%s” failed:"
msgstr "Falló la ejecución de «%s»:"
#: ../js/ui/appDisplay.js:633
#: ../js/ui/appDisplay.js:543
msgid "Frequently used applications will appear here"
msgstr "Las aplicaciones usadas frecuentemente aparecerán aquí"
#: ../js/ui/appDisplay.js:744
#: ../js/ui/appDisplay.js:663
msgid "Frequent"
msgstr "Frecuentes"
#: ../js/ui/appDisplay.js:751
#: ../js/ui/appDisplay.js:670
msgid "All"
msgstr "Todas"
#: ../js/ui/appDisplay.js:1558
#: ../js/ui/appDisplay.js:1501
msgid "New Window"
msgstr "Ventana nueva"
#: ../js/ui/appDisplay.js:1580 ../js/ui/dash.js:285
#: ../js/ui/appDisplay.js:1504 ../js/ui/dash.js:285
msgid "Remove from Favorites"
msgstr "Quitar de los favoritos"
#: ../js/ui/appDisplay.js:1586
#: ../js/ui/appDisplay.js:1505
msgid "Add to Favorites"
msgstr "Añadir a los favoritos"
@ -568,8 +569,8 @@ msgstr "Contraseña:"
msgid "Type again:"
msgstr "Escriba de nuevo:"
#: ../js/ui/components/networkAgent.js:131 ../js/ui/status/network.js:227
#: ../js/ui/status/network.js:300 ../js/ui/status/network.js:860
#: ../js/ui/components/networkAgent.js:131 ../js/ui/status/network.js:131
#: ../js/ui/status/network.js:293 ../js/ui/status/network.js:727
msgid "Connect"
msgstr "Conectar"
@ -602,6 +603,9 @@ msgid "Authentication required by wireless network"
msgstr "La red inalámbrica requiere autenticación"
#: ../js/ui/components/networkAgent.js:312
#| msgid ""
#| "Passwords or encryption keys are required to access the wireless network "
#| "'%s'."
msgid ""
"Passwords or encryption keys are required to access the wireless network "
"“%s”."
@ -638,6 +642,7 @@ msgid "Mobile broadband network password"
msgstr "Contraseña de la red de banda ancha móvil"
#: ../js/ui/components/networkAgent.js:339
#| msgid "A password is required to connect to '%s'."
msgid "A password is required to connect to “%s”."
msgstr "Se requiere una contraseña para conectarse a «%s»."
@ -686,69 +691,69 @@ msgid "Mute"
msgstr "Silenciar"
#. Translators: this is the word "Yesterday" followed by a time string. i.e. "Yesterday, 14:30"*/
#: ../js/ui/components/telepathyClient.js:952
#: ../js/ui/components/telepathyClient.js:941
msgid "<b>Yesterday</b>, <b>%H:%M</b>"
msgstr "<b>Ayer</b>, <b>%H:%M</b>"
#. Translators: this is the week day name followed by a time string. i.e. "Monday, 14:30*/
#: ../js/ui/components/telepathyClient.js:958
#: ../js/ui/components/telepathyClient.js:947
msgid "<b>%A</b>, <b>%H:%M</b>"
msgstr "<b>%A</b>, <b>%H:%M</b>"
#. Translators: this is the month name and day number followed by a time string. i.e. "May 25, 14:30"*/
#: ../js/ui/components/telepathyClient.js:963
#: ../js/ui/components/telepathyClient.js:952
msgid "<b>%B</b> <b>%d</b>, <b>%H:%M</b>"
msgstr "<b>%d</b> de <b>%B</b>, <b>%H:%M</b>"
#. Translators: this is the month name, day number, year number followed by a time string. i.e. "May 25 2012, 14:30"*/
#: ../js/ui/components/telepathyClient.js:967
#: ../js/ui/components/telepathyClient.js:956
msgid "<b>%B</b> <b>%d</b> <b>%Y</b>, <b>%H:%M</b> "
msgstr "<b>%d</b> de <b>%B</b> <b>%Y</b>, <b>%H:%M</b> "
#. Translators: this is the other person changing their old IM name to their new
#. IM name. */
#: ../js/ui/components/telepathyClient.js:998
#: ../js/ui/components/telepathyClient.js:987
msgid "%s is now known as %s"
msgstr "Ahora %s se llama %s"
#. translators: argument is a room name like
#. * room@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1101
#: ../js/ui/components/telepathyClient.js:1090
msgid "Invitation to %s"
msgstr "Invitación a %s"
#. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example. */
#: ../js/ui/components/telepathyClient.js:1109
#: ../js/ui/components/telepathyClient.js:1098
msgid "%s is inviting you to join %s"
msgstr "%s le está invitando a unirse a %s"
#: ../js/ui/components/telepathyClient.js:1111
#: ../js/ui/components/telepathyClient.js:1146
#: ../js/ui/components/telepathyClient.js:1180
#: ../js/ui/components/telepathyClient.js:1237
#: ../js/ui/components/telepathyClient.js:1100
#: ../js/ui/components/telepathyClient.js:1135
#: ../js/ui/components/telepathyClient.js:1169
#: ../js/ui/components/telepathyClient.js:1226
msgid "Decline"
msgstr "Rechazar"
#: ../js/ui/components/telepathyClient.js:1117
#: ../js/ui/components/telepathyClient.js:1186
#: ../js/ui/components/telepathyClient.js:1242
#: ../js/ui/components/telepathyClient.js:1106
#: ../js/ui/components/telepathyClient.js:1175
#: ../js/ui/components/telepathyClient.js:1231
msgid "Accept"
msgstr "Aceptar"
#. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1136
#: ../js/ui/components/telepathyClient.js:1125
msgid "Video call from %s"
msgstr "Videollamada de %s"
#. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1139
#: ../js/ui/components/telepathyClient.js:1128
msgid "Call from %s"
msgstr "Llamada de %s"
#. translators: this is a button label (verb), not a noun */
#: ../js/ui/components/telepathyClient.js:1153
#: ../js/ui/components/telepathyClient.js:1142
msgid "Answer"
msgstr "Responder"
@ -757,110 +762,110 @@ msgstr "Responder"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#. */
#: ../js/ui/components/telepathyClient.js:1174
#: ../js/ui/components/telepathyClient.js:1163
msgid "%s is sending you %s"
msgstr "%s le está enviando %s"
#. To translators: The parameter is the contact's alias */
#: ../js/ui/components/telepathyClient.js:1203
#: ../js/ui/components/telepathyClient.js:1192
msgid "%s would like permission to see when you are online"
msgstr "%s solicita permiso para ver cuándo está en línea"
#: ../js/ui/components/telepathyClient.js:1288
#: ../js/ui/components/telepathyClient.js:1277
msgid "Network error"
msgstr "Error de la red"
#: ../js/ui/components/telepathyClient.js:1290
#: ../js/ui/components/telepathyClient.js:1279
msgid "Authentication failed"
msgstr "Falló la autenticación"
#: ../js/ui/components/telepathyClient.js:1292
#: ../js/ui/components/telepathyClient.js:1281
msgid "Encryption error"
msgstr "Error de cifrado"
#: ../js/ui/components/telepathyClient.js:1294
#: ../js/ui/components/telepathyClient.js:1283
msgid "Certificate not provided"
msgstr "Certificado no proporcionado"
#: ../js/ui/components/telepathyClient.js:1296
#: ../js/ui/components/telepathyClient.js:1285
msgid "Certificate untrusted"
msgstr "No se confía en el certificado"
#: ../js/ui/components/telepathyClient.js:1298
#: ../js/ui/components/telepathyClient.js:1287
msgid "Certificate expired"
msgstr "Certificado caducado"
#: ../js/ui/components/telepathyClient.js:1300
#: ../js/ui/components/telepathyClient.js:1289
msgid "Certificate not activated"
msgstr "Certificado no activado"
#: ../js/ui/components/telepathyClient.js:1302
#: ../js/ui/components/telepathyClient.js:1291
msgid "Certificate hostname mismatch"
msgstr "El nombre del servidor dle certificado no coincide"
#: ../js/ui/components/telepathyClient.js:1304
#: ../js/ui/components/telepathyClient.js:1293
msgid "Certificate fingerprint mismatch"
msgstr "La huella del certificado no coincide"
#: ../js/ui/components/telepathyClient.js:1306
#: ../js/ui/components/telepathyClient.js:1295
msgid "Certificate self-signed"
msgstr "Certificado autofirmado"
#: ../js/ui/components/telepathyClient.js:1308
#: ../js/ui/components/telepathyClient.js:1297
msgid "Status is set to offline"
msgstr "El estado está establecido a «desconectado»"
#: ../js/ui/components/telepathyClient.js:1310
#: ../js/ui/components/telepathyClient.js:1299
msgid "Encryption is not available"
msgstr "El cifrado no está disponible"
#: ../js/ui/components/telepathyClient.js:1312
#: ../js/ui/components/telepathyClient.js:1301
msgid "Certificate is invalid"
msgstr "El certificado no es válido"
#: ../js/ui/components/telepathyClient.js:1314
#: ../js/ui/components/telepathyClient.js:1303
msgid "Connection has been refused"
msgstr "Se ha rechazado la conexión"
#: ../js/ui/components/telepathyClient.js:1316
#: ../js/ui/components/telepathyClient.js:1305
msgid "Connection can't be established"
msgstr "No se puede establecer la conexión"
#: ../js/ui/components/telepathyClient.js:1318
#: ../js/ui/components/telepathyClient.js:1307
msgid "Connection has been lost"
msgstr "Se ha perdido la conexión"
#: ../js/ui/components/telepathyClient.js:1320
#: ../js/ui/components/telepathyClient.js:1309
msgid "This account is already connected to the server"
msgstr "Esta cuenta ya está conectada al servidor"
#: ../js/ui/components/telepathyClient.js:1322
#: ../js/ui/components/telepathyClient.js:1311
msgid ""
"Connection has been replaced by a new connection using the same resource"
msgstr ""
"Se ha sustituido la conexión por una nueva conexión usando el mismo recurso"
#: ../js/ui/components/telepathyClient.js:1324
#: ../js/ui/components/telepathyClient.js:1313
msgid "The account already exists on the server"
msgstr "La cuenta ya existe en el servidor"
#: ../js/ui/components/telepathyClient.js:1326
#: ../js/ui/components/telepathyClient.js:1315
msgid "Server is currently too busy to handle the connection"
msgstr ""
"Actualmente el servidor está muy ocupado intentando gestionar la conexión"
#: ../js/ui/components/telepathyClient.js:1328
#: ../js/ui/components/telepathyClient.js:1317
msgid "Certificate has been revoked"
msgstr "Se ha revocado el certificado"
#: ../js/ui/components/telepathyClient.js:1330
#: ../js/ui/components/telepathyClient.js:1319
msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr ""
"El certificado usa un algoritmo de cifrado inseguro o es criptográficamente "
"débil"
#: ../js/ui/components/telepathyClient.js:1332
#: ../js/ui/components/telepathyClient.js:1321
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
@ -869,21 +874,21 @@ msgstr ""
"certificado del servidor exceden los límites impuestos por la biblioteca de "
"criptografía"
#: ../js/ui/components/telepathyClient.js:1334
#: ../js/ui/components/telepathyClient.js:1323
msgid "Internal error"
msgstr "Error interno"
#. translators: argument is the account name, like
#. * name@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1344
#: ../js/ui/components/telepathyClient.js:1333
msgid "Unable to connect to %s"
msgstr "No se pudo conectar a %s"
#: ../js/ui/components/telepathyClient.js:1349
#: ../js/ui/components/telepathyClient.js:1338
msgid "View account"
msgstr "Ver cuenta"
#: ../js/ui/components/telepathyClient.js:1381
#: ../js/ui/components/telepathyClient.js:1370
msgid "Unknown reason"
msgstr "Razón desconocida"
@ -1021,6 +1026,7 @@ msgid "Install"
msgstr "Instalar"
#: ../js/ui/extensionDownloader.js:204
#| msgid "Download and install '%s' from extensions.gnome.org?"
msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "¿Descargar e instalar «%s» desde extensions.gnome.org?"
@ -1053,7 +1059,7 @@ msgstr "Activado"
#. because it's disabled by rfkill (airplane mode) */
#. translators:
#. * The device has been disabled
#: ../js/ui/lookingGlass.js:717 ../js/ui/status/network.js:523
#: ../js/ui/lookingGlass.js:717 ../js/ui/status/network.js:470
#: ../src/gvc/gvc-mixer-control.c:1830
msgid "Disabled"
msgstr "Desactivado"
@ -1114,7 +1120,7 @@ msgstr "Bandeja de mensajes"
msgid "System Information"
msgstr "Información del sistema"
#: ../js/ui/notificationDaemon.js:515 ../src/shell-app.c:399
#: ../js/ui/notificationDaemon.js:515 ../src/shell-app.c:397
msgctxt "program"
msgid "Unknown"
msgstr "Desconocido"
@ -1151,7 +1157,7 @@ msgstr "Salir"
msgid "Activities"
msgstr "Actividades"
#: ../js/ui/panel.js:905
#: ../js/ui/panel.js:903
msgid "Top Bar"
msgstr "Barra superior"
@ -1179,19 +1185,19 @@ msgid_plural "%d new notifications"
msgstr[0] "%d notificación nueva"
msgstr[1] "%d notificaciones nuevas"
#: ../js/ui/screenShield.js:473 ../js/ui/status/system.js:342
#: ../js/ui/screenShield.js:472 ../js/ui/status/system.js:342
msgid "Lock"
msgstr "Bloquear"
#: ../js/ui/screenShield.js:707
#: ../js/ui/screenShield.js:706
msgid "GNOME needs to lock the screen"
msgstr "GNOME necesita bloquear la pantalla"
#: ../js/ui/screenShield.js:834 ../js/ui/screenShield.js:1301
#: ../js/ui/screenShield.js:833 ../js/ui/screenShield.js:1300
msgid "Unable to lock"
msgstr "No se pudo bloquear"
#: ../js/ui/screenShield.js:835 ../js/ui/screenShield.js:1302
#: ../js/ui/screenShield.js:834 ../js/ui/screenShield.js:1301
msgid "Lock was blocked by an application"
msgstr "Una aplicación impidió el bloqueo"
@ -1271,30 +1277,25 @@ msgstr "Contraste alto"
msgid "Large Text"
msgstr "Texto grande"
#: ../js/ui/status/bluetooth.js:48
#: ../js/ui/status/bluetooth.js:45
msgid "Bluetooth"
msgstr "Bluetooth"
#: ../js/ui/status/bluetooth.js:50 ../js/ui/status/network.js:134
#: ../js/ui/status/network.js:1209 ../js/ui/status/rfkill.js:85
#: ../js/ui/status/rfkill.js:105
#: ../js/ui/status/bluetooth.js:47 ../js/ui/status/network.js:131
#: ../js/ui/status/network.js:1081 ../js/ui/status/rfkill.js:48
msgid "Turn Off"
msgstr "Apagar"
#: ../js/ui/status/bluetooth.js:53
#: ../js/ui/status/bluetooth.js:50
msgid "Bluetooth Settings"
msgstr "Configuración de Bluetooth"
#: ../js/ui/status/bluetooth.js:100
#: ../js/ui/status/bluetooth.js:98
msgid "%d Connected Device"
msgid_plural "%d Connected Devices"
msgstr[0] "%d dispositivo conectado"
msgstr[1] "%d dispositivos conectados"
#: ../js/ui/status/bluetooth.js:102 ../js/ui/status/network.js:1232
msgid "Not Connected"
msgstr "No conectado"
#: ../js/ui/status/brightness.js:44
msgid "Brightness"
msgstr "Brillo"
@ -1303,131 +1304,99 @@ msgstr "Brillo"
msgid "Show Keyboard Layout"
msgstr "Mostrar la distribución del teclado"
#: ../js/ui/status/network.js:73
#: ../js/ui/status/network.js:70
msgid "<unknown>"
msgstr "<desconocido>"
#: ../js/ui/status/network.js:223 ../js/ui/status/network.js:389
#: ../js/ui/status/network.js:1230
#: ../js/ui/status/network.js:220 ../js/ui/status/network.js:377
#: ../js/ui/status/network.js:1102
msgid "Off"
msgstr "Desconectado"
#. Translators: this is for network devices that are physically present but are not
#. under NetworkManager's control (and thus cannot be used in the menu) */
#: ../js/ui/status/network.js:395
#: ../js/ui/status/network.js:383
msgid "unmanaged"
msgstr "no gestionada"
#: ../js/ui/status/network.js:397
#: ../js/ui/status/network.js:385
msgid "disconnecting..."
msgstr "deconectando…"
#: ../js/ui/status/network.js:403 ../js/ui/status/network.js:1284
#: ../js/ui/status/network.js:391 ../js/ui/status/network.js:1156
msgid "connecting..."
msgstr "conectando…"
#. Translators: this is for network connections that require some kind of key or password */
#: ../js/ui/status/network.js:406 ../js/ui/status/network.js:1287
#: ../js/ui/status/network.js:394 ../js/ui/status/network.js:1159
msgid "authentication required"
msgstr "se necesita autenticación"
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing */
#: ../js/ui/status/network.js:414
#: ../js/ui/status/network.js:402
msgid "firmware missing"
msgstr "falta el «firmware»"
#. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage */
#: ../js/ui/status/network.js:418
#: ../js/ui/status/network.js:406
msgid "unavailable"
msgstr "no disponible"
#: ../js/ui/status/network.js:420 ../js/ui/status/network.js:1289
#: ../js/ui/status/network.js:408 ../js/ui/status/network.js:1161
msgid "connection failed"
msgstr "falló la conexión"
#: ../js/ui/status/network.js:436
msgid "Wired Settings"
msgstr "Configuración de Wi-Fi"
#: ../js/ui/status/network.js:477 ../js/ui/status/network.js:563
#: ../js/ui/status/network.js:424 ../js/ui/status/network.js:510
msgid "Mobile Broadband Settings"
msgstr "Configuración de banda ancha móvil"
#: ../js/ui/status/network.js:519 ../js/ui/status/network.js:1228
#: ../js/ui/status/network.js:466 ../js/ui/status/network.js:1100
msgid "Hardware Disabled"
msgstr "Hardware desactivado"
#: ../js/ui/status/network.js:578
msgid "Use as Internet connection"
msgstr "Usar como conexión a Internet"
#: ../js/ui/status/network.js:755
msgid "Airplane Mode is On"
msgstr "El modo avión está activado"
#: ../js/ui/status/network.js:756
msgid "Wi-Fi is disabled when airplane mode is on."
msgstr "La Wi-Fi se desactiva cuando se activa el modo avión."
#: ../js/ui/status/network.js:757
msgid "Turn Off Airplane Mode"
msgstr "Apagar el modo avión"
#: ../js/ui/status/network.js:766
msgid "Wi-Fi is Off"
msgstr "La Wi-Fi está desactivada"
#: ../js/ui/status/network.js:767
msgid "Wi-Fi needs to be turned on in order to connect to a network."
msgstr "Se debe activar la Wi-Fi para poder conectarse a la red."
#: ../js/ui/status/network.js:768
msgid "Turn On Wi-Fi"
msgstr "Activar la Wi-Fi"
#: ../js/ui/status/network.js:793
#: ../js/ui/status/network.js:692
msgid "Wi-Fi Networks"
msgstr "Redes Wi-Fi"
#: ../js/ui/status/network.js:795
#: ../js/ui/status/network.js:694
msgid "Select a network"
msgstr "Seleccionar una red"
#: ../js/ui/status/network.js:824
#: ../js/ui/status/network.js:718
msgid "No Networks"
msgstr "No hay redes"
#: ../js/ui/status/network.js:845 ../js/ui/status/rfkill.js:103
msgid "Use hardware switch to turn off"
msgstr "Usar el interruptor hardware para apagar"
#: ../js/ui/status/network.js:1115
#: ../js/ui/status/network.js:987
msgid "Select Network"
msgstr "Seleccionar red"
#: ../js/ui/status/network.js:1121
#: ../js/ui/status/network.js:993
msgid "Wi-Fi Settings"
msgstr "Configuración de Wi-Fi"
#: ../js/ui/status/network.js:1209
#: ../js/ui/status/network.js:1081
msgid "Turn On"
msgstr "Enceder"
#: ../js/ui/status/network.js:1352
#: ../js/ui/status/network.js:1104
msgid "Not Connected"
msgstr "No conectado"
#: ../js/ui/status/network.js:1224
msgid "VPN"
msgstr "VPN"
#: ../js/ui/status/network.js:1495
#: ../js/ui/status/network.js:1364
msgid "Network Manager"
msgstr "Gestor de la red"
#: ../js/ui/status/network.js:1534
#: ../js/ui/status/network.js:1403
msgid "Connection failed"
msgstr "Falló la conexión"
#: ../js/ui/status/network.js:1535
#: ../js/ui/status/network.js:1404
msgid "Activation of network connection failed"
msgstr "Falló la activación de la conexión de red"
@ -1459,15 +1428,15 @@ msgstr "SAI"
msgid "Battery"
msgstr "Batería"
#: ../js/ui/status/rfkill.js:82
#: ../js/ui/status/rfkill.js:45
msgid "Airplane Mode"
msgstr "Modo avión"
#: ../js/ui/status/rfkill.js:84
#: ../js/ui/status/rfkill.js:47
msgid "On"
msgstr "Encender"
#: ../js/ui/status/rfkill.js:88
#: ../js/ui/status/rfkill.js:51
msgid "Network Settings"
msgstr "Configuración de la red"
@ -1520,6 +1489,7 @@ msgid "Search"
msgstr "Buscar"
#: ../js/ui/windowAttentionHandler.js:19
#| msgid "'%s' is ready"
msgid "“%s” is ready"
msgstr "«%s» está preparado"
@ -1588,8 +1558,9 @@ msgstr ""
msgid "List possible modes"
msgstr "Listar los modos posibles"
#: ../src/shell-app.c:642
#: ../src/shell-app.c:640
#, c-format
#| msgid "Failed to launch '%s'"
msgid "Failed to launch “%s”"
msgstr "Falló al lanzar «%s»"

239
po/gl.po
View File

@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-02-07 00:57+0100\n"
"PO-Revision-Date: 2014-02-07 00:59+0200\n"
"POT-Creation-Date: 2014-01-20 23:09+0100\n"
"PO-Revision-Date: 2014-01-20 23:10+0200\n"
"Last-Translator: Fran Dieguez <frandieguez@gnome.org>\n"
"Language-Team: gnome-l10n-gl@gnome.org\n"
"Language: gl\n"
@ -278,7 +278,7 @@ msgstr ""
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:136
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:357
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/network.js:857
#: ../js/ui/status/network.js:724
msgid "Cancel"
msgstr "Cancelar"
@ -354,27 +354,27 @@ msgstr "Non foi posíbel analizar a orde:"
msgid "Execution of “%s” failed:"
msgstr "Produciuse un fallo na execución de «%s»:"
#: ../js/ui/appDisplay.js:633
#: ../js/ui/appDisplay.js:543
msgid "Frequently used applications will appear here"
msgstr "Os aplicativos usados recentemente aparecerán aquí"
#: ../js/ui/appDisplay.js:744
#: ../js/ui/appDisplay.js:663
msgid "Frequent"
msgstr "Frecuentes"
#: ../js/ui/appDisplay.js:751
#: ../js/ui/appDisplay.js:670
msgid "All"
msgstr "Todos"
#: ../js/ui/appDisplay.js:1558
#: ../js/ui/appDisplay.js:1499
msgid "New Window"
msgstr "Xanela nova"
#: ../js/ui/appDisplay.js:1580 ../js/ui/dash.js:285
#: ../js/ui/appDisplay.js:1521 ../js/ui/dash.js:285
msgid "Remove from Favorites"
msgstr "Retirar dos marcadores"
#: ../js/ui/appDisplay.js:1586
#: ../js/ui/appDisplay.js:1527
msgid "Add to Favorites"
msgstr "Engadir aos favoritos"
@ -583,8 +583,8 @@ msgstr "Contrasinal:"
msgid "Type again:"
msgstr "Escriba de novo:"
#: ../js/ui/components/networkAgent.js:131 ../js/ui/status/network.js:227
#: ../js/ui/status/network.js:300 ../js/ui/status/network.js:860
#: ../js/ui/components/networkAgent.js:131 ../js/ui/status/network.js:131
#: ../js/ui/status/network.js:293 ../js/ui/status/network.js:727
msgid "Connect"
msgstr "Conectar"
@ -624,8 +624,8 @@ msgid ""
"Passwords or encryption keys are required to access the wireless network "
"“%s”."
msgstr ""
"Requírense contrasinais ou chaves de cifrado para acceder á rede sen fíos "
"«%s»."
"Requírense contrasinais ou chaves de cifrado para acceder á rede sen fíos «%"
"s»."
#: ../js/ui/components/networkAgent.js:316
msgid "Wired 802.1X authentication"
@ -709,39 +709,39 @@ msgid "Mute"
msgstr "Silenciar"
#. Translators: this is the word "Yesterday" followed by a time string. i.e. "Yesterday, 14:30"
#: ../js/ui/components/telepathyClient.js:952
#: ../js/ui/components/telepathyClient.js:941
#, no-c-format
msgid "<b>Yesterday</b>, <b>%H:%M</b>"
msgstr "<b>Onte</b>, <b>%H:%M</b>"
#. Translators: this is the week day name followed by a time string. i.e. "Monday, 14:30
#: ../js/ui/components/telepathyClient.js:958
#: ../js/ui/components/telepathyClient.js:947
#, no-c-format
msgid "<b>%A</b>, <b>%H:%M</b>"
msgstr "<b>%H:%M</b> do <b>%A</b>"
#. Translators: this is the month name and day number followed by a time string. i.e. "May 25, 14:30"
#: ../js/ui/components/telepathyClient.js:963
#: ../js/ui/components/telepathyClient.js:952
#, no-c-format
msgid "<b>%B</b> <b>%d</b>, <b>%H:%M</b>"
msgstr "<b>%B</b> <b>%d</b>, <b>%H:%M</b>"
#. Translators: this is the month name, day number, year number followed by a time string. i.e. "May 25 2012, 14:30"
#: ../js/ui/components/telepathyClient.js:967
#: ../js/ui/components/telepathyClient.js:956
#, no-c-format
msgid "<b>%B</b> <b>%d</b> <b>%Y</b>, <b>%H:%M</b> "
msgstr "<b>%d</b> de <b>%B</b> de <b>%Y</b>, <b>%H:%M</b> "
#. Translators: this is the other person changing their old IM name to their new
#. IM name.
#: ../js/ui/components/telepathyClient.js:998
#: ../js/ui/components/telepathyClient.js:987
#, c-format
msgid "%s is now known as %s"
msgstr "Agora %s chámase %s"
#. translators: argument is a room name like
#. * room@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1101
#: ../js/ui/components/telepathyClient.js:1090
#, c-format
msgid "Invitation to %s"
msgstr "Convite a %s"
@ -749,38 +749,38 @@ msgstr "Convite a %s"
#. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example.
#: ../js/ui/components/telepathyClient.js:1109
#: ../js/ui/components/telepathyClient.js:1098
#, c-format
msgid "%s is inviting you to join %s"
msgstr "%s estalle convidando a unirse a %s"
#: ../js/ui/components/telepathyClient.js:1111
#: ../js/ui/components/telepathyClient.js:1146
#: ../js/ui/components/telepathyClient.js:1180
#: ../js/ui/components/telepathyClient.js:1237
#: ../js/ui/components/telepathyClient.js:1100
#: ../js/ui/components/telepathyClient.js:1135
#: ../js/ui/components/telepathyClient.js:1169
#: ../js/ui/components/telepathyClient.js:1226
msgid "Decline"
msgstr "Rexeitar"
#: ../js/ui/components/telepathyClient.js:1117
#: ../js/ui/components/telepathyClient.js:1186
#: ../js/ui/components/telepathyClient.js:1242
#: ../js/ui/components/telepathyClient.js:1106
#: ../js/ui/components/telepathyClient.js:1175
#: ../js/ui/components/telepathyClient.js:1231
msgid "Accept"
msgstr "Aceptar"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1136
#: ../js/ui/components/telepathyClient.js:1125
#, c-format
msgid "Video call from %s"
msgstr "Videochamada de %s"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1139
#: ../js/ui/components/telepathyClient.js:1128
#, c-format
msgid "Call from %s"
msgstr "Chamada de %s"
#. translators: this is a button label (verb), not a noun
#: ../js/ui/components/telepathyClient.js:1153
#: ../js/ui/components/telepathyClient.js:1142
msgid "Answer"
msgstr "Responder"
@ -789,112 +789,112 @@ msgstr "Responder"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#.
#: ../js/ui/components/telepathyClient.js:1174
#: ../js/ui/components/telepathyClient.js:1163
#, c-format
msgid "%s is sending you %s"
msgstr "%s esta enviándolle %s"
#. To translators: The parameter is the contact's alias
#: ../js/ui/components/telepathyClient.js:1203
#: ../js/ui/components/telepathyClient.js:1192
#, c-format
msgid "%s would like permission to see when you are online"
msgstr "%s solicítalle permiso para ver cando está en liña"
#: ../js/ui/components/telepathyClient.js:1288
#: ../js/ui/components/telepathyClient.js:1277
msgid "Network error"
msgstr "Erro da rede"
#: ../js/ui/components/telepathyClient.js:1290
#: ../js/ui/components/telepathyClient.js:1279
msgid "Authentication failed"
msgstr "Fallou a autenticación"
#: ../js/ui/components/telepathyClient.js:1292
#: ../js/ui/components/telepathyClient.js:1281
msgid "Encryption error"
msgstr "Erro de cifrado"
#: ../js/ui/components/telepathyClient.js:1294
#: ../js/ui/components/telepathyClient.js:1283
msgid "Certificate not provided"
msgstr "Certificado non fornecido"
#: ../js/ui/components/telepathyClient.js:1296
#: ../js/ui/components/telepathyClient.js:1285
msgid "Certificate untrusted"
msgstr "Non se confía no certificado"
#: ../js/ui/components/telepathyClient.js:1298
#: ../js/ui/components/telepathyClient.js:1287
msgid "Certificate expired"
msgstr "Certificado caducado"
#: ../js/ui/components/telepathyClient.js:1300
#: ../js/ui/components/telepathyClient.js:1289
msgid "Certificate not activated"
msgstr "Certificado non activado"
#: ../js/ui/components/telepathyClient.js:1302
#: ../js/ui/components/telepathyClient.js:1291
msgid "Certificate hostname mismatch"
msgstr "O nome do servidor do certificado non coincide"
#: ../js/ui/components/telepathyClient.js:1304
#: ../js/ui/components/telepathyClient.js:1293
msgid "Certificate fingerprint mismatch"
msgstr "A pegada do certificado non coincide"
#: ../js/ui/components/telepathyClient.js:1306
#: ../js/ui/components/telepathyClient.js:1295
msgid "Certificate self-signed"
msgstr "Certificado autoasinado"
#: ../js/ui/components/telepathyClient.js:1308
#: ../js/ui/components/telepathyClient.js:1297
msgid "Status is set to offline"
msgstr "O estado está definido a «desconectado»"
#: ../js/ui/components/telepathyClient.js:1310
#: ../js/ui/components/telepathyClient.js:1299
msgid "Encryption is not available"
msgstr "O cifrado non está dispoñíbel"
#: ../js/ui/components/telepathyClient.js:1312
#: ../js/ui/components/telepathyClient.js:1301
msgid "Certificate is invalid"
msgstr "O certificado non é válido"
#: ../js/ui/components/telepathyClient.js:1314
#: ../js/ui/components/telepathyClient.js:1303
msgid "Connection has been refused"
msgstr "Rexeitouse a conexión"
#: ../js/ui/components/telepathyClient.js:1316
#: ../js/ui/components/telepathyClient.js:1305
msgid "Connection can't be established"
msgstr "Non é posíbel estabelecer a conexión"
#: ../js/ui/components/telepathyClient.js:1318
#: ../js/ui/components/telepathyClient.js:1307
msgid "Connection has been lost"
msgstr "Perdeuse a conexión"
#: ../js/ui/components/telepathyClient.js:1320
#: ../js/ui/components/telepathyClient.js:1309
msgid "This account is already connected to the server"
msgstr "Esta cuenta xa está conectada ao servidor"
#: ../js/ui/components/telepathyClient.js:1322
#: ../js/ui/components/telepathyClient.js:1311
msgid ""
"Connection has been replaced by a new connection using the same resource"
msgstr ""
"Substituíuse a conexión por unha nova conexión empregando o mesmo recurso"
#: ../js/ui/components/telepathyClient.js:1324
#: ../js/ui/components/telepathyClient.js:1313
msgid "The account already exists on the server"
msgstr "Esta conta xa existe no servidor"
#: ../js/ui/components/telepathyClient.js:1326
#: ../js/ui/components/telepathyClient.js:1315
msgid "Server is currently too busy to handle the connection"
msgstr ""
"Nestes intres o servidor está moi ocupado tentando xestionar a conexión"
#: ../js/ui/components/telepathyClient.js:1328
#: ../js/ui/components/telepathyClient.js:1317
msgid "Certificate has been revoked"
msgstr "Revogouse o certificado"
#: ../js/ui/components/telepathyClient.js:1330
#: ../js/ui/components/telepathyClient.js:1319
msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr ""
"O certificado usa un algoritmo de cifrado inseguro ou é criptográficamente "
"débil"
#: ../js/ui/components/telepathyClient.js:1332
#: ../js/ui/components/telepathyClient.js:1321
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
@ -903,22 +903,22 @@ msgstr ""
"certificado do servidor excede os límites impostos pola biblioteca de "
"criptografía."
#: ../js/ui/components/telepathyClient.js:1334
#: ../js/ui/components/telepathyClient.js:1323
msgid "Internal error"
msgstr "Erro interno"
#. translators: argument is the account name, like
#. * name@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1344
#: ../js/ui/components/telepathyClient.js:1333
#, c-format
msgid "Unable to connect to %s"
msgstr "Non foi posíbel conectarse a %s"
#: ../js/ui/components/telepathyClient.js:1349
#: ../js/ui/components/telepathyClient.js:1338
msgid "View account"
msgstr "Ver conta"
#: ../js/ui/components/telepathyClient.js:1381
#: ../js/ui/components/telepathyClient.js:1370
msgid "Unknown reason"
msgstr "Razón descoñecida"
@ -1100,7 +1100,7 @@ msgstr "Activado"
#. because it's disabled by rfkill (airplane mode)
#. translators:
#. * The device has been disabled
#: ../js/ui/lookingGlass.js:717 ../js/ui/status/network.js:523
#: ../js/ui/lookingGlass.js:717 ../js/ui/status/network.js:470
#: ../src/gvc/gvc-mixer-control.c:1830
msgid "Disabled"
msgstr "Desactivado"
@ -1161,7 +1161,7 @@ msgstr "Bandexa de mensaxes"
msgid "System Information"
msgstr "Información do sistema"
#: ../js/ui/notificationDaemon.js:515 ../src/shell-app.c:399
#: ../js/ui/notificationDaemon.js:515 ../src/shell-app.c:397
msgctxt "program"
msgid "Unknown"
msgstr "Descoñecido"
@ -1199,7 +1199,7 @@ msgstr "Saír"
msgid "Activities"
msgstr "Actividades"
#: ../js/ui/panel.js:905
#: ../js/ui/panel.js:903
msgid "Top Bar"
msgstr "Barra superior"
@ -1233,11 +1233,11 @@ msgid_plural "%d new notifications"
msgstr[0] "%d notificación nova"
msgstr[1] "%d notificacións novas"
#: ../js/ui/screenShield.js:473 ../js/ui/status/system.js:342
#: ../js/ui/screenShield.js:472 ../js/ui/status/system.js:342
msgid "Lock"
msgstr "Bloquear"
#: ../js/ui/screenShield.js:707
#: ../js/ui/screenShield.js:706
msgid "GNOME needs to lock the screen"
msgstr "GNOME precisa bloquear a pantalla"
@ -1248,11 +1248,11 @@ msgstr "GNOME precisa bloquear a pantalla"
#.
#. XXX: another option is to kick the user into the gdm login
#. screen, where we're not affected by grabs
#: ../js/ui/screenShield.js:834 ../js/ui/screenShield.js:1301
#: ../js/ui/screenShield.js:833 ../js/ui/screenShield.js:1300
msgid "Unable to lock"
msgstr "Non foi posíbel bloquear"
#: ../js/ui/screenShield.js:835 ../js/ui/screenShield.js:1302
#: ../js/ui/screenShield.js:834 ../js/ui/screenShield.js:1301
msgid "Lock was blocked by an application"
msgstr "Un aplicativo impediu o bloqueo"
@ -1334,31 +1334,26 @@ msgstr "Texto grande"
#. The Bluetooth menu only appears when Bluetooth is in use,
#. so just statically build it with a "Turn Off" menu item.
#: ../js/ui/status/bluetooth.js:48
#: ../js/ui/status/bluetooth.js:45
msgid "Bluetooth"
msgstr "Bluetooth"
#: ../js/ui/status/bluetooth.js:50 ../js/ui/status/network.js:134
#: ../js/ui/status/network.js:1209 ../js/ui/status/rfkill.js:85
#: ../js/ui/status/rfkill.js:105
#: ../js/ui/status/bluetooth.js:47 ../js/ui/status/network.js:131
#: ../js/ui/status/network.js:1081 ../js/ui/status/rfkill.js:48
msgid "Turn Off"
msgstr "Apagar"
#: ../js/ui/status/bluetooth.js:53
#: ../js/ui/status/bluetooth.js:50
msgid "Bluetooth Settings"
msgstr "Preferencias do Bluetooth"
#: ../js/ui/status/bluetooth.js:100
#: ../js/ui/status/bluetooth.js:98
#, c-format
msgid "%d Connected Device"
msgid_plural "%d Connected Devices"
msgstr[0] "%d dispositivo conectado"
msgstr[1] "%d dispositivos conectados"
#: ../js/ui/status/bluetooth.js:102 ../js/ui/status/network.js:1232
msgid "Not Connected"
msgstr "Non conectado"
#: ../js/ui/status/brightness.js:44
msgid "Brightness"
msgstr "Brillo"
@ -1367,131 +1362,99 @@ msgstr "Brillo"
msgid "Show Keyboard Layout"
msgstr "Mostrar a distribución do teclado"
#: ../js/ui/status/network.js:73
#: ../js/ui/status/network.js:70
msgid "<unknown>"
msgstr "<descoñecido>"
#: ../js/ui/status/network.js:223 ../js/ui/status/network.js:389
#: ../js/ui/status/network.js:1230
#: ../js/ui/status/network.js:220 ../js/ui/status/network.js:377
#: ../js/ui/status/network.js:1102
msgid "Off"
msgstr "Desactivar"
#. Translators: this is for network devices that are physically present but are not
#. under NetworkManager's control (and thus cannot be used in the menu)
#: ../js/ui/status/network.js:395
#: ../js/ui/status/network.js:383
msgid "unmanaged"
msgstr "non xestionada"
#: ../js/ui/status/network.js:397
#: ../js/ui/status/network.js:385
msgid "disconnecting..."
msgstr "desconectando…"
#: ../js/ui/status/network.js:403 ../js/ui/status/network.js:1284
#: ../js/ui/status/network.js:391 ../js/ui/status/network.js:1156
msgid "connecting..."
msgstr "conectando…"
#. Translators: this is for network connections that require some kind of key or password
#: ../js/ui/status/network.js:406 ../js/ui/status/network.js:1287
#: ../js/ui/status/network.js:394 ../js/ui/status/network.js:1159
msgid "authentication required"
msgstr "requírese autenticación"
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing
#: ../js/ui/status/network.js:414
#: ../js/ui/status/network.js:402
msgid "firmware missing"
msgstr "falta o «firmware»"
#. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage
#: ../js/ui/status/network.js:418
#: ../js/ui/status/network.js:406
msgid "unavailable"
msgstr "non dispoñíbel"
#: ../js/ui/status/network.js:420 ../js/ui/status/network.js:1289
#: ../js/ui/status/network.js:408 ../js/ui/status/network.js:1161
msgid "connection failed"
msgstr "conexión fallada"
#: ../js/ui/status/network.js:436
msgid "Wired Settings"
msgstr "Preferencias da rede con fíos"
#: ../js/ui/status/network.js:477 ../js/ui/status/network.js:563
#: ../js/ui/status/network.js:424 ../js/ui/status/network.js:510
msgid "Mobile Broadband Settings"
msgstr "Preferencias da banda larga móbil"
#: ../js/ui/status/network.js:519 ../js/ui/status/network.js:1228
#: ../js/ui/status/network.js:466 ../js/ui/status/network.js:1100
msgid "Hardware Disabled"
msgstr "Hardware desactivado"
#: ../js/ui/status/network.js:578
msgid "Use as Internet connection"
msgstr "Usar como conexión a Internet"
#: ../js/ui/status/network.js:755
msgid "Airplane Mode is On"
msgstr "Modo avión activado"
#: ../js/ui/status/network.js:756
msgid "Wi-Fi is disabled when airplane mode is on."
msgstr "A Wifi está desactivada cando o modo avión está activo."
#: ../js/ui/status/network.js:757
msgid "Turn Off Airplane Mode"
msgstr "Desactivar o modo avión"
#: ../js/ui/status/network.js:766
msgid "Wi-Fi is Off"
msgstr "Wifi desactivada"
#: ../js/ui/status/network.js:767
msgid "Wi-Fi needs to be turned on in order to connect to a network."
msgstr "A Wifi precisa activarse para poder conectarse á rede."
#: ../js/ui/status/network.js:768
msgid "Turn On Wi-Fi"
msgstr "Activar Wifi"
#: ../js/ui/status/network.js:793
#: ../js/ui/status/network.js:692
msgid "Wi-Fi Networks"
msgstr "Redes WiFi"
#: ../js/ui/status/network.js:795
#: ../js/ui/status/network.js:694
msgid "Select a network"
msgstr "Seleccione unha rede"
#: ../js/ui/status/network.js:824
#: ../js/ui/status/network.js:718
msgid "No Networks"
msgstr "Sen redes"
#: ../js/ui/status/network.js:845 ../js/ui/status/rfkill.js:103
msgid "Use hardware switch to turn off"
msgstr "Usar interruptor hardware para apagar"
#: ../js/ui/status/network.js:1115
#: ../js/ui/status/network.js:987
msgid "Select Network"
msgstr "Seleccione unha rede"
#: ../js/ui/status/network.js:1121
#: ../js/ui/status/network.js:993
msgid "Wi-Fi Settings"
msgstr "Preferencias da WiFi"
#: ../js/ui/status/network.js:1209
#: ../js/ui/status/network.js:1081
msgid "Turn On"
msgstr "Activar"
#: ../js/ui/status/network.js:1352
#: ../js/ui/status/network.js:1104
msgid "Not Connected"
msgstr "Non conectado"
#: ../js/ui/status/network.js:1224
msgid "VPN"
msgstr "VPN"
#: ../js/ui/status/network.js:1495
#: ../js/ui/status/network.js:1364
msgid "Network Manager"
msgstr "Xestor da rede"
#: ../js/ui/status/network.js:1534
#: ../js/ui/status/network.js:1403
msgid "Connection failed"
msgstr "Produciuse un fallo na conexión"
#: ../js/ui/status/network.js:1535
#: ../js/ui/status/network.js:1404
msgid "Activation of network connection failed"
msgstr "Produciuse un fallo na activación da conexión de rede"
@ -1532,15 +1495,15 @@ msgstr "Batería"
#. The menu only appears when airplane mode is on, so just
#. statically build it as if it was on, rather than dynamically
#. changing the menu contents.
#: ../js/ui/status/rfkill.js:82
#: ../js/ui/status/rfkill.js:45
msgid "Airplane Mode"
msgstr "Modo avión"
#: ../js/ui/status/rfkill.js:84
#: ../js/ui/status/rfkill.js:47
msgid "On"
msgstr "Activado"
#: ../js/ui/status/rfkill.js:88
#: ../js/ui/status/rfkill.js:51
msgid "Network Settings"
msgstr "Preferencias da rede"
@ -1663,7 +1626,7 @@ msgstr ""
msgid "List possible modes"
msgstr "Listar os modos posíbeis"
#: ../src/shell-app.c:642
#: ../src/shell-app.c:640
#, c-format
msgid "Failed to launch “%s”"
msgstr "Produciuse un erro ao iniciar «%s»"

184
po/he.po
View File

@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-02-15 20:15+0200\n"
"PO-Revision-Date: 2014-02-15 20:16+0200\n"
"POT-Creation-Date: 2014-01-29 22:33+0200\n"
"PO-Revision-Date: 2014-01-29 22:38+0200\n"
"Last-Translator: Yosef Or Boczko <yoseforb@gmail.com>\n"
"Language-Team: עברית <>\n"
"Language: he\n"
@ -271,7 +271,7 @@ msgstr "יש לבחור את ההרחבה להגדרה באמצעות תיבת
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:136
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:357
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/network.js:857
#: ../js/ui/status/network.js:757
msgid "Cancel"
msgstr "ביטול"
@ -328,31 +328,31 @@ msgid "Could not parse command:"
msgstr "לא ניתן לפענח את הפקודה:"
#: ../js/misc/util.js:156
#, javascript-format
#, c-format
msgid "Execution of “%s” failed:"
msgstr "ההרצה של „%s” נכשלה:"
#: ../js/ui/appDisplay.js:625
#: ../js/ui/appDisplay.js:633
msgid "Frequently used applications will appear here"
msgstr "יישומים בשימוש תדיר יופיעו כאן"
#: ../js/ui/appDisplay.js:736
#: ../js/ui/appDisplay.js:744
msgid "Frequent"
msgstr "תדיר"
#: ../js/ui/appDisplay.js:743
#: ../js/ui/appDisplay.js:751
msgid "All"
msgstr "הכול"
#: ../js/ui/appDisplay.js:1546
#: ../js/ui/appDisplay.js:1558
msgid "New Window"
msgstr "חלון חדש"
#: ../js/ui/appDisplay.js:1568 ../js/ui/dash.js:285
#: ../js/ui/appDisplay.js:1580 ../js/ui/dash.js:285
msgid "Remove from Favorites"
msgstr "הסרה מהמועדפים"
#: ../js/ui/appDisplay.js:1574
#: ../js/ui/appDisplay.js:1586
msgid "Add to Favorites"
msgstr "הוספה למועדפים"
@ -493,7 +493,7 @@ msgstr "ש׳"
#: ../js/ui/calendar.js:390
msgid "calendar:MY"
msgstr "calendar:YM"
msgstr ""
#: ../js/ui/calendar.js:446
msgid "Previous month"
@ -565,8 +565,8 @@ msgstr "ססמה:"
msgid "Type again:"
msgstr "נא להקליד שוב:"
#: ../js/ui/components/networkAgent.js:131 ../js/ui/status/network.js:227
#: ../js/ui/status/network.js:300 ../js/ui/status/network.js:860
#: ../js/ui/components/networkAgent.js:131 ../js/ui/status/network.js:132
#: ../js/ui/status/network.js:294 ../js/ui/status/network.js:760
msgid "Connect"
msgstr "התחברות"
@ -599,7 +599,7 @@ msgid "Authentication required by wireless network"
msgstr "הרשת האלחוטית דורשת אימות"
#: ../js/ui/components/networkAgent.js:312
#, javascript-format
#, c-format
msgid ""
"Passwords or encryption keys are required to access the wireless network "
"“%s”."
@ -634,7 +634,7 @@ msgid "Mobile broadband network password"
msgstr "ססמת רשת הפס הרחב הניידת"
#: ../js/ui/components/networkAgent.js:339
#, javascript-format
#, c-format
msgid "A password is required to connect to “%s”."
msgstr "נדרשת ססמה כדי להתחבר אל „%s”"
@ -1025,7 +1025,7 @@ msgid "Install"
msgstr "התקנה"
#: ../js/ui/extensionDownloader.js:204
#, javascript-format
#, c-format
msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "הורדה והתקנה של „%s” מ־extensions.gnome.org?"
@ -1059,7 +1059,7 @@ msgstr "פעיל"
#. because it's disabled by rfkill (airplane mode) */
#. translators:
#. * The device has been disabled
#: ../js/ui/lookingGlass.js:717 ../js/ui/status/network.js:523
#: ../js/ui/lookingGlass.js:717 ../js/ui/status/network.js:518
#: ../src/gvc/gvc-mixer-control.c:1830
msgid "Disabled"
msgstr "מנוטרל"
@ -1159,7 +1159,7 @@ msgstr "יציאה"
msgid "Activities"
msgstr "פעילויות"
#: ../js/ui/panel.js:914
#: ../js/ui/panel.js:905
msgid "Top Bar"
msgstr "הסרגל העליון"
@ -1281,32 +1281,27 @@ msgstr "ניגודיות גבוהה"
msgid "Large Text"
msgstr "טקסט גדול"
#: ../js/ui/status/bluetooth.js:48
#: ../js/ui/status/bluetooth.js:45
msgid "Bluetooth"
msgstr "Bluetooth"
#: ../js/ui/status/bluetooth.js:50 ../js/ui/status/location.js:55
#: ../js/ui/status/network.js:134 ../js/ui/status/network.js:1209
#: ../js/ui/status/rfkill.js:85 ../js/ui/status/rfkill.js:105
#: ../js/ui/status/bluetooth.js:47 ../js/ui/status/network.js:132
#: ../js/ui/status/network.js:1108 ../js/ui/status/rfkill.js:48
msgid "Turn Off"
msgstr "כיבוי"
#: ../js/ui/status/bluetooth.js:53
#: ../js/ui/status/bluetooth.js:50
msgid "Bluetooth Settings"
msgstr "הגדרות Bluetooth"
# javascript-format
#: ../js/ui/status/bluetooth.js:100
#: ../js/ui/status/bluetooth.js:98
#, c-format
msgid "%d Connected Device"
msgid_plural "%d Connected Devices"
msgstr[0] "התקן אחד מחובר"
msgstr[1] "%d התקנים מחוברים"
#: ../js/ui/status/bluetooth.js:102 ../js/ui/status/network.js:1232
msgid "Not Connected"
msgstr "לא מחובר"
#: ../js/ui/status/brightness.js:44
msgid "Brightness"
msgstr "בהירות"
@ -1315,140 +1310,103 @@ msgstr "בהירות"
msgid "Show Keyboard Layout"
msgstr "הצגת פריסת המקלדת"
#: ../js/ui/status/location.js:45
msgid "Location"
msgstr "מיקום"
#: ../js/ui/status/location.js:54 ../js/ui/status/location.js:160
#: ../js/ui/status/rfkill.js:84
msgid "On"
msgstr "פועל"
#: ../js/ui/status/location.js:157 ../js/ui/status/network.js:223
#: ../js/ui/status/network.js:389 ../js/ui/status/network.js:1230
msgid "Off"
msgstr "כבוימנותק"
#: ../js/ui/status/network.js:73
#: ../js/ui/status/network.js:71
msgid "<unknown>"
msgstr "<לא ידוע>"
#: ../js/ui/status/network.js:221 ../js/ui/status/network.js:383
#: ../js/ui/status/network.js:1129
msgid "Off"
msgstr "כבוימנותק"
#. Translators: this is for network devices that are physically present but are not
#. under NetworkManager's control (and thus cannot be used in the menu) */
#: ../js/ui/status/network.js:395
#: ../js/ui/status/network.js:389
msgid "unmanaged"
msgstr "לא מנוהל"
#: ../js/ui/status/network.js:397
#: ../js/ui/status/network.js:391
msgid "disconnecting..."
msgstr "בהליכי ניתוק..."
#: ../js/ui/status/network.js:403 ../js/ui/status/network.js:1284
#: ../js/ui/status/network.js:397 ../js/ui/status/network.js:1183
msgid "connecting..."
msgstr "בהתחברות..."
#. Translators: this is for network connections that require some kind of key or password */
#: ../js/ui/status/network.js:406 ../js/ui/status/network.js:1287
#: ../js/ui/status/network.js:400 ../js/ui/status/network.js:1186
msgid "authentication required"
msgstr "נדרש אימות"
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing */
#: ../js/ui/status/network.js:414
#: ../js/ui/status/network.js:408
msgid "firmware missing"
msgstr "הקושחה חסרה"
#. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage */
#: ../js/ui/status/network.js:418
#: ../js/ui/status/network.js:412
msgid "unavailable"
msgstr "לא זמין"
#: ../js/ui/status/network.js:420 ../js/ui/status/network.js:1289
#: ../js/ui/status/network.js:414 ../js/ui/status/network.js:1188
msgid "connection failed"
msgstr "החיבור נכשל"
#: ../js/ui/status/network.js:436
#: ../js/ui/status/network.js:430
msgid "Wired Settings"
msgstr "הגדרות רשת קווית"
#: ../js/ui/status/network.js:477 ../js/ui/status/network.js:563
#: ../js/ui/status/network.js:472 ../js/ui/status/network.js:558
msgid "Mobile Broadband Settings"
msgstr "הגדרות פס־רחב נייד"
#: ../js/ui/status/network.js:519 ../js/ui/status/network.js:1228
#: ../js/ui/status/network.js:514 ../js/ui/status/network.js:1127
msgid "Hardware Disabled"
msgstr "מנוטרל חומרתית"
#: ../js/ui/status/network.js:578
msgid "Use as Internet connection"
msgstr "שימוש כחיבור לאינטרנט"
#: ../js/ui/status/network.js:755
msgid "Airplane Mode is On"
msgstr "מצב טיסה מופעל"
#: ../js/ui/status/network.js:756
msgid "Wi-Fi is disabled when airplane mode is on."
msgstr "רשת אלחוטית מושבתת כאשר מצב טיסה מופעל."
#: ../js/ui/status/network.js:757
msgid "Turn Off Airplane Mode"
msgstr "כיבוי מצב טיסה"
#: ../js/ui/status/network.js:766
msgid "Wi-Fi is Off"
msgstr "רשת אלחוטית כבויה"
#: ../js/ui/status/network.js:767
msgid "Wi-Fi needs to be turned on in order to connect to a network."
msgstr "רשת אלחוטית צריכה להיות מופעלת על מנת להתחבר לרשת."
#: ../js/ui/status/network.js:768
msgid "Turn On Wi-Fi"
msgstr "הפעלת רשת אלחוטית"
#: ../js/ui/status/network.js:793
#: ../js/ui/status/network.js:725
msgid "Wi-Fi Networks"
msgstr "רשתות אלחוטיות"
#: ../js/ui/status/network.js:795
#: ../js/ui/status/network.js:727
msgid "Select a network"
msgstr "בחירת רשת"
#: ../js/ui/status/network.js:824
#: ../js/ui/status/network.js:751
msgid "No Networks"
msgstr "אין רשתות"
#: ../js/ui/status/network.js:845 ../js/ui/status/rfkill.js:103
msgid "Use hardware switch to turn off"
msgstr "שימוש במתג של החומרה לכיבוי"
#: ../js/ui/status/network.js:1115
#: ../js/ui/status/network.js:1014
msgid "Select Network"
msgstr "בחירת רשת"
#: ../js/ui/status/network.js:1121
#: ../js/ui/status/network.js:1020
msgid "Wi-Fi Settings"
msgstr "הגדרות רשת אלחוטית"
#: ../js/ui/status/network.js:1209
#: ../js/ui/status/network.js:1108
msgid "Turn On"
msgstr "הפעלה"
#: ../js/ui/status/network.js:1352
#: ../js/ui/status/network.js:1131
msgid "Not Connected"
msgstr "לא מחובר"
#: ../js/ui/status/network.js:1251
msgid "VPN"
msgstr "VPN"
#: ../js/ui/status/network.js:1495
#: ../js/ui/status/network.js:1394
msgid "Network Manager"
msgstr "מנהל הרשתות"
#: ../js/ui/status/network.js:1534
#: ../js/ui/status/network.js:1433
msgid "Connection failed"
msgstr "ההתחברות נכשל"
#: ../js/ui/status/network.js:1535
#: ../js/ui/status/network.js:1434
msgid "Activation of network connection failed"
msgstr "הפעלת חיבור הרשת נכשלה"
@ -1482,11 +1440,15 @@ msgstr "אל־פסק"
msgid "Battery"
msgstr "סוללה"
#: ../js/ui/status/rfkill.js:82
#: ../js/ui/status/rfkill.js:45
msgid "Airplane Mode"
msgstr "מצב טיסה"
#: ../js/ui/status/rfkill.js:88
#: ../js/ui/status/rfkill.js:47
msgid "On"
msgstr "פועל"
#: ../js/ui/status/rfkill.js:51
msgid "Network Settings"
msgstr "הגדרות הרשת"
@ -1500,7 +1462,7 @@ msgstr "יציאה"
#: ../js/ui/status/system.js:338
msgid "Orientation Lock"
msgstr "נעילת כיוון"
msgstr ""
#: ../js/ui/status/system.js:346
msgid "Suspend"
@ -1539,7 +1501,7 @@ msgid "Search"
msgstr "חיפוש"
#: ../js/ui/windowAttentionHandler.js:19
#, javascript-format
#, c-format
msgid "“%s” is ready"
msgstr "‏„%s” מוכן"
@ -1592,19 +1554,19 @@ msgstr[1] "%u קלטים"
msgid "System Sounds"
msgstr "צלילי מערכת"
#: ../src/main.c:349
#: ../src/main.c:347
msgid "Print version"
msgstr "Print version"
#: ../src/main.c:355
#: ../src/main.c:353
msgid "Mode used by GDM for login screen"
msgstr "המצב בו GDM יעשה שימוש לצורך מסך הכניסה"
#: ../src/main.c:361
#: ../src/main.c:359
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
msgstr "שימוש במצב מסוים, לדוגמה: „gdm“ למסך הכניסה"
#: ../src/main.c:367
#: ../src/main.c:365
msgid "List possible modes"
msgstr "הצגת המצבים האפשריים"
@ -1625,14 +1587,6 @@ msgstr "הססמה לא יכולה להישאר ריקה"
msgid "Authentication dialog was dismissed by the user"
msgstr "המשתמש בחר להתעלם מתיבת דו־שיח האימות"
#~ msgctxt "event list time"
#~ msgid "%H\\u2236%M"
#~ msgstr "%H\\u2236%M"
#~ msgctxt "event list time"
#~ msgid "%l\\u2236%M\\u2009%p"
#~ msgstr "%l\\u2236%M\\u2009%p"
#~ msgid "List of categories that should be displayed as folders"
#~ msgstr "List of categories that should be displayed as folders"
@ -1699,6 +1653,14 @@ msgstr "המשתמש בחר להתעלם מתיבת דו־שיח האימות"
#~ msgid "%s the Oracle says"
#~ msgstr "%s, כה אמרה האוראקל"
#~ msgctxt "event list time"
#~ msgid "%H\\u2236%M"
#~ msgstr "%H\\u2236%M"
#~ msgctxt "event list time"
#~ msgid "%l\\u2236%M\\u2009%p"
#~ msgstr "%l\\u2236%M\\u2009%p"
#~ msgid "Screenshots"
#~ msgstr "צילומי מסך"

374
po/id.po
View File

@ -10,8 +10,8 @@ msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2014-02-04 08:57+0000\n"
"PO-Revision-Date: 2014-02-04 21:15+0700\n"
"POT-Creation-Date: 2014-01-03 21:13+0000\n"
"PO-Revision-Date: 2014-01-04 10:24+0700\n"
"Last-Translator: Andika Triwidada <andika@gmail.com>\n"
"Language-Team: Indonesian <gnome@i15n.org>\n"
"Language: id\n"
@ -20,7 +20,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Generator: Poedit 1.6.3\n"
"X-Generator: Poedit 1.5.7\n"
#: ../data/50-gnome-shell-system.xml.in.h:1
msgid "System"
@ -83,20 +83,20 @@ msgstr ""
"dialog Alt-F2."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:3
msgid "UUIDs of extensions to enable"
msgstr "UUID ekstensi yang akan difungsikan"
msgid "Uuids of extensions to enable"
msgstr "Uuid ekstensi yang hendak diaktifkan"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:4
msgid ""
"GNOME Shell extensions have a UUID property; this key lists extensions which "
"GNOME Shell extensions have a uuid property; this key lists extensions which "
"should be loaded. Any extension that wants to be loaded needs to be in this "
"list. You can also manipulate this list with the EnableExtension and "
"DisableExtension D-Bus methods on org.gnome.Shell."
"DisableExtension DBus methods on org.gnome.Shell."
msgstr ""
"Ekstensi GNOME Shell memiliki properti UUID; kunci ini memuat daftar "
"ekstensi yang mesti dimuat. Sebarang ekstensi yang ingin dimuat perlu berada "
"dalam daftar ini. Anda juga dapat memanipulasi daftar ini dengan metoda D-"
"Bus EnableExtension dan DisableExtension pada org.gnome.Shell."
"Ekstensi GNOME Shell memiliki properti uuid; kunci ini berisikan ekstensi "
"yang seharusnya dimuat. Ekstensi yang ingin dimuat harus berada di dalam "
"daftar tersebut. Anda juga bisa memanipulasi daftar ini dengan metode DBus "
"EnableExtension dan DisableExtension pada org.gnome.Shell."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:5
msgid "List of desktop file IDs for favorite applications"
@ -111,33 +111,45 @@ msgstr ""
"area favorit."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:7
msgid "List of categories that should be displayed as folders"
msgstr "Daftar kategori yang mesti ditampilkan sebagai folder"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:8
msgid ""
"Each category name in this list will be represented as folder in the "
"application view, rather than being displayed inline in the main view."
msgstr ""
"Setiap nama kategori dalam daftar ini akan diwakili oleh folder dalam "
"tilikan aplikasi, bukan ditampilkan dalam tilikan utama."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:9
msgid "History for command (Alt-F2) dialog"
msgstr "Riwayat dialog perintah (Alt-F2)"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:8
#: ../data/org.gnome.shell.gschema.xml.in.in.h:10
msgid "History for the looking glass dialog"
msgstr "Riwayat untuk dialog yang berpenampilan gelas kaca"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:9
msgid "Always show the 'Log out' menu item in the user menu."
msgstr "Selalu tampilkan butir menu 'Log keluar' dalam menu pengguna."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:11
msgid "Always show the 'Log out' menuitem in the user menu."
msgstr "Selalku tampilkan butir menu 'Log keluar' dalam menu pengguna."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:10
#: ../data/org.gnome.shell.gschema.xml.in.in.h:12
msgid ""
"This key overrides the automatic hiding of the 'Log out' menu item in single-"
"This key overrides the automatic hiding of the 'Log out' menuitem in single-"
"user, single-session situations."
msgstr ""
"Kunci ini menimpa penyembunyian otomatis butir menu 'Log keluar' dalam "
"situasi pengguna-tunggal, sesi-tunggal."
"Kunci ini menimpa penyembunyian otomatis dari butir menu 'Log keluar' dalam "
"situasi pengguna tunggal, sesi tunggal."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:11
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
msgid ""
"Whether to remember password for mounting encrypted or remote filesystems"
msgstr ""
"Apakah mengingat sandi untuk mengait sistem berkas terenkripsi atau jarak "
"jauh"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:12
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
msgid ""
"The shell will request a password when an encrypted device or a remote "
"filesystem is mounted. If the password can be saved for future use a "
@ -149,70 +161,70 @@ msgstr ""
"dimasa depan, suatu kotak contreng 'Ingat Sandi' akan tampil. Kunci ini "
"menata keadaan baku dari kontak contreng."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
msgid "Show the week date in the calendar"
msgstr "Menampilkan tanggal pada kalender"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
msgid "If true, display the ISO week date in the calendar."
msgstr "Jika \"true\", menampilkan tanggal berformat ISO pada kalender."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
msgid "Keybinding to open the application menu"
msgstr "Kombinasi tombol untuk membuka menu aplikasi"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
msgid "Keybinding to open the application menu."
msgstr "Kombinasi tombol untuk membuka menu aplikasi."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
msgid "Keybinding to open the \"Show Applications\" view"
msgstr "Kombinasi tombol untuk membuka tilikan \"Tampilkan Aplikasi\""
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
msgid ""
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
msgstr ""
"Kombinasi tombol untuk membuka tilikan Ringkasan Aktivitas \"Tampilkan "
"Aplikasi\"."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
msgid "Keybinding to open the overview"
msgstr "Kombinasi tombol untuk membuka ringkasan"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
msgid "Keybinding to open the Activities Overview."
msgstr "Kombinasi tombol untuk membuka Ringkasan Aktivitas."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
msgid "Keybinding to toggle the visibility of the message tray"
msgstr "Kombinasi tombol untuk kenampakan baki pesan"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
msgid "Keybinding to toggle the visibility of the message tray."
msgstr "Kombinasi tombol untuk kenampakan baki pesan."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
msgid "Keybinding to focus the active notification"
msgstr "Kombinasi tombol untuk fokus pada pemberitahuan yang aktif"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
msgid "Keybinding to focus the active notification."
msgstr "Kombinasi tombol untuk fokus pada pemberitahuan yang aktif."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
msgid "Which keyboard to use"
msgstr "Papan tik mana yang akan dipakai"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
msgid "The type of keyboard to use."
msgstr "Jenis papan tik yang akan dipakai."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
msgid "The application icon mode."
msgstr "Mode ikon aplikasi."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
msgid ""
"Configures how the windows are shown in the switcher. Valid possibilities "
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
@ -222,22 +234,22 @@ msgstr ""
"adalah 'thumbnail-only' (menampilkan gambar mini dari jendela), 'app-icon-"
"only' (hanya menampilkan ikon aplikasi), atau 'both' (keduanya)."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
msgid "Attach modal dialog to the parent window"
msgstr "Mencantolkan dialog modal ke jendela induk"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
msgid ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgstr ""
"Kunci ini menimpa kunci dalam org.gnome.mutter ketika menjalankan GNOME "
"Shell."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
msgid "Arrangement of buttons on the titlebar"
msgstr "Pengaturan tombol pada bilah judul"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34
msgid ""
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
"GNOME Shell."
@ -245,20 +257,20 @@ msgstr ""
"Kunci ini menimpa kunci dalam org.gnome.desktop.wm.preferences ketika "
"menjalankan GNOME Shell."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr ""
"Memfungsikan pengubinan tepi ketika menjatuhkan jendela pada tepi layar"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
msgid "Workspaces are managed dynamically"
msgstr "Ruang kerja dikelola secara dinamis"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
msgid "Workspaces only on primary monitor"
msgstr "Ruang kerja hanya pada monitor primer"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38
msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr ""
"Tunda perubahan fokus dalam mode tetikus sampai penunjuk berhenti bergerak"
@ -277,9 +289,9 @@ msgid "Select an extension to configure using the combobox above."
msgstr "Pilih ekstensi yang ingin dikonfigurasi pada kotak di atas."
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:136
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:357
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:359
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/network.js:757
#: ../js/ui/status/network.js:726
msgid "Cancel"
msgstr "Batal"
@ -297,25 +309,25 @@ msgctxt "button"
msgid "Sign In"
msgstr "Masuk"
#: ../js/gdm/loginDialog.js:270
#: ../js/gdm/loginDialog.js:272
msgid "Choose Session"
msgstr "Pilih Sesi"
#: ../js/gdm/loginDialog.js:430
#: ../js/gdm/loginDialog.js:432
msgid "Not listed?"
msgstr "Tak masuk daftar?"
#: ../js/gdm/loginDialog.js:598
#: ../js/gdm/loginDialog.js:600
#, javascript-format
msgid "(e.g., user or %s)"
msgstr "(cth., pengguna dari %s)"
#: ../js/gdm/loginDialog.js:603 ../js/ui/components/networkAgent.js:262
#: ../js/gdm/loginDialog.js:605 ../js/ui/components/networkAgent.js:262
#: ../js/ui/components/networkAgent.js:280
msgid "Username: "
msgstr "Nama pengguna: "
#: ../js/gdm/loginDialog.js:868
#: ../js/gdm/loginDialog.js:870
msgid "Login Window"
msgstr "Jendela Log Masuk"
@ -337,30 +349,30 @@ msgstr "Tidak dapat mengurai perintah:"
#: ../js/misc/util.js:156
#, javascript-format
msgid "Execution of %s failed:"
msgstr "Eksekusi \"%s\" gagal:"
msgid "Execution of '%s' failed:"
msgstr "Eksekusi '%s' gagal:"
#: ../js/ui/appDisplay.js:633
#: ../js/ui/appDisplay.js:596
msgid "Frequently used applications will appear here"
msgstr "Aplikasi yang sering dipakai akan muncul di sini"
#: ../js/ui/appDisplay.js:744
#: ../js/ui/appDisplay.js:715
msgid "Frequent"
msgstr "Sering"
#: ../js/ui/appDisplay.js:751
#: ../js/ui/appDisplay.js:722
msgid "All"
msgstr "Semua"
#: ../js/ui/appDisplay.js:1558
#: ../js/ui/appDisplay.js:1541
msgid "New Window"
msgstr "Jendela Baru"
#: ../js/ui/appDisplay.js:1580 ../js/ui/dash.js:285
#: ../js/ui/appDisplay.js:1544 ../js/ui/dash.js:285
msgid "Remove from Favorites"
msgstr "Hapus dari Favorit"
#: ../js/ui/appDisplay.js:1586
#: ../js/ui/appDisplay.js:1545
msgid "Add to Favorites"
msgstr "Tambah ke Favorit"
@ -574,7 +586,7 @@ msgid "Type again:"
msgstr "Ketik lagi:"
#: ../js/ui/components/networkAgent.js:131 ../js/ui/status/network.js:132
#: ../js/ui/status/network.js:294 ../js/ui/status/network.js:760
#: ../js/ui/status/network.js:295 ../js/ui/status/network.js:729
msgid "Connect"
msgstr "Sambung"
@ -610,10 +622,10 @@ msgstr "Otentikasi dibutuhkan oleh jaringan nirkabel"
#, javascript-format
msgid ""
"Passwords or encryption keys are required to access the wireless network "
"%s."
"'%s'."
msgstr ""
"Sandi atau kunci enkripsi diperlukan untuk mengakses jaringan nirkabel \"%s"
"\"."
"Sandi atau kunci penyandian diperlukan untuk mengakses jaringan nirkabel "
"'%s'."
#: ../js/ui/components/networkAgent.js:316
msgid "Wired 802.1X authentication"
@ -645,8 +657,8 @@ msgstr "Sandi jaringan data seluler"
#: ../js/ui/components/networkAgent.js:339
#, javascript-format
msgid "A password is required to connect to %s."
msgstr "Perlu suatu sandi untuk menyambung ke \"%s\"."
msgid "A password is required to connect to '%s'."
msgstr "Sebuah kata sandi dibutuhkan untuk menyambung ke '%s'."
#: ../js/ui/components/polkitAgent.js:54
msgid "Authentication Required"
@ -693,35 +705,35 @@ msgid "Mute"
msgstr "Bisu"
#. Translators: this is the word "Yesterday" followed by a time string. i.e. "Yesterday, 14:30"*/
#: ../js/ui/components/telepathyClient.js:952
#: ../js/ui/components/telepathyClient.js:941
msgid "<b>Yesterday</b>, <b>%H:%M</b>"
msgstr "<b>Kemarin</b>, <b>%H:%M</b>"
#. Translators: this is the week day name followed by a time string. i.e. "Monday, 14:30*/
#: ../js/ui/components/telepathyClient.js:958
#: ../js/ui/components/telepathyClient.js:947
msgid "<b>%A</b>, <b>%H:%M</b>"
msgstr "<b>%A</b>, <b>%H:%M</b>"
#. Translators: this is the month name and day number followed by a time string. i.e. "May 25, 14:30"*/
#: ../js/ui/components/telepathyClient.js:963
#: ../js/ui/components/telepathyClient.js:952
msgid "<b>%B</b> <b>%d</b>, <b>%H:%M</b>"
msgstr "<b>%d</b> <b>%B</b>, <b>%H:%M</b>"
#. Translators: this is the month name, day number, year number followed by a time string. i.e. "May 25 2012, 14:30"*/
#: ../js/ui/components/telepathyClient.js:967
#: ../js/ui/components/telepathyClient.js:956
msgid "<b>%B</b> <b>%d</b> <b>%Y</b>, <b>%H:%M</b> "
msgstr "<b>%d</b> <b>%B</b> <b>%Y</b>, <b>%H:%M</b> "
#. Translators: this is the other person changing their old IM name to their new
#. IM name. */
#: ../js/ui/components/telepathyClient.js:998
#: ../js/ui/components/telepathyClient.js:987
#, javascript-format
msgid "%s is now known as %s"
msgstr "%s sekarang dikenal sebagai %s"
#. translators: argument is a room name like
#. * room@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1101
#: ../js/ui/components/telepathyClient.js:1090
#, javascript-format
msgid "Invitation to %s"
msgstr "Undangan ke %s"
@ -729,38 +741,38 @@ msgstr "Undangan ke %s"
#. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example. */
#: ../js/ui/components/telepathyClient.js:1109
#: ../js/ui/components/telepathyClient.js:1098
#, javascript-format
msgid "%s is inviting you to join %s"
msgstr "%s mengundang Anda untuk bergabung dengan %s"
#: ../js/ui/components/telepathyClient.js:1111
#: ../js/ui/components/telepathyClient.js:1146
#: ../js/ui/components/telepathyClient.js:1180
#: ../js/ui/components/telepathyClient.js:1237
#: ../js/ui/components/telepathyClient.js:1100
#: ../js/ui/components/telepathyClient.js:1135
#: ../js/ui/components/telepathyClient.js:1169
#: ../js/ui/components/telepathyClient.js:1226
msgid "Decline"
msgstr "Tolak"
#: ../js/ui/components/telepathyClient.js:1117
#: ../js/ui/components/telepathyClient.js:1186
#: ../js/ui/components/telepathyClient.js:1242
#: ../js/ui/components/telepathyClient.js:1106
#: ../js/ui/components/telepathyClient.js:1175
#: ../js/ui/components/telepathyClient.js:1231
msgid "Accept"
msgstr "Terima"
#. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1136
#: ../js/ui/components/telepathyClient.js:1125
#, javascript-format
msgid "Video call from %s"
msgstr "Panggilan video dari %s"
#. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1139
#: ../js/ui/components/telepathyClient.js:1128
#, javascript-format
msgid "Call from %s"
msgstr "Panggilan dari %s"
#. translators: this is a button label (verb), not a noun */
#: ../js/ui/components/telepathyClient.js:1153
#: ../js/ui/components/telepathyClient.js:1142
msgid "Answer"
msgstr "Jawab"
@ -769,111 +781,111 @@ msgstr "Jawab"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#. */
#: ../js/ui/components/telepathyClient.js:1174
#: ../js/ui/components/telepathyClient.js:1163
#, javascript-format
msgid "%s is sending you %s"
msgstr "%s sedang mengirimi Anda %s"
#. To translators: The parameter is the contact's alias */
#: ../js/ui/components/telepathyClient.js:1203
#: ../js/ui/components/telepathyClient.js:1192
#, javascript-format
msgid "%s would like permission to see when you are online"
msgstr "%s ingin minta ijin melihat Anda ketika Anda daring"
#: ../js/ui/components/telepathyClient.js:1288
#: ../js/ui/components/telepathyClient.js:1277
msgid "Network error"
msgstr "Galat jaringan"
#: ../js/ui/components/telepathyClient.js:1290
#: ../js/ui/components/telepathyClient.js:1279
msgid "Authentication failed"
msgstr "Otentikasi gagal"
#: ../js/ui/components/telepathyClient.js:1292
#: ../js/ui/components/telepathyClient.js:1281
msgid "Encryption error"
msgstr "Galat enkripsi"
#: ../js/ui/components/telepathyClient.js:1294
#: ../js/ui/components/telepathyClient.js:1283
msgid "Certificate not provided"
msgstr "Sertifikat tidak disediakan"
#: ../js/ui/components/telepathyClient.js:1296
#: ../js/ui/components/telepathyClient.js:1285
msgid "Certificate untrusted"
msgstr "Sertifikat tidak dipercaya"
#: ../js/ui/components/telepathyClient.js:1298
#: ../js/ui/components/telepathyClient.js:1287
msgid "Certificate expired"
msgstr "Sertifikat kadaluarsa"
#: ../js/ui/components/telepathyClient.js:1300
#: ../js/ui/components/telepathyClient.js:1289
msgid "Certificate not activated"
msgstr "Sertifikat tidak diaktifkan"
#: ../js/ui/components/telepathyClient.js:1302
#: ../js/ui/components/telepathyClient.js:1291
msgid "Certificate hostname mismatch"
msgstr "Nama host sertifikat tidak cocok"
#: ../js/ui/components/telepathyClient.js:1304
#: ../js/ui/components/telepathyClient.js:1293
msgid "Certificate fingerprint mismatch"
msgstr "Sidik jari sertifikat tidak cocok"
#: ../js/ui/components/telepathyClient.js:1306
#: ../js/ui/components/telepathyClient.js:1295
msgid "Certificate self-signed"
msgstr "Sertifikat ditandatangani sendiri"
#: ../js/ui/components/telepathyClient.js:1308
#: ../js/ui/components/telepathyClient.js:1297
msgid "Status is set to offline"
msgstr "Status diatur ke luring"
#: ../js/ui/components/telepathyClient.js:1310
#: ../js/ui/components/telepathyClient.js:1299
msgid "Encryption is not available"
msgstr "Enkripsi tidak tersedia"
#: ../js/ui/components/telepathyClient.js:1312
#: ../js/ui/components/telepathyClient.js:1301
msgid "Certificate is invalid"
msgstr "Sertifikat tidak valid"
#: ../js/ui/components/telepathyClient.js:1314
#: ../js/ui/components/telepathyClient.js:1303
msgid "Connection has been refused"
msgstr "Koneksi telah ditolak"
#: ../js/ui/components/telepathyClient.js:1316
#: ../js/ui/components/telepathyClient.js:1305
msgid "Connection can't be established"
msgstr "Koneksi tak dapat dijalin"
#: ../js/ui/components/telepathyClient.js:1318
#: ../js/ui/components/telepathyClient.js:1307
msgid "Connection has been lost"
msgstr "Koneksi telah terputus"
#: ../js/ui/components/telepathyClient.js:1320
#: ../js/ui/components/telepathyClient.js:1309
msgid "This account is already connected to the server"
msgstr "Akun ini telah tersambung pada server"
#: ../js/ui/components/telepathyClient.js:1322
#: ../js/ui/components/telepathyClient.js:1311
msgid ""
"Connection has been replaced by a new connection using the same resource"
msgstr ""
"Koneksi telah digantikan oleh koneksi baru memakai sumberdaya yang sama"
#: ../js/ui/components/telepathyClient.js:1324
#: ../js/ui/components/telepathyClient.js:1313
msgid "The account already exists on the server"
msgstr "Akun ini sudah ada di server"
#: ../js/ui/components/telepathyClient.js:1326
#: ../js/ui/components/telepathyClient.js:1315
msgid "Server is currently too busy to handle the connection"
msgstr "Server kini terlalu sibuk untuk menangani koneksi"
#: ../js/ui/components/telepathyClient.js:1328
#: ../js/ui/components/telepathyClient.js:1317
msgid "Certificate has been revoked"
msgstr "Sertifikat telah dicabut"
#: ../js/ui/components/telepathyClient.js:1330
#: ../js/ui/components/telepathyClient.js:1319
msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr ""
"Sertifikat memakai algorima cipher yang tak aman atau lemah secara "
"kriptografi"
#: ../js/ui/components/telepathyClient.js:1332
#: ../js/ui/components/telepathyClient.js:1321
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
@ -881,22 +893,22 @@ msgstr ""
"Panjang sertifikat server, atau kedalaman rantai sertifikat server, "
"melampaui batas yang diberlakukan oleh pustaka kriptografi"
#: ../js/ui/components/telepathyClient.js:1334
#: ../js/ui/components/telepathyClient.js:1323
msgid "Internal error"
msgstr "Galat internal"
#. translators: argument is the account name, like
#. * name@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1344
#: ../js/ui/components/telepathyClient.js:1333
#, javascript-format
msgid "Unable to connect to %s"
msgstr "Tak bisa menyambung ke %s"
#: ../js/ui/components/telepathyClient.js:1349
#: ../js/ui/components/telepathyClient.js:1338
msgid "View account"
msgstr "Tilik akun"
#: ../js/ui/components/telepathyClient.js:1381
#: ../js/ui/components/telepathyClient.js:1370
msgid "Unknown reason"
msgstr "Alasan yang tidak diketahui"
@ -931,72 +943,72 @@ msgstr "Pengaturan Waktu & Tanggal"
msgid "%A %B %e, %Y"
msgstr "%A, %e %B %Y"
#: ../js/ui/endSessionDialog.js:62
#: ../js/ui/endSessionDialog.js:64
#, javascript-format
msgctxt "title"
msgid "Log Out %s"
msgstr "Keluar %s"
#: ../js/ui/endSessionDialog.js:63
#: ../js/ui/endSessionDialog.js:65
msgctxt "title"
msgid "Log Out"
msgstr "Keluar"
#: ../js/ui/endSessionDialog.js:65
#: ../js/ui/endSessionDialog.js:67
#, javascript-format
msgid "%s will be logged out automatically in %d second."
msgid_plural "%s will be logged out automatically in %d seconds."
msgstr[0] "%s akan log keluar otomatis dalam %d detik.\t\t"
#: ../js/ui/endSessionDialog.js:70
#: ../js/ui/endSessionDialog.js:72
#, javascript-format
msgid "You will be logged out automatically in %d second."
msgid_plural "You will be logged out automatically in %d seconds."
msgstr[0] "Anda akan log keluar otomatis dalam %d detik."
#: ../js/ui/endSessionDialog.js:75
#: ../js/ui/endSessionDialog.js:77
msgctxt "button"
msgid "Log Out"
msgstr "Keluar"
#: ../js/ui/endSessionDialog.js:81
#: ../js/ui/endSessionDialog.js:83
msgctxt "title"
msgid "Power Off"
msgstr "Matikan"
#: ../js/ui/endSessionDialog.js:83
#: ../js/ui/endSessionDialog.js:85
#, javascript-format
msgid "The system will power off automatically in %d second."
msgid_plural "The system will power off automatically in %d seconds."
msgstr[0] "Sistem ini akan otomatis dimatikan dalam %d detik."
#: ../js/ui/endSessionDialog.js:88 ../js/ui/endSessionDialog.js:104
#: ../js/ui/endSessionDialog.js:90 ../js/ui/endSessionDialog.js:106
msgctxt "button"
msgid "Restart"
msgstr "Nyalakan Ulang"
#: ../js/ui/endSessionDialog.js:90
#: ../js/ui/endSessionDialog.js:92
msgctxt "button"
msgid "Power Off"
msgstr "Matikan"
#: ../js/ui/endSessionDialog.js:97
#: ../js/ui/endSessionDialog.js:99
msgctxt "title"
msgid "Restart"
msgstr "Nyalakan Ulang"
#: ../js/ui/endSessionDialog.js:99
#: ../js/ui/endSessionDialog.js:101
#, javascript-format
msgid "The system will restart automatically in %d second."
msgid_plural "The system will restart automatically in %d seconds."
msgstr[0] "Sistem ini akan otomatis dimulai ulang dalam %d detik."
#: ../js/ui/endSessionDialog.js:112
#: ../js/ui/endSessionDialog.js:114
msgctxt "title"
msgid "Restart & Install Updates"
msgstr "Start Ulang & Pasang Pemutakhiran"
#: ../js/ui/endSessionDialog.js:114
#: ../js/ui/endSessionDialog.js:116
#, javascript-format
msgid "The system will automatically restart and install updates in %d second."
msgid_plural ""
@ -1005,27 +1017,27 @@ msgstr[0] ""
"Sistem ini akan otomatis dimulai ulang dan memasang pemutakhiran dalam %d "
"detik."
#: ../js/ui/endSessionDialog.js:119
#: ../js/ui/endSessionDialog.js:121
msgctxt "button"
msgid "Restart & Install"
msgstr "Start Ulang & Pasang"
#: ../js/ui/endSessionDialog.js:275
#: ../js/ui/endSessionDialog.js:277
msgid "Some applications are busy or have unsaved work."
msgstr "Beberapa aplikasi sedang sibuk atau belum disimpan perubahannya."
#: ../js/ui/endSessionDialog.js:282
#: ../js/ui/endSessionDialog.js:284
msgid "Other users are logged in."
msgstr "Pengguna lain sedang log masuk."
#. Translators: Remote here refers to a remote session, like a ssh login */
#: ../js/ui/endSessionDialog.js:486
#: ../js/ui/endSessionDialog.js:488
#, javascript-format
msgid "%s (remote)"
msgstr "%s (jarak jauh)"
#. Translators: Console here refers to a tty like a VT console */
#: ../js/ui/endSessionDialog.js:489
#: ../js/ui/endSessionDialog.js:491
#, javascript-format
msgid "%s (console)"
msgstr "%s (konsol)"
@ -1036,8 +1048,8 @@ msgstr "Pasang"
#: ../js/ui/extensionDownloader.js:204
#, javascript-format
msgid "Download and install %s from extensions.gnome.org?"
msgstr "Unduh dan pasang \"%s\" dari extensions.gnome.org?"
msgid "Download and install '%s' from extensions.gnome.org?"
msgstr "Unduh dan pasang '%s' dari extensions.gnome.org?"
#: ../js/ui/keyboard.js:641 ../js/ui/status/keyboard.js:335
msgid "Keyboard"
@ -1069,7 +1081,7 @@ msgstr "Diaktifkan"
#. because it's disabled by rfkill (airplane mode) */
#. translators:
#. * The device has been disabled
#: ../js/ui/lookingGlass.js:717 ../js/ui/status/network.js:518
#: ../js/ui/lookingGlass.js:717 ../js/ui/status/network.js:472
#: ../src/gvc/gvc-mixer-control.c:1830
msgid "Disabled"
msgstr "Dinonaktifkan"
@ -1094,48 +1106,48 @@ msgstr "Tilik Sumber"
msgid "Web Page"
msgstr "Halaman Web"
#: ../js/ui/messageTray.js:1312
#: ../js/ui/messageTray.js:1310
msgid "Open"
msgstr "Buka"
#: ../js/ui/messageTray.js:1319
#: ../js/ui/messageTray.js:1317
msgid "Remove"
msgstr "Hapus"
#: ../js/ui/messageTray.js:1616
#: ../js/ui/messageTray.js:1614
msgid "Notifications"
msgstr "Pemberitahuan"
#: ../js/ui/messageTray.js:1623
#: ../js/ui/messageTray.js:1621
msgid "Clear Messages"
msgstr "Bersihkan Pesan"
#: ../js/ui/messageTray.js:1642
#: ../js/ui/messageTray.js:1640
msgid "Notification Settings"
msgstr "Pengaturan Pemberitahuan"
#: ../js/ui/messageTray.js:1695
#: ../js/ui/messageTray.js:1693
msgid "Tray Menu"
msgstr "Menu Baki"
#: ../js/ui/messageTray.js:1912
#: ../js/ui/messageTray.js:1910
msgid "No Messages"
msgstr "Tiada Pesan"
#: ../js/ui/messageTray.js:1950
#: ../js/ui/messageTray.js:1948
msgid "Message Tray"
msgstr "Baki Pesan"
#: ../js/ui/messageTray.js:2934
#: ../js/ui/messageTray.js:2931
msgid "System Information"
msgstr "Informasi Sistem"
#: ../js/ui/notificationDaemon.js:515 ../src/shell-app.c:399
#: ../js/ui/notificationDaemon.js:515 ../src/shell-app.c:397
msgctxt "program"
msgid "Unknown"
msgstr "Tak dikenal"
#: ../js/ui/overviewControls.js:483 ../js/ui/screenShield.js:151
#: ../js/ui/overviewControls.js:483 ../js/ui/screenShield.js:153
#, javascript-format
msgid "%d new message"
msgid_plural "%d new messages"
@ -1167,7 +1179,7 @@ msgstr "Keluar"
msgid "Activities"
msgstr "Aktivitas"
#: ../js/ui/panel.js:905
#: ../js/ui/panel.js:903
msgid "Top Bar"
msgstr "Bar Atas"
@ -1186,29 +1198,29 @@ msgstr "Tutup"
#. Translators: This is a time format for a date in
#. long format */
#: ../js/ui/screenShield.js:88
#: ../js/ui/screenShield.js:89
msgid "%A, %B %d"
msgstr "%A, %d %B"
#: ../js/ui/screenShield.js:153
#: ../js/ui/screenShield.js:155
#, javascript-format
msgid "%d new notification"
msgid_plural "%d new notifications"
msgstr[0] "%d pemberitahuan baru"
#: ../js/ui/screenShield.js:473 ../js/ui/status/system.js:342
#: ../js/ui/screenShield.js:474 ../js/ui/status/system.js:342
msgid "Lock"
msgstr "Kunci"
#: ../js/ui/screenShield.js:707
#: ../js/ui/screenShield.js:708
msgid "GNOME needs to lock the screen"
msgstr "GNOME perlu mengunci layar"
#: ../js/ui/screenShield.js:834 ../js/ui/screenShield.js:1301
#: ../js/ui/screenShield.js:835 ../js/ui/screenShield.js:1302
msgid "Unable to lock"
msgstr "Tak bisa mengunci"
#: ../js/ui/screenShield.js:835 ../js/ui/screenShield.js:1302
#: ../js/ui/screenShield.js:836 ../js/ui/screenShield.js:1303
msgid "Lock was blocked by an application"
msgstr "Kunci diblokir oleh suatu aplikasi"
@ -1293,7 +1305,7 @@ msgid "Bluetooth"
msgstr "Bluetooth"
#: ../js/ui/status/bluetooth.js:47 ../js/ui/status/network.js:132
#: ../js/ui/status/network.js:1108 ../js/ui/status/rfkill.js:48
#: ../js/ui/status/network.js:1083 ../js/ui/status/rfkill.js:48
msgid "Turn Off"
msgstr "Matikan"
@ -1319,99 +1331,95 @@ msgstr "Tampilkan Tata Letak Papan Tik"
msgid "<unknown>"
msgstr "<tak dikenal>"
#: ../js/ui/status/network.js:221 ../js/ui/status/network.js:383
#: ../js/ui/status/network.js:1129
#: ../js/ui/status/network.js:222 ../js/ui/status/network.js:379
#: ../js/ui/status/network.js:1104
msgid "Off"
msgstr "Mati"
#. Translators: this is for network devices that are physically present but are not
#. under NetworkManager's control (and thus cannot be used in the menu) */
#: ../js/ui/status/network.js:389
#: ../js/ui/status/network.js:385
msgid "unmanaged"
msgstr "tak dikelola"
#: ../js/ui/status/network.js:391
#: ../js/ui/status/network.js:387
msgid "disconnecting..."
msgstr "memutus..."
#: ../js/ui/status/network.js:397 ../js/ui/status/network.js:1183
#: ../js/ui/status/network.js:393 ../js/ui/status/network.js:1158
msgid "connecting..."
msgstr "menghubungi..."
#. Translators: this is for network connections that require some kind of key or password */
#: ../js/ui/status/network.js:400 ../js/ui/status/network.js:1186
#: ../js/ui/status/network.js:396 ../js/ui/status/network.js:1161
msgid "authentication required"
msgstr "diperlukan otentikasi"
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing */
#: ../js/ui/status/network.js:408
#: ../js/ui/status/network.js:404
msgid "firmware missing"
msgstr "firmware hilang"
#. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage */
#: ../js/ui/status/network.js:412
#: ../js/ui/status/network.js:408
msgid "unavailable"
msgstr "tidak tersedia"
#: ../js/ui/status/network.js:414 ../js/ui/status/network.js:1188
#: ../js/ui/status/network.js:410 ../js/ui/status/network.js:1163
msgid "connection failed"
msgstr "koneksi gagal"
#: ../js/ui/status/network.js:430
msgid "Wired Settings"
msgstr "Pengaturan Kabel"
#: ../js/ui/status/network.js:472 ../js/ui/status/network.js:558
#: ../js/ui/status/network.js:426 ../js/ui/status/network.js:512
msgid "Mobile Broadband Settings"
msgstr "Pengaturan Data Seluler"
#: ../js/ui/status/network.js:514 ../js/ui/status/network.js:1127
#: ../js/ui/status/network.js:468 ../js/ui/status/network.js:1102
msgid "Hardware Disabled"
msgstr "Perangkat Keras Dinonaktifkan"
#: ../js/ui/status/network.js:725
#: ../js/ui/status/network.js:694
msgid "Wi-Fi Networks"
msgstr "Jaringan Wi-Fi"
#: ../js/ui/status/network.js:727
#: ../js/ui/status/network.js:696
msgid "Select a network"
msgstr "Pilih jaringan"
#: ../js/ui/status/network.js:751
#: ../js/ui/status/network.js:720
msgid "No Networks"
msgstr "Tiada Jaringan"
#: ../js/ui/status/network.js:1014
#: ../js/ui/status/network.js:989
msgid "Select Network"
msgstr "Pilih Jaringan"
#: ../js/ui/status/network.js:1020
#: ../js/ui/status/network.js:995
msgid "Wi-Fi Settings"
msgstr "Pengaturan Wi-Fi"
#: ../js/ui/status/network.js:1108
#: ../js/ui/status/network.js:1083
msgid "Turn On"
msgstr "Nyalakan"
#: ../js/ui/status/network.js:1131
#: ../js/ui/status/network.js:1106
msgid "Not Connected"
msgstr "Tak Tersambung"
#: ../js/ui/status/network.js:1251
#: ../js/ui/status/network.js:1226
msgid "VPN"
msgstr "VPN"
#: ../js/ui/status/network.js:1394
#: ../js/ui/status/network.js:1366
msgid "Network Manager"
msgstr "Manajer Jaringan"
#: ../js/ui/status/network.js:1433
#: ../js/ui/status/network.js:1405
msgid "Connection failed"
msgstr "Koneksi gagal"
#: ../js/ui/status/network.js:1434
#: ../js/ui/status/network.js:1406
msgid "Activation of network connection failed"
msgstr "Aktivasi koneksi jaringan gagal"
@ -1507,8 +1515,8 @@ msgstr "Cari"
#: ../js/ui/windowAttentionHandler.js:19
#, javascript-format
msgid "%s is ready"
msgstr "'%s' siap"
msgid "'%s' is ready"
msgstr "'%s' telah siap"
#: ../js/ui/windowManager.js:56
msgid "Do you want to keep these display settings?"
@ -1571,10 +1579,10 @@ msgstr "Menggunakan mode tertentu, mis. \"gdm\" untuk layar masuk"
msgid "List possible modes"
msgstr "Menampilkan mode yang mungkin"
#: ../src/shell-app.c:642
#: ../src/shell-app.c:640
#, c-format
msgid "Failed to launch %s"
msgstr "Gagal meluncurkan \"%s\""
msgid "Failed to launch '%s'"
msgstr "Gagal meluncurkan '%s'"
#: ../src/shell-keyring-prompt.c:714
msgid "Passwords do not match."

438
po/kk.po

File diff suppressed because it is too large Load Diff

728
po/kn.po

File diff suppressed because it is too large Load Diff

477
po/nb.po
View File

@ -2,14 +2,14 @@
# Copyright (C) 2009 THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the gnome-shell package.
#
# Kjartan Maraas <kmaraas@gnome.org>, 2009-2014.
# Kjartan Maraas <kmaraas@gnome.org>, 2009-2013.
# Torstein Adolf Winterseth <kvikende@fsfe.org>, 2010.
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell 3.11.x\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-02-19 19:43+0100\n"
"PO-Revision-Date: 2014-02-19 19:45+0100\n"
"POT-Creation-Date: 2014-01-21 19:59+0100\n"
"PO-Revision-Date: 2014-01-21 20:03+0100\n"
"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
"Language-Team: Norwegian bokmål <i18n-nb@lister.ping.uio.no>\n"
"Language: \n"
@ -86,28 +86,13 @@ msgid ""
"should be loaded. Any extension that wants to be loaded needs to be in this "
"list. You can also manipulate this list with the EnableExtension and "
"DisableExtension D-Bus methods on org.gnome.Shell."
msgstr ""
"GNOME Shell-utvidelser har en UUID-egenskap. Denne nøkkelen lister "
"utvidelser som skal lastes. Alle utvidelser som ønsker å bli lastet må være "
"i denne listen. Du kan også manipulere denne listen med DBus-metodene "
"EnablExtension og DisableExtension på org.gnome.Shell."
msgstr "GNOME Shell-utvidelser har en UUID-egenskap. Denne nøkkelen lister utvidelser som skal lastes. Alle utvidelser som ønsker å bli lastet må være i denne listen. Du kan også manipulere denne listen med DBus-metodene EnablExtension og DisableExtension på org.gnome.Shell."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:5
msgid "Disables the validation of extension version compatibility"
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.in.h:6
msgid ""
"GNOME Shell will only load extensions that claim to support the current "
"running version. Enabling this option will disable this check and try to "
"load all extensions regardless of the versions they claim to support."
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.in.h:7
msgid "List of desktop file IDs for favorite applications"
msgstr "Liste av skrivebordfil-ider for favorittprogrammer"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:8
#: ../data/org.gnome.shell.gschema.xml.in.in.h:6
msgid ""
"The applications corresponding to these identifiers will be displayed in the "
"favorites area."
@ -115,30 +100,30 @@ msgstr ""
"Programmene som passer til disse identifikatorene vil bli vist i "
"favorittområdet."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:9
#: ../data/org.gnome.shell.gschema.xml.in.in.h:7
msgid "History for command (Alt-F2) dialog"
msgstr "Historikk for kommandodialog (Alt-F2)"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:10
#: ../data/org.gnome.shell.gschema.xml.in.in.h:8
msgid "History for the looking glass dialog"
msgstr "Historikk for forstørrelsesglass-dialogen"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:11
#: ../data/org.gnome.shell.gschema.xml.in.in.h:9
msgid "Always show the 'Log out' menu item in the user menu."
msgstr "Alltid vis menyoppføringen «Logg ut» i brukermenyen."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:12
#: ../data/org.gnome.shell.gschema.xml.in.in.h:10
msgid ""
"This key overrides the automatic hiding of the 'Log out' menu item in single-"
"user, single-session situations."
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
#: ../data/org.gnome.shell.gschema.xml.in.in.h:11
msgid ""
"Whether to remember password for mounting encrypted or remote filesystems"
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
#: ../data/org.gnome.shell.gschema.xml.in.in.h:12
msgid ""
"The shell will request a password when an encrypted device or a remote "
"filesystem is mounted. If the password can be saved for future use a "
@ -146,104 +131,90 @@ msgid ""
"state of the checkbox."
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
#: ../data/org.gnome.shell.gschema.xml.in.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.in.h:16
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
msgid "If true, display the ISO week date in the calendar."
msgstr "Viser ISO-ukedato i kalenderen hvis «true»."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
msgid "Keybinding to open the application menu"
msgstr "Tastaturbinding som åpner programmenyen"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
msgid "Keybinding to open the application menu."
msgstr "Tastaturbinding som åpner programmenyen."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
msgid "Keybinding to open the \"Show Applications\" view"
msgstr "Tastaturbinding som åpner visningen «Vis programmer»"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
msgid ""
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
msgstr ""
"Tastaturbinding som åpner visningen «Vis programmer» i aktivitetsoversikten."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
msgid "Keybinding to open the overview"
msgstr "Tastaturbinding som åpner oversikten"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
msgid "Keybinding to open the Activities Overview."
msgstr "Tastaturbinding som åpner aktivitetsoversikten."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
msgid "Keybinding to toggle the visibility of the message tray"
msgstr "Tastaturbinding som slår av/på synlighet for meldingstrau"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
msgid "Keybinding to toggle the visibility of the message tray."
msgstr "Tastaturbinding som slår av/på synlighet for meldingstrauet."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
msgid "Keybinding to focus the active notification"
msgstr "Tastaturbinding som fokuserer aktiv varsling"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
msgid "Keybinding to focus the active notification."
msgstr "Tastaturbinding som fokuserer aktiv varsling."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
msgid "Which keyboard to use"
msgstr "Tastatur som skal brukes"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
msgid "The type of keyboard to use."
msgstr "Type tastatur som skal brukes."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
msgid "The maximum accuracy level of location."
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
msgid ""
"Configures the maximum level of location accuracy applications are allowed "
"to see. Valid options are 'off' (disable location tracking), 'country', "
"'city', 'neighborhood', 'street', and 'exact' (typically requires GPS "
"receiver). Please keep in mind that this only controls what Geoclue will "
"allow applications to see and they can find user's location on their own "
"using network resources (albeit with street-level accuracy at best)."
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
msgid "The application icon mode."
msgstr "Ikonmodus for programmet."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
msgid ""
"Configures how the windows are shown in the switcher. Valid possibilities "
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
"only' (shows only the application icon) or 'both'."
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
msgid "Attach modal dialog to the parent window"
msgstr "Fest modal dialog til opphavsvinduet"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
msgid ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgstr ""
"Denne nøkkelen overstyrer nøkkelen i org.gnome.mutter når GNOME Shell kjøres."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
msgid "Arrangement of buttons on the titlebar"
msgstr "Plassering av knappene på tittellinjen"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
msgid ""
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
"GNOME Shell."
@ -251,19 +222,19 @@ msgstr ""
"Denne nøkkelen overstyrer nøkkelen i org.gnome.desktop.wm.preferences når "
"GNOME Shell kjøres."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34
msgid "Workspaces are managed dynamically"
msgstr "Arbeidsområder håndteres dynamisk"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:39
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
msgid "Workspaces only on primary monitor"
msgstr "Arbeidsområder vises kun på hovedskjerm"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:40
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr ""
@ -283,7 +254,7 @@ msgstr "Velg en utvidelse som skal konfigureres med komboboksen over."
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:136
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:357
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/network.js:883
#: ../js/ui/status/network.js:724
msgid "Cancel"
msgstr "Avbryt"
@ -344,27 +315,27 @@ msgstr "Klarte ikke å lese kommando:"
msgid "Execution of “%s” failed:"
msgstr "Kjøring av «%s» feilet:"
#: ../js/ui/appDisplay.js:629
#: ../js/ui/appDisplay.js:543
msgid "Frequently used applications will appear here"
msgstr "Ofte brukte programmer vil vises her"
#: ../js/ui/appDisplay.js:740
#: ../js/ui/appDisplay.js:663
msgid "Frequent"
msgstr "Ofte"
#: ../js/ui/appDisplay.js:747
#: ../js/ui/appDisplay.js:670
msgid "All"
msgstr "Alle"
#: ../js/ui/appDisplay.js:1552
#: ../js/ui/appDisplay.js:1499
msgid "New Window"
msgstr "Nytt vindu"
#: ../js/ui/appDisplay.js:1574 ../js/ui/dash.js:285
#: ../js/ui/appDisplay.js:1521 ../js/ui/dash.js:285
msgid "Remove from Favorites"
msgstr "Fjern fra favoritter"
#: ../js/ui/appDisplay.js:1580
#: ../js/ui/appDisplay.js:1527
msgid "Add to Favorites"
msgstr "Legg til i favoritter"
@ -577,8 +548,8 @@ msgstr "Passord:"
msgid "Type again:"
msgstr "Skriv på nytt:"
#: ../js/ui/components/networkAgent.js:131 ../js/ui/status/network.js:250
#: ../js/ui/status/network.js:327 ../js/ui/status/network.js:886
#: ../js/ui/components/networkAgent.js:131 ../js/ui/status/network.js:131
#: ../js/ui/status/network.js:293 ../js/ui/status/network.js:727
msgid "Connect"
msgstr "Koble til"
@ -672,102 +643,60 @@ msgstr "Autentiser"
msgid "Sorry, that didn't work. Please try again."
msgstr "Beklager, det virket ikke. Vennligst prøv igjen."
#: ../js/ui/components/telepathyClient.js:240
#: ../js/ui/components/telepathyClient.js:237
msgid "Invitation"
msgstr "Invitasjon"
#: ../js/ui/components/telepathyClient.js:300
#: ../js/ui/components/telepathyClient.js:297
msgid "Call"
msgstr "Ring"
#: ../js/ui/components/telepathyClient.js:316
#: ../js/ui/components/telepathyClient.js:313
msgid "File Transfer"
msgstr "Filoverføring"
#: ../js/ui/components/telepathyClient.js:420
#: ../js/ui/components/telepathyClient.js:417
msgid "Chat"
msgstr "Prat"
#: ../js/ui/components/telepathyClient.js:483
#: ../js/ui/components/telepathyClient.js:480
msgid "Unmute"
msgstr "Fjern demping"
#: ../js/ui/components/telepathyClient.js:483
#: ../js/ui/components/telepathyClient.js:480
msgid "Mute"
msgstr "Demp"
#. Translators: Time in 24h format */
#: ../js/ui/components/telepathyClient.js:955
msgid "%H%M"
msgstr "%H.%M"
#. Translators: this is the word "Yesterday" followed by a time string. i.e. "Yesterday, 14:30"*/
#: ../js/ui/components/telepathyClient.js:941
msgid "<b>Yesterday</b>, <b>%H:%M</b>"
msgstr "<b>I går</b>, <b>%H.%M</b>"
#. Translators: this is the word "Yesterday" followed by a
#. time string in 24h format. i.e. "Yesterday, 14:30" */
#: ../js/ui/components/telepathyClient.js:962
msgid "Yesterday, %H%M"
msgstr "I går, %H.%M"
#. Translators: this is the week day name followed by a time string. i.e. "Monday, 14:30*/
#: ../js/ui/components/telepathyClient.js:947
msgid "<b>%A</b>, <b>%H:%M</b>"
msgstr "<b>%A</b>, <b>%H.%M</b>"
#. Translators: this is the week day name followed by a time
#. string in 24h format. i.e. "Monday, 14:30" */
#: ../js/ui/components/telepathyClient.js:969
msgid "%A, %H%M"
msgstr "%A, %H.%M"
#. Translators: this is the month name and day number followed by a time string. i.e. "May 25, 14:30"*/
#: ../js/ui/components/telepathyClient.js:952
msgid "<b>%B</b> <b>%d</b>, <b>%H:%M</b>"
msgstr "<b>%d</b>, <b>%B</b>, <b>%H.%M</b>"
#. Translators: this is the month name and day number
#. followed by a time string in 24h format.
#. i.e. "May 25, 14:30" */
#: ../js/ui/components/telepathyClient.js:976
msgid "%B %d, %H%M"
msgstr "%d %B, %H.%M"
#. Translators: this is the month name, day number, year
#. number followed by a time string in 24h format.
#. i.e. "May 25 2012, 14:30" */
#: ../js/ui/components/telepathyClient.js:982
msgid "%B %d %Y, %H%M"
msgstr "%d %B %Y, %H.%M"
#. Translators: Time in 24h format */
#: ../js/ui/components/telepathyClient.js:991
msgid "%l%M %p"
msgstr "%H.%M"
#. Translators: this is the word "Yesterday" followed by a
#. time string in 12h format. i.e. "Yesterday, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:998
msgid "Yesterday, %l%M %p"
msgstr "I går, %H.%M"
#. Translators: this is the week day name followed by a time
#. string in 12h format. i.e. "Monday, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:1005
msgid "%A, %l%M %p"
msgstr "%A, %H.%M"
#. Translators: this is the month name and day number
#. followed by a time string in 12h format.
#. i.e. "May 25, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:1012
msgid "%B %d, %l%M %p"
msgstr "%d %B, %H.%M"
#. Translators: this is the month name, day number, year
#. number followed by a time string in 12h format.
#. i.e. "May 25 2012, 2:30 pm"*/
#: ../js/ui/components/telepathyClient.js:1018
msgid "%B %d %Y, %l%M %p"
msgstr "%d %B %Y, %H.%M"
#. Translators: this is the month name, day number, year number followed by a time string. i.e. "May 25 2012, 14:30"*/
#: ../js/ui/components/telepathyClient.js:956
msgid "<b>%B</b> <b>%d</b> <b>%Y</b>, <b>%H:%M</b> "
msgstr "<b>%d</b> <b>%B</b> <b>%Y</b>, <b>%H.%M</b> "
#. Translators: this is the other person changing their old IM name to their new
#. IM name. */
#: ../js/ui/components/telepathyClient.js:1051
#: ../js/ui/components/telepathyClient.js:987
#, javascript-format
msgid "%s is now known as %s"
msgstr "%s er nå kjent som %s"
#. translators: argument is a room name like
#. * room@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1154
#: ../js/ui/components/telepathyClient.js:1090
#, javascript-format
msgid "Invitation to %s"
msgstr "Invitasjon til %s"
@ -775,38 +704,38 @@ msgstr "Invitasjon til %s"
#. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example. */
#: ../js/ui/components/telepathyClient.js:1162
#: ../js/ui/components/telepathyClient.js:1098
#, javascript-format
msgid "%s is inviting you to join %s"
msgstr "%s inviterer deg til å bli med i %s"
#: ../js/ui/components/telepathyClient.js:1164
#: ../js/ui/components/telepathyClient.js:1199
#: ../js/ui/components/telepathyClient.js:1233
#: ../js/ui/components/telepathyClient.js:1290
#: ../js/ui/components/telepathyClient.js:1100
#: ../js/ui/components/telepathyClient.js:1135
#: ../js/ui/components/telepathyClient.js:1169
#: ../js/ui/components/telepathyClient.js:1226
msgid "Decline"
msgstr "Avslå"
#: ../js/ui/components/telepathyClient.js:1170
#: ../js/ui/components/telepathyClient.js:1239
#: ../js/ui/components/telepathyClient.js:1295
#: ../js/ui/components/telepathyClient.js:1106
#: ../js/ui/components/telepathyClient.js:1175
#: ../js/ui/components/telepathyClient.js:1231
msgid "Accept"
msgstr "Godta"
#. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1189
#: ../js/ui/components/telepathyClient.js:1125
#, javascript-format
msgid "Video call from %s"
msgstr "Videosamtale fra %s"
#. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1192
#: ../js/ui/components/telepathyClient.js:1128
#, javascript-format
msgid "Call from %s"
msgstr "Samtale fra %s"
#. translators: this is a button label (verb), not a noun */
#: ../js/ui/components/telepathyClient.js:1206
#: ../js/ui/components/telepathyClient.js:1142
msgid "Answer"
msgstr "Svar"
@ -815,110 +744,110 @@ msgstr "Svar"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#. */
#: ../js/ui/components/telepathyClient.js:1227
#: ../js/ui/components/telepathyClient.js:1163
#, javascript-format
msgid "%s is sending you %s"
msgstr "%s sender deg %s"
#. To translators: The parameter is the contact's alias */
#: ../js/ui/components/telepathyClient.js:1256
#: ../js/ui/components/telepathyClient.js:1192
#, javascript-format
msgid "%s would like permission to see when you are online"
msgstr "%s vil ha rettigheter til å se når du er tilkoblet"
#: ../js/ui/components/telepathyClient.js:1341
#: ../js/ui/components/telepathyClient.js:1277
msgid "Network error"
msgstr "Nettverksfeil"
#: ../js/ui/components/telepathyClient.js:1343
#: ../js/ui/components/telepathyClient.js:1279
msgid "Authentication failed"
msgstr "Autentisering feilet"
#: ../js/ui/components/telepathyClient.js:1345
#: ../js/ui/components/telepathyClient.js:1281
msgid "Encryption error"
msgstr "Feil ved kryptering"
#: ../js/ui/components/telepathyClient.js:1347
#: ../js/ui/components/telepathyClient.js:1283
msgid "Certificate not provided"
msgstr "Sertifikat ikke oppgitt"
#: ../js/ui/components/telepathyClient.js:1349
#: ../js/ui/components/telepathyClient.js:1285
msgid "Certificate untrusted"
msgstr "Stoler ikke på sertifikatet"
#: ../js/ui/components/telepathyClient.js:1351
#: ../js/ui/components/telepathyClient.js:1287
msgid "Certificate expired"
msgstr "Sertifikatet er utløpt"
#: ../js/ui/components/telepathyClient.js:1353
#: ../js/ui/components/telepathyClient.js:1289
msgid "Certificate not activated"
msgstr "Sertifikatet er ikke aktivert"
#: ../js/ui/components/telepathyClient.js:1355
#: ../js/ui/components/telepathyClient.js:1291
msgid "Certificate hostname mismatch"
msgstr "Feil vertsnavn for sertifikat"
#: ../js/ui/components/telepathyClient.js:1357
#: ../js/ui/components/telepathyClient.js:1293
msgid "Certificate fingerprint mismatch"
msgstr "Feil fingeravtrykk for sertifikat"
#: ../js/ui/components/telepathyClient.js:1359
#: ../js/ui/components/telepathyClient.js:1295
msgid "Certificate self-signed"
msgstr "Sertifikatet er selvsignert"
#: ../js/ui/components/telepathyClient.js:1361
#: ../js/ui/components/telepathyClient.js:1297
msgid "Status is set to offline"
msgstr "Status er satt til frakoblet"
#: ../js/ui/components/telepathyClient.js:1363
#: ../js/ui/components/telepathyClient.js:1299
msgid "Encryption is not available"
msgstr "Kryptering er ikke tilgjengelig"
#: ../js/ui/components/telepathyClient.js:1365
#: ../js/ui/components/telepathyClient.js:1301
msgid "Certificate is invalid"
msgstr "Sertifikatet er ugyldig"
#: ../js/ui/components/telepathyClient.js:1367
#: ../js/ui/components/telepathyClient.js:1303
msgid "Connection has been refused"
msgstr "Tilkobling ble nektet"
#: ../js/ui/components/telepathyClient.js:1369
#: ../js/ui/components/telepathyClient.js:1305
msgid "Connection can't be established"
msgstr "Tilkobling kan ikke etableres"
#: ../js/ui/components/telepathyClient.js:1371
#: ../js/ui/components/telepathyClient.js:1307
msgid "Connection has been lost"
msgstr "Tilkobling tapt"
#: ../js/ui/components/telepathyClient.js:1373
#: ../js/ui/components/telepathyClient.js:1309
msgid "This account is already connected to the server"
msgstr "Denne kontoen er allerede koblet til tjeneren"
#: ../js/ui/components/telepathyClient.js:1375
#: ../js/ui/components/telepathyClient.js:1311
msgid ""
"Connection has been replaced by a new connection using the same resource"
msgstr ""
"Tilkoblingen har blitt erstattet av en ny tilkobling som bruker samme ressurs"
#: ../js/ui/components/telepathyClient.js:1377
#: ../js/ui/components/telepathyClient.js:1313
msgid "The account already exists on the server"
msgstr "Kontoen eksisterer allerede på tjeneren"
#: ../js/ui/components/telepathyClient.js:1379
#: ../js/ui/components/telepathyClient.js:1315
msgid "Server is currently too busy to handle the connection"
msgstr "Tjener er for opptatt til å håndtere tilkoblingen"
#: ../js/ui/components/telepathyClient.js:1381
#: ../js/ui/components/telepathyClient.js:1317
msgid "Certificate has been revoked"
msgstr "Sertifikatet er tilbaketrukket"
#: ../js/ui/components/telepathyClient.js:1383
#: ../js/ui/components/telepathyClient.js:1319
msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr ""
"Sertifikatet bruker en usikker sifferalgoritme eller er krytografisk svakt"
#: ../js/ui/components/telepathyClient.js:1385
#: ../js/ui/components/telepathyClient.js:1321
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
@ -926,22 +855,22 @@ msgstr ""
"Lengden eller dybden på tjenersertifikatet oversteg grensen som er satt i "
"kryptografibiblioteket"
#: ../js/ui/components/telepathyClient.js:1387
#: ../js/ui/components/telepathyClient.js:1323
msgid "Internal error"
msgstr "Intern feil"
#. translators: argument is the account name, like
#. * name@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1397
#: ../js/ui/components/telepathyClient.js:1333
#, javascript-format
msgid "Unable to connect to %s"
msgstr "Kan ikke koble til %s"
#: ../js/ui/components/telepathyClient.js:1402
#: ../js/ui/components/telepathyClient.js:1338
msgid "View account"
msgstr "Vis konto"
#: ../js/ui/components/telepathyClient.js:1434
#: ../js/ui/components/telepathyClient.js:1370
msgid "Unknown reason"
msgstr "Ukjent årsak"
@ -953,7 +882,7 @@ msgstr "Vinduer"
msgid "Show Applications"
msgstr "Vis programmer"
#: ../js/ui/dash.js:445
#: ../js/ui/dash.js:443
msgid "Dash"
msgstr "Favoritter"
@ -1121,7 +1050,7 @@ msgstr "Aktivert"
#. because it's disabled by rfkill (airplane mode) */
#. translators:
#. * The device has been disabled
#: ../js/ui/lookingGlass.js:717 ../js/ui/status/network.js:560
#: ../js/ui/lookingGlass.js:717 ../js/ui/status/network.js:470
#: ../src/gvc/gvc-mixer-control.c:1830
msgid "Disabled"
msgstr "Deaktivert"
@ -1146,43 +1075,43 @@ msgstr "Vis kildekode"
msgid "Web Page"
msgstr "Nettside"
#: ../js/ui/messageTray.js:1324
#: ../js/ui/messageTray.js:1312
msgid "Open"
msgstr "Åpne"
#: ../js/ui/messageTray.js:1331
#: ../js/ui/messageTray.js:1319
msgid "Remove"
msgstr "Fjern"
#: ../js/ui/messageTray.js:1628
#: ../js/ui/messageTray.js:1616
msgid "Notifications"
msgstr "Varslinger"
#: ../js/ui/messageTray.js:1635
#: ../js/ui/messageTray.js:1623
msgid "Clear Messages"
msgstr "Tøm meldinger"
#: ../js/ui/messageTray.js:1654
#: ../js/ui/messageTray.js:1642
msgid "Notification Settings"
msgstr "Innstillinger for varsling"
#: ../js/ui/messageTray.js:1707
#: ../js/ui/messageTray.js:1695
msgid "Tray Menu"
msgstr "Meny for varslingsområde"
#: ../js/ui/messageTray.js:1924
#: ../js/ui/messageTray.js:1912
msgid "No Messages"
msgstr "Ingen meldinger"
#: ../js/ui/messageTray.js:1962
#: ../js/ui/messageTray.js:1950
msgid "Message Tray"
msgstr "Meldingstrau"
#: ../js/ui/messageTray.js:2946
#: ../js/ui/messageTray.js:2934
msgid "System Information"
msgstr "Systeminformasjon"
#: ../js/ui/notificationDaemon.js:515 ../src/shell-app.c:425
#: ../js/ui/notificationDaemon.js:515 ../src/shell-app.c:397
msgctxt "program"
msgid "Unknown"
msgstr "Ukjent"
@ -1220,11 +1149,11 @@ msgstr "Avslutt"
msgid "Activities"
msgstr "Aktiviteter"
#: ../js/ui/panel.js:914
#: ../js/ui/panel.js:903
msgid "Top Bar"
msgstr "Topp-panel"
#: ../js/ui/popupMenu.js:271
#: ../js/ui/popupMenu.js:260
msgid "toggle-switch-us"
msgstr "toggle-switch-intl"
@ -1249,19 +1178,19 @@ msgid_plural "%d new notifications"
msgstr[0] "%d ny varsling"
msgstr[1] "%d nye varslinger"
#: ../js/ui/screenShield.js:473 ../js/ui/status/system.js:342
#: ../js/ui/screenShield.js:472 ../js/ui/status/system.js:342
msgid "Lock"
msgstr "Lås"
#: ../js/ui/screenShield.js:707
#: ../js/ui/screenShield.js:706
msgid "GNOME needs to lock the screen"
msgstr "GNOME må låse skjermen"
#: ../js/ui/screenShield.js:834 ../js/ui/screenShield.js:1301
#: ../js/ui/screenShield.js:833 ../js/ui/screenShield.js:1300
msgid "Unable to lock"
msgstr "Kan ikke låse"
#: ../js/ui/screenShield.js:835 ../js/ui/screenShield.js:1302
#: ../js/ui/screenShield.js:834 ../js/ui/screenShield.js:1301
msgid "Lock was blocked by an application"
msgstr "Låsing ble stoppet av et program"
@ -1341,33 +1270,26 @@ msgstr "Høy kontrast"
msgid "Large Text"
msgstr "Stor tekst"
#: ../js/ui/status/bluetooth.js:48
#: ../js/ui/status/bluetooth.js:45
msgid "Bluetooth"
msgstr "Bluetooth"
#: ../js/ui/status/bluetooth.js:50 ../js/ui/status/location.js:62
#: ../js/ui/status/location.js:162 ../js/ui/status/network.js:151
#: ../js/ui/status/network.js:328 ../js/ui/status/network.js:1235
#: ../js/ui/status/network.js:1346 ../js/ui/status/rfkill.js:85
#: ../js/ui/status/rfkill.js:105
#: ../js/ui/status/bluetooth.js:47 ../js/ui/status/network.js:131
#: ../js/ui/status/network.js:1081 ../js/ui/status/rfkill.js:48
msgid "Turn Off"
msgstr "Slå av"
#: ../js/ui/status/bluetooth.js:53
#: ../js/ui/status/bluetooth.js:50
msgid "Bluetooth Settings"
msgstr "Innstillinger for Bluetooth"
#: ../js/ui/status/bluetooth.js:100
#: ../js/ui/status/bluetooth.js:98
#, javascript-format
msgid "%d Connected Device"
msgid_plural "%d Connected Devices"
msgstr[0] "%d tilkoblet enhet"
msgstr[1] "%d tilkoblede enheter"
#: ../js/ui/status/bluetooth.js:102 ../js/ui/status/network.js:1263
msgid "Not Connected"
msgstr "Ikke koblet til"
#: ../js/ui/status/brightness.js:44
msgid "Brightness"
msgstr "Lysstyrke"
@ -1376,156 +1298,99 @@ msgstr "Lysstyrke"
msgid "Show Keyboard Layout"
msgstr "Vis tastaturutforming"
#: ../js/ui/status/location.js:52
msgid "Location"
msgstr "Lokasjon"
#: ../js/ui/status/location.js:61 ../js/ui/status/location.js:161
#: ../js/ui/status/rfkill.js:84
msgid "On"
msgstr "På"
#: ../js/ui/status/location.js:158 ../js/ui/status/network.js:246
#: ../js/ui/status/network.js:425 ../js/ui/status/network.js:1261
msgid "Off"
msgstr "Av"
#: ../js/ui/status/location.js:159 ../js/ui/status/network.js:1235
msgid "Turn On"
msgstr "Slå på"
#: ../js/ui/status/network.js:74
#: ../js/ui/status/network.js:70
msgid "<unknown>"
msgstr "<ukjent>"
#: ../js/ui/status/network.js:220 ../js/ui/status/network.js:377
#: ../js/ui/status/network.js:1102
msgid "Off"
msgstr "Av"
#. Translators: this is for network devices that are physically present but are not
#. under NetworkManager's control (and thus cannot be used in the menu) */
#: ../js/ui/status/network.js:431
#: ../js/ui/status/network.js:383
msgid "unmanaged"
msgstr "ikke håndtert"
#: ../js/ui/status/network.js:433
#: ../js/ui/status/network.js:385
msgid "disconnecting..."
msgstr "kobler fra …"
#: ../js/ui/status/network.js:439 ../js/ui/status/network.js:1363
#: ../js/ui/status/network.js:391 ../js/ui/status/network.js:1156
msgid "connecting..."
msgstr "kobler til …"
#. Translators: this is for network connections that require some kind of key or password */
#: ../js/ui/status/network.js:442 ../js/ui/status/network.js:1366
#: ../js/ui/status/network.js:394 ../js/ui/status/network.js:1159
msgid "authentication required"
msgstr "autentisering kreves"
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing */
#: ../js/ui/status/network.js:450
#: ../js/ui/status/network.js:402
msgid "firmware missing"
msgstr "fastvare mangler"
#. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage */
#: ../js/ui/status/network.js:454
#: ../js/ui/status/network.js:406
msgid "unavailable"
msgstr "ikke tilgjengelig"
#: ../js/ui/status/network.js:456 ../js/ui/status/network.js:1368
#: ../js/ui/status/network.js:408 ../js/ui/status/network.js:1161
msgid "connection failed"
msgstr "tilkobling feilet"
#: ../js/ui/status/network.js:472
msgid "Wired Settings"
msgstr "Innstillinger for trådbundet nettverk"
#: ../js/ui/status/network.js:514 ../js/ui/status/network.js:592
#: ../js/ui/status/network.js:424 ../js/ui/status/network.js:510
msgid "Mobile Broadband Settings"
msgstr "Innstillinger for mobilt bredbånd"
#: ../js/ui/status/network.js:556 ../js/ui/status/network.js:1259
#: ../js/ui/status/network.js:466 ../js/ui/status/network.js:1100
msgid "Hardware Disabled"
msgstr "Maskinvare slått av"
#: ../js/ui/status/network.js:600
msgid "Use as Internet connection"
msgstr "Bruk som internettforbindelse"
#: ../js/ui/status/network.js:781
msgid "Airplane Mode is On"
msgstr "Flymodus er slått på"
#: ../js/ui/status/network.js:782
msgid "Wi-Fi is disabled when airplane mode is on."
msgstr "Trådløst blir slått av når flymodus slås på."
#: ../js/ui/status/network.js:783
msgid "Turn Off Airplane Mode"
msgstr "Slå av flymodus"
#: ../js/ui/status/network.js:792
msgid "Wi-Fi is Off"
msgstr "Trådløs er av"
#: ../js/ui/status/network.js:793
msgid "Wi-Fi needs to be turned on in order to connect to a network."
msgstr "Trådløs må slås på for å koble til et nettverk."
#: ../js/ui/status/network.js:794
msgid "Turn On Wi-Fi"
msgstr "Slå på trådløs"
#: ../js/ui/status/network.js:819
#: ../js/ui/status/network.js:692
msgid "Wi-Fi Networks"
msgstr "Wi-Fi nettverk"
#: ../js/ui/status/network.js:821
#: ../js/ui/status/network.js:694
msgid "Select a network"
msgstr "Velg et nettverk"
#: ../js/ui/status/network.js:850
#: ../js/ui/status/network.js:718
msgid "No Networks"
msgstr "Ingen nettverk"
#: ../js/ui/status/network.js:871 ../js/ui/status/rfkill.js:103
msgid "Use hardware switch to turn off"
msgstr "Bruk maskinvarebryter til å slå av"
#: ../js/ui/status/network.js:1141
#: ../js/ui/status/network.js:987
msgid "Select Network"
msgstr "Velg nettverk"
#: ../js/ui/status/network.js:1147
#: ../js/ui/status/network.js:993
msgid "Wi-Fi Settings"
msgstr "Innstillinger"
#: ../js/ui/status/network.js:1252
msgid "Hotspot Active"
msgstr "Trådløst aksesspunkt aktivt"
#: ../js/ui/status/network.js:1081
msgid "Turn On"
msgstr "Slå på"
#: ../js/ui/status/network.js:1255
msgid "Connecting"
msgstr "Kobler til"
#: ../js/ui/status/network.js:1104
msgid "Not Connected"
msgstr "Ikke koblet til"
#: ../js/ui/status/network.js:1434 ../js/ui/status/rfkill.js:88
msgid "Network Settings"
msgstr "Innstillinger for nettverk"
#: ../js/ui/status/network.js:1436
msgid "VPN Settings"
msgstr "Innstillinger for VPN"
#: ../js/ui/status/network.js:1455
#: ../js/ui/status/network.js:1224
msgid "VPN"
msgstr "VPN"
#: ../js/ui/status/network.js:1598
#: ../js/ui/status/network.js:1364
msgid "Network Manager"
msgstr "Nettverkshåndtering"
#: ../js/ui/status/network.js:1637
#: ../js/ui/status/network.js:1403
msgid "Connection failed"
msgstr "Tilkobling feilet"
#: ../js/ui/status/network.js:1638
#: ../js/ui/status/network.js:1404
msgid "Activation of network connection failed"
msgstr "Aktivering av nettverkstilkobling feilet"
@ -1559,10 +1424,18 @@ msgstr "UPS"
msgid "Battery"
msgstr "Batteri"
#: ../js/ui/status/rfkill.js:82
#: ../js/ui/status/rfkill.js:45
msgid "Airplane Mode"
msgstr "Flymodus"
#: ../js/ui/status/rfkill.js:47
msgid "On"
msgstr "På"
#: ../js/ui/status/rfkill.js:51
msgid "Network Settings"
msgstr "Innstillinger for nettverk"
#: ../js/ui/status/system.js:314
msgid "Switch User"
msgstr "Bytt bruker"
@ -1664,23 +1537,23 @@ msgstr[1] "%u innganger"
msgid "System Sounds"
msgstr "Systemlyder"
#: ../src/main.c:349
#: ../src/main.c:347
msgid "Print version"
msgstr "Skriv ut versjon"
#: ../src/main.c:355
#: ../src/main.c:353
msgid "Mode used by GDM for login screen"
msgstr "Modus som brukes av GDM for innloggingsskjermen"
#: ../src/main.c:361
#: ../src/main.c:359
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
msgstr "Bruk spesifikt modus, f.eks «gdm» for innloggingsskjerm"
#: ../src/main.c:367
#: ../src/main.c:365
msgid "List possible modes"
msgstr "Vis mulige modi"
#: ../src/shell-app.c:666
#: ../src/shell-app.c:640
#, c-format
msgid "Failed to launch “%s”"
msgstr "Klarte ikke å starte «%s»"

File diff suppressed because it is too large Load Diff

261
po/tg.po
View File

@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: Tajik Gnome\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2014-02-06 20:58+0000\n"
"PO-Revision-Date: 2014-02-07 09:58+0500\n"
"POT-Creation-Date: 2014-01-17 21:35+0000\n"
"PO-Revision-Date: 2014-01-18 16:47+0500\n"
"Last-Translator: Victor Ibragimov <victor.ibragimov@gmail.com>\n"
"Language-Team: \n"
"Language: tg\n"
@ -284,7 +284,7 @@ msgstr ""
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:136
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:357
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/network.js:857
#: ../js/ui/status/network.js:724
msgid "Cancel"
msgstr "Бекор кардан"
@ -342,30 +342,31 @@ msgstr "Фармон иҷро нашудааст:"
#: ../js/misc/util.js:156
#, javascript-format
#| msgid "Execution of '%s' failed:"
msgid "Execution of “%s” failed:"
msgstr "Иҷрокунии “%s” қатъ шудааст:"
#: ../js/ui/appDisplay.js:633
#: ../js/ui/appDisplay.js:540
msgid "Frequently used applications will appear here"
msgstr "Барномаҳои бештар истифодашуда ин ҷо намоиш дода мешаванд"
#: ../js/ui/appDisplay.js:744
#: ../js/ui/appDisplay.js:660
msgid "Frequent"
msgstr "Роиҷ"
#: ../js/ui/appDisplay.js:751
#: ../js/ui/appDisplay.js:667
msgid "All"
msgstr "Ҳама"
#: ../js/ui/appDisplay.js:1558
#: ../js/ui/appDisplay.js:1498
msgid "New Window"
msgstr "Равзанаи нав"
#: ../js/ui/appDisplay.js:1580 ../js/ui/dash.js:285
#: ../js/ui/appDisplay.js:1501 ../js/ui/dash.js:285
msgid "Remove from Favorites"
msgstr "Тоза кардан аз Баргузидаҳо"
#: ../js/ui/appDisplay.js:1586
#: ../js/ui/appDisplay.js:1502
msgid "Add to Favorites"
msgstr "Илова кардан ба Баргузидаҳо"
@ -578,8 +579,8 @@ msgstr "Парол:"
msgid "Type again:"
msgstr "Аз нав ворид кунед:"
#: ../js/ui/components/networkAgent.js:131 ../js/ui/status/network.js:227
#: ../js/ui/status/network.js:300 ../js/ui/status/network.js:860
#: ../js/ui/components/networkAgent.js:131 ../js/ui/status/network.js:131
#: ../js/ui/status/network.js:293 ../js/ui/status/network.js:727
msgid "Connect"
msgstr "Пайваст шудан"
@ -613,6 +614,9 @@ msgstr "Шабакаи бесим санҷиши ҳаққониятро тала
#: ../js/ui/components/networkAgent.js:312
#, javascript-format
#| msgid ""
#| "Passwords or encryption keys are required to access the wireless network "
#| "'%s'."
msgid ""
"Passwords or encryption keys are required to access the wireless network "
"“%s”."
@ -650,6 +654,7 @@ msgstr "Пароли шабакаи паҳннавори мобилӣ"
#: ../js/ui/components/networkAgent.js:339
#, javascript-format
#| msgid "A password is required to connect to '%s'."
msgid "A password is required to connect to “%s”."
msgstr "Барои пайваст шудан ба “%s” парол лозим аст."
@ -698,35 +703,35 @@ msgid "Mute"
msgstr "Бесадо кардан"
#. Translators: this is the word "Yesterday" followed by a time string. i.e. "Yesterday, 14:30"*/
#: ../js/ui/components/telepathyClient.js:952
#: ../js/ui/components/telepathyClient.js:941
msgid "<b>Yesterday</b>, <b>%H:%M</b>"
msgstr "<b>Дирӯз</b>, <b>%С:%Д</b>"
#. Translators: this is the week day name followed by a time string. i.e. "Monday, 14:30*/
#: ../js/ui/components/telepathyClient.js:958
#: ../js/ui/components/telepathyClient.js:947
msgid "<b>%A</b>, <b>%H:%M</b>"
msgstr "<b>%A</b>, <b>%H:%M</b>"
#. Translators: this is the month name and day number followed by a time string. i.e. "May 25, 14:30"*/
#: ../js/ui/components/telepathyClient.js:963
#: ../js/ui/components/telepathyClient.js:952
msgid "<b>%B</b> <b>%d</b>, <b>%H:%M</b>"
msgstr "<b>%B</b> <b>%d</b>, <b>%H:%M</b>"
#. Translators: this is the month name, day number, year number followed by a time string. i.e. "May 25 2012, 14:30"*/
#: ../js/ui/components/telepathyClient.js:967
#: ../js/ui/components/telepathyClient.js:956
msgid "<b>%B</b> <b>%d</b> <b>%Y</b>, <b>%H:%M</b> "
msgstr "<b>%B</b> <b>%d</b> <b>%Y</b>, <b>%H:%M</b> "
#. Translators: this is the other person changing their old IM name to their new
#. IM name. */
#: ../js/ui/components/telepathyClient.js:998
#: ../js/ui/components/telepathyClient.js:987
#, javascript-format
msgid "%s is now known as %s"
msgstr "%s аллакой бо номи %s номида мешавад"
#. translators: argument is a room name like
#. * room@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1101
#: ../js/ui/components/telepathyClient.js:1090
#, javascript-format
msgid "Invitation to %s"
msgstr "Даъватнома барои to %s"
@ -734,38 +739,38 @@ msgstr "Даъватнома барои to %s"
#. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example. */
#: ../js/ui/components/telepathyClient.js:1109
#: ../js/ui/components/telepathyClient.js:1098
#, javascript-format
msgid "%s is inviting you to join %s"
msgstr "%s шуморо барои ҳамроҳ шудан ба %s даъват мекунад"
#: ../js/ui/components/telepathyClient.js:1111
#: ../js/ui/components/telepathyClient.js:1146
#: ../js/ui/components/telepathyClient.js:1180
#: ../js/ui/components/telepathyClient.js:1237
#: ../js/ui/components/telepathyClient.js:1100
#: ../js/ui/components/telepathyClient.js:1135
#: ../js/ui/components/telepathyClient.js:1169
#: ../js/ui/components/telepathyClient.js:1226
msgid "Decline"
msgstr "Рад кардан"
#: ../js/ui/components/telepathyClient.js:1117
#: ../js/ui/components/telepathyClient.js:1186
#: ../js/ui/components/telepathyClient.js:1242
#: ../js/ui/components/telepathyClient.js:1106
#: ../js/ui/components/telepathyClient.js:1175
#: ../js/ui/components/telepathyClient.js:1231
msgid "Accept"
msgstr "Қабул кардан"
#. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1136
#: ../js/ui/components/telepathyClient.js:1125
#, javascript-format
msgid "Video call from %s"
msgstr "Занги видеоӣ аз %s"
#. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1139
#: ../js/ui/components/telepathyClient.js:1128
#, javascript-format
msgid "Call from %s"
msgstr "Занг аз %s"
#. translators: this is a button label (verb), not a noun */
#: ../js/ui/components/telepathyClient.js:1153
#: ../js/ui/components/telepathyClient.js:1142
msgid "Answer"
msgstr "Ҷавоб"
@ -774,110 +779,110 @@ msgstr "Ҷавоб"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#. */
#: ../js/ui/components/telepathyClient.js:1174
#: ../js/ui/components/telepathyClient.js:1163
#, javascript-format
msgid "%s is sending you %s"
msgstr "%s ба шумо %s-ро мефиристад"
#. To translators: The parameter is the contact's alias */
#: ../js/ui/components/telepathyClient.js:1203
#: ../js/ui/components/telepathyClient.js:1192
#, javascript-format
msgid "%s would like permission to see when you are online"
msgstr "%s аз шумо иҷозат мепурсад, ки тавонад шуморо дар онлайн бинад"
#: ../js/ui/components/telepathyClient.js:1288
#: ../js/ui/components/telepathyClient.js:1277
msgid "Network error"
msgstr "Хатои шабака"
#: ../js/ui/components/telepathyClient.js:1290
#: ../js/ui/components/telepathyClient.js:1279
msgid "Authentication failed"
msgstr "Санҷиши ҳаққоният қатъ шудааст."
#: ../js/ui/components/telepathyClient.js:1292
#: ../js/ui/components/telepathyClient.js:1281
msgid "Encryption error"
msgstr "Хатои рамзгузорӣ"
#: ../js/ui/components/telepathyClient.js:1294
#: ../js/ui/components/telepathyClient.js:1283
msgid "Certificate not provided"
msgstr "Гувоҳинома таъмин нашудааст"
#: ../js/ui/components/telepathyClient.js:1296
#: ../js/ui/components/telepathyClient.js:1285
msgid "Certificate untrusted"
msgstr "Гувоҳиномаи беэътибор"
#: ../js/ui/components/telepathyClient.js:1298
#: ../js/ui/components/telepathyClient.js:1287
msgid "Certificate expired"
msgstr "Гувоҳинома аз мӯҳлаташ гузашт"
#: ../js/ui/components/telepathyClient.js:1300
#: ../js/ui/components/telepathyClient.js:1289
msgid "Certificate not activated"
msgstr "Гувоҳинома фаъол нашудааст"
#: ../js/ui/components/telepathyClient.js:1302
#: ../js/ui/components/telepathyClient.js:1291
msgid "Certificate hostname mismatch"
msgstr "Номувофиқати гувоҳиномаи номи мизоҷон"
#: ../js/ui/components/telepathyClient.js:1304
#: ../js/ui/components/telepathyClient.js:1293
msgid "Certificate fingerprint mismatch"
msgstr "Номувофиқати гувоҳиномаи нақши ангуштон"
#: ../js/ui/components/telepathyClient.js:1306
#: ../js/ui/components/telepathyClient.js:1295
msgid "Certificate self-signed"
msgstr "Гувоҳиномаи худимзошуда"
#: ../js/ui/components/telepathyClient.js:1308
#: ../js/ui/components/telepathyClient.js:1297
msgid "Status is set to offline"
msgstr "Вазъият ба \"офлайн\" гузаштааст"
#: ../js/ui/components/telepathyClient.js:1310
#: ../js/ui/components/telepathyClient.js:1299
msgid "Encryption is not available"
msgstr "Рамзгузорӣ дастрас нест"
#: ../js/ui/components/telepathyClient.js:1312
#: ../js/ui/components/telepathyClient.js:1301
msgid "Certificate is invalid"
msgstr "Гувоҳинома нодуруст аст"
#: ../js/ui/components/telepathyClient.js:1314
#: ../js/ui/components/telepathyClient.js:1303
msgid "Connection has been refused"
msgstr "Пайваст рад карда шудааст"
#: ../js/ui/components/telepathyClient.js:1316
#: ../js/ui/components/telepathyClient.js:1305
msgid "Connection can't be established"
msgstr "Пайвастшавӣ имконнопазир аст"
#: ../js/ui/components/telepathyClient.js:1318
#: ../js/ui/components/telepathyClient.js:1307
msgid "Connection has been lost"
msgstr "Пайваст гум шудааст"
#: ../js/ui/components/telepathyClient.js:1320
#: ../js/ui/components/telepathyClient.js:1309
msgid "This account is already connected to the server"
msgstr "Ин ҳисоб аллакай ба сервер пайваст шудааст"
#: ../js/ui/components/telepathyClient.js:1322
#: ../js/ui/components/telepathyClient.js:1311
msgid ""
"Connection has been replaced by a new connection using the same resource"
msgstr "Пайваст тавассути сарчашмаи якхела бо пайвасти нав ҷойиваз карда шуд"
#: ../js/ui/components/telepathyClient.js:1324
#: ../js/ui/components/telepathyClient.js:1313
msgid "The account already exists on the server"
msgstr "Ҳисоб дар сервер аллакай мавҷуд аст"
#: ../js/ui/components/telepathyClient.js:1326
#: ../js/ui/components/telepathyClient.js:1315
msgid "Server is currently too busy to handle the connection"
msgstr "Барои коркарди ин пайваст сервер дар айни ҳол хеле машғул мебошад"
#: ../js/ui/components/telepathyClient.js:1328
#: ../js/ui/components/telepathyClient.js:1317
msgid "Certificate has been revoked"
msgstr "Гувоҳинома лағв карда шуд"
#: ../js/ui/components/telepathyClient.js:1330
#: ../js/ui/components/telepathyClient.js:1319
msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr ""
"Гувоҳинома алгоритми хатарноки рамзро истифода мебарад, ё ки рамзгузории "
"суст дорад"
#: ../js/ui/components/telepathyClient.js:1332
#: ../js/ui/components/telepathyClient.js:1321
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
@ -885,22 +890,22 @@ msgstr ""
"Дарозии гувоҳиномаи сервер, ё ки чуқурии занҷири гувоҳиномаи сервер, аз "
"маҳдудиятҳое, ки бо китобхонаи рамзгузорӣ таъин шудаанд, дарозтар мебошад"
#: ../js/ui/components/telepathyClient.js:1334
#: ../js/ui/components/telepathyClient.js:1323
msgid "Internal error"
msgstr "Хатогии дохилӣ"
#. translators: argument is the account name, like
#. * name@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1344
#: ../js/ui/components/telepathyClient.js:1333
#, javascript-format
msgid "Unable to connect to %s"
msgstr "Пайвастшавӣ ба %s имконнопазир аст"
#: ../js/ui/components/telepathyClient.js:1349
#: ../js/ui/components/telepathyClient.js:1338
msgid "View account"
msgstr "Намоиш додани ҳисоб"
#: ../js/ui/components/telepathyClient.js:1381
#: ../js/ui/components/telepathyClient.js:1370
msgid "Unknown reason"
msgstr "Сабаби номаълум"
@ -1047,6 +1052,7 @@ msgstr "Насб кардан"
#: ../js/ui/extensionDownloader.js:204
#, javascript-format
#| msgid "Download and install '%s' from extensions.gnome.org?"
msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "“%s”-ро аз extensions.gnome.org боргирӣ ва насб мекунед?"
@ -1080,7 +1086,7 @@ msgstr "Фаъол"
#. because it's disabled by rfkill (airplane mode) */
#. translators:
#. * The device has been disabled
#: ../js/ui/lookingGlass.js:717 ../js/ui/status/network.js:523
#: ../js/ui/lookingGlass.js:717 ../js/ui/status/network.js:470
#: ../src/gvc/gvc-mixer-control.c:1830
msgid "Disabled"
msgstr "Ғайрифаъол"
@ -1105,43 +1111,43 @@ msgstr "Намоиш додани манбаъ"
msgid "Web Page"
msgstr "Саҳифаи веб"
#: ../js/ui/messageTray.js:1312
#: ../js/ui/messageTray.js:1309
msgid "Open"
msgstr "Кушодани файл"
#: ../js/ui/messageTray.js:1319
#: ../js/ui/messageTray.js:1316
msgid "Remove"
msgstr "Тоза кардан"
#: ../js/ui/messageTray.js:1616
#: ../js/ui/messageTray.js:1613
msgid "Notifications"
msgstr "Огоҳиҳо"
#: ../js/ui/messageTray.js:1623
#: ../js/ui/messageTray.js:1620
msgid "Clear Messages"
msgstr "Пок кардани паёмҳо"
#: ../js/ui/messageTray.js:1642
#: ../js/ui/messageTray.js:1639
msgid "Notification Settings"
msgstr "Танзимоти огоҳиҳо"
#: ../js/ui/messageTray.js:1695
#: ../js/ui/messageTray.js:1692
msgid "Tray Menu"
msgstr "Менюи қуттӣ"
#: ../js/ui/messageTray.js:1912
#: ../js/ui/messageTray.js:1909
msgid "No Messages"
msgstr "Ягон паём нест"
#: ../js/ui/messageTray.js:1950
#: ../js/ui/messageTray.js:1947
msgid "Message Tray"
msgstr "Қуттии паёмҳо"
#: ../js/ui/messageTray.js:2934
#: ../js/ui/messageTray.js:2931
msgid "System Information"
msgstr "Маълумоти система"
#: ../js/ui/notificationDaemon.js:515 ../src/shell-app.c:399
#: ../js/ui/notificationDaemon.js:515 ../src/shell-app.c:397
msgctxt "program"
msgid "Unknown"
msgstr "Номаълум"
@ -1179,7 +1185,7 @@ msgstr "Баромад"
msgid "Activities"
msgstr "Фаъолиятҳо"
#: ../js/ui/panel.js:905
#: ../js/ui/panel.js:903
msgid "Top Bar"
msgstr "Панели боло"
@ -1208,19 +1214,19 @@ msgid_plural "%d new notifications"
msgstr[0] "%d огоҳии нав"
msgstr[1] "%d огоҳии нав"
#: ../js/ui/screenShield.js:473 ../js/ui/status/system.js:342
#: ../js/ui/screenShield.js:472 ../js/ui/status/system.js:342
msgid "Lock"
msgstr "Қулф кардан"
#: ../js/ui/screenShield.js:707
#: ../js/ui/screenShield.js:706
msgid "GNOME needs to lock the screen"
msgstr "GNOME бояд экранро қулф кунад"
#: ../js/ui/screenShield.js:834 ../js/ui/screenShield.js:1301
#: ../js/ui/screenShield.js:833 ../js/ui/screenShield.js:1300
msgid "Unable to lock"
msgstr "Қулф карда намешавад"
#: ../js/ui/screenShield.js:835 ../js/ui/screenShield.js:1302
#: ../js/ui/screenShield.js:834 ../js/ui/screenShield.js:1301
msgid "Lock was blocked by an application"
msgstr "Қулф аз тарави барнома баста шудааст"
@ -1300,31 +1306,26 @@ msgstr "Контрасти баланд"
msgid "Large Text"
msgstr "Матни бузург"
#: ../js/ui/status/bluetooth.js:48
#: ../js/ui/status/bluetooth.js:45
msgid "Bluetooth"
msgstr "Bluetooth"
#: ../js/ui/status/bluetooth.js:50 ../js/ui/status/network.js:134
#: ../js/ui/status/network.js:1209 ../js/ui/status/rfkill.js:85
#: ../js/ui/status/rfkill.js:105
#: ../js/ui/status/bluetooth.js:47 ../js/ui/status/network.js:131
#: ../js/ui/status/network.js:1081 ../js/ui/status/rfkill.js:48
msgid "Turn Off"
msgstr "Хомӯш кардан"
#: ../js/ui/status/bluetooth.js:53
#: ../js/ui/status/bluetooth.js:50
msgid "Bluetooth Settings"
msgstr "Танзимоти Bluetooth"
#: ../js/ui/status/bluetooth.js:100
#: ../js/ui/status/bluetooth.js:98
#, javascript-format
msgid "%d Connected Device"
msgid_plural "%d Connected Devices"
msgstr[0] "%d дастгоҳи пайвастшуда"
msgstr[1] "%d дастгоҳи пайвастшуда"
#: ../js/ui/status/bluetooth.js:102 ../js/ui/status/network.js:1232
msgid "Not Connected"
msgstr "Пайваст нашудааст"
#: ../js/ui/status/brightness.js:44
msgid "Brightness"
msgstr "Дурахшонӣ"
@ -1333,131 +1334,99 @@ msgstr "Дурахшонӣ"
msgid "Show Keyboard Layout"
msgstr "Намоиш додани тарҳбандии клавиатура"
#: ../js/ui/status/network.js:73
#: ../js/ui/status/network.js:70
msgid "<unknown>"
msgstr "<номаълум>"
#: ../js/ui/status/network.js:223 ../js/ui/status/network.js:389
#: ../js/ui/status/network.js:1230
#: ../js/ui/status/network.js:220 ../js/ui/status/network.js:377
#: ../js/ui/status/network.js:1102
msgid "Off"
msgstr "Хомӯш"
#. Translators: this is for network devices that are physically present but are not
#. under NetworkManager's control (and thus cannot be used in the menu) */
#: ../js/ui/status/network.js:395
#: ../js/ui/status/network.js:383
msgid "unmanaged"
msgstr "идоранашуда"
#: ../js/ui/status/network.js:397
#: ../js/ui/status/network.js:385
msgid "disconnecting..."
msgstr "қатъ кардани пайваст..."
#: ../js/ui/status/network.js:403 ../js/ui/status/network.js:1284
#: ../js/ui/status/network.js:391 ../js/ui/status/network.js:1156
msgid "connecting..."
msgstr "пайвастшавӣ..."
#. Translators: this is for network connections that require some kind of key or password */
#: ../js/ui/status/network.js:406 ../js/ui/status/network.js:1287
#: ../js/ui/status/network.js:394 ../js/ui/status/network.js:1159
msgid "authentication required"
msgstr "санҷиши ҳаққоният лозим аст"
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing */
#: ../js/ui/status/network.js:414
#: ../js/ui/status/network.js:402
msgid "firmware missing"
msgstr "нармафзори дарунсохт вуҷуд надорад"
#. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage */
#: ../js/ui/status/network.js:418
#: ../js/ui/status/network.js:406
msgid "unavailable"
msgstr "дастнорас"
#: ../js/ui/status/network.js:420 ../js/ui/status/network.js:1289
#: ../js/ui/status/network.js:408 ../js/ui/status/network.js:1161
msgid "connection failed"
msgstr "пайваст қатъ шудааст"
#: ../js/ui/status/network.js:436
msgid "Wired Settings"
msgstr "Танзимоти шабакаи симдор"
#: ../js/ui/status/network.js:477 ../js/ui/status/network.js:563
#: ../js/ui/status/network.js:424 ../js/ui/status/network.js:510
msgid "Mobile Broadband Settings"
msgstr "Танзимоти паҳннавори мобилӣ"
#: ../js/ui/status/network.js:519 ../js/ui/status/network.js:1228
#: ../js/ui/status/network.js:466 ../js/ui/status/network.js:1100
msgid "Hardware Disabled"
msgstr "Сахтафзор ғайрифаъол шудааст"
#: ../js/ui/status/network.js:578
msgid "Use as Internet connection"
msgstr "Ҳамчун пайвасти Интернет истифода кардан"
#: ../js/ui/status/network.js:755
msgid "Airplane Mode is On"
msgstr "Ҳолати ҳавопаймо фаъол аст"
#: ../js/ui/status/network.js:756
msgid "Wi-Fi is disabled when airplane mode is on."
msgstr "Ҳангоми фаъол будани ҳолати ҳавопаймо Wi-Fi ғайрифаъол аст."
#: ../js/ui/status/network.js:757
msgid "Turn Off Airplane Mode"
msgstr "Ҳолати ҳавопаймо хомӯш аст"
#: ../js/ui/status/network.js:766
msgid "Wi-Fi is Off"
msgstr "Wi-Fi хомӯш аст"
#: ../js/ui/status/network.js:767
msgid "Wi-Fi needs to be turned on in order to connect to a network."
msgstr "Барои пайваст шудан ба шабака, Wi-Fi бояд фаъол карда шавад."
#: ../js/ui/status/network.js:768
msgid "Turn On Wi-Fi"
msgstr "Фаъол кардани Wi-Fi"
#: ../js/ui/status/network.js:793
#: ../js/ui/status/network.js:692
msgid "Wi-Fi Networks"
msgstr "Шабакаҳои Wi-Fi"
#: ../js/ui/status/network.js:795
#: ../js/ui/status/network.js:694
msgid "Select a network"
msgstr "Интихоб кардани шабака"
#: ../js/ui/status/network.js:824
#: ../js/ui/status/network.js:718
msgid "No Networks"
msgstr "Ягон шабака нест"
#: ../js/ui/status/network.js:845 ../js/ui/status/rfkill.js:103
msgid "Use hardware switch to turn off"
msgstr "Истифодаи калиди сахтафзорӣ барои фаъолсозӣ ё хомӯшкунӣ"
#: ../js/ui/status/network.js:1115
#: ../js/ui/status/network.js:987
msgid "Select Network"
msgstr "Интихоби шабака"
#: ../js/ui/status/network.js:1121
#: ../js/ui/status/network.js:993
msgid "Wi-Fi Settings"
msgstr "Танзимоти Wi-Fi"
#: ../js/ui/status/network.js:1209
#: ../js/ui/status/network.js:1081
msgid "Turn On"
msgstr "Фаъол кардан"
#: ../js/ui/status/network.js:1352
#: ../js/ui/status/network.js:1104
msgid "Not Connected"
msgstr "Пайваст нашудааст"
#: ../js/ui/status/network.js:1224
msgid "VPN"
msgstr "VPN"
#: ../js/ui/status/network.js:1495
#: ../js/ui/status/network.js:1364
msgid "Network Manager"
msgstr "Мудири шабака"
#: ../js/ui/status/network.js:1534
#: ../js/ui/status/network.js:1403
msgid "Connection failed"
msgstr "Пайваст қатъ шудааст"
#: ../js/ui/status/network.js:1535
#: ../js/ui/status/network.js:1404
msgid "Activation of network connection failed"
msgstr "Фаъолсозии пайвасти шабака қатъ шудааст."
@ -1491,15 +1460,15 @@ msgstr "UPS"
msgid "Battery"
msgstr "Батарея"
#: ../js/ui/status/rfkill.js:82
#: ../js/ui/status/rfkill.js:45
msgid "Airplane Mode"
msgstr "Ҳолати ҳавопаймо"
#: ../js/ui/status/rfkill.js:84
#: ../js/ui/status/rfkill.js:47
msgid "On"
msgstr "Фаъол"
#: ../js/ui/status/rfkill.js:88
#: ../js/ui/status/rfkill.js:51
msgid "Network Settings"
msgstr "Танзимоти шабака"
@ -1553,6 +1522,7 @@ msgstr "Ҷустуҷӯ"
#: ../js/ui/windowAttentionHandler.js:19
#, javascript-format
#| msgid "'%s' is ready"
msgid "“%s” is ready"
msgstr "“%s” омода аст"
@ -1621,8 +1591,9 @@ msgstr ""
msgid "List possible modes"
msgstr "Рӯйхати ҳолатҳои имконпазир"
#: ../src/shell-app.c:642
#: ../src/shell-app.c:640
#, c-format
#| msgid "Failed to launch '%s'"
msgid "Failed to launch “%s”"
msgstr "Оғози “%s” қатъ шудааст"

801
po/uk.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -23,7 +23,7 @@ gnome_shell_calendar_server_CFLAGS = \
$(CALENDAR_SERVER_CFLAGS) \
$(NULL)
gnome_shell_calendar_server_LDADD = \
gnome_shell_calendar_server_LDFLAGS = \
$(CALENDAR_SERVER_LIBS) \
$(NULL)

View File

@ -98,6 +98,7 @@ shell_public_headers_h = \
shell-invert-lightness-effect.h \
shell-keybinding-modes.h \
shell-mount-operation.h \
shell-network-agent.h \
shell-perf-log.h \
shell-screenshot.h \
shell-slicer.h \
@ -109,10 +110,6 @@ shell_public_headers_h = \
shell-window-tracker.h \
shell-wm.h
if HAVE_NETWORKMANAGER
shell_public_headers_h += shell-network-agent.h
endif
libgnome_shell_menu_la_SOURCES = \
gtkactionmuxer.h \
gtkactionmuxer.c \
@ -139,6 +136,7 @@ libgnome_shell_base_la_SOURCES = \
shell-menu-tracker.c \
shell-menu-tracker.h \
shell-mount-operation.c \
shell-network-agent.c \
shell-perf-log.c \
shell-polkit-authentication-agent.h \
shell-polkit-authentication-agent.c \
@ -149,10 +147,6 @@ libgnome_shell_base_la_SOURCES = \
shell-tp-client.c \
$(NULL)
if HAVE_NETWORKMANAGER
libgnome_shell_base_la_SOURCES += shell-network-agent.c
endif
libgnome_shell_sources = \
$(shell_public_headers_h) \
shell-app-private.h \
@ -349,10 +343,7 @@ INTROSPECTION_GIRS += ShellMenu-0.1.gir
CLEANFILES += ShellMenu-0.1.gir
Shell-0.1.gir: gnome-shell St-1.0.gir ShellMenu-0.1.gir
Shell_0_1_gir_INCLUDES = Clutter-1.0 ClutterX11-1.0 Meta-3.0 TelepathyGLib-0.12 Soup-2.4 GMenu-3.0
if HAVE_NETWORKMANAGER
Shell_0_1_gir_INCLUDES += NetworkManager-1.0 NMClient-1.0
endif
Shell_0_1_gir_INCLUDES = Clutter-1.0 ClutterX11-1.0 Meta-3.0 TelepathyGLib-0.12 Soup-2.4 GMenu-3.0 NetworkManager-1.0 NMClient-1.0
Shell_0_1_gir_CFLAGS = $(libgnome_shell_la_CPPFLAGS) -I $(srcdir)
# Hack! we use PROGRAM instead of LIBS so that the soname is not included
# in the typelib. This way the symbols will be resolved with the libgnome-shell

View File

@ -68,12 +68,6 @@ static void gnome_shell_plugin_kill_window_effects (MetaPlugin *plugin,
MetaWindowActor *actor);
static void gnome_shell_plugin_kill_switch_workspace (MetaPlugin *plugin);
static void gnome_shell_plugin_show_tile_preview (MetaPlugin *plugin,
MetaWindow *window,
MetaRectangle *tile_rect,
int tile_monitor);
static void gnome_shell_plugin_hide_tile_preview (MetaPlugin *plugin);
static gboolean gnome_shell_plugin_xevent_filter (MetaPlugin *plugin,
XEvent *event);
@ -138,9 +132,6 @@ gnome_shell_plugin_class_init (GnomeShellPluginClass *klass)
plugin_class->kill_window_effects = gnome_shell_plugin_kill_window_effects;
plugin_class->kill_switch_workspace = gnome_shell_plugin_kill_switch_workspace;
plugin_class->show_tile_preview = gnome_shell_plugin_show_tile_preview;
plugin_class->hide_tile_preview = gnome_shell_plugin_hide_tile_preview;
plugin_class->xevent_filter = gnome_shell_plugin_xevent_filter;
plugin_class->keybinding_filter = gnome_shell_plugin_keybinding_filter;
@ -328,21 +319,6 @@ gnome_shell_plugin_kill_switch_workspace (MetaPlugin *plugin)
_shell_wm_kill_switch_workspace (get_shell_wm());
}
static void
gnome_shell_plugin_show_tile_preview (MetaPlugin *plugin,
MetaWindow *window,
MetaRectangle *tile_rect,
int tile_monitor)
{
_shell_wm_show_tile_preview (get_shell_wm (), window, tile_rect, tile_monitor);
}
static void
gnome_shell_plugin_hide_tile_preview (MetaPlugin *plugin)
{
_shell_wm_hide_tile_preview (get_shell_wm ());
}
static gboolean
gnome_shell_plugin_xevent_filter (MetaPlugin *plugin,
XEvent *xev)

View File

@ -271,9 +271,7 @@ default_log_handler (const char *log_domain,
g_get_current_time (&now);
/* Send telepathy debug through DBus */
if (log_domain != NULL && g_str_has_prefix (log_domain, "tp-glib"))
tp_debug_sender_add_message (sender, &now, log_domain, log_level, message);
tp_debug_sender_add_message (sender, &now, log_domain, log_level, message);
/* Filter out telepathy-glib logs, we don't want to flood Shell's output
* with those. */

View File

@ -160,15 +160,6 @@ window_backed_app_get_icon (ShellApp *app,
{
MetaWindow *window;
ClutterActor *actor;
gint scale;
ShellGlobal *global;
StThemeContext *context;
global = shell_global_get ();
context = st_theme_context_get_for_stage (shell_global_get_stage (global));
g_object_get (context, "scale-factor", &scale, NULL);
size *= scale;
/* During a state transition from running to not-running for
* window-backend apps, it's possible we get a request for the icon.
@ -202,14 +193,8 @@ shell_app_create_icon_texture (ShellApp *app,
int size)
{
GIcon *icon;
gint scale;
ClutterActor *ret;
ShellGlobal *global;
StThemeContext *context;
global = shell_global_get ();
context = st_theme_context_get_for_stage (shell_global_get_stage (global));
g_object_get (context, "scale-factor", &scale, NULL);
ret = NULL;
if (app->info == NULL)
@ -217,12 +202,12 @@ shell_app_create_icon_texture (ShellApp *app,
icon = g_app_info_get_icon (G_APP_INFO (app->info));
if (icon != NULL)
ret = st_texture_cache_load_gicon (st_texture_cache_get_default (), NULL, icon, size, scale);
ret = st_texture_cache_load_gicon (st_texture_cache_get_default (), NULL, icon, size);
if (ret == NULL)
{
icon = g_themed_icon_new ("application-x-executable");
ret = st_texture_cache_load_gicon (st_texture_cache_get_default (), NULL, icon, size, scale);
ret = st_texture_cache_load_gicon (st_texture_cache_get_default (), NULL, icon, size);
g_object_unref (icon);
}
@ -232,7 +217,6 @@ shell_app_create_icon_texture (ShellApp *app,
typedef struct {
ShellApp *app;
int size;
int scale;
ClutterTextDirection direction;
} CreateFadedIconData;
@ -246,7 +230,6 @@ shell_app_create_faded_icon_cpu (StTextureCache *cache,
ShellApp *app;
GdkPixbuf *pixbuf;
int size;
int scale;
CoglHandle texture;
gint width, height, rowstride;
guint8 n_channels;
@ -262,24 +245,23 @@ shell_app_create_faded_icon_cpu (StTextureCache *cache,
app = data->app;
size = data->size;
scale = data->scale;
info = NULL;
icon = g_app_info_get_icon (G_APP_INFO (app->info));
if (icon != NULL)
{
info = gtk_icon_theme_lookup_by_gicon_for_scale (gtk_icon_theme_get_default (),
icon, size, scale,
GTK_ICON_LOOKUP_FORCE_SIZE);
info = gtk_icon_theme_lookup_by_gicon (gtk_icon_theme_get_default (),
icon, size,
GTK_ICON_LOOKUP_FORCE_SIZE);
}
if (info == NULL)
{
icon = g_themed_icon_new ("application-x-executable");
info = gtk_icon_theme_lookup_by_gicon_for_scale (gtk_icon_theme_get_default (),
icon, size, scale,
GTK_ICON_LOOKUP_FORCE_SIZE);
info = gtk_icon_theme_lookup_by_gicon (gtk_icon_theme_get_default (),
icon, size,
GTK_ICON_LOOKUP_FORCE_SIZE);
g_object_unref (icon);
}
@ -363,9 +345,6 @@ shell_app_get_faded_icon (ShellApp *app, int size, ClutterTextDirection directio
ClutterActor *result;
char *cache_key;
CreateFadedIconData data;
gint scale;
ShellGlobal *global;
StThemeContext *context;
/* Don't fade for window backed apps for now...easier to reuse the
* property tracking bits, and this helps us visually distinguish
@ -374,19 +353,14 @@ shell_app_get_faded_icon (ShellApp *app, int size, ClutterTextDirection directio
if (!app->info)
return window_backed_app_get_icon (app, size);
global = shell_global_get ();
context = st_theme_context_get_for_stage (shell_global_get_stage (global));
g_object_get (context, "scale-factor", &scale, NULL);
/* Use icon: prefix so that we get evicted from the cache on
* icon theme changes. */
cache_key = g_strdup_printf ("icon:%s,size=%d,scale=%d,faded-%s",
cache_key = g_strdup_printf ("icon:%s,size=%d,faded-%s",
shell_app_get_id (app),
size, scale,
size,
direction == CLUTTER_TEXT_DIRECTION_RTL ? "rtl" : "ltr");
data.app = app;
data.size = size;
data.scale = scale;
data.direction = direction;
texture = st_texture_cache_load (st_texture_cache_get_default (),
cache_key,
@ -404,7 +378,7 @@ shell_app_get_faded_icon (ShellApp *app, int size, ClutterTextDirection directio
else
{
result = clutter_texture_new ();
g_object_set (result, "opacity", 0, "width", (float) size * scale, "height", (float) size * scale, NULL);
g_object_set (result, "opacity", 0, "width", (float) size, "height", (float) size, NULL);
}
return result;
@ -611,7 +585,9 @@ shell_app_update_window_actions (ShellApp *app, MetaWindow *window)
g_object_set_data_full (G_OBJECT (window), "actions", actions, g_object_unref);
}
g_assert (app->running_state->muxer);
if (!app->running_state->muxer)
app->running_state->muxer = gtk_action_muxer_new ();
gtk_action_muxer_insert (app->running_state->muxer, "win", actions);
g_object_notify (G_OBJECT (app), "action-group");
}

View File

@ -746,20 +746,6 @@ global_stage_after_paint (gpointer data)
return TRUE;
}
static void
update_scale_factor (GdkScreen *screen, gpointer data)
{
ShellGlobal *global = SHELL_GLOBAL (data);
ClutterStage *stage = CLUTTER_STAGE (global->stage);
StThemeContext *context = st_theme_context_get_for_stage (stage);
GValue value = G_VALUE_INIT;
g_value_init (&value, G_TYPE_INT);
gdk_screen_get_setting (global->gdk_screen, "gdk-window-scaling-factor", &value);
g_object_set (context, "scale-factor", g_value_get_int (&value), NULL);
}
/* This is an IBus workaround. The flow of events with IBus is that every time
* it gets gets a key event, it:
*
@ -938,19 +924,9 @@ _shell_global_set_plugin (ShellGlobal *global,
g_signal_connect (global->meta_display, "notify::focus-window",
G_CALLBACK (focus_window_changed), global);
/*
* We connect to GdkScreen's monitors-changed here to avoid
* a race condition. GdkScreen's monitors-changed signal is
* emitted *after* the xsetting has been updated.
*/
g_signal_connect (global->gdk_screen, "monitors-changed",
G_CALLBACK (update_scale_factor), global);
gdk_event_handler_set (gnome_shell_gdk_event_handler, global, NULL);
global->focus_manager = st_focus_manager_get_for_stage (global->stage);
update_scale_factor (global->gdk_screen, global);
}
GjsContext *

View File

@ -424,16 +424,6 @@ update_focus_app (ShellWindowTracker *self)
ShellApp *new_focus_app;
new_focus_win = meta_display_get_focus_window (shell_global_get_display (shell_global_get ()));
/* we only consider an app focused if the focus window can be clearly
* associated with a running app; this is the case if the focus window
* or one of its parents is visible in the taskbar, e.g.
* - 'nautilus' should appear focused when its about dialog has focus
* - 'nautilus' should not appear focused when the DESKTOP has focus
*/
while (new_focus_win && meta_window_is_skip_taskbar (new_focus_win))
new_focus_win = meta_window_get_transient_for (new_focus_win);
new_focus_app = new_focus_win ? shell_window_tracker_get_window_app (self, new_focus_win) : NULL;
if (new_focus_app)
@ -858,25 +848,18 @@ shell_startup_sequence_create_icon (ShellStartupSequence *sequence, guint size)
GIcon *themed;
const char *icon_name;
ClutterActor *texture;
gint scale;
ShellGlobal *global;
StThemeContext *context;
global = shell_global_get ();
context = st_theme_context_get_for_stage (shell_global_get_stage (global));
g_object_get (context, "scale-factor", &scale, NULL);
icon_name = sn_startup_sequence_get_icon_name ((SnStartupSequence*)sequence);
if (!icon_name)
{
texture = clutter_texture_new ();
clutter_actor_set_size (texture, size * scale, size * scale);
clutter_actor_set_size (texture, size, size);
return texture;
}
themed = g_themed_icon_new (icon_name);
texture = st_texture_cache_load_gicon (st_texture_cache_get_default (),
NULL, themed, size, scale);
NULL, themed, size);
g_object_unref (G_OBJECT (themed));
return texture;
}

View File

@ -35,12 +35,6 @@ void _shell_wm_kill_window_effects (ShellWM *wm,
MetaWindowActor *actor);
void _shell_wm_kill_switch_workspace (ShellWM *wm);
void _shell_wm_show_tile_preview (ShellWM *wm,
MetaWindow *window,
MetaRectangle *tile_rect,
int tile_monitor);
void _shell_wm_hide_tile_preview (ShellWM *wm);
gboolean _shell_wm_filter_keybinding (ShellWM *wm,
MetaKeyBinding *binding);

View File

@ -26,8 +26,6 @@ enum
SWITCH_WORKSPACE,
KILL_SWITCH_WORKSPACE,
KILL_WINDOW_EFFECTS,
SHOW_TILE_PREVIEW,
HIDE_TILE_PREVIEW,
FILTER_KEYBINDING,
CONFIRM_DISPLAY_CHANGE,
@ -119,22 +117,6 @@ shell_wm_class_init (ShellWMClass *klass)
NULL, NULL, NULL,
G_TYPE_NONE, 1,
META_TYPE_WINDOW_ACTOR);
shell_wm_signals[SHOW_TILE_PREVIEW] =
g_signal_new ("show-tile-preview",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
0, NULL, NULL, NULL,
G_TYPE_NONE, 3,
META_TYPE_WINDOW,
META_TYPE_RECTANGLE,
G_TYPE_INT);
shell_wm_signals[HIDE_TILE_PREVIEW] =
g_signal_new ("hide-tile-preview",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
0,
NULL, NULL, NULL,
G_TYPE_NONE, 0);
shell_wm_signals[FILTER_KEYBINDING] =
g_signal_new ("filter-keybinding",
G_TYPE_FROM_CLASS (klass),
@ -272,22 +254,6 @@ _shell_wm_kill_window_effects (ShellWM *wm,
g_signal_emit (wm, shell_wm_signals[KILL_WINDOW_EFFECTS], 0, actor);
}
void
_shell_wm_show_tile_preview (ShellWM *wm,
MetaWindow *window,
MetaRectangle *tile_rect,
int tile_monitor)
{
g_signal_emit (wm, shell_wm_signals[SHOW_TILE_PREVIEW], 0,
window, tile_rect, tile_monitor);
}
void
_shell_wm_hide_tile_preview (ShellWM *wm)
{
g_signal_emit (wm, shell_wm_signals[HIDE_TILE_PREVIEW], 0);
}
void
_shell_wm_minimize (ShellWM *wm,

View File

@ -29,7 +29,6 @@
#include "st-enum-types.h"
#include "st-icon.h"
#include "st-texture-cache.h"
#include "st-theme-context.h"
#include "st-private.h"
enum
@ -163,6 +162,76 @@ st_icon_dispose (GObject *gobject)
G_OBJECT_CLASS (st_icon_parent_class)->dispose (gobject);
}
static void
st_icon_get_preferred_height (ClutterActor *actor,
gfloat for_width,
gfloat *min_height_p,
gfloat *nat_height_p)
{
StIconPrivate *priv = ST_ICON (actor)->priv;
StThemeNode *theme_node = st_widget_get_theme_node (ST_WIDGET (actor));
if (min_height_p)
*min_height_p = priv->icon_size;
if (nat_height_p)
*nat_height_p = priv->icon_size;
st_theme_node_adjust_preferred_height (theme_node, min_height_p, nat_height_p);
}
static void
st_icon_get_preferred_width (ClutterActor *actor,
gfloat for_height,
gfloat *min_width_p,
gfloat *nat_width_p)
{
StIconPrivate *priv = ST_ICON (actor)->priv;
StThemeNode *theme_node = st_widget_get_theme_node (ST_WIDGET (actor));
if (min_width_p)
*min_width_p = priv->icon_size;
if (nat_width_p)
*nat_width_p = priv->icon_size;
st_theme_node_adjust_preferred_width (theme_node, min_width_p, nat_width_p);
}
static void
st_icon_allocate (ClutterActor *actor,
const ClutterActorBox *box,
ClutterAllocationFlags flags)
{
StIconPrivate *priv = ST_ICON (actor)->priv;
StThemeNode *theme_node = st_widget_get_theme_node (ST_WIDGET (actor));
clutter_actor_set_allocation (actor, box, flags);
if (priv->icon_texture)
{
ClutterActorBox content_box;
st_theme_node_get_content_box (theme_node, box, &content_box);
/* Center the texture in the allocation; scaling up the icon from the size
* we loaded it at is just a bad idea and probably accidental. Main downside
* of doing this is that it may not be obvious that they have to turn off
* fill to align the icon non-centered in the parent container.
*
* We don't use clutter_actor_allocate_align_fill() for a bit of efficiency
* and because we expect to get rid of the child actor in favor of a
* CoglTexture in the future.
*/
content_box.x1 = (int)(0.5 + content_box.x1 + (content_box.x2 - content_box.x1 - priv->icon_size) / 2.);
content_box.x2 = content_box.x1 + priv->icon_size;
content_box.y1 = (int)(0.5 + content_box.y1 + (content_box.y2 - content_box.y1 - priv->icon_size) / 2.);
content_box.y2 = content_box.y1 + priv->icon_size;
clutter_actor_allocate (priv->icon_texture, &content_box, flags);
}
}
static void
st_icon_paint (ClutterActor *actor)
{
@ -238,6 +307,9 @@ st_icon_class_init (StIconClass *klass)
object_class->set_property = st_icon_set_property;
object_class->dispose = st_icon_dispose;
actor_class->get_preferred_height = st_icon_get_preferred_height;
actor_class->get_preferred_width = st_icon_get_preferred_width;
actor_class->allocate = st_icon_allocate;
actor_class->paint = st_icon_paint;
widget_class->style_changed = st_icon_style_changed;
@ -266,14 +338,8 @@ st_icon_class_init (StIconClass *klass)
static void
st_icon_init (StIcon *self)
{
ClutterLayoutManager *layout_manager;
self->priv = ST_ICON_GET_PRIVATE (self);
layout_manager = clutter_bin_layout_new (CLUTTER_BIN_ALIGNMENT_FILL,
CLUTTER_BIN_ALIGNMENT_FILL);
clutter_actor_set_layout_manager (CLUTTER_ACTOR (self), layout_manager);
self->priv->icon_size = DEFAULT_ICON_SIZE;
self->priv->prop_icon_size = -1;
@ -331,8 +397,6 @@ st_icon_finish_update (StIcon *icon)
{
priv->icon_texture = priv->pending_texture;
priv->pending_texture = NULL;
clutter_actor_set_x_align (priv->icon_texture, CLUTTER_ACTOR_ALIGN_CENTER);
clutter_actor_set_y_align (priv->icon_texture, CLUTTER_ACTOR_ALIGN_CENTER);
clutter_actor_add_child (CLUTTER_ACTOR (icon), priv->icon_texture);
/* Remove the temporary ref we added */
@ -366,9 +430,6 @@ st_icon_update (StIcon *icon)
StIconPrivate *priv = icon->priv;
StThemeNode *theme_node;
StTextureCache *cache;
gint scale;
ClutterActor *stage;
StThemeContext *context;
if (priv->pending_texture)
{
@ -382,18 +443,13 @@ st_icon_update (StIcon *icon)
if (theme_node == NULL)
return;
stage = clutter_actor_get_stage (CLUTTER_ACTOR (icon));
context = st_theme_context_get_for_stage (CLUTTER_STAGE (stage));
g_object_get (context, "scale-factor", &scale, NULL);
cache = st_texture_cache_get_default ();
if (priv->gicon)
{
priv->pending_texture = st_texture_cache_load_gicon (cache,
theme_node,
priv->gicon,
priv->icon_size,
scale);
priv->icon_size);
}
if (priv->pending_texture)
@ -427,19 +483,7 @@ st_icon_update_icon_size (StIcon *icon)
if (priv->prop_icon_size > 0)
new_size = priv->prop_icon_size;
else if (priv->theme_icon_size > 0)
{
gint scale;
ClutterActor *stage;
StThemeContext *context;
/* The theme will give us an already-scaled size, so we
* undo it here, as priv->icon_size is in unscaled pixels.
*/
stage = clutter_actor_get_stage (CLUTTER_ACTOR (icon));
context = st_theme_context_get_for_stage (CLUTTER_STAGE (stage));
g_object_get (context, "scale-factor", &scale, NULL);
new_size = (gint) (priv->theme_icon_size / scale);
}
new_size = priv->theme_icon_size;
else
new_size = DEFAULT_ICON_SIZE;

View File

@ -909,7 +909,6 @@ static ClutterActor *
load_gicon_with_colors (StTextureCache *cache,
GIcon *icon,
gint size,
gint scale,
StIconColors *colors)
{
AsyncTextureLoadData *request;
@ -923,7 +922,7 @@ load_gicon_with_colors (StTextureCache *cache,
/* Do theme lookups in the main thread to avoid thread-unsafety */
theme = cache->priv->icon_theme;
info = gtk_icon_theme_lookup_by_gicon_for_scale (theme, icon, size, scale, GTK_ICON_LOOKUP_USE_BUILTIN);
info = gtk_icon_theme_lookup_by_gicon (theme, icon, size, GTK_ICON_LOOKUP_USE_BUILTIN);
if (info == NULL)
return NULL;
@ -937,8 +936,8 @@ load_gicon_with_colors (StTextureCache *cache,
if (colors)
{
/* This raises some doubts about the practice of using string keys */
key = g_strdup_printf (CACHE_PREFIX_ICON "%s,size=%d,scale=%d,colors=%2x%2x%2x%2x,%2x%2x%2x%2x,%2x%2x%2x%2x,%2x%2x%2x%2x",
gicon_string, size, scale,
key = g_strdup_printf (CACHE_PREFIX_ICON "%s,size=%d,colors=%2x%2x%2x%2x,%2x%2x%2x%2x,%2x%2x%2x%2x,%2x%2x%2x%2x",
gicon_string, size,
colors->foreground.red, colors->foreground.blue, colors->foreground.green, colors->foreground.alpha,
colors->warning.red, colors->warning.blue, colors->warning.green, colors->warning.alpha,
colors->error.red, colors->error.blue, colors->error.green, colors->error.alpha,
@ -946,13 +945,13 @@ load_gicon_with_colors (StTextureCache *cache,
}
else
{
key = g_strdup_printf (CACHE_PREFIX_ICON "%s,size=%d,scale=%d",
gicon_string, size, scale);
key = g_strdup_printf (CACHE_PREFIX_ICON "%s,size=%d",
gicon_string, size);
}
g_free (gicon_string);
texture = (ClutterActor *) create_default_texture ();
clutter_actor_set_size (texture, size * scale, size * scale);
clutter_actor_set_size (texture, size, size);
if (ensure_request (cache, key, policy, &request, texture))
{
@ -970,7 +969,7 @@ load_gicon_with_colors (StTextureCache *cache,
request->policy = policy;
request->colors = colors ? st_icon_colors_ref (colors) : NULL;
request->icon_info = info;
request->width = request->height = size * scale;
request->width = request->height = size;
request->enforced_square = TRUE;
load_texture_async (cache, request);
@ -986,7 +985,6 @@ load_gicon_with_colors (StTextureCache *cache,
* if the icon must not be recolored
* @icon: the #GIcon to load
* @size: Size of themed
* @scale: Scale factor of display
*
* This method returns a new #ClutterActor for a given #GIcon. If the
* icon isn't loaded already, the texture will be filled
@ -998,10 +996,9 @@ ClutterActor *
st_texture_cache_load_gicon (StTextureCache *cache,
StThemeNode *theme_node,
GIcon *icon,
gint size,
gint scale)
gint size)
{
return load_gicon_with_colors (cache, icon, size, scale, theme_node ? st_theme_node_get_icon_colors (theme_node) : NULL);
return load_gicon_with_colors (cache, icon, size, theme_node ? st_theme_node_get_icon_colors (theme_node) : NULL);
}
static ClutterActor *

View File

@ -83,8 +83,7 @@ ClutterActor *st_texture_cache_bind_pixbuf_property (StTextureCache *cache,
ClutterActor *st_texture_cache_load_gicon (StTextureCache *cache,
StThemeNode *theme_node,
GIcon *icon,
gint size,
gint scale);
gint size);
ClutterActor *st_texture_cache_load_uri_async (StTextureCache *cache,
const gchar *uri,

View File

@ -34,8 +34,6 @@ struct _StThemeContext {
/* set of StThemeNode */
GHashTable *nodes;
int scale_factor;
};
struct _StThemeContextClass {
@ -44,12 +42,6 @@ struct _StThemeContextClass {
#define DEFAULT_FONT "sans-serif 10"
enum
{
PROP_0,
PROP_SCALE_FACTOR
};
enum
{
CHANGED,
@ -65,15 +57,6 @@ static void on_icon_theme_changed (StTextureCache *cache,
StThemeContext *context);
static void st_theme_context_changed (StThemeContext *context);
static void st_theme_context_set_property (GObject *object,
guint prop_id,
const GValue *value,
GParamSpec *pspec);
static void st_theme_context_get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec);
static void
st_theme_context_finalize (GObject *object)
{
@ -103,23 +86,8 @@ st_theme_context_class_init (StThemeContextClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->set_property = st_theme_context_set_property;
object_class->get_property = st_theme_context_get_property;
object_class->finalize = st_theme_context_finalize;
/**
* StThemeContext:scale-factor:
*
* The scaling factor used or high dpi scaling.
*/
g_object_class_install_property (object_class,
PROP_SCALE_FACTOR,
g_param_spec_int ("scale-factor",
"Scale factor",
"Integer scale factor used for high dpi scaling",
0, G_MAXINT, 1,
G_PARAM_READABLE | G_PARAM_WRITABLE));
signals[CHANGED] =
g_signal_new ("changed",
G_TYPE_FROM_CLASS (klass),
@ -146,53 +114,6 @@ st_theme_context_init (StThemeContext *context)
context->nodes = g_hash_table_new_full ((GHashFunc) st_theme_node_hash,
(GEqualFunc) st_theme_node_equal,
g_object_unref, NULL);
context->scale_factor = 1;
}
static void
st_theme_context_set_property (GObject *object,
guint prop_id,
const GValue *value,
GParamSpec *pspec)
{
StThemeContext *context = ST_THEME_CONTEXT (object);
switch (prop_id)
{
case PROP_SCALE_FACTOR:
{
int scale_factor = g_value_get_int (value);
if (scale_factor != context->scale_factor)
{
context->scale_factor = scale_factor;
st_theme_context_changed (context);
}
break;
}
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
st_theme_context_get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
StThemeContext *context = ST_THEME_CONTEXT (object);
switch (prop_id)
{
case PROP_SCALE_FACTOR:
g_value_set_int (value, context->scale_factor);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
/**

View File

@ -1015,9 +1015,6 @@ get_length_from_term (StThemeNode *node,
} type = ABSOLUTE;
double multiplier = 1.0;
int scale_factor;
g_object_get (node->context, "scale-factor", &scale_factor, NULL);
if (term->type != TERM_NUMBER)
{
@ -1031,7 +1028,7 @@ get_length_from_term (StThemeNode *node,
{
case NUM_LENGTH_PX:
type = ABSOLUTE;
multiplier = 1 * scale_factor;
multiplier = 1;
break;
case NUM_LENGTH_PT:
type = POINTS;