Compare commits

..

15 Commits

Author SHA1 Message Date
d985477a9d loginDialog: handle really long messages better
Right now if a long message comes in, the whole dialog grows. This
commit fixes that by making the label a label of the entire screen,
instead of a child of the prompt box. To ensure there's still height
allocated for it, this commit introduces a dummy placeholder actor.
2013-06-19 15:52:36 -04:00
b188d57609 loginDialog: make entry a little wider by default
With recent changes the dialog is somewhat taller now that it was
before.

This comment makes the prompt entry longer to help square things
out.
2013-06-19 13:37:25 -04:00
412af26e4e loginDialog: drop separate login hint label
There isn't really room for a login hint label and an auth message label
at the same time.  They shouldn't really be showing messages at the same
time anyway, so consolidate them.
2013-06-19 13:37:25 -04:00
7b440f3864 loginDialog: pre-allocate prompt message height
Right now things jump around if a message comes in.
This commit makes sure there's room for a message to start.
2013-06-19 13:36:33 -04:00
2d98903c90 loginDialog: drop padding between buttons and entry
Now that the closed session list preallocates space for its
open self, there is a lot of padding between the entry and
buttons.

This commit helps alleviate the padding problem by getting rid
of the large top padding set above the login buttons.
2013-06-19 13:35:26 -04:00
9a0d0d2fd3 sessionList: always allocate full height
This helps to prevent stuff from jumping around on the login dialog
when the session list opens.
2013-06-19 13:35:26 -04:00
9451c04a09 loginDialog: start to move login dialog away from modal dialog 2013-06-19 13:35:26 -04:00
ca9099997c loginDialog: move user list to its own file
The userList code has no dependencies on anything else in
loginDialog.js so move it to its own file.

This is part of the greater reorganization effort to clean up
the login dialog / unlock dialog situation.
2013-06-18 08:01:27 -04:00
4de18f2d4b loginDialog: move session list to its own file
The sessionList code has no dependencies on anything else in
loginDialog.js so move it to its own file.

This is part of the greater reorganization effort to clean up
the login dialog / unlock dialog situation.
2013-06-18 08:01:27 -04:00
73d8f6c993 gdm: move all login/unlock code to auth/ directory
Right now the GDM and unlock code use a mish-mash of files
from ui/ and from gdm/.

This commit consolidates all the files into ui/auth as a
first step toward cleaning up the duplication of code between
the two features.
2013-06-18 08:01:27 -04:00
2141138a6f gdm: move batch.js to misc/
batch.js has nothing to do with GDM, other than it's used by the login
dialog.

We eventually want to get rid of it entirely, but in the mean time move
it to misc/ for clarity.
2013-06-18 08:01:27 -04:00
4f135be89a ui: move userAvatar to own file
There are a few places in the code that use the UserAvatar widget
without using the user menu.

Since the avatar is used outside of the user menu, move it from
userMenu.js to its own file.
2013-06-18 08:01:27 -04:00
026ec2d4c2 ui: move AnimatedIcon out of panel.js
The class is generally useful, so it only makes sense in panel.js
for historical reasons. Because other parts of the code are
using it, though, problems are cropping up that require a
workaround like:

placeSpinner: function(...) {
    /* This is here because of recursive imports */
    const Panel = imports.ui.panel;
    Panel.AnimatedIcon(spinnerIcon, WORK_SPINNER_ICON_SIZE);
    ...
}

This commit moves AnimatedIcon to its own file so we can drop that
workaround.
2013-06-18 08:01:24 -04:00
a82fae3a2f unlockDialog: clean up unused imports 2013-06-14 08:40:20 -04:00
892d224cd7 loginDialog: clean up unused imports 2013-06-14 08:16:49 -04:00
54 changed files with 4053 additions and 3413 deletions

30
NEWS
View File

