Compare commits
32 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
d985477a9d | ||
![]() |
b188d57609 | ||
![]() |
412af26e4e | ||
![]() |
7b440f3864 | ||
![]() |
2d98903c90 | ||
![]() |
9a0d0d2fd3 | ||
![]() |
9451c04a09 | ||
![]() |
ca9099997c | ||
![]() |
4de18f2d4b | ||
![]() |
73d8f6c993 | ||
![]() |
2141138a6f | ||
![]() |
4f135be89a | ||
![]() |
026ec2d4c2 | ||
![]() |
a82fae3a2f | ||
![]() |
892d224cd7 | ||
![]() |
63e6d11892 | ||
![]() |
0509bb9bb4 | ||
![]() |
5c78908a5f | ||
![]() |
5a2269c6c6 | ||
![]() |
a7e9655e32 | ||
![]() |
1ec82d2ddd | ||
![]() |
98eaef621a | ||
![]() |
74a6ca58ef | ||
![]() |
747faa43ae | ||
![]() |
32a53f7412 | ||
![]() |
9c94e9813c | ||
![]() |
19749bb37f | ||
![]() |
5ab4c484a5 | ||
![]() |
e602199bfb | ||
![]() |
62e1c08dd6 | ||
![]() |
37e2b60cd3 | ||
![]() |
f299078585 |
@@ -381,6 +381,7 @@ StScrollBar StButton#vhandle:active {
|
|||||||
/* Entries */
|
/* Entries */
|
||||||
|
|
||||||
#searchEntry,
|
#searchEntry,
|
||||||
|
.login-dialog StEntry,
|
||||||
.notification StEntry,
|
.notification StEntry,
|
||||||
.modal-dialog StEntry {
|
.modal-dialog StEntry {
|
||||||
color: rgb(64, 64, 64);
|
color: rgb(64, 64, 64);
|
||||||
@@ -392,6 +393,7 @@ StScrollBar StButton#vhandle:active {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#searchEntry,
|
#searchEntry,
|
||||||
|
.login-dialog StEntry,
|
||||||
.run-dialog-entry,
|
.run-dialog-entry,
|
||||||
.notification StEntry {
|
.notification StEntry {
|
||||||
border: 2px solid rgba(245,245,245,0.2);
|
border: 2px solid rgba(245,245,245,0.2);
|
||||||
@@ -404,6 +406,7 @@ StScrollBar StButton#vhandle:active {
|
|||||||
|
|
||||||
#searchEntry:focus,
|
#searchEntry:focus,
|
||||||
#searchEntry:hover,
|
#searchEntry:hover,
|
||||||
|
.login-dialog StEntry:focus,
|
||||||
.notification StEntry:focus,
|
.notification StEntry:focus,
|
||||||
.modal-dialog StEntry {
|
.modal-dialog StEntry {
|
||||||
border: 2px solid rgb(136,138,133);
|
border: 2px solid rgb(136,138,133);
|
||||||
@@ -413,6 +416,7 @@ StScrollBar StButton#vhandle:active {
|
|||||||
box-shadow: inset 0px 2px 4px rgba(0,0,0,0.6);
|
box-shadow: inset 0px 2px 4px rgba(0,0,0,0.6);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.login-dialog StEntry:focus,
|
||||||
.notification StEntry:focus,
|
.notification StEntry:focus,
|
||||||
.modal-dialog StEntry:focus {
|
.modal-dialog StEntry:focus {
|
||||||
border: 2px solid #3465a4;
|
border: 2px solid #3465a4;
|
||||||
@@ -436,6 +440,7 @@ StScrollBar StButton#vhandle:active {
|
|||||||
transition-duration: 0ms;
|
transition-duration: 0ms;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.login-dialog StEntry,
|
||||||
.notification StEntry,
|
.notification StEntry,
|
||||||
.modal-dialog StEntry {
|
.modal-dialog StEntry {
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
@@ -449,6 +454,7 @@ StScrollBar StButton#vhandle:active {
|
|||||||
padding: 0 4px;
|
padding: 0 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.login-dialog StEntry:insensitive,
|
||||||
.modal-dialog StEntry:insensitive {
|
.modal-dialog StEntry:insensitive {
|
||||||
border-color: #666666;
|
border-color: #666666;
|
||||||
color: #9f9f9f;
|
color: #9f9f9f;
|
||||||
@@ -2234,8 +2240,13 @@ StScrollBar StButton#vhandle:active {
|
|||||||
min-width: 350px;
|
min-width: 350px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.login-dialog-button-box {
|
||||||
|
spacing: 21px;
|
||||||
|
}
|
||||||
|
|
||||||
.login-dialog-prompt-login-hint-message {
|
.login-dialog-prompt-login-hint-message {
|
||||||
font-size: 10.5pt;
|
font-size: 10.5pt;
|
||||||
|
min-width: 480px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.login-dialog-user-list-view {
|
.login-dialog-user-list-view {
|
||||||
@@ -2342,7 +2353,7 @@ StScrollBar StButton#vhandle:active {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.login-dialog-prompt-entry {
|
.login-dialog-prompt-entry {
|
||||||
width: 15em;
|
width: 480px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.login-dialog-session-list,
|
.login-dialog-session-list,
|
||||||
|
@@ -17,13 +17,8 @@ misc/config.js: misc/config.js.in Makefile
|
|||||||
jsdir = $(pkgdatadir)/js
|
jsdir = $(pkgdatadir)/js
|
||||||
|
|
||||||
nobase_dist_js_DATA = \
|
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 \
|
extensionPrefs/main.js \
|
||||||
|
misc/batch.js \
|
||||||
misc/config.js \
|
misc/config.js \
|
||||||
misc/extensionUtils.js \
|
misc/extensionUtils.js \
|
||||||
misc/fileUtils.js \
|
misc/fileUtils.js \
|
||||||
@@ -37,6 +32,7 @@ nobase_dist_js_DATA = \
|
|||||||
misc/util.js \
|
misc/util.js \
|
||||||
perf/core.js \
|
perf/core.js \
|
||||||
ui/altTab.js \
|
ui/altTab.js \
|
||||||
|
ui/animation.js \
|
||||||
ui/appDisplay.js \
|
ui/appDisplay.js \
|
||||||
ui/appFavorites.js \
|
ui/appFavorites.js \
|
||||||
ui/backgroundMenu.js \
|
ui/backgroundMenu.js \
|
||||||
@@ -95,7 +91,7 @@ nobase_dist_js_DATA = \
|
|||||||
ui/status/bluetooth.js \
|
ui/status/bluetooth.js \
|
||||||
ui/switcherPopup.js \
|
ui/switcherPopup.js \
|
||||||
ui/tweener.js \
|
ui/tweener.js \
|
||||||
ui/unlockDialog.js \
|
ui/userAvatar.js \
|
||||||
ui/userMenu.js \
|
ui/userMenu.js \
|
||||||
ui/userWidget.js \
|
ui/userWidget.js \
|
||||||
ui/viewSelector.js \
|
ui/viewSelector.js \
|
||||||
@@ -107,6 +103,14 @@ nobase_dist_js_DATA = \
|
|||||||
ui/workspacesView.js \
|
ui/workspacesView.js \
|
||||||
ui/workspaceSwitcherPopup.js \
|
ui/workspaceSwitcherPopup.js \
|
||||||
ui/xdndHandler.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/__init__.js \
|
||||||
ui/components/autorunManager.js \
|
ui/components/autorunManager.js \
|
||||||
ui/components/automountManager.js \
|
ui/components/automountManager.js \
|
||||||
|
84
js/ui/animation.js
Normal file
84
js/ui/animation.js
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
|
|
||||||
|
const Lang = imports.lang;
|
||||||
|
const Mainloop = imports.mainloop;
|
||||||
|
const St = imports.gi.St;
|
||||||
|
const Signals = imports.signals;
|
||||||
|
const Atk = imports.gi.Atk;
|
||||||
|
|
||||||
|
const ANIMATED_ICON_UPDATE_TIMEOUT = 100;
|
||||||
|
|
||||||
|
const Animation = new Lang.Class({
|
||||||
|
Name: 'Animation',
|
||||||
|
|
||||||
|
_init: function(filename, width, height, speed) {
|
||||||
|
this.actor = new St.Bin();
|
||||||
|
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
|
||||||
|
this._speed = speed;
|
||||||
|
|
||||||
|
this._isLoaded = false;
|
||||||
|
this._isPlaying = false;
|
||||||
|
this._timeoutId = 0;
|
||||||
|
this._frame = 0;
|
||||||
|
this._animations = St.TextureCache.get_default().load_sliced_image (filename, width, height,
|
||||||
|
Lang.bind(this, this._animationsLoaded));
|
||||||
|
this.actor.set_child(this._animations);
|
||||||
|
},
|
||||||
|
|
||||||
|
play: function() {
|
||||||
|
if (this._isLoaded && this._timeoutId == 0) {
|
||||||
|
if (this._frame == 0)
|
||||||
|
this._showFrame(0);
|
||||||
|
|
||||||
|
this._timeoutId = Mainloop.timeout_add(this._speed, Lang.bind(this, this._update));
|
||||||
|
}
|
||||||
|
|
||||||
|
this._isPlaying = true;
|
||||||
|
},
|
||||||
|
|
||||||
|
stop: function() {
|
||||||
|
if (this._timeoutId > 0) {
|
||||||
|
Mainloop.source_remove(this._timeoutId);
|
||||||
|
this._timeoutId = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
this._isPlaying = false;
|
||||||
|
},
|
||||||
|
|
||||||
|
_showFrame: function(frame) {
|
||||||
|
let oldFrameActor = this._animations.get_child_at_index(this._frame);
|
||||||
|
if (oldFrameActor)
|
||||||
|
oldFrameActor.hide();
|
||||||
|
|
||||||
|
this._frame = (frame % this._animations.get_n_children());
|
||||||
|
|
||||||
|
let newFrameActor = this._animations.get_child_at_index(this._frame);
|
||||||
|
if (newFrameActor)
|
||||||
|
newFrameActor.show();
|
||||||
|
},
|
||||||
|
|
||||||
|
_update: function() {
|
||||||
|
this._showFrame(this._frame + 1);
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
|
||||||
|
_animationsLoaded: function() {
|
||||||
|
this._isLoaded = true;
|
||||||
|
|
||||||
|
if (this._isPlaying)
|
||||||
|
this.play();
|
||||||
|
},
|
||||||
|
|
||||||
|
_onDestroy: function() {
|
||||||
|
this.stop();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const AnimatedIcon = new Lang.Class({
|
||||||
|
Name: 'AnimatedIcon',
|
||||||
|
Extends: Animation,
|
||||||
|
|
||||||
|
_init: function(filename, size) {
|
||||||
|
this.parent(filename, size, size, ANIMATED_ICON_UPDATE_TIMEOUT);
|
||||||
|
}
|
||||||
|
});
|
@@ -509,11 +509,11 @@ const AppSearchProvider = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
getInitialResultSet: function(terms) {
|
getInitialResultSet: function(terms) {
|
||||||
this.searchSystem.pushResults(this, this._appSys.initial_search(terms));
|
this.searchSystem.setResults(this, this._appSys.initial_search(terms));
|
||||||
},
|
},
|
||||||
|
|
||||||
getSubsearchResultSet: function(previousResults, terms) {
|
getSubsearchResultSet: function(previousResults, terms) {
|
||||||
this.searchSystem.pushResults(this, this._appSys.subsearch(previousResults, terms));
|
this.searchSystem.setResults(this, this._appSys.subsearch(previousResults, terms));
|
||||||
},
|
},
|
||||||
|
|
||||||
activateResult: function(app) {
|
activateResult: function(app) {
|
||||||
|
@@ -19,6 +19,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
const AccountsService = imports.gi.AccountsService;
|
const AccountsService = imports.gi.AccountsService;
|
||||||
|
const Atk = imports.gi.Atk;
|
||||||
const Clutter = imports.gi.Clutter;
|
const Clutter = imports.gi.Clutter;
|
||||||
const CtrlAltTab = imports.ui.ctrlAltTab;
|
const CtrlAltTab = imports.ui.ctrlAltTab;
|
||||||
const Gio = imports.gi.Gio;
|
const Gio = imports.gi.Gio;
|
||||||
@@ -28,464 +29,50 @@ const Mainloop = imports.mainloop;
|
|||||||
const Meta = imports.gi.Meta;
|
const Meta = imports.gi.Meta;
|
||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
const Pango = imports.gi.Pango;
|
const Pango = imports.gi.Pango;
|
||||||
const Realmd = imports.gdm.realmd;
|
const Realmd = imports.ui.auth.realmd;
|
||||||
const Signals = imports.signals;
|
const Signals = imports.signals;
|
||||||
const Shell = imports.gi.Shell;
|
const Shell = imports.gi.Shell;
|
||||||
const St = imports.gi.St;
|
const St = imports.gi.St;
|
||||||
const Gdm = imports.gi.Gdm;
|
const Gdm = imports.gi.Gdm;
|
||||||
|
|
||||||
const Batch = imports.gdm.batch;
|
const Animation = imports.ui.animation;
|
||||||
const Fprint = imports.gdm.fingerprint;
|
const AuthUtil = imports.ui.auth.util;
|
||||||
const GdmUtil = imports.gdm.util;
|
const Batch = imports.misc.batch;
|
||||||
const Lightbox = imports.ui.lightbox;
|
const Fprint = imports.ui.auth.fingerprint;
|
||||||
|
const Layout = imports.ui.layout;
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const ModalDialog = imports.ui.modalDialog;
|
const ModalDialog = imports.ui.modalDialog;
|
||||||
const PanelMenu = imports.ui.panelMenu;
|
const SessionList = imports.ui.auth.sessionList;
|
||||||
const Tweener = imports.ui.tweener;
|
const Tweener = imports.ui.tweener;
|
||||||
const UserMenu = imports.ui.userMenu;
|
const UserAvatar = imports.ui.userAvatar;
|
||||||
|
const UserList = imports.ui.auth.userList;
|
||||||
const UserWidget = imports.ui.userWidget;
|
const UserWidget = imports.ui.userWidget;
|
||||||
|
|
||||||
const _FADE_ANIMATION_TIME = 0.25;
|
const _FADE_ANIMATION_TIME = 0.25;
|
||||||
const _SCROLL_ANIMATION_TIME = 0.5;
|
const _SCROLL_ANIMATION_TIME = 0.5;
|
||||||
|
const _WORK_SPINNER_ICON_SIZE = 24;
|
||||||
|
const _WORK_SPINNER_ANIMATION_DELAY = 1.0;
|
||||||
|
const _WORK_SPINNER_ANIMATION_TIME = 0.3;
|
||||||
const _TIMED_LOGIN_IDLE_THRESHOLD = 5.0;
|
const _TIMED_LOGIN_IDLE_THRESHOLD = 5.0;
|
||||||
const _LOGO_ICON_HEIGHT = 48;
|
const _LOGO_ICON_HEIGHT = 48;
|
||||||
|
|
||||||
let _loginDialog = null;
|
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 UserMenu.UserAvatarWidget(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 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._scrollView.hide();
|
|
||||||
this.isOpen = false;
|
|
||||||
this._populate();
|
|
||||||
},
|
|
||||||
|
|
||||||
open: function() {
|
|
||||||
if (this.isOpen)
|
|
||||||
return;
|
|
||||||
|
|
||||||
this._button.add_style_pseudo_class('open');
|
|
||||||
this._scrollView.show();
|
|
||||||
this._triangle.set_text('\u25BE');
|
|
||||||
|
|
||||||
this.isOpen = true;
|
|
||||||
},
|
|
||||||
|
|
||||||
close: function() {
|
|
||||||
if (!this.isOpen)
|
|
||||||
return;
|
|
||||||
|
|
||||||
this._button.remove_style_pseudo_class('open');
|
|
||||||
this._scrollView.hide();
|
|
||||||
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);
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Signals.addSignalMethods(SessionList.prototype);
|
|
||||||
|
|
||||||
const LoginDialog = new Lang.Class({
|
const LoginDialog = new Lang.Class({
|
||||||
Name: 'LoginDialog',
|
Name: 'LoginDialog',
|
||||||
Extends: ModalDialog.ModalDialog,
|
|
||||||
|
|
||||||
_init: function(parentActor) {
|
_init: function(parentActor) {
|
||||||
this.parent({ shellReactive: true,
|
this.actor = new St.Widget({ accessible_role: Atk.Role.WINDOW,
|
||||||
styleClass: 'login-dialog',
|
style_class: 'login-dialog' });
|
||||||
parentActor: parentActor,
|
|
||||||
keybindingMode: Shell.KeyBindingMode.LOGIN_SCREEN,
|
|
||||||
shouldFadeIn: false });
|
|
||||||
this.connect('destroy',
|
|
||||||
Lang.bind(this, this._onDestroy));
|
|
||||||
this.connect('opened',
|
|
||||||
Lang.bind(this, this._onOpened));
|
|
||||||
|
|
||||||
|
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._userManager = AccountsService.UserManager.get_default()
|
||||||
this._greeterClient = new Gdm.Client();
|
this._greeterClient = new Gdm.Client();
|
||||||
|
|
||||||
@@ -501,24 +88,24 @@ const LoginDialog = new Lang.Class({
|
|||||||
Lang.bind(this, this._onTimedLoginRequested));
|
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('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('verification-failed', Lang.bind(this, this._verificationFailed));
|
||||||
this._userVerifier.connect('reset', Lang.bind(this, this._reset));
|
this._userVerifier.connect('reset', Lang.bind(this, this._reset));
|
||||||
this._userVerifier.connect('show-login-hint', Lang.bind(this, this._showLoginHint));
|
this._userVerifier.connect('show-login-hint', Lang.bind(this, this._showLoginHint));
|
||||||
this._userVerifier.connect('hide-login-hint', Lang.bind(this, this._hideLoginHint));
|
this._userVerifier.connect('hide-login-hint', Lang.bind(this, this._hideLoginHint));
|
||||||
this._verifyingUser = false;
|
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));
|
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));
|
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));
|
Lang.bind(this, this._updateDisableUserList));
|
||||||
this._settings.connect('changed::' + GdmUtil.LOGO_KEY,
|
this._settings.connect('changed::' + AuthUtil.LOGO_KEY,
|
||||||
Lang.bind(this, this._updateLogo));
|
Lang.bind(this, this._updateLogo));
|
||||||
|
|
||||||
this._textureCache = St.TextureCache.get_default();
|
this._textureCache = St.TextureCache.get_default();
|
||||||
@@ -527,28 +114,31 @@ const LoginDialog = new Lang.Class({
|
|||||||
|
|
||||||
this._userSelectionBox = new St.BoxLayout({ style_class: 'login-dialog-user-selection-box',
|
this._userSelectionBox = new St.BoxLayout({ style_class: 'login-dialog-user-selection-box',
|
||||||
vertical: true });
|
vertical: true });
|
||||||
this.contentLayout.add(this._userSelectionBox);
|
|
||||||
|
this._userSelectionBox.add_constraint(new Clutter.AlignConstraint({ source: this.actor,
|
||||||
|
align_axis: Clutter.AlignAxis.BOTH,
|
||||||
|
factor: 0.5 }));
|
||||||
|
this.actor.add_child(this._userSelectionBox);
|
||||||
|
|
||||||
this._bannerLabel = new St.Label({ style_class: 'login-dialog-banner',
|
this._bannerLabel = new St.Label({ style_class: 'login-dialog-banner',
|
||||||
text: '' });
|
text: '' });
|
||||||
this._userSelectionBox.add(this._bannerLabel);
|
this._userSelectionBox.add(this._bannerLabel);
|
||||||
this._updateBanner();
|
this._updateBanner();
|
||||||
|
|
||||||
this._userList = new UserList();
|
this._userList = new UserList.UserList();
|
||||||
this._userSelectionBox.add(this._userList.actor,
|
this._userSelectionBox.add(this._userList.actor,
|
||||||
{ expand: true,
|
{ expand: true,
|
||||||
x_fill: true,
|
x_fill: true,
|
||||||
y_fill: true });
|
y_fill: true });
|
||||||
|
|
||||||
this.setInitialKeyFocus(this._userList.actor);
|
this._userList.actor.grab_key_focus();
|
||||||
|
|
||||||
this._promptBox = new St.BoxLayout({ style_class: 'login-dialog-prompt-layout',
|
this._promptBox = new St.BoxLayout({ style_class: 'login-dialog-prompt-layout',
|
||||||
vertical: true });
|
vertical: true });
|
||||||
this.contentLayout.add(this._promptBox,
|
this._promptBox.add_constraint(new Clutter.AlignConstraint({ source: this.actor,
|
||||||
{ expand: true,
|
align_axis: Clutter.AlignAxis.BOTH,
|
||||||
x_fill: true,
|
factor: 0.5 }));
|
||||||
y_fill: true,
|
this.actor.add_child(this._promptBox);
|
||||||
x_align: St.Align.START });
|
|
||||||
this._promptUser = new St.Bin({ x_fill: true,
|
this._promptUser = new St.Bin({ x_fill: true,
|
||||||
x_align: St.Align.START });
|
x_align: St.Align.START });
|
||||||
this._promptBox.add(this._promptUser,
|
this._promptBox.add(this._promptUser,
|
||||||
@@ -568,21 +158,29 @@ const LoginDialog = new Lang.Class({
|
|||||||
this._promptEntryTextChangedId = 0;
|
this._promptEntryTextChangedId = 0;
|
||||||
this._promptEntryActivateId = 0;
|
this._promptEntryActivateId = 0;
|
||||||
this._promptBox.add(this._promptEntry,
|
this._promptBox.add(this._promptEntry,
|
||||||
{ expand: true,
|
{ expand: false,
|
||||||
x_fill: true,
|
x_fill: false });
|
||||||
y_fill: false,
|
|
||||||
x_align: St.Align.START });
|
|
||||||
|
|
||||||
this._promptMessage = new St.Label({ visible: false });
|
this._promptMessage = new St.Label({ opacity: 0 });
|
||||||
this._promptBox.add(this._promptMessage, { x_fill: true });
|
this.actor.add_child(this._promptMessage);
|
||||||
|
|
||||||
this._promptLoginHint = new St.Label({ style_class: 'login-dialog-prompt-login-hint-message' });
|
this._promptMessagePlaceholder = new Clutter.Actor({ width: 1, height: 1 });
|
||||||
this._promptLoginHint.hide();
|
this._promptBox.add_child(this._promptMessagePlaceholder);
|
||||||
this._promptBox.add(this._promptLoginHint);
|
|
||||||
|
|
||||||
this._signInButton = null;
|
this._promptMessagePlaceholder.add_constraint(new Clutter.BindConstraint({ source: this._promptMessage,
|
||||||
|
coordinate: Clutter.BindCoordinate.HEIGHT }));
|
||||||
|
|
||||||
this._sessionList = new SessionList();
|
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',
|
this._sessionList.connect('session-activated',
|
||||||
Lang.bind(this, function(list, sessionId) {
|
Lang.bind(this, function(list, sessionId) {
|
||||||
this._greeter.call_select_session_sync (sessionId, null);
|
this._greeter.call_select_session_sync (sessionId, null);
|
||||||
@@ -593,6 +191,16 @@ const LoginDialog = new Lang.Class({
|
|||||||
x_fill: false,
|
x_fill: false,
|
||||||
y_fill: true,
|
y_fill: true,
|
||||||
x_align: St.Align.START });
|
x_align: St.Align.START });
|
||||||
|
|
||||||
|
this._buttonBox = new St.BoxLayout({ style_class: 'login-dialog-button-box',
|
||||||
|
vertical: false });
|
||||||
|
this._promptBox.add(this._buttonBox,
|
||||||
|
{ expand: true,
|
||||||
|
x_align: St.Align.MIDDLE,
|
||||||
|
y_align: St.Align.END });
|
||||||
|
this._cancelButton = null;
|
||||||
|
this._signInButton = null;
|
||||||
|
|
||||||
this._promptBox.hide();
|
this._promptBox.hide();
|
||||||
|
|
||||||
// translators: this message is shown below the user list on the
|
// translators: this message is shown below the user list on the
|
||||||
@@ -617,7 +225,13 @@ const LoginDialog = new Lang.Class({
|
|||||||
|
|
||||||
this._logoBin = new St.Bin({ style_class: 'login-dialog-logo-bin', y_expand: true });
|
this._logoBin = new St.Bin({ style_class: 'login-dialog-logo-bin', y_expand: true });
|
||||||
this._logoBin.set_y_align(Clutter.ActorAlign.END);
|
this._logoBin.set_y_align(Clutter.ActorAlign.END);
|
||||||
this.backgroundStack.add_actor(this._logoBin);
|
this._logoBin.add_constraint(new Clutter.AlignConstraint({ source: this.actor,
|
||||||
|
align_axis: Clutter.AlignAxis.X_AXIS,
|
||||||
|
factor: 0.5 }));
|
||||||
|
this._logoBin.add_constraint(new Clutter.AlignConstraint({ source: this.actor,
|
||||||
|
align_axis: Clutter.AlignAxis.Y_AXIS,
|
||||||
|
factor: 1.0 }));
|
||||||
|
this.actor.add_actor(this._logoBin);
|
||||||
this._updateLogo();
|
this._updateLogo();
|
||||||
|
|
||||||
if (!this._userManager.is_loaded)
|
if (!this._userManager.is_loaded)
|
||||||
@@ -640,7 +254,7 @@ const LoginDialog = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_updateDisableUserList: function() {
|
_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 is the first time around, set initial focus
|
||||||
if (this._disableUserList == undefined && disableUserList)
|
if (this._disableUserList == undefined && disableUserList)
|
||||||
@@ -655,8 +269,8 @@ const LoginDialog = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_updateBanner: function() {
|
_updateBanner: function() {
|
||||||
let enabled = this._settings.get_boolean(GdmUtil.BANNER_MESSAGE_KEY);
|
let enabled = this._settings.get_boolean(AuthUtil.BANNER_MESSAGE_KEY);
|
||||||
let text = this._settings.get_string(GdmUtil.BANNER_MESSAGE_TEXT_KEY);
|
let text = this._settings.get_string(AuthUtil.BANNER_MESSAGE_TEXT_KEY);
|
||||||
|
|
||||||
if (enabled && text) {
|
if (enabled && text) {
|
||||||
this._bannerLabel.set_text(text);
|
this._bannerLabel.set_text(text);
|
||||||
@@ -678,7 +292,7 @@ const LoginDialog = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_updateLogo: function() {
|
_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._logoFileUri = path ? Gio.file_new_for_path(path).get_uri() : null;
|
||||||
this._updateLogoTexture(this._textureCache, this._logoFileUri);
|
this._updateLogoTexture(this._textureCache, this._logoFileUri);
|
||||||
@@ -688,7 +302,7 @@ const LoginDialog = new Lang.Class({
|
|||||||
this._userVerifier.clear();
|
this._userVerifier.clear();
|
||||||
|
|
||||||
this._updateSensitivity(true);
|
this._updateSensitivity(true);
|
||||||
this._promptMessage.hide();
|
this._promptMessage.opacity = 0;
|
||||||
this._user = null;
|
this._user = null;
|
||||||
this._verifyingUser = false;
|
this._verifyingUser = false;
|
||||||
|
|
||||||
@@ -698,36 +312,69 @@ const LoginDialog = new Lang.Class({
|
|||||||
this._showUserList();
|
this._showUserList();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_setWorking: function(working) {
|
||||||
|
if (!this._workSpinner)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Tweener.removeTweens(this._workSpinner.actor);
|
||||||
|
if (working) {
|
||||||
|
this._workSpinner.play();
|
||||||
|
Tweener.addTween(this._workSpinner.actor,
|
||||||
|
{ opacity: 255,
|
||||||
|
delay: _WORK_SPINNER_ANIMATION_DELAY,
|
||||||
|
time: _WORK_SPINNER_ANIMATION_TIME,
|
||||||
|
transition: 'linear'
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
Tweener.addTween(this._workSpinner.actor,
|
||||||
|
{ opacity: 0,
|
||||||
|
time: _WORK_SPINNER_ANIMATION_TIME,
|
||||||
|
transition: 'linear',
|
||||||
|
onCompleteScope: this,
|
||||||
|
onComplete: function() {
|
||||||
|
if (this._workSpinner)
|
||||||
|
this._workSpinner.stop();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
_verificationFailed: function() {
|
_verificationFailed: function() {
|
||||||
this._promptEntry.text = '';
|
this._promptEntry.text = '';
|
||||||
|
|
||||||
this._updateSensitivity(true);
|
this._updateSensitivity(true);
|
||||||
this.setWorking(false);
|
this._setWorking(false);
|
||||||
},
|
},
|
||||||
|
|
||||||
_onDefaultSessionChanged: function(client, sessionId) {
|
_onDefaultSessionChanged: function(client, sessionId) {
|
||||||
this._sessionList.setActiveSession(sessionId);
|
this._sessionList.setActiveSession(sessionId);
|
||||||
},
|
},
|
||||||
|
|
||||||
_showMessage: function(userVerifier, message, styleClass) {
|
_showMessage: function(message, styleClass) {
|
||||||
if (message) {
|
if (message) {
|
||||||
this._promptMessage.text = message;
|
this._promptMessage.text = message;
|
||||||
this._promptMessage.styleClass = styleClass;
|
this._promptMessage.styleClass = styleClass;
|
||||||
this._promptMessage.show();
|
this._promptMessage.opacity = 255;
|
||||||
} else {
|
} else {
|
||||||
this._promptMessage.hide();
|
this._promptMessage.opacity = 0;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_onShowMessage: function(userVerifier, message, styleClass) {
|
||||||
|
this._showMessage(message, styleClass);
|
||||||
|
this._loginHintShown = false;
|
||||||
|
},
|
||||||
|
|
||||||
_showLoginHint: function(verifier, message) {
|
_showLoginHint: function(verifier, message) {
|
||||||
this._promptLoginHint.set_text(message)
|
this._showMessage(message, 'login-dialog-prompt-login-hint-message');
|
||||||
this._promptLoginHint.show();
|
this._loginHintShown = true;
|
||||||
this._promptLoginHint.opacity = 255;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_hideLoginHint: function() {
|
_hideLoginHint: function() {
|
||||||
this._promptLoginHint.hide();
|
if (!this._loginHintShown)
|
||||||
this._promptLoginHint.set_text('');
|
return;
|
||||||
|
this._showMessage('', 'login-dialog-prompt-login-hint-message');
|
||||||
|
this._loginHintShown = false;
|
||||||
},
|
},
|
||||||
|
|
||||||
cancel: function() {
|
cancel: function() {
|
||||||
@@ -741,8 +388,6 @@ const LoginDialog = new Lang.Class({
|
|||||||
this._sessionList.actor.hide();
|
this._sessionList.actor.hide();
|
||||||
this._promptLabel.show();
|
this._promptLabel.show();
|
||||||
this._promptEntry.show();
|
this._promptEntry.show();
|
||||||
this._promptLoginHint.opacity = 0;
|
|
||||||
this._promptLoginHint.show();
|
|
||||||
this._promptBox.opacity = 0;
|
this._promptBox.opacity = 0;
|
||||||
this._promptBox.show();
|
this._promptBox.show();
|
||||||
Tweener.addTween(this._promptBox,
|
Tweener.addTween(this._promptBox,
|
||||||
@@ -768,33 +413,62 @@ const LoginDialog = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_prepareDialog: function(forSecret, hold) {
|
_prepareDialog: function(forSecret, hold) {
|
||||||
this.buttonLayout.visible = true;
|
this._buttonBox.visible = true;
|
||||||
this.clearButtons();
|
this._buttonBox.destroy_all_children();
|
||||||
|
|
||||||
if (!this._disableUserList || this._verifyingUser)
|
if (!this._disableUserList || this._verifyingUser) {
|
||||||
this.addButton({ action: Lang.bind(this, this.cancel),
|
this._cancelButton = new St.Button({ style_class: 'modal-dialog-button',
|
||||||
label: _("Cancel"),
|
button_mask: St.ButtonMask.ONE | St.ButtonMask.THREE,
|
||||||
key: Clutter.Escape },
|
reactive: true,
|
||||||
{ expand: true,
|
can_focus: true,
|
||||||
x_fill: false,
|
label: _("Cancel") });
|
||||||
y_fill: false,
|
this._cancelButton.connect('clicked',
|
||||||
x_align: St.Align.START,
|
Lang.bind(this, function() {
|
||||||
y_align: St.Align.MIDDLE });
|
this.cancel();
|
||||||
this.placeSpinner({ expand: false,
|
}));
|
||||||
x_fill: false,
|
global.stage.connect('captured-event',
|
||||||
y_fill: false,
|
Lang.bind(this, function(actor, event) {
|
||||||
x_align: St.Align.END,
|
if (event.type() == Clutter.EventType.KEY_PRESS &&
|
||||||
y_align: St.Align.MIDDLE });
|
event.get_key_symbol() == Clutter.KEY_Escape) {
|
||||||
this._signInButton = this.addButton({ action: Lang.bind(this, function() {
|
this.cancel();
|
||||||
hold.release();
|
}
|
||||||
}),
|
}));
|
||||||
label: forSecret ? C_("button", "Sign In") : _("Next"),
|
this._buttonBox.add(this._cancelButton,
|
||||||
default: true },
|
{ expand: true,
|
||||||
{ expand: false,
|
x_fill: false,
|
||||||
x_fill: false,
|
y_fill: false,
|
||||||
y_fill: false,
|
x_align: St.Align.START,
|
||||||
x_align: St.Align.END,
|
y_align: St.Align.END });
|
||||||
y_align: St.Align.MIDDLE });
|
}
|
||||||
|
|
||||||
|
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,
|
||||||
|
can_focus: true,
|
||||||
|
label: forSecret ? C_("button", "Sign In") : _("Next") });
|
||||||
|
this._signInButton.connect('clicked',
|
||||||
|
Lang.bind(this, function() {
|
||||||
|
hold.release();
|
||||||
|
}));
|
||||||
|
this._signInButton.add_style_pseudo_class('default');
|
||||||
|
this._buttonBox.add(this._signInButton,
|
||||||
|
{ expand: true,
|
||||||
|
x_fill: false,
|
||||||
|
y_fill: false,
|
||||||
|
x_align: St.Align.END,
|
||||||
|
y_align: St.Align.END });
|
||||||
|
|
||||||
this._updateSignInButtonSensitivity(this._promptEntry.text.length > 0);
|
this._updateSignInButtonSensitivity(this._promptEntry.text.length > 0);
|
||||||
|
|
||||||
@@ -804,10 +478,10 @@ const LoginDialog = new Lang.Class({
|
|||||||
this._updateSignInButtonSensitivity(this._promptEntry.text.length > 0);
|
this._updateSignInButtonSensitivity(this._promptEntry.text.length > 0);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
this._promptEntryActivateId =
|
this._promptEntryActivateId =
|
||||||
this._promptEntry.clutter_text.connect('activate', function() {
|
this._promptEntry.clutter_text.connect('activate', function() {
|
||||||
hold.release();
|
hold.release();
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
_updateSensitivity: function(sensitive) {
|
_updateSensitivity: function(sensitive) {
|
||||||
@@ -825,7 +499,7 @@ const LoginDialog = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_hidePrompt: function() {
|
_hidePrompt: function() {
|
||||||
this.setButtons([]);
|
this._buttonBox.destroy_all_children();
|
||||||
|
|
||||||
if (this._promptEntryTextChangedId > 0) {
|
if (this._promptEntryTextChangedId > 0) {
|
||||||
this._promptEntry.clutter_text.disconnect(this._promptEntryTextChangedId);
|
this._promptEntry.clutter_text.disconnect(this._promptEntryTextChangedId);
|
||||||
@@ -837,9 +511,8 @@ const LoginDialog = new Lang.Class({
|
|||||||
this._promptEntryActivateId = 0;
|
this._promptEntryActivateId = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.setWorking(false);
|
this._setWorking(false);
|
||||||
this._promptBox.hide();
|
this._promptBox.hide();
|
||||||
this._promptLoginHint.hide();
|
|
||||||
|
|
||||||
this._promptUser.set_child(null);
|
this._promptUser.set_child(null);
|
||||||
|
|
||||||
@@ -847,10 +520,10 @@ const LoginDialog = new Lang.Class({
|
|||||||
this._promptEntry.set_text('');
|
this._promptEntry.set_text('');
|
||||||
|
|
||||||
this._sessionList.close();
|
this._sessionList.close();
|
||||||
this._promptLoginHint.hide();
|
|
||||||
|
|
||||||
this.clearButtons();
|
this._buttonBox.destroy_all_children();
|
||||||
this._signInButton = null;
|
this._signInButton = null;
|
||||||
|
this._cancelButton = null;
|
||||||
},
|
},
|
||||||
|
|
||||||
_askQuestion: function(verifier, serviceName, question, passwordChar) {
|
_askQuestion: function(verifier, serviceName, question, passwordChar) {
|
||||||
@@ -867,7 +540,7 @@ const LoginDialog = new Lang.Class({
|
|||||||
function() {
|
function() {
|
||||||
let text = this._promptEntry.get_text();
|
let text = this._promptEntry.get_text();
|
||||||
this._updateSensitivity(false);
|
this._updateSensitivity(false);
|
||||||
this.setWorking(true);
|
this._setWorking(true);
|
||||||
this._userVerifier.answerQuery(serviceName, text);
|
this._userVerifier.answerQuery(serviceName, text);
|
||||||
}];
|
}];
|
||||||
|
|
||||||
@@ -916,7 +589,7 @@ const LoginDialog = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_startSession: function(serviceName) {
|
_startSession: function(serviceName) {
|
||||||
Tweener.addTween(this.dialogLayout,
|
Tweener.addTween(this.actor,
|
||||||
{ opacity: 0,
|
{ opacity: 0,
|
||||||
time: _FADE_ANIMATION_TIME,
|
time: _FADE_ANIMATION_TIME,
|
||||||
transition: 'easeOutQuad',
|
transition: 'easeOutQuad',
|
||||||
@@ -925,7 +598,7 @@ const LoginDialog = new Lang.Class({
|
|||||||
|
|
||||||
for (let i = 0; i < children.length; i++) {
|
for (let i = 0; i < children.length; i++) {
|
||||||
if (children[i] != Main.layoutManager.screenShieldGroup)
|
if (children[i] != Main.layoutManager.screenShieldGroup)
|
||||||
children[i].opacity = this.dialogLayout.opacity;
|
children[i].opacity = this.actor.opacity;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onUpdateScope: this,
|
onUpdateScope: this,
|
||||||
@@ -1081,7 +754,7 @@ const LoginDialog = new Lang.Class({
|
|||||||
|
|
||||||
_hideUserListAndLogIn: function() {
|
_hideUserListAndLogIn: function() {
|
||||||
this._setUserListExpanded(false);
|
this._setUserListExpanded(false);
|
||||||
GdmUtil.cloneAndFadeOutActor(this._userSelectionBox);
|
AuthUtil.cloneAndFadeOutActor(this._userSelectionBox);
|
||||||
this._askForUsernameAndLogIn();
|
this._askForUsernameAndLogIn();
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -1113,7 +786,7 @@ const LoginDialog = new Lang.Class({
|
|||||||
|
|
||||||
_onUserListActivated: function(activatedItem) {
|
_onUserListActivated: function(activatedItem) {
|
||||||
let tasks = [function() {
|
let tasks = [function() {
|
||||||
return GdmUtil.cloneAndFadeOutActor(this._userSelectionBox);
|
return AuthUtil.cloneAndFadeOutActor(this._userSelectionBox);
|
||||||
},
|
},
|
||||||
function() {
|
function() {
|
||||||
this._setUserListExpanded(false);
|
this._setUserListExpanded(false);
|
||||||
@@ -1131,6 +804,8 @@ const LoginDialog = new Lang.Class({
|
|||||||
this._userManager.disconnect(this._userManagerLoadedId);
|
this._userManager.disconnect(this._userManagerLoadedId);
|
||||||
this._userManagerLoadedId = 0;
|
this._userManagerLoadedId = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Main.ctrlAltTabManager.removeGroup(this.actor);
|
||||||
},
|
},
|
||||||
|
|
||||||
_loadUserList: function() {
|
_loadUserList: function() {
|
||||||
@@ -1153,20 +828,6 @@ const LoginDialog = new Lang.Class({
|
|||||||
}));
|
}));
|
||||||
},
|
},
|
||||||
|
|
||||||
_onOpened: function() {
|
|
||||||
Main.ctrlAltTabManager.addGroup(this.dialogLayout,
|
|
||||||
_("Login Window"),
|
|
||||||
'dialog-password-symbolic',
|
|
||||||
{ sortGroup: CtrlAltTab.SortGroup.MIDDLE });
|
|
||||||
|
|
||||||
},
|
|
||||||
|
|
||||||
close: function() {
|
|
||||||
this.parent();
|
|
||||||
|
|
||||||
Main.ctrlAltTabManager.removeGroup(this.dialogLayout);
|
|
||||||
},
|
|
||||||
|
|
||||||
addCharacter: function(unichar) {
|
addCharacter: function(unichar) {
|
||||||
this._promptEntry.clutter_text.insert_unichar(unichar);
|
this._promptEntry.clutter_text.insert_unichar(unichar);
|
||||||
},
|
},
|
@@ -23,7 +23,7 @@ const Lang = imports.lang;
|
|||||||
|
|
||||||
const LoginManager = imports.misc.loginManager;
|
const LoginManager = imports.misc.loginManager;
|
||||||
|
|
||||||
const GdmUtil = imports.gdm.util;
|
const AuthUtil = imports.ui.auth.util;
|
||||||
const PanelMenu = imports.ui.panelMenu;
|
const PanelMenu = imports.ui.panelMenu;
|
||||||
const PopupMenu = imports.ui.popupMenu;
|
const PopupMenu = imports.ui.popupMenu;
|
||||||
|
|
||||||
@@ -37,7 +37,7 @@ const PowerMenuButton = new Lang.Class({
|
|||||||
|
|
||||||
this._loginManager = LoginManager.getLoginManager();
|
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',
|
this._settings.connect('changed::disable-restart-buttons',
|
||||||
Lang.bind(this, this._updateVisibility));
|
Lang.bind(this, this._updateVisibility));
|
||||||
|
|
230
js/ui/auth/sessionList.js
Normal file
230
js/ui/auth/sessionList.js
Normal 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);
|
@@ -6,23 +6,17 @@ const Gdm = imports.gi.Gdm;
|
|||||||
const Gio = imports.gi.Gio;
|
const Gio = imports.gi.Gio;
|
||||||
const GLib = imports.gi.GLib;
|
const GLib = imports.gi.GLib;
|
||||||
const GnomeDesktop = imports.gi.GnomeDesktop;
|
const GnomeDesktop = imports.gi.GnomeDesktop;
|
||||||
const Gtk = imports.gi.Gtk;
|
|
||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
const Signals = imports.signals;
|
|
||||||
const Shell = imports.gi.Shell;
|
const Shell = imports.gi.Shell;
|
||||||
const St = imports.gi.St;
|
const St = imports.gi.St;
|
||||||
|
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const ModalDialog = imports.ui.modalDialog;
|
const ModalDialog = imports.ui.modalDialog;
|
||||||
const Panel = imports.ui.panel;
|
|
||||||
const ShellEntry = imports.ui.shellEntry;
|
const ShellEntry = imports.ui.shellEntry;
|
||||||
const Tweener = imports.ui.tweener;
|
|
||||||
const UserMenu = imports.ui.userMenu;
|
|
||||||
const UserWidget = imports.ui.userWidget;
|
const UserWidget = imports.ui.userWidget;
|
||||||
|
|
||||||
const Batch = imports.gdm.batch;
|
const AuthUtil = imports.ui.auth.util;
|
||||||
const GdmUtil = imports.gdm.util;
|
const Batch = imports.misc.batch;
|
||||||
const LoginDialog = imports.gdm.loginDialog;
|
|
||||||
|
|
||||||
// The timeout before going back automatically to the lock screen (in seconds)
|
// The timeout before going back automatically to the lock screen (in seconds)
|
||||||
const IDLE_TIMEOUT = 2 * 60;
|
const IDLE_TIMEOUT = 2 * 60;
|
||||||
@@ -46,7 +40,7 @@ const UnlockDialog = new Lang.Class({
|
|||||||
this._firstQuestion = true;
|
this._firstQuestion = true;
|
||||||
|
|
||||||
this._greeterClient = new Gdm.Client();
|
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._userVerified = false;
|
||||||
|
|
||||||
this._userVerifier.connect('ask-question', Lang.bind(this, this._onAskQuestion));
|
this._userVerifier.connect('ask-question', Lang.bind(this, this._onAskQuestion));
|
||||||
@@ -163,9 +157,9 @@ const UnlockDialog = new Lang.Class({
|
|||||||
if (message) {
|
if (message) {
|
||||||
this._promptMessage.text = message;
|
this._promptMessage.text = message;
|
||||||
this._promptMessage.styleClass = styleClass;
|
this._promptMessage.styleClass = styleClass;
|
||||||
GdmUtil.fadeInActor(this._promptMessage);
|
AuthUtil.fadeInActor(this._promptMessage);
|
||||||
} else {
|
} else {
|
||||||
GdmUtil.fadeOutActor(this._promptMessage);
|
AuthUtil.fadeOutActor(this._promptMessage);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -194,11 +188,11 @@ const UnlockDialog = new Lang.Class({
|
|||||||
|
|
||||||
_showLoginHint: function(verifier, message) {
|
_showLoginHint: function(verifier, message) {
|
||||||
this._promptLoginHint.set_text(message)
|
this._promptLoginHint.set_text(message)
|
||||||
GdmUtil.fadeInActor(this._promptLoginHint);
|
AuthUtil.fadeInActor(this._promptLoginHint);
|
||||||
},
|
},
|
||||||
|
|
||||||
_hideLoginHint: function() {
|
_hideLoginHint: function() {
|
||||||
GdmUtil.fadeOutActor(this._promptLoginHint);
|
AuthUtil.fadeOutActor(this._promptLoginHint);
|
||||||
},
|
},
|
||||||
|
|
||||||
_doUnlock: function() {
|
_doUnlock: function() {
|
251
js/ui/auth/userList.js
Normal file
251
js/ui/auth/userList.js
Normal 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);
|
@@ -7,8 +7,8 @@ const Lang = imports.lang;
|
|||||||
const Mainloop = imports.mainloop;
|
const Mainloop = imports.mainloop;
|
||||||
const Signals = imports.signals;
|
const Signals = imports.signals;
|
||||||
|
|
||||||
const Batch = imports.gdm.batch;
|
const Batch = imports.misc.batch;
|
||||||
const Fprint = imports.gdm.fingerprint;
|
const Fprint = imports.ui.auth.fingerprint;
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const Params = imports.misc.params;
|
const Params = imports.misc.params;
|
||||||
const Tweener = imports.ui.tweener;
|
const Tweener = imports.ui.tweener;
|
@@ -16,7 +16,7 @@ const PolkitAgent = imports.gi.PolkitAgent;
|
|||||||
const Components = imports.ui.components;
|
const Components = imports.ui.components;
|
||||||
const ModalDialog = imports.ui.modalDialog;
|
const ModalDialog = imports.ui.modalDialog;
|
||||||
const ShellEntry = imports.ui.shellEntry;
|
const ShellEntry = imports.ui.shellEntry;
|
||||||
const UserMenu = imports.ui.userMenu;
|
const UserAvatar = imports.ui.userAvatar;
|
||||||
|
|
||||||
const DIALOG_ICON_SIZE = 48;
|
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',
|
let userBox = new St.BoxLayout({ style_class: 'polkit-dialog-user-layout',
|
||||||
vertical: false });
|
vertical: false });
|
||||||
messageBox.add(userBox);
|
messageBox.add(userBox);
|
||||||
this._userAvatar = new UserMenu.UserAvatarWidget(this._user,
|
this._userAvatar = new UserAvatar.UserAvatar(this._user,
|
||||||
{ iconSize: DIALOG_ICON_SIZE,
|
{ iconSize: DIALOG_ICON_SIZE,
|
||||||
styleClass: 'polkit-dialog-user-icon' });
|
styleClass: 'polkit-dialog-user-icon' });
|
||||||
this._userAvatar.actor.hide();
|
this._userAvatar.actor.hide();
|
||||||
userBox.add(this._userAvatar.actor,
|
userBox.add(this._userAvatar.actor,
|
||||||
{ x_fill: true,
|
{ x_fill: true,
|
||||||
|
@@ -35,7 +35,7 @@ const GnomeSession = imports.misc.gnomeSession;
|
|||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const ModalDialog = imports.ui.modalDialog;
|
const ModalDialog = imports.ui.modalDialog;
|
||||||
const Tweener = imports.ui.tweener;
|
const Tweener = imports.ui.tweener;
|
||||||
const UserMenu = imports.ui.userMenu;
|
const UserAvatar = imports.ui.userAvatar;
|
||||||
|
|
||||||
let _endSessionDialog = null;
|
let _endSessionDialog = null;
|
||||||
|
|
||||||
@@ -360,9 +360,9 @@ const EndSessionDialog = new Lang.Class({
|
|||||||
icon_size: _DIALOG_ICON_SIZE,
|
icon_size: _DIALOG_ICON_SIZE,
|
||||||
style_class: dialogContent.iconStyleClass });
|
style_class: dialogContent.iconStyleClass });
|
||||||
} else {
|
} else {
|
||||||
let avatarWidget = new UserMenu.UserAvatarWidget(this._user,
|
let avatarWidget = new UserAvatar.UserAvatar(this._user,
|
||||||
{ iconSize: _DIALOG_ICON_SIZE,
|
{ iconSize: _DIALOG_ICON_SIZE,
|
||||||
styleClass: dialogContent.iconStyleClass });
|
styleClass: dialogContent.iconStyleClass });
|
||||||
this._iconBin.child = avatarWidget.actor;
|
this._iconBin.child = avatarWidget.actor;
|
||||||
avatarWidget.update();
|
avatarWidget.update();
|
||||||
}
|
}
|
||||||
|
@@ -14,6 +14,7 @@ const Atk = imports.gi.Atk;
|
|||||||
|
|
||||||
const Params = imports.misc.params;
|
const Params = imports.misc.params;
|
||||||
|
|
||||||
|
const Animation = imports.ui.animation;
|
||||||
const Layout = imports.ui.layout;
|
const Layout = imports.ui.layout;
|
||||||
const Lightbox = imports.ui.lightbox;
|
const Lightbox = imports.ui.lightbox;
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
@@ -187,10 +188,8 @@ const ModalDialog = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
placeSpinner: function(layoutInfo) {
|
placeSpinner: function(layoutInfo) {
|
||||||
/* This is here because of recursive imports */
|
|
||||||
const Panel = imports.ui.panel;
|
|
||||||
let spinnerIcon = global.datadir + '/theme/process-working.svg';
|
let spinnerIcon = global.datadir + '/theme/process-working.svg';
|
||||||
this._workSpinner = new Panel.AnimatedIcon(spinnerIcon, WORK_SPINNER_ICON_SIZE);
|
this._workSpinner = new Animation.AnimatedIcon(spinnerIcon, WORK_SPINNER_ICON_SIZE);
|
||||||
this._workSpinner.actor.opacity = 0;
|
this._workSpinner.actor.opacity = 0;
|
||||||
this._workSpinner.actor.show();
|
this._workSpinner.actor.show();
|
||||||
|
|
||||||
|
@@ -29,7 +29,7 @@ const ANIMATION_TIME = 0.25;
|
|||||||
// and don't want the shading animation to get cut off
|
// and don't want the shading animation to get cut off
|
||||||
const SHADE_ANIMATION_TIME = .20;
|
const SHADE_ANIMATION_TIME = .20;
|
||||||
|
|
||||||
const DND_WINDOW_SWITCH_TIMEOUT = 1250;
|
const DND_WINDOW_SWITCH_TIMEOUT = 750;
|
||||||
|
|
||||||
const OVERVIEW_ACTIVATION_TIMEOUT = 0.5;
|
const OVERVIEW_ACTIVATION_TIMEOUT = 0.5;
|
||||||
|
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
|
|
||||||
|
const GObject = imports.gi.GObject;
|
||||||
const Clutter = imports.gi.Clutter;
|
const Clutter = imports.gi.Clutter;
|
||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
const Meta = imports.gi.Meta;
|
const Meta = imports.gi.Meta;
|
||||||
@@ -246,6 +247,7 @@ const ThumbnailsSlider = new Lang.Class({
|
|||||||
|
|
||||||
Main.layoutManager.connect('monitors-changed', Lang.bind(this, this.updateSlide));
|
Main.layoutManager.connect('monitors-changed', Lang.bind(this, this.updateSlide));
|
||||||
this.actor.connect('notify::hover', Lang.bind(this, this.updateSlide));
|
this.actor.connect('notify::hover', Lang.bind(this, this.updateSlide));
|
||||||
|
this._thumbnailsBox.actor.bind_property('visible', this.actor, 'visible', GObject.BindingFlags.SYNC_CREATE);
|
||||||
},
|
},
|
||||||
|
|
||||||
_getAlwaysZoomOut: function() {
|
_getAlwaysZoomOut: function() {
|
||||||
|
@@ -15,6 +15,7 @@ const Signals = imports.signals;
|
|||||||
const Atk = imports.gi.Atk;
|
const Atk = imports.gi.Atk;
|
||||||
|
|
||||||
|
|
||||||
|
const Animation = imports.ui.animation;
|
||||||
const Config = imports.misc.config;
|
const Config = imports.misc.config;
|
||||||
const CtrlAltTab = imports.ui.ctrlAltTab;
|
const CtrlAltTab = imports.ui.ctrlAltTab;
|
||||||
const DND = imports.ui.dnd;
|
const DND = imports.ui.dnd;
|
||||||
@@ -29,7 +30,6 @@ const PANEL_ICON_SIZE = 24;
|
|||||||
|
|
||||||
const BUTTON_DND_ACTIVATION_TIMEOUT = 250;
|
const BUTTON_DND_ACTIVATION_TIMEOUT = 250;
|
||||||
|
|
||||||
const ANIMATED_ICON_UPDATE_TIMEOUT = 100;
|
|
||||||
const SPINNER_ANIMATION_TIME = 0.2;
|
const SPINNER_ANIMATION_TIME = 0.2;
|
||||||
|
|
||||||
// To make sure the panel corners blend nicely with the panel,
|
// To make sure the panel corners blend nicely with the panel,
|
||||||
@@ -75,81 +75,6 @@ function _unpremultiply(color) {
|
|||||||
blue: blue, alpha: color.alpha });
|
blue: blue, alpha: color.alpha });
|
||||||
};
|
};
|
||||||
|
|
||||||
const Animation = new Lang.Class({
|
|
||||||
Name: 'Animation',
|
|
||||||
|
|
||||||
_init: function(filename, width, height, speed) {
|
|
||||||
this.actor = new St.Bin();
|
|
||||||
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
|
|
||||||
this._speed = speed;
|
|
||||||
|
|
||||||
this._isLoaded = false;
|
|
||||||
this._isPlaying = false;
|
|
||||||
this._timeoutId = 0;
|
|
||||||
this._frame = 0;
|
|
||||||
this._animations = St.TextureCache.get_default().load_sliced_image (filename, width, height,
|
|
||||||
Lang.bind(this, this._animationsLoaded));
|
|
||||||
this.actor.set_child(this._animations);
|
|
||||||
},
|
|
||||||
|
|
||||||
play: function() {
|
|
||||||
if (this._isLoaded && this._timeoutId == 0) {
|
|
||||||
if (this._frame == 0)
|
|
||||||
this._showFrame(0);
|
|
||||||
|
|
||||||
this._timeoutId = Mainloop.timeout_add(this._speed, Lang.bind(this, this._update));
|
|
||||||
}
|
|
||||||
|
|
||||||
this._isPlaying = true;
|
|
||||||
},
|
|
||||||
|
|
||||||
stop: function() {
|
|
||||||
if (this._timeoutId > 0) {
|
|
||||||
Mainloop.source_remove(this._timeoutId);
|
|
||||||
this._timeoutId = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
this._isPlaying = false;
|
|
||||||
},
|
|
||||||
|
|
||||||
_showFrame: function(frame) {
|
|
||||||
let oldFrameActor = this._animations.get_child_at_index(this._frame);
|
|
||||||
if (oldFrameActor)
|
|
||||||
oldFrameActor.hide();
|
|
||||||
|
|
||||||
this._frame = (frame % this._animations.get_n_children());
|
|
||||||
|
|
||||||
let newFrameActor = this._animations.get_child_at_index(this._frame);
|
|
||||||
if (newFrameActor)
|
|
||||||
newFrameActor.show();
|
|
||||||
},
|
|
||||||
|
|
||||||
_update: function() {
|
|
||||||
this._showFrame(this._frame + 1);
|
|
||||||
return true;
|
|
||||||
},
|
|
||||||
|
|
||||||
_animationsLoaded: function() {
|
|
||||||
this._isLoaded = true;
|
|
||||||
|
|
||||||
if (this._isPlaying)
|
|
||||||
this.play();
|
|
||||||
},
|
|
||||||
|
|
||||||
_onDestroy: function() {
|
|
||||||
this.stop();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
const AnimatedIcon = new Lang.Class({
|
|
||||||
Name: 'AnimatedIcon',
|
|
||||||
Extends: Animation,
|
|
||||||
|
|
||||||
_init: function(filename, size) {
|
|
||||||
this.parent(filename, size, size, ANIMATED_ICON_UPDATE_TIMEOUT);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
const TextShadower = new Lang.Class({
|
const TextShadower = new Lang.Class({
|
||||||
Name: 'TextShadower',
|
Name: 'TextShadower',
|
||||||
|
|
||||||
@@ -360,7 +285,7 @@ const AppMenuButton = new Lang.Class({
|
|||||||
if (!success || this._spinnerIcon == icon)
|
if (!success || this._spinnerIcon == icon)
|
||||||
return;
|
return;
|
||||||
this._spinnerIcon = icon;
|
this._spinnerIcon = icon;
|
||||||
this._spinner = new AnimatedIcon(this._spinnerIcon, PANEL_ICON_SIZE);
|
this._spinner = new Animation.AnimatedIcon(this._spinnerIcon, PANEL_ICON_SIZE);
|
||||||
this._container.add_actor(this._spinner.actor);
|
this._container.add_actor(this._spinner.actor);
|
||||||
this._spinner.actor.hide();
|
this._spinner.actor.hide();
|
||||||
this._spinner.actor.lower_bottom();
|
this._spinner.actor.lower_bottom();
|
||||||
@@ -931,7 +856,7 @@ const PANEL_ITEM_IMPLEMENTATIONS = {
|
|||||||
'battery': imports.ui.status.power.Indicator,
|
'battery': imports.ui.status.power.Indicator,
|
||||||
'lockScreen': imports.ui.status.lockScreenMenu.Indicator,
|
'lockScreen': imports.ui.status.lockScreenMenu.Indicator,
|
||||||
'keyboard': imports.ui.status.keyboard.InputSourceIndicator,
|
'keyboard': imports.ui.status.keyboard.InputSourceIndicator,
|
||||||
'powerMenu': imports.gdm.powerMenu.PowerMenuButton,
|
'powerMenu': imports.ui.auth.powerMenu.PowerMenuButton,
|
||||||
'userMenu': imports.ui.userMenu.UserMenuButton
|
'userMenu': imports.ui.userMenu.UserMenuButton
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -205,7 +205,7 @@ const RemoteSearchProvider = new Lang.Class({
|
|||||||
_getResultsFinished: function(results, error) {
|
_getResultsFinished: function(results, error) {
|
||||||
if (error)
|
if (error)
|
||||||
return;
|
return;
|
||||||
this.searchSystem.pushResults(this, results[0]);
|
this.searchSystem.setResults(this, results[0]);
|
||||||
},
|
},
|
||||||
|
|
||||||
getInitialResultSet: function(terms) {
|
getInitialResultSet: function(terms) {
|
||||||
@@ -217,7 +217,7 @@ const RemoteSearchProvider = new Lang.Class({
|
|||||||
this._cancellable);
|
this._cancellable);
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
log('Error calling GetInitialResultSet for provider %s: %s'.format(this.id, e.toString()));
|
log('Error calling GetInitialResultSet for provider %s: %s'.format(this.id, e.toString()));
|
||||||
this.searchSystem.pushResults(this, []);
|
this.searchSystem.setResults(this, []);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -230,7 +230,7 @@ const RemoteSearchProvider = new Lang.Class({
|
|||||||
this._cancellable);
|
this._cancellable);
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
log('Error calling GetSubsearchResultSet for provider %s: %s'.format(this.id, e.toString()));
|
log('Error calling GetSubsearchResultSet for provider %s: %s'.format(this.id, e.toString()));
|
||||||
this.searchSystem.pushResults(this, []);
|
this.searchSystem.setResults(this, []);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@@ -51,7 +51,7 @@ const SearchSystem = new Lang.Class({
|
|||||||
this._previousResults = [];
|
this._previousResults = [];
|
||||||
},
|
},
|
||||||
|
|
||||||
pushResults: function(provider, results) {
|
setResults: function(provider, results) {
|
||||||
let i = this._providers.indexOf(provider);
|
let i = this._providers.indexOf(provider);
|
||||||
if (i == -1)
|
if (i == -1)
|
||||||
return;
|
return;
|
||||||
|
@@ -180,13 +180,82 @@ const GridSearchResult = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const ListSearchResults = new Lang.Class({
|
const SearchResultsBase = new Lang.Class({
|
||||||
Name: 'ListSearchResults',
|
Name: 'SearchResultsBase',
|
||||||
|
|
||||||
_init: function(provider) {
|
_init: function(provider) {
|
||||||
this.provider = provider;
|
this.provider = provider;
|
||||||
|
|
||||||
this.actor = new St.BoxLayout({ style_class: 'search-section-content' });
|
this._terms = [];
|
||||||
|
|
||||||
|
this.actor = new St.BoxLayout({ style_class: 'search-section',
|
||||||
|
vertical: true });
|
||||||
|
|
||||||
|
this._resultDisplayBin = new St.Bin({ x_fill: true,
|
||||||
|
y_fill: true });
|
||||||
|
this.actor.add(this._resultDisplayBin, { expand: true });
|
||||||
|
|
||||||
|
let separator = new Separator.HorizontalSeparator({ style_class: 'search-section-separator' });
|
||||||
|
this.actor.add(separator.actor);
|
||||||
|
},
|
||||||
|
|
||||||
|
destroy: function() {
|
||||||
|
this.actor.destroy();
|
||||||
|
this._terms = [];
|
||||||
|
},
|
||||||
|
|
||||||
|
_clearResultDisplay: function() {
|
||||||
|
},
|
||||||
|
|
||||||
|
clear: function() {
|
||||||
|
this._clearResultDisplay();
|
||||||
|
this.actor.hide();
|
||||||
|
},
|
||||||
|
|
||||||
|
_keyFocusIn: function(icon) {
|
||||||
|
this.emit('key-focus-in', icon);
|
||||||
|
},
|
||||||
|
|
||||||
|
_setMoreIconVisible: function(visible) {
|
||||||
|
},
|
||||||
|
|
||||||
|
updateSearch: function(providerResults, terms, callback) {
|
||||||
|
this._terms = terms;
|
||||||
|
|
||||||
|
if (providerResults.length == 0) {
|
||||||
|
this._clearResultDisplay();
|
||||||
|
this.actor.hide();
|
||||||
|
callback();
|
||||||
|
} else {
|
||||||
|
let maxResults = this._getMaxDisplayedResults();
|
||||||
|
let results = providerResults.slice(0, maxResults);
|
||||||
|
let hasMoreResults = results.length < providerResults.length;
|
||||||
|
|
||||||
|
this.provider.getResultMetas(results, Lang.bind(this, function(metas) {
|
||||||
|
this.clear();
|
||||||
|
|
||||||
|
// To avoid CSS transitions causing flickering when
|
||||||
|
// the first search result stays the same, we hide the
|
||||||
|
// content while filling in the results.
|
||||||
|
this.actor.hide();
|
||||||
|
this._clearResultDisplay();
|
||||||
|
this._renderResults(metas);
|
||||||
|
this._setMoreIconVisible(hasMoreResults && this.provider.canLaunchSearch);
|
||||||
|
this.actor.show();
|
||||||
|
callback();
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const ListSearchResults = new Lang.Class({
|
||||||
|
Name: 'ListSearchResults',
|
||||||
|
Extends: SearchResultsBase,
|
||||||
|
|
||||||
|
_init: function(provider) {
|
||||||
|
this.parent(provider);
|
||||||
|
|
||||||
|
this._container = new St.BoxLayout({ style_class: 'search-section-content' });
|
||||||
this.providerIcon = new ProviderIcon(provider);
|
this.providerIcon = new ProviderIcon(provider);
|
||||||
this.providerIcon.connect('clicked', Lang.bind(this,
|
this.providerIcon.connect('clicked', Lang.bind(this,
|
||||||
function() {
|
function() {
|
||||||
@@ -194,48 +263,27 @@ const ListSearchResults = new Lang.Class({
|
|||||||
Main.overview.toggle();
|
Main.overview.toggle();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
this.actor.add(this.providerIcon, { x_fill: false,
|
this._container.add(this.providerIcon, { x_fill: false,
|
||||||
y_fill: false,
|
y_fill: false,
|
||||||
x_align: St.Align.START,
|
x_align: St.Align.START,
|
||||||
y_align: St.Align.START });
|
y_align: St.Align.START });
|
||||||
|
|
||||||
this._content = new St.BoxLayout({ style_class: 'list-search-results',
|
this._content = new St.BoxLayout({ style_class: 'list-search-results',
|
||||||
vertical: true });
|
vertical: true });
|
||||||
this.actor.add(this._content, { expand: true });
|
this._container.add(this._content, { expand: true });
|
||||||
|
|
||||||
this._notDisplayedResult = [];
|
this._resultDisplayBin.set_child(this._container);
|
||||||
this._terms = [];
|
|
||||||
this._pendingClear = false;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
getResultsForDisplay: function() {
|
_setMoreIconVisible: function(visible) {
|
||||||
let alreadyVisible = this._pendingClear ? 0 : this.getVisibleResultCount();
|
this.providerIcon.moreIcon.visible = true;
|
||||||
let canDisplay = MAX_LIST_SEARCH_RESULTS_ROWS - alreadyVisible;
|
|
||||||
|
|
||||||
let newResults = this._notDisplayedResult.splice(0, canDisplay);
|
|
||||||
return newResults;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
getVisibleResultCount: function() {
|
_getMaxDisplayedResults: function() {
|
||||||
return this._content.get_n_children();
|
return MAX_LIST_SEARCH_RESULTS_ROWS;
|
||||||
},
|
},
|
||||||
|
|
||||||
hasMoreResults: function() {
|
_renderResults: function(metas) {
|
||||||
return this._notDisplayedResult.length > 0;
|
|
||||||
},
|
|
||||||
|
|
||||||
setResults: function(results, terms) {
|
|
||||||
// copy the lists
|
|
||||||
this._notDisplayedResult = results.slice(0);
|
|
||||||
this._terms = terms.slice(0);
|
|
||||||
this._pendingClear = true;
|
|
||||||
},
|
|
||||||
|
|
||||||
_keyFocusIn: function(icon) {
|
|
||||||
this.emit('key-focus-in', icon);
|
|
||||||
},
|
|
||||||
|
|
||||||
renderResults: function(metas) {
|
|
||||||
for (let i = 0; i < metas.length; i++) {
|
for (let i = 0; i < metas.length; i++) {
|
||||||
let display = new ListSearchResult(this.provider, metas[i], this._terms);
|
let display = new ListSearchResult(this.provider, metas[i], this._terms);
|
||||||
display.actor.connect('key-focus-in', Lang.bind(this, this._keyFocusIn));
|
display.actor.connect('key-focus-in', Lang.bind(this, this._keyFocusIn));
|
||||||
@@ -243,13 +291,12 @@ const ListSearchResults = new Lang.Class({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
clear: function () {
|
_clearResultDisplay: function () {
|
||||||
this._content.destroy_all_children();
|
this._content.destroy_all_children();
|
||||||
this._pendingClear = false;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
getFirstResult: function() {
|
getFirstResult: function() {
|
||||||
if (this.getVisibleResultCount() > 0)
|
if (this._content.get_n_children() > 0)
|
||||||
return this._content.get_child_at_index(0)._delegate;
|
return this._content.get_child_at_index(0)._delegate;
|
||||||
else
|
else
|
||||||
return null;
|
return null;
|
||||||
@@ -259,50 +306,24 @@ Signals.addSignalMethods(ListSearchResults.prototype);
|
|||||||
|
|
||||||
const GridSearchResults = new Lang.Class({
|
const GridSearchResults = new Lang.Class({
|
||||||
Name: 'GridSearchResults',
|
Name: 'GridSearchResults',
|
||||||
|
Extends: SearchResultsBase,
|
||||||
|
|
||||||
_init: function(provider) {
|
_init: function(provider) {
|
||||||
this.provider = provider;
|
this.parent(provider);
|
||||||
|
|
||||||
this._grid = new IconGrid.IconGrid({ rowLimit: MAX_GRID_SEARCH_RESULTS_ROWS,
|
this._grid = new IconGrid.IconGrid({ rowLimit: MAX_GRID_SEARCH_RESULTS_ROWS,
|
||||||
xAlign: St.Align.START });
|
xAlign: St.Align.START });
|
||||||
this.actor = new St.Bin({ x_align: St.Align.MIDDLE });
|
this._bin = new St.Bin({ x_align: St.Align.MIDDLE });
|
||||||
|
this._bin.set_child(this._grid.actor);
|
||||||
|
|
||||||
this.actor.set_child(this._grid.actor);
|
this._resultDisplayBin.set_child(this._bin);
|
||||||
|
|
||||||
this._notDisplayedResult = [];
|
|
||||||
this._terms = [];
|
|
||||||
this._pendingClear = false;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
getResultsForDisplay: function() {
|
_getMaxDisplayedResults: function() {
|
||||||
let alreadyVisible = this._pendingClear ? 0 : this._grid.visibleItemsCount();
|
return this._grid.childrenInRow(this._bin.width) * this._grid.getRowLimit();
|
||||||
let canDisplay = this._grid.childrenInRow(this.actor.width) * this._grid.getRowLimit()
|
|
||||||
- alreadyVisible;
|
|
||||||
|
|
||||||
let newResults = this._notDisplayedResult.splice(0, canDisplay);
|
|
||||||
return newResults;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
getVisibleResultCount: function() {
|
_renderResults: function(metas) {
|
||||||
return this._grid.visibleItemsCount();
|
|
||||||
},
|
|
||||||
|
|
||||||
hasMoreResults: function() {
|
|
||||||
return this._notDisplayedResult.length > 0;
|
|
||||||
},
|
|
||||||
|
|
||||||
setResults: function(results, terms) {
|
|
||||||
// copy the lists
|
|
||||||
this._notDisplayedResult = results.slice(0);
|
|
||||||
this._terms = terms.slice(0);
|
|
||||||
this._pendingClear = true;
|
|
||||||
},
|
|
||||||
|
|
||||||
_keyFocusIn: function(icon) {
|
|
||||||
this.emit('key-focus-in', icon);
|
|
||||||
},
|
|
||||||
|
|
||||||
renderResults: function(metas) {
|
|
||||||
for (let i = 0; i < metas.length; i++) {
|
for (let i = 0; i < metas.length; i++) {
|
||||||
let display = new GridSearchResult(this.provider, metas[i], this._terms);
|
let display = new GridSearchResult(this.provider, metas[i], this._terms);
|
||||||
display.actor.connect('key-focus-in', Lang.bind(this, this._keyFocusIn));
|
display.actor.connect('key-focus-in', Lang.bind(this, this._keyFocusIn));
|
||||||
@@ -310,13 +331,12 @@ const GridSearchResults = new Lang.Class({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
clear: function () {
|
_clearResultDisplay: function () {
|
||||||
this._grid.removeAll();
|
this._grid.removeAll();
|
||||||
this._pendingClear = false;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
getFirstResult: function() {
|
getFirstResult: function() {
|
||||||
if (this.getVisibleResultCount() > 0)
|
if (this._grid.visibleItemsCount() > 0)
|
||||||
return this._grid.getItemAtIndex(0)._delegate;
|
return this._grid.getItemAtIndex(0)._delegate;
|
||||||
else
|
else
|
||||||
return null;
|
return null;
|
||||||
@@ -366,9 +386,9 @@ const SearchResults = new Lang.Class({
|
|||||||
this._content.add(this._statusBin, { expand: true });
|
this._content.add(this._statusBin, { expand: true });
|
||||||
this._statusBin.add_actor(this._statusText);
|
this._statusBin.add_actor(this._statusText);
|
||||||
this._providers = this._searchSystem.getProviders();
|
this._providers = this._searchSystem.getProviders();
|
||||||
this._providerMeta = [];
|
this._providerDisplays = {};
|
||||||
for (let i = 0; i < this._providers.length; i++) {
|
for (let i = 0; i < this._providers.length; i++) {
|
||||||
this.createProviderMeta(this._providers[i]);
|
this.createProviderDisplay(this._providers[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
this._highlightDefault = false;
|
this._highlightDefault = false;
|
||||||
@@ -386,61 +406,33 @@ const SearchResults = new Lang.Class({
|
|||||||
Util.ensureActorVisibleInScrollView(this._scrollView, icon);
|
Util.ensureActorVisibleInScrollView(this._scrollView, icon);
|
||||||
},
|
},
|
||||||
|
|
||||||
createProviderMeta: function(provider) {
|
createProviderDisplay: function(provider) {
|
||||||
let providerBox = new St.BoxLayout({ style_class: 'search-section',
|
let providerDisplay = null;
|
||||||
vertical: true });
|
|
||||||
let providerIcon = null;
|
|
||||||
let resultDisplay = null;
|
|
||||||
|
|
||||||
if (provider.appInfo) {
|
if (provider.appInfo) {
|
||||||
resultDisplay = new ListSearchResults(provider);
|
providerDisplay = new ListSearchResults(provider);
|
||||||
providerIcon = resultDisplay.providerIcon;
|
|
||||||
} else {
|
} else {
|
||||||
resultDisplay = new GridSearchResults(provider);
|
providerDisplay = new GridSearchResults(provider);
|
||||||
}
|
}
|
||||||
|
|
||||||
resultDisplay.connect('key-focus-in', Lang.bind(this, this._keyFocusIn));
|
providerDisplay.connect('key-focus-in', Lang.bind(this, this._keyFocusIn));
|
||||||
|
this._providerDisplays[provider.id] = providerDisplay;
|
||||||
let resultDisplayBin = new St.Bin({ child: resultDisplay.actor,
|
this._content.add(providerDisplay.actor);
|
||||||
x_fill: true,
|
|
||||||
y_fill: true });
|
|
||||||
providerBox.add(resultDisplayBin, { expand: true });
|
|
||||||
|
|
||||||
let separator = new Separator.HorizontalSeparator({ style_class: 'search-section-separator' });
|
|
||||||
providerBox.add(separator.actor);
|
|
||||||
|
|
||||||
this._providerMeta.push({ provider: provider,
|
|
||||||
actor: providerBox,
|
|
||||||
icon: providerIcon,
|
|
||||||
resultDisplay: resultDisplay });
|
|
||||||
this._content.add(providerBox);
|
|
||||||
},
|
},
|
||||||
|
|
||||||
destroyProviderMeta: function(provider) {
|
destroyProviderDisplay: function(provider) {
|
||||||
for (let i=0; i < this._providerMeta.length; i++) {
|
this._providerDisplays[provider.id].destroy();
|
||||||
let meta = this._providerMeta[i];
|
delete this._providerDisplays[provider.id];
|
||||||
if (meta.provider == provider) {
|
|
||||||
meta.actor.destroy();
|
|
||||||
this._providerMeta.splice(i, 1);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_clearDisplay: function() {
|
_clearDisplay: function() {
|
||||||
for (let i = 0; i < this._providerMeta.length; i++) {
|
for (let i = 0; i < this._providers.length; i++) {
|
||||||
let meta = this._providerMeta[i];
|
let provider = this._providers[i];
|
||||||
meta.resultDisplay.clear();
|
let providerDisplay = this._providerDisplays[provider.id];
|
||||||
meta.actor.hide();
|
providerDisplay.clear();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
_clearDisplayForProvider: function(provider) {
|
|
||||||
let meta = this._metaForProvider(provider);
|
|
||||||
meta.resultDisplay.clear();
|
|
||||||
meta.actor.hide();
|
|
||||||
},
|
|
||||||
|
|
||||||
reset: function() {
|
reset: function() {
|
||||||
this._searchSystem.reset();
|
this._searchSystem.reset();
|
||||||
this._statusBin.hide();
|
this._statusBin.hide();
|
||||||
@@ -454,20 +446,17 @@ const SearchResults = new Lang.Class({
|
|||||||
this._statusBin.show();
|
this._statusBin.show();
|
||||||
},
|
},
|
||||||
|
|
||||||
_metaForProvider: function(provider) {
|
|
||||||
return this._providerMeta[this._providers.indexOf(provider)];
|
|
||||||
},
|
|
||||||
|
|
||||||
_maybeSetInitialSelection: function() {
|
_maybeSetInitialSelection: function() {
|
||||||
let newDefaultResult = null;
|
let newDefaultResult = null;
|
||||||
|
|
||||||
for (let i = 0; i < this._providerMeta.length; i++) {
|
for (let i = 0; i < this._providers.length; i++) {
|
||||||
let meta = this._providerMeta[i];
|
let provider = this._providers[i];
|
||||||
|
let display = this._providerDisplays[provider.id];
|
||||||
|
|
||||||
if (!meta.actor.visible)
|
if (!display.actor.visible)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
let firstResult = meta.resultDisplay.getFirstResult();
|
let firstResult = display.getFirstResult();
|
||||||
if (firstResult) {
|
if (firstResult) {
|
||||||
newDefaultResult = firstResult;
|
newDefaultResult = firstResult;
|
||||||
break; // select this one!
|
break; // select this one!
|
||||||
@@ -487,11 +476,14 @@ const SearchResults = new Lang.Class({
|
|||||||
_updateStatusText: function () {
|
_updateStatusText: function () {
|
||||||
let haveResults = false;
|
let haveResults = false;
|
||||||
|
|
||||||
for (let i = 0; i < this._providerMeta.length; ++i)
|
for (let i = 0; i < this._providers.length; i++) {
|
||||||
if (this._providerMeta[i].resultDisplay.getFirstResult()) {
|
let provider = this._providers[i];
|
||||||
|
let display = this._providerDisplays[provider.id];
|
||||||
|
if (display.getFirstResult()) {
|
||||||
haveResults = true;
|
haveResults = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!haveResults) {
|
if (!haveResults) {
|
||||||
this._statusText.set_text(_("No results."));
|
this._statusText.set_text(_("No results."));
|
||||||
@@ -504,42 +496,12 @@ const SearchResults = new Lang.Class({
|
|||||||
_updateResults: function(searchSystem, results) {
|
_updateResults: function(searchSystem, results) {
|
||||||
let terms = searchSystem.getTerms();
|
let terms = searchSystem.getTerms();
|
||||||
let [provider, providerResults] = results;
|
let [provider, providerResults] = results;
|
||||||
let meta = this._metaForProvider(provider);
|
let display = this._providerDisplays[provider.id];
|
||||||
|
|
||||||
if (providerResults.length == 0) {
|
display.updateSearch(providerResults, terms, Lang.bind(this, function() {
|
||||||
this._clearDisplayForProvider(provider);
|
|
||||||
meta.resultDisplay.setResults([], []);
|
|
||||||
this._maybeSetInitialSelection();
|
this._maybeSetInitialSelection();
|
||||||
this._updateStatusText();
|
this._updateStatusText();
|
||||||
} else {
|
}));
|
||||||
meta.resultDisplay.setResults(providerResults, terms);
|
|
||||||
let results = meta.resultDisplay.getResultsForDisplay();
|
|
||||||
|
|
||||||
if (meta.icon)
|
|
||||||
meta.icon.moreIcon.visible =
|
|
||||||
meta.resultDisplay.hasMoreResults() &&
|
|
||||||
provider.canLaunchSearch;
|
|
||||||
|
|
||||||
provider.getResultMetas(results, Lang.bind(this, function(metas) {
|
|
||||||
this._clearDisplayForProvider(provider);
|
|
||||||
meta.actor.show();
|
|
||||||
|
|
||||||
// Hiding drops the key focus if we have it
|
|
||||||
let focus = global.stage.get_key_focus();
|
|
||||||
// To avoid CSS transitions causing flickering when
|
|
||||||
// the first search result stays the same, we hide the
|
|
||||||
// content while filling in the results.
|
|
||||||
this._content.hide();
|
|
||||||
|
|
||||||
meta.resultDisplay.renderResults(metas);
|
|
||||||
this._maybeSetInitialSelection();
|
|
||||||
this._updateStatusText();
|
|
||||||
|
|
||||||
this._content.show();
|
|
||||||
if (this._content.contains(focus))
|
|
||||||
global.stage.set_key_focus(focus);
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
activateDefault: function() {
|
activateDefault: function() {
|
||||||
|
@@ -42,7 +42,7 @@ const _modes = {
|
|||||||
hasNotifications: true,
|
hasNotifications: true,
|
||||||
isGreeter: true,
|
isGreeter: true,
|
||||||
isPrimary: true,
|
isPrimary: true,
|
||||||
unlockDialog: imports.gdm.loginDialog.LoginDialog,
|
unlockDialog: imports.ui.auth.loginDialog.LoginDialog,
|
||||||
components: ['polkitAgent'],
|
components: ['polkitAgent'],
|
||||||
panel: {
|
panel: {
|
||||||
left: [],
|
left: [],
|
||||||
@@ -89,7 +89,7 @@ const _modes = {
|
|||||||
hasNotifications: true,
|
hasNotifications: true,
|
||||||
isLocked: false,
|
isLocked: false,
|
||||||
isPrimary: true,
|
isPrimary: true,
|
||||||
unlockDialog: imports.ui.unlockDialog.UnlockDialog,
|
unlockDialog: imports.ui.auth.unlockDialog.UnlockDialog,
|
||||||
components: ['networkAgent', 'polkitAgent', 'telepathyClient',
|
components: ['networkAgent', 'polkitAgent', 'telepathyClient',
|
||||||
'keyring', 'recorder', 'autorunManager', 'automountManager'],
|
'keyring', 'recorder', 'autorunManager', 'automountManager'],
|
||||||
panel: {
|
panel: {
|
||||||
|
52
js/ui/userAvatar.js
Normal file
52
js/ui/userAvatar.js
Normal 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 });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
@@ -21,6 +21,7 @@ const ModalDialog = imports.ui.modalDialog;
|
|||||||
const PanelMenu = imports.ui.panelMenu;
|
const PanelMenu = imports.ui.panelMenu;
|
||||||
const PopupMenu = imports.ui.popupMenu;
|
const PopupMenu = imports.ui.popupMenu;
|
||||||
const Params = imports.misc.params;
|
const Params = imports.misc.params;
|
||||||
|
const UserAvatar = imports.ui.userAvatar;
|
||||||
const Util = imports.misc.util;
|
const Util = imports.misc.util;
|
||||||
|
|
||||||
const LOCKDOWN_SCHEMA = 'org.gnome.desktop.lockdown';
|
const LOCKDOWN_SCHEMA = 'org.gnome.desktop.lockdown';
|
||||||
@@ -57,48 +58,6 @@ const SystemdLoginSessionIface = <interface name='org.freedesktop.login1.Session
|
|||||||
|
|
||||||
const SystemdLoginSession = Gio.DBusProxy.makeProxyWrapper(SystemdLoginSessionIface);
|
const SystemdLoginSession = Gio.DBusProxy.makeProxyWrapper(SystemdLoginSessionIface);
|
||||||
|
|
||||||
// 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 UserAvatarWidget = new Lang.Class({
|
|
||||||
Name: 'UserAvatarWidget',
|
|
||||||
|
|
||||||
_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 });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
const IMStatusItem = new Lang.Class({
|
const IMStatusItem = new Lang.Class({
|
||||||
Name: 'IMStatusItem',
|
Name: 'IMStatusItem',
|
||||||
Extends: PopupMenu.PopupBaseMenuItem,
|
Extends: PopupMenu.PopupBaseMenuItem,
|
||||||
@@ -170,7 +129,7 @@ const IMStatusChooserItem = new Lang.Class({
|
|||||||
this._userManager = AccountsService.UserManager.get_default();
|
this._userManager = AccountsService.UserManager.get_default();
|
||||||
this._user = this._userManager.get_user(GLib.get_user_name());
|
this._user = this._userManager.get_user(GLib.get_user_name());
|
||||||
|
|
||||||
this._avatar = new UserAvatarWidget(this._user, { reactive: true });
|
this._avatar = new UserAvatar.UserAvatar(this._user, { reactive: true });
|
||||||
this._iconBin = new St.Button({ child: this._avatar.actor });
|
this._iconBin = new St.Button({ child: this._avatar.actor });
|
||||||
this.addActor(this._iconBin);
|
this.addActor(this._iconBin);
|
||||||
|
|
||||||
@@ -908,7 +867,7 @@ const UserMenuButton = new Lang.Class({
|
|||||||
let session = sessions[i];
|
let session = sessions[i];
|
||||||
let userEntry = new St.BoxLayout({ style_class: 'login-dialog-user-list-item',
|
let userEntry = new St.BoxLayout({ style_class: 'login-dialog-user-list-item',
|
||||||
vertical: false });
|
vertical: false });
|
||||||
let avatar = new UserAvatarWidget(session.user);
|
let avatar = new UserAvatar.UserAvatar(session.user);
|
||||||
avatar.update();
|
avatar.update();
|
||||||
userEntry.add(avatar.actor);
|
userEntry.add(avatar.actor);
|
||||||
|
|
||||||
|
@@ -6,7 +6,7 @@ const AccountsService = imports.gi.AccountsService;
|
|||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
const St = imports.gi.St;
|
const St = imports.gi.St;
|
||||||
|
|
||||||
const UserMenu = imports.ui.userMenu;
|
const UserAvatar = imports.ui.userAvatar;
|
||||||
|
|
||||||
const UserWidget = new Lang.Class({
|
const UserWidget = new Lang.Class({
|
||||||
Name: 'UserWidget',
|
Name: 'UserWidget',
|
||||||
@@ -18,7 +18,7 @@ const UserWidget = new Lang.Class({
|
|||||||
vertical: false });
|
vertical: false });
|
||||||
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
|
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
|
||||||
|
|
||||||
this._avatar = new UserMenu.UserAvatarWidget(user);
|
this._avatar = new UserAvatar.UserAvatar(user);
|
||||||
this.actor.add(this._avatar.actor,
|
this.actor.add(this._avatar.actor,
|
||||||
{ x_fill: true, y_fill: true });
|
{ x_fill: true, y_fill: true });
|
||||||
|
|
||||||
|
@@ -508,12 +508,12 @@ const ViewSelector = new Lang.Class({
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
this._searchSystem.registerProvider(provider);
|
this._searchSystem.registerProvider(provider);
|
||||||
this._searchResults.createProviderMeta(provider);
|
this._searchResults.createProviderDisplay(provider);
|
||||||
},
|
},
|
||||||
|
|
||||||
removeSearchProvider: function(provider) {
|
removeSearchProvider: function(provider) {
|
||||||
this._searchSystem.unregisterProvider(provider);
|
this._searchSystem.unregisterProvider(provider);
|
||||||
this._searchResults.destroyProviderMeta(provider);
|
this._searchResults.destroyProviderDisplay(provider);
|
||||||
},
|
},
|
||||||
|
|
||||||
getActivePage: function() {
|
getActivePage: function() {
|
||||||
|
@@ -134,9 +134,9 @@ const WandaSearchProvider = new Lang.Class({
|
|||||||
|
|
||||||
getInitialResultSet: function(terms) {
|
getInitialResultSet: function(terms) {
|
||||||
if (terms.join(' ') == MAGIC_FISH_KEY) {
|
if (terms.join(' ') == MAGIC_FISH_KEY) {
|
||||||
this.searchSystem.pushResults(this, [ FISH_NAME ]);
|
this.searchSystem.setResults(this, [ FISH_NAME ]);
|
||||||
} else {
|
} else {
|
||||||
this.searchSystem.pushResults(this, []);
|
this.searchSystem.setResults(this, []);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
321
po/cs.po
321
po/cs.po
@@ -12,8 +12,8 @@ msgstr ""
|
|||||||
"Project-Id-Version: gnome-shell\n"
|
"Project-Id-Version: gnome-shell\n"
|
||||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||||
"shell&keywords=I18N+L10N&component=general\n"
|
"shell&keywords=I18N+L10N&component=general\n"
|
||||||
"POT-Creation-Date: 2013-04-26 16:24+0000\n"
|
"POT-Creation-Date: 2013-05-28 07:17+0000\n"
|
||||||
"PO-Revision-Date: 2013-04-26 19:18+0200\n"
|
"PO-Revision-Date: 2013-05-29 12:26+0200\n"
|
||||||
"Last-Translator: Marek Černocký <marek@manet.cz>\n"
|
"Last-Translator: Marek Černocký <marek@manet.cz>\n"
|
||||||
"Language-Team: Czech <gnome-cs-list@gnome.org>\n"
|
"Language-Team: Czech <gnome-cs-list@gnome.org>\n"
|
||||||
"Language: cs\n"
|
"Language: cs\n"
|
||||||
@@ -102,26 +102,10 @@ msgstr ""
|
|||||||
"EnableExtension a DisableExtension sběrnice DBus na org.gnome.Shell."
|
"EnableExtension a DisableExtension sběrnice DBus na org.gnome.Shell."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:5
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:5
|
||||||
msgid "Whether to collect stats about applications usage"
|
|
||||||
msgstr "Zda sbírat statistická data o používání aplikací"
|
|
||||||
|
|
||||||
#: ../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 ""
|
|
||||||
"Program GNOME Shell obvykle sleduje aktivní aplikace, aby mohl nabídnout ty "
|
|
||||||
"nejpoužívanější (např. ve spouštěčích). Data budou uchovávána v soukromí, "
|
|
||||||
"přesto ale můžete z důvodu ochrany soukromí tuto funkci zakázat. Vezměte "
|
|
||||||
"prosím v potaz skutečnost, že zakázaní funkce neodstraní již uložená data."
|
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:7
|
|
||||||
msgid "List of desktop file IDs for favorite applications"
|
msgid "List of desktop file IDs for favorite applications"
|
||||||
msgstr "Seznam ID souborů desktop oblíbených aplikací"
|
msgstr "Seznam ID souborů desktop oblíbených aplikací"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:8
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:6
|
||||||
msgid ""
|
msgid ""
|
||||||
"The applications corresponding to these identifiers will be displayed in the "
|
"The applications corresponding to these identifiers will be displayed in the "
|
||||||
"favorites area."
|
"favorites area."
|
||||||
@@ -129,11 +113,11 @@ msgstr ""
|
|||||||
"Aplikace odpovídající těmto identifikátorům budou zobrazeny oblasti "
|
"Aplikace odpovídající těmto identifikátorům budou zobrazeny oblasti "
|
||||||
"oblíbených."
|
"oblíbených."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:9
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:7
|
||||||
msgid "List of categories that should be displayed as folders"
|
msgid "List of categories that should be displayed as folders"
|
||||||
msgstr "Seznam kategorií k zobrazení v podobě složek"
|
msgstr "Seznam kategorií k zobrazení v podobě složek"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:10
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:8
|
||||||
msgid ""
|
msgid ""
|
||||||
"Each category name in this list will be represented as folder in the "
|
"Each category name in this list will be represented as folder in the "
|
||||||
"application view, rather than being displayed inline in the main view."
|
"application view, rather than being displayed inline in the main view."
|
||||||
@@ -141,15 +125,15 @@ msgstr ""
|
|||||||
"Každá kategorie v tomto seznamu bude zobrazena jako složka, místo toho aby "
|
"Každá kategorie v tomto seznamu bude zobrazena jako složka, místo toho aby "
|
||||||
"byla zobrazena v hlavním pohledu."
|
"byla zobrazena v hlavním pohledu."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:11
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:9
|
||||||
msgid "History for command (Alt-F2) dialog"
|
msgid "History for command (Alt-F2) dialog"
|
||||||
msgstr "Historie příkazového dialogového okna (Alt-F2)"
|
msgstr "Historie příkazového dialogového okna (Alt-F2)"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:12
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:10
|
||||||
msgid "History for the looking glass dialog"
|
msgid "History for the looking glass dialog"
|
||||||
msgstr "Historie dialogového okna „looking glass“ (Alt-F2)"
|
msgstr "Historie dialogového okna „looking glass“ (Alt-F2)"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:11
|
||||||
msgid ""
|
msgid ""
|
||||||
"Internally used to store the last IM presence explicitly set by the user. "
|
"Internally used to store the last IM presence explicitly set by the user. "
|
||||||
"The value here is from the TpConnectionPresenceType enumeration."
|
"The value here is from the TpConnectionPresenceType enumeration."
|
||||||
@@ -158,7 +142,7 @@ msgstr ""
|
|||||||
"byl ručně nastaven v rychlé komunikaci. Tato hodnota pochází z výčtu "
|
"byl ručně nastaven v rychlé komunikaci. Tato hodnota pochází z výčtu "
|
||||||
"TpConnectionPresenceType."
|
"TpConnectionPresenceType."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:12
|
||||||
msgid ""
|
msgid ""
|
||||||
"Internally used to store the last session presence status for the user. The "
|
"Internally used to store the last session presence status for the user. The "
|
||||||
"value here is from the GsmPresenceStatus enumeration."
|
"value here is from the GsmPresenceStatus enumeration."
|
||||||
@@ -166,11 +150,11 @@ msgstr ""
|
|||||||
"Interně používáno k uchování posledního stavu přítomnosti uživatele v "
|
"Interně používáno k uchování posledního stavu přítomnosti uživatele v "
|
||||||
"sezení. Tato hodnota pochází z výčtu GsmPresenceStatus."
|
"sezení. Tato hodnota pochází z výčtu GsmPresenceStatus."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
|
||||||
msgid "Always show the 'Log out' menuitem in the user menu."
|
msgid "Always show the 'Log out' menuitem in the user menu."
|
||||||
msgstr "V nabídce uživatele vždy zobrazovat položku „Odhlásit“."
|
msgstr "V nabídce uživatele vždy zobrazovat položku „Odhlásit“."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
|
||||||
msgid ""
|
msgid ""
|
||||||
"This key overrides the automatic hiding of the 'Log out' menuitem in single-"
|
"This key overrides the automatic hiding of the 'Log out' menuitem in single-"
|
||||||
"user, single-session situations."
|
"user, single-session situations."
|
||||||
@@ -178,14 +162,14 @@ msgstr ""
|
|||||||
"Tento klíč ruší automatické skrývání položky nabídky „Odhlásit“ v situacích "
|
"Tento klíč ruší automatické skrývání položky nabídky „Odhlásit“ v situacích "
|
||||||
"s jedním uživatelem a jedním sezením."
|
"s jedním uživatelem a jedním sezením."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
|
||||||
msgid ""
|
msgid ""
|
||||||
"Whether to remember password for mounting encrypted or remote filesystems"
|
"Whether to remember password for mounting encrypted or remote filesystems"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Zdali si pamatovat heslo k připojování šifrovaných či vzdálených souborových "
|
"Zdali si pamatovat heslo k připojování šifrovaných či vzdálených souborových "
|
||||||
"systémů"
|
"systémů"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
|
||||||
msgid ""
|
msgid ""
|
||||||
"The shell will request a password when an encrypted device or a remote "
|
"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 "
|
"filesystem is mounted. If the password can be saved for future use a "
|
||||||
@@ -197,76 +181,76 @@ msgstr ""
|
|||||||
"zaškrtávací pole „Pamatovat si heslo“. Tento klíč určuje výchozí stav této "
|
"zaškrtávací pole „Pamatovat si heslo“. Tento klíč určuje výchozí stav této "
|
||||||
"volby."
|
"volby."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
||||||
msgid "Show the week date in the calendar"
|
msgid "Show the week date in the calendar"
|
||||||
msgstr "Zobrazovat v kalendáři čísla týdnů"
|
msgstr "Zobrazovat v kalendáři čísla týdnů"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
||||||
msgid "If true, display the ISO week date in the calendar."
|
msgid "If true, display the ISO week date in the calendar."
|
||||||
msgstr "Je-li zapnuto, zobrazovat v kalendáři čísla týdnů dle ISO."
|
msgstr "Je-li zapnuto, zobrazovat v kalendáři čísla týdnů dle ISO."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
||||||
msgid "Keybinding to open the application menu"
|
msgid "Keybinding to open the application menu"
|
||||||
msgstr "Klávesová zkratka na otevření nabídky aplikace"
|
msgstr "Klávesová zkratka na otevření nabídky aplikace"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
||||||
msgid "Keybinding to open the application menu."
|
msgid "Keybinding to open the application menu."
|
||||||
msgstr "Klávesová zkratka na otevření nabídky aplikace."
|
msgstr "Klávesová zkratka na otevření nabídky aplikace."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
||||||
msgid "Keybinding to open the \"Show Applications\" view"
|
msgid "Keybinding to open the \"Show Applications\" view"
|
||||||
msgstr "Klávesová zkratka k otevření nabídky aplikací"
|
msgstr "Klávesová zkratka k otevření nabídky aplikací"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
||||||
msgid ""
|
msgid ""
|
||||||
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
|
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
|
||||||
msgstr "Klávesová zkratka k otevření nabídky aplikací v Přehledu aktivit"
|
msgstr "Klávesová zkratka k otevření nabídky aplikací v Přehledu aktivit"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
||||||
msgid "Keybinding to open the overview"
|
msgid "Keybinding to open the overview"
|
||||||
msgstr "Klávesová zkratka k otevření přehledu"
|
msgstr "Klávesová zkratka k otevření přehledu"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
||||||
msgid "Keybinding to open the Activities Overview."
|
msgid "Keybinding to open the Activities Overview."
|
||||||
msgstr "Klávesová zkratka k otevření přehledu činností"
|
msgstr "Klávesová zkratka k otevření přehledu činností"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
||||||
msgid "Keybinding to toggle the visibility of the message tray"
|
msgid "Keybinding to toggle the visibility of the message tray"
|
||||||
msgstr "Klávesová zkratka k přepnutí viditelnosti lišty zpráv"
|
msgstr "Klávesová zkratka k přepnutí viditelnosti lišty zpráv"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
|
||||||
msgid "Keybinding to toggle the visibility of the message tray."
|
msgid "Keybinding to toggle the visibility of the message tray."
|
||||||
msgstr "Klávesová zkratka k přepnutí viditelnosti lišty zpráv."
|
msgstr "Klávesová zkratka k přepnutí viditelnosti lišty zpráv."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
|
||||||
msgid "Keybinding to focus the active notification"
|
msgid "Keybinding to focus the active notification"
|
||||||
msgstr "Klávesová zkratka k zaměření aktivního upozornění"
|
msgstr "Klávesová zkratka k zaměření aktivního upozornění"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
|
||||||
msgid "Keybinding to focus the active notification."
|
msgid "Keybinding to focus the active notification."
|
||||||
msgstr "Klávesová zkratka k zaměření aktivního upozornění."
|
msgstr "Klávesová zkratka k zaměření aktivního upozornění."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
|
||||||
msgid "Keybinding to toggle the screen recorder"
|
msgid "Keybinding to toggle the screen recorder"
|
||||||
msgstr "Klávesová zkratka k záznamu obrazovky"
|
msgstr "Klávesová zkratka k záznamu obrazovky"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
|
||||||
msgid "Keybinding to start/stop the builtin screen recorder."
|
msgid "Keybinding to start/stop the builtin screen recorder."
|
||||||
msgstr "Klávesová zkratka k započnutí nebo ukončení záznamu dění na obrazovce."
|
msgstr "Klávesová zkratka k započnutí nebo ukončení záznamu dění na obrazovce."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
|
||||||
msgid "Which keyboard to use"
|
msgid "Which keyboard to use"
|
||||||
msgstr "Která klávesnice se má používat"
|
msgstr "Která klávesnice se má používat"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
|
||||||
msgid "The type of keyboard to use."
|
msgid "The type of keyboard to use."
|
||||||
msgstr "Typ klávesnice, který se má používat."
|
msgstr "Typ klávesnice, který se má používat."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
|
||||||
msgid "Framerate used for recording screencasts."
|
msgid "Framerate used for recording screencasts."
|
||||||
msgstr "Frekvence snímků při nahrávání dění na obrazovce."
|
msgstr "Frekvence snímků při nahrávání dění na obrazovce."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34
|
||||||
msgid ""
|
msgid ""
|
||||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||||
"screencast recorder in frames-per-second."
|
"screencast recorder in frames-per-second."
|
||||||
@@ -274,11 +258,11 @@ msgstr ""
|
|||||||
"Frekvence snímků za sekundu výsledné nahrávky dění na obrazovce, která byla "
|
"Frekvence snímků za sekundu výsledné nahrávky dění na obrazovce, která byla "
|
||||||
"nahrána záznamovým programem GNOME Shell."
|
"nahrána záznamovým programem GNOME Shell."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
|
||||||
msgid "The gstreamer pipeline used to encode the screencast"
|
msgid "The gstreamer pipeline used to encode the screencast"
|
||||||
msgstr "Roura systému gstreamer určená ke kódování nahrávky dění na obrazovce"
|
msgstr "Roura systému gstreamer určená ke kódování nahrávky dění na obrazovce"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:39
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
||||||
@@ -303,11 +287,11 @@ msgstr ""
|
|||||||
"nahráváním do WEBM s kodekem VP8. %T je použito jako zástupný symbol odhadu "
|
"nahráváním do WEBM s kodekem VP8. %T je použito jako zástupný symbol odhadu "
|
||||||
"nejvhodnějšího počtu vláken na systému."
|
"nejvhodnějšího počtu vláken na systému."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:40
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38
|
||||||
msgid "File extension used for storing the screencast"
|
msgid "File extension used for storing the screencast"
|
||||||
msgstr "Přípona souboru s nahrávkou dění na obrazovce"
|
msgstr "Přípona souboru s nahrávkou dění na obrazovce"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:41
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:39
|
||||||
msgid ""
|
msgid ""
|
||||||
"The filename for recorded screencasts will be a unique filename based on the "
|
"The filename for recorded screencasts will be a unique filename based on the "
|
||||||
"current date, and use this extension. It should be changed when recording to "
|
"current date, and use this extension. It should be changed when recording to "
|
||||||
@@ -317,11 +301,11 @@ msgstr ""
|
|||||||
"názvu vycházejícího z aktuálního data a bude používat tuto příponu. Při "
|
"názvu vycházejícího z aktuálního data a bude používat tuto příponu. Při "
|
||||||
"nahrávání do jiného formátu kontejneru by měla být provedena úprava pravidel."
|
"nahrávání do jiného formátu kontejneru by měla být provedena úprava pravidel."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:42
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:40
|
||||||
msgid "The application icon mode."
|
msgid "The application icon mode."
|
||||||
msgstr "Režim ikon aplikací"
|
msgstr "Režim ikon aplikací"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:43
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:41
|
||||||
msgid ""
|
msgid ""
|
||||||
"Configures how the windows are shown in the switcher. Valid possibilities "
|
"Configures how the windows are shown in the switcher. Valid possibilities "
|
||||||
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
|
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
|
||||||
@@ -331,20 +315,20 @@ msgstr ""
|
|||||||
"only“ (zobrazí náhled okna), „app-icon-only“ (zobrazí pouze ikonu aplikace) "
|
"only“ (zobrazí náhled okna), „app-icon-only“ (zobrazí pouze ikonu aplikace) "
|
||||||
"a „both“ (zobrazí náhled i ikonu)."
|
"a „both“ (zobrazí náhled i ikonu)."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:44
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:42
|
||||||
msgid "Attach modal dialog to the parent window"
|
msgid "Attach modal dialog to the parent window"
|
||||||
msgstr "Připojovat modální dialogová okna k rodičovským oknům"
|
msgstr "Připojovat modální dialogová okna k rodičovským oknům"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:45
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:43
|
||||||
msgid ""
|
msgid ""
|
||||||
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
|
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
|
||||||
msgstr "Tento kíč přepisuje klíč v org.gnome.mutter, když běží GNOME Shell."
|
msgstr "Tento kíč přepisuje klíč v org.gnome.mutter, když běží GNOME Shell."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:46
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:44
|
||||||
msgid "Arrangement of buttons on the titlebar"
|
msgid "Arrangement of buttons on the titlebar"
|
||||||
msgstr "Uspořádání tlačítek v záhlaví"
|
msgstr "Uspořádání tlačítek v záhlaví"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:47
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:45
|
||||||
msgid ""
|
msgid ""
|
||||||
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
|
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
|
||||||
"GNOME Shell."
|
"GNOME Shell."
|
||||||
@@ -352,15 +336,15 @@ msgstr ""
|
|||||||
"Tento kíč přepisuje klíč v org.gnome.desktop.wm.preferences, když běží GNOME "
|
"Tento kíč přepisuje klíč v org.gnome.desktop.wm.preferences, když běží GNOME "
|
||||||
"Shell."
|
"Shell."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:48
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:46
|
||||||
msgid "Enable edge tiling when dropping windows on screen edges"
|
msgid "Enable edge tiling when dropping windows on screen edges"
|
||||||
msgstr "Nechat okna upuštěná při okraji obrazovky vytvářet 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:49
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:47
|
||||||
msgid "Workspaces are managed dynamically"
|
msgid "Workspaces are managed dynamically"
|
||||||
msgstr "Pracovní plochy jsou spravovány dynamicky"
|
msgstr "Pracovní plochy jsou spravovány dynamicky"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:50
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:48
|
||||||
msgid "Workspaces only on primary monitor"
|
msgid "Workspaces only on primary monitor"
|
||||||
msgstr "Pracovní plochy pouze na hlavním monitoru"
|
msgstr "Pracovní plochy pouze na hlavním monitoru"
|
||||||
|
|
||||||
@@ -379,43 +363,50 @@ msgid "Select an extension to configure using the combobox above."
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Pomocí rozbalovacího seznamu výše zvolte rozšíření, které chete nastavit."
|
"Pomocí rozbalovacího seznamu výše zvolte rozšíření, které chete nastavit."
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:405
|
#: ../js/gdm/loginDialog.js:371
|
||||||
msgid "Session…"
|
msgid "Session…"
|
||||||
msgstr "Sezení…"
|
msgstr "Sezení…"
|
||||||
|
|
||||||
#. translators: this message is shown below the user list on the
|
#. translators: this message is shown below the user list on the
|
||||||
#. login screen. It can be activated to reveal an entry for
|
#. login screen. It can be activated to reveal an entry for
|
||||||
#. manually entering the username.
|
#. manually entering the username.
|
||||||
#: ../js/gdm/loginDialog.js:630
|
#: ../js/gdm/loginDialog.js:601
|
||||||
msgid "Not listed?"
|
msgid "Not listed?"
|
||||||
msgstr "Nejste na seznamu?"
|
msgstr "Nejste na seznamu?"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:787 ../js/ui/components/networkAgent.js:137
|
#: ../js/gdm/loginDialog.js:776 ../js/ui/components/networkAgent.js:137
|
||||||
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:376
|
#: ../js/ui/components/polkitAgent.js:161 ../js/ui/endSessionDialog.js:376
|
||||||
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
|
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
|
||||||
#: ../js/ui/status/bluetooth.js:415 ../js/ui/unlockDialog.js:100
|
#: ../js/ui/status/bluetooth.js:415 ../js/ui/unlockDialog.js:96
|
||||||
#: ../js/ui/userMenu.js:938
|
#: ../js/ui/userMenu.js:938
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Zrušit"
|
msgstr "Zrušit"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:803
|
#: ../js/gdm/loginDialog.js:791
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "Sign In"
|
msgid "Sign In"
|
||||||
msgstr "Přihlásit se"
|
msgstr "Přihlásit se"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:803
|
#: ../js/gdm/loginDialog.js:791
|
||||||
msgid "Next"
|
msgid "Next"
|
||||||
msgstr "Následující"
|
msgstr "Následující"
|
||||||
|
|
||||||
|
#. 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 "(např. uživatel nebo %s)"
|
||||||
|
|
||||||
#. TTLS and PEAP are actually much more complicated, but this complication
|
#. TTLS and PEAP are actually much more complicated, but this complication
|
||||||
#. is not visible here since we only care about phase2 authentication
|
#. is not visible here since we only care about phase2 authentication
|
||||||
#. (and don't even care of which one)
|
#. (and don't even care of which one)
|
||||||
#: ../js/gdm/loginDialog.js:918 ../js/ui/components/networkAgent.js:260
|
#: ../js/gdm/loginDialog.js:892 ../js/ui/components/networkAgent.js:260
|
||||||
#: ../js/ui/components/networkAgent.js:278
|
#: ../js/ui/components/networkAgent.js:278
|
||||||
msgid "Username: "
|
msgid "Username: "
|
||||||
msgstr "Uživatelské jméno: "
|
msgstr "Uživatelské jméno: "
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:1174
|
#: ../js/gdm/loginDialog.js:1158
|
||||||
msgid "Login Window"
|
msgid "Login Window"
|
||||||
msgstr "Přihlašovací okno"
|
msgstr "Přihlašovací okno"
|
||||||
|
|
||||||
@@ -438,21 +429,16 @@ msgstr "Restartovat"
|
|||||||
msgid "Power Off"
|
msgid "Power Off"
|
||||||
msgstr "Vypnout"
|
msgstr "Vypnout"
|
||||||
|
|
||||||
#: ../js/gdm/util.js:249
|
#: ../js/gdm/util.js:247
|
||||||
msgid "Authentication error"
|
msgid "Authentication error"
|
||||||
msgstr "Chyba ověření"
|
msgstr "Chyba ověření"
|
||||||
|
|
||||||
#. Translators: this message is shown below the password entry field
|
#. Translators: this message is shown below the password entry field
|
||||||
#. to indicate the user can swipe their finger instead
|
#. to indicate the user can swipe their finger instead
|
||||||
#: ../js/gdm/util.js:366
|
#: ../js/gdm/util.js:364
|
||||||
msgid "(or swipe finger)"
|
msgid "(or swipe finger)"
|
||||||
msgstr "(nebo otiskněte prst)"
|
msgstr "(nebo otiskněte prst)"
|
||||||
|
|
||||||
#: ../js/gdm/util.js:391
|
|
||||||
#, c-format
|
|
||||||
msgid "(e.g., user or %s)"
|
|
||||||
msgstr "(např. uživatel nebo %s)"
|
|
||||||
|
|
||||||
#: ../js/misc/util.js:97
|
#: ../js/misc/util.js:97
|
||||||
msgid "Command not found"
|
msgid "Command not found"
|
||||||
msgstr "Příkaz nenalezen"
|
msgstr "Příkaz nenalezen"
|
||||||
@@ -468,23 +454,23 @@ msgstr "Nelze analyzovat příkaz:"
|
|||||||
msgid "Execution of '%s' failed:"
|
msgid "Execution of '%s' failed:"
|
||||||
msgstr "Vykonání „%s“ selhalo:"
|
msgstr "Vykonání „%s“ selhalo:"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:351
|
#: ../js/ui/appDisplay.js:361
|
||||||
msgid "Frequent"
|
msgid "Frequent"
|
||||||
msgstr "Časté"
|
msgstr "Časté"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:358
|
#: ../js/ui/appDisplay.js:368
|
||||||
msgid "All"
|
msgid "All"
|
||||||
msgstr "Všechny"
|
msgstr "Všechny"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:916
|
#: ../js/ui/appDisplay.js:960
|
||||||
msgid "New Window"
|
msgid "New Window"
|
||||||
msgstr "Nové okno"
|
msgstr "Nové okno"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:919 ../js/ui/dash.js:284
|
#: ../js/ui/appDisplay.js:963 ../js/ui/dash.js:284
|
||||||
msgid "Remove from Favorites"
|
msgid "Remove from Favorites"
|
||||||
msgstr "Odstranit z oblíbených"
|
msgstr "Odstranit z oblíbených"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:920
|
#: ../js/ui/appDisplay.js:964
|
||||||
msgid "Add to Favorites"
|
msgid "Add to Favorites"
|
||||||
msgstr "Přidat mezi oblíbené"
|
msgstr "Přidat mezi oblíbené"
|
||||||
|
|
||||||
@@ -623,35 +609,35 @@ msgid "S"
|
|||||||
msgstr "So"
|
msgstr "So"
|
||||||
|
|
||||||
#. Translators: Text to show if there are no events
|
#. Translators: Text to show if there are no events
|
||||||
#: ../js/ui/calendar.js:720
|
#: ../js/ui/calendar.js:735
|
||||||
msgid "Nothing Scheduled"
|
msgid "Nothing Scheduled"
|
||||||
msgstr "Nic nenaplánováno"
|
msgstr "Nic nenaplánováno"
|
||||||
|
|
||||||
#. Translators: Shown on calendar heading when selected day occurs on current year
|
#. Translators: Shown on calendar heading when selected day occurs on current year
|
||||||
#: ../js/ui/calendar.js:736
|
#: ../js/ui/calendar.js:751
|
||||||
msgctxt "calendar heading"
|
msgctxt "calendar heading"
|
||||||
msgid "%A, %B %d"
|
msgid "%A, %B %d"
|
||||||
msgstr "%A, %e. %B"
|
msgstr "%A, %e. %B"
|
||||||
|
|
||||||
#. Translators: Shown on calendar heading when selected day occurs on different year
|
#. Translators: Shown on calendar heading when selected day occurs on different year
|
||||||
#: ../js/ui/calendar.js:739
|
#: ../js/ui/calendar.js:754
|
||||||
msgctxt "calendar heading"
|
msgctxt "calendar heading"
|
||||||
msgid "%A, %B %d, %Y"
|
msgid "%A, %B %d, %Y"
|
||||||
msgstr "%A, %e. %B %Y"
|
msgstr "%A, %e. %B %Y"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:749
|
#: ../js/ui/calendar.js:764
|
||||||
msgid "Today"
|
msgid "Today"
|
||||||
msgstr "Dnes"
|
msgstr "Dnes"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:753
|
#: ../js/ui/calendar.js:768
|
||||||
msgid "Tomorrow"
|
msgid "Tomorrow"
|
||||||
msgstr "Zítra"
|
msgstr "Zítra"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:764
|
#: ../js/ui/calendar.js:779
|
||||||
msgid "This week"
|
msgid "This week"
|
||||||
msgstr "Tento týden"
|
msgstr "Tento týden"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:772
|
#: ../js/ui/calendar.js:787
|
||||||
msgid "Next week"
|
msgid "Next week"
|
||||||
msgstr "Následující týden"
|
msgstr "Následující týden"
|
||||||
|
|
||||||
@@ -676,11 +662,11 @@ msgstr "Otevřít s %s"
|
|||||||
msgid "Eject"
|
msgid "Eject"
|
||||||
msgstr "Vysunout"
|
msgstr "Vysunout"
|
||||||
|
|
||||||
#: ../js/ui/components/keyring.js:82 ../js/ui/components/polkitAgent.js:268
|
#: ../js/ui/components/keyring.js:88 ../js/ui/components/polkitAgent.js:280
|
||||||
msgid "Password:"
|
msgid "Password:"
|
||||||
msgstr "Heslo:"
|
msgstr "Heslo:"
|
||||||
|
|
||||||
#: ../js/ui/components/keyring.js:101
|
#: ../js/ui/components/keyring.js:107
|
||||||
msgid "Type again:"
|
msgid "Type again:"
|
||||||
msgstr "Napište znovu:"
|
msgstr "Napište znovu:"
|
||||||
|
|
||||||
@@ -760,15 +746,15 @@ msgstr "Heslo k mobilní širokopásmové síti"
|
|||||||
msgid "A password is required to connect to '%s'."
|
msgid "A password is required to connect to '%s'."
|
||||||
msgstr "Pro připojení k „%s“ je vyžadováno heslo."
|
msgstr "Pro připojení k „%s“ je vyžadováno heslo."
|
||||||
|
|
||||||
#: ../js/ui/components/polkitAgent.js:55
|
#: ../js/ui/components/polkitAgent.js:54
|
||||||
msgid "Authentication Required"
|
msgid "Authentication Required"
|
||||||
msgstr "Je vyžadováno ověření"
|
msgstr "Je vyžadováno ověření"
|
||||||
|
|
||||||
#: ../js/ui/components/polkitAgent.js:93
|
#: ../js/ui/components/polkitAgent.js:92
|
||||||
msgid "Administrator"
|
msgid "Administrator"
|
||||||
msgstr "Správce"
|
msgstr "Správce"
|
||||||
|
|
||||||
#: ../js/ui/components/polkitAgent.js:165
|
#: ../js/ui/components/polkitAgent.js:170
|
||||||
msgid "Authenticate"
|
msgid "Authenticate"
|
||||||
msgstr "Ověřit"
|
msgstr "Ověřit"
|
||||||
|
|
||||||
@@ -776,7 +762,7 @@ msgstr "Ověřit"
|
|||||||
#. * requested authentication was not gained; this can happen
|
#. * requested authentication was not gained; this can happen
|
||||||
#. * because of an authentication error (like invalid password),
|
#. * because of an authentication error (like invalid password),
|
||||||
#. * for instance.
|
#. * for instance.
|
||||||
#: ../js/ui/components/polkitAgent.js:256 ../js/ui/shellMountOperation.js:383
|
#: ../js/ui/components/polkitAgent.js:266 ../js/ui/shellMountOperation.js:383
|
||||||
msgid "Sorry, that didn't work. Please try again."
|
msgid "Sorry, that didn't work. Please try again."
|
||||||
msgstr "Ověření bohužel nebylo úspěšné. Zkuste to prosím znovu."
|
msgstr "Ověření bohužel nebylo úspěšné. Zkuste to prosím znovu."
|
||||||
|
|
||||||
@@ -1039,15 +1025,15 @@ msgstr "Zobrazit aplikace"
|
|||||||
msgid "Dash"
|
msgid "Dash"
|
||||||
msgstr "Oblíbené"
|
msgstr "Oblíbené"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:91
|
#: ../js/ui/dateMenu.js:86
|
||||||
msgid "Open Calendar"
|
msgid "Open Calendar"
|
||||||
msgstr "Otevřít kalendář"
|
msgstr "Otevřít kalendář"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:96
|
#: ../js/ui/dateMenu.js:90
|
||||||
msgid "Open Clocks"
|
msgid "Open Clocks"
|
||||||
msgstr "Otevřít Hodiny"
|
msgstr "Otevřít Hodiny"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:105
|
#: ../js/ui/dateMenu.js:97
|
||||||
msgid "Date & Time Settings"
|
msgid "Date & Time Settings"
|
||||||
msgstr "Nastavení data a času"
|
msgstr "Nastavení data a času"
|
||||||
|
|
||||||
@@ -1055,7 +1041,7 @@ msgstr "Nastavení data a času"
|
|||||||
#. Translators: This is the date format to use when the calendar popup is
|
#. Translators: This is the date format to use when the calendar popup is
|
||||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||||
#.
|
#.
|
||||||
#: ../js/ui/dateMenu.js:215
|
#: ../js/ui/dateMenu.js:208
|
||||||
msgid "%A %B %e, %Y"
|
msgid "%A %B %e, %Y"
|
||||||
msgstr "%A, %e. %B, %Y"
|
msgstr "%A, %e. %B, %Y"
|
||||||
|
|
||||||
@@ -1161,56 +1147,56 @@ msgstr "Instalovat"
|
|||||||
msgid "Download and install '%s' from extensions.gnome.org?"
|
msgid "Download and install '%s' from extensions.gnome.org?"
|
||||||
msgstr "Stáhnout a nainstalovat „%s“ z extensions.gnome.org?"
|
msgstr "Stáhnout a nainstalovat „%s“ z extensions.gnome.org?"
|
||||||
|
|
||||||
#: ../js/ui/keyboard.js:619 ../js/ui/status/keyboard.js:314
|
#: ../js/ui/keyboard.js:619 ../js/ui/status/keyboard.js:333
|
||||||
#: ../js/ui/status/power.js:211
|
#: ../js/ui/status/power.js:211
|
||||||
msgid "Keyboard"
|
msgid "Keyboard"
|
||||||
msgstr "Klávesnice"
|
msgstr "Klávesnice"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:693
|
#: ../js/ui/lookingGlass.js:689
|
||||||
msgid "No extensions installed"
|
msgid "No extensions installed"
|
||||||
msgstr "Nejsou nainstalována žádná rozšíření"
|
msgstr "Nejsou nainstalována žádná rozšíření"
|
||||||
|
|
||||||
#. Translators: argument is an extension UUID.
|
#. Translators: argument is an extension UUID.
|
||||||
#: ../js/ui/lookingGlass.js:747
|
#: ../js/ui/lookingGlass.js:743
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s has not emitted any errors."
|
msgid "%s has not emitted any errors."
|
||||||
msgstr "Rozšíření %s nevyvolalo žádné chyby."
|
msgstr "Rozšíření %s nevyvolalo žádné chyby."
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:753
|
#: ../js/ui/lookingGlass.js:749
|
||||||
msgid "Hide Errors"
|
msgid "Hide Errors"
|
||||||
msgstr "Skrývat chyby"
|
msgstr "Skrývat chyby"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:757 ../js/ui/lookingGlass.js:817
|
#: ../js/ui/lookingGlass.js:753 ../js/ui/lookingGlass.js:813
|
||||||
msgid "Show Errors"
|
msgid "Show Errors"
|
||||||
msgstr "Zobrazovat chyby"
|
msgstr "Zobrazovat chyby"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:766
|
#: ../js/ui/lookingGlass.js:762
|
||||||
msgid "Enabled"
|
msgid "Enabled"
|
||||||
msgstr "Povoleno"
|
msgstr "Povoleno"
|
||||||
|
|
||||||
#. translators:
|
#. translators:
|
||||||
#. * The device has been disabled
|
#. * The device has been disabled
|
||||||
#: ../js/ui/lookingGlass.js:769 ../src/gvc/gvc-mixer-control.c:1830
|
#: ../js/ui/lookingGlass.js:765 ../src/gvc/gvc-mixer-control.c:1830
|
||||||
msgid "Disabled"
|
msgid "Disabled"
|
||||||
msgstr "Zakázáno"
|
msgstr "Zakázáno"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:771
|
#: ../js/ui/lookingGlass.js:767
|
||||||
msgid "Error"
|
msgid "Error"
|
||||||
msgstr "Chyba"
|
msgstr "Chyba"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:773
|
#: ../js/ui/lookingGlass.js:769
|
||||||
msgid "Out of date"
|
msgid "Out of date"
|
||||||
msgstr "Neaktuální"
|
msgstr "Neaktuální"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:775
|
#: ../js/ui/lookingGlass.js:771
|
||||||
msgid "Downloading"
|
msgid "Downloading"
|
||||||
msgstr "Stahování"
|
msgstr "Stahování"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:799
|
#: ../js/ui/lookingGlass.js:795
|
||||||
msgid "View Source"
|
msgid "View Source"
|
||||||
msgstr "Zobrazit zdroj"
|
msgstr "Zobrazit zdroj"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:808
|
#: ../js/ui/lookingGlass.js:804
|
||||||
msgid "Web Page"
|
msgid "Web Page"
|
||||||
msgstr "Webová stránka"
|
msgstr "Webová stránka"
|
||||||
|
|
||||||
@@ -1230,15 +1216,15 @@ msgstr "Vymazat zprávy"
|
|||||||
msgid "Notification Settings"
|
msgid "Notification Settings"
|
||||||
msgstr "Nastavení upozornění"
|
msgstr "Nastavení upozornění"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1710
|
#: ../js/ui/messageTray.js:1707
|
||||||
msgid "No Messages"
|
msgid "No Messages"
|
||||||
msgstr "Žádné zprávy"
|
msgstr "Žádné zprávy"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1783
|
#: ../js/ui/messageTray.js:1780
|
||||||
msgid "Message Tray"
|
msgid "Message Tray"
|
||||||
msgstr "Lišta zpráv"
|
msgstr "Lišta zpráv"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:2801
|
#: ../js/ui/messageTray.js:2805
|
||||||
msgid "System Information"
|
msgid "System Information"
|
||||||
msgstr "Informace o systému"
|
msgstr "Informace o systému"
|
||||||
|
|
||||||
@@ -1247,7 +1233,7 @@ msgctxt "program"
|
|||||||
msgid "Unknown"
|
msgid "Unknown"
|
||||||
msgstr "Neznámé"
|
msgstr "Neznámé"
|
||||||
|
|
||||||
#: ../js/ui/overviewControls.js:472 ../js/ui/screenShield.js:149
|
#: ../js/ui/overviewControls.js:472 ../js/ui/screenShield.js:150
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d new message"
|
msgid "%d new message"
|
||||||
msgid_plural "%d new messages"
|
msgid_plural "%d new messages"
|
||||||
@@ -1267,17 +1253,17 @@ msgstr "Přehled"
|
|||||||
#. in the search entry when no search is
|
#. in the search entry when no search is
|
||||||
#. active; it should not exceed ~30
|
#. active; it should not exceed ~30
|
||||||
#. characters.
|
#. characters.
|
||||||
#: ../js/ui/overview.js:260
|
#: ../js/ui/overview.js:258
|
||||||
msgid "Type to search…"
|
msgid "Type to search…"
|
||||||
msgstr "Vyhledávejte psaním…"
|
msgstr "Vyhledávejte psaním…"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:641
|
#: ../js/ui/panel.js:642
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
msgstr "Ukončit"
|
msgstr "Ukončit"
|
||||||
|
|
||||||
#. Translators: If there is no suitable word for "Activities"
|
#. Translators: If there is no suitable word for "Activities"
|
||||||
#. in your language, you can use the word for "Overview".
|
#. in your language, you can use the word for "Overview".
|
||||||
#: ../js/ui/panel.js:692
|
#: ../js/ui/panel.js:693
|
||||||
msgid "Activities"
|
msgid "Activities"
|
||||||
msgstr "Činnosti"
|
msgstr "Činnosti"
|
||||||
|
|
||||||
@@ -1290,7 +1276,7 @@ msgstr "Horní lišta"
|
|||||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||||
#. switches containing "◯" and "|"). Other values will
|
#. switches containing "◯" and "|"). Other values will
|
||||||
#. simply result in invisible toggle switches.
|
#. simply result in invisible toggle switches.
|
||||||
#: ../js/ui/popupMenu.js:718
|
#: ../js/ui/popupMenu.js:738
|
||||||
msgid "toggle-switch-us"
|
msgid "toggle-switch-us"
|
||||||
msgstr "toggle-switch-intl"
|
msgstr "toggle-switch-intl"
|
||||||
|
|
||||||
@@ -1304,11 +1290,11 @@ msgstr "Zavřít"
|
|||||||
|
|
||||||
#. Translators: This is a time format for a date in
|
#. Translators: This is a time format for a date in
|
||||||
#. long format
|
#. long format
|
||||||
#: ../js/ui/screenShield.js:86
|
#: ../js/ui/screenShield.js:87
|
||||||
msgid "%A, %B %d"
|
msgid "%A, %B %d"
|
||||||
msgstr "%A, %e. %B"
|
msgstr "%A, %e. %B"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:151
|
#: ../js/ui/screenShield.js:152
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d new notification"
|
msgid "%d new notification"
|
||||||
msgid_plural "%d new notifications"
|
msgid_plural "%d new notifications"
|
||||||
@@ -1316,11 +1302,11 @@ msgstr[0] "%d nové upozornění"
|
|||||||
msgstr[1] "%d nová upozornění"
|
msgstr[1] "%d nová upozornění"
|
||||||
msgstr[2] "%d nových upozornění"
|
msgstr[2] "%d nových upozornění"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:438 ../js/ui/userMenu.js:807
|
#: ../js/ui/screenShield.js:449 ../js/ui/userMenu.js:807
|
||||||
msgid "Lock"
|
msgid "Lock"
|
||||||
msgstr "Uzamknout"
|
msgstr "Uzamknout"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:641
|
#: ../js/ui/screenShield.js:652
|
||||||
msgid "GNOME needs to lock the screen"
|
msgid "GNOME needs to lock the screen"
|
||||||
msgstr "GNOME potřebuje uzamknout obrazovku"
|
msgstr "GNOME potřebuje uzamknout obrazovku"
|
||||||
|
|
||||||
@@ -1331,11 +1317,11 @@ msgstr "GNOME potřebuje uzamknout obrazovku"
|
|||||||
#.
|
#.
|
||||||
#. XXX: another option is to kick the user into the gdm login
|
#. XXX: another option is to kick the user into the gdm login
|
||||||
#. screen, where we're not affected by grabs
|
#. screen, where we're not affected by grabs
|
||||||
#: ../js/ui/screenShield.js:762 ../js/ui/screenShield.js:1198
|
#: ../js/ui/screenShield.js:773 ../js/ui/screenShield.js:1213
|
||||||
msgid "Unable to lock"
|
msgid "Unable to lock"
|
||||||
msgstr "Nelze uzamknout obrazovku"
|
msgstr "Nelze uzamknout obrazovku"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:763 ../js/ui/screenShield.js:1199
|
#: ../js/ui/screenShield.js:774 ../js/ui/screenShield.js:1214
|
||||||
msgid "Lock was blocked by an application"
|
msgid "Lock was blocked by an application"
|
||||||
msgstr "Zamknutí bylo zablokováno některou z aplikací"
|
msgstr "Zamknutí bylo zablokováno některou z aplikací"
|
||||||
|
|
||||||
@@ -1347,19 +1333,19 @@ msgstr "Hledá se…"
|
|||||||
msgid "No results."
|
msgid "No results."
|
||||||
msgstr "Žádné výsledky."
|
msgstr "Žádné výsledky."
|
||||||
|
|
||||||
#: ../js/ui/shellEntry.js:29
|
#: ../js/ui/shellEntry.js:27
|
||||||
msgid "Copy"
|
msgid "Copy"
|
||||||
msgstr "Kopírovat"
|
msgstr "Kopírovat"
|
||||||
|
|
||||||
#: ../js/ui/shellEntry.js:34
|
#: ../js/ui/shellEntry.js:32
|
||||||
msgid "Paste"
|
msgid "Paste"
|
||||||
msgstr "Vložit"
|
msgstr "Vložit"
|
||||||
|
|
||||||
#: ../js/ui/shellEntry.js:101
|
#: ../js/ui/shellEntry.js:99
|
||||||
msgid "Show Text"
|
msgid "Show Text"
|
||||||
msgstr "Zobrazit text"
|
msgstr "Zobrazit text"
|
||||||
|
|
||||||
#: ../js/ui/shellEntry.js:103
|
#: ../js/ui/shellEntry.js:101
|
||||||
msgid "Hide Text"
|
msgid "Hide Text"
|
||||||
msgstr "Skrýt text"
|
msgstr "Skrýt text"
|
||||||
|
|
||||||
@@ -1371,7 +1357,7 @@ msgstr "Heslo"
|
|||||||
msgid "Remember Password"
|
msgid "Remember Password"
|
||||||
msgstr "Pamatovat si heslo"
|
msgstr "Pamatovat si heslo"
|
||||||
|
|
||||||
#: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:114
|
#: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:109
|
||||||
msgid "Unlock"
|
msgid "Unlock"
|
||||||
msgstr "Odemknout"
|
msgstr "Odemknout"
|
||||||
|
|
||||||
@@ -1426,7 +1412,7 @@ msgstr "Styl velkého textu"
|
|||||||
#: ../js/ui/status/bluetooth.js:28 ../js/ui/status/bluetooth.js:32
|
#: ../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:289 ../js/ui/status/bluetooth.js:321
|
||||||
#: ../js/ui/status/bluetooth.js:357 ../js/ui/status/bluetooth.js:388
|
#: ../js/ui/status/bluetooth.js:357 ../js/ui/status/bluetooth.js:388
|
||||||
#: ../js/ui/status/network.js:761
|
#: ../js/ui/status/network.js:739
|
||||||
msgid "Bluetooth"
|
msgid "Bluetooth"
|
||||||
msgstr "Bluetooth"
|
msgstr "Bluetooth"
|
||||||
|
|
||||||
@@ -1447,7 +1433,7 @@ msgid "Bluetooth Settings"
|
|||||||
msgstr "Nastavit Bluetooth"
|
msgstr "Nastavit Bluetooth"
|
||||||
|
|
||||||
#. TRANSLATORS: this means that bluetooth was disabled by hardware rfkill
|
#. TRANSLATORS: this means that bluetooth was disabled by hardware rfkill
|
||||||
#: ../js/ui/status/bluetooth.js:104 ../js/ui/status/network.js:149
|
#: ../js/ui/status/bluetooth.js:104 ../js/ui/status/network.js:142
|
||||||
msgid "hardware disabled"
|
msgid "hardware disabled"
|
||||||
msgstr "zařízení zakázáno"
|
msgstr "zařízení zakázáno"
|
||||||
|
|
||||||
@@ -1455,12 +1441,12 @@ msgstr "zařízení zakázáno"
|
|||||||
msgid "Connection"
|
msgid "Connection"
|
||||||
msgstr "Připojení"
|
msgstr "Připojení"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:208 ../js/ui/status/network.js:426
|
#: ../js/ui/status/bluetooth.js:208 ../js/ui/status/network.js:404
|
||||||
msgid "disconnecting..."
|
msgid "disconnecting..."
|
||||||
msgstr "odpojování…"
|
msgstr "odpojování…"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:221 ../js/ui/status/network.js:432
|
#: ../js/ui/status/bluetooth.js:221 ../js/ui/status/network.js:410
|
||||||
#: ../js/ui/status/network.js:1417
|
#: ../js/ui/status/network.js:1343
|
||||||
msgid "connecting..."
|
msgid "connecting..."
|
||||||
msgstr "připojování…"
|
msgstr "připojování…"
|
||||||
|
|
||||||
@@ -1515,8 +1501,9 @@ msgstr "Zařízení %s se chce spárovat s tímto počítačem"
|
|||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:366
|
#: ../js/ui/status/bluetooth.js:366
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Please confirm whether the PIN '%06d' matches the one on the device."
|
msgid ""
|
||||||
msgstr "Ověřte prosím, zda PIN „%06d“ odpovídá tomu na zařízení."
|
"Please confirm whether the Passkey '%06d' matches the one on the device."
|
||||||
|
msgstr "Ověřte prosím, zda klíč „%06d“ odpovídá tomu na zařízení."
|
||||||
|
|
||||||
#. Translators: this is the verb, not the noun
|
#. Translators: this is the verb, not the noun
|
||||||
#: ../js/ui/status/bluetooth.js:369
|
#: ../js/ui/status/bluetooth.js:369
|
||||||
@@ -1540,11 +1527,11 @@ msgstr "Zadejte prosím PIN, který je uveden na zařízení."
|
|||||||
msgid "OK"
|
msgid "OK"
|
||||||
msgstr "Budiž"
|
msgstr "Budiž"
|
||||||
|
|
||||||
#: ../js/ui/status/keyboard.js:368
|
#: ../js/ui/status/keyboard.js:396
|
||||||
msgid "Show Keyboard Layout"
|
msgid "Show Keyboard Layout"
|
||||||
msgstr "Zobrazit rozložení klávesnice"
|
msgstr "Zobrazit rozložení klávesnice"
|
||||||
|
|
||||||
#: ../js/ui/status/keyboard.js:373
|
#: ../js/ui/status/keyboard.js:401
|
||||||
msgid "Region & Language Settings"
|
msgid "Region & Language Settings"
|
||||||
msgstr "Místní a jazyková nastavení"
|
msgstr "Místní a jazyková nastavení"
|
||||||
|
|
||||||
@@ -1552,91 +1539,91 @@ msgstr "Místní a jazyková nastavení"
|
|||||||
msgid "Volume, network, battery"
|
msgid "Volume, network, battery"
|
||||||
msgstr "Hlasitost, síť, baterie"
|
msgstr "Hlasitost, síť, baterie"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:82
|
#: ../js/ui/status/network.js:75
|
||||||
msgid "<unknown>"
|
msgid "<unknown>"
|
||||||
msgstr "<neznámé>"
|
msgstr "<neznámé>"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:134
|
#: ../js/ui/status/network.js:127
|
||||||
msgid "Wi-Fi"
|
msgid "Wi-Fi"
|
||||||
msgstr "Wi-Fi"
|
msgstr "Wi-Fi"
|
||||||
|
|
||||||
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
|
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
|
||||||
#: ../js/ui/status/network.js:171
|
#: ../js/ui/status/network.js:164
|
||||||
msgid "disabled"
|
msgid "disabled"
|
||||||
msgstr "zakázáno"
|
msgstr "zakázáno"
|
||||||
|
|
||||||
#. Translators: this is for network devices that are physically present but are not
|
#. Translators: this is for network devices that are physically present but are not
|
||||||
#. under NetworkManager's control (and thus cannot be used in the menu)
|
#. under NetworkManager's control (and thus cannot be used in the menu)
|
||||||
#: ../js/ui/status/network.js:424
|
#: ../js/ui/status/network.js:402
|
||||||
msgid "unmanaged"
|
msgid "unmanaged"
|
||||||
msgstr "nespravováno"
|
msgstr "nespravováno"
|
||||||
|
|
||||||
#. Translators: this is for network connections that require some kind of key or password
|
#. Translators: this is for network connections that require some kind of key or password
|
||||||
#: ../js/ui/status/network.js:435 ../js/ui/status/network.js:1420
|
#: ../js/ui/status/network.js:413 ../js/ui/status/network.js:1346
|
||||||
msgid "authentication required"
|
msgid "authentication required"
|
||||||
msgstr "je vyžadováno ověření"
|
msgstr "je vyžadováno ověření"
|
||||||
|
|
||||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||||
#. module, which is missing
|
#. module, which is missing
|
||||||
#: ../js/ui/status/network.js:445
|
#: ../js/ui/status/network.js:423
|
||||||
msgid "firmware missing"
|
msgid "firmware missing"
|
||||||
msgstr "nedostupný firmware"
|
msgstr "nedostupný firmware"
|
||||||
|
|
||||||
#. Translators: this is for wired network devices that are physically disconnected
|
#. Translators: this is for wired network devices that are physically disconnected
|
||||||
#: ../js/ui/status/network.js:452
|
#: ../js/ui/status/network.js:430
|
||||||
msgid "cable unplugged"
|
msgid "cable unplugged"
|
||||||
msgstr "kabel byl odpojen"
|
msgstr "kabel byl odpojen"
|
||||||
|
|
||||||
#. Translators: this is for a network device that cannot be activated (for example it
|
#. Translators: this is for a network device that cannot be activated (for example it
|
||||||
#. is disabled by rfkill, or it has no coverage
|
#. is disabled by rfkill, or it has no coverage
|
||||||
#: ../js/ui/status/network.js:457
|
#: ../js/ui/status/network.js:435
|
||||||
msgid "unavailable"
|
msgid "unavailable"
|
||||||
msgstr "nedostupné"
|
msgstr "nedostupné"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:459 ../js/ui/status/network.js:1422
|
#: ../js/ui/status/network.js:437 ../js/ui/status/network.js:1348
|
||||||
msgid "connection failed"
|
msgid "connection failed"
|
||||||
msgstr "připojení selhalo"
|
msgstr "připojení selhalo"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:512 ../js/ui/status/network.js:1306
|
#: ../js/ui/status/network.js:490 ../js/ui/status/network.js:1236
|
||||||
#: ../js/ui/status/network.js:1498
|
#: ../js/ui/status/network.js:1424
|
||||||
msgid "More…"
|
msgid "More…"
|
||||||
msgstr "Další…"
|
msgstr "Další…"
|
||||||
|
|
||||||
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
||||||
#. and we cannot access its settings (including the name)
|
#. and we cannot access its settings (including the name)
|
||||||
#: ../js/ui/status/network.js:540 ../js/ui/status/network.js:1261
|
#: ../js/ui/status/network.js:518 ../js/ui/status/network.js:1191
|
||||||
msgid "Connected (private)"
|
msgid "Connected (private)"
|
||||||
msgstr "Připojení (soukromé)"
|
msgstr "Připojení (soukromé)"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:619
|
#: ../js/ui/status/network.js:597
|
||||||
msgid "Wired"
|
msgid "Wired"
|
||||||
msgstr "Drátová"
|
msgstr "Drátová"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:633
|
#: ../js/ui/status/network.js:611
|
||||||
msgid "Mobile broadband"
|
msgid "Mobile broadband"
|
||||||
msgstr "Mobilní širokopásmová"
|
msgstr "Mobilní širokopásmová"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1596
|
#: ../js/ui/status/network.js:1522
|
||||||
msgid "Enable networking"
|
msgid "Enable networking"
|
||||||
msgstr "Povolit síť"
|
msgstr "Povolit síť"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1657
|
#: ../js/ui/status/network.js:1583
|
||||||
msgid "Network Settings"
|
msgid "Network Settings"
|
||||||
msgstr "Nastavení sítě"
|
msgstr "Nastavení sítě"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1674
|
#: ../js/ui/status/network.js:1600
|
||||||
msgid "Network Manager"
|
msgid "Network Manager"
|
||||||
msgstr "Network Manager"
|
msgstr "Network Manager"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1764
|
#: ../js/ui/status/network.js:1690
|
||||||
msgid "Connection failed"
|
msgid "Connection failed"
|
||||||
msgstr "Připojení selhalo"
|
msgstr "Připojení selhalo"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1765
|
#: ../js/ui/status/network.js:1691
|
||||||
msgid "Activation of network connection failed"
|
msgid "Activation of network connection failed"
|
||||||
msgstr "Aktivace síťového připojení selhala"
|
msgstr "Aktivace síťového připojení selhala"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:2123
|
#: ../js/ui/status/network.js:2047
|
||||||
msgid "Networking is disabled"
|
msgid "Networking is disabled"
|
||||||
msgstr "Síť je zakázána"
|
msgstr "Síť je zakázána"
|
||||||
|
|
||||||
@@ -1754,11 +1741,11 @@ msgstr "Hlasitost"
|
|||||||
msgid "Microphone"
|
msgid "Microphone"
|
||||||
msgstr "Mikrofon"
|
msgstr "Mikrofon"
|
||||||
|
|
||||||
#: ../js/ui/unlockDialog.js:125
|
#: ../js/ui/unlockDialog.js:120
|
||||||
msgid "Log in as another user"
|
msgid "Log in as another user"
|
||||||
msgstr "Přihlásit se jako jiný uživatel"
|
msgstr "Přihlásit se jako jiný uživatel"
|
||||||
|
|
||||||
#: ../js/ui/unlockDialog.js:146
|
#: ../js/ui/unlockDialog.js:141
|
||||||
msgid "Unlock Window"
|
msgid "Unlock Window"
|
||||||
msgstr "Odemykací okno"
|
msgstr "Odemykací okno"
|
||||||
|
|
||||||
@@ -1885,23 +1872,23 @@ msgstr[0] "%u vstup"
|
|||||||
msgstr[1] "%u vstupy"
|
msgstr[1] "%u vstupy"
|
||||||
msgstr[2] "%u vstupů"
|
msgstr[2] "%u vstupů"
|
||||||
|
|
||||||
#: ../src/gvc/gvc-mixer-control.c:2371
|
#: ../src/gvc/gvc-mixer-control.c:2373
|
||||||
msgid "System Sounds"
|
msgid "System Sounds"
|
||||||
msgstr "Systémové zvuky"
|
msgstr "Systémové zvuky"
|
||||||
|
|
||||||
#: ../src/main.c:347
|
#: ../src/main.c:372
|
||||||
msgid "Print version"
|
msgid "Print version"
|
||||||
msgstr "Vypsat verzi"
|
msgstr "Vypsat verzi"
|
||||||
|
|
||||||
#: ../src/main.c:353
|
#: ../src/main.c:378
|
||||||
msgid "Mode used by GDM for login screen"
|
msgid "Mode used by GDM for login screen"
|
||||||
msgstr "Režim použitý GDM pro přihlašovací obrazovku"
|
msgstr "Režim použitý GDM pro přihlašovací obrazovku"
|
||||||
|
|
||||||
#: ../src/main.c:359
|
#: ../src/main.c:384
|
||||||
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
|
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
|
||||||
msgstr "Použít pro přihlašovací obrazovku určitý mód, např. „gdm“."
|
msgstr "Použít pro přihlašovací obrazovku určitý mód, např. „gdm“."
|
||||||
|
|
||||||
#: ../src/main.c:365
|
#: ../src/main.c:390
|
||||||
msgid "List possible modes"
|
msgid "List possible modes"
|
||||||
msgstr "Vypsat možné režimy"
|
msgstr "Vypsat možné režimy"
|
||||||
|
|
||||||
@@ -1910,11 +1897,11 @@ msgstr "Vypsat možné režimy"
|
|||||||
msgid "Failed to launch '%s'"
|
msgid "Failed to launch '%s'"
|
||||||
msgstr "Nelze spustit „%s“"
|
msgstr "Nelze spustit „%s“"
|
||||||
|
|
||||||
#: ../src/shell-keyring-prompt.c:708
|
#: ../src/shell-keyring-prompt.c:714
|
||||||
msgid "Passwords do not match."
|
msgid "Passwords do not match."
|
||||||
msgstr "Hesla si neodpovídají."
|
msgstr "Hesla si neodpovídají."
|
||||||
|
|
||||||
#: ../src/shell-keyring-prompt.c:716
|
#: ../src/shell-keyring-prompt.c:722
|
||||||
msgid "Password cannot be blank"
|
msgid "Password cannot be blank"
|
||||||
msgstr "Heslo nemůže být prázdné."
|
msgstr "Heslo nemůže být prázdné."
|
||||||
|
|
||||||
|
387
po/tg.po
387
po/tg.po
@@ -8,8 +8,8 @@ msgstr ""
|
|||||||
"Project-Id-Version: Tajik Gnome\n"
|
"Project-Id-Version: Tajik Gnome\n"
|
||||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||||
"shell&keywords=I18N+L10N&component=general\n"
|
"shell&keywords=I18N+L10N&component=general\n"
|
||||||
"POT-Creation-Date: 2013-03-14 18:11+0000\n"
|
"POT-Creation-Date: 2013-05-29 22:58+0000\n"
|
||||||
"PO-Revision-Date: 2013-05-27 18:18+0500\n"
|
"PO-Revision-Date: 2013-05-30 17:27+0500\n"
|
||||||
"Last-Translator: Victor Ibragimov <victor.ibragimov@gmail.com>\n"
|
"Last-Translator: Victor Ibragimov <victor.ibragimov@gmail.com>\n"
|
||||||
"Language-Team: \n"
|
"Language-Team: \n"
|
||||||
"Language: Tajik\n"
|
"Language: Tajik\n"
|
||||||
@@ -40,10 +40,14 @@ msgid "Focus the active notification"
|
|||||||
msgstr "Гузоштани фокус ба огоҳии фаъол"
|
msgstr "Гузоштани фокус ба огоҳии фаъол"
|
||||||
|
|
||||||
#: ../data/50-gnome-shell-system.xml.in.h:4
|
#: ../data/50-gnome-shell-system.xml.in.h:4
|
||||||
|
msgid "Show the overview"
|
||||||
|
msgstr "Намоиш додани хулоса"
|
||||||
|
|
||||||
|
#: ../data/50-gnome-shell-system.xml.in.h:5
|
||||||
msgid "Show all applications"
|
msgid "Show all applications"
|
||||||
msgstr "Намоиш додани ҳамаи барномаҳо"
|
msgstr "Намоиш додани ҳамаи барномаҳо"
|
||||||
|
|
||||||
#: ../data/50-gnome-shell-system.xml.in.h:5
|
#: ../data/50-gnome-shell-system.xml.in.h:6
|
||||||
msgid "Open the application menu"
|
msgid "Open the application menu"
|
||||||
msgstr "Кушодани менюи барномаҳо"
|
msgstr "Кушодани менюи барномаҳо"
|
||||||
|
|
||||||
@@ -96,27 +100,10 @@ msgstr ""
|
|||||||
"таҳрир кунед."
|
"таҳрир кунед."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:5
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:5
|
||||||
msgid "Whether to collect stats about applications usage"
|
|
||||||
msgstr "Ҷамъ кардан ё ҷамъ накардани омор дар бораи истифодабарии барномаҳо"
|
|
||||||
|
|
||||||
#: ../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 ""
|
|
||||||
"Одатан ин восит барномаҳои фаъолро нигоҳдорӣ мекунад, то ин ки барномаҳои аз "
|
|
||||||
"ҳама зиёд истифодашаванда (масалан оғозкунандагон) ҳамеша мавҷуд бошанд. "
|
|
||||||
"Гарчанде ки ин иттилоот махфӣ нигоҳ дошта мешавад, шумо метавонед интихоб "
|
|
||||||
"кунед, ки инро барои сабабҳои махфият ғайрифаъол кунед. Лутфан, ба қайд "
|
|
||||||
"гиред, ки чунин амал иттилооти аллакай захирашударо тоза намекунад."
|
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:7
|
|
||||||
msgid "List of desktop file IDs for favorite applications"
|
msgid "List of desktop file IDs for favorite applications"
|
||||||
msgstr "Рӯйхати рамзҳои ID-и файлҳои мизи корӣ барои барномаҳои дӯстдошта"
|
msgstr "Рӯйхати рамзҳои ID-и файлҳои мизи корӣ барои барномаҳои дӯстдошта"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:8
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:6
|
||||||
msgid ""
|
msgid ""
|
||||||
"The applications corresponding to these identifiers will be displayed in the "
|
"The applications corresponding to these identifiers will be displayed in the "
|
||||||
"favorites area."
|
"favorites area."
|
||||||
@@ -124,11 +111,11 @@ msgstr ""
|
|||||||
"Барномаҳое, ки ба ин идентификаторҳо мувофиқ мебошанд, дар ноҳияи "
|
"Барномаҳое, ки ба ин идентификаторҳо мувофиқ мебошанд, дар ноҳияи "
|
||||||
"баргузидаҳо намоиш дода мешаванд."
|
"баргузидаҳо намоиш дода мешаванд."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:9
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:7
|
||||||
msgid "List of categories that should be displayed as folders"
|
msgid "List of categories that should be displayed as folders"
|
||||||
msgstr "Рӯйхати категорияҳо, ки бояд ҳамчун ҷузвдонҳо намоиш дода шаванд"
|
msgstr "Рӯйхати категорияҳо, ки бояд ҳамчун ҷузвдонҳо намоиш дода шаванд"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:10
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:8
|
||||||
msgid ""
|
msgid ""
|
||||||
"Each category name in this list will be represented as folder in the "
|
"Each category name in this list will be represented as folder in the "
|
||||||
"application view, rather than being displayed inline in the main view."
|
"application view, rather than being displayed inline in the main view."
|
||||||
@@ -136,15 +123,15 @@ msgstr ""
|
|||||||
"Ҳар як номи категория, ки дар ин рӯйхат мавҷуд аст, дар намуди барномаҳо "
|
"Ҳар як номи категория, ки дар ин рӯйхат мавҷуд аст, дар намуди барномаҳо "
|
||||||
"ҳамчун ҷузвдон ифода мешавад, ба ҷойи намоишдиҳии шомил дар намуди асосӣ."
|
"ҳамчун ҷузвдон ифода мешавад, ба ҷойи намоишдиҳии шомил дар намуди асосӣ."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:11
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:9
|
||||||
msgid "History for command (Alt-F2) dialog"
|
msgid "History for command (Alt-F2) dialog"
|
||||||
msgstr "Таърихи равзанаи гуфтугӯи фармон (Alt-F2)"
|
msgstr "Таърихи равзанаи гуфтугӯи фармон (Alt-F2)"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:12
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:10
|
||||||
msgid "History for the looking glass dialog"
|
msgid "History for the looking glass dialog"
|
||||||
msgstr "Таърих барои равзанаи гуфтугӯи оина"
|
msgstr "Таърих барои равзанаи гуфтугӯи оина"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:11
|
||||||
msgid ""
|
msgid ""
|
||||||
"Internally used to store the last IM presence explicitly set by the user. "
|
"Internally used to store the last IM presence explicitly set by the user. "
|
||||||
"The value here is from the TpConnectionPresenceType enumeration."
|
"The value here is from the TpConnectionPresenceType enumeration."
|
||||||
@@ -153,7 +140,7 @@ msgstr ""
|
|||||||
"таври бевосита таъин шудааст, истифода мешавад. Дар ин ҷо қимат аз шумориши "
|
"таври бевосита таъин шудааст, истифода мешавад. Дар ин ҷо қимат аз шумориши "
|
||||||
"TpConnectionPresenceType ба вуҷуд меояд."
|
"TpConnectionPresenceType ба вуҷуд меояд."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:12
|
||||||
msgid ""
|
msgid ""
|
||||||
"Internally used to store the last session presence status for the user. The "
|
"Internally used to store the last session presence status for the user. The "
|
||||||
"value here is from the GsmPresenceStatus enumeration."
|
"value here is from the GsmPresenceStatus enumeration."
|
||||||
@@ -162,11 +149,11 @@ msgstr ""
|
|||||||
"корбар истифода мешавад. Дар ин ҷо қимат аз шумориши GsmPresenceStatus ба "
|
"корбар истифода мешавад. Дар ин ҷо қимат аз шумориши GsmPresenceStatus ба "
|
||||||
"вуҷуд меояд."
|
"вуҷуд меояд."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
|
||||||
msgid "Always show the 'Log out' menuitem in the user menu."
|
msgid "Always show the 'Log out' menuitem in the user menu."
|
||||||
msgstr "Ҳамеша намоиш додани объекти менюи \"Баромадан\" дар менюи корбар."
|
msgstr "Ҳамеша намоиш додани объекти менюи \"Баромадан\" дар менюи корбар."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
|
||||||
msgid ""
|
msgid ""
|
||||||
"This key overrides the automatic hiding of the 'Log out' menuitem in single-"
|
"This key overrides the automatic hiding of the 'Log out' menuitem in single-"
|
||||||
"user, single-session situations."
|
"user, single-session situations."
|
||||||
@@ -174,14 +161,14 @@ msgstr ""
|
|||||||
"Ин калид пинҳонкунии худкори объекти менюи \"Баромадан\"-ро дар вазъиятҳои "
|
"Ин калид пинҳонкунии худкори объекти менюи \"Баромадан\"-ро дар вазъиятҳои "
|
||||||
"корбари ягона ва ҷаласаи ягона бекор мекунад."
|
"корбари ягона ва ҷаласаи ягона бекор мекунад."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
|
||||||
msgid ""
|
msgid ""
|
||||||
"Whether to remember password for mounting encrypted or remote filesystems"
|
"Whether to remember password for mounting encrypted or remote filesystems"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Дар ёд доштан ё дар ёд надоштани парол барои васл кардани системаҳои файлии "
|
"Дар ёд доштан ё дар ёд надоштани парол барои васл кардани системаҳои файлии "
|
||||||
"рамздор ё дурдаст"
|
"рамздор ё дурдаст"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
|
||||||
msgid ""
|
msgid ""
|
||||||
"The shell will request a password when an encrypted device or a remote "
|
"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 "
|
"filesystem is mounted. If the password can be saved for future use a "
|
||||||
@@ -193,32 +180,42 @@ msgstr ""
|
|||||||
"доштани парол\" мавҷуд мешавад. Ин калид ҳолати пешфарзи байрақчаро таъин "
|
"доштани парол\" мавҷуд мешавад. Ин калид ҳолати пешфарзи байрақчаро таъин "
|
||||||
"мекунад."
|
"мекунад."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
|
||||||
msgid "Show the week date in the calendar"
|
msgid "Show the week date in the calendar"
|
||||||
msgstr "Намоиш додани ҳафта дар тақвим"
|
msgstr "Намоиш додани ҳафта дар тақвим"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
|
||||||
msgid "If true, display the ISO week date in the calendar."
|
msgid "If true, display the ISO week date in the calendar."
|
||||||
msgstr "Агар дуруст бошад, санаи ҳафтаи ISO дар тақвим намоиш дода мешавад."
|
msgstr "Агар дуруст бошад, санаи ҳафтаи ISO дар тақвим намоиш дода мешавад."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
|
||||||
msgid "Keybinding to open the application menu"
|
msgid "Keybinding to open the application menu"
|
||||||
msgstr "Тугма барои кушодани менюи барнома"
|
msgstr "Тугма барои кушодани менюи барнома"
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
|
||||||
msgid "Keybinding to open the application menu."
|
msgid "Keybinding to open the application menu."
|
||||||
msgstr "Тугма барои кушодани менюи барнома."
|
msgstr "Тугма барои кушодани менюи барнома."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
|
||||||
msgid "Keybinding to open the \"Show Applications\" view"
|
msgid "Keybinding to open the \"Show Applications\" view"
|
||||||
msgstr "Тугма барои кушодани намуди \"Намоиш додани барномаҳо\""
|
msgstr "Тугма барои кушодани намуди \"Намоиш додани барномаҳо\""
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
|
||||||
msgid ""
|
msgid ""
|
||||||
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
|
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
|
||||||
msgstr ""
|
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 "Тугмабандӣ барои кушодани хулосаи фаъолият."
|
||||||
|
|
||||||
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
|
||||||
msgid "Keybinding to toggle the visibility of the message tray"
|
msgid "Keybinding to toggle the visibility of the message tray"
|
||||||
msgstr "Тугма барои иваз кардани намоёнии қуттии паёмҳо"
|
msgstr "Тугма барои иваз кардани намоёнии қуттии паёмҳо"
|
||||||
@@ -380,44 +377,50 @@ msgstr ""
|
|||||||
"Пасвандеро интихоб кунед, то ин ки бо ҷаъбаи мураккаби боло онро "
|
"Пасвандеро интихоб кунед, то ин ки бо ҷаъбаи мураккаби боло онро "
|
||||||
"конфигуратсия кунед."
|
"конфигуратсия кунед."
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:405
|
#: ../js/gdm/loginDialog.js:371
|
||||||
#| msgid "Session..."
|
|
||||||
msgid "Session…"
|
msgid "Session…"
|
||||||
msgstr "Ҷаласа..."
|
msgstr "Ҷаласа..."
|
||||||
|
|
||||||
#. translators: this message is shown below the user list on the
|
#. translators: this message is shown below the user list on the
|
||||||
#. login screen. It can be activated to reveal an entry for
|
#. login screen. It can be activated to reveal an entry for
|
||||||
#. manually entering the username.
|
#. manually entering the username.
|
||||||
#: ../js/gdm/loginDialog.js:630
|
#: ../js/gdm/loginDialog.js:601
|
||||||
msgid "Not listed?"
|
msgid "Not listed?"
|
||||||
msgstr "Вуҷуд надора?"
|
msgstr "Вуҷуд надора?"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:784 ../js/ui/components/networkAgent.js:137
|
#: ../js/gdm/loginDialog.js:776 ../js/ui/components/networkAgent.js:137
|
||||||
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:375
|
#: ../js/ui/components/polkitAgent.js:161 ../js/ui/endSessionDialog.js:376
|
||||||
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
|
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
|
||||||
#: ../js/ui/status/bluetooth.js:415 ../js/ui/unlockDialog.js:98
|
#: ../js/ui/status/bluetooth.js:415 ../js/ui/unlockDialog.js:96
|
||||||
#: ../js/ui/userMenu.js:938
|
#: ../js/ui/userMenu.js:938
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Бекор кардан"
|
msgstr "Бекор кардан"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:800
|
#: ../js/gdm/loginDialog.js:791
|
||||||
msgctxt "button"
|
msgctxt "button"
|
||||||
msgid "Sign In"
|
msgid "Sign In"
|
||||||
msgstr "Ворид шудан"
|
msgstr "Ворид шудан"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:800
|
#: ../js/gdm/loginDialog.js:791
|
||||||
msgid "Next"
|
msgid "Next"
|
||||||
msgstr "Навбатӣ"
|
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:888
|
||||||
|
#, c-format
|
||||||
|
msgid "(e.g., user or %s)"
|
||||||
|
msgstr "(масалан, корбар ё %s)"
|
||||||
|
|
||||||
#. TTLS and PEAP are actually much more complicated, but this complication
|
#. TTLS and PEAP are actually much more complicated, but this complication
|
||||||
#. is not visible here since we only care about phase2 authentication
|
#. is not visible here since we only care about phase2 authentication
|
||||||
#. (and don't even care of which one)
|
#. (and don't even care of which one)
|
||||||
#: ../js/gdm/loginDialog.js:915 ../js/ui/components/networkAgent.js:260
|
#: ../js/gdm/loginDialog.js:892 ../js/ui/components/networkAgent.js:260
|
||||||
#: ../js/ui/components/networkAgent.js:278
|
#: ../js/ui/components/networkAgent.js:278
|
||||||
msgid "Username: "
|
msgid "Username: "
|
||||||
msgstr "Номи корбар:"
|
msgstr "Номи корбар:"
|
||||||
|
|
||||||
#: ../js/gdm/loginDialog.js:1159
|
#: ../js/gdm/loginDialog.js:1158
|
||||||
msgid "Login Window"
|
msgid "Login Window"
|
||||||
msgstr "Равзанаи воридшавӣ"
|
msgstr "Равзанаи воридшавӣ"
|
||||||
|
|
||||||
@@ -440,21 +443,16 @@ msgstr "Бозоғозидан"
|
|||||||
msgid "Power Off"
|
msgid "Power Off"
|
||||||
msgstr "Хомӯш кардан"
|
msgstr "Хомӯш кардан"
|
||||||
|
|
||||||
#: ../js/gdm/util.js:182
|
#: ../js/gdm/util.js:247
|
||||||
msgid "Authentication error"
|
msgid "Authentication error"
|
||||||
msgstr "Хатои санҷиши ҳаққоният"
|
msgstr "Хатои санҷиши ҳаққоният"
|
||||||
|
|
||||||
#. Translators: this message is shown below the password entry field
|
#. Translators: this message is shown below the password entry field
|
||||||
#. to indicate the user can swipe their finger instead
|
#. to indicate the user can swipe their finger instead
|
||||||
#: ../js/gdm/util.js:299
|
#: ../js/gdm/util.js:364
|
||||||
msgid "(or swipe finger)"
|
msgid "(or swipe finger)"
|
||||||
msgstr "(ё бо ангут ламс кунед)"
|
msgstr "(ё бо ангут ламс кунед)"
|
||||||
|
|
||||||
#: ../js/gdm/util.js:324
|
|
||||||
#, c-format
|
|
||||||
msgid "(e.g., user or %s)"
|
|
||||||
msgstr "(масалан, корбар ё %s)"
|
|
||||||
|
|
||||||
#: ../js/misc/util.js:97
|
#: ../js/misc/util.js:97
|
||||||
msgid "Command not found"
|
msgid "Command not found"
|
||||||
msgstr "Фармон ёфт нашудааст"
|
msgstr "Фармон ёфт нашудааст"
|
||||||
@@ -470,23 +468,23 @@ msgstr "Фармон иҷро нашудааст:"
|
|||||||
msgid "Execution of '%s' failed:"
|
msgid "Execution of '%s' failed:"
|
||||||
msgstr "Иҷрокунии '%s' қатъ шудааст:"
|
msgstr "Иҷрокунии '%s' қатъ шудааст:"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:325
|
#: ../js/ui/appDisplay.js:361
|
||||||
msgid "Frequent"
|
msgid "Frequent"
|
||||||
msgstr "Роиҷ"
|
msgstr "Роиҷ"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:332
|
#: ../js/ui/appDisplay.js:368
|
||||||
msgid "All"
|
msgid "All"
|
||||||
msgstr "Ҳама"
|
msgstr "Ҳама"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:890
|
#: ../js/ui/appDisplay.js:960
|
||||||
msgid "New Window"
|
msgid "New Window"
|
||||||
msgstr "Равзанаи нав"
|
msgstr "Равзанаи нав"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:893 ../js/ui/dash.js:284
|
#: ../js/ui/appDisplay.js:963 ../js/ui/dash.js:284
|
||||||
msgid "Remove from Favorites"
|
msgid "Remove from Favorites"
|
||||||
msgstr "Тоза кардан аз Баргузидаҳо"
|
msgstr "Тоза кардан аз Баргузидаҳо"
|
||||||
|
|
||||||
#: ../js/ui/appDisplay.js:894
|
#: ../js/ui/appDisplay.js:964
|
||||||
msgid "Add to Favorites"
|
msgid "Add to Favorites"
|
||||||
msgstr "Илова кардан ба Баргузидаҳо"
|
msgstr "Илова кардан ба Баргузидаҳо"
|
||||||
|
|
||||||
@@ -523,7 +521,7 @@ msgctxt "event list time"
|
|||||||
msgid "%H\\u2236%M"
|
msgid "%H\\u2236%M"
|
||||||
msgstr "%H\\u2236%M"
|
msgstr "%H\\u2236%M"
|
||||||
|
|
||||||
#. Transators: Shown in calendar event list, if 12h format,
|
#. Translators: Shown in calendar event list, if 12h format,
|
||||||
#. \u2236 is a ratio character, similar to : and \u2009 is
|
#. \u2236 is a ratio character, similar to : and \u2009 is
|
||||||
#. a thin space
|
#. a thin space
|
||||||
#: ../js/ui/calendar.js:77
|
#: ../js/ui/calendar.js:77
|
||||||
@@ -625,35 +623,35 @@ msgid "S"
|
|||||||
msgstr "Ш"
|
msgstr "Ш"
|
||||||
|
|
||||||
#. Translators: Text to show if there are no events
|
#. Translators: Text to show if there are no events
|
||||||
#: ../js/ui/calendar.js:720
|
#: ../js/ui/calendar.js:735
|
||||||
msgid "Nothing Scheduled"
|
msgid "Nothing Scheduled"
|
||||||
msgstr "Ягон чиз ба нақша нагирифтааст"
|
msgstr "Ягон чиз ба нақша нагирифтааст"
|
||||||
|
|
||||||
#. Translators: Shown on calendar heading when selected day occurs on current year
|
#. Translators: Shown on calendar heading when selected day occurs on current year
|
||||||
#: ../js/ui/calendar.js:736
|
#: ../js/ui/calendar.js:751
|
||||||
msgctxt "calendar heading"
|
msgctxt "calendar heading"
|
||||||
msgid "%A, %B %d"
|
msgid "%A, %B %d"
|
||||||
msgstr "%A, %B %d"
|
msgstr "%A, %B %d"
|
||||||
|
|
||||||
#. Translators: Shown on calendar heading when selected day occurs on different year
|
#. Translators: Shown on calendar heading when selected day occurs on different year
|
||||||
#: ../js/ui/calendar.js:739
|
#: ../js/ui/calendar.js:754
|
||||||
msgctxt "calendar heading"
|
msgctxt "calendar heading"
|
||||||
msgid "%A, %B %d, %Y"
|
msgid "%A, %B %d, %Y"
|
||||||
msgstr "%A, %B %d, %Y"
|
msgstr "%A, %B %d, %Y"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:749
|
#: ../js/ui/calendar.js:764
|
||||||
msgid "Today"
|
msgid "Today"
|
||||||
msgstr "Имрӯз"
|
msgstr "Имрӯз"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:753
|
#: ../js/ui/calendar.js:768
|
||||||
msgid "Tomorrow"
|
msgid "Tomorrow"
|
||||||
msgstr "Фардо"
|
msgstr "Фардо"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:764
|
#: ../js/ui/calendar.js:779
|
||||||
msgid "This week"
|
msgid "This week"
|
||||||
msgstr "Ҳафтаи ҷорӣ"
|
msgstr "Ҳафтаи ҷорӣ"
|
||||||
|
|
||||||
#: ../js/ui/calendar.js:772
|
#: ../js/ui/calendar.js:787
|
||||||
msgid "Next week"
|
msgid "Next week"
|
||||||
msgstr "Ҳафтаи навбатӣ"
|
msgstr "Ҳафтаи навбатӣ"
|
||||||
|
|
||||||
@@ -669,20 +667,20 @@ msgstr "Диски берунӣ ҷудо шудааст"
|
|||||||
msgid "Removable Devices"
|
msgid "Removable Devices"
|
||||||
msgstr "Дастгоҳҳои ҷудошаванда"
|
msgstr "Дастгоҳҳои ҷудошаванда"
|
||||||
|
|
||||||
#: ../js/ui/components/autorunManager.js:593
|
#: ../js/ui/components/autorunManager.js:594
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Open with %s"
|
msgid "Open with %s"
|
||||||
msgstr "Кушодан бо %s"
|
msgstr "Кушодан бо %s"
|
||||||
|
|
||||||
#: ../js/ui/components/autorunManager.js:619
|
#: ../js/ui/components/autorunManager.js:620
|
||||||
msgid "Eject"
|
msgid "Eject"
|
||||||
msgstr "Баровардан"
|
msgstr "Баровардан"
|
||||||
|
|
||||||
#: ../js/ui/components/keyring.js:82 ../js/ui/components/polkitAgent.js:268
|
#: ../js/ui/components/keyring.js:88 ../js/ui/components/polkitAgent.js:280
|
||||||
msgid "Password:"
|
msgid "Password:"
|
||||||
msgstr "Парол:"
|
msgstr "Парол:"
|
||||||
|
|
||||||
#: ../js/ui/components/keyring.js:101
|
#: ../js/ui/components/keyring.js:107
|
||||||
msgid "Type again:"
|
msgid "Type again:"
|
||||||
msgstr "Аз нав ворид кунед:"
|
msgstr "Аз нав ворид кунед:"
|
||||||
|
|
||||||
@@ -762,15 +760,15 @@ msgstr "Пароли шабакаи паҳннавори мобилӣ"
|
|||||||
msgid "A password is required to connect to '%s'."
|
msgid "A password is required to connect to '%s'."
|
||||||
msgstr "Барои пайваст шудан ба '%s' парол лозим аст."
|
msgstr "Барои пайваст шудан ба '%s' парол лозим аст."
|
||||||
|
|
||||||
#: ../js/ui/components/polkitAgent.js:55
|
#: ../js/ui/components/polkitAgent.js:54
|
||||||
msgid "Authentication Required"
|
msgid "Authentication Required"
|
||||||
msgstr "Санҷиши ҳаққоният лозим аст"
|
msgstr "Санҷиши ҳаққоният лозим аст"
|
||||||
|
|
||||||
#: ../js/ui/components/polkitAgent.js:93
|
#: ../js/ui/components/polkitAgent.js:92
|
||||||
msgid "Administrator"
|
msgid "Administrator"
|
||||||
msgstr "Маъмур"
|
msgstr "Маъмур"
|
||||||
|
|
||||||
#: ../js/ui/components/polkitAgent.js:165
|
#: ../js/ui/components/polkitAgent.js:170
|
||||||
msgid "Authenticate"
|
msgid "Authenticate"
|
||||||
msgstr "Санҷиши ҳаққоният"
|
msgstr "Санҷиши ҳаққоният"
|
||||||
|
|
||||||
@@ -778,12 +776,12 @@ msgstr "Санҷиши ҳаққоният"
|
|||||||
#. * requested authentication was not gained; this can happen
|
#. * requested authentication was not gained; this can happen
|
||||||
#. * because of an authentication error (like invalid password),
|
#. * because of an authentication error (like invalid password),
|
||||||
#. * for instance.
|
#. * for instance.
|
||||||
#: ../js/ui/components/polkitAgent.js:256 ../js/ui/shellMountOperation.js:383
|
#: ../js/ui/components/polkitAgent.js:266 ../js/ui/shellMountOperation.js:383
|
||||||
msgid "Sorry, that didn't work. Please try again."
|
msgid "Sorry, that didn't work. Please try again."
|
||||||
msgstr "Мутаассифона, ин амал иҷро нашуд. Лутфан, амалро такрор кунед."
|
msgstr "Мутаассифона, ин амал иҷро нашуд. Лутфан, амалро такрор кунед."
|
||||||
|
|
||||||
#. Translators: this is a filename used for screencast recording
|
#. Translators: this is a filename used for screencast recording
|
||||||
#: ../js/ui/components/recorder.js:48
|
#: ../js/ui/components/recorder.js:47
|
||||||
#, no-c-format
|
#, no-c-format
|
||||||
msgid "Screencast from %d %t"
|
msgid "Screencast from %d %t"
|
||||||
msgstr "Рӯйдодҳои экран аз %d %t"
|
msgstr "Рӯйдодҳои экран аз %d %t"
|
||||||
@@ -1041,23 +1039,22 @@ msgstr "Намоиш додани барномаҳо"
|
|||||||
msgid "Dash"
|
msgid "Dash"
|
||||||
msgstr "Рах"
|
msgstr "Рах"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:91
|
#: ../js/ui/dateMenu.js:86
|
||||||
msgid "Open Calendar"
|
msgid "Open Calendar"
|
||||||
msgstr "Кушодани тақвим"
|
msgstr "Кушодани тақвим"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:96
|
#: ../js/ui/dateMenu.js:90
|
||||||
msgid "Open Clocks"
|
msgid "Open Clocks"
|
||||||
msgstr "Кушодани соат"
|
msgstr "Кушодани соат"
|
||||||
|
|
||||||
#: ../js/ui/dateMenu.js:105
|
#: ../js/ui/dateMenu.js:97
|
||||||
#| msgid "Date and Time Settings"
|
|
||||||
msgid "Date & Time Settings"
|
msgid "Date & Time Settings"
|
||||||
msgstr "Танзимоти сана ва вақт"
|
msgstr "Танзимоти сана ва вақт"
|
||||||
|
|
||||||
#. Translators: This is the date format to use when the calendar popup is
|
#. Translators: This is the date format to use when the calendar popup is
|
||||||
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
|
||||||
#.
|
#.
|
||||||
#: ../js/ui/dateMenu.js:215
|
#: ../js/ui/dateMenu.js:208
|
||||||
msgid "%A %B %e, %Y"
|
msgid "%A %B %e, %Y"
|
||||||
msgstr "%A %B %e, %Y"
|
msgstr "%A %B %e, %Y"
|
||||||
|
|
||||||
@@ -1160,56 +1157,56 @@ msgstr "Насб кардан"
|
|||||||
msgid "Download and install '%s' from extensions.gnome.org?"
|
msgid "Download and install '%s' from extensions.gnome.org?"
|
||||||
msgstr "\"%s\"-ро аз extensions.gnome.org боргирӣ ва насб мекунед?"
|
msgstr "\"%s\"-ро аз extensions.gnome.org боргирӣ ва насб мекунед?"
|
||||||
|
|
||||||
#: ../js/ui/keyboard.js:619 ../js/ui/status/keyboard.js:314
|
#: ../js/ui/keyboard.js:619 ../js/ui/status/keyboard.js:333
|
||||||
#: ../js/ui/status/power.js:211
|
#: ../js/ui/status/power.js:211
|
||||||
msgid "Keyboard"
|
msgid "Keyboard"
|
||||||
msgstr "Клавиатура"
|
msgstr "Клавиатура"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:693
|
#: ../js/ui/lookingGlass.js:689
|
||||||
msgid "No extensions installed"
|
msgid "No extensions installed"
|
||||||
msgstr "Ягон пасванд насб нашудааст"
|
msgstr "Ягон пасванд насб нашудааст"
|
||||||
|
|
||||||
#. Translators: argument is an extension UUID.
|
#. Translators: argument is an extension UUID.
|
||||||
#: ../js/ui/lookingGlass.js:747
|
#: ../js/ui/lookingGlass.js:743
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s has not emitted any errors."
|
msgid "%s has not emitted any errors."
|
||||||
msgstr "%s ягон хато надорад."
|
msgstr "%s ягон хато надорад."
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:753
|
#: ../js/ui/lookingGlass.js:749
|
||||||
msgid "Hide Errors"
|
msgid "Hide Errors"
|
||||||
msgstr "Пинҳон кардани хатоҳо"
|
msgstr "Пинҳон кардани хатоҳо"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:757 ../js/ui/lookingGlass.js:817
|
#: ../js/ui/lookingGlass.js:753 ../js/ui/lookingGlass.js:813
|
||||||
msgid "Show Errors"
|
msgid "Show Errors"
|
||||||
msgstr "Намоиш додани хатоҳо"
|
msgstr "Намоиш додани хатоҳо"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:766
|
#: ../js/ui/lookingGlass.js:762
|
||||||
msgid "Enabled"
|
msgid "Enabled"
|
||||||
msgstr "Фаъол"
|
msgstr "Фаъол"
|
||||||
|
|
||||||
#. translators:
|
#. translators:
|
||||||
#. * The device has been disabled
|
#. * The device has been disabled
|
||||||
#: ../js/ui/lookingGlass.js:769 ../src/gvc/gvc-mixer-control.c:1830
|
#: ../js/ui/lookingGlass.js:765 ../src/gvc/gvc-mixer-control.c:1830
|
||||||
msgid "Disabled"
|
msgid "Disabled"
|
||||||
msgstr "Ғайрифаъол"
|
msgstr "Ғайрифаъол"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:771
|
#: ../js/ui/lookingGlass.js:767
|
||||||
msgid "Error"
|
msgid "Error"
|
||||||
msgstr "Хатогӣ"
|
msgstr "Хатогӣ"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:773
|
#: ../js/ui/lookingGlass.js:769
|
||||||
msgid "Out of date"
|
msgid "Out of date"
|
||||||
msgstr "Аз мӯҳлат гузашта"
|
msgstr "Аз мӯҳлат гузашта"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:775
|
#: ../js/ui/lookingGlass.js:771
|
||||||
msgid "Downloading"
|
msgid "Downloading"
|
||||||
msgstr "Боргирӣ рафта истодааст"
|
msgstr "Боргирӣ рафта истодааст"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:799
|
#: ../js/ui/lookingGlass.js:795
|
||||||
msgid "View Source"
|
msgid "View Source"
|
||||||
msgstr "Намоиш додани манбаъ"
|
msgstr "Намоиш додани манбаъ"
|
||||||
|
|
||||||
#: ../js/ui/lookingGlass.js:808
|
#: ../js/ui/lookingGlass.js:804
|
||||||
msgid "Web Page"
|
msgid "Web Page"
|
||||||
msgstr "Саҳифаи веб"
|
msgstr "Саҳифаи веб"
|
||||||
|
|
||||||
@@ -1226,7 +1223,6 @@ msgid "Clear Messages"
|
|||||||
msgstr "Пок кардани паёмҳо"
|
msgstr "Пок кардани паёмҳо"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:1528
|
#: ../js/ui/messageTray.js:1528
|
||||||
#| msgid "Notifications"
|
|
||||||
msgid "Notification Settings"
|
msgid "Notification Settings"
|
||||||
msgstr "Танзимоти огоҳиҳо"
|
msgstr "Танзимоти огоҳиҳо"
|
||||||
|
|
||||||
@@ -1238,26 +1234,26 @@ msgstr "Ягон паём нест"
|
|||||||
msgid "Message Tray"
|
msgid "Message Tray"
|
||||||
msgstr "Қуттии паёмҳо"
|
msgstr "Қуттии паёмҳо"
|
||||||
|
|
||||||
#: ../js/ui/messageTray.js:2816
|
#: ../js/ui/messageTray.js:2811
|
||||||
msgid "System Information"
|
msgid "System Information"
|
||||||
msgstr "Маълумоти система"
|
msgstr "Маълумоти система"
|
||||||
|
|
||||||
#: ../js/ui/notificationDaemon.js:629 ../src/shell-app.c:374
|
#: ../js/ui/notificationDaemon.js:629 ../src/shell-app.c:378
|
||||||
msgctxt "program"
|
msgctxt "program"
|
||||||
msgid "Unknown"
|
msgid "Unknown"
|
||||||
msgstr "Номаълум"
|
msgstr "Номаълум"
|
||||||
|
|
||||||
#: ../js/ui/overviewControls.js:463 ../js/ui/screenShield.js:148
|
#: ../js/ui/overviewControls.js:474 ../js/ui/screenShield.js:150
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d new message"
|
msgid "%d new message"
|
||||||
msgid_plural "%d new messages"
|
msgid_plural "%d new messages"
|
||||||
msgstr[0] "%d паёми нав"
|
msgstr[0] "%d паёми нав"
|
||||||
|
|
||||||
#: ../js/ui/overview.js:84
|
#: ../js/ui/overview.js:82
|
||||||
msgid "Undo"
|
msgid "Undo"
|
||||||
msgstr "Ботил сохтан"
|
msgstr "Ботил сохтан"
|
||||||
|
|
||||||
#: ../js/ui/overview.js:129
|
#: ../js/ui/overview.js:127
|
||||||
msgid "Overview"
|
msgid "Overview"
|
||||||
msgstr "Хулоса"
|
msgstr "Хулоса"
|
||||||
|
|
||||||
@@ -1265,21 +1261,21 @@ msgstr "Хулоса"
|
|||||||
#. in the search entry when no search is
|
#. in the search entry when no search is
|
||||||
#. active; it should not exceed ~30
|
#. active; it should not exceed ~30
|
||||||
#. characters.
|
#. characters.
|
||||||
#: ../js/ui/overview.js:271
|
#: ../js/ui/overview.js:258
|
||||||
msgid "Type to search…"
|
msgid "Type to search…"
|
||||||
msgstr "Ҷустуҷӯ кардан..."
|
msgstr "Ҷустуҷӯ кардан..."
|
||||||
|
|
||||||
#: ../js/ui/panel.js:612
|
#: ../js/ui/panel.js:642
|
||||||
msgid "Quit"
|
msgid "Quit"
|
||||||
msgstr "Баромад"
|
msgstr "Баромад"
|
||||||
|
|
||||||
#. Translators: If there is no suitable word for "Activities"
|
#. Translators: If there is no suitable word for "Activities"
|
||||||
#. in your language, you can use the word for "Overview".
|
#. in your language, you can use the word for "Overview".
|
||||||
#: ../js/ui/panel.js:636
|
#: ../js/ui/panel.js:693
|
||||||
msgid "Activities"
|
msgid "Activities"
|
||||||
msgstr "Фаъолиятҳо"
|
msgstr "Фаъолиятҳо"
|
||||||
|
|
||||||
#: ../js/ui/panel.js:933
|
#: ../js/ui/panel.js:989
|
||||||
msgid "Top Bar"
|
msgid "Top Bar"
|
||||||
msgstr "Панели боло"
|
msgstr "Панели боло"
|
||||||
|
|
||||||
@@ -1288,35 +1284,35 @@ msgstr "Панели боло"
|
|||||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||||
#. switches containing "◯" and "|"). Other values will
|
#. switches containing "◯" and "|"). Other values will
|
||||||
#. simply result in invisible toggle switches.
|
#. simply result in invisible toggle switches.
|
||||||
#: ../js/ui/popupMenu.js:727
|
#: ../js/ui/popupMenu.js:738
|
||||||
msgid "toggle-switch-us"
|
msgid "toggle-switch-us"
|
||||||
msgstr "toggle-switch-us"
|
msgstr "toggle-switch-us"
|
||||||
|
|
||||||
#: ../js/ui/runDialog.js:73
|
#: ../js/ui/runDialog.js:74
|
||||||
msgid "Enter a Command"
|
msgid "Enter a Command"
|
||||||
msgstr "Фармонеро ворид кунед"
|
msgstr "Фармонеро ворид кунед"
|
||||||
|
|
||||||
#: ../js/ui/runDialog.js:109
|
#: ../js/ui/runDialog.js:110
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr "Пӯшидан"
|
msgstr "Пӯшидан"
|
||||||
|
|
||||||
#. Translators: This is a time format for a date in
|
#. Translators: This is a time format for a date in
|
||||||
#. long format
|
#. long format
|
||||||
#: ../js/ui/screenShield.js:85
|
#: ../js/ui/screenShield.js:87
|
||||||
msgid "%A, %B %d"
|
msgid "%A, %B %d"
|
||||||
msgstr "%A, %B %d"
|
msgstr "%A, %B %d"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:150
|
#: ../js/ui/screenShield.js:152
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%d new notification"
|
msgid "%d new notification"
|
||||||
msgid_plural "%d new notifications"
|
msgid_plural "%d new notifications"
|
||||||
msgstr[0] "%d огоҳии нав"
|
msgstr[0] "%d огоҳии нав"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:437 ../js/ui/userMenu.js:807
|
#: ../js/ui/screenShield.js:449 ../js/ui/userMenu.js:807
|
||||||
msgid "Lock"
|
msgid "Lock"
|
||||||
msgstr "Қулф кардан"
|
msgstr "Қулф кардан"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:635
|
#: ../js/ui/screenShield.js:652
|
||||||
msgid "GNOME needs to lock the screen"
|
msgid "GNOME needs to lock the screen"
|
||||||
msgstr "GNOME бояд экранро қулф кунад"
|
msgstr "GNOME бояд экранро қулф кунад"
|
||||||
|
|
||||||
@@ -1327,37 +1323,35 @@ msgstr "GNOME бояд экранро қулф кунад"
|
|||||||
#.
|
#.
|
||||||
#. XXX: another option is to kick the user into the gdm login
|
#. XXX: another option is to kick the user into the gdm login
|
||||||
#. screen, where we're not affected by grabs
|
#. screen, where we're not affected by grabs
|
||||||
#: ../js/ui/screenShield.js:756 ../js/ui/screenShield.js:1151
|
#: ../js/ui/screenShield.js:773 ../js/ui/screenShield.js:1213
|
||||||
#| msgid "Unable to connect to %s"
|
|
||||||
msgid "Unable to lock"
|
msgid "Unable to lock"
|
||||||
msgstr "Қулф карда намешавад"
|
msgstr "Қулф карда намешавад"
|
||||||
|
|
||||||
#: ../js/ui/screenShield.js:757 ../js/ui/screenShield.js:1152
|
#: ../js/ui/screenShield.js:774 ../js/ui/screenShield.js:1214
|
||||||
msgid "Lock was blocked by an application"
|
msgid "Lock was blocked by an application"
|
||||||
msgstr "Қулф аз тарави барнома баста шудааст"
|
msgstr "Қулф аз тарави барнома баста шудааст"
|
||||||
|
|
||||||
#: ../js/ui/searchDisplay.js:451
|
#: ../js/ui/searchDisplay.js:445
|
||||||
#| msgid "Searching..."
|
|
||||||
msgid "Searching…"
|
msgid "Searching…"
|
||||||
msgstr "Ҷустуҷӯ рафта истодааст..."
|
msgstr "Ҷустуҷӯ рафта истодааст..."
|
||||||
|
|
||||||
#: ../js/ui/searchDisplay.js:495
|
#: ../js/ui/searchDisplay.js:489
|
||||||
msgid "No results."
|
msgid "No results."
|
||||||
msgstr "Ягон натиҷа нест."
|
msgstr "Ягон натиҷа нест."
|
||||||
|
|
||||||
#: ../js/ui/shellEntry.js:29
|
#: ../js/ui/shellEntry.js:27
|
||||||
msgid "Copy"
|
msgid "Copy"
|
||||||
msgstr "Нусха бардоштан"
|
msgstr "Нусха бардоштан"
|
||||||
|
|
||||||
#: ../js/ui/shellEntry.js:34
|
#: ../js/ui/shellEntry.js:32
|
||||||
msgid "Paste"
|
msgid "Paste"
|
||||||
msgstr "Гузоштан"
|
msgstr "Гузоштан"
|
||||||
|
|
||||||
#: ../js/ui/shellEntry.js:106
|
#: ../js/ui/shellEntry.js:99
|
||||||
msgid "Show Text"
|
msgid "Show Text"
|
||||||
msgstr "Намоиш додани матн"
|
msgstr "Намоиш додани матн"
|
||||||
|
|
||||||
#: ../js/ui/shellEntry.js:108
|
#: ../js/ui/shellEntry.js:101
|
||||||
msgid "Hide Text"
|
msgid "Hide Text"
|
||||||
msgstr "Пинҳон кардани матн"
|
msgstr "Пинҳон кардани матн"
|
||||||
|
|
||||||
@@ -1369,7 +1363,7 @@ msgstr "Парол"
|
|||||||
msgid "Remember Password"
|
msgid "Remember Password"
|
||||||
msgstr "Ба ёд гирифтани парол"
|
msgstr "Ба ёд гирифтани парол"
|
||||||
|
|
||||||
#: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:112
|
#: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:109
|
||||||
msgid "Unlock"
|
msgid "Unlock"
|
||||||
msgstr "Кушодан"
|
msgstr "Кушодан"
|
||||||
|
|
||||||
@@ -1424,7 +1418,7 @@ msgstr "Матни бузург"
|
|||||||
#: ../js/ui/status/bluetooth.js:28 ../js/ui/status/bluetooth.js:32
|
#: ../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:289 ../js/ui/status/bluetooth.js:321
|
||||||
#: ../js/ui/status/bluetooth.js:357 ../js/ui/status/bluetooth.js:388
|
#: ../js/ui/status/bluetooth.js:357 ../js/ui/status/bluetooth.js:388
|
||||||
#: ../js/ui/status/network.js:826
|
#: ../js/ui/status/network.js:739
|
||||||
msgid "Bluetooth"
|
msgid "Bluetooth"
|
||||||
msgstr "Bluetooth"
|
msgstr "Bluetooth"
|
||||||
|
|
||||||
@@ -1445,7 +1439,7 @@ msgid "Bluetooth Settings"
|
|||||||
msgstr "Танзимоти Bluetooth"
|
msgstr "Танзимоти Bluetooth"
|
||||||
|
|
||||||
#. TRANSLATORS: this means that bluetooth was disabled by hardware rfkill
|
#. TRANSLATORS: this means that bluetooth was disabled by hardware rfkill
|
||||||
#: ../js/ui/status/bluetooth.js:104 ../js/ui/status/network.js:178
|
#: ../js/ui/status/bluetooth.js:104 ../js/ui/status/network.js:142
|
||||||
msgid "hardware disabled"
|
msgid "hardware disabled"
|
||||||
msgstr "сахтафзор ғайрифаъол шудааст"
|
msgstr "сахтафзор ғайрифаъол шудааст"
|
||||||
|
|
||||||
@@ -1453,17 +1447,16 @@ msgstr "сахтафзор ғайрифаъол шудааст"
|
|||||||
msgid "Connection"
|
msgid "Connection"
|
||||||
msgstr "Пайвастшавӣ"
|
msgstr "Пайвастшавӣ"
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:208 ../js/ui/status/network.js:460
|
#: ../js/ui/status/bluetooth.js:208 ../js/ui/status/network.js:404
|
||||||
msgid "disconnecting..."
|
msgid "disconnecting..."
|
||||||
msgstr "қатъ кардани пайваст..."
|
msgstr "қатъ кардани пайваст..."
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:221 ../js/ui/status/network.js:466
|
#: ../js/ui/status/bluetooth.js:221 ../js/ui/status/network.js:410
|
||||||
#: ../js/ui/status/network.js:1546
|
#: ../js/ui/status/network.js:1343
|
||||||
msgid "connecting..."
|
msgid "connecting..."
|
||||||
msgstr "пайвастшавӣ..."
|
msgstr "пайвастшавӣ..."
|
||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:239
|
#: ../js/ui/status/bluetooth.js:239
|
||||||
#| msgid "Send Files..."
|
|
||||||
msgid "Send Files…"
|
msgid "Send Files…"
|
||||||
msgstr "Фиристодани файлҳо…"
|
msgstr "Фиристодани файлҳо…"
|
||||||
|
|
||||||
@@ -1514,9 +1507,11 @@ msgstr "Дастгоҳи %s мехоҳад, ки бо ин компютер ҷу
|
|||||||
|
|
||||||
#: ../js/ui/status/bluetooth.js:366
|
#: ../js/ui/status/bluetooth.js:366
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Please confirm whether the PIN '%06d' matches the one on the device."
|
#| 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 ""
|
msgstr ""
|
||||||
"Лутфан, тасдиқ кунед, ки рамзи PIN-и \"%06d\" ба рамзи дар дастгоҳ "
|
"Лутфан, тасдиқ кунед, ки калиди хусусии '%06d' ба калиди дар дастгоҳ "
|
||||||
"мавҷудбуда мувофиқат мекунад."
|
"мавҷудбуда мувофиқат мекунад."
|
||||||
|
|
||||||
#. Translators: this is the verb, not the noun
|
#. Translators: this is the verb, not the noun
|
||||||
@@ -1541,11 +1536,11 @@ msgstr "Лутфан, рамзи PIN-ро, ки дар дастгоҳ гуфта
|
|||||||
msgid "OK"
|
msgid "OK"
|
||||||
msgstr "OK"
|
msgstr "OK"
|
||||||
|
|
||||||
#: ../js/ui/status/keyboard.js:368
|
#: ../js/ui/status/keyboard.js:396
|
||||||
msgid "Show Keyboard Layout"
|
msgid "Show Keyboard Layout"
|
||||||
msgstr "Намоиш додани тарҳбандии клавиатура"
|
msgstr "Намоиш додани тарҳбандии клавиатура"
|
||||||
|
|
||||||
#: ../js/ui/status/keyboard.js:373
|
#: ../js/ui/status/keyboard.js:401
|
||||||
msgid "Region & Language Settings"
|
msgid "Region & Language Settings"
|
||||||
msgstr "Танзимоти забон ва минтақа"
|
msgstr "Танзимоти забон ва минтақа"
|
||||||
|
|
||||||
@@ -1553,117 +1548,91 @@ msgstr "Танзимоти забон ва минтақа"
|
|||||||
msgid "Volume, network, battery"
|
msgid "Volume, network, battery"
|
||||||
msgstr "Ҳаҷм, шабака, батарея"
|
msgstr "Ҳаҷм, шабака, батарея"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:104
|
#: ../js/ui/status/network.js:75
|
||||||
msgid "<unknown>"
|
msgid "<unknown>"
|
||||||
msgstr "<номаълум>"
|
msgstr "<номаълум>"
|
||||||
|
|
||||||
|
#: ../js/ui/status/network.js:127
|
||||||
|
msgid "Wi-Fi"
|
||||||
|
msgstr "Wi-Fi"
|
||||||
|
|
||||||
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
|
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
|
||||||
#: ../js/ui/status/network.js:200
|
#: ../js/ui/status/network.js:164
|
||||||
msgid "disabled"
|
msgid "disabled"
|
||||||
msgstr "ғайрифаъол"
|
msgstr "ғайрифаъол"
|
||||||
|
|
||||||
#. Translators: this is for network devices that are physically present but are not
|
#. Translators: this is for network devices that are physically present but are not
|
||||||
#. under NetworkManager's control (and thus cannot be used in the menu)
|
#. under NetworkManager's control (and thus cannot be used in the menu)
|
||||||
#: ../js/ui/status/network.js:458
|
#: ../js/ui/status/network.js:402
|
||||||
msgid "unmanaged"
|
msgid "unmanaged"
|
||||||
msgstr "идоранашуда"
|
msgstr "идоранашуда"
|
||||||
|
|
||||||
#. Translators: this is for network connections that require some kind of key or password
|
#. Translators: this is for network connections that require some kind of key or password
|
||||||
#: ../js/ui/status/network.js:469 ../js/ui/status/network.js:1549
|
#: ../js/ui/status/network.js:413 ../js/ui/status/network.js:1346
|
||||||
msgid "authentication required"
|
msgid "authentication required"
|
||||||
msgstr "санҷиши ҳаққоният лозим аст"
|
msgstr "санҷиши ҳаққоният лозим аст"
|
||||||
|
|
||||||
#. Translators: this is for devices that require some kind of firmware or kernel
|
#. Translators: this is for devices that require some kind of firmware or kernel
|
||||||
#. module, which is missing
|
#. module, which is missing
|
||||||
#: ../js/ui/status/network.js:479
|
#: ../js/ui/status/network.js:423
|
||||||
msgid "firmware missing"
|
msgid "firmware missing"
|
||||||
msgstr "нармафзори дарунсохт вуҷуд надорад"
|
msgstr "нармафзори дарунсохт вуҷуд надорад"
|
||||||
|
|
||||||
#. Translators: this is for wired network devices that are physically disconnected
|
#. Translators: this is for wired network devices that are physically disconnected
|
||||||
#: ../js/ui/status/network.js:486
|
#: ../js/ui/status/network.js:430
|
||||||
msgid "cable unplugged"
|
msgid "cable unplugged"
|
||||||
msgstr "сим ҷудо шудааст"
|
msgstr "сим ҷудо шудааст"
|
||||||
|
|
||||||
#. Translators: this is for a network device that cannot be activated (for example it
|
#. Translators: this is for a network device that cannot be activated (for example it
|
||||||
#. is disabled by rfkill, or it has no coverage
|
#. is disabled by rfkill, or it has no coverage
|
||||||
#: ../js/ui/status/network.js:491
|
#: ../js/ui/status/network.js:435
|
||||||
msgid "unavailable"
|
msgid "unavailable"
|
||||||
msgstr "дастнорас"
|
msgstr "дастнорас"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:493 ../js/ui/status/network.js:1551
|
#: ../js/ui/status/network.js:437 ../js/ui/status/network.js:1348
|
||||||
msgid "connection failed"
|
msgid "connection failed"
|
||||||
msgstr "пайваст қатъ шудааст"
|
msgstr "пайваст қатъ шудааст"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:552 ../js/ui/status/network.js:1435
|
#: ../js/ui/status/network.js:490 ../js/ui/status/network.js:1236
|
||||||
#: ../js/ui/status/network.js:1627
|
#: ../js/ui/status/network.js:1424
|
||||||
msgid "More…"
|
msgid "More…"
|
||||||
msgstr "Бештар..."
|
msgstr "Бештар..."
|
||||||
|
|
||||||
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
||||||
#. and we cannot access its settings (including the name)
|
#. and we cannot access its settings (including the name)
|
||||||
#: ../js/ui/status/network.js:588 ../js/ui/status/network.js:1365
|
#: ../js/ui/status/network.js:518 ../js/ui/status/network.js:1191
|
||||||
msgid "Connected (private)"
|
msgid "Connected (private)"
|
||||||
msgstr "Пайваст шудааст (шахсӣ)"
|
msgstr "Пайваст шудааст (шахсӣ)"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:667
|
#: ../js/ui/status/network.js:597
|
||||||
msgid "Wired"
|
msgid "Wired"
|
||||||
msgstr "Симдор"
|
msgstr "Симдор"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:668
|
#: ../js/ui/status/network.js:611
|
||||||
msgid "Auto Ethernet"
|
|
||||||
msgstr "Ethernet-и худкор"
|
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:695
|
|
||||||
msgid "Mobile broadband"
|
msgid "Mobile broadband"
|
||||||
msgstr "Паҳннавори мобилӣ"
|
msgstr "Паҳннавори мобилӣ"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:728
|
#: ../js/ui/status/network.js:1522
|
||||||
msgid "Auto broadband"
|
|
||||||
msgstr "Паҳннавори худкор"
|
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:731
|
|
||||||
msgid "Auto dial-up"
|
|
||||||
msgstr "Шуморагирии худкор"
|
|
||||||
|
|
||||||
#. 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"
|
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:863
|
|
||||||
msgid "Auto bluetooth"
|
|
||||||
msgstr "Bluetooth-и худкор"
|
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1384
|
|
||||||
msgid "Auto wireless"
|
|
||||||
msgstr "Бесими худкор"
|
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1729
|
|
||||||
msgid "Enable networking"
|
msgid "Enable networking"
|
||||||
msgstr "Фаъол кардани шабака"
|
msgstr "Фаъол кардани шабака"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1771
|
#: ../js/ui/status/network.js:1583
|
||||||
msgid "Wi-Fi"
|
|
||||||
msgstr "Wi-Fi"
|
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1790
|
|
||||||
msgid "Network Settings"
|
msgid "Network Settings"
|
||||||
msgstr "Танзимоти шабака"
|
msgstr "Танзимоти шабака"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1807
|
#: ../js/ui/status/network.js:1600
|
||||||
msgid "Network Manager"
|
msgid "Network Manager"
|
||||||
msgstr "Мудири шабака"
|
msgstr "Мудири шабака"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1897
|
#: ../js/ui/status/network.js:1690
|
||||||
msgid "Connection failed"
|
msgid "Connection failed"
|
||||||
msgstr "Пайваст қатъ шудааст"
|
msgstr "Пайваст қатъ шудааст"
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:1898
|
#: ../js/ui/status/network.js:1691
|
||||||
msgid "Activation of network connection failed"
|
msgid "Activation of network connection failed"
|
||||||
msgstr "Фаъолсозии пайвасти шабака қатъ шудааст."
|
msgstr "Фаъолсозии пайвасти шабака қатъ шудааст."
|
||||||
|
|
||||||
#: ../js/ui/status/network.js:2276
|
#: ../js/ui/status/network.js:2047
|
||||||
msgid "Networking is disabled"
|
msgid "Networking is disabled"
|
||||||
msgstr "Шабака ғайрифаъол аст"
|
msgstr "Шабака ғайрифаъол аст"
|
||||||
|
|
||||||
@@ -1720,7 +1689,6 @@ msgid "AC Adapter"
|
|||||||
msgstr "Адаптери AC"
|
msgstr "Адаптери AC"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:203
|
#: ../js/ui/status/power.js:203
|
||||||
#| msgid "Battery"
|
|
||||||
msgid "Laptop Battery"
|
msgid "Laptop Battery"
|
||||||
msgstr "Батареяи лэптоп"
|
msgstr "Батареяи лэптоп"
|
||||||
|
|
||||||
@@ -1741,7 +1709,6 @@ msgid "PDA"
|
|||||||
msgstr "PDA"
|
msgstr "PDA"
|
||||||
|
|
||||||
#: ../js/ui/status/power.js:215
|
#: ../js/ui/status/power.js:215
|
||||||
#| msgid "Cell phone"
|
|
||||||
msgid "Cell Phone"
|
msgid "Cell Phone"
|
||||||
msgstr "Телефони мобилӣ"
|
msgstr "Телефони мобилӣ"
|
||||||
|
|
||||||
@@ -1763,7 +1730,6 @@ msgid "Unknown"
|
|||||||
msgstr "Номаълум"
|
msgstr "Номаълум"
|
||||||
|
|
||||||
#: ../js/ui/status/volume.js:124
|
#: ../js/ui/status/volume.js:124
|
||||||
#| msgid "Volume"
|
|
||||||
msgid "Volume changed"
|
msgid "Volume changed"
|
||||||
msgstr "Ҳаҷм тағйир ёфт"
|
msgstr "Ҳаҷм тағйир ёфт"
|
||||||
|
|
||||||
@@ -1776,11 +1742,11 @@ msgstr "Баландии садо"
|
|||||||
msgid "Microphone"
|
msgid "Microphone"
|
||||||
msgstr "Микрофон"
|
msgstr "Микрофон"
|
||||||
|
|
||||||
#: ../js/ui/unlockDialog.js:123
|
#: ../js/ui/unlockDialog.js:120
|
||||||
msgid "Log in as another user"
|
msgid "Log in as another user"
|
||||||
msgstr "Ворид шудан бо корбари дигар"
|
msgstr "Ворид шудан бо корбари дигар"
|
||||||
|
|
||||||
#: ../js/ui/unlockDialog.js:144
|
#: ../js/ui/unlockDialog.js:141
|
||||||
msgid "Unlock Window"
|
msgid "Unlock Window"
|
||||||
msgstr "Кушодани равзана"
|
msgstr "Кушодани равзана"
|
||||||
|
|
||||||
@@ -1904,38 +1870,37 @@ msgid "%u Input"
|
|||||||
msgid_plural "%u Inputs"
|
msgid_plural "%u Inputs"
|
||||||
msgstr[0] "%u вуруд"
|
msgstr[0] "%u вуруд"
|
||||||
|
|
||||||
#: ../src/gvc/gvc-mixer-control.c:2371
|
#: ../src/gvc/gvc-mixer-control.c:2373
|
||||||
#| msgid "System"
|
|
||||||
msgid "System Sounds"
|
msgid "System Sounds"
|
||||||
msgstr "Системаи садо"
|
msgstr "Системаи садо"
|
||||||
|
|
||||||
#: ../src/main.c:347
|
#: ../src/main.c:372
|
||||||
msgid "Print version"
|
msgid "Print version"
|
||||||
msgstr "Версияи чоп"
|
msgstr "Версияи чоп"
|
||||||
|
|
||||||
#: ../src/main.c:353
|
#: ../src/main.c:378
|
||||||
msgid "Mode used by GDM for login screen"
|
msgid "Mode used by GDM for login screen"
|
||||||
msgstr "Усуле, ки бо GDM барои экрани воридшавӣ истифода мешавад"
|
msgstr "Усуле, ки бо GDM барои экрани воридшавӣ истифода мешавад"
|
||||||
|
|
||||||
#: ../src/main.c:359
|
#: ../src/main.c:384
|
||||||
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
|
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Истифода бурдани ҳолати мушаххас, масалан \"gdm\" барои экрани воридшавӣ"
|
"Истифода бурдани ҳолати мушаххас, масалан \"gdm\" барои экрани воридшавӣ"
|
||||||
|
|
||||||
#: ../src/main.c:365
|
#: ../src/main.c:390
|
||||||
msgid "List possible modes"
|
msgid "List possible modes"
|
||||||
msgstr "Рӯйхати ҳолатҳои имконпазир"
|
msgstr "Рӯйхати ҳолатҳои имконпазир"
|
||||||
|
|
||||||
#: ../src/shell-app.c:622
|
#: ../src/shell-app.c:626
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Failed to launch '%s'"
|
msgid "Failed to launch '%s'"
|
||||||
msgstr "Оғози '%s' қатъ шудааст"
|
msgstr "Оғози '%s' қатъ шудааст"
|
||||||
|
|
||||||
#: ../src/shell-keyring-prompt.c:708
|
#: ../src/shell-keyring-prompt.c:714
|
||||||
msgid "Passwords do not match."
|
msgid "Passwords do not match."
|
||||||
msgstr "Паролҳо мувофиқат намекунанд."
|
msgstr "Паролҳо мувофиқат намекунанд."
|
||||||
|
|
||||||
#: ../src/shell-keyring-prompt.c:716
|
#: ../src/shell-keyring-prompt.c:722
|
||||||
msgid "Password cannot be blank"
|
msgid "Password cannot be blank"
|
||||||
msgstr "Парол бояд холӣ набошад"
|
msgstr "Парол бояд холӣ набошад"
|
||||||
|
|
||||||
@@ -1943,6 +1908,40 @@ msgstr "Парол бояд холӣ набошад"
|
|||||||
msgid "Authentication dialog was dismissed by the user"
|
msgid "Authentication dialog was dismissed by the user"
|
||||||
msgstr "Равзанаи гуфтугӯи санҷиши ҳакконият бо корбар бекор карда шуд"
|
msgstr "Равзанаи гуфтугӯи санҷиши ҳакконият бо корбар бекор карда шуд"
|
||||||
|
|
||||||
|
#~ msgid "Whether to collect stats about applications usage"
|
||||||
|
#~ msgstr "Ҷамъ кардан ё ҷамъ накардани омор дар бораи истифодабарии барномаҳо"
|
||||||
|
|
||||||
|
#~ 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 ""
|
||||||
|
#~ "Одатан ин восит барномаҳои фаъолро нигоҳдорӣ мекунад, то ин ки барномаҳои "
|
||||||
|
#~ "аз ҳама зиёд истифодашаванда (масалан оғозкунандагон) ҳамеша мавҷуд "
|
||||||
|
#~ "бошанд. Гарчанде ки ин иттилоот махфӣ нигоҳ дошта мешавад, шумо метавонед "
|
||||||
|
#~ "интихоб кунед, ки инро барои сабабҳои махфият ғайрифаъол кунед. Лутфан, "
|
||||||
|
#~ "ба қайд гиред, ки чунин амал иттилооти аллакай захирашударо тоза "
|
||||||
|
#~ "намекунад."
|
||||||
|
|
||||||
|
#~ msgid "Auto Ethernet"
|
||||||
|
#~ msgstr "Ethernet-и худкор"
|
||||||
|
|
||||||
|
#~ msgid "Auto broadband"
|
||||||
|
#~ msgstr "Паҳннавори худкор"
|
||||||
|
|
||||||
|
#~ msgid "Auto dial-up"
|
||||||
|
#~ msgstr "Шуморагирии худкор"
|
||||||
|
|
||||||
|
#~ msgid "Auto %s"
|
||||||
|
#~ msgstr "Худкор %s"
|
||||||
|
|
||||||
|
#~ msgid "Auto bluetooth"
|
||||||
|
#~ msgstr "Bluetooth-и худкор"
|
||||||
|
|
||||||
|
#~ msgid "Auto wireless"
|
||||||
|
#~ msgstr "Бесими худкор"
|
||||||
|
|
||||||
#~ msgctxt "title"
|
#~ msgctxt "title"
|
||||||
#~ msgid "Sign In"
|
#~ msgid "Sign In"
|
||||||
#~ msgstr "Ворид шудан"
|
#~ msgstr "Ворид шудан"
|
||||||
|
@@ -106,6 +106,8 @@ shell_gtk_embed_window_created_cb (MetaDisplay *display,
|
|||||||
0, 0 /* offset x/y */);
|
0, 0 /* offset x/y */);
|
||||||
cairo_region_destroy (empty_region);
|
cairo_region_destroy (empty_region);
|
||||||
|
|
||||||
|
gdk_window_lower (gdk_window);
|
||||||
|
|
||||||
/* Now that we've found the window we don't need to listen for
|
/* Now that we've found the window we don't need to listen for
|
||||||
new windows anymore */
|
new windows anymore */
|
||||||
g_signal_handler_disconnect (display,
|
g_signal_handler_disconnect (display,
|
||||||
|
Reference in New Issue
Block a user