@ -1,33 +1,3 @@
3.9.3
=====
* Don't push window thumbs when workspace switcher is hidden [Jasper; #701167]
* Tweak timeout for activating windows during XDND [Adel; #700150]
* Fix ellipsization in control buttons in app picker [Carlos; #696307]
* Fix DND to empty dash [Florian; #684618]
* Fix OSD window appearing below system modal dialogs [Rui; #701269]
* Clear clipboard on screen lock to prevent information leak [Florian; #698922]
* Allow session mode specific overrides schema [Florian; #701717]
* window-switcher: Only show windows from current workspace by default
[Florian; #701214]
* logout dialog: Show the correct text right away [Matthias; #702056]
* bluetooth: Port to bluez 5 [Emilio; #700891]
* dateMenu: Allow events to span multiple lines [Giovanni; #701231]
* gdm: Clear message queue when no more messages are pending [Jonh; #702458]
* Misc bug fixes and cleanups [Jasper, Florian, Adel, Giovanni; #693836,
#700972, #701386, #700877, #701755, #698918, #701224, #702125, #701954,
#701849, #702121]
Contributors:
Giovanni Campagna, Matthias Clasen, Fran Diéguez, Adel Gadllah, Rui Matos,
Florian Müllner, Emilio Pozuelo Monfort, Carlos Soriano, Jasper St. Pierre,
Jonh Wendell
Translations:
Marek Černocký [cs], Victor Ibragimov [tg], Fran Diéguez [gl],
Benjamin Steinwender [de], Cheng-Chia Tseng [zh_HK, zh_TW],
eternalhui [zh_CN], Ivaylo Valkov [bg], Kjartan Maraas [nb],
Daniel Mustieles [es]
3.9.2
=====
* Use a symbolic icon for DESKTOP windows [Matthias; #697914]

View File

@ -1,5 +1,5 @@
AC_PREREQ(2.63)
AC_INIT([gnome-shell],[3.9.3],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_INIT([gnome-shell],[3.9.2],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_SRCDIR([src/shell-global.c])
@ -63,7 +63,7 @@ AM_CONDITIONAL(BUILD_RECORDER, $build_recorder)
CLUTTER_MIN_VERSION=1.13.4
GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
GJS_MIN_VERSION=1.35.4
MUTTER_MIN_VERSION=3.9.3
MUTTER_MIN_VERSION=3.9.2
GTK_MIN_VERSION=3.7.9
GIO_MIN_VERSION=2.37.0
LIBECAL_MIN_VERSION=3.5.3
@ -71,7 +71,7 @@ LIBEDATASERVER_MIN_VERSION=3.5.3
TELEPATHY_GLIB_MIN_VERSION=0.17.5
POLKIT_MIN_VERSION=0.100
STARTUP_NOTIFICATION_MIN_VERSION=0.11
GCR_MIN_VERSION=3.7.5
GCR_MIN_VERSION=3.3.90
GNOME_DESKTOP_REQUIRED_VERSION=3.7.90
GNOME_MENUS_REQUIRED_VERSION=3.5.3
NETWORKMANAGER_MIN_VERSION=0.9.8
@ -109,7 +109,7 @@ PKG_CHECK_MODULES(DESKTOP_SCHEMAS, gsettings-desktop-schemas >= 3.7.4)
PKG_CHECK_MODULES(CARIBOU, caribou-1.0 >= 0.4.8)
AC_MSG_CHECKING([for bluetooth support])
PKG_CHECK_EXISTS([gnome-bluetooth-1.0 >= 3.9.0],
PKG_CHECK_EXISTS([gnome-bluetooth-1.0 >= 3.1.0],
[BLUETOOTH_DIR=`$PKG_CONFIG --variable=applet_libdir gnome-bluetooth-1.0`
BLUETOOTH_LIBS=`$PKG_CONFIG --variable=applet_libs gnome-bluetooth-1.0`
AC_SUBST([BLUETOOTH_LIBS],["$BLUETOOTH_LIBS"])

View File

@ -204,7 +204,7 @@ value here is from the GsmPresenceStatus enumeration.</_summary>
</_description>
</key>
<key type="b" name="current-workspace-only">
<default>true</default>
<default>false</default>
<summary>Limit switcher to current workspace.</summary>
<description>
If true, only windows from the current workspace are shown in the switcher.

View File

@ -123,20 +123,6 @@ StScrollBar StButton#vhandle:active {
background-image: url("checkbox-focused.svg");
}
/* Slider */
.slider {
height: 1em;
min-width: 15em;
-slider-height: 0.3em;
-slider-background-color: #333333;
-slider-border-color: #5f5f5f;
-slider-active-background-color: #76b0ec;
-slider-active-border-color: #1f6dbc;
-slider-border-width: 1px;
-slider-handle-radius: 0.5em;
}
/* PopupMenu */
.popup-menu-ornament {
@ -236,6 +222,18 @@ StScrollBar StButton#vhandle:active {
font-weight: bold;
}
.popup-slider-menu-item {
height: 1em;
min-width: 15em;
-slider-height: 0.3em;
-slider-background-color: #333333;
-slider-border-color: #5f5f5f;
-slider-active-background-color: #76b0ec;
-slider-active-border-color: #1f6dbc;
-slider-border-width: 1px;
-slider-handle-radius: 0.5em;
}
.popup-device-menu-item {
spacing: .5em;
}
@ -812,11 +810,6 @@ StScrollBar StButton#vhandle:active {
height: 24px;
}
.empty-dash-drop-target {
width: 24px;
height: 24px;
}
/* Search Box */
#searchEntry {
@ -904,11 +897,12 @@ StScrollBar StButton#vhandle:active {
}
.app-view-controls {
width: 250px;
padding-bottom: 32px;
}
.app-view-control {
padding: 4px 32px;
padding: 4px 16px;
}
.search-display > StBoxLayout,
@ -1160,6 +1154,11 @@ StScrollBar StButton#vhandle:active {
/* Calendar popup */
#calendarEventsArea {
/* this is the width of the second column of the popup */
min-width: 320px;
}
.calendar-vertical-separator {
-stipple-width: 1px;
-stipple-color: #505050;
@ -1296,40 +1295,32 @@ StScrollBar StButton#vhandle:active {
color: #333333;
}
.events-table {
min-width: 320px;
spacing-columns: 6pt;
padding: 0 1.4em;
.events-header-vbox {
spacing: 6pt;
padding-right: .5em;
}
.events-table:ltr {
padding-right: 1.9em;
.events-header-vbox:rtl {
padding-left: .5em;
}
.events-table:rtl {
padding-left: 1.9em;
.events-header-hbox {
padding: 0.3em 1.4em;
}
.events-day-header {
font-weight: bold;
color: #999999;
padding-left: 0.4em;
padding-top: 1.2em;
}
.events-day-header:first-child {
padding-top: 0;
padding: 0.4em 1.4em 0em 1.4em;
}
.events-day-header:rtl {
padding-left: 0;
padding-right: 0.4em;
padding: 0em 1.4em 0.4em 1.4em;
}
.events-day-dayname {
color: rgba(153, 153, 153, 1.0);
text-align: left;
min-width: 20px;
}
.events-day-dayname:rtl {
@ -1347,12 +1338,23 @@ StScrollBar StButton#vhandle:active {
.events-day-task {
color: rgba(153, 153, 153, 1.0);
padding-left: 8pt;
}
.events-day-task:rtl {
padding-left: 0px;
padding-right: 8pt;
.events-day-name-box {
min-width: 15pt;
}
.events-time-box {
min-width: 48pt;
padding-right: 12pt;
}
.events-time-box:rtl {
padding-right: 0px;
padding-left: 12pt;
}
.events-event-box {
}
.url-highlighter {
@ -2238,8 +2240,13 @@ StScrollBar StButton#vhandle:active {
min-width: 350px;
}
.login-dialog-button-box {
spacing: 21px;
}
.login-dialog-prompt-login-hint-message {
font-size: 10.5pt;
min-width: 480px;
}
.login-dialog-user-list-view {
@ -2319,7 +2326,6 @@ StScrollBar StButton#vhandle:active {
font-weight: bold;
color: #666666;
padding-top: 1em;
padding-left: 2px;
}
.login-dialog-not-listed-button:focus .login-dialog-not-listed-label,
@ -2347,20 +2353,46 @@ StScrollBar StButton#vhandle:active {
}
.login-dialog-prompt-entry {
width: 15em;
width: 480px;
}
.login-dialog-session-list-button StIcon {
icon-size: 1.25em;
.login-dialog-session-list,
.login-dialog-session-list-item {
color: #babdb6;
}
.login-dialog-session-list-button:focus,
.login-dialog-session-list-button:active,
.login-dialog-session-list-button:hover,
.login-dialog-session-list-item:focus,
.login-dialog-session-list-item:hover {
color: white;
}
.login-dialog-session-list-button {
color: #8b8b8b;
padding: 4px;
}
.login-dialog-session-list-button:hover,
.login-dialog-session-list-button:active {
color: white;
.login-dialog-session-list-scroll-view {
padding: 6px;
}
.login-dialog-session-list-item {
padding-bottom: 6px;
}
.login-dialog-session-list-triangle {
padding-right: 6px;
}
.login-dialog-session-list-item-box {
padding-left: 6px;
spacing: 6px;
}
.login-dialog-session-list-item-dot {
width: 10px;
height: 10px;
}
.login-dialog-logo-bin {

View File

@ -17,13 +17,8 @@ misc/config.js: misc/config.js.in Makefile
jsdir = $(pkgdatadir)/js
nobase_dist_js_DATA = \
gdm/batch.js \
gdm/fingerprint.js \
gdm/loginDialog.js \
gdm/powerMenu.js \
gdm/realmd.js \
gdm/util.js \
extensionPrefs/main.js \
misc/batch.js \
misc/config.js \
misc/extensionUtils.js \
misc/fileUtils.js \
@ -69,7 +64,6 @@ nobase_dist_js_DATA = \
ui/sessionMode.js \
ui/shellEntry.js \
ui/shellMountOperation.js \
ui/slider.js \
ui/notificationDaemon.js \
ui/osdWindow.js \
ui/overview.js \
@ -97,7 +91,7 @@ nobase_dist_js_DATA = \
ui/status/bluetooth.js \
ui/switcherPopup.js \
ui/tweener.js \
ui/unlockDialog.js \
ui/userAvatar.js \
ui/userMenu.js \
ui/userWidget.js \
ui/viewSelector.js \
@ -109,6 +103,14 @@ nobase_dist_js_DATA = \
ui/workspacesView.js \
ui/workspaceSwitcherPopup.js \
ui/xdndHandler.js \
ui/auth/fingerprint.js \
ui/auth/loginDialog.js \
ui/auth/powerMenu.js \
ui/auth/realmd.js \
ui/auth/sessionList.js \
ui/auth/unlockDialog.js \
ui/auth/userList.js \
ui/auth/util.js \
ui/components/__init__.js \
ui/components/autorunManager.js \
ui/components/automountManager.js \

View File

@ -336,42 +336,6 @@ const Views = {
ALL: 1
};
const ControlsBoxLayout = Lang.Class({
Name: 'ControlsBoxLayout',
Extends: Clutter.BoxLayout,
/**
* Override the BoxLayout behavior to use the maximum preferred width of all
* buttons for each child
*/
vfunc_get_preferred_width: function(container, forHeight) {
let maxMinWidth = 0;
let maxNaturalWidth = 0;
for (let child = container.get_first_child();
child;
child = child.get_next_sibling()) {
let [minWidth, natWidth] = child.get_preferred_width(forHeight);
maxMinWidth = Math.max(maxMinWidth, minWidth);
maxNaturalWidth = Math.max(maxNaturalWidth, natWidth);
}
let childrenCount = container.get_n_children();
let totalSpacing = this.spacing * (childrenCount - 1);
return [maxMinWidth * childrenCount + totalSpacing,
maxNaturalWidth * childrenCount + totalSpacing];
},
vfunc_set_container: function(container) {
if(this._styleChangedId) {
this._container.disconnect(this._styleChangedId);
this._styleChangedId = 0;
}
if(container != null)
this._styleChangedId = container.connect('style-changed', Lang.bind(this,
function() { this.spacing = this._container.get_theme_node().get_length('spacing'); }));
this._container = container;
}
});
const AppDisplay = new Lang.Class({
Name: 'AppDisplay',
@ -415,9 +379,9 @@ const AppDisplay = new Lang.Class({
x_expand: true, y_expand: true });
this.actor.add(this._viewStack, { expand: true });
let layout = new ControlsBoxLayout({ homogeneous: true });
this._controls = new St.Widget({ style_class: 'app-view-controls' });
this._controls.set_layout_manager(layout);
let layout = new Clutter.BoxLayout({ homogeneous: true });
this._controls = new St.Widget({ style_class: 'app-view-controls',
layout_manager: layout });
this.actor.add(new St.Bin({ child: this._controls }));

View File

@ -21,27 +21,31 @@
const AccountsService = imports.gi.AccountsService;
const Atk = imports.gi.Atk;
const Clutter = imports.gi.Clutter;
const Gdm = imports.gi.Gdm;
const CtrlAltTab = imports.ui.ctrlAltTab;
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const Gtk = imports.gi.Gtk;
const Lang = imports.lang;
const Mainloop = imports.mainloop;
const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell;
const Lang = imports.lang;
const Pango = imports.gi.Pango;
const Realmd = imports.ui.auth.realmd;
const Signals = imports.signals;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
const Gdm = imports.gi.Gdm;
const Animation = imports.ui.animation;
const Batch = imports.gdm.batch;
const BoxPointer = imports.ui.boxpointer;
const CtrlAltTab = imports.ui.ctrlAltTab;
const GdmUtil = imports.gdm.util;
const AuthUtil = imports.ui.auth.util;
const Batch = imports.misc.batch;
const Fprint = imports.ui.auth.fingerprint;
const Layout = imports.ui.layout;
const Main = imports.ui.main;
const PopupMenu = imports.ui.popupMenu;
const Realmd = imports.gdm.realmd;
const ModalDialog = imports.ui.modalDialog;
const SessionList = imports.ui.auth.sessionList;
const Tweener = imports.ui.tweener;
const UserAvatar = imports.ui.userAvatar;
const UserList = imports.ui.auth.userList;
const UserWidget = imports.ui.userWidget;
const _FADE_ANIMATION_TIME = 0.25;
@ -54,355 +58,21 @@ const _LOGO_ICON_HEIGHT = 48;
let _loginDialog = null;
const UserListItem = new Lang.Class({
Name: 'UserListItem',
_init: function(user) {
this.user = user;
this._userChangedId = this.user.connect('changed',
Lang.bind(this, this._onUserChanged));
let layout = new St.BoxLayout({ vertical: false });
this.actor = new St.Button({ style_class: 'login-dialog-user-list-item',
button_mask: St.ButtonMask.ONE | St.ButtonMask.THREE,
can_focus: true,
child: layout,
reactive: true,
x_align: St.Align.START,
x_fill: true });
this._userAvatar = new UserWidget.Avatar(this.user,
{ styleClass: 'login-dialog-user-list-item-icon' });
layout.add(this._userAvatar.actor);
let textLayout = new St.BoxLayout({ style_class: 'login-dialog-user-list-item-text-box',
vertical: true });
layout.add(textLayout, { expand: true });
this._nameLabel = new St.Label({ style_class: 'login-dialog-user-list-item-name' });
this.actor.label_actor = this._nameLabel;
textLayout.add(this._nameLabel,
{ y_fill: false,
y_align: St.Align.MIDDLE,
expand: true });
this._timedLoginIndicator = new St.Bin({ style_class: 'login-dialog-timed-login-indicator',
scale_x: 0 });
textLayout.add(this._timedLoginIndicator,
{ x_fill: true,
x_align: St.Align.MIDDLE,
y_fill: false,
y_align: St.Align.END });
this.actor.connect('clicked', Lang.bind(this, this._onClicked));
this._onUserChanged();
},
_onUserChanged: function() {
this._nameLabel.set_text(this.user.get_real_name());
this._userAvatar.update();
this._updateLoggedIn();
},
syncStyleClasses: function() {
this._updateLoggedIn();
if (global.stage.get_key_focus() == this.actor)
this.actor.add_style_pseudo_class('focus');
else
this.actor.remove_style_pseudo_class('focus');
},
_updateLoggedIn: function() {
if (this.user.is_logged_in())
this.actor.add_style_pseudo_class('logged-in');
else
this.actor.remove_style_pseudo_class('logged-in');
},
_onClicked: function() {
this.emit('activate');
},
showTimedLoginIndicator: function(time) {
let hold = new Batch.Hold();
this.hideTimedLoginIndicator();
Tweener.addTween(this._timedLoginIndicator,
{ scale_x: 1.,
time: time,
transition: 'linear',
onComplete: function() {
hold.release();
},
onCompleteScope: this
});
return hold;
},
hideTimedLoginIndicator: function() {
Tweener.removeTweens(this._timedLoginIndicator);
this._timedLoginIndicator.scale_x = 0.;
}
});
Signals.addSignalMethods(UserListItem.prototype);
const UserList = new Lang.Class({
Name: 'UserList',
_init: function() {
this.actor = new St.ScrollView({ style_class: 'login-dialog-user-list-view'});
this.actor.set_policy(Gtk.PolicyType.NEVER,
Gtk.PolicyType.AUTOMATIC);
this._box = new St.BoxLayout({ vertical: true,
style_class: 'login-dialog-user-list',
pseudo_class: 'expanded' });
this.actor.add_actor(this._box);
this._items = {};
this.actor.connect('key-focus-in', Lang.bind(this, this._moveFocusToItems));
},
_moveFocusToItems: function() {
let hasItems = Object.keys(this._items).length > 0;
if (!hasItems)
return;
if (global.stage.get_key_focus() != this.actor)
return;
let focusSet = this.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
if (!focusSet) {
Meta.later_add(Meta.LaterType.BEFORE_REDRAW, Lang.bind(this, function() {
this._moveFocusToItems();
return false;
}));
}
},
_onItemActivated: function(activatedItem) {
this.emit('activate', activatedItem);
},
updateStyle: function(isExpanded) {
let tasks = [];
if (isExpanded)
this._box.add_style_pseudo_class('expanded');
else
this._box.remove_style_pseudo_class('expanded');
for (let userName in this._items) {
let item = this._items[userName];
item.actor.sync_hover();
item.syncStyleClasses();
}
},
scrollToItem: function(item) {
let box = item.actor.get_allocation_box();
let adjustment = this.actor.get_vscroll_bar().get_adjustment();
let value = (box.y1 + adjustment.step_increment / 2.0) - (adjustment.page_size / 2.0);
Tweener.removeTweens(adjustment);
Tweener.addTween (adjustment,
{ value: value,
time: _SCROLL_ANIMATION_TIME,
transition: 'easeOutQuad' });
},
jumpToItem: function(item) {
let box = item.actor.get_allocation_box();
let adjustment = this.actor.get_vscroll_bar().get_adjustment();
let value = (box.y1 + adjustment.step_increment / 2.0) - (adjustment.page_size / 2.0);
adjustment.set_value(value);
},
getItemFromUserName: function(userName) {
let item = this._items[userName];
if (!item)
return null;
return item;
},
addUser: function(user) {
if (!user.is_loaded)
return;
if (user.is_system_account())
return;
if (user.locked)
return;
let userName = user.get_user_name();
if (!userName)
return;
this.removeUser(user);
let item = new UserListItem(user);
this._box.add(item.actor, { x_fill: true });
this._items[userName] = item;
item.connect('activate',
Lang.bind(this, this._onItemActivated));
// Try to keep the focused item front-and-center
item.actor.connect('key-focus-in',
Lang.bind(this,
function() {
this.scrollToItem(item);
}));
this._moveFocusToItems();
this.emit('item-added', item);
},
removeUser: function(user) {
if (!user.is_loaded)
return;
let userName = user.get_user_name();
if (!userName)
return;
let item = this._items[userName];
if (!item)
return;
item.actor.destroy();
delete this._items[userName];
}
});
Signals.addSignalMethods(UserList.prototype);
const SessionList = new Lang.Class({
Name: 'SessionList',
_init: function() {
let gearIcon = new St.Icon({ icon_name: 'emblem-system-symbolic' });
this._button = new St.Button({ style_class: 'login-dialog-session-list-button',
reactive: true,
track_hover: true,
can_focus: true,
accessible_name: _("Choose Session"),
accessible_role: Atk.Role.MENU,
child: gearIcon });
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);
this._menu.actor.hide();
this._menu.connect('open-state-changed',
Lang.bind(this, function(menu, isOpen) {
if (isOpen)
this._button.add_style_pseudo_class('active');
else
this._button.remove_style_pseudo_class('active');
}));
let subtitle = new PopupMenu.PopupMenuItem(_("Session"), { style_class: 'popup-subtitle-menu-item',
reactive: false });
this._menu.addMenuItem(subtitle);
this._manager = new PopupMenu.PopupMenuManager({ actor: this._button });
this._manager.addMenu(this._menu);
this._button.connect('clicked', Lang.bind(this, function() {
this._menu.toggle();
}));
this._items = {};
this._activeSessionId = null;
this._populate();
},
updateSensitivity: function(sensitive) {
this._button.reactive = sensitive;
this._button.can_focus = sensitive;
this._menu.close(BoxPointer.PopupAnimation.NONE);
},
_updateOrnament: function() {
let itemIds = Object.keys(this._items);
for (let i = 0; i < itemIds.length; i++) {
if (itemIds[i] == this._activeSessionId)
this._items[itemIds[i]].setOrnament(PopupMenu.Ornament.DOT);
else
this._items[itemIds[i]].setOrnament(PopupMenu.Ornament.NONE);
}
},
setActiveSession: function(sessionId) {
if (sessionId == this._activeSessionId)
return;
this._activeSessionId = sessionId;
this._updateOrnament();
this.emit('session-activated', this._activeSessionId);
},
close: function() {
this._menu.close();
},
_populate: function() {
let ids = Gdm.get_session_ids();
ids.sort();
if (ids.length <= 1) {
this._button.hide();
return;
}
for (let i = 0; i < ids.length; i++) {
let [sessionName, sessionDescription] = Gdm.get_session_name_and_description(ids[i]);
let id = ids[i];
let item = new PopupMenu.PopupMenuItem(sessionName);
this._menu.addMenuItem(item);
this._items[id] = item;
if (!this._activeSessionId)
this.setActiveSession(id);
item.connect('activate', Lang.bind(this, function() {
this.setActiveSession(id);
}));
}
}
});
Signals.addSignalMethods(SessionList.prototype);
const LoginDialog = new Lang.Class({
Name: 'LoginDialog',
_init: function(parentActor) {
this.actor = new St.Widget({ accessible_role: Atk.Role.WINDOW,
style_class: 'login-dialog',
visible: false });
style_class: 'login-dialog' });
this.actor.add_constraint(new Layout.MonitorConstraint({ primary: true }));
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
parentActor.add_child(this.actor);
Main.ctrlAltTabManager.addGroup(this.actor,
_("Login Window"),
'dialog-password-symbolic',
{ sortGroup: CtrlAltTab.SortGroup.MIDDLE });
this._userManager = AccountsService.UserManager.get_default()
this._greeterClient = new Gdm.Client();
@ -418,24 +88,24 @@ const LoginDialog = new Lang.Class({
Lang.bind(this, this._onTimedLoginRequested));
}
this._userVerifier = new GdmUtil.ShellUserVerifier(this._greeterClient);
this._userVerifier = new AuthUtil.ShellUserVerifier(this._greeterClient);
this._userVerifier.connect('ask-question', Lang.bind(this, this._askQuestion));
this._userVerifier.connect('show-message', Lang.bind(this, this._showMessage));
this._userVerifier.connect('show-message', Lang.bind(this, this._onShowMessage));
this._userVerifier.connect('verification-failed', Lang.bind(this, this._verificationFailed));
this._userVerifier.connect('reset', Lang.bind(this, this._reset));
this._userVerifier.connect('show-login-hint', Lang.bind(this, this._showLoginHint));
this._userVerifier.connect('hide-login-hint', Lang.bind(this, this._hideLoginHint));
this._verifyingUser = false;
this._settings = new Gio.Settings({ schema: GdmUtil.LOGIN_SCREEN_SCHEMA });
this._settings = new Gio.Settings({ schema: AuthUtil.LOGIN_SCREEN_SCHEMA });
this._settings.connect('changed::' + GdmUtil.BANNER_MESSAGE_KEY,
this._settings.connect('changed::' + AuthUtil.BANNER_MESSAGE_KEY,
Lang.bind(this, this._updateBanner));
this._settings.connect('changed::' + GdmUtil.BANNER_MESSAGE_TEXT_KEY,
this._settings.connect('changed::' + AuthUtil.BANNER_MESSAGE_TEXT_KEY,
Lang.bind(this, this._updateBanner));
this._settings.connect('changed::' + GdmUtil.DISABLE_USER_LIST_KEY,
this._settings.connect('changed::' + AuthUtil.DISABLE_USER_LIST_KEY,
Lang.bind(this, this._updateDisableUserList));
this._settings.connect('changed::' + GdmUtil.LOGO_KEY,
this._settings.connect('changed::' + AuthUtil.LOGO_KEY,
Lang.bind(this, this._updateLogo));
this._textureCache = St.TextureCache.get_default();
@ -444,6 +114,7 @@ const LoginDialog = new Lang.Class({
this._userSelectionBox = new St.BoxLayout({ style_class: 'login-dialog-user-selection-box',
vertical: true });
this._userSelectionBox.add_constraint(new Clutter.AlignConstraint({ source: this.actor,
align_axis: Clutter.AlignAxis.BOTH,
factor: 0.5 }));
@ -454,22 +125,16 @@ const LoginDialog = new Lang.Class({
this._userSelectionBox.add(this._bannerLabel);
this._updateBanner();
this._userList = new UserList();
this._userList = new UserList.UserList();
this._userSelectionBox.add(this._userList.actor,
{ expand: true,
x_fill: true,
y_fill: true });
this._userList.actor.grab_key_focus();
this._promptBox = new St.BoxLayout({ style_class: 'login-dialog-prompt-layout',
vertical: true });
this._promptBox.connect('button-press-event',
Lang.bind(this, function(actor, event) {
if (event.get_key_symbol() == Clutter.KEY_Escape) {
this.cancel();
}
}));
this._promptBox.add_constraint(new Clutter.AlignConstraint({ source: this.actor,
align_axis: Clutter.AlignAxis.BOTH,
factor: 0.5 }));
@ -493,19 +158,41 @@ const LoginDialog = new Lang.Class({
this._promptEntryTextChangedId = 0;
this._promptEntryActivateId = 0;
this._promptBox.add(this._promptEntry,
{ expand: false,
x_fill: false });
this._promptMessage = new St.Label({ opacity: 0 });
this.actor.add_child(this._promptMessage);
this._promptMessagePlaceholder = new Clutter.Actor({ width: 1, height: 1 });
this._promptBox.add_child(this._promptMessagePlaceholder);
this._promptMessagePlaceholder.add_constraint(new Clutter.BindConstraint({ source: this._promptMessage,
coordinate: Clutter.BindCoordinate.HEIGHT }));
this._promptMessage.add_constraint(new Clutter.AlignConstraint({ source: this.actor,
align_axis: Clutter.AlignAxis.X_AXIS,
factor: 0.5 }));
this._promptMessagePlaceholder.connect("notify::y", Lang.bind(this, function() {
let [placeholderX , placeholderY] = this._promptMessagePlaceholder.get_transformed_position();
let [actorX, actorY] = this.actor.get_transformed_position();
this._promptMessage.y = placeholderY - actorY;
}));
this._sessionList = new SessionList.SessionList();
this._sessionList.connect('session-activated',
Lang.bind(this, function(list, sessionId) {
this._greeter.call_select_session_sync (sessionId, null);
}));
this._promptBox.add(this._sessionList.actor,
{ expand: true,
x_fill: true,
y_fill: false,
x_fill: false,
y_fill: true,
x_align: St.Align.START });
this._promptMessage = new St.Label({ visible: false });
this._promptBox.add(this._promptMessage, { x_fill: true });
this._promptLoginHint = new St.Label({ style_class: 'login-dialog-prompt-login-hint-message' });
this._promptLoginHint.hide();
this._promptBox.add(this._promptLoginHint);
this._buttonBox = new St.BoxLayout({ style_class: 'modal-dialog-button-box',
this._buttonBox = new St.BoxLayout({ style_class: 'login-dialog-button-box',
vertical: false });
this._promptBox.add(this._buttonBox,
{ expand: true,
@ -544,7 +231,7 @@ const LoginDialog = new Lang.Class({
this._logoBin.add_constraint(new Clutter.AlignConstraint({ source: this.actor,
align_axis: Clutter.AlignAxis.Y_AXIS,
factor: 1.0 }));
this.actor.add_child(this._logoBin);
this.actor.add_actor(this._logoBin);
this._updateLogo();
if (!this._userManager.is_loaded)
@ -564,30 +251,10 @@ const LoginDialog = new Lang.Class({
this._onUserListActivated(item);
}));
this._defaultButtonWell = new St.Widget();
this._sessionList = new SessionList();
this._sessionList.connect('session-activated',
Lang.bind(this, function(list, sessionId) {
this._greeter.call_select_session_sync (sessionId, null);
}));
this._sessionList.actor.opacity = 0;
this._sessionList.actor.show();
this._defaultButtonWell.add_child(this._sessionList.actor);
let spinnerIcon = global.datadir + '/theme/process-working.svg';
this._workSpinner = new Animation.AnimatedIcon(spinnerIcon, _WORK_SPINNER_ICON_SIZE);
this._workSpinner.actor.opacity = 0;
this._workSpinner.actor.show();
this._defaultButtonWell.add_child(this._workSpinner.actor);
this._sessionList.actor.add_constraint(new Clutter.AlignConstraint({ source: this._workSpinner.actor,
align_axis: Clutter.AlignAxis.BOTH,
factor: 0.5 }));
},
_updateDisableUserList: function() {
let disableUserList = this._settings.get_boolean(GdmUtil.DISABLE_USER_LIST_KEY);
let disableUserList = this._settings.get_boolean(AuthUtil.DISABLE_USER_LIST_KEY);
// If this is the first time around, set initial focus
if (this._disableUserList == undefined && disableUserList)
@ -602,8 +269,8 @@ const LoginDialog = new Lang.Class({
},
_updateBanner: function() {
let enabled = this._settings.get_boolean(GdmUtil.BANNER_MESSAGE_KEY);
let text = this._settings.get_string(GdmUtil.BANNER_MESSAGE_TEXT_KEY);
let enabled = this._settings.get_boolean(AuthUtil.BANNER_MESSAGE_KEY);
let text = this._settings.get_string(AuthUtil.BANNER_MESSAGE_TEXT_KEY);
if (enabled && text) {
this._bannerLabel.set_text(text);
@ -625,7 +292,7 @@ const LoginDialog = new Lang.Class({
},
_updateLogo: function() {
let path = this._settings.get_string(GdmUtil.LOGO_KEY);
let path = this._settings.get_string(AuthUtil.LOGO_KEY);
this._logoFileUri = path ? Gio.file_new_for_path(path).get_uri() : null;
this._updateLogoTexture(this._textureCache, this._logoFileUri);
@ -635,7 +302,7 @@ const LoginDialog = new Lang.Class({
this._userVerifier.clear();
this._updateSensitivity(true);
this._promptMessage.hide();
this._promptMessage.opacity = 0;
this._user = null;
this._verifyingUser = false;
@ -651,14 +318,6 @@ const LoginDialog = new Lang.Class({
Tweener.removeTweens(this._workSpinner.actor);
if (working) {
if (this._sessionList.actor.opacity > 0)
Tweener.addTween(this._sessionList.actor,
{ opacity: 0,
delay: _WORK_SPINNER_ANIMATION_DELAY,
time: _WORK_SPINNER_ANIMATION_TIME,
transition: 'linear'
});
this._workSpinner.play();
Tweener.addTween(this._workSpinner.actor,
{ opacity: 255,
@ -667,13 +326,6 @@ const LoginDialog = new Lang.Class({
transition: 'linear'
});
} else {
if (this._sessionList.actor.opacity == 0 && this._shouldShowSessionList())
Tweener.addTween(this._sessionList.actor,
{ opacity: 255,
delay: _WORK_SPINNER_ANIMATION_DELAY,
time: _WORK_SPINNER_ANIMATION_TIME,
transition: 'linear'
});
Tweener.addTween(this._workSpinner.actor,
{ opacity: 0,
time: _WORK_SPINNER_ANIMATION_TIME,
@ -698,25 +350,31 @@ const LoginDialog = new Lang.Class({
this._sessionList.setActiveSession(sessionId);
},
_showMessage: function(userVerifier, message, styleClass) {
_showMessage: function(message, styleClass) {
if (message) {
this._promptMessage.text = message;
this._promptMessage.styleClass = styleClass;
this._promptMessage.show();
this._promptMessage.opacity = 255;
} else {
this._promptMessage.hide();
this._promptMessage.opacity = 0;
}
},
_onShowMessage: function(userVerifier, message, styleClass) {
this._showMessage(message, styleClass);
this._loginHintShown = false;
},
_showLoginHint: function(verifier, message) {
this._promptLoginHint.set_text(message)
this._promptLoginHint.show();
this._promptLoginHint.opacity = 255;
this._showMessage(message, 'login-dialog-prompt-login-hint-message');
this._loginHintShown = true;
},
_hideLoginHint: function() {
this._promptLoginHint.hide();
this._promptLoginHint.set_text('');
if (!this._loginHintShown)
return;
this._showMessage('', 'login-dialog-prompt-login-hint-message');
this._loginHintShown = false;
},
cancel: function() {
@ -726,24 +384,10 @@ const LoginDialog = new Lang.Class({
this._reset();
},
_shouldShowSessionList: function() {
if (this._verifyingUser)
return true;
if (!this._user)
return false;
if (this._user.is_logged_in)
return false;
return true;
},
_showPrompt: function(forSecret) {
this._sessionList.actor.hide();
this._promptLabel.show();
this._promptEntry.show();
this._promptLoginHint.opacity = 0;
this._promptLoginHint.show();
this._promptBox.opacity = 0;
this._promptBox.show();
Tweener.addTween(this._promptBox,
@ -751,11 +395,8 @@ const LoginDialog = new Lang.Class({
time: _FADE_ANIMATION_TIME,
transition: 'easeOutQuad' });
if (this._shouldShowSessionList()) {
this._sessionList.actor.opacity = 255;
} else {
this._sessionList.actor.opacity = 0;
}
if ((this._user && !this._user.is_logged_in()) || this._verifyingUser)
this._sessionList.actor.show();
this._promptEntry.grab_key_focus();
@ -773,7 +414,7 @@ const LoginDialog = new Lang.Class({
_prepareDialog: function(forSecret, hold) {
this._buttonBox.visible = true;
this._buttonBox.remove_all_children();
this._buttonBox.destroy_all_children();
if (!this._disableUserList || this._verifyingUser) {
this._cancelButton = new St.Button({ style_class: 'modal-dialog-button',
@ -785,20 +426,33 @@ const LoginDialog = new Lang.Class({
Lang.bind(this, function() {
this.cancel();
}));
global.stage.connect('captured-event',
Lang.bind(this, function(actor, event) {
if (event.type() == Clutter.EventType.KEY_PRESS &&
event.get_key_symbol() == Clutter.KEY_Escape) {
this.cancel();
}
}));
this._buttonBox.add(this._cancelButton,
{ expand: false,
{ expand: true,
x_fill: false,
y_fill: false,
x_align: St.Align.START,
y_align: St.Align.END });
}
this._buttonBox.add(this._defaultButtonWell,
{ expand: true,
let spinnerIcon = global.datadir + '/theme/process-working.svg';
this._workSpinner = new Animation.AnimatedIcon(spinnerIcon, _WORK_SPINNER_ICON_SIZE);
this._workSpinner.actor.opacity = 0;
this._workSpinner.actor.show();
this._buttonBox.add(this._workSpinner.actor,
{ expand: false,
x_fill: false,
y_fill: false,
x_align: St.Align.END,
y_align: St.Align.MIDDLE });
this._signInButton = new St.Button({ style_class: 'modal-dialog-button',
button_mask: St.ButtonMask.ONE | St.ButtonMask.THREE,
reactive: true,
@ -810,7 +464,7 @@ const LoginDialog = new Lang.Class({
}));
this._signInButton.add_style_pseudo_class('default');
this._buttonBox.add(this._signInButton,
{ expand: false,
{ expand: true,
x_fill: false,
y_fill: false,
x_align: St.Align.END,
@ -824,10 +478,10 @@ const LoginDialog = new Lang.Class({
this._updateSignInButtonSensitivity(this._promptEntry.text.length > 0);
}));
this._promptEntryActivateId =
this._promptEntry.clutter_text.connect('activate', function() {
hold.release();
});
this._promptEntryActivateId =
this._promptEntry.clutter_text.connect('activate', function() {
hold.release();
});
},
_updateSensitivity: function(sensitive) {
@ -845,6 +499,8 @@ const LoginDialog = new Lang.Class({
},
_hidePrompt: function() {
this._buttonBox.destroy_all_children();
if (this._promptEntryTextChangedId > 0) {
this._promptEntry.clutter_text.disconnect(this._promptEntryTextChangedId);
this._promptEntryTextChangedId = 0;
@ -857,7 +513,6 @@ const LoginDialog = new Lang.Class({
this._setWorking(false);
this._promptBox.hide();
this._promptLoginHint.hide();
this._promptUser.set_child(null);
@ -865,9 +520,8 @@ const LoginDialog = new Lang.Class({
this._promptEntry.set_text('');
this._sessionList.close();
this._promptLoginHint.hide();
this._buttonBox.remove_all_children();
this._buttonBox.destroy_all_children();
this._signInButton = null;
this._cancelButton = null;
},
@ -1100,7 +754,7 @@ const LoginDialog = new Lang.Class({
_hideUserListAndLogIn: function() {
this._setUserListExpanded(false);
GdmUtil.cloneAndFadeOutActor(this._userSelectionBox);
AuthUtil.cloneAndFadeOutActor(this._userSelectionBox);
this._askForUsernameAndLogIn();
},
@ -1132,7 +786,7 @@ const LoginDialog = new Lang.Class({
_onUserListActivated: function(activatedItem) {
let tasks = [function() {
return GdmUtil.cloneAndFadeOutActor(this._userSelectionBox);
return AuthUtil.cloneAndFadeOutActor(this._userSelectionBox);
},
function() {
this._setUserListExpanded(false);
@ -1150,6 +804,8 @@ const LoginDialog = new Lang.Class({
this._userManager.disconnect(this._userManagerLoadedId);
this._userManagerLoadedId = 0;
}
Main.ctrlAltTabManager.removeGroup(this.actor);
},
_loadUserList: function() {
@ -1172,23 +828,7 @@ const LoginDialog = new Lang.Class({
}));
},
open: function() {
Main.ctrlAltTabManager.addGroup(this.actor,
_("Login Window"),
'dialog-password-symbolic',
{ sortGroup: CtrlAltTab.SortGroup.MIDDLE });
this._userList.actor.grab_key_focus();
this.actor.show();
return true;
},
close: function() {
Main.ctrlAltTabManager.removeGroup(this.dialogLayout);
},
addCharacter: function(unichar) {
this._promptEntry.clutter_text.insert_unichar(unichar);
},
});
Signals.addSignalMethods(LoginDialog.prototype);

View File

@ -23,7 +23,7 @@ const Lang = imports.lang;
const LoginManager = imports.misc.loginManager;
const GdmUtil = imports.gdm.util;
const AuthUtil = imports.ui.auth.util;
const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu;
@ -37,7 +37,7 @@ const PowerMenuButton = new Lang.Class({
this._loginManager = LoginManager.getLoginManager();
this._settings = new Gio.Settings({ schema: GdmUtil.LOGIN_SCREEN_SCHEMA });
this._settings = new Gio.Settings({ schema: AuthUtil.LOGIN_SCREEN_SCHEMA });
this._settings.connect('changed::disable-restart-buttons',
Lang.bind(this, this._updateVisibility));

230
js/ui/auth/sessionList.js Normal file
View File

@ -0,0 +1,230 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
/*
* Copyright 2011 Red Hat, Inc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
const Gtk = imports.gi.Gtk;
const Lang = imports.lang;
const Signals = imports.signals;
const St = imports.gi.St;
const Gdm = imports.gi.Gdm;
const SessionListItem = new Lang.Class({
Name: 'SessionListItem',
_init: function(id, name) {
this.id = id;
this.actor = new St.Button({ style_class: 'login-dialog-session-list-item',
button_mask: St.ButtonMask.ONE | St.ButtonMask.THREE,
can_focus: true,
reactive: true,
x_fill: true,
x_align: St.Align.START });
this._box = new St.BoxLayout({ style_class: 'login-dialog-session-list-item-box' });
this.actor.add_actor(this._box);
this.actor.connect('clicked', Lang.bind(this, this._onClicked));
this._dot = new St.DrawingArea({ style_class: 'login-dialog-session-list-item-dot' });
this._dot.connect('repaint', Lang.bind(this, this._onRepaintDot));
this._box.add_actor(this._dot);
this.setShowDot(false);
let label = new St.Label({ style_class: 'login-dialog-session-list-item-label',
text: name });
this.actor.label_actor = label;
this._box.add_actor(label);
},
setShowDot: function(show) {
if (show)
this._dot.opacity = 255;
else
this._dot.opacity = 0;
},
_onRepaintDot: function(area) {
let cr = area.get_context();
let [width, height] = area.get_surface_size();
let color = area.get_theme_node().get_foreground_color();
cr.setSourceRGBA (color.red / 255,
color.green / 255,
color.blue / 255,
color.alpha / 255);
cr.arc(width / 2, height / 2, width / 3, 0, 2 * Math.PI);
cr.fill();
cr.$dispose();
},
_onClicked: function() {
this.emit('activate');
}
});
Signals.addSignalMethods(SessionListItem.prototype);
const SessionList = new Lang.Class({
Name: 'SessionList',
_init: function() {
this.actor = new St.Bin();
this._box = new St.BoxLayout({ style_class: 'login-dialog-session-list',
vertical: true});
this.actor.child = this._box;
this._button = new St.Button({ style_class: 'login-dialog-session-list-button',
button_mask: St.ButtonMask.ONE | St.ButtonMask.THREE,
can_focus: true,
x_fill: true,
y_fill: true });
let box = new St.BoxLayout();
this._button.add_actor(box);
this._triangle = new St.Label({ style_class: 'login-dialog-session-list-triangle',
text: '\u25B8' });
box.add_actor(this._triangle);
let label = new St.Label({ style_class: 'login-dialog-session-list-label',
text: _("Session…") });
box.add_actor(label);
this._button.connect('clicked',
Lang.bind(this, this._onClicked));
this._box.add_actor(this._button);
this._scrollView = new St.ScrollView({ style_class: 'login-dialog-session-list-scroll-view'});
this._scrollView.set_policy(Gtk.PolicyType.NEVER,
Gtk.PolicyType.AUTOMATIC);
this._box.add_actor(this._scrollView);
this._itemList = new St.BoxLayout({ style_class: 'login-dialog-session-item-list',
vertical: true });
this._scrollView.add_actor(this._itemList);
this._hideSessions();
this.isOpen = false;
this._populate();
},
_hideSessions: function() {
this._itemList.can_focus = false;
this._itemList.reactive = false;
this._scrollView.opacity = 0;
},
_showSessions: function() {
this._scrollView.opacity = 255;
this._itemList.reactive = true;
this._itemList.can_focus = true;
},
open: function() {
if (this.isOpen)
return;
this._button.add_style_pseudo_class('open');
this._showSessions();
this._triangle.set_text('\u25BE');
this.isOpen = true;
},
close: function() {
if (!this.isOpen)
return;
this._button.remove_style_pseudo_class('open');
this._hideSessions();
this._triangle.set_text('\u25B8');
this.isOpen = false;
},
_onClicked: function() {
if (!this.isOpen)
this.open();
else
this.close();
},
updateSensitivity: function(sensitive) {
this._button.reactive = sensitive;
this._button.can_focus = sensitive;
for (let id in this._items)
this._items[id].actor.reactive = sensitive;
},
setActiveSession: function(sessionId) {
if (sessionId == this._activeSessionId)
return;
if (this._activeSessionId)
this._items[this._activeSessionId].setShowDot(false);
this._items[sessionId].setShowDot(true);
this._activeSessionId = sessionId;
this.emit('session-activated', this._activeSessionId);
},
_populate: function() {
this._itemList.destroy_all_children();
this._activeSessionId = null;
this._items = {};
let ids = Gdm.get_session_ids();
ids.sort();
if (ids.length <= 1) {
this._box.hide();
this._button.hide();
} else {
this._button.show();
this._box.show();
}
for (let i = 0; i < ids.length; i++) {
let [sessionName, sessionDescription] = Gdm.get_session_name_and_description(ids[i]);
let item = new SessionListItem(ids[i], sessionName);
this._itemList.add_actor(item.actor);
this._items[ids[i]] = item;
if (!this._activeSessionId)
this.setActiveSession(ids[i]);
item.connect('activate',
Lang.bind(this, function() {
this.setActiveSession(item.id);
}));
item.actor.can_focus = this._itemList.can_focus;
let signalId = this._itemList.connect('notify::can-focus',
Lang.bind(this, function() {
item.actor.can_focus = this._itemList.can_focus;
}));
item.actor.connect('destroy',
Lang.bind(this, function() {
this._itemList.disconnect(signalId);
}));
}
}
});
Signals.addSignalMethods(SessionList.prototype);

View File

@ -6,22 +6,17 @@ const Gdm = imports.gi.Gdm;
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const GnomeDesktop = imports.gi.GnomeDesktop;
const Gtk = imports.gi.Gtk;
const Lang = imports.lang;
const Signals = imports.signals;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
const Main = imports.ui.main;
const ModalDialog = imports.ui.modalDialog;
const Panel = imports.ui.panel;
const ShellEntry = imports.ui.shellEntry;
const Tweener = imports.ui.tweener;
const UserWidget = imports.ui.userWidget;
const Batch = imports.gdm.batch;
const GdmUtil = imports.gdm.util;
const LoginDialog = imports.gdm.loginDialog;
const AuthUtil = imports.ui.auth.util;
const Batch = imports.misc.batch;
// The timeout before going back automatically to the lock screen (in seconds)
const IDLE_TIMEOUT = 2 * 60;
@ -45,7 +40,7 @@ const UnlockDialog = new Lang.Class({
this._firstQuestion = true;
this._greeterClient = new Gdm.Client();
this._userVerifier = new GdmUtil.ShellUserVerifier(this._greeterClient, { reauthenticationOnly: true });
this._userVerifier = new AuthUtil.ShellUserVerifier(this._greeterClient, { reauthenticationOnly: true });
this._userVerified = false;
this._userVerifier.connect('ask-question', Lang.bind(this, this._onAskQuestion));
@ -162,9 +157,9 @@ const UnlockDialog = new Lang.Class({
if (message) {
this._promptMessage.text = message;
this._promptMessage.styleClass = styleClass;
GdmUtil.fadeInActor(this._promptMessage);
AuthUtil.fadeInActor(this._promptMessage);
} else {
GdmUtil.fadeOutActor(this._promptMessage);
AuthUtil.fadeOutActor(this._promptMessage);
}
},
@ -193,11 +188,11 @@ const UnlockDialog = new Lang.Class({
_showLoginHint: function(verifier, message) {
this._promptLoginHint.set_text(message)
GdmUtil.fadeInActor(this._promptLoginHint);
AuthUtil.fadeInActor(this._promptLoginHint);
},
_hideLoginHint: function() {
GdmUtil.fadeOutActor(this._promptLoginHint);
AuthUtil.fadeOutActor(this._promptLoginHint);
},
_doUnlock: function() {

251
js/ui/auth/userList.js Normal file
View File

@ -0,0 +1,251 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const AccountsService = imports.gi.AccountsService;
const Gtk = imports.gi.Gtk;
const Meta = imports.gi.Meta;
const Lang = imports.lang;
const Signals = imports.signals;
const St = imports.gi.St;
const Gdm = imports.gi.Gdm;
const Batch = imports.misc.batch;
const Tweener = imports.ui.tweener;
const UserAvatar = imports.ui.userAvatar;
const _SCROLL_ANIMATION_TIME = 0.5;
const UserListItem = new Lang.Class({
Name: 'UserListItem',
_init: function(user) {
this.user = user;
this._userChangedId = this.user.connect('changed',
Lang.bind(this, this._onUserChanged));
let layout = new St.BoxLayout({ vertical: false });
this.actor = new St.Button({ style_class: 'login-dialog-user-list-item',
button_mask: St.ButtonMask.ONE | St.ButtonMask.THREE,
can_focus: true,
child: layout,
reactive: true,
x_align: St.Align.START,
x_fill: true });
this._userAvatar = new UserAvatar.UserAvatar(this.user,
{ styleClass: 'login-dialog-user-list-item-icon' });
layout.add(this._userAvatar.actor);
let textLayout = new St.BoxLayout({ style_class: 'login-dialog-user-list-item-text-box',
vertical: true });
layout.add(textLayout, { expand: true });
this._nameLabel = new St.Label({ style_class: 'login-dialog-user-list-item-name' });
this.actor.label_actor = this._nameLabel;
textLayout.add(this._nameLabel,
{ y_fill: false,
y_align: St.Align.MIDDLE,
expand: true });
this._timedLoginIndicator = new St.Bin({ style_class: 'login-dialog-timed-login-indicator',
scale_x: 0 });
textLayout.add(this._timedLoginIndicator,
{ x_fill: true,
x_align: St.Align.MIDDLE,
y_fill: false,
y_align: St.Align.END });
this.actor.connect('clicked', Lang.bind(this, this._onClicked));
this._onUserChanged();
},
_onUserChanged: function() {
this._nameLabel.set_text(this.user.get_real_name());
this._userAvatar.update();
this._updateLoggedIn();
},
syncStyleClasses: function() {
this._updateLoggedIn();
if (global.stage.get_key_focus() == this.actor)
this.actor.add_style_pseudo_class('focus');
else
this.actor.remove_style_pseudo_class('focus');
},
_updateLoggedIn: function() {
if (this.user.is_logged_in())
this.actor.add_style_pseudo_class('logged-in');
else
this.actor.remove_style_pseudo_class('logged-in');
},
_onClicked: function() {
this.emit('activate');
},
showTimedLoginIndicator: function(time) {
let hold = new Batch.Hold();
this.hideTimedLoginIndicator();
Tweener.addTween(this._timedLoginIndicator,
{ scale_x: 1.,
time: time,
transition: 'linear',
onComplete: function() {
hold.release();
},
onCompleteScope: this
});
return hold;
},
hideTimedLoginIndicator: function() {
Tweener.removeTweens(this._timedLoginIndicator);
this._timedLoginIndicator.scale_x = 0.;
}
});
Signals.addSignalMethods(UserListItem.prototype);
const UserList = new Lang.Class({
Name: 'UserList',
_init: function() {
this.actor = new St.ScrollView({ style_class: 'login-dialog-user-list-view'});
this.actor.set_policy(Gtk.PolicyType.NEVER,
Gtk.PolicyType.AUTOMATIC);
this._box = new St.BoxLayout({ vertical: true,
style_class: 'login-dialog-user-list',
pseudo_class: 'expanded' });
this.actor.add_actor(this._box);
this._items = {};
this.actor.connect('key-focus-in', Lang.bind(this, this._moveFocusToItems));
},
_moveFocusToItems: function() {
let hasItems = Object.keys(this._items).length > 0;
if (!hasItems)
return;
if (global.stage.get_key_focus() != this.actor)
return;
let focusSet = this.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
if (!focusSet) {
Meta.later_add(Meta.LaterType.BEFORE_REDRAW, Lang.bind(this, function() {
this._moveFocusToItems();
return false;
}));
}
},
_onItemActivated: function(activatedItem) {
this.emit('activate', activatedItem);
},
updateStyle: function(isExpanded) {
let tasks = [];
if (isExpanded)
this._box.add_style_pseudo_class('expanded');
else
this._box.remove_style_pseudo_class('expanded');
for (let userName in this._items) {
let item = this._items[userName];
item.actor.sync_hover();
item.syncStyleClasses();
}
},
scrollToItem: function(item) {
let box = item.actor.get_allocation_box();
let adjustment = this.actor.get_vscroll_bar().get_adjustment();
let value = (box.y1 + adjustment.step_increment / 2.0) - (adjustment.page_size / 2.0);
Tweener.removeTweens(adjustment);
Tweener.addTween (adjustment,
{ value: value,
time: _SCROLL_ANIMATION_TIME,
transition: 'easeOutQuad' });
},
jumpToItem: function(item) {
let box = item.actor.get_allocation_box();
let adjustment = this.actor.get_vscroll_bar().get_adjustment();
let value = (box.y1 + adjustment.step_increment / 2.0) - (adjustment.page_size / 2.0);
adjustment.set_value(value);
},
getItemFromUserName: function(userName) {
let item = this._items[userName];
if (!item)
return null;
return item;
},
addUser: function(user) {
if (!user.is_loaded)
return;
if (user.is_system_account())
return;
if (user.locked)
return;
let userName = user.get_user_name();
if (!userName)
return;
this.removeUser(user);
let item = new UserListItem(user);
this._box.add(item.actor, { x_fill: true });
this._items[userName] = item;
item.connect('activate',
Lang.bind(this, this._onItemActivated));
// Try to keep the focused item front-and-center
item.actor.connect('key-focus-in',
Lang.bind(this,
function() {
this.scrollToItem(item);
}));
this._moveFocusToItems();
this.emit('item-added', item);
},
removeUser: function(user) {
if (!user.is_loaded)
return;
let userName = user.get_user_name();
if (!userName)
return;
let item = this._items[userName];
if (!item)
return;
item.actor.destroy();
delete this._items[userName];
}
});
Signals.addSignalMethods(UserList.prototype);

View File

@ -7,8 +7,8 @@ const Lang = imports.lang;
const Mainloop = imports.mainloop;
const Signals = imports.signals;
const Batch = imports.gdm.batch;
const Fprint = imports.gdm.fingerprint;
const Batch = imports.misc.batch;
const Fprint = imports.ui.auth.fingerprint;
const Main = imports.ui.main;
const Params = imports.misc.params;
const Tweener = imports.ui.tweener;
@ -164,7 +164,6 @@ const ShellUserVerifier = new Lang.Class({
answerQuery: function(serviceName, answer) {
if (!this._userVerifier.hasPendingMessages) {
this._clearMessageQueue();
this._userVerifier.call_answer_query(serviceName, answer, this._cancellable, null);
} else {
let signalId = this._userVerifier.connect('no-more-messages',

View File

@ -571,16 +571,7 @@ const Background = new Lang.Class({
}
let uri = this._settings.get_string(PICTURE_URI_KEY);
let filename;
if (GLib.uri_parse_scheme(uri) != null)
filename = Gio.File.new_for_uri(uri).get_path();
else
filename = uri;
if (!filename) {
this._setLoaded();
return;
}
let filename = Gio.File.new_for_uri(uri).get_path();
this._loadFile(filename);
},

View File

@ -675,7 +675,7 @@ const EventsList = new Lang.Class({
Name: 'EventsList',
_init: function() {
this.actor = new St.Table({ style_class: 'events-table' });
this.actor = new St.BoxLayout({ vertical: true, style_class: 'events-header-vbox'});
this._date = new Date();
this._desktopSettings = new Gio.Settings({ schema: 'org.gnome.desktop.interface' });
this._desktopSettings.connect('changed', Lang.bind(this, this._update));
@ -687,72 +687,55 @@ const EventsList = new Lang.Class({
this._eventSource.connect('changed', Lang.bind(this, this._update));
},
_addEvent: function(event, index, includeDayName) {
let dayString;
if (includeDayName)
dayString = _getEventDayAbbreviation(event.date.getDay());
else
dayString = '';
let dayLabel = new St.Label({ style_class: 'events-day-dayname',
text: dayString });
dayLabel.clutter_text.line_wrap = false;
dayLabel.clutter_text.ellipsize = false;
this.actor.add(dayLabel, { row: index, col: 0,
x_expand: false, x_align: St.Align.END,
y_fill: false, y_align: St.Align.START });
let clockFormat = this._desktopSettings.get_string(CLOCK_FORMAT_KEY);
let timeString = _formatEventTime(event, clockFormat);
let timeLabel = new St.Label({ style_class: 'events-day-time',
text: timeString });
timeLabel.clutter_text.line_wrap = false;
timeLabel.clutter_text.ellipsize = false;
this.actor.add(timeLabel, { row: index, col: 1,
x_expand: false, x_align: St.Align.MIDDLE,
y_fill: false, y_align: St.Align.START });
let titleLabel = new St.Label({ style_class: 'events-day-task',
text: event.summary });
titleLabel.clutter_text.line_wrap = true;
titleLabel.clutter_text.ellipsize = false;
this.actor.add(titleLabel, { row: index, col: 2,
x_expand: true, x_align: St.Align.START,
y_fill: false, y_align: St.Align.START });
_addEvent: function(dayNameBox, timeBox, eventTitleBox, includeDayName, day, time, desc) {
if (includeDayName) {
dayNameBox.add(new St.Label( { style_class: 'events-day-dayname',
text: day } ),
{ x_fill: true } );
}
timeBox.add(new St.Label( { style_class: 'events-day-time',
text: time} ),
{ x_fill: true } );
eventTitleBox.add(new St.Label( { style_class: 'events-day-task',
text: desc} ));
},
_addPeriod: function(header, index, begin, end, includeDayName, showNothingScheduled) {
_addPeriod: function(header, begin, end, includeDayName, showNothingScheduled) {
let events = this._eventSource.getEvents(begin, end);
if (events.length == 0 && !showNothingScheduled)
return index;
let clockFormat = this._desktopSettings.get_string(CLOCK_FORMAT_KEY);;
this.actor.add(new St.Label({ style_class: 'events-day-header', text: header }),
{ row: index, col: 0, col_span: 3,
// In theory, x_expand should be true here, but x_expand
// is a property of the column for StTable, ie all day cells
// get it too
x_expand: false, x_align: St.Align.START,
y_fill: false, y_align: St.Align.START });
index++;
if (events.length == 0 && !showNothingScheduled)
return;
let vbox = new St.BoxLayout( {vertical: true} );
this.actor.add(vbox);
vbox.add(new St.Label({ style_class: 'events-day-header', text: header }));
let box = new St.BoxLayout({style_class: 'events-header-hbox'});
let dayNameBox = new St.BoxLayout({ vertical: true, style_class: 'events-day-name-box' });
let timeBox = new St.BoxLayout({ vertical: true, style_class: 'events-time-box' });
let eventTitleBox = new St.BoxLayout({ vertical: true, style_class: 'events-event-box' });
box.add(dayNameBox, {x_fill: false});
box.add(timeBox, {x_fill: false});
box.add(eventTitleBox, {expand: true});
vbox.add(box);
for (let n = 0; n < events.length; n++) {
this._addEvent(events[n], index, includeDayName);
index++;
let event = events[n];
let dayString = _getEventDayAbbreviation(event.date.getDay());
let timeString = _formatEventTime(event, clockFormat);
let summaryString = event.summary;
this._addEvent(dayNameBox, timeBox, eventTitleBox, includeDayName, dayString, timeString, summaryString);
}
if (events.length == 0 && showNothingScheduled) {
let now = new Date();
/* Translators: Text to show if there are no events */
let nothingEvent = new CalendarEvent(now, now, _("Nothing Scheduled"), true);
this._addEvent(nothingEvent, index, false);
index++;
let timeString = _formatEventTime(nothingEvent, clockFormat);
this._addEvent(dayNameBox, timeBox, eventTitleBox, false, "", timeString, nothingEvent.summary);
}
return index;
},
_showOtherDay: function(day) {
@ -769,21 +752,20 @@ const EventsList = new Lang.Class({
else
/* Translators: Shown on calendar heading when selected day occurs on different year */
dayString = day.toLocaleFormat(C_("calendar heading", "%A, %B %d, %Y"));
this._addPeriod(dayString, 0, dayBegin, dayEnd, false, true);
this._addPeriod(dayString, dayBegin, dayEnd, false, true);
},
_showToday: function() {
this.actor.destroy_all_children();
let index = 0;
let now = new Date();
let dayBegin = _getBeginningOfDay(now);
let dayEnd = _getEndOfDay(now);
index = this._addPeriod(_("Today"), index, dayBegin, dayEnd, false, true);
this._addPeriod(_("Today"), dayBegin, dayEnd, false, true);
let tomorrowBegin = new Date(dayBegin.getTime() + 86400 * 1000);
let tomorrowEnd = new Date(dayEnd.getTime() + 86400 * 1000);
index = this._addPeriod(_("Tomorrow"), index, tomorrowBegin, tomorrowEnd, false, true);
this._addPeriod(_("Tomorrow"), tomorrowBegin, tomorrowEnd, false, true);
let dayInWeek = (dayEnd.getDay() - this._weekStart + 7) % 7;
@ -794,7 +776,7 @@ const EventsList = new Lang.Class({
*/
let thisWeekBegin = new Date(dayBegin.getTime() + 2 * 86400 * 1000);
let thisWeekEnd = new Date(dayEnd.getTime() + (6 - dayInWeek) * 86400 * 1000);
index = this._addPeriod(_("This week"), index, thisWeekBegin, thisWeekEnd, true, false);
this._addPeriod(_("This week"), thisWeekBegin, thisWeekEnd, true, false);
} else {
/* otherwise it's one of the two last days of the week ... show
* "Next week" and include events up until and including *next*
@ -802,7 +784,7 @@ const EventsList = new Lang.Class({
*/
let nextWeekBegin = new Date(dayBegin.getTime() + 2 * 86400 * 1000);
let nextWeekEnd = new Date(dayEnd.getTime() + (13 - dayInWeek) * 86400 * 1000);
index = this._addPeriod(_("Next week"), index, nextWeekBegin, nextWeekEnd, true, false);
this._addPeriod(_("Next week"), nextWeekBegin, nextWeekEnd, true, false);
}
},

View File

@ -16,7 +16,7 @@ const PolkitAgent = imports.gi.PolkitAgent;
const Components = imports.ui.components;
const ModalDialog = imports.ui.modalDialog;
const ShellEntry = imports.ui.shellEntry;
const UserWidget = imports.ui.userWidget;
const UserAvatar = imports.ui.userAvatar;
const DIALOG_ICON_SIZE = 48;
@ -100,9 +100,9 @@ const AuthenticationDialog = new Lang.Class({
let userBox = new St.BoxLayout({ style_class: 'polkit-dialog-user-layout',
vertical: false });
messageBox.add(userBox);
this._userAvatar = new UserWidget.Avatar(this._user,
{ iconSize: DIALOG_ICON_SIZE,
styleClass: 'polkit-dialog-user-icon' });
this._userAvatar = new UserAvatar.UserAvatar(this._user,
{ iconSize: DIALOG_ICON_SIZE,
styleClass: 'polkit-dialog-user-icon' });
this._userAvatar.actor.hide();
userBox.add(this._userAvatar.actor,
{ x_fill: true,

View File

@ -18,7 +18,7 @@ const Params = imports.misc.params;
const PopupMenu = imports.ui.popupMenu;
// See Notification.appendMessage
const SCROLLBACK_IMMEDIATE_TIME = 3 * 60; // 3 minutes
const SCROLLBACK_IMMEDIATE_TIME = 60; // 1 minute
const SCROLLBACK_RECENT_TIME = 15 * 60; // 15 minutes
const SCROLLBACK_RECENT_LENGTH = 20;
const SCROLLBACK_IDLE_LENGTH = 5;
@ -967,8 +967,7 @@ const ChatNotification = new Lang.Class({
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 },
childProps: { expand: true, x_fill: false },
noTimestamp: true,
timestamp: lastMessageTime });

View File

@ -287,7 +287,13 @@ const ShowAppsIcon = new Lang.Class({
},
handleDragOver: function(source, actor, x, y, time) {
if (!this._canRemoveApp(getAppFromSource(source)))
let app = getAppFromSource(source);
if (app == null)
return DND.DragMotionResult.NO_DROP;
let id = app.get_id();
let isFavorite = AppFavorites.getAppFavorites().isFavorite(id);
if (!isFavorite)
return DND.DragMotionResult.NO_DROP;
return DND.DragMotionResult.MOVE_DROP;
@ -295,7 +301,7 @@ const ShowAppsIcon = new Lang.Class({
acceptDrop: function(source, actor, x, y, time) {
let app = getAppFromSource(source);
if (!this._canRemoveApp(app))
if (app == null)
return false;
let id = app.get_id();
@ -320,16 +326,6 @@ const DragPlaceholderItem = new Lang.Class({
}
});
const EmptyDropTargetItem = new Lang.Class({
Name: 'EmptyDropTargetItem',
Extends: DashItemContainer,
_init: function() {
this.parent();
this.setChild(new St.Bin({ style_class: 'empty-dash-drop-target' }));
}
});
const DashActor = new Lang.Class({
Name: 'DashActor',
Extends: St.Widget,
@ -445,12 +441,6 @@ const Dash = new Lang.Class({
dragMotion: Lang.bind(this, this._onDragMotion)
};
DND.addDragMonitor(this._dragMonitor);
if (this._box.get_n_children() == 0) {
this._emptyDropTarget = new EmptyDropTargetItem();
this._box.insert_child_at_index(this._emptyDropTarget, 0);
this._emptyDropTarget.show(true);
}
},
_onDragCancelled: function() {
@ -467,7 +457,6 @@ const Dash = new Lang.Class({
_endDrag: function() {
this._clearDragPlaceholder();
this._clearEmptyDropTarget();
this._showAppsIcon.setDragApp(null);
DND.removeDragMonitor(this._dragMonitor);
},
@ -808,21 +797,9 @@ const Dash = new Lang.Class({
_clearDragPlaceholder: function() {
if (this._dragPlaceholder) {
this._animatingPlaceholdersCount++;
this._dragPlaceholder.animateOutAndDestroy();
this._dragPlaceholder.connect('destroy',
Lang.bind(this, function() {
this._animatingPlaceholdersCount--;
}));
this._dragPlaceholder = null;
}
this._dragPlaceholderPos = -1;
},
_clearEmptyDropTarget: function() {
if (this._emptyDropTarget) {
this._emptyDropTarget.animateOutAndDestroy();
this._emptyDropTarget = null;
this._dragPlaceholderPos = -1;
}
},
@ -850,18 +827,23 @@ const Dash = new Lang.Class({
numChildren--;
}
let pos;
if (!this._emptyDropTarget)
pos = Math.floor(y * numChildren / boxHeight);
else
pos = 0; // always insert at the top when dash is empty
let pos = Math.floor(y * numChildren / boxHeight);
if (pos != this._dragPlaceholderPos && pos <= numFavorites && this._animatingPlaceholdersCount == 0) {
this._dragPlaceholderPos = pos;
// Don't allow positioning before or after self
if (favPos != -1 && (pos == favPos || pos == favPos + 1)) {
this._clearDragPlaceholder();
if (this._dragPlaceholder) {
this._dragPlaceholder.animateOutAndDestroy();
this._animatingPlaceholdersCount++;
this._dragPlaceholder.connect('destroy',
Lang.bind(this, function() {
this._animatingPlaceholdersCount--;
}));
}
this._dragPlaceholder = null;
return DND.DragMotionResult.CONTINUE;
}
@ -886,9 +868,9 @@ const Dash = new Lang.Class({
// Remove the drag placeholder if we are not in the
// "favorites zone"
if (pos > numFavorites)
if (pos > numFavorites && this._dragPlaceholder) {
this._clearDragPlaceholder();
}
if (!this._dragPlaceholder)
return DND.DragMotionResult.NO_DROP;

View File

@ -80,7 +80,8 @@ const DateMenuButton = new Lang.Class({
vbox.add(this._calendar.actor);
let separator = new PopupMenu.PopupSeparatorMenuItem();
vbox.add(separator.actor, { y_align: St.Align.END, expand: true, y_fill: false });
separator.setColumnWidths(1);
vbox.add(separator.actor, {y_align: St.Align.END, expand: true, y_fill: false});
this._openCalendarItem = new PopupMenu.PopupMenuItem(_("Open Calendar"));
this._openCalendarItem.connect('activate', Lang.bind(this, this._onOpenCalendarActivate));
@ -106,7 +107,12 @@ const DateMenuButton = new Lang.Class({
hbox.add(this._separator);
// Fill up the second column
hbox.add(this._eventList.actor, { expand: true, y_fill: false, y_align: St.Align.START });
vbox = new St.BoxLayout({ name: 'calendarEventsArea',
vertical: true });
hbox.add(vbox, { expand: true });
// Event list
vbox.add(this._eventList.actor, { expand: true });
// Whenever the menu is opened, select today
this.menu.connect('open-state-changed', Lang.bind(this, function(menu, isOpen) {
@ -153,14 +159,15 @@ const DateMenuButton = new Lang.Class({
this._openClocksItem.actor.visible = visible &&
(this._getClockApp() != null);
this._separator.visible = visible;
this._eventList.actor.visible = visible;
if (visible) {
let alignment = 0.25;
if (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL)
alignment = 1.0 - alignment;
this.menu._arrowAlignment = alignment;
let alignment = 0.25;
if (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL)
alignment = 1.0 - alignment;
this.menu._arrowAlignment = alignment;
this._eventList.actor.get_parent().show();
} else {
this.menu._arrowAlignment = 0.5;
this.menu._arrowAlignment = 0.5;
this._eventList.actor.get_parent().hide();
}
},

View File

@ -147,16 +147,16 @@ const _Draggable = new Lang.Class({
_grabEvents: function() {
if (!this._eventsGrabbed) {
this._eventsGrabbed = Main.pushModal(_getEventHandlerActor());
if (this._eventsGrabbed)
Clutter.grab_pointer(_getEventHandlerActor());
Clutter.grab_pointer(_getEventHandlerActor());
Clutter.grab_keyboard(_getEventHandlerActor());
this._eventsGrabbed = true;
}
},
_ungrabEvents: function() {
if (this._eventsGrabbed) {
Clutter.ungrab_pointer();
Main.popModal(_getEventHandlerActor());
Clutter.ungrab_keyboard();
this._eventsGrabbed = false;
}
},

View File

@ -35,7 +35,7 @@ const GnomeSession = imports.misc.gnomeSession;
const Main = imports.ui.main;
const ModalDialog = imports.ui.modalDialog;
const Tweener = imports.ui.tweener;
const UserWidget = imports.ui.userWidget;
const UserAvatar = imports.ui.userAvatar;
let _endSessionDialog = null;
@ -360,9 +360,9 @@ const EndSessionDialog = new Lang.Class({
icon_size: _DIALOG_ICON_SIZE,
style_class: dialogContent.iconStyleClass });
} else {
let avatarWidget = new UserWidget.Avatar(this._user,
{ iconSize: _DIALOG_ICON_SIZE,
styleClass: dialogContent.iconStyleClass });
let avatarWidget = new UserAvatar.UserAvatar(this._user,
{ iconSize: _DIALOG_ICON_SIZE,
styleClass: dialogContent.iconStyleClass });
this._iconBin.child = avatarWidget.actor;
avatarWidget.update();
}
@ -420,7 +420,6 @@ const EndSessionDialog = new Lang.Class({
_startTimer: function() {
let startTime = GLib.get_monotonic_time();
this._secondsLeft = this._totalSecondsToStayOpen;
this._updateDescription();
this._timerId = Mainloop.timeout_add_seconds(1, Lang.bind(this,
function() {

View File

@ -749,8 +749,6 @@ const LayoutManager = new Lang.Class({
// 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._trackActor(actor, params);
},

View File

@ -71,7 +71,6 @@ let _startDate;
let _defaultCssStylesheet = null;
let _cssStylesheet = null;
let _a11ySettings = null;
let dynamicWorkspacesSchema = null;
function _sessionUpdated() {
_loadDefaultStylesheet();
@ -109,7 +108,6 @@ function start() {
function _sessionsLoaded() {
sessionMode.connect('updated', _sessionUpdated);
_initializePrefs();
_initializeUI();
shellDBusService = new ShellDBus.GnomeShell();
@ -118,17 +116,6 @@ function _sessionsLoaded() {
_sessionUpdated();
}
function _initializePrefs() {
let keys = new Gio.Settings({ schema: sessionMode.overridesSchema }).list_keys();
for (let i = 0; i < keys.length; i++)
Meta.prefs_override_preference_schema(keys[i], sessionMode.overridesSchema);
if (keys.indexOf('dynamic-workspaces') > -1)
dynamicWorkspacesSchema = sessionMode.overridesSchema;
else
dynamicWorkspacesSchema = 'org.gnome.mutter';
}
function _initializeUI() {
// Ensure ShellWindowTracker and ShellAppUsage are initialized; this will
// also initialize ShellAppSystem first. ShellAppSystem

View File

@ -2597,16 +2597,16 @@ const MessageTray = new Lang.Class({
},
_expandNotification: function(autoExpanding) {
// Don't focus notifications that are auto-expanding.
if (!autoExpanding)
this._ensureNotificationFocused();
if (!this._notificationExpandedId)
this._notificationExpandedId =
this._notification.connect('expanded',
Lang.bind(this, this._onNotificationExpanded));
// Don't animate changes in notifications that are auto-expanding.
this._notification.expand(!autoExpanding);
// Don't focus notifications that are auto-expanding.
if (!autoExpanding)
this._ensureNotificationFocused();
},
_onNotificationExpanded: function() {

View File

@ -136,10 +136,8 @@ const OsdWindow = new Lang.Class({
return;
if (!this.actor.visible) {
Meta.disable_unredirect_for_screen(global.screen);
this.actor.show();
this.actor.opacity = 0;
this.actor.get_parent().set_child_above_sibling(this.actor, null);
Tweener.addTween(this.actor,
{ opacity: 255,
@ -158,20 +156,16 @@ const OsdWindow = new Lang.Class({
return;
Mainloop.source_remove(this._hideTimeoutId);
this._hideTimeoutId = 0;
this._hide();
},
_hide: function() {
this._hideTimeoutId = 0;
Tweener.addTween(this.actor,
{ opacity: 0,
time: FADE_TIME,
transition: 'easeOutQuad',
onComplete: Lang.bind(this, function() {
this._reset();
Meta.enable_unredirect_for_screen(global.screen);
})
});
onComplete: Lang.bind(this, this._reset) });
},
_reset: function() {

View File

@ -856,7 +856,7 @@ const PANEL_ITEM_IMPLEMENTATIONS = {
'battery': imports.ui.status.power.Indicator,
'lockScreen': imports.ui.status.lockScreenMenu.Indicator,
'keyboard': imports.ui.status.keyboard.InputSourceIndicator,
'powerMenu': imports.gdm.powerMenu.PowerMenuButton,
'powerMenu': imports.ui.auth.powerMenu.PowerMenuButton,
'userMenu': imports.ui.userMenu.UserMenuButton
};

View File

@ -15,9 +15,10 @@ const GrabHelper = imports.ui.grabHelper;
const Main = imports.ui.main;
const Params = imports.misc.params;
const Separator = imports.ui.separator;
const Slider = imports.ui.slider;
const Tweener = imports.ui.tweener;
const SLIDER_SCROLL_STEP = 0.05; /* Slider scrolling step in % */
const Ornament = {
NONE: 0,
DOT: 1,
@ -514,23 +515,211 @@ const PopupSliderMenuItem = new Lang.Class({
_init: function(value) {
this.parent({ activate: false });
this._slider = new Slider.Slider(value);
this._slider.connect('value-changed', Lang.bind(this, function(actor, value) {
this.emit('value-changed', value);
this.actor.connect('key-press-event', Lang.bind(this, this._onKeyPressEvent));
if (isNaN(value))
// Avoid spreading NaNs around
throw TypeError('The slider value must be a number');
this._value = Math.max(Math.min(value, 1), 0);
this._slider = new St.DrawingArea({ style_class: 'popup-slider-menu-item', reactive: true });
this.addActor(this._slider, { span: -1, expand: true });
this._slider.connect('repaint', Lang.bind(this, this._sliderRepaint));
this.actor.connect('button-press-event', Lang.bind(this, this._startDragging));
this.actor.connect('scroll-event', Lang.bind(this, this._onScrollEvent));
this.actor.connect('notify::mapped', Lang.bind(this, function() {
if (!this.actor.mapped)
this._endDragging();
}));
this.addActor(this._slider.actor);
this._releaseId = this._motionId = 0;
this._dragging = false;
},
setValue: function(value) {
this._slider.setValue(value);
if (isNaN(value))
throw TypeError('The slider value must be a number');
this._value = Math.max(Math.min(value, 1), 0);
this._slider.queue_repaint();
},
_sliderRepaint: function(area) {
let cr = area.get_context();
let themeNode = area.get_theme_node();
let [width, height] = area.get_surface_size();
let handleRadius = themeNode.get_length('-slider-handle-radius');
let handleBorderWidth = themeNode.get_length('-slider-handle-border-width');
let [hasHandleColor, handleBorderColor] =
themeNode.lookup_color('-slider-handle-border-color', false);
let sliderWidth = width - 2 * handleRadius;
let sliderHeight = themeNode.get_length('-slider-height');
let sliderBorderWidth = themeNode.get_length('-slider-border-width');
let sliderBorderColor = themeNode.get_color('-slider-border-color');
let sliderColor = themeNode.get_color('-slider-background-color');
let sliderActiveBorderColor = themeNode.get_color('-slider-active-border-color');
let sliderActiveColor = themeNode.get_color('-slider-active-background-color');
cr.setSourceRGBA (
sliderActiveColor.red / 255,
sliderActiveColor.green / 255,
sliderActiveColor.blue / 255,
sliderActiveColor.alpha / 255);
cr.rectangle(handleRadius, (height - sliderHeight) / 2, sliderWidth * this._value, sliderHeight);
cr.fillPreserve();
cr.setSourceRGBA (
sliderActiveBorderColor.red / 255,
sliderActiveBorderColor.green / 255,
sliderActiveBorderColor.blue / 255,
sliderActiveBorderColor.alpha / 255);
cr.setLineWidth(sliderBorderWidth);
cr.stroke();
cr.setSourceRGBA (
sliderColor.red / 255,
sliderColor.green / 255,
sliderColor.blue / 255,
sliderColor.alpha / 255);
cr.rectangle(handleRadius + sliderWidth * this._value, (height - sliderHeight) / 2, sliderWidth * (1 - this._value), sliderHeight);
cr.fillPreserve();
cr.setSourceRGBA (
sliderBorderColor.red / 255,
sliderBorderColor.green / 255,
sliderBorderColor.blue / 255,
sliderBorderColor.alpha / 255);
cr.setLineWidth(sliderBorderWidth);
cr.stroke();
let handleY = height / 2;
let handleX = handleRadius + (width - 2 * handleRadius) * this._value;
let color = themeNode.get_foreground_color();
cr.setSourceRGBA (
color.red / 255,
color.green / 255,
color.blue / 255,
color.alpha / 255);
cr.arc(handleX, handleY, handleRadius, 0, 2 * Math.PI);
cr.fillPreserve();
if (hasHandleColor && handleBorderWidth) {
cr.setSourceRGBA(
handleBorderColor.red / 255,
handleBorderColor.green / 255,
handleBorderColor.blue / 255,
handleBorderColor.alpha / 255);
cr.setLineWidth(handleBorderWidth);
cr.stroke();
}
cr.$dispose();
},
_startDragging: function(actor, event) {
if (this._dragging) // don't allow two drags at the same time
return;
this._dragging = true;
// FIXME: we should only grab the specific device that originated
// the event, but for some weird reason events are still delivered
// outside the slider if using clutter_grab_pointer_for_device
Clutter.grab_pointer(this._slider);
this._releaseId = this._slider.connect('button-release-event', Lang.bind(this, this._endDragging));
this._motionId = this._slider.connect('motion-event', Lang.bind(this, this._motionEvent));
let absX, absY;
[absX, absY] = event.get_coords();
this._moveHandle(absX, absY);
},
_endDragging: function() {
if (this._dragging) {
this._slider.disconnect(this._releaseId);
this._slider.disconnect(this._motionId);
Clutter.ungrab_pointer();
this._dragging = false;
this.emit('drag-end');
}
return true;
},
scroll: function(event) {
let direction = event.get_scroll_direction();
let delta;
if (event.is_pointer_emulated())
return;
if (direction == Clutter.ScrollDirection.DOWN) {
delta = -SLIDER_SCROLL_STEP;
} else if (direction == Clutter.ScrollDirection.UP) {
delta = +SLIDER_SCROLL_STEP;
} else if (direction == Clutter.ScrollDirection.SMOOTH) {
let [dx, dy] = event.get_scroll_delta();
// Even though the slider is horizontal, use dy to match
// the UP/DOWN above.
delta = -dy / 10;
}
this._value = Math.min(Math.max(0, this._value + delta), 1);
this._slider.queue_repaint();
this.emit('value-changed', this._value);
},
_onScrollEvent: function(actor, event) {
this.scroll(event);
},
_motionEvent: function(actor, event) {
let absX, absY;
[absX, absY] = event.get_coords();
this._moveHandle(absX, absY);
return true;
},
_moveHandle: function(absX, absY) {
let relX, relY, sliderX, sliderY;
[sliderX, sliderY] = this._slider.get_transformed_position();
relX = absX - sliderX;
relY = absY - sliderY;
let width = this._slider.width;
let handleRadius = this._slider.get_theme_node().get_length('-slider-handle-radius');
let newvalue;
if (relX < handleRadius)
newvalue = 0;
else if (relX > width - handleRadius)
newvalue = 1;
else
newvalue = (relX - handleRadius) / (width - 2 * handleRadius);
this._value = newvalue;
this._slider.queue_repaint();
this.emit('value-changed', this._value);
},
get value() {
return this._slider.value;
return this._value;
},
scroll: function (event) {
this._slider.scroll(event);
_onKeyPressEvent: function (actor, event) {
let key = event.get_key_symbol();
if (key == Clutter.KEY_Right || key == Clutter.KEY_Left) {
let delta = key == Clutter.KEY_Right ? 0.1 : -0.1;
this._value = Math.max(0, Math.min(this._value + delta, 1));
this._slider.queue_repaint();
this.emit('value-changed', this._value);
this.emit('drag-end');
return true;
}
return false;
}
});

View File

@ -1215,12 +1215,6 @@ const ScreenShield = new Lang.Class({
return;
}
// Clear the clipboard - otherwise, its contents may be leaked
// to unauthorized parties by pasting into the unlock dialog's
// password entry and unmasking the entry
St.Clipboard.get_default().set_text(St.ClipboardType.CLIPBOARD, '');
St.Clipboard.get_default().set_text(St.ClipboardType.PRIMARY, '');
this._isLocked = true;
this.activate(animate);

View File

@ -16,7 +16,6 @@ const _modes = {
'restrictive': {
parentMode: null,
stylesheetName: 'gnome-shell.css',
overridesSchema: 'org.gnome.shell.overrides',
hasOverview: false,
showCalendarEvents: false,
allowSettings: false,
@ -43,7 +42,7 @@ const _modes = {
hasNotifications: true,
isGreeter: true,
isPrimary: true,
unlockDialog: imports.gdm.loginDialog.LoginDialog,
unlockDialog: imports.ui.auth.loginDialog.LoginDialog,
components: ['polkitAgent'],
panel: {
left: [],
@ -90,7 +89,7 @@ const _modes = {
hasNotifications: true,
isLocked: false,
isPrimary: true,
unlockDialog: imports.ui.unlockDialog.UnlockDialog,
unlockDialog: imports.ui.auth.unlockDialog.UnlockDialog,
components: ['networkAgent', 'polkitAgent', 'telepathyClient',
'keyring', 'recorder', 'autorunManager', 'automountManager'],
panel: {

View File

@ -1,206 +0,0 @@
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
const Cairo = imports.cairo;
const Clutter = imports.gi.Clutter;
const Lang = imports.lang;
const St = imports.gi.St;
const Signals = imports.signals;
const SLIDER_SCROLL_STEP = 0.05; /* Slider scrolling step in % */
const Slider = new Lang.Class({
Name: "Slider",
_init: function(value) {
if (isNaN(value))
// Avoid spreading NaNs around
throw TypeError('The slider value must be a number');
this._value = Math.max(Math.min(value, 1), 0);
this.actor = new St.DrawingArea({ style_class: 'slider',
can_focus: true,
reactive: true });
this.actor.connect('repaint', Lang.bind(this, this._sliderRepaint));
this.actor.connect('button-press-event', Lang.bind(this, this._startDragging));
this.actor.connect('scroll-event', Lang.bind(this, this._onScrollEvent));
this.actor.connect('key-press-event', Lang.bind(this, this._onKeyPressEvent));
this._releaseId = this._motionId = 0;
this._dragging = false;
},
setValue: function(value) {
if (isNaN(value))
throw TypeError('The slider value must be a number');
this._value = Math.max(Math.min(value, 1), 0);
this.actor.queue_repaint();
},
_sliderRepaint: function(area) {
let cr = area.get_context();
let themeNode = area.get_theme_node();
let [width, height] = area.get_surface_size();
let handleRadius = themeNode.get_length('-slider-handle-radius');
let handleBorderWidth = themeNode.get_length('-slider-handle-border-width');
let [hasHandleColor, handleBorderColor] =
themeNode.lookup_color('-slider-handle-border-color', false);
let sliderHeight = themeNode.get_length('-slider-height');
let sliderBorderWidth = themeNode.get_length('-slider-border-width');
let sliderBorderRadius = Math.min(width, sliderHeight) / 2;
let sliderBorderColor = themeNode.get_color('-slider-border-color');
let sliderColor = themeNode.get_color('-slider-background-color');
let sliderActiveBorderColor = themeNode.get_color('-slider-active-border-color');
let sliderActiveColor = themeNode.get_color('-slider-active-background-color');
const TAU = Math.PI * 2;
let handleX = handleRadius + (width - 2 * handleRadius) * this._value;
cr.arc(sliderBorderRadius + sliderBorderWidth, height / 2, sliderBorderRadius, TAU * 1/4, TAU * 3/4);
cr.lineTo(handleX, (height - sliderHeight) / 2);
cr.lineTo(handleX, (height + sliderHeight) / 2);
cr.lineTo(sliderBorderRadius + sliderBorderWidth, (height + sliderHeight) / 2);
Clutter.cairo_set_source_color(cr, sliderActiveColor);
cr.fillPreserve();
Clutter.cairo_set_source_color(cr, sliderActiveBorderColor);
cr.setLineWidth(sliderBorderWidth);
cr.stroke();
cr.arc(width - sliderBorderRadius - sliderBorderWidth, height / 2, sliderBorderRadius, TAU * 3/4, TAU * 1/4);
cr.lineTo(handleX, (height + sliderHeight) / 2);
cr.lineTo(handleX, (height - sliderHeight) / 2);
cr.lineTo(width - sliderBorderRadius - sliderBorderWidth, (height - sliderHeight) / 2);
Clutter.cairo_set_source_color(cr, sliderColor);
cr.fillPreserve();
Clutter.cairo_set_source_color(cr, sliderBorderColor);
cr.setLineWidth(sliderBorderWidth);
cr.stroke();
let handleY = height / 2;
let color = themeNode.get_foreground_color();
Clutter.cairo_set_source_color(cr, color);
cr.arc(handleX, handleY, handleRadius, 0, 2 * Math.PI);
cr.fillPreserve();
if (hasHandleColor && handleBorderWidth) {
Clutter.cairo_set_source_color(cr, handleBorderColor);
cr.setLineWidth(handleBorderWidth);
cr.stroke();
}
cr.$dispose();
},
_startDragging: function(actor, event) {
if (this._dragging) // don't allow two drags at the same time
return false;
this._dragging = true;
// FIXME: we should only grab the specific device that originated
// the event, but for some weird reason events are still delivered
// outside the slider if using clutter_grab_pointer_for_device
Clutter.grab_pointer(this.actor);
this._releaseId = this.actor.connect('button-release-event', Lang.bind(this, this._endDragging));
this._motionId = this.actor.connect('motion-event', Lang.bind(this, this._motionEvent));
let absX, absY;
[absX, absY] = event.get_coords();
this._moveHandle(absX, absY);
return true;
},
_endDragging: function() {
if (this._dragging) {
this.actor.disconnect(this._releaseId);
this.actor.disconnect(this._motionId);
Clutter.ungrab_pointer();
this._dragging = false;
this.emit('drag-end');
}
return true;
},
scroll: function(event) {
let direction = event.get_scroll_direction();
let delta;
if (event.is_pointer_emulated())
return;
if (direction == Clutter.ScrollDirection.DOWN) {
delta = -SLIDER_SCROLL_STEP;
} else if (direction == Clutter.ScrollDirection.UP) {
delta = +SLIDER_SCROLL_STEP;
} else if (direction == Clutter.ScrollDirection.SMOOTH) {
let [dx, dy] = event.get_scroll_delta();
// Even though the slider is horizontal, use dy to match
// the UP/DOWN above.
delta = -dy / 10;
}
this._value = Math.min(Math.max(0, this._value + delta), 1);
this.actor.queue_repaint();
this.emit('value-changed', this._value);
},
_onScrollEvent: function(actor, event) {
this.scroll(event);
},
_motionEvent: function(actor, event) {
let absX, absY;
[absX, absY] = event.get_coords();
this._moveHandle(absX, absY);
return true;
},
_onKeyPressEvent: function (actor, event) {
let key = event.get_key_symbol();
if (key == Clutter.KEY_Right || key == Clutter.KEY_Left) {
let delta = key == Clutter.KEY_Right ? 0.1 : -0.1;
this._value = Math.max(0, Math.min(this._value + delta, 1));
this._slider.queue_repaint();
this.emit('value-changed', this._value);
this.emit('drag-end');
return true;
}
return false;
},
_moveHandle: function(absX, absY) {
let relX, relY, sliderX, sliderY;
[sliderX, sliderY] = this.actor.get_transformed_position();
relX = absX - sliderX;
relY = absY - sliderY;
let width = this.actor.width;
let handleRadius = this.actor.get_theme_node().get_length('-slider-handle-radius');
let newvalue;
if (relX < handleRadius)
newvalue = 0;
else if (relX > width - handleRadius)
newvalue = 1;
else
newvalue = (relX - handleRadius) / (width - 2 * handleRadius);
this._value = newvalue;
this.actor.queue_repaint();
this.emit('value-changed', this._value);
},
get value() {
return this._value;
}
});
Signals.addSignalMethods(Slider.prototype);

View File

@ -86,7 +86,6 @@ const Indicator = new Lang.Class({
this._applet.connect('pincode-request', Lang.bind(this, this._pinRequest));
this._applet.connect('confirm-request', Lang.bind(this, this._confirmRequest));
this._applet.connect('auth-request', Lang.bind(this, this._authRequest));
this._applet.connect('auth-service-request', Lang.bind(this, this._authServiceRequest));
this._applet.connect('cancel-request', Lang.bind(this, this._cancelRequest));
},
@ -293,14 +292,9 @@ const Indicator = new Lang.Class({
}
},
_authRequest: function(applet, device_path, name, long_name) {
_authRequest: function(applet, device_path, name, long_name, uuid) {
this._ensureSource();
this._source.notify(new AuthNotification(this._source, this._applet, device_path, name, long_name));
},
_authServiceRequest: function(applet, device_path, name, long_name, uuid) {
this._ensureSource();
this._source.notify(new AuthServiceNotification(this._source, this._applet, device_path, name, long_name, uuid));
this._source.notify(new AuthNotification(this._source, this._applet, device_path, name, long_name, uuid));
},
_confirmRequest: function(applet, device_path, name, long_name, pin) {
@ -322,34 +316,6 @@ const AuthNotification = new Lang.Class({
Name: 'AuthNotification',
Extends: MessageTray.Notification,
_init: function(source, applet, device_path, name, long_name) {
this.parent(source,
_("Bluetooth"),
_("Authorization request from %s").format(name),
{ customContent: true });
this.setResident(true);
this._applet = applet;
this._devicePath = device_path;
this.addBody(_("Device %s wants to pair with this computer").format(long_name));
this.addButton('allow', _("Allow"));
this.addButton('deny', _("Deny"));
this.connect('action-invoked', Lang.bind(this, function(self, action) {
if (action == 'allow')
this._applet.agent_reply_confirm(this._devicePath, true);
else
this._applet.agent_reply_confirm(this._devicePath, false);
this.destroy();
}));
}
});
const AuthServiceNotification = new Lang.Class({
Name: 'AuthServiceNotification',
Extends: MessageTray.Notification,
_init: function(source, applet, device_path, name, long_name, uuid) {
this.parent(source,
_("Bluetooth"),
@ -368,14 +334,14 @@ const AuthServiceNotification = new Lang.Class({
this.connect('action-invoked', Lang.bind(this, function(self, action) {
switch (action) {
case 'always-grant':
this._applet.agent_reply_auth_service(this._devicePath, true, true);
this._applet.agent_reply_auth(this._devicePath, true, true);
break;
case 'grant':
this._applet.agent_reply_auth_service(this._devicePath, true, false);
this._applet.agent_reply_auth(this._devicePath, true, false);
break;
case 'reject':
default:
this._applet.agent_reply_auth_service(this._devicePath, false, false);
this._applet.agent_reply_auth(this._devicePath, false, false);
}
this.destroy();
}));

File diff suppressed because it is too large Load Diff

View File

@ -10,6 +10,8 @@ const Signals = imports.signals;
const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu;
const VOLUME_ADJUSTMENT_STEP = 0.05; /* Volume adjustment step in % */
const VOLUME_NOTIFY_ID = 1;
// Each Gvc.MixerControl is a connection to PulseAudio,
@ -42,6 +44,7 @@ const StreamSlider = new Lang.Class({
this.item.addMenuItem(this._slider);
this._stream = null;
this._shouldShow = true;
},
get stream() {

52
js/ui/userAvatar.js Normal file
View File

@ -0,0 +1,52 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const Lang = imports.lang;
const St = imports.gi.St;
const Params = imports.misc.params;
const DIALOG_ICON_SIZE = 64;
// Adapted from gdm/gui/user-switch-applet/applet.c
//
// Copyright (C) 2004-2005 James M. Cape <jcape@ignore-your.tv>.
// Copyright (C) 2008,2009 Red Hat, Inc.
const UserAvatar = new Lang.Class({
Name: 'UserAvatar',
_init: function(user, params) {
this._user = user;
params = Params.parse(params, { reactive: false,
iconSize: DIALOG_ICON_SIZE,
styleClass: 'status-chooser-user-icon' });
this._iconSize = params.iconSize;
this.actor = new St.Bin({ style_class: params.styleClass,
track_hover: params.reactive,
reactive: params.reactive });
},
setSensitive: function(sensitive) {
this.actor.can_focus = sensitive;
this.actor.reactive = sensitive;
},
update: function() {
let iconFile = this._user.get_icon_file();
if (iconFile && !GLib.file_test(iconFile, GLib.FileTest.EXISTS))
iconFile = null;
if (iconFile) {
let file = Gio.File.new_for_path(iconFile);
this.actor.child = null;
this.actor.style = 'background-image: url("%s");'.format(iconFile);
} else {
this.actor.style = null;
this.actor.child = new St.Icon({ icon_name: 'avatar-default-symbolic',
icon_size: this._iconSize });
}
}
});

View File

@ -20,8 +20,9 @@ const Main = imports.ui.main;
const ModalDialog = imports.ui.modalDialog;
const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu;
const Params = imports.misc.params;
const UserAvatar = imports.ui.userAvatar;
const Util = imports.misc.util;
const UserWidget = imports.ui.userWidget;
const LOCKDOWN_SCHEMA = 'org.gnome.desktop.lockdown';
const SCREENSAVER_SCHEMA = 'org.gnome.desktop.screensaver';
@ -32,6 +33,8 @@ const DISABLE_LOG_OUT_KEY = 'disable-log-out';
const ALWAYS_SHOW_LOG_OUT_KEY = 'always-show-log-out';
const SHOW_FULL_NAME_IN_TOP_BAR_KEY = 'show-full-name-in-top-bar';
const DIALOG_ICON_SIZE = 64;
const MAX_USERS_IN_SESSION_DIALOG = 5;
const IMStatus = {
@ -126,7 +129,7 @@ const IMStatusChooserItem = new Lang.Class({
this._userManager = AccountsService.UserManager.get_default();
this._user = this._userManager.get_user(GLib.get_user_name());
this._avatar = new UserWidget.Avatar(this._user, { reactive: true });
this._avatar = new UserAvatar.UserAvatar(this._user, { reactive: true });
this._iconBin = new St.Button({ child: this._avatar.actor });
this.addActor(this._iconBin);
@ -566,6 +569,7 @@ const UserMenuButton = new Lang.Class({
let allowSettings = Main.sessionMode.allowSettings;
this._statusChooser.setSensitive(allowSettings);
this._systemSettings.visible = allowSettings;
this.setSensitive(!Main.sessionMode.isLocked);
this._updatePresenceIcon();
@ -741,7 +745,10 @@ const UserMenuButton = new Lang.Class({
item = new PopupMenu.PopupSeparatorMenuItem();
this.menu.addMenuItem(item);
this.menu.addSettingsAction(_("Settings"), 'gnome-control-center.desktop');
item = new PopupMenu.PopupMenuItem(_("Settings"));
item.connect('activate', Lang.bind(this, this._onPreferencesActivate));
this.menu.addMenuItem(item);
this._systemSettings = item;
item = new PopupMenu.PopupSeparatorMenuItem();
this.menu.addMenuItem(item);
@ -802,6 +809,12 @@ const UserMenuButton = new Lang.Class({
app.activate();
},
_onPreferencesActivate: function() {
Main.overview.hide();
let app = Shell.AppSystem.get_default().lookup_app('gnome-control-center.desktop');
app.activate();
},
_onLockScreenActivate: function() {
this.menu.close(BoxPointer.PopupAnimation.NONE);
Main.overview.hide();
@ -854,7 +867,7 @@ const UserMenuButton = new Lang.Class({
let session = sessions[i];
let userEntry = new St.BoxLayout({ style_class: 'login-dialog-user-list-item',
vertical: false });
let avatar = new UserWidget.Avatar(session.user);
let avatar = new UserAvatar.UserAvatar(session.user);
avatar.update();
userEntry.add(avatar.actor);

View File

@ -3,56 +3,10 @@
//
// A widget showing the user avatar and name
const AccountsService = imports.gi.AccountsService;
const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio;
const Lang = imports.lang;
const St = imports.gi.St;
const Params = imports.misc.params;
const AVATAR_ICON_SIZE = 64;
// Adapted from gdm/gui/user-switch-applet/applet.c
//
// Copyright (C) 2004-2005 James M. Cape <jcape@ignore-your.tv>.
// Copyright (C) 2008,2009 Red Hat, Inc.
const Avatar = new Lang.Class({
Name: 'Avatar',
_init: function(user, params) {
this._user = user;
params = Params.parse(params, { reactive: false,
iconSize: AVATAR_ICON_SIZE,
styleClass: 'status-chooser-user-icon' });
this._iconSize = params.iconSize;
this.actor = new St.Bin({ style_class: params.styleClass,
track_hover: params.reactive,
reactive: params.reactive });
},
setSensitive: function(sensitive) {
this.actor.can_focus = sensitive;
this.actor.reactive = sensitive;
},
update: function() {
let iconFile = this._user.get_icon_file();
if (iconFile && !GLib.file_test(iconFile, GLib.FileTest.EXISTS))
iconFile = null;
if (iconFile) {
let file = Gio.File.new_for_path(iconFile);
this.actor.child = null;
this.actor.style = 'background-image: url("%s");'.format(iconFile);
} else {
this.actor.style = null;
this.actor.child = new St.Icon({ icon_name: 'avatar-default-symbolic',
icon_size: this._iconSize });
}
}
});
const UserAvatar = imports.ui.userAvatar;
const UserWidget = new Lang.Class({
Name: 'UserWidget',
@ -64,7 +18,7 @@ const UserWidget = new Lang.Class({
vertical: false });
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
this._avatar = new Avatar(user);
this._avatar = new UserAvatar.UserAvatar(user);
this.actor.add(this._avatar.actor,
{ x_fill: true, y_fill: true });

View File

@ -93,8 +93,8 @@ const WorkspaceTracker = new Lang.Class({
global.screen.connect('window-left-monitor', Lang.bind(this, this._windowLeftMonitor));
global.screen.connect('restacked', Lang.bind(this, this._windowsRestacked));
this._workspaceSettings = new Gio.Settings({ schema: Main.dynamicWorkspacesSchema });
this._workspaceSettings.connect('changed::dynamic-workspaces', Lang.bind(this, this._queueCheckWorkspaces));
this._overrideSettings = new Gio.Settings({ schema: 'org.gnome.shell.overrides' });
this._overrideSettings.connect('changed::dynamic-workspaces', Lang.bind(this, this._queueCheckWorkspaces));
this._nWorkspacesChanged();
},

View File

@ -446,7 +446,7 @@ const WorkspacesDisplay = new Lang.Class({
_init: function() {
this.actor = new St.Widget({ clip_to_allocation: true });
this.actor.connect('notify::allocation', Lang.bind(this, this._allocationChanged));
this.actor.connect('notify::allocation', Lang.bind(this, this._updateWorkspacesActualGeometry));
this.actor.connect('parent-set', Lang.bind(this, this._parentSet));
let clickAction = new Clutter.ClickAction()
@ -676,12 +676,6 @@ const WorkspacesDisplay = new Lang.Class({
}
},
_allocationChanged: function() {
if (Main.overview.animationInProgress)
return;
this._updateWorkspacesActualGeometry();
},
_updateWorkspacesActualGeometry: function() {
if (!this._workspacesViews.length)
return;

777
po/bg.po

File diff suppressed because it is too large Load Diff

View File

@ -317,12 +317,12 @@ msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.in.h:42
msgid "Attach modal dialog to the parent window"
msgstr "Modální dialogová okna připojovat k rodičovskému oknu"
msgstr "Připojovat modální dialogová okna k rodičovským oknům"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:43
msgid ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgstr "Když běží GNOME Shell, tento klíč přepíše klíč v org.gnome.mutter"
msgstr "Tento kíč přepisuje klíč v org.gnome.mutter, když běží GNOME Shell."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:44
msgid "Arrangement of buttons on the titlebar"
@ -333,11 +333,12 @@ msgid ""
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
"GNOME Shell."
msgstr ""
"Když běží GNOME Shell, tento klíč přepíše klíč v org.gnome.desktop.wm.preferences"
"Tento kíč přepisuje klíč v org.gnome.desktop.wm.preferences, když běží GNOME "
"Shell."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:46
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr "Okna upuštěná u okraje obrazovky nechat řadit jako dlaždice"
msgstr "Nechat okna upuštěná při okraji obrazovky vytvářet dlaždice"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:47
msgid "Workspaces are managed dynamically"
@ -345,7 +346,7 @@ msgstr "Pracovní plochy jsou spravovány dynamicky"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:48
msgid "Workspaces only on primary monitor"
msgstr "Pracovní plochy jen na hlavním monitoru"
msgstr "Pracovní plochy pouze na hlavním monitoru"
#: ../js/extensionPrefs/main.js:125
#, c-format

389
po/de.po
View File

@ -17,10 +17,9 @@
msgid ""
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: 2013-05-31 22:35+0000\n"
"PO-Revision-Date: 2013-06-02 09:48+0100\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-03-11 14:22+0100\n"
"PO-Revision-Date: 2013-03-11 14:25+0100\n"
"Last-Translator: Christian Kirbach <christian.kirbach@gmail.com>\n"
"Language-Team: Deutsch <gnome-de@gnome.org>\n"
"Language: de_DE\n"
@ -28,7 +27,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 1.5.4\n"
"X-Generator: Gtranslator 2.91.6\n"
#: ../data/50-gnome-shell-screenshot.xml.in.h:1
msgid "Screenshots"
@ -51,14 +50,10 @@ msgid "Focus the active notification"
msgstr "Auf aktive Benachrichtigungen ausrichten"
#: ../data/50-gnome-shell-system.xml.in.h:4
msgid "Show the overview"
msgstr "Die Übersicht anzeigen"
#: ../data/50-gnome-shell-system.xml.in.h:5
msgid "Show all applications"
msgstr "Alle Anwendungen anzeigen"
#: ../data/50-gnome-shell-system.xml.in.h:6
#: ../data/50-gnome-shell-system.xml.in.h:5
msgid "Open the application menu"
msgstr "Das Anwendungsmenü öffnen"
@ -107,10 +102,27 @@ msgstr ""
"gnome.Shell bearbeiten."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:5
msgid "Whether to collect stats about applications usage"
msgstr "Legt fest, ob Statistiken über Anwendungsnutzung erfasst werden sollen"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:6
msgid ""
"The shell normally monitors active applications in order to present the most "
"used ones (e.g. in launchers). While this data will be kept private, you may "
"want to disable this for privacy reasons. Please note that doing so won't "
"remove already saved data."
msgstr ""
"Die Shell überwacht normalerweise aktive Anwendungen, wobei die "
"meistgenutzten zuerst erfasst werden (z.B. in Anwendungsstartern). Zwar "
"werden diese Daten privat gespeichert, doch möglicherweise wollen Sie dies "
"deaktivieren, um Ihre Privatsphäre zu schützen. Bitte beachten Sie, dass "
"bereits gespeicherte Daten hiervon nicht beeinflusst werden."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:7
msgid "List of desktop file IDs for favorite applications"
msgstr "Liste der Kennungen der Desktop-Dateien für bevorzugte Anwendungen"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:6
#: ../data/org.gnome.shell.gschema.xml.in.in.h:8
msgid ""
"The applications corresponding to these identifiers will be displayed in the "
"favorites area."
@ -118,11 +130,11 @@ msgstr ""
"Programme, welche auf diese Bezeichner zutreffen, werden im Favoriten-"
"Bereich angezeigt."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:7
#: ../data/org.gnome.shell.gschema.xml.in.in.h:9
msgid "List of categories that should be displayed as folders"
msgstr "Liste der Kategorien, die als Ordner angezeigt werden sollen"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:8
#: ../data/org.gnome.shell.gschema.xml.in.in.h:10
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."
@ -130,15 +142,15 @@ msgstr ""
"Jeder Kategoriename in dieser Liste wird als Ordner in der Anwendungsansicht "
"dargestellt, anstatt in der Hauptansicht eingebettet."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:9
#: ../data/org.gnome.shell.gschema.xml.in.in.h:11
msgid "History for command (Alt-F2) dialog"
msgstr "Verlauf des Befehlsdialogs (Alt+F2)"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:10
#: ../data/org.gnome.shell.gschema.xml.in.in.h:12
msgid "History for the looking glass dialog"
msgstr "Chronik des Dialogs »looking glass«"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:11
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
msgid ""
"Internally used to store the last IM presence explicitly set by the user. "
"The value here is from the TpConnectionPresenceType enumeration."
@ -147,7 +159,7 @@ msgstr ""
"der explizit vom Benutzer gesetzt wurde. Der hier verwendete Wert wird der "
"TpConnectionPresenceType-Aufzählung entnommen."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:12
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
msgid ""
"Internally used to store the last session presence status for the user. The "
"value here is from the GsmPresenceStatus enumeration."
@ -156,11 +168,11 @@ msgstr ""
"Benutzers verwendet. Der hier verwendete Wert wird der GsmPresenceStatus-"
"Aufzählung entnommen."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
msgid "Always show the 'Log out' menuitem in the user menu."
msgstr "Den Menüeintrag »Abmelden« immer im Benutzermenü anzeigen."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
msgid ""
"This key overrides the automatic hiding of the 'Log out' menuitem in single-"
"user, single-session situations."
@ -168,14 +180,14 @@ msgstr ""
"Dieser Schlüssel überschreibt das automatische Verbergen des Menüeintrags "
"»Abmelden« in Einzelbenutzer, Einzelsitzungssituationen."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
msgid ""
"Whether to remember password for mounting encrypted or remote filesystems"
msgstr ""
"Legt fest, ob Passwörter für eingehängte, verschlüsselte oder ferne "
"Dateisysteme gespeichert werden"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
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 "
@ -188,42 +200,34 @@ msgstr ""
"angeboten. Dieser Schlüssel stellt den Standardstatus für dieses Ankreuzfeld "
"ein."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
msgid "Show the week date in the calendar"
msgstr "Wochentag im Kalender anzeigen"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
msgid "If true, display the ISO week date in the calendar."
msgstr ""
"Wenn dieser Wert gesetzt ist, wird der ISO-Wochentag im Kalender angezeigt."
#: ../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 application menu"
msgstr "Tastenkombination zum Öffnen des Anwendungsmenüs"
#: ../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 application menu."
msgstr "Tastenkombination zum Öffnen des Anwendungsmenüs."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
msgid "Keybinding to open the \"Show Applications\" view"
msgstr "Tastenkombination zum Öffnen der »Anwendungen anzeigen«-Ansicht"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
msgid ""
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
msgstr ""
"Tastenkombination zum Öffnen der »Anwendungen anzeigen«-Ansicht der "
"Aktivitätenübersicht."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
msgid "Keybinding to open the overview"
msgstr "Tastenkombination zum Öffnen der Übersicht"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
msgid "Keybinding to open the Activities Overview."
msgstr "Tastenkombination zum Öffnen der »Aktivitäten«-Übersicht"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
msgid "Keybinding to toggle the visibility of the message tray"
msgstr ""
@ -387,50 +391,43 @@ msgstr "Erweiterung"
msgid "Select an extension to configure using the combobox above."
msgstr "Wählen Sie oben eine Erweiterung aus, die Sie konfigurieren wollen."
#: ../js/gdm/loginDialog.js:371
#: ../js/gdm/loginDialog.js:405
msgid "Session…"
msgstr "Sitzung …"
#. translators: this message is shown below the user list on the
#. login screen. It can be activated to reveal an entry for
#. manually entering the username.
#: ../js/gdm/loginDialog.js:601
#: ../js/gdm/loginDialog.js:630
msgid "Not listed?"
msgstr "Nicht aufgeführt?"
#: ../js/gdm/loginDialog.js:776 ../js/ui/components/networkAgent.js:137
#: ../js/ui/components/polkitAgent.js:161 ../js/ui/endSessionDialog.js:376
#: ../js/gdm/loginDialog.js:784 ../js/ui/components/networkAgent.js:137
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:375
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/bluetooth.js:415 ../js/ui/unlockDialog.js:96
#: ../js/ui/status/bluetooth.js:415 ../js/ui/unlockDialog.js:98
#: ../js/ui/userMenu.js:938
msgid "Cancel"
msgstr "Abbrechen"
#: ../js/gdm/loginDialog.js:791
#: ../js/gdm/loginDialog.js:800
msgctxt "button"
msgid "Sign In"
msgstr "Anmelden"
#: ../js/gdm/loginDialog.js:791
#: ../js/gdm/loginDialog.js:800
msgid "Next"
msgstr "Nächstes"
#. Translators: this message is shown below the username entry field
#. to clue the user in on how to login to the local network realm
#: ../js/gdm/loginDialog.js:888
#, c-format
msgid "(e.g., user or %s)"
msgstr "(z.B. Benutzer oder %s)"
#. TTLS and PEAP are actually much more complicated, but this complication
#. is not visible here since we only care about phase2 authentication
#. (and don't even care of which one)
#: ../js/gdm/loginDialog.js:892 ../js/ui/components/networkAgent.js:260
#: ../js/gdm/loginDialog.js:915 ../js/ui/components/networkAgent.js:260
#: ../js/ui/components/networkAgent.js:278
msgid "Username: "
msgstr "Benutzername:"
#: ../js/gdm/loginDialog.js:1158
#: ../js/gdm/loginDialog.js:1168
msgid "Login Window"
msgstr "Anmeldefenster"
@ -453,48 +450,53 @@ msgstr "Neu starten"
msgid "Power Off"
msgstr "Ausschalten"
#: ../js/gdm/util.js:247
#: ../js/gdm/util.js:182
msgid "Authentication error"
msgstr "Legitimationsfehler"
#. Translators: this message is shown below the password entry field
#. to indicate the user can swipe their finger instead
#: ../js/gdm/util.js:364
#: ../js/gdm/util.js:299
msgid "(or swipe finger)"
msgstr "(oder benutzen Sie den Fingerabdruckleser)"
#: ../js/misc/util.js:97
#: ../js/gdm/util.js:324
#, c-format
msgid "(e.g., user or %s)"
msgstr "(z.B. Benutzer oder %s)"
#: ../js/misc/util.js:94
msgid "Command not found"
msgstr "Befehl nicht gefunden"
#. Replace "Error invoking GLib.shell_parse_argv: " with
#. something nicer
#: ../js/misc/util.js:130
#: ../js/misc/util.js:127
msgid "Could not parse command:"
msgstr "Befehl konnte nicht verarbeitet werden:"
#: ../js/misc/util.js:138
#: ../js/misc/util.js:135
#, c-format
msgid "Execution of '%s' failed:"
msgstr "Ausführung von »%s« ist gescheitert:"
#: ../js/ui/appDisplay.js:361
#: ../js/ui/appDisplay.js:348
msgid "Frequent"
msgstr "Häufig"
#: ../js/ui/appDisplay.js:368
#: ../js/ui/appDisplay.js:355
msgid "All"
msgstr "Alle"
#: ../js/ui/appDisplay.js:960
#: ../js/ui/appDisplay.js:913
msgid "New Window"
msgstr "Neues Fenster"
#: ../js/ui/appDisplay.js:963 ../js/ui/dash.js:284
#: ../js/ui/appDisplay.js:916 ../js/ui/dash.js:284
msgid "Remove from Favorites"
msgstr "Aus Favoriten entfernen"
#: ../js/ui/appDisplay.js:964
#: ../js/ui/appDisplay.js:917
msgid "Add to Favorites"
msgstr "Zu Favoriten hinzufügen"
@ -534,7 +536,7 @@ msgstr "%H\\u2236%M"
# wird nur verwendet, wenn die Anwendung explizit auf 12h-Format eingestellt ist.
# http://linux.die.net/man/3/strftime
#. Translators: Shown in calendar event list, if 12h format,
#. Transators: Shown in calendar event list, if 12h format,
#. \u2236 is a ratio character, similar to : and \u2009 is
#. a thin space
#: ../js/ui/calendar.js:77
@ -636,35 +638,35 @@ msgid "S"
msgstr "Sa"
#. Translators: Text to show if there are no events
#: ../js/ui/calendar.js:735
#: ../js/ui/calendar.js:720
msgid "Nothing Scheduled"
msgstr "Nichts geplant"
#. Translators: Shown on calendar heading when selected day occurs on current year
#: ../js/ui/calendar.js:751
#: ../js/ui/calendar.js:736
msgctxt "calendar heading"
msgid "%A, %B %d"
msgstr "%A, %d. %B"
#. Translators: Shown on calendar heading when selected day occurs on different year
#: ../js/ui/calendar.js:754
#: ../js/ui/calendar.js:739
msgctxt "calendar heading"
msgid "%A, %B %d, %Y"
msgstr "%a, %d. %B %Y"
#: ../js/ui/calendar.js:764
#: ../js/ui/calendar.js:749
msgid "Today"
msgstr "Heute"
#: ../js/ui/calendar.js:768
#: ../js/ui/calendar.js:753
msgid "Tomorrow"
msgstr "Morgen"
#: ../js/ui/calendar.js:779
#: ../js/ui/calendar.js:764
msgid "This week"
msgstr "Diese Woche"
#: ../js/ui/calendar.js:787
#: ../js/ui/calendar.js:772
msgid "Next week"
msgstr "Nächste Woche"
@ -680,20 +682,20 @@ msgstr "Externes Laufwerk getrennt"
msgid "Removable Devices"
msgstr "Wechseldatenträger"
#: ../js/ui/components/autorunManager.js:594
#: ../js/ui/components/autorunManager.js:593
#, c-format
msgid "Open with %s"
msgstr "Öffnen mit %s"
#: ../js/ui/components/autorunManager.js:620
#: ../js/ui/components/autorunManager.js:619
msgid "Eject"
msgstr "Auswerfen"
#: ../js/ui/components/keyring.js:88 ../js/ui/components/polkitAgent.js:280
#: ../js/ui/components/keyring.js:82 ../js/ui/components/polkitAgent.js:268
msgid "Password:"
msgstr "Passwort:"
#: ../js/ui/components/keyring.js:107
#: ../js/ui/components/keyring.js:101
msgid "Type again:"
msgstr "Erneut eingeben:"
@ -773,15 +775,15 @@ msgstr "Passwort der mobilen Breitbandverbindung"
msgid "A password is required to connect to '%s'."
msgstr "Es wird ein Passwort benötigt, um sich mit »%s« zu verbinden."
#: ../js/ui/components/polkitAgent.js:54
#: ../js/ui/components/polkitAgent.js:55
msgid "Authentication Required"
msgstr "Legitimierung erforderlich"
#: ../js/ui/components/polkitAgent.js:92
#: ../js/ui/components/polkitAgent.js:93
msgid "Administrator"
msgstr "Systemverwalter"
#: ../js/ui/components/polkitAgent.js:170
#: ../js/ui/components/polkitAgent.js:165
msgid "Authenticate"
msgstr "Legitimieren"
@ -789,12 +791,12 @@ msgstr "Legitimieren"
#. * requested authentication was not gained; this can happen
#. * because of an authentication error (like invalid password),
#. * for instance.
#: ../js/ui/components/polkitAgent.js:266 ../js/ui/shellMountOperation.js:383
#: ../js/ui/components/polkitAgent.js:256 ../js/ui/shellMountOperation.js:383
msgid "Sorry, that didn't work. Please try again."
msgstr "Entschuldigung, das hat nicht geklappt. Bitte versuchen Sie es erneut."
#. Translators: this is a filename used for screencast recording
#: ../js/ui/components/recorder.js:47
#: ../js/ui/components/recorder.js:48
#, no-c-format
msgid "Screencast from %d %t"
msgstr "Bildschirmaufzeichnung von %d %t"
@ -1053,26 +1055,26 @@ msgstr "Anwendungen anzeigen"
# Würde ich so übernehmen, oder evtl. »Dock«.
#. Translators: this is the name of the dock/favorites area on
#. the left of the overview
#: ../js/ui/dash.js:429
#: ../js/ui/dash.js:435
msgid "Dash"
msgstr "Dash"
#: ../js/ui/dateMenu.js:86
#: ../js/ui/dateMenu.js:91
msgid "Open Calendar"
msgstr "Kalender öffnen"
#: ../js/ui/dateMenu.js:90
#: ../js/ui/dateMenu.js:96
msgid "Open Clocks"
msgstr "Uhren öffnen"
#: ../js/ui/dateMenu.js:97
#: ../js/ui/dateMenu.js:105
msgid "Date & Time Settings"
msgstr "Einstellungen für Datum und Uhrzeit"
#. Translators: This is the date format to use when the calendar popup is
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
#.
#: ../js/ui/dateMenu.js:208
#: ../js/ui/dateMenu.js:215
msgid "%A %B %e, %Y"
msgstr "%A, %e. %B %Y"
@ -1179,56 +1181,56 @@ msgstr "Installieren"
msgid "Download and install '%s' from extensions.gnome.org?"
msgstr "»%s« von extensions.gnome.org herunterladen und installieren?"
#: ../js/ui/keyboard.js:619 ../js/ui/status/keyboard.js:333
#: ../js/ui/keyboard.js:619 ../js/ui/status/keyboard.js:314
#: ../js/ui/status/power.js:211
msgid "Keyboard"
msgstr "Tastatur"
#: ../js/ui/lookingGlass.js:689
#: ../js/ui/lookingGlass.js:693
msgid "No extensions installed"
msgstr "Keine Erweiterungen installiert"
#. Translators: argument is an extension UUID.
#: ../js/ui/lookingGlass.js:743
#: ../js/ui/lookingGlass.js:747
#, c-format
msgid "%s has not emitted any errors."
msgstr "%s hat keine Fehler ausgegeben."
#: ../js/ui/lookingGlass.js:749
#: ../js/ui/lookingGlass.js:753
msgid "Hide Errors"
msgstr "Fehler verbergen"
#: ../js/ui/lookingGlass.js:753 ../js/ui/lookingGlass.js:813
#: ../js/ui/lookingGlass.js:757 ../js/ui/lookingGlass.js:817
msgid "Show Errors"
msgstr "Fehler anzeigen"
#: ../js/ui/lookingGlass.js:762
#: ../js/ui/lookingGlass.js:766
msgid "Enabled"
msgstr "Aktiviert"
#. translators:
#. * The device has been disabled
#: ../js/ui/lookingGlass.js:765 ../src/gvc/gvc-mixer-control.c:1830
#: ../js/ui/lookingGlass.js:769 ../src/gvc/gvc-mixer-control.c:1830
msgid "Disabled"
msgstr "Deaktiviert"
#: ../js/ui/lookingGlass.js:767
#: ../js/ui/lookingGlass.js:771
msgid "Error"
msgstr "Fehler"
#: ../js/ui/lookingGlass.js:769
#: ../js/ui/lookingGlass.js:773
msgid "Out of date"
msgstr "Veraltet"
#: ../js/ui/lookingGlass.js:771
#: ../js/ui/lookingGlass.js:775
msgid "Downloading"
msgstr "Herunterladen"
#: ../js/ui/lookingGlass.js:795
#: ../js/ui/lookingGlass.js:799
msgid "View Source"
msgstr "Quelle zeigen"
#: ../js/ui/lookingGlass.js:804
#: ../js/ui/lookingGlass.js:808
msgid "Web Page"
msgstr "Webseite"
@ -1248,35 +1250,35 @@ msgstr "Nachrichten leeren"
msgid "Notification Settings"
msgstr "Benachrichtigungseinstellungen"
#: ../js/ui/messageTray.js:1711
#: ../js/ui/messageTray.js:1707
msgid "No Messages"
msgstr "Keine Nachrichten"
#: ../js/ui/messageTray.js:1784
#: ../js/ui/messageTray.js:1782
msgid "Message Tray"
msgstr "Benachrichtigungsfeld"
#: ../js/ui/messageTray.js:2811
#: ../js/ui/messageTray.js:2869
msgid "System Information"
msgstr "Systeminformationen"
#: ../js/ui/notificationDaemon.js:629 ../src/shell-app.c:378
#: ../js/ui/notificationDaemon.js:629 ../src/shell-app.c:374
msgctxt "program"
msgid "Unknown"
msgstr "Unbekannt"
#: ../js/ui/overviewControls.js:474 ../js/ui/screenShield.js:150
#: ../js/ui/overviewControls.js:463 ../js/ui/screenShield.js:153
#, c-format
msgid "%d new message"
msgid_plural "%d new messages"
msgstr[0] "%d neue Nachricht"
msgstr[1] "%d neue Nachrichten"
#: ../js/ui/overview.js:82
#: ../js/ui/overview.js:84
msgid "Undo"
msgstr "Rückgängig"
#: ../js/ui/overview.js:127
#: ../js/ui/overview.js:131
msgid "Overview"
msgstr "Übersicht"
@ -1284,21 +1286,21 @@ msgstr "Übersicht"
#. in the search entry when no search is
#. active; it should not exceed ~30
#. characters.
#: ../js/ui/overview.js:258
#: ../js/ui/overview.js:287
msgid "Type to search…"
msgstr "Suchbegriff eingeben …"
#: ../js/ui/panel.js:642
#: ../js/ui/panel.js:612
msgid "Quit"
msgstr "Beenden"
#. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:693
#: ../js/ui/panel.js:636
msgid "Activities"
msgstr "Aktivitäten"
#: ../js/ui/panel.js:989
#: ../js/ui/panel.js:933
msgid "Top Bar"
msgstr "Oberes Panel"
@ -1307,15 +1309,15 @@ msgstr "Oberes Panel"
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
#. switches containing "◯" and "|"). Other values will
#. simply result in invisible toggle switches.
#: ../js/ui/popupMenu.js:738
#: ../js/ui/popupMenu.js:727
msgid "toggle-switch-us"
msgstr "toggle-switch-intl"
#: ../js/ui/runDialog.js:74
#: ../js/ui/runDialog.js:73
msgid "Enter a Command"
msgstr "Bitte geben Sie einen Befehl ein"
#: ../js/ui/runDialog.js:110
#: ../js/ui/runDialog.js:109
msgid "Close"
msgstr "Schließen"
@ -1324,22 +1326,22 @@ msgstr "Schließen"
# %B - ausgeschriebener Name des Monats, abhängig von der gesetzten Umgebung
#. Translators: This is a time format for a date in
#. long format
#: ../js/ui/screenShield.js:87
#: ../js/ui/screenShield.js:90
msgid "%A, %B %d"
msgstr "%A, %d. %B"
#: ../js/ui/screenShield.js:152
#: ../js/ui/screenShield.js:155
#, c-format
msgid "%d new notification"
msgid_plural "%d new notifications"
msgstr[0] "%d neue Benachrichtigung"
msgstr[1] "%d neue Benachrichtigungen"
#: ../js/ui/screenShield.js:449 ../js/ui/userMenu.js:807
#: ../js/ui/screenShield.js:442 ../js/ui/userMenu.js:807
msgid "Lock"
msgstr "Sperren"
#: ../js/ui/screenShield.js:652
#: ../js/ui/screenShield.js:639
msgid "GNOME needs to lock the screen"
msgstr "GNOME muss den Bildschirm sperren"
@ -1350,35 +1352,35 @@ msgstr "GNOME muss den Bildschirm sperren"
#.
#. XXX: another option is to kick the user into the gdm login
#. screen, where we're not affected by grabs
#: ../js/ui/screenShield.js:773 ../js/ui/screenShield.js:1213
#: ../js/ui/screenShield.js:758 ../js/ui/screenShield.js:1169
msgid "Unable to lock"
msgstr "Sperrung fehlgeschlagen"
#: ../js/ui/screenShield.js:774 ../js/ui/screenShield.js:1214
#: ../js/ui/screenShield.js:759 ../js/ui/screenShield.js:1170
msgid "Lock was blocked by an application"
msgstr "Sperrung wurde von einer Anwendung blockiert"
#: ../js/ui/searchDisplay.js:445
#: ../js/ui/searchDisplay.js:431
msgid "Searching…"
msgstr "Suche läuft …"
#: ../js/ui/searchDisplay.js:489
#: ../js/ui/searchDisplay.js:475
msgid "No results."
msgstr "Keine Ergebnisse."
#: ../js/ui/shellEntry.js:27
#: ../js/ui/shellEntry.js:29
msgid "Copy"
msgstr "Kopieren"
#: ../js/ui/shellEntry.js:32
#: ../js/ui/shellEntry.js:34
msgid "Paste"
msgstr "Einfügen"
#: ../js/ui/shellEntry.js:99
#: ../js/ui/shellEntry.js:106
msgid "Show Text"
msgstr "Text anzeigen"
#: ../js/ui/shellEntry.js:101
#: ../js/ui/shellEntry.js:108
msgid "Hide Text"
msgstr "Text verbergen"
@ -1390,7 +1392,7 @@ msgstr "Passwort"
msgid "Remember Password"
msgstr "An Passwort erinnern"
#: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:109
#: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:112
msgid "Unlock"
msgstr "Entsperren"
@ -1445,7 +1447,7 @@ msgstr "Große Schrift"
#: ../js/ui/status/bluetooth.js:28 ../js/ui/status/bluetooth.js:32
#: ../js/ui/status/bluetooth.js:289 ../js/ui/status/bluetooth.js:321
#: ../js/ui/status/bluetooth.js:357 ../js/ui/status/bluetooth.js:388
#: ../js/ui/status/network.js:739
#: ../js/ui/status/network.js:826
msgid "Bluetooth"
msgstr "Bluetooth"
@ -1466,7 +1468,7 @@ msgid "Bluetooth Settings"
msgstr "Bluetooth-Einstellungen"
#. TRANSLATORS: this means that bluetooth was disabled by hardware rfkill
#: ../js/ui/status/bluetooth.js:104 ../js/ui/status/network.js:142
#: ../js/ui/status/bluetooth.js:104 ../js/ui/status/network.js:178
msgid "hardware disabled"
msgstr "Hardware deaktiviert"
@ -1474,12 +1476,12 @@ msgstr "Hardware deaktiviert"
msgid "Connection"
msgstr "Verbindung"
#: ../js/ui/status/bluetooth.js:208 ../js/ui/status/network.js:404
#: ../js/ui/status/bluetooth.js:208 ../js/ui/status/network.js:460
msgid "disconnecting..."
msgstr "Verbindungsabbau …"
#: ../js/ui/status/bluetooth.js:221 ../js/ui/status/network.js:410
#: ../js/ui/status/network.js:1343
#: ../js/ui/status/bluetooth.js:221 ../js/ui/status/network.js:466
#: ../js/ui/status/network.js:1546
msgid "connecting..."
msgstr "Verbindungsaufbau …"
@ -1534,8 +1536,7 @@ msgstr "Gerät »%s« möchte mit diesem Rechner gekoppelt werden"
#: ../js/ui/status/bluetooth.js:366
#, c-format
msgid ""
"Please confirm whether the Passkey '%06d' matches the one on the device."
msgid "Please confirm whether the PIN '%06d' matches the one on the device."
msgstr ""
"Bitte bestätigen Sie, ob die PIN »%06d« mit der des Gerätes übereinstimmt."
@ -1561,11 +1562,11 @@ msgstr "Bitte geben Sie die auf dem Gerät angezeigte PIN ein."
msgid "OK"
msgstr "OK"
#: ../js/ui/status/keyboard.js:396
#: ../js/ui/status/keyboard.js:368
msgid "Show Keyboard Layout"
msgstr "Tastaturbelegung zeigen"
#: ../js/ui/status/keyboard.js:401
#: ../js/ui/status/keyboard.js:373
msgid "Region & Language Settings"
msgstr "Einstellungen für Region und Sprache"
@ -1573,91 +1574,117 @@ msgstr "Einstellungen für Region und Sprache"
msgid "Volume, network, battery"
msgstr "Lautstärke, Netzwerk, Batterie"
#: ../js/ui/status/network.js:75
#: ../js/ui/status/network.js:104
msgid "<unknown>"
msgstr "<Unbekannt>"
#: ../js/ui/status/network.js:127
msgid "Wi-Fi"
msgstr "WLAN"
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
#: ../js/ui/status/network.js:164
#: ../js/ui/status/network.js:200
msgid "disabled"
msgstr "Deaktiviert"
#. 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:402
#: ../js/ui/status/network.js:458
msgid "unmanaged"
msgstr "nicht verwaltet"
#. Translators: this is for network connections that require some kind of key or password
#: ../js/ui/status/network.js:413 ../js/ui/status/network.js:1346
#: ../js/ui/status/network.js:469 ../js/ui/status/network.js:1549
msgid "authentication required"
msgstr "Legitimierung erforderlich"
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing
#: ../js/ui/status/network.js:423
#: ../js/ui/status/network.js:479
msgid "firmware missing"
msgstr "Firmware fehlt"
#. Translators: this is for wired network devices that are physically disconnected
#: ../js/ui/status/network.js:430
#: ../js/ui/status/network.js:486
msgid "cable unplugged"
msgstr "Kabel nicht angeschlossen"
#. 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:435
#: ../js/ui/status/network.js:491
msgid "unavailable"
msgstr "nicht verfügbar"
#: ../js/ui/status/network.js:437 ../js/ui/status/network.js:1348
#: ../js/ui/status/network.js:493 ../js/ui/status/network.js:1551
msgid "connection failed"
msgstr "Verbindung gescheitert"
#: ../js/ui/status/network.js:490 ../js/ui/status/network.js:1236
#: ../js/ui/status/network.js:1424
#: ../js/ui/status/network.js:552 ../js/ui/status/network.js:1435
#: ../js/ui/status/network.js:1627
msgid "More…"
msgstr "Mehr …"
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
#. and we cannot access its settings (including the name)
#: ../js/ui/status/network.js:518 ../js/ui/status/network.js:1191
#: ../js/ui/status/network.js:588 ../js/ui/status/network.js:1365
msgid "Connected (private)"
msgstr "Verbunden (privat)"
#: ../js/ui/status/network.js:597
#: ../js/ui/status/network.js:667
msgid "Wired"
msgstr "Kabelgebunden"
#: ../js/ui/status/network.js:611
#: ../js/ui/status/network.js:668
msgid "Auto Ethernet"
msgstr "Ethernet (automatisch)"
#: ../js/ui/status/network.js:695
msgid "Mobile broadband"
msgstr "Mobiles Breitband"
#: ../js/ui/status/network.js:1522
#: ../js/ui/status/network.js:728
msgid "Auto broadband"
msgstr "Mobiles Breitband (automatisch)"
#: ../js/ui/status/network.js:731
msgid "Auto dial-up"
msgstr "Einwählverbindung (automatisch)"
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
#: ../js/ui/status/network.js:861 ../js/ui/status/network.js:1382
#, c-format
msgid "Auto %s"
msgstr "%s (automatisch)"
#: ../js/ui/status/network.js:863
msgid "Auto bluetooth"
msgstr "Bluetooth (automatisch)"
#: ../js/ui/status/network.js:1384
msgid "Auto wireless"
msgstr "Drahtlos (automatisch)"
#: ../js/ui/status/network.js:1729
msgid "Enable networking"
msgstr "Netzwerk aktivieren"
#: ../js/ui/status/network.js:1583
#: ../js/ui/status/network.js:1771
msgid "Wi-Fi"
msgstr "WLAN"
#: ../js/ui/status/network.js:1790
msgid "Network Settings"
msgstr "Netzwerkeinstellungen"
#: ../js/ui/status/network.js:1600
#: ../js/ui/status/network.js:1807
msgid "Network Manager"
msgstr "Netzwerk-Verwaltung"
#: ../js/ui/status/network.js:1690
#: ../js/ui/status/network.js:1897
msgid "Connection failed"
msgstr "Verbindung gescheitert"
#: ../js/ui/status/network.js:1691
#: ../js/ui/status/network.js:1898
msgid "Activation of network connection failed"
msgstr "Aktivierung der Netzwerkverbindung ist gescheitert"
#: ../js/ui/status/network.js:2047
#: ../js/ui/status/network.js:2276
msgid "Networking is disabled"
msgstr "Netzwerk ist deaktiviert"
@ -1771,11 +1798,11 @@ msgstr "Lautstärke"
msgid "Microphone"
msgstr "Mikrofon"
#: ../js/ui/unlockDialog.js:120
#: ../js/ui/unlockDialog.js:123
msgid "Log in as another user"
msgstr "Als anderer Benutzer anmelden"
#: ../js/ui/unlockDialog.js:141
#: ../js/ui/unlockDialog.js:149
msgid "Unlock Window"
msgstr "Fenster entsperren"
@ -1901,37 +1928,37 @@ msgid_plural "%u Inputs"
msgstr[0] "%u Eingang"
msgstr[1] "%u Eingänge"
#: ../src/gvc/gvc-mixer-control.c:2373
#: ../src/gvc/gvc-mixer-control.c:2371
msgid "System Sounds"
msgstr "Systemklänge"
#: ../src/main.c:372
#: ../src/main.c:347
msgid "Print version"
msgstr "Version ausgeben"
#: ../src/main.c:378
#: ../src/main.c:353
msgid "Mode used by GDM for login screen"
msgstr "Der durch GDM im Anmeldefenster verwendete Modus"
#: ../src/main.c:384
#: ../src/main.c:359
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
msgstr ""
"Einen spezifischen Modus nutzen, wie z.B. »gdm« für den Anmeldebildschirm"
#: ../src/main.c:390
#: ../src/main.c:365
msgid "List possible modes"
msgstr "Die möglichen Modi auflisten"
#: ../src/shell-app.c:626
#: ../src/shell-app.c:622
#, c-format
msgid "Failed to launch '%s'"
msgstr "»%s« konnte nicht gestartet werden"
#: ../src/shell-keyring-prompt.c:714
#: ../src/shell-keyring-prompt.c:708
msgid "Passwords do not match."
msgstr "Passwörter stimmen nicht überein."
#: ../src/shell-keyring-prompt.c:722
#: ../src/shell-keyring-prompt.c:716
msgid "Password cannot be blank"
msgstr "Das Passwort darf nicht leer sein"
@ -1939,40 +1966,6 @@ msgstr "Das Passwort darf nicht leer sein"
msgid "Authentication dialog was dismissed by the user"
msgstr "Der Dialog zur Legitimierung wurde vom Benutzer geschlossen"
#~ msgid "Whether to collect stats about applications usage"
#~ msgstr ""
#~ "Legt fest, ob Statistiken über Anwendungsnutzung erfasst werden sollen"
#~ msgid ""
#~ "The shell normally monitors active applications in order to present the "
#~ "most used ones (e.g. in launchers). While this data will be kept private, "
#~ "you may want to disable this for privacy reasons. Please note that doing "
#~ "so won't remove already saved data."
#~ msgstr ""
#~ "Die Shell überwacht normalerweise aktive Anwendungen, wobei die "
#~ "meistgenutzten zuerst erfasst werden (z.B. in Anwendungsstartern). Zwar "
#~ "werden diese Daten privat gespeichert, doch möglicherweise wollen Sie "
#~ "dies deaktivieren, um Ihre Privatsphäre zu schützen. Bitte beachten Sie, "
#~ "dass bereits gespeicherte Daten hiervon nicht beeinflusst werden."
#~ msgid "Auto Ethernet"
#~ msgstr "Ethernet (automatisch)"
#~ msgid "Auto broadband"
#~ msgstr "Mobiles Breitband (automatisch)"
#~ msgid "Auto dial-up"
#~ msgstr "Einwählverbindung (automatisch)"
#~ msgid "Auto %s"
#~ msgstr "%s (automatisch)"
#~ msgid "Auto bluetooth"
#~ msgstr "Bluetooth (automatisch)"
#~ msgid "Auto wireless"
#~ msgstr "Drahtlos (automatisch)"
#~ msgctxt "title"
#~ msgid "Sign In"
#~ msgstr "Anmelden"

253
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: 2013-06-14 18:16+0000\n"
"PO-Revision-Date: 2013-06-17 17:26+0200\n"
"POT-Creation-Date: 2013-05-25 08:18+0000\n"
"PO-Revision-Date: 2013-05-27 13:23+0200\n"
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
"Language-Team: Español <gnome-es-list@gnome.org>\n"
"Language: \n"
@ -369,37 +369,37 @@ msgid "Select an extension to configure using the combobox above."
msgstr ""
"Seleccione una extensión que configurar usando la caja combinada de arriba."
#: ../js/gdm/loginDialog.js:370
#: ../js/gdm/loginDialog.js:371
msgid "Session…"
msgstr "Sesión…"
#. translators: this message is shown below the user list on the
#. login screen. It can be activated to reveal an entry for
#. manually entering the username.
#: ../js/gdm/loginDialog.js:600
#: ../js/gdm/loginDialog.js:601
msgid "Not listed?"
msgstr "¿No está en la lista?"
#: ../js/gdm/loginDialog.js:775 ../js/ui/components/networkAgent.js:137
#: ../js/gdm/loginDialog.js:776 ../js/ui/components/networkAgent.js:137
#: ../js/ui/components/polkitAgent.js:161 ../js/ui/endSessionDialog.js:376
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/bluetooth.js:449 ../js/ui/unlockDialog.js:95
#: ../js/ui/userMenu.js:884
#: ../js/ui/status/bluetooth.js:415 ../js/ui/unlockDialog.js:96
#: ../js/ui/userMenu.js:938
msgid "Cancel"
msgstr "Cancelar"
#: ../js/gdm/loginDialog.js:790
#: ../js/gdm/loginDialog.js:791
msgctxt "button"
msgid "Sign In"
msgstr "Iniciar sesión"
#: ../js/gdm/loginDialog.js:790
#: ../js/gdm/loginDialog.js:791
msgid "Next"
msgstr "Siguiente"
#. Translators: this message is shown below the username entry field
#. to clue the user in on how to login to the local network realm
#: ../js/gdm/loginDialog.js:887
#: ../js/gdm/loginDialog.js:888
#, c-format
msgid "(e.g., user or %s)"
msgstr "(ej., usuario o %s)"
@ -407,12 +407,12 @@ msgstr "(ej., usuario o %s)"
#. TTLS and PEAP are actually much more complicated, but this complication
#. is not visible here since we only care about phase2 authentication
#. (and don't even care of which one)
#: ../js/gdm/loginDialog.js:891 ../js/ui/components/networkAgent.js:260
#: ../js/gdm/loginDialog.js:892 ../js/ui/components/networkAgent.js:260
#: ../js/ui/components/networkAgent.js:278
msgid "Username: "
msgstr "Nombre de usuario:"
#: ../js/gdm/loginDialog.js:1157
#: ../js/gdm/loginDialog.js:1158
msgid "Login Window"
msgstr "Ventana de inicio de sesión"
@ -421,8 +421,8 @@ msgstr "Ventana de inicio de sesión"
msgid "Power"
msgstr "Energía"
#: ../js/gdm/powerMenu.js:93 ../js/ui/userMenu.js:651 ../js/ui/userMenu.js:655
#: ../js/ui/userMenu.js:768
#: ../js/gdm/powerMenu.js:93 ../js/ui/userMenu.js:696 ../js/ui/userMenu.js:700
#: ../js/ui/userMenu.js:816
msgid "Suspend"
msgstr "Suspender"
@ -430,8 +430,8 @@ msgstr "Suspender"
msgid "Restart"
msgstr "Reiniciar"
#: ../js/gdm/powerMenu.js:103 ../js/ui/userMenu.js:653
#: ../js/ui/userMenu.js:655 ../js/ui/userMenu.js:767 ../js/ui/userMenu.js:888
#: ../js/gdm/powerMenu.js:103 ../js/ui/userMenu.js:698
#: ../js/ui/userMenu.js:700 ../js/ui/userMenu.js:815 ../js/ui/userMenu.js:942
msgid "Power Off"
msgstr "Apagar"
@ -460,23 +460,23 @@ msgstr "No se pudo analizar el comando:"
msgid "Execution of '%s' failed:"
msgstr "Falló la ejecución de «%s»:"
#: ../js/ui/appDisplay.js:397
#: ../js/ui/appDisplay.js:361
msgid "Frequent"
msgstr "Frecuentes"
#: ../js/ui/appDisplay.js:404
#: ../js/ui/appDisplay.js:368
msgid "All"
msgstr "Todas"
#: ../js/ui/appDisplay.js:996
#: ../js/ui/appDisplay.js:960
msgid "New Window"
msgstr "Ventana nueva"
#: ../js/ui/appDisplay.js:999 ../js/ui/dash.js:284
#: ../js/ui/appDisplay.js:963 ../js/ui/dash.js:284
msgid "Remove from Favorites"
msgstr "Quitar de los favoritos"
#: ../js/ui/appDisplay.js:1000
#: ../js/ui/appDisplay.js:964
msgid "Add to Favorites"
msgstr "Añadir a los favoritos"
@ -490,7 +490,7 @@ msgstr "Se ha añadido %s a sus favoritos."
msgid "%s has been removed from your favorites."
msgstr "Se ha quitado %s de sus favoritos."
#: ../js/ui/backgroundMenu.js:19 ../js/ui/userMenu.js:744
#: ../js/ui/backgroundMenu.js:19 ../js/ui/userMenu.js:789
msgid "Settings"
msgstr "Configuración"
@ -615,35 +615,35 @@ msgid "S"
msgstr "S"
#. Translators: Text to show if there are no events
#: ../js/ui/calendar.js:750
#: ../js/ui/calendar.js:735
msgid "Nothing Scheduled"
msgstr "Nada programado"
#. Translators: Shown on calendar heading when selected day occurs on current year
#: ../js/ui/calendar.js:768
#: ../js/ui/calendar.js:751
msgctxt "calendar heading"
msgid "%A, %B %d"
msgstr "%A, %d de %B"
#. Translators: Shown on calendar heading when selected day occurs on different year
#: ../js/ui/calendar.js:771
#: ../js/ui/calendar.js:754
msgctxt "calendar heading"
msgid "%A, %B %d, %Y"
msgstr "%A, %d de %B de %Y"
#: ../js/ui/calendar.js:782
#: ../js/ui/calendar.js:764
msgid "Today"
msgstr "Hoy"
#: ../js/ui/calendar.js:786
#: ../js/ui/calendar.js:768
msgid "Tomorrow"
msgstr "Mañana"
#: ../js/ui/calendar.js:797
#: ../js/ui/calendar.js:779
msgid "This week"
msgstr "Esta semana"
#: ../js/ui/calendar.js:805
#: ../js/ui/calendar.js:787
msgid "Next week"
msgstr "La semana que viene"
@ -1030,26 +1030,26 @@ msgstr "Mostrar aplicaciones"
#. Translators: this is the name of the dock/favorites area on
#. the left of the overview
#: ../js/ui/dash.js:439
#: ../js/ui/dash.js:435
msgid "Dash"
msgstr "Tablero"
#: ../js/ui/dateMenu.js:85
#: ../js/ui/dateMenu.js:86
msgid "Open Calendar"
msgstr "Abrir calendario"
#: ../js/ui/dateMenu.js:89
#: ../js/ui/dateMenu.js:90
msgid "Open Clocks"
msgstr "Abrir Relojes"
#: ../js/ui/dateMenu.js:96
#: ../js/ui/dateMenu.js:97
msgid "Date & Time Settings"
msgstr "Configuración de hora y fecha"
#. Translators: This is the date format to use when the calendar popup is
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
#.
#: ../js/ui/dateMenu.js:202
#: ../js/ui/dateMenu.js:208
msgid "%A %B %e, %Y"
msgstr "%A, %e de %B de %Y"
@ -1153,7 +1153,7 @@ msgstr "Instalar"
msgid "Download and install '%s' from extensions.gnome.org?"
msgstr "¿Descargar e instalar «%s» desde extensions.gnome.org?"
#: ../js/ui/keyboard.js:619 ../js/ui/status/keyboard.js:333
#: ../js/ui/keyboard.js:619 ../js/ui/status/keyboard.js:314
#: ../js/ui/status/power.js:211
msgid "Keyboard"
msgstr "Teclado"
@ -1222,15 +1222,15 @@ msgstr "Limpiar mensajes"
msgid "Notification Settings"
msgstr "Configuración de las notificaciones"
#: ../js/ui/messageTray.js:1711
#: ../js/ui/messageTray.js:1707
msgid "No Messages"
msgstr "No hay mensajes"
#: ../js/ui/messageTray.js:1784
#: ../js/ui/messageTray.js:1780
msgid "Message Tray"
msgstr "Bandeja de mensajes"
#: ../js/ui/messageTray.js:2811
#: ../js/ui/messageTray.js:2800
msgid "System Information"
msgstr "Información del sistema"
@ -1239,7 +1239,7 @@ msgctxt "program"
msgid "Unknown"
msgstr "Desconocido"
#: ../js/ui/overviewControls.js:474 ../js/ui/screenShield.js:150
#: ../js/ui/overviewControls.js:472 ../js/ui/screenShield.js:150
#, c-format
msgid "%d new message"
msgid_plural "%d new messages"
@ -1281,7 +1281,7 @@ msgstr "Barra superior"
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
#. switches containing "◯" and "|"). Other values will
#. simply result in invisible toggle switches.
#: ../js/ui/popupMenu.js:545
#: ../js/ui/popupMenu.js:738
msgid "toggle-switch-us"
msgstr "toggle-switch-intl"
@ -1306,7 +1306,7 @@ msgid_plural "%d new notifications"
msgstr[0] "%d notificación nueva"
msgstr[1] "%d notificaciones nuevas"
#: ../js/ui/screenShield.js:449 ../js/ui/userMenu.js:759
#: ../js/ui/screenShield.js:449 ../js/ui/userMenu.js:807
msgid "Lock"
msgstr "Bloquear"
@ -1329,11 +1329,11 @@ msgstr "No se pudo bloquear"
msgid "Lock was blocked by an application"
msgstr "Una aplicación impidió el bloqueo"
#: ../js/ui/searchDisplay.js:445
#: ../js/ui/searchDisplay.js:453
msgid "Searching…"
msgstr "Buscando…"
#: ../js/ui/searchDisplay.js:489
#: ../js/ui/searchDisplay.js:497
msgid "No results."
msgstr "No se encontraron resultados."
@ -1361,7 +1361,7 @@ msgstr "Contraseña"
msgid "Remember Password"
msgstr "Recordar contraseña"
#: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:108
#: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:109
msgid "Unlock"
msgstr "Desbloquear"
@ -1414,9 +1414,9 @@ msgid "Large Text"
msgstr "Texto grande"
#: ../js/ui/status/bluetooth.js:28 ../js/ui/status/bluetooth.js:32
#: ../js/ui/status/bluetooth.js:290 ../js/ui/status/bluetooth.js:327
#: ../js/ui/status/bluetooth.js:355 ../js/ui/status/bluetooth.js:391
#: ../js/ui/status/bluetooth.js:422 ../js/ui/status/network.js:713
#: ../js/ui/status/bluetooth.js:289 ../js/ui/status/bluetooth.js:321
#: ../js/ui/status/bluetooth.js:357 ../js/ui/status/bluetooth.js:388
#: ../js/ui/status/network.js:739
msgid "Bluetooth"
msgstr "Bluetooth"
@ -1437,115 +1437,107 @@ msgid "Bluetooth Settings"
msgstr "Configuración de Bluetooth"
#. TRANSLATORS: this means that bluetooth was disabled by hardware rfkill
#: ../js/ui/status/bluetooth.js:105 ../js/ui/status/network.js:140
#: ../js/ui/status/bluetooth.js:104 ../js/ui/status/network.js:142
msgid "hardware disabled"
msgstr "hardware desactivado"
#: ../js/ui/status/bluetooth.js:198
#: ../js/ui/status/bluetooth.js:197
msgid "Connection"
msgstr "Conexión"
#: ../js/ui/status/bluetooth.js:209 ../js/ui/status/network.js:399
#: ../js/ui/status/bluetooth.js:208 ../js/ui/status/network.js:404
msgid "disconnecting..."
msgstr "deconectando…"
#: ../js/ui/status/bluetooth.js:222 ../js/ui/status/network.js:405
#: ../js/ui/status/network.js:1298
#: ../js/ui/status/bluetooth.js:221 ../js/ui/status/network.js:410
#: ../js/ui/status/network.js:1343
msgid "connecting..."
msgstr "conectando…"
#: ../js/ui/status/bluetooth.js:240
#: ../js/ui/status/bluetooth.js:239
msgid "Send Files…"
msgstr "Enviar archivos…"
#: ../js/ui/status/bluetooth.js:247
#: ../js/ui/status/bluetooth.js:246
msgid "Keyboard Settings"
msgstr "Configuración del teclado"
#: ../js/ui/status/bluetooth.js:250
#: ../js/ui/status/bluetooth.js:249
msgid "Mouse Settings"
msgstr "Configuración del ratón…"
#: ../js/ui/status/bluetooth.js:255 ../js/ui/status/volume.js:313
#: ../js/ui/status/bluetooth.js:254 ../js/ui/status/volume.js:316
msgid "Sound Settings"
msgstr "Configuración del sonido"
#: ../js/ui/status/bluetooth.js:328 ../js/ui/status/bluetooth.js:356
#: ../js/ui/status/bluetooth.js:322
#, c-format
msgid "Authorization request from %s"
msgstr "Solicitud de autorización de %s"
#: ../js/ui/status/bluetooth.js:334 ../js/ui/status/bluetooth.js:399
#: ../js/ui/status/bluetooth.js:430
#, c-format
msgid "Device %s wants to pair with this computer"
msgstr "El dispositivo «%s» quiere emparejarse con este equipo"
#: ../js/ui/status/bluetooth.js:336
msgid "Allow"
msgstr "Permitir"
#: ../js/ui/status/bluetooth.js:337
msgid "Deny"
msgstr "Denegar"
#: ../js/ui/status/bluetooth.js:362
#: ../js/ui/status/bluetooth.js:328
#, c-format
msgid "Device %s wants access to the service '%s'"
msgstr "El dispositivo %s quiere acceder al servicio «%s»"
#: ../js/ui/status/bluetooth.js:364
#: ../js/ui/status/bluetooth.js:330
msgid "Always grant access"
msgstr "Conceder acceso siempre"
#: ../js/ui/status/bluetooth.js:365
#: ../js/ui/status/bluetooth.js:331
msgid "Grant this time only"
msgstr "Conceder sólo esta vez"
#: ../js/ui/status/bluetooth.js:366
#: ../js/ui/status/bluetooth.js:332
msgid "Reject"
msgstr "Rechazar"
#. Translators: argument is the device short name
#: ../js/ui/status/bluetooth.js:393
#: ../js/ui/status/bluetooth.js:359
#, c-format
msgid "Pairing confirmation for %s"
msgstr "Confirmación de emparejamiento para «%s»"
#: ../js/ui/status/bluetooth.js:400
#: ../js/ui/status/bluetooth.js:365 ../js/ui/status/bluetooth.js:396
#, c-format
msgid "Device %s wants to pair with this computer"
msgstr "El dispositivo «%s» quiere emparejarse con este equipo"
#: ../js/ui/status/bluetooth.js:366
#, c-format
#| msgid "Please confirm whether the PIN '%06d' matches the one on the device."
msgid ""
"Please confirm whether the Passkey '%06d' matches the one on the device."
msgstr ""
"Confirme que la clave mostrada en «%06d» coincide con la del dispositivo."
#. Translators: this is the verb, not the noun
#: ../js/ui/status/bluetooth.js:403
#: ../js/ui/status/bluetooth.js:369
msgid "Matches"
msgstr "Coincide"
#: ../js/ui/status/bluetooth.js:404
#: ../js/ui/status/bluetooth.js:370
msgid "Does not match"
msgstr "No coincide"
#: ../js/ui/status/bluetooth.js:423
#: ../js/ui/status/bluetooth.js:389
#, c-format
msgid "Pairing request for %s"
msgstr "Solicitud de emparejamiento para «%s»"
#: ../js/ui/status/bluetooth.js:431
#: ../js/ui/status/bluetooth.js:397
msgid "Please enter the PIN mentioned on the device."
msgstr "Introduzca el PIN mencionado en el dispositivo."
#: ../js/ui/status/bluetooth.js:448
#: ../js/ui/status/bluetooth.js:414
msgid "OK"
msgstr "Aceptar"
#: ../js/ui/status/keyboard.js:396
#: ../js/ui/status/keyboard.js:368
msgid "Show Keyboard Layout"
msgstr "Mostrar la distribución del teclado"
#: ../js/ui/status/keyboard.js:401
#: ../js/ui/status/keyboard.js:373
msgid "Region & Language Settings"
msgstr "Configuración de región e idioma"
@ -1557,81 +1549,87 @@ msgstr "Volumen, red, batería"
msgid "<unknown>"
msgstr "<desconocido>"
#: ../js/ui/status/network.js:125
#: ../js/ui/status/network.js:127
msgid "Wi-Fi"
msgstr "Wi-Fi"
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
#: ../js/ui/status/network.js:162
#: ../js/ui/status/network.js:164
msgid "disabled"
msgstr "desactivada"
#. 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:397
#: ../js/ui/status/network.js:402
msgid "unmanaged"
msgstr "no gestionada"
#. Translators: this is for network connections that require some kind of key or password
#: ../js/ui/status/network.js:408 ../js/ui/status/network.js:1301
#: ../js/ui/status/network.js:413 ../js/ui/status/network.js:1346
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:419
#: ../js/ui/status/network.js:423
msgid "firmware missing"
msgstr "falta el «firmware»"
#. Translators: this is for wired network devices that are physically disconnected
#: ../js/ui/status/network.js:430
msgid "cable unplugged"
msgstr "cable desconectado"
#. 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:423
#: ../js/ui/status/network.js:435
msgid "unavailable"
msgstr "no disponible"
#: ../js/ui/status/network.js:425 ../js/ui/status/network.js:1303
#: ../js/ui/status/network.js:437 ../js/ui/status/network.js:1348
msgid "connection failed"
msgstr "falló la conexión"
#: ../js/ui/status/network.js:478 ../js/ui/status/network.js:1190
#: ../js/ui/status/network.js:490 ../js/ui/status/network.js:1236
#: ../js/ui/status/network.js:1424
msgid "More…"
msgstr "Más…"
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
#. and we cannot access its settings (including the name)
#: ../js/ui/status/network.js:506 ../js/ui/status/network.js:1142
#: ../js/ui/status/network.js:518 ../js/ui/status/network.js:1191
msgid "Connected (private)"
msgstr "Conectada (privada)"
#: ../js/ui/status/network.js:572
#: ../js/ui/status/network.js:597
msgid "Wired"
msgstr "Cableada"
#: ../js/ui/status/network.js:592
#: ../js/ui/status/network.js:611
msgid "Mobile broadband"
msgstr "Banda ancha móvil"
#: ../js/ui/status/network.js:1474
#: ../js/ui/status/network.js:1522
msgid "Enable networking"
msgstr "Activar red"
#: ../js/ui/status/network.js:1522
#: ../js/ui/status/network.js:1583
msgid "Network Settings"
msgstr "Configuración de la red"
#: ../js/ui/status/network.js:1539
#: ../js/ui/status/network.js:1600
msgid "Network Manager"
msgstr "Gestor de la red"
#: ../js/ui/status/network.js:1623
#: ../js/ui/status/network.js:1690
msgid "Connection failed"
msgstr "Falló la conexión"
#: ../js/ui/status/network.js:1624
#: ../js/ui/status/network.js:1691
msgid "Activation of network connection failed"
msgstr "Falló la activación de la conexión de red"
#: ../js/ui/status/network.js:1933
#: ../js/ui/status/network.js:2047
msgid "Networking is disabled"
msgstr "La red está desactivada"
@ -1732,72 +1730,72 @@ msgctxt "device"
msgid "Unknown"
msgstr "Desconocido"
#: ../js/ui/status/volume.js:121
#: ../js/ui/status/volume.js:124
msgid "Volume changed"
msgstr "Volumen modificado"
#. Translators: This is the label for audio volume
#: ../js/ui/status/volume.js:246 ../js/ui/status/volume.js:294
#: ../js/ui/status/volume.js:249 ../js/ui/status/volume.js:297
msgid "Volume"
msgstr "Volumen"
#: ../js/ui/status/volume.js:255
#: ../js/ui/status/volume.js:258
msgid "Microphone"
msgstr "Micrófono"
#: ../js/ui/unlockDialog.js:119
#: ../js/ui/unlockDialog.js:120
msgid "Log in as another user"
msgstr "Iniciar sesión como otro usuario"
#: ../js/ui/unlockDialog.js:140
#: ../js/ui/unlockDialog.js:141
msgid "Unlock Window"
msgstr "Desbloquear ventana"
#: ../js/ui/userMenu.js:149
#: ../js/ui/userMenu.js:193
msgid "Available"
msgstr "Disponible"
#: ../js/ui/userMenu.js:152
#: ../js/ui/userMenu.js:196
msgid "Busy"
msgstr "Ocupado"
#: ../js/ui/userMenu.js:155
#: ../js/ui/userMenu.js:199
msgid "Invisible"
msgstr "Invisible"
#: ../js/ui/userMenu.js:158
#: ../js/ui/userMenu.js:202
msgid "Away"
msgstr "Ausente"
#: ../js/ui/userMenu.js:161
#: ../js/ui/userMenu.js:205
msgid "Idle"
msgstr "Inactivo"
#: ../js/ui/userMenu.js:164
#: ../js/ui/userMenu.js:208
msgid "Offline"
msgstr "Desconectado"
#: ../js/ui/userMenu.js:736
#: ../js/ui/userMenu.js:781
msgid "Notifications"
msgstr "Notificaciones"
#: ../js/ui/userMenu.js:749
#: ../js/ui/userMenu.js:797
msgid "Switch User"
msgstr "Cambiar de usuario"
#: ../js/ui/userMenu.js:754
#: ../js/ui/userMenu.js:802
msgid "Log Out"
msgstr "Cerrar la sesión"
#: ../js/ui/userMenu.js:774
#: ../js/ui/userMenu.js:822
msgid "Install Updates & Restart"
msgstr "Instalar actualizaciones y reiniciar"
#: ../js/ui/userMenu.js:792
#: ../js/ui/userMenu.js:840
msgid "Your chat status will be set to busy"
msgstr "Su estado del chat se establecerá a «ocupado»"
#: ../js/ui/userMenu.js:793
#: ../js/ui/userMenu.js:841
msgid ""
"Notifications are now disabled, including chat messages. Your online status "
"has been adjusted to let others know that you might not see their messages."
@ -1806,22 +1804,22 @@ msgstr ""
"chat. Su estado en línea se ha ajustado para que otros sepan que puede no "
"leer sus mensajes."
#: ../js/ui/userMenu.js:834
#: ../js/ui/userMenu.js:888
msgid "Other users are logged in."
msgstr "Hay otros usuarios con la sesión iniciada"
#: ../js/ui/userMenu.js:839
#: ../js/ui/userMenu.js:893
msgid "Shutting down might cause them to lose unsaved work."
msgstr "Apagar puede hacer que pierdan el trabajo que no hayan guardado."
#. Translators: Remote here refers to a remote session, like a ssh login
#: ../js/ui/userMenu.js:867
#: ../js/ui/userMenu.js:921
#, c-format
msgid "%s (remote)"
msgstr "%s (remoto)"
#. Translators: Console here refers to a tty like a VT console
#: ../js/ui/userMenu.js:870
#: ../js/ui/userMenu.js:924
#, c-format
msgid "%s (console)"
msgstr "%s (consola)"
@ -1879,21 +1877,21 @@ msgstr[1] "%u entradas"
msgid "System Sounds"
msgstr "Sonidos del sistema"
#: ../src/main.c:353
#: ../src/main.c:372
msgid "Print version"
msgstr "Imprimir versión"
#: ../src/main.c:359
#: ../src/main.c:378
msgid "Mode used by GDM for login screen"
msgstr "Modo usado por GDM para la pantalla de inicio"
#: ../src/main.c:365
#: ../src/main.c:384
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
msgstr ""
"Usar un modo específico, por ejemplo, «gdm» para la pantalla de inicio de "
"sesión"
#: ../src/main.c:371
#: ../src/main.c:390
msgid "List possible modes"
msgstr "Listar los modos posibles"
@ -1914,9 +1912,6 @@ msgstr "La contraseña no puede estar vacía"
msgid "Authentication dialog was dismissed by the user"
msgstr "El usuario rechazó el diálogo de autenticación"
#~ msgid "cable unplugged"
#~ msgstr "cable desconectado"
#~ msgid "Whether to collect stats about applications usage"
#~ msgstr ""
#~ "Indica si se deben recolectar estadísticas acerca del uso de las "

363
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: 2013-05-31 01:03+0200\n"
"PO-Revision-Date: 2013-05-31 01:04+0200\n"
"POT-Creation-Date: 2013-04-18 01:27+0200\n"
"PO-Revision-Date: 2013-04-18 01:42+0200\n"
"Last-Translator: Fran Dieguez <frandieguez@gnome.org>\n"
"Language-Team: gnome-l10n-gl@gnome.org\n"
"Language: gl\n"
@ -44,14 +44,10 @@ msgid "Focus the active notification"
msgstr "Enfocar a notificación activa"
#: ../data/50-gnome-shell-system.xml.in.h:4
msgid "Show the overview"
msgstr "Mostrar a vista xeral"
#: ../data/50-gnome-shell-system.xml.in.h:5
msgid "Show all applications"
msgstr "Mostrar todos os aplicativos"
#: ../data/50-gnome-shell-system.xml.in.h:6
#: ../data/50-gnome-shell-system.xml.in.h:5
msgid "Open the application menu"
msgstr "Abrir o menú de aplicativo"
@ -103,10 +99,26 @@ msgstr ""
"EnableExtension e DisableExtension de DBus en org.gnome.Shell."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:5
msgid "Whether to collect stats about applications usage"
msgstr "Indica se se deben recolectar estatísticas sobre o uso dos aplicativos"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:6
msgid ""
"The shell normally monitors active applications in order to present the most "
"used ones (e.g. in launchers). While this data will be kept private, you may "
"want to disable this for privacy reasons. Please note that doing so won't "
"remove already saved data."
msgstr ""
"O shell normalmente monitoriza os aplicativos activos para mostrarlle os "
"máis usados (p.ex. nos iniciadores). Aínda que estes datos se manteñen de "
"forma privada, vostede pode desactivar isto por razóns de privacidade. Teña "
"en conta que facendo isto non retirará os datos gardados."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:7
msgid "List of desktop file IDs for favorite applications"
msgstr "Lista de ID de ficheiros de escritorio para os aplicativos preferidos"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:6
#: ../data/org.gnome.shell.gschema.xml.in.in.h:8
msgid ""
"The applications corresponding to these identifiers will be displayed in the "
"favorites area."
@ -114,11 +126,11 @@ msgstr ""
"Os aplicativos que corresponden a estes identificadores mostraranse na área "
"de preferidos."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:7
#: ../data/org.gnome.shell.gschema.xml.in.in.h:9
msgid "List of categories that should be displayed as folders"
msgstr "Lista de categorías que se debería mostrar como cartafoles"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:8
#: ../data/org.gnome.shell.gschema.xml.in.in.h:10
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."
@ -126,15 +138,15 @@ msgstr ""
"Cada nome de categoría nesta lista representarase como un cartafol na vista "
"de aplicativos, no lugar de mostrarse en liña na vista principal."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:9
#: ../data/org.gnome.shell.gschema.xml.in.in.h:11
msgid "History for command (Alt-F2) dialog"
msgstr "Historial do diálogo de ordes (Alt-F2)"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:10
#: ../data/org.gnome.shell.gschema.xml.in.in.h:12
msgid "History for the looking glass dialog"
msgstr "Historial do diálogo de «looking glass»"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:11
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
msgid ""
"Internally used to store the last IM presence explicitly set by the user. "
"The value here is from the TpConnectionPresenceType enumeration."
@ -143,7 +155,7 @@ msgstr ""
"explícitamente polo usuario. O valor aquí é da enumeración "
"TpConnectionPresenceType."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:12
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
msgid ""
"Internally used to store the last session presence status for the user. The "
"value here is from the GsmPresenceStatus enumeration."
@ -151,11 +163,11 @@ msgstr ""
"Usado internamente para gardar o último estado de presenza da sesión do "
"usuario. O valor aquí é da GsmPresenceStatus."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
msgid "Always show the 'Log out' menuitem in the user menu."
msgstr "Mostrar sempre o elemento de menú «Saír da sesión» no menú de usuario."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
msgid ""
"This key overrides the automatic hiding of the 'Log out' menuitem in single-"
"user, single-session situations."
@ -164,14 +176,14 @@ msgstr ""
"sesión» en situacións de existir un único usuario ou existir unha única "
"sesión. "
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
msgid ""
"Whether to remember password for mounting encrypted or remote filesystems"
msgstr ""
"Indica se se debe lembrar o contrasinal para montar os sistemas de ficheiros "
"cifrados ou remotos"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
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 "
@ -183,41 +195,33 @@ msgstr ""
"futuro aparecerá a opción «Lembrar contrasinal» Esta chave estabelece o "
"estado por omisión da opción. "
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
msgid "Show the week date in the calendar"
msgstr "Mostrar a data da semana no calendario"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
msgid "If true, display the ISO week date in the calendar."
msgstr "Se é verdadeiro, móstrase a data da semana ISO no calendario."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
msgid "Keybinding to open the application menu"
msgstr "Combinación de teclas para abrir o menú de aplicativo"
#: ../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 application menu."
msgstr "Combinación de teclas para abrir o menú de aplicativo."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
msgid "Keybinding to open the \"Show Applications\" view"
msgstr "Combinación de teclas para abrir a vista «Mostrar aplicativos»"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
msgid ""
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
msgstr ""
"Combinación de teclas para abrir a vista \"Mostrar aplicativos\" da Vista "
"xera de Actividades."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
msgid "Keybinding to open the overview"
msgstr "Combinación de teclas para abrir a Vista xeral"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
msgid "Keybinding to open the Activities Overview."
msgstr "Combinación de teclas para abrir a Vista de actividades."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
msgid "Keybinding to toggle the visibility of the message tray"
msgstr "Combinación de teclas para mostrar/ocultar a área de mensaxes"
@ -369,50 +373,43 @@ msgid "Select an extension to configure using the combobox above."
msgstr ""
"Seleccione unha extensión que configurar usando a caixa combinada de arriba."
#: ../js/gdm/loginDialog.js:371
#: ../js/gdm/loginDialog.js:405
msgid "Session…"
msgstr "Sesión…"
#. translators: this message is shown below the user list on the
#. login screen. It can be activated to reveal an entry for
#. manually entering the username.
#: ../js/gdm/loginDialog.js:601
#: ../js/gdm/loginDialog.js:630
msgid "Not listed?"
msgstr "Non está na lista?"
#: ../js/gdm/loginDialog.js:776 ../js/ui/components/networkAgent.js:137
#: ../js/ui/components/polkitAgent.js:161 ../js/ui/endSessionDialog.js:376
#: ../js/gdm/loginDialog.js:787 ../js/ui/components/networkAgent.js:137
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:376
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/bluetooth.js:415 ../js/ui/unlockDialog.js:96
#: ../js/ui/status/bluetooth.js:415 ../js/ui/unlockDialog.js:100
#: ../js/ui/userMenu.js:938
msgid "Cancel"
msgstr "Cancelar"
#: ../js/gdm/loginDialog.js:791
#: ../js/gdm/loginDialog.js:803
msgctxt "button"
msgid "Sign In"
msgstr "Iniciar sesión"
#: ../js/gdm/loginDialog.js:791
#: ../js/gdm/loginDialog.js:803
msgid "Next"
msgstr "Seguinte"
#. Translators: this message is shown below the username entry field
#. to clue the user in on how to login to the local network realm
#: ../js/gdm/loginDialog.js:888
#, c-format
msgid "(e.g., user or %s)"
msgstr "(p.ex., usuario ou %s)"
#. TTLS and PEAP are actually much more complicated, but this complication
#. is not visible here since we only care about phase2 authentication
#. (and don't even care of which one)
#: ../js/gdm/loginDialog.js:892 ../js/ui/components/networkAgent.js:260
#: ../js/gdm/loginDialog.js:918 ../js/ui/components/networkAgent.js:260
#: ../js/ui/components/networkAgent.js:278
msgid "Username: "
msgstr "Nome de usuario: "
#: ../js/gdm/loginDialog.js:1158
#: ../js/gdm/loginDialog.js:1174
msgid "Login Window"
msgstr "Xanela de inicio de sesión"
@ -435,16 +432,21 @@ msgstr "Reiniciar"
msgid "Power Off"
msgstr "Apagar"
#: ../js/gdm/util.js:247
#: ../js/gdm/util.js:249
msgid "Authentication error"
msgstr "Erro de autenticación"
#. Translators: this message is shown below the password entry field
#. to indicate the user can swipe their finger instead
#: ../js/gdm/util.js:364
#: ../js/gdm/util.js:366
msgid "(or swipe finger)"
msgstr "(ou pase o dedo)"
#: ../js/gdm/util.js:391
#, c-format
msgid "(e.g., user or %s)"
msgstr "(p.ex., usuario ou %s)"
#: ../js/misc/util.js:97
msgid "Command not found"
msgstr "Orde non atopada"
@ -460,23 +462,23 @@ 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:361
#: ../js/ui/appDisplay.js:349
msgid "Frequent"
msgstr "Frecuentes"
#: ../js/ui/appDisplay.js:368
#: ../js/ui/appDisplay.js:356
msgid "All"
msgstr "Todos"
#: ../js/ui/appDisplay.js:960
#: ../js/ui/appDisplay.js:914
msgid "New Window"
msgstr "Xanela nova"
#: ../js/ui/appDisplay.js:963 ../js/ui/dash.js:284
#: ../js/ui/appDisplay.js:917 ../js/ui/dash.js:284
msgid "Remove from Favorites"
msgstr "Retirar dos marcadores"
#: ../js/ui/appDisplay.js:964
#: ../js/ui/appDisplay.js:918
msgid "Add to Favorites"
msgstr "Engadir aos favoritos"
@ -615,35 +617,35 @@ msgid "S"
msgstr "S"
#. Translators: Text to show if there are no events
#: ../js/ui/calendar.js:735
#: ../js/ui/calendar.js:720
msgid "Nothing Scheduled"
msgstr "Nada programado"
#. Translators: Shown on calendar heading when selected day occurs on current year
#: ../js/ui/calendar.js:751
#: ../js/ui/calendar.js:736
msgctxt "calendar heading"
msgid "%A, %B %d"
msgstr "%A, %d de %B"
#. Translators: Shown on calendar heading when selected day occurs on different year
#: ../js/ui/calendar.js:754
#: ../js/ui/calendar.js:739
msgctxt "calendar heading"
msgid "%A, %B %d, %Y"
msgstr "%A, %d de %B de %Y"
#: ../js/ui/calendar.js:764
#: ../js/ui/calendar.js:749
msgid "Today"
msgstr "Hoxe"
#: ../js/ui/calendar.js:768
#: ../js/ui/calendar.js:753
msgid "Tomorrow"
msgstr "Mañá"
#: ../js/ui/calendar.js:779
#: ../js/ui/calendar.js:764
msgid "This week"
msgstr "Esta semana"
#: ../js/ui/calendar.js:787
#: ../js/ui/calendar.js:772
msgid "Next week"
msgstr "A vindeira semana"
@ -668,11 +670,11 @@ msgstr "Abrir con %s"
msgid "Eject"
msgstr "Expulsar"
#: ../js/ui/components/keyring.js:88 ../js/ui/components/polkitAgent.js:280
#: ../js/ui/components/keyring.js:82 ../js/ui/components/polkitAgent.js:268
msgid "Password:"
msgstr "Contrasinal:"
#: ../js/ui/components/keyring.js:107
#: ../js/ui/components/keyring.js:101
msgid "Type again:"
msgstr "Escriba de novo:"
@ -752,15 +754,15 @@ msgstr "Contrasinal da rede de banda larga móbil"
msgid "A password is required to connect to '%s'."
msgstr "Requírese un contrasinal para conectarse a «%s»."
#: ../js/ui/components/polkitAgent.js:54
#: ../js/ui/components/polkitAgent.js:55
msgid "Authentication Required"
msgstr "Requírese autenticación"
#: ../js/ui/components/polkitAgent.js:92
#: ../js/ui/components/polkitAgent.js:93
msgid "Administrator"
msgstr "Administrador"
#: ../js/ui/components/polkitAgent.js:170
#: ../js/ui/components/polkitAgent.js:165
msgid "Authenticate"
msgstr "Autenticar"
@ -768,7 +770,7 @@ msgstr "Autenticar"
#. * requested authentication was not gained; this can happen
#. * because of an authentication error (like invalid password),
#. * for instance.
#: ../js/ui/components/polkitAgent.js:266 ../js/ui/shellMountOperation.js:383
#: ../js/ui/components/polkitAgent.js:256 ../js/ui/shellMountOperation.js:383
msgid "Sorry, that didn't work. Please try again."
msgstr "Desculpe, iso non funcionou. Ténteo de novo."
@ -1034,22 +1036,22 @@ msgstr "Mostrar aplicativos"
msgid "Dash"
msgstr "Taboleiro"
#: ../js/ui/dateMenu.js:86
#: ../js/ui/dateMenu.js:91
msgid "Open Calendar"
msgstr "Abrir Calendario"
#: ../js/ui/dateMenu.js:90
#: ../js/ui/dateMenu.js:96
msgid "Open Clocks"
msgstr "Abrir Reloxos"
#: ../js/ui/dateMenu.js:97
#: ../js/ui/dateMenu.js:105
msgid "Date & Time Settings"
msgstr "Preferencias de data e hora"
#. Translators: This is the date format to use when the calendar popup is
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
#.
#: ../js/ui/dateMenu.js:208
#: ../js/ui/dateMenu.js:215
msgid "%A %B %e, %Y"
msgstr "%a, %e de %B, %Y"
@ -1152,56 +1154,56 @@ msgstr "Instalar"
msgid "Download and install '%s' from extensions.gnome.org?"
msgstr "Desexa descargar e instalar «%s» desde extensions.gnome.org?"
#: ../js/ui/keyboard.js:619 ../js/ui/status/keyboard.js:333
#: ../js/ui/keyboard.js:619 ../js/ui/status/keyboard.js:314
#: ../js/ui/status/power.js:211
msgid "Keyboard"
msgstr "Teclado"
#: ../js/ui/lookingGlass.js:689
#: ../js/ui/lookingGlass.js:693
msgid "No extensions installed"
msgstr "Non hai ningunha extensión instalada"
#. Translators: argument is an extension UUID.
#: ../js/ui/lookingGlass.js:743
#: ../js/ui/lookingGlass.js:747
#, c-format
msgid "%s has not emitted any errors."
msgstr "%s non emitiu ningún erro."
#: ../js/ui/lookingGlass.js:749
#: ../js/ui/lookingGlass.js:753
msgid "Hide Errors"
msgstr "Ocultar erros"
#: ../js/ui/lookingGlass.js:753 ../js/ui/lookingGlass.js:813
#: ../js/ui/lookingGlass.js:757 ../js/ui/lookingGlass.js:817
msgid "Show Errors"
msgstr "Mostrar erros"
#: ../js/ui/lookingGlass.js:762
#: ../js/ui/lookingGlass.js:766
msgid "Enabled"
msgstr "Activado"
#. translators:
#. * The device has been disabled
#: ../js/ui/lookingGlass.js:765 ../src/gvc/gvc-mixer-control.c:1830
#: ../js/ui/lookingGlass.js:769 ../src/gvc/gvc-mixer-control.c:1830
msgid "Disabled"
msgstr "Desactivado"
#: ../js/ui/lookingGlass.js:767
#: ../js/ui/lookingGlass.js:771
msgid "Error"
msgstr "Erro"
#: ../js/ui/lookingGlass.js:769
#: ../js/ui/lookingGlass.js:773
msgid "Out of date"
msgstr "Obsoleto"
#: ../js/ui/lookingGlass.js:771
#: ../js/ui/lookingGlass.js:775
msgid "Downloading"
msgstr "Descargando"
#: ../js/ui/lookingGlass.js:795
#: ../js/ui/lookingGlass.js:799
msgid "View Source"
msgstr "Ver fonte"
#: ../js/ui/lookingGlass.js:804
#: ../js/ui/lookingGlass.js:808
msgid "Web Page"
msgstr "Páxina web"
@ -1221,35 +1223,35 @@ msgstr "Limpar mensaxes"
msgid "Notification Settings"
msgstr "Preferencias das notificacións"
#: ../js/ui/messageTray.js:1711
#: ../js/ui/messageTray.js:1709
msgid "No Messages"
msgstr "Non hai mensaxes"
#: ../js/ui/messageTray.js:1784
#: ../js/ui/messageTray.js:1785
msgid "Message Tray"
msgstr "Bandexa de mensaxes"
#: ../js/ui/messageTray.js:2811
#: ../js/ui/messageTray.js:2813
msgid "System Information"
msgstr "Información do sistema"
#: ../js/ui/notificationDaemon.js:629 ../src/shell-app.c:378
#: ../js/ui/notificationDaemon.js:629 ../src/shell-app.c:374
msgctxt "program"
msgid "Unknown"
msgstr "Descoñecido"
#: ../js/ui/overviewControls.js:474 ../js/ui/screenShield.js:150
#: ../js/ui/overviewControls.js:463 ../js/ui/screenShield.js:149
#, c-format
msgid "%d new message"
msgid_plural "%d new messages"
msgstr[0] "%d mensaxe nova"
msgstr[1] "%d mensaxes novas"
#: ../js/ui/overview.js:82
#: ../js/ui/overview.js:84
msgid "Undo"
msgstr "Desfacer"
#: ../js/ui/overview.js:127
#: ../js/ui/overview.js:129
msgid "Overview"
msgstr "Vista xeral"
@ -1257,21 +1259,21 @@ msgstr "Vista xeral"
#. in the search entry when no search is
#. active; it should not exceed ~30
#. characters.
#: ../js/ui/overview.js:258
#: ../js/ui/overview.js:271
msgid "Type to search…"
msgstr "Escriba para buscar…"
#: ../js/ui/panel.js:642
#: ../js/ui/panel.js:633
msgid "Quit"
msgstr "Saír"
#. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:693
#: ../js/ui/panel.js:657
msgid "Activities"
msgstr "Actividades"
#: ../js/ui/panel.js:989
#: ../js/ui/panel.js:954
msgid "Top Bar"
msgstr "Barra superior"
@ -1280,7 +1282,7 @@ msgstr "Barra superior"
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
#. switches containing "◯" and "|"). Other values will
#. simply result in invisible toggle switches.
#: ../js/ui/popupMenu.js:738
#: ../js/ui/popupMenu.js:727
msgid "toggle-switch-us"
msgstr "toggle-switch-intl"
@ -1294,22 +1296,22 @@ msgstr "Pechar"
#. Translators: This is a time format for a date in
#. long format
#: ../js/ui/screenShield.js:87
#: ../js/ui/screenShield.js:86
msgid "%A, %B %d"
msgstr "%A, %d de %B"
#: ../js/ui/screenShield.js:152
#: ../js/ui/screenShield.js:151
#, c-format
msgid "%d new notification"
msgid_plural "%d new notifications"
msgstr[0] "%d notificación nova"
msgstr[1] "%d notificacións novas"
#: ../js/ui/screenShield.js:449 ../js/ui/userMenu.js:807
#: ../js/ui/screenShield.js:438 ../js/ui/userMenu.js:807
msgid "Lock"
msgstr "Bloquear"
#: ../js/ui/screenShield.js:652
#: ../js/ui/screenShield.js:641
msgid "GNOME needs to lock the screen"
msgstr "GNOME precisa bloquear a pantalla"
@ -1320,35 +1322,35 @@ 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:773 ../js/ui/screenShield.js:1213
#: ../js/ui/screenShield.js:762 ../js/ui/screenShield.js:1198
msgid "Unable to lock"
msgstr "Non foi posíbel bloquear"
#: ../js/ui/screenShield.js:774 ../js/ui/screenShield.js:1214
#: ../js/ui/screenShield.js:763 ../js/ui/screenShield.js:1199
msgid "Lock was blocked by an application"
msgstr "Un aplicativo impediu o bloqueo"
#: ../js/ui/searchDisplay.js:445
#: ../js/ui/searchDisplay.js:453
msgid "Searching…"
msgstr "Buscando…"
#: ../js/ui/searchDisplay.js:489
#: ../js/ui/searchDisplay.js:497
msgid "No results."
msgstr "Sen resultados."
#: ../js/ui/shellEntry.js:27
#: ../js/ui/shellEntry.js:29
msgid "Copy"
msgstr "Copiar"
#: ../js/ui/shellEntry.js:32
#: ../js/ui/shellEntry.js:34
msgid "Paste"
msgstr "Pegar"
#: ../js/ui/shellEntry.js:99
#: ../js/ui/shellEntry.js:101
msgid "Show Text"
msgstr "Mostrar texto"
#: ../js/ui/shellEntry.js:101
#: ../js/ui/shellEntry.js:103
msgid "Hide Text"
msgstr "Ocultar texto"
@ -1360,7 +1362,7 @@ msgstr "Contrasinal"
msgid "Remember Password"
msgstr "Lembrar contrasinal"
#: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:109
#: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:114
msgid "Unlock"
msgstr "Desbloquear"
@ -1415,7 +1417,7 @@ msgstr "Texto grande"
#: ../js/ui/status/bluetooth.js:28 ../js/ui/status/bluetooth.js:32
#: ../js/ui/status/bluetooth.js:289 ../js/ui/status/bluetooth.js:321
#: ../js/ui/status/bluetooth.js:357 ../js/ui/status/bluetooth.js:388
#: ../js/ui/status/network.js:739
#: ../js/ui/status/network.js:826
msgid "Bluetooth"
msgstr "Bluetooth"
@ -1436,7 +1438,7 @@ msgid "Bluetooth Settings"
msgstr "Preferencias do Bluetooth"
#. TRANSLATORS: this means that bluetooth was disabled by hardware rfkill
#: ../js/ui/status/bluetooth.js:104 ../js/ui/status/network.js:142
#: ../js/ui/status/bluetooth.js:104 ../js/ui/status/network.js:178
msgid "hardware disabled"
msgstr "hardware desactivado"
@ -1444,12 +1446,12 @@ msgstr "hardware desactivado"
msgid "Connection"
msgstr "Conexión"
#: ../js/ui/status/bluetooth.js:208 ../js/ui/status/network.js:404
#: ../js/ui/status/bluetooth.js:208 ../js/ui/status/network.js:460
msgid "disconnecting..."
msgstr "desconectando…"
#: ../js/ui/status/bluetooth.js:221 ../js/ui/status/network.js:410
#: ../js/ui/status/network.js:1343
#: ../js/ui/status/bluetooth.js:221 ../js/ui/status/network.js:466
#: ../js/ui/status/network.js:1546
msgid "connecting..."
msgstr "conectando…"
@ -1504,10 +1506,8 @@ msgstr "O dispositivo «%s» quere emparellarse con este equipo"
#: ../js/ui/status/bluetooth.js:366
#, c-format
msgid ""
"Please confirm whether the Passkey '%06d' matches the one on the device."
msgstr ""
"Confirme que a frase de paso «%06d» coincide coa mostrada no dispositivo."
msgid "Please confirm whether the PIN '%06d' matches the one on the device."
msgstr "Confirme que o PIN «%06d» coincide co mostrado no dispositivo."
#. Translators: this is the verb, not the noun
#: ../js/ui/status/bluetooth.js:369
@ -1531,11 +1531,11 @@ msgstr "Escriba o PIN mencionado no dispositivo."
msgid "OK"
msgstr "Aceptar"
#: ../js/ui/status/keyboard.js:396
#: ../js/ui/status/keyboard.js:368
msgid "Show Keyboard Layout"
msgstr "Mostrar a distribución do teclado"
#: ../js/ui/status/keyboard.js:401
#: ../js/ui/status/keyboard.js:373
msgid "Region & Language Settings"
msgstr "Preferencias de rexión e idioma"
@ -1543,91 +1543,117 @@ msgstr "Preferencias de rexión e idioma"
msgid "Volume, network, battery"
msgstr "Volume, rede, batería"
#: ../js/ui/status/network.js:75
#: ../js/ui/status/network.js:104
msgid "<unknown>"
msgstr "<descoñecido>"
#: ../js/ui/status/network.js:127
msgid "Wi-Fi"
msgstr "Wifi"
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
#: ../js/ui/status/network.js:164
#: ../js/ui/status/network.js:200
msgid "disabled"
msgstr "desactivada"
#. 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:402
#: ../js/ui/status/network.js:458
msgid "unmanaged"
msgstr "non xestionada"
#. Translators: this is for network connections that require some kind of key or password
#: ../js/ui/status/network.js:413 ../js/ui/status/network.js:1346
#: ../js/ui/status/network.js:469 ../js/ui/status/network.js:1549
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:423
#: ../js/ui/status/network.js:479
msgid "firmware missing"
msgstr "falta o «firmware»"
#. Translators: this is for wired network devices that are physically disconnected
#: ../js/ui/status/network.js:430
#: ../js/ui/status/network.js:486
msgid "cable unplugged"
msgstr "cable desconectado"
#. 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:435
#: ../js/ui/status/network.js:491
msgid "unavailable"
msgstr "non dispoñíbel"
#: ../js/ui/status/network.js:437 ../js/ui/status/network.js:1348
#: ../js/ui/status/network.js:493 ../js/ui/status/network.js:1551
msgid "connection failed"
msgstr "conexión fallada"
#: ../js/ui/status/network.js:490 ../js/ui/status/network.js:1236
#: ../js/ui/status/network.js:1424
#: ../js/ui/status/network.js:552 ../js/ui/status/network.js:1435
#: ../js/ui/status/network.js:1627
msgid "More…"
msgstr "Máis…"
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
#. and we cannot access its settings (including the name)
#: ../js/ui/status/network.js:518 ../js/ui/status/network.js:1191
#: ../js/ui/status/network.js:588 ../js/ui/status/network.js:1365
msgid "Connected (private)"
msgstr "Conectada (privada)"
#: ../js/ui/status/network.js:597
#: ../js/ui/status/network.js:667
msgid "Wired"
msgstr "Con fíos"
#: ../js/ui/status/network.js:611
#: ../js/ui/status/network.js:668
msgid "Auto Ethernet"
msgstr "Ethernet automática"
#: ../js/ui/status/network.js:695
msgid "Mobile broadband"
msgstr "Banda larga móbil"
#: ../js/ui/status/network.js:1522
#: ../js/ui/status/network.js:728
msgid "Auto broadband"
msgstr "Banda larga automática"
#: ../js/ui/status/network.js:731
msgid "Auto dial-up"
msgstr "Marcado automático"
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
#: ../js/ui/status/network.js:861 ../js/ui/status/network.js:1382
#, c-format
msgid "Auto %s"
msgstr "%s automática"
#: ../js/ui/status/network.js:863
msgid "Auto bluetooth"
msgstr "Bluetooth automática"
#: ../js/ui/status/network.js:1384
msgid "Auto wireless"
msgstr "Sen fíos automática"
#: ../js/ui/status/network.js:1729
msgid "Enable networking"
msgstr "Activar rede"
#: ../js/ui/status/network.js:1583
#: ../js/ui/status/network.js:1771
msgid "Wi-Fi"
msgstr "Wifi"
#: ../js/ui/status/network.js:1790
msgid "Network Settings"
msgstr "Preferencias da rede"
#: ../js/ui/status/network.js:1600
#: ../js/ui/status/network.js:1807
msgid "Network Manager"
msgstr "Xestor da rede"
#: ../js/ui/status/network.js:1690
#: ../js/ui/status/network.js:1897
msgid "Connection failed"
msgstr "Produciuse un fallo na conexión"
#: ../js/ui/status/network.js:1691
#: ../js/ui/status/network.js:1898
msgid "Activation of network connection failed"
msgstr "Produciuse un fallo na activación da conexión de rede"
#: ../js/ui/status/network.js:2047
#: ../js/ui/status/network.js:2276
msgid "Networking is disabled"
msgstr "A rede está desactivada"
@ -1741,11 +1767,11 @@ msgstr "Volume"
msgid "Microphone"
msgstr "Micrófono"
#: ../js/ui/unlockDialog.js:120
#: ../js/ui/unlockDialog.js:125
msgid "Log in as another user"
msgstr "Iniciar sesión como outro usuario"
#: ../js/ui/unlockDialog.js:141
#: ../js/ui/unlockDialog.js:146
msgid "Unlock Window"
msgstr "Desbloquear xanela"
@ -1875,34 +1901,34 @@ msgstr[1] "%u entradas"
msgid "System Sounds"
msgstr "Sons do sistema"
#: ../src/main.c:372
#: ../src/main.c:347
msgid "Print version"
msgstr "Imprimir versión"
#: ../src/main.c:378
#: ../src/main.c:353
msgid "Mode used by GDM for login screen"
msgstr "Modo usado por GDM para a pantalla de inicio"
#: ../src/main.c:384
#: ../src/main.c:359
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
msgstr ""
"Usar un modo específico, por exemplo, «gdm» para a pantalla de inicio de "
"sesión"
#: ../src/main.c:390
#: ../src/main.c:365
msgid "List possible modes"
msgstr "Listar os modos posíbeis"
#: ../src/shell-app.c:626
#: ../src/shell-app.c:622
#, c-format
msgid "Failed to launch '%s'"
msgstr "Produciuse un erro ao iniciar «%s»"
#: ../src/shell-keyring-prompt.c:714
#: ../src/shell-keyring-prompt.c:708
msgid "Passwords do not match."
msgstr "Os contrasinais non coinciden."
#: ../src/shell-keyring-prompt.c:722
#: ../src/shell-keyring-prompt.c:716
msgid "Password cannot be blank"
msgstr "O contrasinal non pode estar baleiro"
@ -1910,39 +1936,6 @@ msgstr "O contrasinal non pode estar baleiro"
msgid "Authentication dialog was dismissed by the user"
msgstr "O usuario rexeitou o diálogo de autenticación"
#~ msgid "Whether to collect stats about applications usage"
#~ msgstr ""
#~ "Indica se se deben recolectar estatísticas sobre o uso dos aplicativos"
#~ msgid ""
#~ "The shell normally monitors active applications in order to present the "
#~ "most used ones (e.g. in launchers). While this data will be kept private, "
#~ "you may want to disable this for privacy reasons. Please note that doing "
#~ "so won't remove already saved data."
#~ msgstr ""
#~ "O shell normalmente monitoriza os aplicativos activos para mostrarlle os "
#~ "máis usados (p.ex. nos iniciadores). Aínda que estes datos se manteñen de "
#~ "forma privada, vostede pode desactivar isto por razóns de privacidade. "
#~ "Teña en conta que facendo isto non retirará os datos gardados."
#~ msgid "Auto Ethernet"
#~ msgstr "Ethernet automática"
#~ msgid "Auto broadband"
#~ msgstr "Banda larga automática"
#~ msgid "Auto dial-up"
#~ msgstr "Marcado automático"
#~ msgid "Auto %s"
#~ msgstr "%s automática"
#~ msgid "Auto bluetooth"
#~ msgstr "Bluetooth automática"
#~ msgid "Auto wireless"
#~ msgstr "Sen fíos automática"
#~ msgctxt "title"
#~ msgid "Sign In"
#~ msgstr "Iniciar sesión"

554
po/kk.po

File diff suppressed because it is too large Load Diff

243
po/nb.po
View File

@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell 3.9.x\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-06-17 12:28+0200\n"
"PO-Revision-Date: 2013-06-17 12:29+0200\n"
"POT-Creation-Date: 2013-05-28 09:43+0200\n"
"PO-Revision-Date: 2013-05-28 09:44+0200\n"
"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
"Language-Team: Norwegian bokmål <i18n-nb@lister.ping.uio.no>\n"
"Language: \n"
@ -331,37 +331,37 @@ msgstr "Utvidelse"
msgid "Select an extension to configure using the combobox above."
msgstr "Velg en utvidelse som skal konfigureres med komboboksen over."
#: ../js/gdm/loginDialog.js:370
#: ../js/gdm/loginDialog.js:371
msgid "Session…"
msgstr "Økt …"
#. translators: this message is shown below the user list on the
#. login screen. It can be activated to reveal an entry for
#. manually entering the username.
#: ../js/gdm/loginDialog.js:600
#: ../js/gdm/loginDialog.js:601
msgid "Not listed?"
msgstr "Ikke listet?"
#: ../js/gdm/loginDialog.js:775 ../js/ui/components/networkAgent.js:137
#: ../js/gdm/loginDialog.js:776 ../js/ui/components/networkAgent.js:137
#: ../js/ui/components/polkitAgent.js:161 ../js/ui/endSessionDialog.js:376
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/bluetooth.js:449 ../js/ui/unlockDialog.js:95
#: ../js/ui/userMenu.js:884
#: ../js/ui/status/bluetooth.js:415 ../js/ui/unlockDialog.js:96
#: ../js/ui/userMenu.js:938
msgid "Cancel"
msgstr "Avbryt"
#: ../js/gdm/loginDialog.js:790
#: ../js/gdm/loginDialog.js:791
msgctxt "button"
msgid "Sign In"
msgstr "Logg inn"
#: ../js/gdm/loginDialog.js:790
#: ../js/gdm/loginDialog.js:791
msgid "Next"
msgstr "Neste"
#. Translators: this message is shown below the username entry field
#. to clue the user in on how to login to the local network realm
#: ../js/gdm/loginDialog.js:887
#: ../js/gdm/loginDialog.js:888
#, c-format
msgid "(e.g., user or %s)"
msgstr "(f.eks. bruker eller %s)"
@ -369,12 +369,12 @@ msgstr "(f.eks. bruker eller %s)"
#. TTLS and PEAP are actually much more complicated, but this complication
#. is not visible here since we only care about phase2 authentication
#. (and don't even care of which one)
#: ../js/gdm/loginDialog.js:891 ../js/ui/components/networkAgent.js:260
#: ../js/gdm/loginDialog.js:892 ../js/ui/components/networkAgent.js:260
#: ../js/ui/components/networkAgent.js:278
msgid "Username: "
msgstr "Brukernavn: "
#: ../js/gdm/loginDialog.js:1157
#: ../js/gdm/loginDialog.js:1158
msgid "Login Window"
msgstr "Innloggingsvindu"
@ -383,8 +383,8 @@ msgstr "Innloggingsvindu"
msgid "Power"
msgstr "Strøm"
#: ../js/gdm/powerMenu.js:93 ../js/ui/userMenu.js:651 ../js/ui/userMenu.js:655
#: ../js/ui/userMenu.js:768
#: ../js/gdm/powerMenu.js:93 ../js/ui/userMenu.js:696 ../js/ui/userMenu.js:700
#: ../js/ui/userMenu.js:816
msgid "Suspend"
msgstr "Hvilemodus"
@ -392,8 +392,8 @@ msgstr "Hvilemodus"
msgid "Restart"
msgstr "Start på nytt"
#: ../js/gdm/powerMenu.js:103 ../js/ui/userMenu.js:653
#: ../js/ui/userMenu.js:655 ../js/ui/userMenu.js:767 ../js/ui/userMenu.js:888
#: ../js/gdm/powerMenu.js:103 ../js/ui/userMenu.js:698
#: ../js/ui/userMenu.js:700 ../js/ui/userMenu.js:815 ../js/ui/userMenu.js:942
msgid "Power Off"
msgstr "Slå av"
@ -422,23 +422,23 @@ msgstr "Klarte ikke å lese kommando:"
msgid "Execution of '%s' failed:"
msgstr "Kjøring av «%s» feilet:"
#: ../js/ui/appDisplay.js:397
#: ../js/ui/appDisplay.js:361
msgid "Frequent"
msgstr "Ofte"
#: ../js/ui/appDisplay.js:404
#: ../js/ui/appDisplay.js:368
msgid "All"
msgstr "Alle"
#: ../js/ui/appDisplay.js:996
#: ../js/ui/appDisplay.js:960
msgid "New Window"
msgstr "Nytt vindu"
#: ../js/ui/appDisplay.js:999 ../js/ui/dash.js:284
#: ../js/ui/appDisplay.js:963 ../js/ui/dash.js:284
msgid "Remove from Favorites"
msgstr "Fjern fra favoritter"
#: ../js/ui/appDisplay.js:1000
#: ../js/ui/appDisplay.js:964
msgid "Add to Favorites"
msgstr "Legg til i favoritter"
@ -452,7 +452,7 @@ msgstr "%s ble lagt til i dine favoritter."
msgid "%s has been removed from your favorites."
msgstr "%s ble fjernet fra dine favoritter."
#: ../js/ui/backgroundMenu.js:19 ../js/ui/userMenu.js:744
#: ../js/ui/backgroundMenu.js:19 ../js/ui/userMenu.js:789
msgid "Settings"
msgstr "Innstillinger"
@ -577,35 +577,35 @@ msgid "S"
msgstr "Lø"
#. Translators: Text to show if there are no events
#: ../js/ui/calendar.js:750
#: ../js/ui/calendar.js:735
msgid "Nothing Scheduled"
msgstr "Ingenting planlagt"
#. Translators: Shown on calendar heading when selected day occurs on current year
#: ../js/ui/calendar.js:768
#: ../js/ui/calendar.js:751
msgctxt "calendar heading"
msgid "%A, %B %d"
msgstr "%A %B %d"
#. Translators: Shown on calendar heading when selected day occurs on different year
#: ../js/ui/calendar.js:771
#: ../js/ui/calendar.js:754
msgctxt "calendar heading"
msgid "%A, %B %d, %Y"
msgstr "%A %B %d, %Y"
#: ../js/ui/calendar.js:782
#: ../js/ui/calendar.js:764
msgid "Today"
msgstr "I dag"
#: ../js/ui/calendar.js:786
#: ../js/ui/calendar.js:768
msgid "Tomorrow"
msgstr "I morgen"
#: ../js/ui/calendar.js:797
#: ../js/ui/calendar.js:779
msgid "This week"
msgstr "Denne uken"
#: ../js/ui/calendar.js:805
#: ../js/ui/calendar.js:787
msgid "Next week"
msgstr "Neste uke"
@ -989,26 +989,26 @@ msgstr "Vis programmer"
#. Translators: this is the name of the dock/favorites area on
#. the left of the overview
#: ../js/ui/dash.js:439
#: ../js/ui/dash.js:435
msgid "Dash"
msgstr "Favoritter"
#: ../js/ui/dateMenu.js:85
#: ../js/ui/dateMenu.js:86
msgid "Open Calendar"
msgstr "Åpne kalender"
#: ../js/ui/dateMenu.js:89
#: ../js/ui/dateMenu.js:90
msgid "Open Clocks"
msgstr "Åpne Klokker"
#: ../js/ui/dateMenu.js:96
#: ../js/ui/dateMenu.js:97
msgid "Date & Time Settings"
msgstr "Innstillinger for dato og klokkeslett"
#. Translators: This is the date format to use when the calendar popup is
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
#.
#: ../js/ui/dateMenu.js:202
#: ../js/ui/dateMenu.js:208
msgid "%A %B %e, %Y"
msgstr "%a %e %B, %Y"
@ -1182,15 +1182,15 @@ msgstr "Tøm meldinger"
msgid "Notification Settings"
msgstr "Innstillinger for varsling"
#: ../js/ui/messageTray.js:1711
#: ../js/ui/messageTray.js:1707
msgid "No Messages"
msgstr "Ingen meldinger"
#: ../js/ui/messageTray.js:1784
#: ../js/ui/messageTray.js:1780
msgid "Message Tray"
msgstr "Meldingstrau"
#: ../js/ui/messageTray.js:2811
#: ../js/ui/messageTray.js:2805
msgid "System Information"
msgstr "Systeminformasjon"
@ -1199,7 +1199,7 @@ msgctxt "program"
msgid "Unknown"
msgstr "Ukjent"
#: ../js/ui/overviewControls.js:474 ../js/ui/screenShield.js:150
#: ../js/ui/overviewControls.js:472 ../js/ui/screenShield.js:150
#, c-format
msgid "%d new message"
msgid_plural "%d new messages"
@ -1241,7 +1241,7 @@ msgstr "Topp-panel"
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
#. switches containing "◯" and "|"). Other values will
#. simply result in invisible toggle switches.
#: ../js/ui/popupMenu.js:545
#: ../js/ui/popupMenu.js:738
msgid "toggle-switch-us"
msgstr "toggle-switch-intl"
@ -1266,7 +1266,7 @@ msgid_plural "%d new notifications"
msgstr[0] "%d ny varsling"
msgstr[1] "%d nye varslinger"
#: ../js/ui/screenShield.js:449 ../js/ui/userMenu.js:759
#: ../js/ui/screenShield.js:449 ../js/ui/userMenu.js:807
msgid "Lock"
msgstr "Lås"
@ -1289,11 +1289,11 @@ msgstr "Kan ikke låse"
msgid "Lock was blocked by an application"
msgstr "Låsing ble stoppet av et program"
#: ../js/ui/searchDisplay.js:445
#: ../js/ui/searchDisplay.js:453
msgid "Searching…"
msgstr "Søker …"
#: ../js/ui/searchDisplay.js:489
#: ../js/ui/searchDisplay.js:497
msgid "No results."
msgstr "Ingen resultater."
@ -1321,7 +1321,7 @@ msgstr "Passord"
msgid "Remember Password"
msgstr "Husk passord"
#: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:108
#: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:109
msgid "Unlock"
msgstr "Lås opp"
@ -1374,9 +1374,9 @@ msgid "Large Text"
msgstr "Stor tekst"
#: ../js/ui/status/bluetooth.js:28 ../js/ui/status/bluetooth.js:32
#: ../js/ui/status/bluetooth.js:290 ../js/ui/status/bluetooth.js:327
#: ../js/ui/status/bluetooth.js:355 ../js/ui/status/bluetooth.js:391
#: ../js/ui/status/bluetooth.js:422 ../js/ui/status/network.js:713
#: ../js/ui/status/bluetooth.js:289 ../js/ui/status/bluetooth.js:321
#: ../js/ui/status/bluetooth.js:357 ../js/ui/status/bluetooth.js:388
#: ../js/ui/status/network.js:739
msgid "Bluetooth"
msgstr "Bluetooth"
@ -1397,106 +1397,97 @@ msgid "Bluetooth Settings"
msgstr "Innstillinger for Bluetooth"
#. TRANSLATORS: this means that bluetooth was disabled by hardware rfkill
#: ../js/ui/status/bluetooth.js:105 ../js/ui/status/network.js:140
#: ../js/ui/status/bluetooth.js:104 ../js/ui/status/network.js:142
msgid "hardware disabled"
msgstr "maskinvare slått av"
#: ../js/ui/status/bluetooth.js:198
#: ../js/ui/status/bluetooth.js:197
msgid "Connection"
msgstr "Tilkobling"
#: ../js/ui/status/bluetooth.js:209 ../js/ui/status/network.js:399
#: ../js/ui/status/bluetooth.js:208 ../js/ui/status/network.js:404
msgid "disconnecting..."
msgstr "kobler fra …"
#: ../js/ui/status/bluetooth.js:222 ../js/ui/status/network.js:405
#: ../js/ui/status/network.js:1298
#: ../js/ui/status/bluetooth.js:221 ../js/ui/status/network.js:410
#: ../js/ui/status/network.js:1343
msgid "connecting..."
msgstr "kobler til …"
#: ../js/ui/status/bluetooth.js:240
#: ../js/ui/status/bluetooth.js:239
msgid "Send Files…"
msgstr "Send filer …"
#: ../js/ui/status/bluetooth.js:247
#: ../js/ui/status/bluetooth.js:246
msgid "Keyboard Settings"
msgstr "Innstillinger for tastatur"
#: ../js/ui/status/bluetooth.js:250
#: ../js/ui/status/bluetooth.js:249
msgid "Mouse Settings"
msgstr "Innstillinger for mus"
#: ../js/ui/status/bluetooth.js:255 ../js/ui/status/volume.js:313
#: ../js/ui/status/bluetooth.js:254 ../js/ui/status/volume.js:316
msgid "Sound Settings"
msgstr "Innstillinger for lyd"
#: ../js/ui/status/bluetooth.js:328 ../js/ui/status/bluetooth.js:356
#: ../js/ui/status/bluetooth.js:322
#, c-format
msgid "Authorization request from %s"
msgstr "Forespørsel om autorisering fra %s"
#: ../js/ui/status/bluetooth.js:334 ../js/ui/status/bluetooth.js:399
#: ../js/ui/status/bluetooth.js:430
#, c-format
msgid "Device %s wants to pair with this computer"
msgstr "Enhet %s vil koble seg sammen med denne datamaskinen"
#: ../js/ui/status/bluetooth.js:336
msgid "Allow"
msgstr "Tillat"
#: ../js/ui/status/bluetooth.js:337
msgid "Deny"
msgstr "Nekt"
#: ../js/ui/status/bluetooth.js:362
#: ../js/ui/status/bluetooth.js:328
#, c-format
msgid "Device %s wants access to the service '%s'"
msgstr "Enhet %s vil ha tilgang til tjenesten «%s»"
#: ../js/ui/status/bluetooth.js:364
#: ../js/ui/status/bluetooth.js:330
msgid "Always grant access"
msgstr "Alltid gi tilgang"
#: ../js/ui/status/bluetooth.js:365
#: ../js/ui/status/bluetooth.js:331
msgid "Grant this time only"
msgstr "Gi tilgang kun denne ene gangen"
#: ../js/ui/status/bluetooth.js:366
#: ../js/ui/status/bluetooth.js:332
msgid "Reject"
msgstr "Avvis"
#. Translators: argument is the device short name
#: ../js/ui/status/bluetooth.js:393
#: ../js/ui/status/bluetooth.js:359
#, c-format
msgid "Pairing confirmation for %s"
msgstr "Bekreftelse for tilkobling for %s"
#: ../js/ui/status/bluetooth.js:400
#: ../js/ui/status/bluetooth.js:365 ../js/ui/status/bluetooth.js:396
#, c-format
msgid "Device %s wants to pair with this computer"
msgstr "Enhet %s vil koble seg sammen med denne datamaskinen"
#: ../js/ui/status/bluetooth.js:366
#, c-format
msgid ""
"Please confirm whether the Passkey '%06d' matches the one on the device."
msgstr "Vennligst bekreft om passord «%06d» er lik den som brukes på enheten."
#. Translators: this is the verb, not the noun
#: ../js/ui/status/bluetooth.js:403
#: ../js/ui/status/bluetooth.js:369
msgid "Matches"
msgstr "Stemmer overens"
#: ../js/ui/status/bluetooth.js:404
#: ../js/ui/status/bluetooth.js:370
msgid "Does not match"
msgstr "Stemmer ikke overens"
#: ../js/ui/status/bluetooth.js:423
#: ../js/ui/status/bluetooth.js:389
#, c-format
msgid "Pairing request for %s"
msgstr "Forespørsel om tilkobling for %s"
#: ../js/ui/status/bluetooth.js:431
#: ../js/ui/status/bluetooth.js:397
msgid "Please enter the PIN mentioned on the device."
msgstr "Vennligst oppgi PIN som oppgitt på enheten."
#: ../js/ui/status/bluetooth.js:448
#: ../js/ui/status/bluetooth.js:414
msgid "OK"
msgstr "OK"
@ -1516,81 +1507,87 @@ msgstr "Volum, nettverk, batteri"
msgid "<unknown>"
msgstr "<ukjent>"
#: ../js/ui/status/network.js:125
#: ../js/ui/status/network.js:127
msgid "Wi-Fi"
msgstr "Wi-Fi"
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
#: ../js/ui/status/network.js:162
#: ../js/ui/status/network.js:164
msgid "disabled"
msgstr "slått 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:397
#: ../js/ui/status/network.js:402
msgid "unmanaged"
msgstr "ikke håndtert"
#. Translators: this is for network connections that require some kind of key or password
#: ../js/ui/status/network.js:408 ../js/ui/status/network.js:1301
#: ../js/ui/status/network.js:413 ../js/ui/status/network.js:1346
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:419
#: ../js/ui/status/network.js:423
msgid "firmware missing"
msgstr "fastvare mangler"
#. Translators: this is for wired network devices that are physically disconnected
#: ../js/ui/status/network.js:430
msgid "cable unplugged"
msgstr "kabel koblet fra"
#. 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:423
#: ../js/ui/status/network.js:435
msgid "unavailable"
msgstr "ikke tilgjengelig"
#: ../js/ui/status/network.js:425 ../js/ui/status/network.js:1303
#: ../js/ui/status/network.js:437 ../js/ui/status/network.js:1348
msgid "connection failed"
msgstr "tilkobling feilet"
#: ../js/ui/status/network.js:478 ../js/ui/status/network.js:1190
#: ../js/ui/status/network.js:490 ../js/ui/status/network.js:1236
#: ../js/ui/status/network.js:1424
msgid "More…"
msgstr "Mer …"
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
#. and we cannot access its settings (including the name)
#: ../js/ui/status/network.js:506 ../js/ui/status/network.js:1142
#: ../js/ui/status/network.js:518 ../js/ui/status/network.js:1191
msgid "Connected (private)"
msgstr "Tilkoblet (privat)"
#: ../js/ui/status/network.js:572
#: ../js/ui/status/network.js:597
msgid "Wired"
msgstr "Kablet"
#: ../js/ui/status/network.js:592
#: ../js/ui/status/network.js:611
msgid "Mobile broadband"
msgstr "Mobilt bredbånd"
#: ../js/ui/status/network.js:1474
#: ../js/ui/status/network.js:1522
msgid "Enable networking"
msgstr "Slå på nettverk"
#: ../js/ui/status/network.js:1522
#: ../js/ui/status/network.js:1583
msgid "Network Settings"
msgstr "Innstillinger for nettverk"
#: ../js/ui/status/network.js:1539
#: ../js/ui/status/network.js:1600
msgid "Network Manager"
msgstr "Nettverkshåndtering"
#: ../js/ui/status/network.js:1623
#: ../js/ui/status/network.js:1690
msgid "Connection failed"
msgstr "Tilkobling feilet"
#: ../js/ui/status/network.js:1624
#: ../js/ui/status/network.js:1691
msgid "Activation of network connection failed"
msgstr "Aktivering av nettverkstilkobling feilet"
#: ../js/ui/status/network.js:1937
#: ../js/ui/status/network.js:2047
msgid "Networking is disabled"
msgstr "Nettverk er slått av"
@ -1691,72 +1688,72 @@ msgctxt "device"
msgid "Unknown"
msgstr "Ukjent"
#: ../js/ui/status/volume.js:121
#: ../js/ui/status/volume.js:124
msgid "Volume changed"
msgstr "Volum endret"
#. Translators: This is the label for audio volume
#: ../js/ui/status/volume.js:246 ../js/ui/status/volume.js:294
#: ../js/ui/status/volume.js:249 ../js/ui/status/volume.js:297
msgid "Volume"
msgstr "Volum"
#: ../js/ui/status/volume.js:255
#: ../js/ui/status/volume.js:258
msgid "Microphone"
msgstr "Mikrofon"
#: ../js/ui/unlockDialog.js:119
#: ../js/ui/unlockDialog.js:120
msgid "Log in as another user"
msgstr "Logg inn som en annen bruker"
#: ../js/ui/unlockDialog.js:140
#: ../js/ui/unlockDialog.js:141
msgid "Unlock Window"
msgstr "Lås opp vindu"
#: ../js/ui/userMenu.js:149
#: ../js/ui/userMenu.js:193
msgid "Available"
msgstr "Tilgjengelig"
#: ../js/ui/userMenu.js:152
#: ../js/ui/userMenu.js:196
msgid "Busy"
msgstr "Opptatt"
#: ../js/ui/userMenu.js:155
#: ../js/ui/userMenu.js:199
msgid "Invisible"
msgstr "Usynlig"
#: ../js/ui/userMenu.js:158
#: ../js/ui/userMenu.js:202
msgid "Away"
msgstr "Borte"
#: ../js/ui/userMenu.js:161
#: ../js/ui/userMenu.js:205
msgid "Idle"
msgstr "Ledig"
#: ../js/ui/userMenu.js:164
#: ../js/ui/userMenu.js:208
msgid "Offline"
msgstr "Frakoblet"
#: ../js/ui/userMenu.js:736
#: ../js/ui/userMenu.js:781
msgid "Notifications"
msgstr "Varslinger"
#: ../js/ui/userMenu.js:749
#: ../js/ui/userMenu.js:797
msgid "Switch User"
msgstr "Bytt bruker"
#: ../js/ui/userMenu.js:754
#: ../js/ui/userMenu.js:802
msgid "Log Out"
msgstr "Logg ut"
#: ../js/ui/userMenu.js:774
#: ../js/ui/userMenu.js:822
msgid "Install Updates & Restart"
msgstr "Installer oppdateringer og start på nytt"
#: ../js/ui/userMenu.js:792
#: ../js/ui/userMenu.js:840
msgid "Your chat status will be set to busy"
msgstr "Din pratestatus vil bli satt til opptatt"
#: ../js/ui/userMenu.js:793
#: ../js/ui/userMenu.js:841
msgid ""
"Notifications are now disabled, including chat messages. Your online status "
"has been adjusted to let others know that you might not see their messages."
@ -1765,24 +1762,24 @@ msgstr ""
"tilkoblingsstatus er justert for å la andre vite at du kanskje ikke ser "
"deres meldinger."
#: ../js/ui/userMenu.js:834
#: ../js/ui/userMenu.js:888
msgid "Other users are logged in."
msgstr "Andre brukere er logget inn."
#: ../js/ui/userMenu.js:839
#: ../js/ui/userMenu.js:893
msgid "Shutting down might cause them to lose unsaved work."
msgstr ""
"Hvis du slår av vil dette kunne medføre at de mister arbeid som ikke er "
"lagret."
#. Translators: Remote here refers to a remote session, like a ssh login
#: ../js/ui/userMenu.js:867
#: ../js/ui/userMenu.js:921
#, c-format
msgid "%s (remote)"
msgstr "%s (ekstern)"
#. Translators: Console here refers to a tty like a VT console
#: ../js/ui/userMenu.js:870
#: ../js/ui/userMenu.js:924
#, c-format
msgid "%s (console)"
msgstr "%s (konsoll)"
@ -1840,19 +1837,19 @@ msgstr[1] "%u innganger"
msgid "System Sounds"
msgstr "Systemlyder"
#: ../src/main.c:353
#: ../src/main.c:372
msgid "Print version"
msgstr "Skriv ut versjon"
#: ../src/main.c:359
#: ../src/main.c:378
msgid "Mode used by GDM for login screen"
msgstr "Modus som brukes av GDM for innloggingsskjermen"
#: ../src/main.c:365
#: ../src/main.c:384
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
msgstr "Bruk spesifikt modus, f.eks «gdm» for innloggingsskjerm"
#: ../src/main.c:371
#: ../src/main.c:390
msgid "List possible modes"
msgstr "Vis mulige modi"

237
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: 2013-06-14 18:16+0000\n"
"PO-Revision-Date: 2013-06-16 23:32+0500\n"
"POT-Creation-Date: 2013-05-29 22:58+0000\n"
"PO-Revision-Date: 2013-05-30 17:27+0500\n"
"Last-Translator: Victor Ibragimov <victor.ibragimov@gmail.com>\n"
"Language-Team: \n"
"Language: Tajik\n"
@ -207,10 +207,12 @@ msgstr ""
"Тугма барои кушодани намуди \"Намоиш додани барномаҳо\"-и Хулосаи фаъолият."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
#| msgid "Keybinding to open the \"Show Applications\" view"
msgid "Keybinding to open the overview"
msgstr "Тугмабандӣ барои кушодани хулоса"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
#| msgid "Keybinding to open the \"Show Applications\" view"
msgid "Keybinding to open the Activities Overview."
msgstr "Тугмабандӣ барои кушодани хулосаи фаъолият."
@ -375,37 +377,37 @@ msgstr ""
"Пасвандеро интихоб кунед, то ин ки бо ҷаъбаи мураккаби боло онро "
"конфигуратсия кунед."
#: ../js/gdm/loginDialog.js:370
#: ../js/gdm/loginDialog.js:371
msgid "Session…"
msgstr "Ҷаласа..."
#. translators: this message is shown below the user list on the
#. login screen. It can be activated to reveal an entry for
#. manually entering the username.
#: ../js/gdm/loginDialog.js:600
#: ../js/gdm/loginDialog.js:601
msgid "Not listed?"
msgstr "Вуҷуд надора?"
#: ../js/gdm/loginDialog.js:775 ../js/ui/components/networkAgent.js:137
#: ../js/gdm/loginDialog.js:776 ../js/ui/components/networkAgent.js:137
#: ../js/ui/components/polkitAgent.js:161 ../js/ui/endSessionDialog.js:376
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/bluetooth.js:449 ../js/ui/unlockDialog.js:95
#: ../js/ui/userMenu.js:884
#: ../js/ui/status/bluetooth.js:415 ../js/ui/unlockDialog.js:96
#: ../js/ui/userMenu.js:938
msgid "Cancel"
msgstr "Бекор кардан"
#: ../js/gdm/loginDialog.js:790
#: ../js/gdm/loginDialog.js:791
msgctxt "button"
msgid "Sign In"
msgstr "Ворид шудан"
#: ../js/gdm/loginDialog.js:790
#: ../js/gdm/loginDialog.js:791
msgid "Next"
msgstr "Навбатӣ"
#. Translators: this message is shown below the username entry field
#. to clue the user in on how to login to the local network realm
#: ../js/gdm/loginDialog.js:887
#: ../js/gdm/loginDialog.js:888
#, c-format
msgid "(e.g., user or %s)"
msgstr "(масалан, корбар ё %s)"
@ -413,12 +415,12 @@ msgstr "(масалан, корбар ё %s)"
#. TTLS and PEAP are actually much more complicated, but this complication
#. is not visible here since we only care about phase2 authentication
#. (and don't even care of which one)
#: ../js/gdm/loginDialog.js:891 ../js/ui/components/networkAgent.js:260
#: ../js/gdm/loginDialog.js:892 ../js/ui/components/networkAgent.js:260
#: ../js/ui/components/networkAgent.js:278
msgid "Username: "
msgstr "Номи корбар:"
#: ../js/gdm/loginDialog.js:1157
#: ../js/gdm/loginDialog.js:1158
msgid "Login Window"
msgstr "Равзанаи воридшавӣ"
@ -427,8 +429,8 @@ msgstr "Равзанаи воридшавӣ"
msgid "Power"
msgstr "Барқ"
#: ../js/gdm/powerMenu.js:93 ../js/ui/userMenu.js:651 ../js/ui/userMenu.js:655
#: ../js/ui/userMenu.js:768
#: ../js/gdm/powerMenu.js:93 ../js/ui/userMenu.js:696 ../js/ui/userMenu.js:700
#: ../js/ui/userMenu.js:816
msgid "Suspend"
msgstr "Таваққуф"
@ -436,8 +438,8 @@ msgstr "Таваққуф"
msgid "Restart"
msgstr "Бозоғозидан"
#: ../js/gdm/powerMenu.js:103 ../js/ui/userMenu.js:653
#: ../js/ui/userMenu.js:655 ../js/ui/userMenu.js:767 ../js/ui/userMenu.js:888
#: ../js/gdm/powerMenu.js:103 ../js/ui/userMenu.js:698
#: ../js/ui/userMenu.js:700 ../js/ui/userMenu.js:815 ../js/ui/userMenu.js:942
msgid "Power Off"
msgstr "Хомӯш кардан"
@ -466,23 +468,23 @@ msgstr "Фармон иҷро нашудааст:"
msgid "Execution of '%s' failed:"
msgstr "Иҷрокунии '%s' қатъ шудааст:"
#: ../js/ui/appDisplay.js:397
#: ../js/ui/appDisplay.js:361
msgid "Frequent"
msgstr "Роиҷ"
#: ../js/ui/appDisplay.js:404
#: ../js/ui/appDisplay.js:368
msgid "All"
msgstr "Ҳама"
#: ../js/ui/appDisplay.js:996
#: ../js/ui/appDisplay.js:960
msgid "New Window"
msgstr "Равзанаи нав"
#: ../js/ui/appDisplay.js:999 ../js/ui/dash.js:284
#: ../js/ui/appDisplay.js:963 ../js/ui/dash.js:284
msgid "Remove from Favorites"
msgstr "Тоза кардан аз Баргузидаҳо"
#: ../js/ui/appDisplay.js:1000
#: ../js/ui/appDisplay.js:964
msgid "Add to Favorites"
msgstr "Илова кардан ба Баргузидаҳо"
@ -496,7 +498,7 @@ msgstr "%s ба баргузидаҳои шумо илова шудааст."
msgid "%s has been removed from your favorites."
msgstr "%s аз баргузидаҳои шумо тоза шудааст."
#: ../js/ui/backgroundMenu.js:19 ../js/ui/userMenu.js:744
#: ../js/ui/backgroundMenu.js:19 ../js/ui/userMenu.js:789
msgid "Settings"
msgstr "Танзимот"
@ -621,35 +623,35 @@ msgid "S"
msgstr "Ш"
#. Translators: Text to show if there are no events
#: ../js/ui/calendar.js:750
#: ../js/ui/calendar.js:735
msgid "Nothing Scheduled"
msgstr "Ягон чиз ба нақша нагирифтааст"
#. Translators: Shown on calendar heading when selected day occurs on current year
#: ../js/ui/calendar.js:768
#: ../js/ui/calendar.js:751
msgctxt "calendar heading"
msgid "%A, %B %d"
msgstr "%A, %B %d"
#. Translators: Shown on calendar heading when selected day occurs on different year
#: ../js/ui/calendar.js:771
#: ../js/ui/calendar.js:754
msgctxt "calendar heading"
msgid "%A, %B %d, %Y"
msgstr "%A, %B %d, %Y"
#: ../js/ui/calendar.js:782
#: ../js/ui/calendar.js:764
msgid "Today"
msgstr "Имрӯз"
#: ../js/ui/calendar.js:786
#: ../js/ui/calendar.js:768
msgid "Tomorrow"
msgstr "Фардо"
#: ../js/ui/calendar.js:797
#: ../js/ui/calendar.js:779
msgid "This week"
msgstr "Ҳафтаи ҷорӣ"
#: ../js/ui/calendar.js:805
#: ../js/ui/calendar.js:787
msgid "Next week"
msgstr "Ҳафтаи навбатӣ"
@ -1033,26 +1035,26 @@ msgstr "Намоиш додани барномаҳо"
#. Translators: this is the name of the dock/favorites area on
#. the left of the overview
#: ../js/ui/dash.js:439
#: ../js/ui/dash.js:435
msgid "Dash"
msgstr "Рах"
#: ../js/ui/dateMenu.js:85
#: ../js/ui/dateMenu.js:86
msgid "Open Calendar"
msgstr "Кушодани тақвим"
#: ../js/ui/dateMenu.js:89
#: ../js/ui/dateMenu.js:90
msgid "Open Clocks"
msgstr "Кушодани соат"
#: ../js/ui/dateMenu.js:96
#: ../js/ui/dateMenu.js:97
msgid "Date & Time Settings"
msgstr "Танзимоти сана ва вақт"
#. Translators: This is the date format to use when the calendar popup is
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
#.
#: ../js/ui/dateMenu.js:202
#: ../js/ui/dateMenu.js:208
msgid "%A %B %e, %Y"
msgstr "%A %B %e, %Y"
@ -1282,7 +1284,7 @@ msgstr "Панели боло"
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
#. switches containing "◯" and "|"). Other values will
#. simply result in invisible toggle switches.
#: ../js/ui/popupMenu.js:545
#: ../js/ui/popupMenu.js:738
msgid "toggle-switch-us"
msgstr "toggle-switch-us"
@ -1306,7 +1308,7 @@ msgid "%d new notification"
msgid_plural "%d new notifications"
msgstr[0] "%d огоҳии нав"
#: ../js/ui/screenShield.js:449 ../js/ui/userMenu.js:759
#: ../js/ui/screenShield.js:449 ../js/ui/userMenu.js:807
msgid "Lock"
msgstr "Қулф кардан"
@ -1361,7 +1363,7 @@ msgstr "Парол"
msgid "Remember Password"
msgstr "Ба ёд гирифтани парол"
#: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:108
#: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:109
msgid "Unlock"
msgstr "Кушодан"
@ -1414,9 +1416,9 @@ msgid "Large Text"
msgstr "Матни бузург"
#: ../js/ui/status/bluetooth.js:28 ../js/ui/status/bluetooth.js:32
#: ../js/ui/status/bluetooth.js:290 ../js/ui/status/bluetooth.js:327
#: ../js/ui/status/bluetooth.js:355 ../js/ui/status/bluetooth.js:391
#: ../js/ui/status/bluetooth.js:422 ../js/ui/status/network.js:713
#: ../js/ui/status/bluetooth.js:289 ../js/ui/status/bluetooth.js:321
#: ../js/ui/status/bluetooth.js:357 ../js/ui/status/bluetooth.js:388
#: ../js/ui/status/network.js:739
msgid "Bluetooth"
msgstr "Bluetooth"
@ -1437,83 +1439,75 @@ msgid "Bluetooth Settings"
msgstr "Танзимоти Bluetooth"
#. TRANSLATORS: this means that bluetooth was disabled by hardware rfkill
#: ../js/ui/status/bluetooth.js:105 ../js/ui/status/network.js:140
#: ../js/ui/status/bluetooth.js:104 ../js/ui/status/network.js:142
msgid "hardware disabled"
msgstr "сахтафзор ғайрифаъол шудааст"
#: ../js/ui/status/bluetooth.js:198
#: ../js/ui/status/bluetooth.js:197
msgid "Connection"
msgstr "Пайвастшавӣ"
#: ../js/ui/status/bluetooth.js:209 ../js/ui/status/network.js:399
#: ../js/ui/status/bluetooth.js:208 ../js/ui/status/network.js:404
msgid "disconnecting..."
msgstr "қатъ кардани пайваст..."
#: ../js/ui/status/bluetooth.js:222 ../js/ui/status/network.js:405
#: ../js/ui/status/network.js:1298
#: ../js/ui/status/bluetooth.js:221 ../js/ui/status/network.js:410
#: ../js/ui/status/network.js:1343
msgid "connecting..."
msgstr "пайвастшавӣ..."
#: ../js/ui/status/bluetooth.js:240
#: ../js/ui/status/bluetooth.js:239
msgid "Send Files…"
msgstr "Фиристодани файлҳо…"
#: ../js/ui/status/bluetooth.js:247
#: ../js/ui/status/bluetooth.js:246
msgid "Keyboard Settings"
msgstr "Танзимоти клавиатура"
#: ../js/ui/status/bluetooth.js:250
#: ../js/ui/status/bluetooth.js:249
msgid "Mouse Settings"
msgstr "Танзимоти муш"
#: ../js/ui/status/bluetooth.js:255 ../js/ui/status/volume.js:313
#: ../js/ui/status/bluetooth.js:254 ../js/ui/status/volume.js:316
msgid "Sound Settings"
msgstr "Танзимоти садо"
#: ../js/ui/status/bluetooth.js:328 ../js/ui/status/bluetooth.js:356
#: ../js/ui/status/bluetooth.js:322
#, c-format
msgid "Authorization request from %s"
msgstr "Дархости санҷиши ҳаққоният аз %s"
#: ../js/ui/status/bluetooth.js:334 ../js/ui/status/bluetooth.js:399
#: ../js/ui/status/bluetooth.js:430
#, c-format
msgid "Device %s wants to pair with this computer"
msgstr "Дастгоҳи %s мехоҳад, ки бо ин компютер ҷуфт кунад"
#: ../js/ui/status/bluetooth.js:336
msgid "Allow"
msgstr "Иҷозат додан"
#: ../js/ui/status/bluetooth.js:337
msgid "Deny"
msgstr "Манъ кардан"
#: ../js/ui/status/bluetooth.js:362
#: ../js/ui/status/bluetooth.js:328
#, c-format
msgid "Device %s wants access to the service '%s'"
msgstr "Дастгоҳи %s дастрасиро ба хидмати \"%s\" дархост мекунад"
#: ../js/ui/status/bluetooth.js:364
#: ../js/ui/status/bluetooth.js:330
msgid "Always grant access"
msgstr "Ҳамеша иҷозат додан"
#: ../js/ui/status/bluetooth.js:365
#: ../js/ui/status/bluetooth.js:331
msgid "Grant this time only"
msgstr "Танҳо дар ин маротиба иҷозат додан"
#: ../js/ui/status/bluetooth.js:366
#: ../js/ui/status/bluetooth.js:332
msgid "Reject"
msgstr "Рад кардан"
#. Translators: argument is the device short name
#: ../js/ui/status/bluetooth.js:393
#: ../js/ui/status/bluetooth.js:359
#, c-format
msgid "Pairing confirmation for %s"
msgstr "Тасдиқи ҷуфтсозӣ барои %s"
#: ../js/ui/status/bluetooth.js:400
#: ../js/ui/status/bluetooth.js:365 ../js/ui/status/bluetooth.js:396
#, c-format
msgid "Device %s wants to pair with this computer"
msgstr "Дастгоҳи %s мехоҳад, ки бо ин компютер ҷуфт кунад"
#: ../js/ui/status/bluetooth.js:366
#, c-format
#| msgid "Please confirm whether the PIN '%06d' matches the one on the device."
msgid ""
"Please confirm whether the Passkey '%06d' matches the one on the device."
msgstr ""
@ -1521,24 +1515,24 @@ msgstr ""
"мавҷудбуда мувофиқат мекунад."
#. Translators: this is the verb, not the noun
#: ../js/ui/status/bluetooth.js:403
#: ../js/ui/status/bluetooth.js:369
msgid "Matches"
msgstr "Мутобиқаткунанда"
#: ../js/ui/status/bluetooth.js:404
#: ../js/ui/status/bluetooth.js:370
msgid "Does not match"
msgstr "Мувофиқат намекунад"
#: ../js/ui/status/bluetooth.js:423
#: ../js/ui/status/bluetooth.js:389
#, c-format
msgid "Pairing request for %s"
msgstr "Дархости ҷуфтсозӣ барои %s"
#: ../js/ui/status/bluetooth.js:431
#: ../js/ui/status/bluetooth.js:397
msgid "Please enter the PIN mentioned on the device."
msgstr "Лутфан, рамзи PIN-ро, ки дар дастгоҳ гуфта шудааст, ворид кунед."
#: ../js/ui/status/bluetooth.js:448
#: ../js/ui/status/bluetooth.js:414
msgid "OK"
msgstr "OK"
@ -1558,81 +1552,87 @@ msgstr "Ҳаҷм, шабака, батарея"
msgid "<unknown>"
msgstr "<номаълум>"
#: ../js/ui/status/network.js:125
#: ../js/ui/status/network.js:127
msgid "Wi-Fi"
msgstr "Wi-Fi"
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
#: ../js/ui/status/network.js:162
#: ../js/ui/status/network.js:164
msgid "disabled"
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:397
#: ../js/ui/status/network.js:402
msgid "unmanaged"
msgstr "идоранашуда"
#. Translators: this is for network connections that require some kind of key or password
#: ../js/ui/status/network.js:408 ../js/ui/status/network.js:1301
#: ../js/ui/status/network.js:413 ../js/ui/status/network.js:1346
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:419
#: ../js/ui/status/network.js:423
msgid "firmware missing"
msgstr "нармафзори дарунсохт вуҷуд надорад"
#. Translators: this is for wired network devices that are physically disconnected
#: ../js/ui/status/network.js:430
msgid "cable unplugged"
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:423
#: ../js/ui/status/network.js:435
msgid "unavailable"
msgstr "дастнорас"
#: ../js/ui/status/network.js:425 ../js/ui/status/network.js:1303
#: ../js/ui/status/network.js:437 ../js/ui/status/network.js:1348
msgid "connection failed"
msgstr "пайваст қатъ шудааст"
#: ../js/ui/status/network.js:478 ../js/ui/status/network.js:1190
#: ../js/ui/status/network.js:490 ../js/ui/status/network.js:1236
#: ../js/ui/status/network.js:1424
msgid "More…"
msgstr "Бештар..."
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
#. and we cannot access its settings (including the name)
#: ../js/ui/status/network.js:506 ../js/ui/status/network.js:1142
#: ../js/ui/status/network.js:518 ../js/ui/status/network.js:1191
msgid "Connected (private)"
msgstr "Пайваст шудааст (шахсӣ)"
#: ../js/ui/status/network.js:572
#: ../js/ui/status/network.js:597
msgid "Wired"
msgstr "Симдор"
#: ../js/ui/status/network.js:592
#: ../js/ui/status/network.js:611
msgid "Mobile broadband"
msgstr "Паҳннавори мобилӣ"
#: ../js/ui/status/network.js:1474
#: ../js/ui/status/network.js:1522
msgid "Enable networking"
msgstr "Фаъол кардани шабака"
#: ../js/ui/status/network.js:1522
#: ../js/ui/status/network.js:1583
msgid "Network Settings"
msgstr "Танзимоти шабака"
#: ../js/ui/status/network.js:1539
#: ../js/ui/status/network.js:1600
msgid "Network Manager"
msgstr "Мудири шабака"
#: ../js/ui/status/network.js:1623
#: ../js/ui/status/network.js:1690
msgid "Connection failed"
msgstr "Пайваст қатъ шудааст"
#: ../js/ui/status/network.js:1624
#: ../js/ui/status/network.js:1691
msgid "Activation of network connection failed"
msgstr "Фаъолсозии пайвасти шабака қатъ шудааст."
#: ../js/ui/status/network.js:1933
#: ../js/ui/status/network.js:2047
msgid "Networking is disabled"
msgstr "Шабака ғайрифаъол аст"
@ -1729,72 +1729,72 @@ msgctxt "device"
msgid "Unknown"
msgstr "Номаълум"
#: ../js/ui/status/volume.js:121
#: ../js/ui/status/volume.js:124
msgid "Volume changed"
msgstr "Ҳаҷм тағйир ёфт"
#. Translators: This is the label for audio volume
#: ../js/ui/status/volume.js:246 ../js/ui/status/volume.js:294
#: ../js/ui/status/volume.js:249 ../js/ui/status/volume.js:297
msgid "Volume"
msgstr "Баландии садо"
#: ../js/ui/status/volume.js:255
#: ../js/ui/status/volume.js:258
msgid "Microphone"
msgstr "Микрофон"
#: ../js/ui/unlockDialog.js:119
#: ../js/ui/unlockDialog.js:120
msgid "Log in as another user"
msgstr "Ворид шудан бо корбари дигар"
#: ../js/ui/unlockDialog.js:140
#: ../js/ui/unlockDialog.js:141
msgid "Unlock Window"
msgstr "Кушодани равзана"
#: ../js/ui/userMenu.js:149
#: ../js/ui/userMenu.js:193
msgid "Available"
msgstr "Дастрас"
#: ../js/ui/userMenu.js:152
#: ../js/ui/userMenu.js:196
msgid "Busy"
msgstr "Машғул"
#: ../js/ui/userMenu.js:155
#: ../js/ui/userMenu.js:199
msgid "Invisible"
msgstr "Ноаён"
#: ../js/ui/userMenu.js:158
#: ../js/ui/userMenu.js:202
msgid "Away"
msgstr "Ғоиб"
#: ../js/ui/userMenu.js:161
#: ../js/ui/userMenu.js:205
msgid "Idle"
msgstr "Ғайрифаъол"
#: ../js/ui/userMenu.js:164
#: ../js/ui/userMenu.js:208
msgid "Offline"
msgstr "Офлайн"
#: ../js/ui/userMenu.js:736
#: ../js/ui/userMenu.js:781
msgid "Notifications"
msgstr "Огоҳиҳо"
#: ../js/ui/userMenu.js:749
#: ../js/ui/userMenu.js:797
msgid "Switch User"
msgstr "Таъвизи корбар"
#: ../js/ui/userMenu.js:754
#: ../js/ui/userMenu.js:802
msgid "Log Out"
msgstr "Баромад"
#: ../js/ui/userMenu.js:774
#: ../js/ui/userMenu.js:822
msgid "Install Updates & Restart"
msgstr "Насб кардани навсозиҳо ва бозоғозидан"
#: ../js/ui/userMenu.js:792
#: ../js/ui/userMenu.js:840
msgid "Your chat status will be set to busy"
msgstr "Вазъияти чати шумо ба \"машғул\" тағйир дода мешавад"
#: ../js/ui/userMenu.js:793
#: ../js/ui/userMenu.js:841
msgid ""
"Notifications are now disabled, including chat messages. Your online status "
"has been adjusted to let others know that you might not see their messages."
@ -1803,22 +1803,22 @@ msgstr ""
"шумо ба тавре танзим карда шуд, ки дигарон фаҳманд, ки эҳтимолан шумо "
"паёмҳои онҳоро намебинед."
#: ../js/ui/userMenu.js:834
#: ../js/ui/userMenu.js:888
msgid "Other users are logged in."
msgstr "Корбарони дигар ворид шудаанд."
#: ../js/ui/userMenu.js:839
#: ../js/ui/userMenu.js:893
msgid "Shutting down might cause them to lose unsaved work."
msgstr "Анҷоми кор метавонад сабаби гум шудани кори захиранашуда гардад."
#. Translators: Remote here refers to a remote session, like a ssh login
#: ../js/ui/userMenu.js:867
#: ../js/ui/userMenu.js:921
#, c-format
msgid "%s (remote)"
msgstr "%s (дурдаст)"
#. Translators: Console here refers to a tty like a VT console
#: ../js/ui/userMenu.js:870
#: ../js/ui/userMenu.js:924
#, c-format
msgid "%s (console)"
msgstr "%s (консол)"
@ -1874,20 +1874,20 @@ msgstr[0] "%u вуруд"
msgid "System Sounds"
msgstr "Системаи садо"
#: ../src/main.c:353
#: ../src/main.c:372
msgid "Print version"
msgstr "Версияи чоп"
#: ../src/main.c:359
#: ../src/main.c:378
msgid "Mode used by GDM for login screen"
msgstr "Усуле, ки бо GDM барои экрани воридшавӣ истифода мешавад"
#: ../src/main.c:365
#: ../src/main.c:384
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
msgstr ""
"Истифода бурдани ҳолати мушаххас, масалан \"gdm\" барои экрани воридшавӣ"
#: ../src/main.c:371
#: ../src/main.c:390
msgid "List possible modes"
msgstr "Рӯйхати ҳолатҳои имконпазир"
@ -1908,9 +1908,6 @@ msgstr "Парол бояд холӣ набошад"
msgid "Authentication dialog was dismissed by the user"
msgstr "Равзанаи гуфтугӯи санҷиши ҳакконият бо корбар бекор карда шуд"
#~ msgid "cable unplugged"
#~ msgstr "сим ҷудо шудааст"
#~ msgid "Whether to collect stats about applications usage"
#~ msgstr "Ҷамъ кардан ё ҷамъ накардани омор дар бораи истифодабарии барномаҳо"

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

@ -36,6 +36,8 @@ extern GType gnome_shell_plugin_get_type (void);
#define SHELL_DBUS_SERVICE "org.gnome.Shell"
#define MAGNIFIER_DBUS_SERVICE "org.gnome.Magnifier"
#define OVERRIDES_SCHEMA "org.gnome.shell.overrides"
#define WM_NAME "GNOME Shell"
#define GNOME_WM_KEYBINDINGS "Mutter,GNOME Shell"
@ -169,6 +171,23 @@ shell_dbus_init (gboolean replace)
g_object_unref (session);
}
static void
shell_prefs_init (void)
{
meta_prefs_override_preference_schema ("attach-modal-dialogs",
OVERRIDES_SCHEMA);
meta_prefs_override_preference_schema ("dynamic-workspaces",
OVERRIDES_SCHEMA);
meta_prefs_override_preference_schema ("workspaces-only-on-primary",
OVERRIDES_SCHEMA);
meta_prefs_override_preference_schema ("button-layout",
OVERRIDES_SCHEMA);
meta_prefs_override_preference_schema ("edge-tiling",
OVERRIDES_SCHEMA);
meta_prefs_override_preference_schema ("focus-change-on-pointer-rest",
OVERRIDES_SCHEMA);
}
static void
shell_introspection_init (void)
{
@ -417,6 +436,7 @@ main (int argc, char **argv)
shell_dbus_init (meta_get_replace_current_wm ());
shell_a11y_init ();
shell_perf_log_init ();
shell_prefs_init ();
shell_introspection_init ();
shell_fonts_init ();

View File

@ -3056,10 +3056,6 @@ parse_shadow_property (StThemeNode *node,
*/
for (term = decl->value; term; term = term->next)
{
/* if we found "none", we're all set with the default values */
if (term_is_none (term))
return VALUE_FOUND;
if (term->type == TERM_NUMBER)
{
gdouble value;

View File

@ -643,9 +643,8 @@ st_widget_get_theme_node (StWidget *widget)
if (stage == NULL)
{
g_critical ("st_widget_get_theme_node called on the widget %s which is not in the stage.",
st_describe_actor (CLUTTER_ACTOR (widget)));
return g_object_new (ST_TYPE_THEME_NODE, NULL);
g_error ("st_widget_get_theme_node called on the widget %s which is not in the stage.",
st_describe_actor (CLUTTER_ACTOR (widget)));
}
if (parent_node == NULL)