Compare commits
36 Commits
wip/input-
...
wip/screen
Author | SHA1 | Date | |
---|---|---|---|
352ad8f558 | |||
d5dc886748 | |||
17044adf96 | |||
9dfd805be2 | |||
bbbb6b685f | |||
71c0d5f82d | |||
48d6eb168f | |||
6190d6c962 | |||
76616dc98c | |||
82c2f5221d | |||
a3bbb7be14 | |||
9e1a2cfeac | |||
c6fabe504a | |||
61a17d7fab | |||
865cfa5211 | |||
e2b857adae | |||
f3924ccd91 | |||
86e3e59530 | |||
02e4726ba6 | |||
66e470e073 | |||
afaa5c24d6 | |||
518282e169 | |||
d955adbbad | |||
83d3225e57 | |||
6fa45975bf | |||
e6087efb40 | |||
4ce2f80a2f | |||
0862d1c804 | |||
333e380340 | |||
58f77a19ed | |||
f2d883dab2 | |||
7ba8c7c2b5 | |||
0bf6c93faa | |||
b9f0158278 | |||
25ee41f344 | |||
5436634829 |
@ -328,6 +328,11 @@ StScrollBar StButton#vhandle:hover
|
||||
background-gradient-end: rgba(255, 255, 255, 0.2);
|
||||
}
|
||||
|
||||
.notification-icon-button:insensitive,
|
||||
.notification-button:insensitive {
|
||||
color: #9f9f9f;
|
||||
}
|
||||
|
||||
/* Panel */
|
||||
|
||||
#panel {
|
||||
@ -357,7 +362,7 @@ StScrollBar StButton#vhandle:hover
|
||||
}
|
||||
|
||||
.panel-corner {
|
||||
-panel-corner-radius: 10px;
|
||||
-panel-corner-radius: 6px;
|
||||
-panel-corner-background-color: black;
|
||||
-panel-corner-border-width: 2px;
|
||||
-panel-corner-border-color: transparent;
|
||||
@ -409,7 +414,7 @@ StScrollBar StButton#vhandle:hover
|
||||
.panel-button:active,
|
||||
.panel-button:overview,
|
||||
.panel-button:focus {
|
||||
border-image: url("panel-button-border.svg") 10 10 0 2;
|
||||
border-image: url("panel-button-border.svg") 6 10 0 2;
|
||||
background-image: url("panel-button-highlight-wide.svg");
|
||||
color: white;
|
||||
text-shadow: black 0px 2px 2px;
|
||||
@ -1710,7 +1715,7 @@ StScrollBar StButton#vhandle:hover
|
||||
}
|
||||
|
||||
.lightbox {
|
||||
background-color: rgba(0, 0, 0, 0.4);
|
||||
background-color: black;
|
||||
}
|
||||
|
||||
.flashspot {
|
||||
|
@ -9,7 +9,7 @@
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="21"
|
||||
width="17"
|
||||
height="10"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
@ -66,9 +66,9 @@
|
||||
<rect
|
||||
style="opacity:0.8;fill:#ffffff;fill-opacity:1;stroke-width:0.43599999;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
id="rect3796"
|
||||
width="3"
|
||||
width="7"
|
||||
height="2"
|
||||
x="9"
|
||||
x="5"
|
||||
y="8" />
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
@ -78,6 +78,7 @@ nobase_dist_js_DATA = \
|
||||
ui/popupMenu.js \
|
||||
ui/remoteSearch.js \
|
||||
ui/runDialog.js \
|
||||
ui/screenShield.js \
|
||||
ui/scripting.js \
|
||||
ui/search.js \
|
||||
ui/searchDisplay.js \
|
||||
@ -91,6 +92,7 @@ nobase_dist_js_DATA = \
|
||||
ui/status/bluetooth.js \
|
||||
ui/telepathyClient.js \
|
||||
ui/tweener.js \
|
||||
ui/unlockDialog.js \
|
||||
ui/userMenu.js \
|
||||
ui/viewSelector.js \
|
||||
ui/wanda.js \
|
||||
|
@ -39,8 +39,8 @@ const Main = imports.ui.main;
|
||||
const ModalDialog = imports.ui.modalDialog;
|
||||
const Tweener = imports.ui.tweener;
|
||||
|
||||
const _PASSWORD_SERVICE_NAME = 'gdm-password';
|
||||
const _FINGERPRINT_SERVICE_NAME = 'gdm-fingerprint';
|
||||
const PASSWORD_SERVICE_NAME = 'gdm-password';
|
||||
const FINGERPRINT_SERVICE_NAME = 'gdm-fingerprint';
|
||||
const _FADE_ANIMATION_TIME = 0.16;
|
||||
const _RESIZE_ANIMATION_TIME = 0.25;
|
||||
const _SCROLL_ANIMATION_TIME = 2.0;
|
||||
@ -747,15 +747,13 @@ const LoginDialog = new Lang.Class({
|
||||
Lang.bind(this, this._onOpened));
|
||||
|
||||
this._userManager = AccountsService.UserManager.get_default()
|
||||
this._greeterClient = new GdmGreeter.Client();
|
||||
this._greeterClient = GdmGreeter.Server.new_for_greeter_sync(null);
|
||||
|
||||
this._greeterClient.open_connection();
|
||||
|
||||
this._greeterClient.call_start_conversation(_PASSWORD_SERVICE_NAME);
|
||||
this._greeterClient.call_start_conversation_sync(PASSWORD_SERVICE_NAME, null);
|
||||
|
||||
this._greeterClient.connect('reset',
|
||||
Lang.bind(this, this._onReset));
|
||||
this._greeterClient.connect('default-session-changed',
|
||||
this._greeterClient.connect('default-session-name-changed',
|
||||
Lang.bind(this, this._onDefaultSessionChanged));
|
||||
this._greeterClient.connect('info',
|
||||
Lang.bind(this, this._onInfo));
|
||||
@ -769,8 +767,6 @@ const LoginDialog = new Lang.Class({
|
||||
Lang.bind(this, this._onSessionOpened));
|
||||
this._greeterClient.connect('timed-login-requested',
|
||||
Lang.bind(this, this._onTimedLoginRequested));
|
||||
this._greeterClient.connect('authentication-failed',
|
||||
Lang.bind(this, this._onAuthenticationFailed));
|
||||
this._greeterClient.connect('conversation-stopped',
|
||||
Lang.bind(this, this._onConversationStopped));
|
||||
|
||||
@ -899,7 +895,7 @@ const LoginDialog = new Lang.Class({
|
||||
this._haveFingerprintReader = true;
|
||||
|
||||
if (this._haveFingerprintReader)
|
||||
this._greeterClient.call_start_conversation(_FINGERPRINT_SERVICE_NAME);
|
||||
this._greeterClient.call_start_conversation_sync(FINGERPRINT_SERVICE_NAME, null);
|
||||
}));
|
||||
},
|
||||
|
||||
@ -918,7 +914,7 @@ const LoginDialog = new Lang.Class({
|
||||
},
|
||||
|
||||
_onReset: function(client, serviceName) {
|
||||
this._greeterClient.call_start_conversation(_PASSWORD_SERVICE_NAME);
|
||||
this._greeterClient.call_start_conversation_sync(PASSWORD_SERVICE_NAME, null);
|
||||
this._startFingerprintConversationIfNeeded();
|
||||
|
||||
let tasks = [this._hidePrompt,
|
||||
@ -954,7 +950,7 @@ const LoginDialog = new Lang.Class({
|
||||
// We don't display fingerprint messages, because they
|
||||
// have words like UPEK in them. Instead we use the messages
|
||||
// as a cue to display our own message.
|
||||
if (serviceName == _FINGERPRINT_SERVICE_NAME &&
|
||||
if (serviceName == FINGERPRINT_SERVICE_NAME &&
|
||||
this._haveFingerprintReader &&
|
||||
(!this._promptFingerprintMessage.visible ||
|
||||
this._promptFingerprintMessage.opacity != 255)) {
|
||||
@ -963,7 +959,7 @@ const LoginDialog = new Lang.Class({
|
||||
return;
|
||||
}
|
||||
|
||||
if (serviceName != _PASSWORD_SERVICE_NAME)
|
||||
if (serviceName != PASSWORD_SERVICE_NAME)
|
||||
return;
|
||||
Main.notifyError(info);
|
||||
},
|
||||
@ -971,13 +967,13 @@ const LoginDialog = new Lang.Class({
|
||||
_onProblem: function(client, serviceName, problem) {
|
||||
// we don't want to show auth failed messages to
|
||||
// users who haven't enrolled their fingerprint.
|
||||
if (serviceName != _PASSWORD_SERVICE_NAME)
|
||||
if (serviceName != PASSWORD_SERVICE_NAME)
|
||||
return;
|
||||
Main.notifyError(problem);
|
||||
},
|
||||
|
||||
_onCancel: function(client) {
|
||||
this._greeterClient.call_cancel();
|
||||
this._greeterClient.call_cancel_sync(null);
|
||||
},
|
||||
|
||||
_fadeInPrompt: function() {
|
||||
@ -1084,7 +1080,7 @@ const LoginDialog = new Lang.Class({
|
||||
let _text = this._promptEntry.get_text();
|
||||
this._promptEntry.reactive = false;
|
||||
this._promptEntry.add_style_pseudo_class('insensitive');
|
||||
this._greeterClient.call_answer_query(serviceName, _text);
|
||||
this._greeterClient.call_answer_query_sync(serviceName, _text, null);
|
||||
}];
|
||||
|
||||
let batch = new Batch.ConsecutiveBatch(this, tasks);
|
||||
@ -1092,7 +1088,7 @@ const LoginDialog = new Lang.Class({
|
||||
},
|
||||
_onInfoQuery: function(client, serviceName, question) {
|
||||
// We only expect questions to come from the main auth service
|
||||
if (serviceName != _PASSWORD_SERVICE_NAME)
|
||||
if (serviceName != PASSWORD_SERVICE_NAME)
|
||||
return;
|
||||
|
||||
this._promptEntry.set_text('');
|
||||
@ -1102,7 +1098,7 @@ const LoginDialog = new Lang.Class({
|
||||
|
||||
_onSecretInfoQuery: function(client, serviceName, secretQuestion) {
|
||||
// We only expect secret requests to come from the main auth service
|
||||
if (serviceName != _PASSWORD_SERVICE_NAME)
|
||||
if (serviceName != PASSWORD_SERVICE_NAME)
|
||||
return;
|
||||
|
||||
this._promptEntry.set_text('');
|
||||
@ -1111,7 +1107,7 @@ const LoginDialog = new Lang.Class({
|
||||
},
|
||||
|
||||
_onSessionOpened: function(client, serviceName) {
|
||||
this._greeterClient.call_start_session_when_ready(serviceName, true);
|
||||
this._greeterClient.call_start_session_when_ready_sync(serviceName, true, null);
|
||||
},
|
||||
|
||||
_waitForItemForUser: function(userName) {
|
||||
@ -1193,7 +1189,7 @@ const LoginDialog = new Lang.Class({
|
||||
|
||||
function() {
|
||||
this._timedLoginBatch = null;
|
||||
this._greeterClient.call_begin_auto_login(userName);
|
||||
this._greeterClient.call_begin_auto_login_sync(userName, null);
|
||||
}];
|
||||
|
||||
this._timedLoginBatch = new Batch.ConsecutiveBatch(this, tasks);
|
||||
@ -1236,17 +1232,13 @@ const LoginDialog = new Lang.Class({
|
||||
}));
|
||||
},
|
||||
|
||||
_onAuthenticationFailed: function(client) {
|
||||
this._greeterClient.call_cancel();
|
||||
},
|
||||
|
||||
_onConversationStopped: function(client, serviceName) {
|
||||
// if the password service fails, then cancel everything.
|
||||
// But if, e.g., fingerprint fails, still give
|
||||
// password authentication a chance to succeed
|
||||
if (serviceName == _PASSWORD_SERVICE_NAME) {
|
||||
this._greeterClient.call_cancel();
|
||||
} else if (serviceName == _FINGERPRINT_SERVICE_NAME) {
|
||||
if (serviceName == PASSWORD_SERVICE_NAME) {
|
||||
this._greeterClient.call_cancel_sync(null);
|
||||
} else if (serviceName == FINGERPRINT_SERVICE_NAME) {
|
||||
_fadeOutActor(this._promptFingerprintMessage);
|
||||
}
|
||||
},
|
||||
@ -1269,7 +1261,7 @@ const LoginDialog = new Lang.Class({
|
||||
this._fadeOutLogo]),
|
||||
|
||||
function() {
|
||||
this._greeterClient.call_begin_verification(_PASSWORD_SERVICE_NAME);
|
||||
this._greeterClient.call_begin_verification_sync(PASSWORD_SERVICE_NAME, null);
|
||||
}];
|
||||
|
||||
let batch = new Batch.ConsecutiveBatch(this, tasks);
|
||||
@ -1328,11 +1320,11 @@ const LoginDialog = new Lang.Class({
|
||||
|
||||
function() {
|
||||
let userName = activatedItem.user.get_user_name();
|
||||
this._greeterClient.call_begin_verification_for_user(_PASSWORD_SERVICE_NAME,
|
||||
userName);
|
||||
this._greeterClient.call_begin_verification_for_user_sync(PASSWORD_SERVICE_NAME,
|
||||
userName, null);
|
||||
|
||||
if (this._haveFingerprintReader)
|
||||
this._greeterClient.call_begin_verification_for_user(_FINGERPRINT_SERVICE_NAME, userName);
|
||||
this._greeterClient.call_begin_verification_for_user_sync(_FINGERPRINT_SERVICE_NAME, userName, null);
|
||||
}];
|
||||
|
||||
this._user = activatedItem.user;
|
||||
|
@ -83,10 +83,11 @@ function spawnCommandLine(command_line) {
|
||||
// this will throw an error.
|
||||
function trySpawn(argv)
|
||||
{
|
||||
var success, pid;
|
||||
try {
|
||||
GLib.spawn_async(null, argv, null,
|
||||
GLib.SpawnFlags.SEARCH_PATH,
|
||||
null, null);
|
||||
[success, pid] = GLib.spawn_async(null, argv, null,
|
||||
GLib.SpawnFlags.SEARCH_PATH | GLib.SpawnFlags.DO_NOT_REAP_CHILD,
|
||||
null, null);
|
||||
} catch (err) {
|
||||
if (err.code == GLib.SpawnError.G_SPAWN_ERROR_NOENT) {
|
||||
err.message = _("Command not found");
|
||||
@ -101,6 +102,10 @@ function trySpawn(argv)
|
||||
|
||||
throw err;
|
||||
}
|
||||
// Dummy child watch; we don't want to double-fork internally
|
||||
// because then we lose the parent-child relationship, which
|
||||
// can break polkit. See https://bugzilla.redhat.com//show_bug.cgi?id=819275
|
||||
GLib.child_watch_add(GLib.PRIORITY_DEFAULT, pid, function () {}, null);
|
||||
}
|
||||
|
||||
// trySpawnCommandLine:
|
||||
|
@ -312,11 +312,10 @@ const AppSearchProvider = new Lang.Class({
|
||||
|
||||
_init: function() {
|
||||
this.parent(_("APPLICATIONS"));
|
||||
|
||||
this._appSys = Shell.AppSystem.get_default();
|
||||
},
|
||||
|
||||
getResultMetas: function(apps) {
|
||||
getResultMetas: function(apps, callback) {
|
||||
let metas = [];
|
||||
for (let i = 0; i < apps.length; i++) {
|
||||
let app = apps[i];
|
||||
@ -327,15 +326,15 @@ const AppSearchProvider = new Lang.Class({
|
||||
}
|
||||
});
|
||||
}
|
||||
return metas;
|
||||
callback(metas);
|
||||
},
|
||||
|
||||
getInitialResultSet: function(terms) {
|
||||
return this._appSys.initial_search(terms);
|
||||
this.searchSystem.pushResults(this, this._appSys.initial_search(terms));
|
||||
},
|
||||
|
||||
getSubsearchResultSet: function(previousResults, terms) {
|
||||
return this._appSys.subsearch(previousResults, terms);
|
||||
this.searchSystem.pushResults(this, this._appSys.subsearch(previousResults, terms));
|
||||
},
|
||||
|
||||
activateResult: function(app, params) {
|
||||
@ -378,7 +377,7 @@ const SettingsSearchProvider = new Lang.Class({
|
||||
this._gnomecc = this._appSys.lookup_app('gnome-control-center.desktop');
|
||||
},
|
||||
|
||||
getResultMetas: function(prefs) {
|
||||
getResultMetas: function(prefs, callback) {
|
||||
let metas = [];
|
||||
for (let i = 0; i < prefs.length; i++) {
|
||||
let pref = prefs[i];
|
||||
@ -389,15 +388,15 @@ const SettingsSearchProvider = new Lang.Class({
|
||||
}
|
||||
});
|
||||
}
|
||||
return metas;
|
||||
callback(metas);
|
||||
},
|
||||
|
||||
getInitialResultSet: function(terms) {
|
||||
return this._appSys.search_settings(terms);
|
||||
this.searchSystem.pushResults(this, this._appSys.search_settings(terms));
|
||||
},
|
||||
|
||||
getSubsearchResultSet: function(previousResults, terms) {
|
||||
return this._appSys.search_settings(terms);
|
||||
this.searchSystem.pushResults(this, this._appSys.search_settings(terms));
|
||||
},
|
||||
|
||||
activateResult: function(pref, params) {
|
||||
|
@ -262,12 +262,11 @@ const AutorunResidentSource = new Lang.Class({
|
||||
Extends: MessageTray.Source,
|
||||
|
||||
_init: function() {
|
||||
this.parent(_("Removable Devices"));
|
||||
this.parent(_("Removable Devices"), 'media-removable', St.IconType.FULLCOLOR);
|
||||
|
||||
this._mounts = [];
|
||||
|
||||
this._notification = new AutorunResidentNotification(this);
|
||||
this._setSummaryIcon(this.createNotificationIcon());
|
||||
},
|
||||
|
||||
addMount: function(mount, apps) {
|
||||
@ -310,12 +309,6 @@ const AutorunResidentSource = new Lang.Class({
|
||||
Main.messageTray.add(this);
|
||||
this.pushNotification(this._notification);
|
||||
}
|
||||
},
|
||||
|
||||
createNotificationIcon: function() {
|
||||
return new St.Icon ({ icon_name: 'media-removable',
|
||||
icon_type: St.IconType.FULLCOLOR,
|
||||
icon_size: this.ICON_SIZE });
|
||||
}
|
||||
});
|
||||
|
||||
@ -500,11 +493,11 @@ const AutorunTransientSource = new Lang.Class({
|
||||
Extends: MessageTray.Source,
|
||||
|
||||
_init: function(mount, apps) {
|
||||
this.parent(mount.get_name());
|
||||
|
||||
this.mount = mount;
|
||||
this.apps = apps;
|
||||
|
||||
this.parent(mount.get_name());
|
||||
|
||||
this._notification = new AutorunTransientNotification(this);
|
||||
this._setSummaryIcon(this.createNotificationIcon());
|
||||
|
||||
|
@ -154,7 +154,7 @@ const ContactSearchProvider = new Lang.Class({
|
||||
this._contactSys = Shell.ContactSystem.get_default();
|
||||
},
|
||||
|
||||
getResultMetas: function(ids) {
|
||||
getResultMetas: function(ids, callback) {
|
||||
let metas = [];
|
||||
for (let i = 0; i < ids.length; i++) {
|
||||
let contact = new Contact(ids[i]);
|
||||
@ -165,15 +165,15 @@ const ContactSearchProvider = new Lang.Class({
|
||||
}
|
||||
});
|
||||
}
|
||||
return metas;
|
||||
callback(metas);
|
||||
},
|
||||
|
||||
getInitialResultSet: function(terms) {
|
||||
return this._contactSys.initial_search(terms);
|
||||
this.searchSystem.pushResults(this, this._contactSys.initial_search(terms));
|
||||
},
|
||||
|
||||
getSubsearchResultSet: function(previousResults, terms) {
|
||||
return this._contactSys.subsearch(previousResults, terms);
|
||||
this.searchSystem.pushResults(this, this._contactSys.subsearch(previousResults, terms));
|
||||
},
|
||||
|
||||
createResultActor: function(resultMeta, terms) {
|
||||
|
@ -75,7 +75,7 @@ const DateMenuButton = new Lang.Class({
|
||||
|
||||
// Date
|
||||
this._date = new St.Label();
|
||||
this.actor.label_actor = this._date;
|
||||
this.actor.label_actor = this._clock;
|
||||
this._date.style_class = 'datemenu-date-label';
|
||||
vbox.add(this._date);
|
||||
|
||||
|
@ -541,16 +541,8 @@ const KeyboardSource = new Lang.Class({
|
||||
Extends: MessageTray.Source,
|
||||
|
||||
_init: function(keyboard) {
|
||||
this.parent(_("Keyboard"));
|
||||
this._keyboard = keyboard;
|
||||
|
||||
this._setSummaryIcon(this.createNotificationIcon());
|
||||
},
|
||||
|
||||
createNotificationIcon: function() {
|
||||
return new St.Icon({ icon_name: 'input-keyboard',
|
||||
icon_type: St.IconType.SYMBOLIC,
|
||||
icon_size: this.ICON_SIZE });
|
||||
this.parent(_("Keyboard"), 'input-keyboard', St.IconType.SYMBOLIC);
|
||||
},
|
||||
|
||||
handleSummaryClick: function() {
|
||||
|
@ -8,6 +8,8 @@ const St = imports.gi.St;
|
||||
const Params = imports.misc.params;
|
||||
const Tweener = imports.ui.tweener;
|
||||
|
||||
const DEFAULT_FADE_FACTOR = 0.4;
|
||||
|
||||
/**
|
||||
* Lightbox:
|
||||
* @container: parent Clutter.Container
|
||||
@ -15,7 +17,8 @@ const Tweener = imports.ui.tweener;
|
||||
* - inhibitEvents: whether to inhibit events for @container
|
||||
* - width: shade actor width
|
||||
* - height: shade actor height
|
||||
* - fadeTime: seconds used to fade in/out
|
||||
* - fadeInTime: seconds used to fade in
|
||||
* - fadeOutTime: seconds used to fade out
|
||||
*
|
||||
* Lightbox creates a dark translucent "shade" actor to hide the
|
||||
* contents of @container, and allows you to specify particular actors
|
||||
@ -38,12 +41,16 @@ const Lightbox = new Lang.Class({
|
||||
params = Params.parse(params, { inhibitEvents: false,
|
||||
width: null,
|
||||
height: null,
|
||||
fadeTime: null
|
||||
fadeInTime: null,
|
||||
fadeOutTime: null,
|
||||
fadeFactor: DEFAULT_FADE_FACTOR
|
||||
});
|
||||
|
||||
this._container = container;
|
||||
this._children = container.get_children();
|
||||
this._fadeTime = params.fadeTime;
|
||||
this._fadeInTime = params.fadeInTime;
|
||||
this._fadeOutTime = params.fadeOutTime;
|
||||
this._fadeFactor = params.fadeFactor;
|
||||
this.actor = new St.Bin({ x: 0,
|
||||
y: 0,
|
||||
style_class: 'lightbox',
|
||||
@ -52,6 +59,7 @@ const Lightbox = new Lang.Class({
|
||||
container.add_actor(this.actor);
|
||||
this.actor.raise_top();
|
||||
this.actor.hide();
|
||||
this.shown = false;
|
||||
|
||||
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
|
||||
|
||||
@ -93,24 +101,30 @@ const Lightbox = new Lang.Class({
|
||||
},
|
||||
|
||||
show: function() {
|
||||
if (this._fadeTime) {
|
||||
if (this._fadeInTime) {
|
||||
this.shown = false;
|
||||
this.actor.opacity = 0;
|
||||
Tweener.addTween(this.actor,
|
||||
{ opacity: 255,
|
||||
time: this._fadeTime,
|
||||
transition: 'easeOutQuad'
|
||||
{ opacity: 255 * this._fadeFactor,
|
||||
time: this._fadeInTime,
|
||||
transition: 'easeOutQuad',
|
||||
onComplete: Lang.bind(this, function() {
|
||||
this.shown = true;
|
||||
})
|
||||
});
|
||||
} else {
|
||||
this.actor.opacity = 255;
|
||||
this.actor.opacity = 255 * this._fadeFactor;
|
||||
this.shown = true;
|
||||
}
|
||||
this.actor.show();
|
||||
},
|
||||
|
||||
hide: function() {
|
||||
if (this._fadeTime) {
|
||||
this.shown = false;
|
||||
if (this._fadeOutTime) {
|
||||
Tweener.addTween(this.actor,
|
||||
{ opacity: 0,
|
||||
time: this._fadeTime,
|
||||
time: this._fadeOutTime,
|
||||
transition: 'easeOutQuad',
|
||||
onComplete: Lang.bind(this, function() {
|
||||
this.actor.hide();
|
||||
|
@ -16,6 +16,7 @@ const Params = imports.misc.params;
|
||||
|
||||
const MOUSE_POLL_FREQUENCY = 50;
|
||||
const CROSSHAIRS_CLIP_SIZE = [100, 100];
|
||||
const NO_CHANGE = 0.0;
|
||||
|
||||
// Settings
|
||||
const APPLICATIONS_SCHEMA = 'org.gnome.desktop.a11y.applications';
|
||||
@ -24,6 +25,13 @@ const SHOW_KEY = 'screen-magnifier-enabled';
|
||||
const MAGNIFIER_SCHEMA = 'org.gnome.desktop.a11y.magnifier';
|
||||
const SCREEN_POSITION_KEY = 'screen-position';
|
||||
const MAG_FACTOR_KEY = 'mag-factor';
|
||||
const INVERT_LIGHTNESS_KEY = 'invert-lightness';
|
||||
const BRIGHT_RED_KEY = 'brightness-red';
|
||||
const BRIGHT_GREEN_KEY = 'brightness-green';
|
||||
const BRIGHT_BLUE_KEY = 'brightness-blue';
|
||||
const CONTRAST_RED_KEY = 'contrast-red';
|
||||
const CONTRAST_GREEN_KEY = 'contrast-green';
|
||||
const CONTRAST_BLUE_KEY = 'contrast-blue';
|
||||
const LENS_MODE_KEY = 'lens-mode';
|
||||
const CLAMP_MODE_KEY = 'scroll-at-edges';
|
||||
const MOUSE_TRACKING_KEY = 'mouse-tracking';
|
||||
@ -443,6 +451,21 @@ const Magnifier = new Lang.Class({
|
||||
aPref = this._settings.get_enum(MOUSE_TRACKING_KEY);
|
||||
if (aPref)
|
||||
zoomRegion.setMouseTrackingMode(aPref);
|
||||
|
||||
aPref = this._settings.get_boolean(INVERT_LIGHTNESS_KEY);
|
||||
if (aPref)
|
||||
zoomRegion.setInvertLightness(aPref);
|
||||
|
||||
let bc = {};
|
||||
bc.r = this._settings.get_double(BRIGHT_RED_KEY);
|
||||
bc.g = this._settings.get_double(BRIGHT_GREEN_KEY);
|
||||
bc.b = this._settings.get_double(BRIGHT_BLUE_KEY);
|
||||
zoomRegion.setBrightness(bc);
|
||||
|
||||
bc.r = this._settings.get_double(CONTRAST_RED_KEY);
|
||||
bc.g = this._settings.get_double(CONTRAST_GREEN_KEY);
|
||||
bc.b = this._settings.get_double(CONTRAST_BLUE_KEY);
|
||||
zoomRegion.setContrast(bc);
|
||||
}
|
||||
|
||||
let showCrosshairs = this._settings.get_boolean(SHOW_CROSS_HAIRS_KEY);
|
||||
@ -465,6 +488,23 @@ const Magnifier = new Lang.Class({
|
||||
this._settings.connect('changed::' + MOUSE_TRACKING_KEY,
|
||||
Lang.bind(this, this._updateMouseTrackingMode));
|
||||
|
||||
this._settings.connect('changed::' + INVERT_LIGHTNESS_KEY,
|
||||
Lang.bind(this, this._updateInvertLightness));
|
||||
|
||||
this._settings.connect('changed::' + BRIGHT_RED_KEY,
|
||||
Lang.bind(this, this._updateBrightness));
|
||||
this._settings.connect('changed::' + BRIGHT_GREEN_KEY,
|
||||
Lang.bind(this, this._updateBrightness));
|
||||
this._settings.connect('changed::' + BRIGHT_BLUE_KEY,
|
||||
Lang.bind(this, this._updateBrightness));
|
||||
|
||||
this._settings.connect('changed::' + CONTRAST_RED_KEY,
|
||||
Lang.bind(this, this._updateContrast));
|
||||
this._settings.connect('changed::' + CONTRAST_GREEN_KEY,
|
||||
Lang.bind(this, this._updateContrast));
|
||||
this._settings.connect('changed::' + CONTRAST_BLUE_KEY,
|
||||
Lang.bind(this, this._updateContrast));
|
||||
|
||||
this._settings.connect('changed::' + SHOW_CROSS_HAIRS_KEY,
|
||||
Lang.bind(this, function() {
|
||||
this.setCrosshairsVisible(this._settings.get_boolean(SHOW_CROSS_HAIRS_KEY));
|
||||
@ -540,7 +580,38 @@ const Magnifier = new Lang.Class({
|
||||
this._settings.get_enum(MOUSE_TRACKING_KEY)
|
||||
);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
_updateInvertLightness: function() {
|
||||
// Applies only to the first zoom region.
|
||||
if (this._zoomRegions.length) {
|
||||
this._zoomRegions[0].setInvertLightness(
|
||||
this._settings.get_boolean(INVERT_LIGHTNESS_KEY)
|
||||
);
|
||||
}
|
||||
},
|
||||
|
||||
_updateBrightness: function() {
|
||||
// Applies only to the first zoom region.
|
||||
if (this._zoomRegions.length) {
|
||||
let brightness = {};
|
||||
brightness.r = this._settings.get_double(BRIGHT_RED_KEY);
|
||||
brightness.g = this._settings.get_double(BRIGHT_GREEN_KEY);
|
||||
brightness.b = this._settings.get_double(BRIGHT_BLUE_KEY);
|
||||
this._zoomRegions[0].setBrightness(brightness);
|
||||
}
|
||||
},
|
||||
|
||||
_updateContrast: function() {
|
||||
// Applies only to the first zoom region.
|
||||
if (this._zoomRegions.length) {
|
||||
let contrast = {};
|
||||
contrast.r = this._settings.get_double(CONTRAST_RED_KEY);
|
||||
contrast.g = this._settings.get_double(CONTRAST_GREEN_KEY);
|
||||
contrast.b = this._settings.get_double(CONTRAST_BLUE_KEY);
|
||||
this._zoomRegions[0].setContrast(contrast);
|
||||
}
|
||||
},
|
||||
});
|
||||
Signals.addSignalMethods(Magnifier.prototype);
|
||||
|
||||
@ -554,6 +625,9 @@ const ZoomRegion = new Lang.Class({
|
||||
this._clampScrollingAtEdges = false;
|
||||
this._lensMode = false;
|
||||
this._screenPosition = GDesktopEnums.MagnifierScreenPosition.FULL_SCREEN;
|
||||
this._invertLightness = false;
|
||||
this._brightness = { r: NO_CHANGE, g: NO_CHANGE, b: NO_CHANGE };
|
||||
this._contrast = { r: NO_CHANGE, g: NO_CHANGE, b: NO_CHANGE };
|
||||
|
||||
this._magView = null;
|
||||
this._background = null;
|
||||
@ -879,6 +953,86 @@ const ZoomRegion = new Lang.Class({
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* setInvertLightness:
|
||||
* Set whether to invert the lightness of the magnified view.
|
||||
* @flag Boolean to either invert brightness (true), or not (false).
|
||||
*/
|
||||
setInvertLightness: function(flag) {
|
||||
this._invertLightness = flag;
|
||||
if (this._magShaderEffects)
|
||||
this._magShaderEffects.setInvertLightness(this._invertLightness);
|
||||
},
|
||||
|
||||
/**
|
||||
* getInvertLightness:
|
||||
* Retrieve whether the lightness is inverted.
|
||||
* @return Boolean indicating inversion (true), or not (false).
|
||||
*/
|
||||
getInvertLightness: function() {
|
||||
return this._invertLightness;
|
||||
},
|
||||
|
||||
/**
|
||||
* setBrightness:
|
||||
* Alter the brightness of the magnified view.
|
||||
* @brightness Object containing the contrast for the red, green,
|
||||
* and blue channels. Values of 0.0 represent "standard"
|
||||
* brightness (no change), whereas values less or greater than
|
||||
* 0.0 indicate decreased or incresaed brightness, respectively.
|
||||
*/
|
||||
setBrightness: function(brightness) {
|
||||
this._brightness.r = brightness.r;
|
||||
this._brightness.g = brightness.g;
|
||||
this._brightness.b = brightness.b;
|
||||
if (this._magShaderEffects)
|
||||
this._magShaderEffects.setBrightness(this._brightness);
|
||||
},
|
||||
|
||||
/**
|
||||
* getBrightness:
|
||||
* Retrive the current brightness of the Zoom Region.
|
||||
* @return Object containing the brightness change for the red, green,
|
||||
* and blue channels.
|
||||
*/
|
||||
getBrightness: function() {
|
||||
let brightness = {};
|
||||
brightness.r = this._brightness.r;
|
||||
brightness.g = this._brightness.g;
|
||||
brightness.b = this._brightness.b;
|
||||
return brightness;
|
||||
},
|
||||
|
||||
/**
|
||||
* setContrast:
|
||||
* Alter the contrast of the magnified view.
|
||||
* @contrast Object containing the contrast for the red, green,
|
||||
* and blue channels. Values of 0.0 represent "standard"
|
||||
* contrast (no change), whereas values less or greater than
|
||||
* 0.0 indicate decreased or incresaed contrast, respectively.
|
||||
*/
|
||||
setContrast: function(contrast) {
|
||||
this._contrast.r = contrast.r;
|
||||
this._contrast.g = contrast.g;
|
||||
this._contrast.b = contrast.b;
|
||||
if (this._magShaderEffects)
|
||||
this._magShaderEffects.setContrast(this._contrast);
|
||||
},
|
||||
|
||||
/**
|
||||
* getContrast:
|
||||
* Retreive the contrast of the magnified view.
|
||||
* @return Object containing the contrast for the red, green,
|
||||
* and blue channels.
|
||||
*/
|
||||
getContrast: function() {
|
||||
let contrast = {};
|
||||
contrast.r = this._contrast.r;
|
||||
contrast.g = this._contrast.g;
|
||||
contrast.b = this._contrast.b;
|
||||
return contrast;
|
||||
},
|
||||
|
||||
//// Private methods ////
|
||||
|
||||
_createActors: function() {
|
||||
@ -917,6 +1071,12 @@ const ZoomRegion = new Lang.Class({
|
||||
this._crossHairsActor = this._crossHairs.addToZoomRegion(this, this._mouseActor);
|
||||
else
|
||||
this._crossHairsActor = null;
|
||||
|
||||
// Contrast and brightness effects.
|
||||
this._magShaderEffects = new MagShaderEffects(this._uiGroupClone);
|
||||
this._magShaderEffects.setInvertLightness(this._invertLightness);
|
||||
this._magShaderEffects.setBrightness(this._brightness);
|
||||
this._magShaderEffects.setContrast(this._contrast);
|
||||
},
|
||||
|
||||
_destroyActors: function() {
|
||||
@ -925,6 +1085,8 @@ const ZoomRegion = new Lang.Class({
|
||||
if (this._crossHairs)
|
||||
this._crossHairs.removeFromParent(this._crossHairsActor);
|
||||
|
||||
this._magShaderEffects.destroyEffects();
|
||||
this._magShaderEffects = null;
|
||||
this._magView.destroy();
|
||||
this._magView = null;
|
||||
this._background = null;
|
||||
@ -1433,3 +1595,133 @@ const Crosshairs = new Lang.Class({
|
||||
this._vertBottomHair.set_position((groupWidth - thickness) / 2, bottom);
|
||||
}
|
||||
});
|
||||
|
||||
const MagShaderEffects = new Lang.Class({
|
||||
Name: 'MagShaderEffects',
|
||||
|
||||
_init: function(uiGroupClone) {
|
||||
this._inverse = new Shell.InvertLightnessEffect();
|
||||
this._brightnessContrast = new Clutter.BrightnessContrastEffect();
|
||||
this._inverse.set_enabled(false);
|
||||
this._brightnessContrast.set_enabled(false);
|
||||
|
||||
this._magView = uiGroupClone;
|
||||
this._magView.add_effect(this._inverse);
|
||||
this._magView.add_effect(this._brightnessContrast);
|
||||
},
|
||||
|
||||
/**
|
||||
* destroyEffects:
|
||||
* Remove contrast and brightness effects from the magnified view, and
|
||||
* lose the reference to the actor they were applied to. Don't use this
|
||||
* object after calling this.
|
||||
*/
|
||||
destroyEffects: function() {
|
||||
this._magView.clear_effects();
|
||||
this._brightnessContrast = null;
|
||||
this._inverse = null;
|
||||
this._magView = null;
|
||||
},
|
||||
|
||||
/**
|
||||
* setInvertLightness:
|
||||
* Enable/disable invert lightness effect.
|
||||
* @invertFlag: Enabled flag.
|
||||
*/
|
||||
setInvertLightness: function(invertFlag) {
|
||||
this._inverse.set_enabled(invertFlag);
|
||||
},
|
||||
|
||||
/**
|
||||
* getInvertLightness:
|
||||
* Report whether the inversion effect is enabled.
|
||||
* @return: Boolean.
|
||||
*/
|
||||
getInvertLightness: function() {
|
||||
return this._inverse.get_enabled();
|
||||
},
|
||||
|
||||
/**
|
||||
* setBrightness:
|
||||
* Set the brightness of the magnified view.
|
||||
* @brightness: Object containing the brightness for the red, green,
|
||||
* and blue channels. Values of 0.0 represent "standard"
|
||||
* brightness (no change), whereas values less or greater than
|
||||
* 0.0 indicate decreased or incresaed brightness,
|
||||
* respectively.
|
||||
*/
|
||||
setBrightness: function(brightness) {
|
||||
let bRed = brightness.r;
|
||||
let bGreen = brightness.g;
|
||||
let bBlue = brightness.b;
|
||||
this._brightnessContrast.set_brightness_full(bRed, bGreen, bBlue);
|
||||
|
||||
// Enable the effect if the brightness OR contrast change are such that
|
||||
// it modifies the brightness and/or contrast.
|
||||
let [cRed, cGreen, cBlue] = this._brightnessContrast.get_contrast();
|
||||
this._brightnessContrast.set_enabled(
|
||||
(bRed != NO_CHANGE || bGreen != NO_CHANGE || bBlue != NO_CHANGE ||
|
||||
cRed != NO_CHANGE || cGreen != NO_CHANGE || cBlue != NO_CHANGE)
|
||||
);
|
||||
},
|
||||
|
||||
/**
|
||||
* getBrightness:
|
||||
* Retrieve current brightness of the magnified view.
|
||||
* @return: Object containing the brightness for the red, green,
|
||||
* and blue channels. Values of 0.0 represent "standard"
|
||||
* brightness (no change), whereas values less or greater than
|
||||
* 0.0 indicate decreased or incresaed brightness, respectively.
|
||||
*/
|
||||
getBrightness: function() {
|
||||
let result = {};
|
||||
let [bRed, bGreen, bBlue] = this._brightnessContrast.get_brightness();
|
||||
result.r = bRed;
|
||||
result.g = bGreen;
|
||||
result.b = bBlue;
|
||||
|
||||
return result;
|
||||
},
|
||||
|
||||
/**
|
||||
* Set the contrast of the magnified view.
|
||||
* @contrast: Object containing the contrast for the red, green,
|
||||
* and blue channels. Values of 0.0 represent "standard"
|
||||
* contrast (no change), whereas values less or greater than
|
||||
* 0.0 indicate decreased or incresaed contrast, respectively.
|
||||
*/
|
||||
setContrast: function(contrast) {
|
||||
let cRed = contrast.r;
|
||||
let cGreen = contrast.g;
|
||||
let cBlue = contrast.b;
|
||||
|
||||
this._brightnessContrast.set_contrast_full(cRed, cGreen, cBlue);
|
||||
|
||||
// Enable the effect if the contrast OR brightness change are such that
|
||||
// it modifies the brightness and/or contrast.
|
||||
// should be able to use Clutter.color_equal(), but that complains of
|
||||
// a null first argument.
|
||||
let [bRed, bGreen, bBlue] = this._brightnessContrast.get_brightness();
|
||||
this._brightnessContrast.set_enabled(
|
||||
cRed != NO_CHANGE || cGreen != NO_CHANGE || cBlue != NO_CHANGE ||
|
||||
bRed != NO_CHANGE || bGreen != NO_CHANGE || bBlue != NO_CHANGE
|
||||
);
|
||||
},
|
||||
|
||||
/**
|
||||
* Retrieve current contrast of the magnified view.
|
||||
* @return: Object containing the contrast for the red, green,
|
||||
* and blue channels. Values of 0.0 represent "standard"
|
||||
* contrast (no change), whereas values less or greater than
|
||||
* 0.0 indicate decreased or incresaed contrast, respectively.
|
||||
*/
|
||||
getContrast: function() {
|
||||
let resutl = {};
|
||||
let [cRed, cGreen, cBlue] = this._brightnessContrast.get_contrast();
|
||||
result.r = cRed;
|
||||
result.g = cGreen;
|
||||
result.b = cBlue;
|
||||
|
||||
return result;
|
||||
}
|
||||
});
|
||||
|
@ -29,6 +29,7 @@ const LookingGlass = imports.ui.lookingGlass;
|
||||
const NetworkAgent = imports.ui.networkAgent;
|
||||
const NotificationDaemon = imports.ui.notificationDaemon;
|
||||
const WindowAttentionHandler = imports.ui.windowAttentionHandler;
|
||||
const ScreenShield = imports.ui.screenShield;
|
||||
const Scripting = imports.ui.scripting;
|
||||
const ShellDBus = imports.ui.shellDBus;
|
||||
const TelepathyClient = imports.ui.telepathyClient;
|
||||
@ -46,12 +47,12 @@ let automountManager = null;
|
||||
let autorunManager = null;
|
||||
let panel = null;
|
||||
let hotCorners = [];
|
||||
let placesManager = null;
|
||||
let overview = null;
|
||||
let runDialog = null;
|
||||
let lookingGlass = null;
|
||||
let wm = null;
|
||||
let messageTray = null;
|
||||
let screenShield = null;
|
||||
let notificationDaemon = null;
|
||||
let windowAttentionHandler = null;
|
||||
let telepathyClient = null;
|
||||
@ -80,7 +81,6 @@ function _createUserSession() {
|
||||
// not loading any events until the user presses the clock
|
||||
global.launch_calendar_server();
|
||||
|
||||
placesManager = new PlaceDisplay.PlacesManager();
|
||||
telepathyClient = new TelepathyClient.Client();
|
||||
automountManager = new AutomountManager.AutomountManager();
|
||||
autorunManager = new AutorunManager.AutorunManager();
|
||||
@ -218,6 +218,7 @@ function start() {
|
||||
panel = new Panel.Panel();
|
||||
wm = new WindowManager.WindowManager();
|
||||
messageTray = new MessageTray.MessageTray();
|
||||
screenShield = new ScreenShield.ScreenShield();
|
||||
keyboard = new Keyboard.Keyboard();
|
||||
notificationDaemon = new NotificationDaemon.NotificationDaemon();
|
||||
windowAttentionHandler = new WindowAttentionHandler.WindowAttentionHandler();
|
||||
@ -493,8 +494,8 @@ function loadTheme() {
|
||||
|
||||
let theme = new St.Theme ({ application_stylesheet: cssStylesheet });
|
||||
|
||||
if (global.session_type == Shell.SessionType.GDM)
|
||||
theme.load_stylesheet(_gdmCssStylesheet);
|
||||
// FIXME: merge back into main stylesheet
|
||||
theme.load_stylesheet(_gdmCssStylesheet);
|
||||
|
||||
if (previousTheme) {
|
||||
let customStylesheets = previousTheme.get_custom_stylesheets();
|
||||
@ -623,6 +624,10 @@ function _findModal(actor) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
function isInModalStack(actor) {
|
||||
return _findModal(actor) != -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* pushModal:
|
||||
* @actor: #ClutterActor which will be given keyboard focus
|
||||
@ -663,7 +668,7 @@ function pushModal(actor, timestamp, options) {
|
||||
let actorDestroyId = actor.connect('destroy', function() {
|
||||
let index = _findModal(actor);
|
||||
if (index >= 0)
|
||||
modalActorFocusStack.splice(index, 1);
|
||||
popModal(actor);
|
||||
});
|
||||
let curFocus = global.stage.get_key_focus();
|
||||
let curFocusDestroyId;
|
||||
|
@ -746,6 +746,7 @@ const Notification = new Lang.Class({
|
||||
}
|
||||
|
||||
let button = new St.Button({ can_focus: true });
|
||||
button._actionId = id;
|
||||
|
||||
if (this._useActionIcons && Gtk.IconTheme.get_default().has_icon(id)) {
|
||||
button.add_style_class_name('notification-icon-button');
|
||||
@ -765,6 +766,31 @@ const Notification = new Lang.Class({
|
||||
this.updated();
|
||||
},
|
||||
|
||||
// setButtonSensitive:
|
||||
// @id: the action ID
|
||||
// @sensitive: whether the button should be sensitive
|
||||
//
|
||||
// If the notification contains a button with action ID @id,
|
||||
// its sensitivity will be set to @sensitive. Insensitive
|
||||
// buttons cannot be clicked.
|
||||
setButtonSensitive: function(id, sensitive) {
|
||||
if (!this._buttonBox)
|
||||
return;
|
||||
|
||||
let button = this._buttonBox.get_children().filter(function(b) {
|
||||
return b._actionId == id;
|
||||
})[0];
|
||||
|
||||
if (!button || button.reactive == sensitive)
|
||||
return;
|
||||
|
||||
button.reactive = sensitive;
|
||||
if (sensitive)
|
||||
button.remove_style_pseudo_class('insensitive');
|
||||
else
|
||||
button.add_style_pseudo_class('insensitive');
|
||||
},
|
||||
|
||||
setUrgency: function(urgency) {
|
||||
this.urgency = urgency;
|
||||
},
|
||||
@ -960,8 +986,10 @@ const Source = new Lang.Class({
|
||||
|
||||
ICON_SIZE: 24,
|
||||
|
||||
_init: function(title) {
|
||||
_init: function(title, iconName, iconType) {
|
||||
this.title = title;
|
||||
this.iconName = iconName;
|
||||
this.iconType = iconType;
|
||||
|
||||
this.actor = new Shell.GenericContainer();
|
||||
this.actor.connect('get-preferred-width', Lang.bind(this, this._getPreferredWidth));
|
||||
@ -991,6 +1019,8 @@ const Source = new Lang.Class({
|
||||
this.isMuted = false;
|
||||
|
||||
this.notifications = [];
|
||||
|
||||
this._setSummaryIcon(this.createNotificationIcon());
|
||||
},
|
||||
|
||||
_getPreferredWidth: function (actor, forHeight, alloc) {
|
||||
@ -1061,10 +1091,12 @@ const Source = new Lang.Class({
|
||||
},
|
||||
|
||||
// Called to create a new icon actor (of size this.ICON_SIZE).
|
||||
// Must be overridden by the subclass if you do not pass icons
|
||||
// explicitly to the Notification() constructor.
|
||||
// Provides a sane default implementation, override if you need
|
||||
// something more fancy.
|
||||
createNotificationIcon: function() {
|
||||
throw new Error('no implementation of createNotificationIcon in ' + this);
|
||||
return new St.Icon({ icon_name: this.iconName,
|
||||
icon_type: this.iconType,
|
||||
icon_size: this.ICON_SIZE });
|
||||
},
|
||||
|
||||
// Unlike createNotificationIcon, this always returns the same actor;
|
||||
@ -1115,16 +1147,14 @@ const Source = new Lang.Class({
|
||||
},
|
||||
|
||||
//// Protected methods ////
|
||||
|
||||
// The subclass must call this at least once to set the summary icon.
|
||||
_setSummaryIcon: function(icon) {
|
||||
if (this._iconBin.child)
|
||||
this._iconBin.child.destroy();
|
||||
this._iconBin.child = icon;
|
||||
},
|
||||
|
||||
// Default implementation is to do nothing, but subclasses can override
|
||||
open: function(notification) {
|
||||
this.emit('opened', notification);
|
||||
},
|
||||
|
||||
destroyNonResidentNotifications: function() {
|
||||
@ -2489,15 +2519,7 @@ const SystemNotificationSource = new Lang.Class({
|
||||
Extends: Source,
|
||||
|
||||
_init: function() {
|
||||
this.parent(_("System Information"));
|
||||
|
||||
this._setSummaryIcon(this.createNotificationIcon());
|
||||
},
|
||||
|
||||
createNotificationIcon: function() {
|
||||
return new St.Icon({ icon_name: 'dialog-information',
|
||||
icon_type: St.IconType.SYMBOLIC,
|
||||
icon_size: this.ICON_SIZE });
|
||||
this.parent(_("System Information"), 'dialog-information', St.IconType.SYMBOLIC);
|
||||
},
|
||||
|
||||
open: function() {
|
||||
|
@ -638,5 +638,10 @@ const Source = new Lang.Class({
|
||||
}
|
||||
|
||||
this.parent();
|
||||
},
|
||||
|
||||
createNotificationIcon: function() {
|
||||
// We set the summary icon ourselves.
|
||||
return null;
|
||||
}
|
||||
});
|
||||
|
@ -1115,8 +1115,8 @@ const Panel = new Lang.Class({
|
||||
|
||||
openAppMenu: function() {
|
||||
let menu = this._appMenu.menu;
|
||||
if (Main.overview.visible || menu.isOpen)
|
||||
return;
|
||||
if (!this._appMenu.actor.reactive || menu.isOpen)
|
||||
return;
|
||||
|
||||
menu.open();
|
||||
menu.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
|
||||
|
@ -189,7 +189,7 @@ const PlacesManager = new Lang.Class({
|
||||
this._volumeMonitor.connect('drive-changed', Lang.bind(this, this._updateDevices));
|
||||
this._updateDevices();
|
||||
|
||||
this._bookmarksPath = GLib.build_filenamev([GLib.get_home_dir(), '.gtk-bookmarks']);
|
||||
this._bookmarksPath = GLib.build_filenamev([GLib.get_user_config_dir(), 'gtk-3.0', 'bookmarks']);
|
||||
this._bookmarksFile = Gio.file_new_for_path(this._bookmarksPath);
|
||||
this._monitor = this._bookmarksFile.monitor_file(Gio.FileMonitorFlags.NONE, null);
|
||||
this._bookmarkTimeoutId = 0;
|
||||
@ -365,12 +365,13 @@ const PlaceSearchProvider = new Lang.Class({
|
||||
|
||||
_init: function() {
|
||||
this.parent(_("PLACES & DEVICES"));
|
||||
this.placesManager = new PlacesManager();
|
||||
},
|
||||
|
||||
getResultMetas: function(resultIds) {
|
||||
getResultMetas: function(resultIds, callback) {
|
||||
let metas = [];
|
||||
for (let i = 0; i < resultIds.length; i++) {
|
||||
let placeInfo = Main.placesManager.lookupPlaceById(resultIds[i]);
|
||||
let placeInfo = this.placesManager.lookupPlaceById(resultIds[i]);
|
||||
if (!placeInfo)
|
||||
metas.push(null);
|
||||
else
|
||||
@ -381,24 +382,22 @@ const PlaceSearchProvider = new Lang.Class({
|
||||
}
|
||||
});
|
||||
}
|
||||
return metas;
|
||||
callback(metas);
|
||||
},
|
||||
|
||||
activateResult: function(id, params) {
|
||||
let placeInfo = Main.placesManager.lookupPlaceById(id);
|
||||
let placeInfo = this.placesManager.lookupPlaceById(id);
|
||||
placeInfo.launch(params);
|
||||
},
|
||||
|
||||
_compareResultMeta: function (idA, idB) {
|
||||
let infoA = Main.placesManager.lookupPlaceById(idA);
|
||||
let infoB = Main.placesManager.lookupPlaceById(idB);
|
||||
let infoA = this.placesManager.lookupPlaceById(idA);
|
||||
let infoB = this.placesManager.lookupPlaceById(idB);
|
||||
return infoA.name.localeCompare(infoB.name);
|
||||
},
|
||||
|
||||
_searchPlaces: function(places, terms) {
|
||||
let multiplePrefixResults = [];
|
||||
let prefixResults = [];
|
||||
let multipleSubstringResults = [];
|
||||
let substringResults = [];
|
||||
|
||||
terms = terms.map(String.toLowerCase);
|
||||
@ -406,29 +405,26 @@ const PlaceSearchProvider = new Lang.Class({
|
||||
for (let i = 0; i < places.length; i++) {
|
||||
let place = places[i];
|
||||
let mtype = place.matchTerms(terms);
|
||||
if (mtype == Search.MatchType.MULTIPLE_PREFIX)
|
||||
multiplePrefixResults.push(place.id);
|
||||
else if (mtype == Search.MatchType.PREFIX)
|
||||
if (mtype == Search.MatchType.PREFIX)
|
||||
prefixResults.push(place.id);
|
||||
else if (mtype == Search.MatchType.MULTIPLE_SUBSTRING)
|
||||
multipleSubstringResults.push(place.id);
|
||||
else if (mtype == Search.MatchType.SUBSTRING)
|
||||
substringResults.push(place.id);
|
||||
}
|
||||
multiplePrefixResults.sort(this._compareResultMeta);
|
||||
prefixResults.sort(this._compareResultMeta);
|
||||
multipleSubstringResults.sort(this._compareResultMeta);
|
||||
substringResults.sort(this._compareResultMeta);
|
||||
return multiplePrefixResults.concat(prefixResults.concat(multipleSubstringResults.concat(substringResults)));
|
||||
prefixResults.sort(Lang.bind(this, this._compareResultMeta));
|
||||
substringResults.sort(Lang.bind(this, this._compareResultMeta));
|
||||
|
||||
this.searchSystem.pushResults(this, prefixResults.concat(substringResults));
|
||||
},
|
||||
|
||||
getInitialResultSet: function(terms) {
|
||||
let places = Main.placesManager.getAllPlaces();
|
||||
return this._searchPlaces(places, terms);
|
||||
let places = this.placesManager.getAllPlaces();
|
||||
this._searchPlaces(places, terms);
|
||||
},
|
||||
|
||||
getSubsearchResultSet: function(previousResults, terms) {
|
||||
let places = previousResults.map(function (id) { return Main.placesManager.lookupPlaceById(id); });
|
||||
return this._searchPlaces(places, terms);
|
||||
let places = previousResults.map(Lang.bind(this, function(id) {
|
||||
return this.placesManager.lookupPlaceById(id);
|
||||
}));
|
||||
this._searchPlaces(places, terms);
|
||||
}
|
||||
});
|
||||
|
@ -91,7 +91,6 @@ const RemoteSearchProvider = new Lang.Class({
|
||||
dbusName, dbusPath);
|
||||
|
||||
this.parent(title.toUpperCase());
|
||||
this.async = true;
|
||||
this._cancellable = new Gio.Cancellable();
|
||||
},
|
||||
|
||||
@ -120,7 +119,7 @@ const RemoteSearchProvider = new Lang.Class({
|
||||
this.searchSystem.pushResults(this, results[0]);
|
||||
},
|
||||
|
||||
getInitialResultSetAsync: function(terms) {
|
||||
getInitialResultSet: function(terms) {
|
||||
this._cancellable.cancel();
|
||||
this._cancellable.reset();
|
||||
try {
|
||||
@ -133,7 +132,7 @@ const RemoteSearchProvider = new Lang.Class({
|
||||
}
|
||||
},
|
||||
|
||||
getSubsearchResultSetAsync: function(previousResults, newTerms) {
|
||||
getSubsearchResultSet: function(previousResults, newTerms) {
|
||||
this._cancellable.cancel();
|
||||
this._cancellable.reset();
|
||||
try {
|
||||
@ -164,7 +163,7 @@ const RemoteSearchProvider = new Lang.Class({
|
||||
callback(resultMetas);
|
||||
},
|
||||
|
||||
getResultMetasAsync: function(ids, callback) {
|
||||
getResultMetas: function(ids, callback) {
|
||||
this._cancellable.cancel();
|
||||
this._cancellable.reset();
|
||||
try {
|
||||
|
142
js/ui/screenShield.js
Normal file
142
js/ui/screenShield.js
Normal file
@ -0,0 +1,142 @@
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Gio = imports.gi.Gio;
|
||||
const Lang = imports.lang;
|
||||
const Meta = imports.gi.Meta;
|
||||
const St = imports.gi.St;
|
||||
|
||||
const GnomeSession = imports.misc.gnomeSession;
|
||||
const Lightbox = imports.ui.lightbox;
|
||||
const UnlockDialog = imports.ui.unlockDialog;
|
||||
const Main = imports.ui.main;
|
||||
|
||||
const SCREENSAVER_SCHEMA = 'org.gnome.desktop.screensaver';
|
||||
const LOCK_ENABLED_KEY = 'lock-enabled';
|
||||
|
||||
/**
|
||||
* To test screen shield, make sure to kill gnome-screensaver.
|
||||
*
|
||||
* If you are setting org.gnome.desktop.session.idle-delay directly in dconf,
|
||||
* rather than through System Settings, you also need to set
|
||||
* org.gnome.settings-daemon.plugins.power.sleep-display-ac and
|
||||
* org.gnome.settings-daemon.plugins.power.sleep-display-battery to the same value.
|
||||
* This will ensure that the screen blanks at the right time when it fades out.
|
||||
* https://bugzilla.gnome.org/show_bug.cgi?id=668703 explains the dependance.
|
||||
*/
|
||||
const ScreenShield = new Lang.Class({
|
||||
Name: 'ScreenShield',
|
||||
|
||||
_init: function() {
|
||||
this._presence = new GnomeSession.Presence(Lang.bind(this, function(proxy, error) {
|
||||
this._onStatusChanged(proxy.status);
|
||||
}));
|
||||
this._presence.connectSignal('StatusChanged', Lang.bind(this, function(proxy, senderName, [status]) {
|
||||
this._onStatusChanged(status);
|
||||
}));
|
||||
|
||||
this._settings = new Gio.Settings({ schema: SCREENSAVER_SCHEMA });
|
||||
|
||||
this._isModal = false;
|
||||
this._isLocked = false;
|
||||
this._group = new St.Widget({ x: 0,
|
||||
y: 0 });
|
||||
Main.uiGroup.add_actor(this._group);
|
||||
let constraint = new Clutter.BindConstraint({ source: global.stage,
|
||||
coordinate: Clutter.BindCoordinate.POSITION | Clutter.BindCoordinate.SIZE });
|
||||
this._group.add_constraint(constraint);
|
||||
|
||||
this._lightbox = new Lightbox.Lightbox(this._group,
|
||||
{ inhibitEvents: true, fadeInTime: 10, fadeFactor: 1 });
|
||||
this._background = Meta.BackgroundActor.new_for_screen(global.screen);
|
||||
this._background.hide();
|
||||
Main.uiGroup.add_actor(this._background);
|
||||
},
|
||||
|
||||
_onStatusChanged: function(status) {
|
||||
log ("in _onStatusChanged");
|
||||
if (status == GnomeSession.PresenceStatus.IDLE) {
|
||||
log("session gone idle");
|
||||
|
||||
if (this._dialog) {
|
||||
log('canceling existing dialog');
|
||||
this._dialog.cancel();
|
||||
this._dialog = null;
|
||||
}
|
||||
|
||||
this._group.reactive = true;
|
||||
if (!this._isModal) {
|
||||
Main.pushModal(this._group);
|
||||
this._isModal = true;
|
||||
}
|
||||
|
||||
this._group.raise_top();
|
||||
this._lightbox.show();
|
||||
} else {
|
||||
log('status is now ' + status);
|
||||
|
||||
let lightboxWasShown = this._lightbox.shown;
|
||||
log("this._lightbox.shown " + this._lightbox.shown);
|
||||
this._lightbox.hide();
|
||||
|
||||
let shouldLock = lightboxWasShown && this._settings.get_boolean(LOCK_ENABLED_KEY);
|
||||
if (shouldLock || this._isLocked) {
|
||||
this._isLocked = true;
|
||||
this._background.show();
|
||||
this._background.raise_top();
|
||||
|
||||
this._showUnlockDialog();
|
||||
} else if (this._isModal) {
|
||||
this._popModal();
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
_popModal: function() {
|
||||
this._group.reactive = false;
|
||||
Main.popModal(this._group);
|
||||
|
||||
this._background.hide();
|
||||
},
|
||||
|
||||
_showUnlockDialog: function() {
|
||||
if (this._dialog) {
|
||||
log ('_showUnlockDialog called again when the dialog was already there');
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
this._dialog = new UnlockDialog.UnlockDialog();
|
||||
this._dialog.connect('failed', Lang.bind(this, this._onUnlockFailed));
|
||||
this._dialog.connect('unlocked', Lang.bind(this, this._onUnlockSucceded));
|
||||
|
||||
if (!this._dialog.open(global.get_current_time()))
|
||||
throw new Error('open failed!')
|
||||
|
||||
this._dialog._group.raise_top();
|
||||
} catch(e) {
|
||||
// FIXME: this is for debugging purposes
|
||||
logError(e, 'error while creating unlock dialog');
|
||||
|
||||
this._popModal();
|
||||
}
|
||||
},
|
||||
|
||||
_onUnlockFailed: function() {
|
||||
// FIXME: for now, on failure we just destroy the dialog and create a new
|
||||
// one (this is what gnome-screensaver does)
|
||||
// in the future, we may want to go back to the lock screen instead
|
||||
|
||||
this._dialog.destroy();
|
||||
this._dialog = null;
|
||||
|
||||
this._showUnlockDialog();
|
||||
},
|
||||
|
||||
_onUnlockSucceded: function() {
|
||||
this._dialog.destroy();
|
||||
this._dialog = null;
|
||||
|
||||
this._popModal();
|
||||
},
|
||||
});
|
@ -18,9 +18,7 @@ const DISABLED_OPEN_SEARCH_PROVIDERS_KEY = 'disabled-open-search-providers';
|
||||
const MatchType = {
|
||||
NONE: 0,
|
||||
SUBSTRING: 1,
|
||||
MULTIPLE_SUBSTRING: 2,
|
||||
PREFIX: 3,
|
||||
MULTIPLE_PREFIX: 4
|
||||
PREFIX: 2
|
||||
};
|
||||
|
||||
const SearchResultDisplay = new Lang.Class({
|
||||
@ -72,11 +70,8 @@ const SearchResultDisplay = new Lang.Class({
|
||||
* Subclass this object to add a new result type
|
||||
* to the search system, then call registerProvider()
|
||||
* in SearchSystem with an instance.
|
||||
* By default, search is synchronous and uses the
|
||||
* Search is asynchronous and uses the
|
||||
* getInitialResultSet()/getSubsearchResultSet() methods.
|
||||
* For asynchronous search, set the async property to true
|
||||
* and implement getInitialResultSetAsync()/getSubsearchResultSetAsync()
|
||||
* instead.
|
||||
*/
|
||||
const SearchProvider = new Lang.Class({
|
||||
Name: 'SearchProvider',
|
||||
@ -84,7 +79,6 @@ const SearchProvider = new Lang.Class({
|
||||
_init: function(title) {
|
||||
this.title = title;
|
||||
this.searchSystem = null;
|
||||
this.async = false;
|
||||
},
|
||||
|
||||
/**
|
||||
@ -95,7 +89,7 @@ const SearchProvider = new Lang.Class({
|
||||
* therefore a single term of length one or two), or when
|
||||
* a new term is added.
|
||||
*
|
||||
* Should return an array of result identifier strings representing
|
||||
* Should "return" an array of result identifier strings representing
|
||||
* items which match the given search terms. This
|
||||
* is expected to be a substring match on the metadata for a given
|
||||
* item. Ordering of returned results is up to the discretion of the provider,
|
||||
@ -105,6 +99,9 @@ const SearchProvider = new Lang.Class({
|
||||
* description) before single matches
|
||||
* * Put items which match on a prefix before non-prefix substring matches
|
||||
*
|
||||
* We say "return" above, but in order to make the query asynchronous, use
|
||||
* this.searchSystem.pushResults();. The return value should be ignored.
|
||||
*
|
||||
* This function should be fast; do not perform unindexed full-text searches
|
||||
* or network queries.
|
||||
*/
|
||||
@ -112,18 +109,6 @@ const SearchProvider = new Lang.Class({
|
||||
throw new Error('Not implemented');
|
||||
},
|
||||
|
||||
/**
|
||||
* getInitialResultSetAsync:
|
||||
* @terms: Array of search terms, treated as logical AND
|
||||
*
|
||||
* Like getInitialResultSet(), but the method should return immediately
|
||||
* without a return value - use SearchSystem.pushResults() when the
|
||||
* corresponding results are ready.
|
||||
*/
|
||||
getInitialResultSetAsync: function(terms) {
|
||||
throw new Error('Not implemented');
|
||||
},
|
||||
|
||||
/**
|
||||
* getSubsearchResultSet:
|
||||
* @previousResults: Array of item identifiers
|
||||
@ -136,46 +121,23 @@ const SearchProvider = new Lang.Class({
|
||||
*
|
||||
* This allows search providers to only search through the previous
|
||||
* result set, rather than possibly performing a full re-query.
|
||||
*
|
||||
* Similar to getInitialResultSet, the return value for this will
|
||||
* be ignored; use this.searchSystem.pushResults();.
|
||||
*/
|
||||
getSubsearchResultSet: function(previousResults, newTerms) {
|
||||
throw new Error('Not implemented');
|
||||
},
|
||||
|
||||
/**
|
||||
* getSubsearchResultSetAsync:
|
||||
* @previousResults: Array of item identifiers
|
||||
* @newTerms: Updated search terms
|
||||
*
|
||||
* Like getSubsearchResultSet(), but the method should return immediately
|
||||
* without a return value - use SearchSystem.pushResults() when the
|
||||
* corresponding results are ready.
|
||||
*/
|
||||
getSubsearchResultSetAsync: function(previousResults, newTerms) {
|
||||
throw new Error('Not implemented');
|
||||
},
|
||||
|
||||
/**
|
||||
* getResultMetas:
|
||||
* @ids: Result identifier strings
|
||||
*
|
||||
* Return an array of objects with 'id', 'name', (both strings) and
|
||||
* Call callback with array of objects with 'id', 'name', (both strings) and
|
||||
* 'createIcon' (function(size) returning a Clutter.Texture) properties
|
||||
* with the same number of members as @ids
|
||||
*/
|
||||
getResultMetas: function(ids) {
|
||||
throw new Error('Not implemented');
|
||||
},
|
||||
|
||||
/**
|
||||
* getResultMetasAsync:
|
||||
* @ids: Result identifier strings
|
||||
* @callback: callback to pass the results to when ready
|
||||
*
|
||||
* Like getResultMetas(), but the method should return immediately
|
||||
* without a return value - pass the results to the provided @callback
|
||||
* when ready.
|
||||
*/
|
||||
getResultMetasAsync: function(ids, callback) {
|
||||
getResultMetas: function(ids, callback) {
|
||||
throw new Error('Not implemented');
|
||||
},
|
||||
|
||||
@ -379,18 +341,18 @@ const SearchSystem = new Lang.Class({
|
||||
}
|
||||
}
|
||||
|
||||
let previousResultsArr = this._previousResults;
|
||||
|
||||
let results = [];
|
||||
this._previousTerms = terms;
|
||||
this._previousResults = results;
|
||||
|
||||
if (isSubSearch) {
|
||||
for (let i = 0; i < this._providers.length; i++) {
|
||||
let [provider, previousResults] = this._previousResults[i];
|
||||
let [provider, previousResults] = previousResultsArr[i];
|
||||
try {
|
||||
if (provider.async) {
|
||||
provider.getSubsearchResultSetAsync(previousResults, terms);
|
||||
results.push([provider, []]);
|
||||
} else {
|
||||
let providerResults = provider.getSubsearchResultSet(previousResults, terms);
|
||||
results.push([provider, providerResults]);
|
||||
}
|
||||
results.push([provider, []]);
|
||||
provider.getSubsearchResultSet(previousResults, terms);
|
||||
} catch (error) {
|
||||
global.log ('A ' + error.name + ' has occured in ' + provider.title + ': ' + error.message);
|
||||
}
|
||||
@ -399,22 +361,13 @@ const SearchSystem = new Lang.Class({
|
||||
for (let i = 0; i < this._providers.length; i++) {
|
||||
let provider = this._providers[i];
|
||||
try {
|
||||
if (provider.async) {
|
||||
provider.getInitialResultSetAsync(terms);
|
||||
results.push([provider, []]);
|
||||
} else {
|
||||
let providerResults = provider.getInitialResultSet(terms);
|
||||
results.push([provider, providerResults]);
|
||||
}
|
||||
results.push([provider, []]);
|
||||
provider.getInitialResultSet(terms);
|
||||
} catch (error) {
|
||||
global.log ('A ' + error.name + ' has occured in ' + provider.title + ': ' + error.message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this._previousTerms = terms;
|
||||
this._previousResults = results;
|
||||
this.emit('search-completed', results);
|
||||
},
|
||||
});
|
||||
Signals.addSignalMethods(SearchSystem.prototype);
|
||||
|
@ -119,13 +119,7 @@ const GridSearchResults = new Lang.Class({
|
||||
if (results.length == 0)
|
||||
return;
|
||||
|
||||
if (provider.async) {
|
||||
provider.getResultMetasAsync(results,
|
||||
Lang.bind(this, this.renderResults));
|
||||
} else {
|
||||
let metas = provider.getResultMetas(results);
|
||||
this.renderResults(metas);
|
||||
}
|
||||
provider.getResultMetas(results, Lang.bind(this, this.renderResults));
|
||||
}));
|
||||
}));
|
||||
this._notDisplayedResult = [];
|
||||
@ -179,8 +173,7 @@ const SearchResults = new Lang.Class({
|
||||
|
||||
_init: function(searchSystem, openSearchSystem) {
|
||||
this._searchSystem = searchSystem;
|
||||
this._searchSystem.connect('search-updated', Lang.bind(this, this._updateCurrentResults));
|
||||
this._searchSystem.connect('search-completed', Lang.bind(this, this._updateResults));
|
||||
this._searchSystem.connect('search-updated', Lang.bind(this, this._updateResults));
|
||||
this._openSearchSystem = openSearchSystem;
|
||||
|
||||
this.actor = new St.BoxLayout({ name: 'searchResults',
|
||||
@ -214,10 +207,8 @@ const SearchResults = new Lang.Class({
|
||||
this._content.add(this._statusText);
|
||||
this._providers = this._searchSystem.getProviders();
|
||||
this._providerMeta = [];
|
||||
this._providerMetaResults = {};
|
||||
for (let i = 0; i < this._providers.length; i++) {
|
||||
this.createProviderMeta(this._providers[i]);
|
||||
this._providerMetaResults[this.providers[i].title] = [];
|
||||
}
|
||||
this._searchProvidersBox = new St.BoxLayout({ style_class: 'search-providers-box' });
|
||||
this.actor.add(this._searchProvidersBox);
|
||||
@ -290,8 +281,7 @@ const SearchResults = new Lang.Class({
|
||||
|
||||
this._providerMeta.push({ provider: provider,
|
||||
actor: providerBox,
|
||||
resultDisplay: resultDisplay,
|
||||
hasPendingResults: false });
|
||||
resultDisplay: resultDisplay });
|
||||
this._content.add(providerBox);
|
||||
},
|
||||
|
||||
@ -307,7 +297,6 @@ const SearchResults = new Lang.Class({
|
||||
},
|
||||
|
||||
_clearDisplay: function() {
|
||||
this._visibleResultsCount = 0;
|
||||
for (let i = 0; i < this._providerMeta.length; i++) {
|
||||
let meta = this._providerMeta[i];
|
||||
meta.resultDisplay.clear();
|
||||
@ -335,6 +324,8 @@ const SearchResults = new Lang.Class({
|
||||
|
||||
doSearch: function (searchString) {
|
||||
this._searchSystem.updateSearch(searchString);
|
||||
let terms = this._searchSystem.getTerms();
|
||||
this._openSearchSystem.setSearchTerms(terms);
|
||||
},
|
||||
|
||||
_metaForProvider: function(provider) {
|
||||
@ -346,8 +337,6 @@ const SearchResults = new Lang.Class({
|
||||
|
||||
for (let i = 0; i < this._providerMeta.length; i++) {
|
||||
let meta = this._providerMeta[i];
|
||||
if (meta.hasPendingResults)
|
||||
return;
|
||||
|
||||
if (!meta.actor.visible)
|
||||
continue;
|
||||
@ -372,78 +361,57 @@ const SearchResults = new Lang.Class({
|
||||
}
|
||||
},
|
||||
|
||||
_updateCurrentResults: function(searchSystem, results) {
|
||||
let terms = searchSystem.getTerms();
|
||||
let [provider, providerResults] = results;
|
||||
let meta = this._metaForProvider(provider);
|
||||
meta.hasPendingResults = false;
|
||||
this._updateProviderResults(provider, providerResults, terms);
|
||||
},
|
||||
_updateStatusText: function () {
|
||||
let haveResults = false;
|
||||
|
||||
_updateProviderResults: function(provider, providerResults, terms) {
|
||||
let meta = this._metaForProvider(provider);
|
||||
if (providerResults.length == 0) {
|
||||
this._clearDisplayForProvider(provider);
|
||||
meta.resultDisplay.setResults([], []);
|
||||
} else {
|
||||
this._providerMetaResults[provider.title] = providerResults;
|
||||
meta.resultDisplay.setResults(providerResults, terms);
|
||||
let results = meta.resultDisplay.getResultsForDisplay();
|
||||
|
||||
if (provider.async) {
|
||||
provider.getResultMetasAsync(results, Lang.bind(this,
|
||||
function(metas) {
|
||||
this._clearDisplayForProvider(provider);
|
||||
meta.actor.show();
|
||||
|
||||
// Hinding drops the key focus if we have it
|
||||
let focus = global.stage.get_key_focus();
|
||||
this._content.hide();
|
||||
|
||||
meta.resultDisplay.renderResults(metas);
|
||||
this._maybeSetInitialSelection();
|
||||
|
||||
this._content.show();
|
||||
if (this._content.contains(focus))
|
||||
global.stage.set_key_focus(focus);
|
||||
}));
|
||||
} else {
|
||||
let metas = provider.getResultMetas(results);
|
||||
this._clearDisplayForProvider(provider);
|
||||
meta.actor.show();
|
||||
meta.resultDisplay.renderResults(metas);
|
||||
for (let i = 0; i < this._providerMeta.length; ++i)
|
||||
if (this._providerMeta[i].resultDisplay.getFirstResult()) {
|
||||
haveResults = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
this._maybeSetInitialSelection();
|
||||
},
|
||||
|
||||
_updateResults: function(searchSystem, results) {
|
||||
if (results.length == 0) {
|
||||
if (!haveResults) {
|
||||
this._statusText.set_text(_("No matching results."));
|
||||
this._statusText.show();
|
||||
} else {
|
||||
this._statusText.hide();
|
||||
}
|
||||
},
|
||||
|
||||
_updateResults: function(searchSystem, results) {
|
||||
let terms = searchSystem.getTerms();
|
||||
this._openSearchSystem.setSearchTerms(terms);
|
||||
let [provider, providerResults] = results;
|
||||
let meta = this._metaForProvider(provider);
|
||||
|
||||
// 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();
|
||||
if (providerResults.length == 0) {
|
||||
this._clearDisplayForProvider(provider);
|
||||
meta.resultDisplay.setResults([], []);
|
||||
this._maybeSetInitialSelection();
|
||||
this._updateStatusText();
|
||||
} else {
|
||||
meta.resultDisplay.setResults(providerResults, terms);
|
||||
let results = meta.resultDisplay.getResultsForDisplay();
|
||||
|
||||
for (let i = 0; i < results.length; i++) {
|
||||
let [provider, providerResults] = results[i];
|
||||
let meta = this._metaForProvider(provider);
|
||||
meta.hasPendingResults = provider.async;
|
||||
if (!meta.hasPendingResults)
|
||||
this._updateProviderResults(provider, providerResults, terms);
|
||||
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);
|
||||
}));
|
||||
}
|
||||
|
||||
this._content.show();
|
||||
|
||||
return true;
|
||||
},
|
||||
|
||||
activateDefault: function() {
|
||||
|
@ -243,6 +243,7 @@ const ShellMountPasswordSource = new Lang.Class({
|
||||
this.parent(strings[0]);
|
||||
|
||||
this._notification = new ShellMountPasswordNotification(this, strings, icon, reaskPassword);
|
||||
this._setSummaryIcon(icon);
|
||||
|
||||
// add ourselves as a source, and popup the notification
|
||||
Main.messageTray.add(this);
|
||||
|
@ -305,7 +305,7 @@ const Indicator = new Lang.Class({
|
||||
|
||||
_ensureSource: function() {
|
||||
if (!this._source) {
|
||||
this._source = new Source();
|
||||
this._source = new MessageTray.Source(_("Bluetooth"), 'bluetooth-active', St.IconType.SYMBOLIC);
|
||||
Main.messageTray.add(this._source);
|
||||
}
|
||||
},
|
||||
@ -330,35 +330,6 @@ const Indicator = new Lang.Class({
|
||||
}
|
||||
});
|
||||
|
||||
const Source = new Lang.Class({
|
||||
Name: 'BluetoothSource',
|
||||
Extends: MessageTray.Source,
|
||||
|
||||
_init: function() {
|
||||
this.parent(_("Bluetooth"));
|
||||
|
||||
this._setSummaryIcon(this.createNotificationIcon());
|
||||
},
|
||||
|
||||
notify: function(notification) {
|
||||
this._private_destroyId = notification.connect('destroy', Lang.bind(this, function(notification) {
|
||||
if (this.notification == notification) {
|
||||
// the destroyed notification is the last for this source
|
||||
this.notification.disconnect(this._private_destroyId);
|
||||
this.destroy();
|
||||
}
|
||||
}));
|
||||
|
||||
this.parent(notification);
|
||||
},
|
||||
|
||||
createNotificationIcon: function() {
|
||||
return new St.Icon({ icon_name: 'bluetooth-active',
|
||||
icon_type: St.IconType.SYMBOLIC,
|
||||
icon_size: this.ICON_SIZE });
|
||||
}
|
||||
});
|
||||
|
||||
const AuthNotification = new Lang.Class({
|
||||
Name: 'AuthNotification',
|
||||
Extends: MessageTray.Notification,
|
||||
@ -409,7 +380,7 @@ const ConfirmNotification = new Lang.Class({
|
||||
this._applet = applet;
|
||||
this._devicePath = device_path;
|
||||
this.addBody(_("Device %s wants to pair with this computer").format(long_name));
|
||||
this.addBody(_("Please confirm whether the PIN '%s' matches the one on the device.").format(pin));
|
||||
this.addBody(_("Please confirm whether the PIN '%06d' matches the one on the device.").format(pin));
|
||||
|
||||
this.addButton('matches', _("Matches"));
|
||||
this.addButton('does-not-match', _("Does not match"));
|
||||
@ -445,7 +416,8 @@ const PinNotification = new Lang.Class({
|
||||
this._entry.connect('key-release-event', Lang.bind(this, function(entry, event) {
|
||||
let key = event.get_key_symbol();
|
||||
if (key == Clutter.KEY_Return) {
|
||||
this.emit('action-invoked', 'ok');
|
||||
if (this._canActivateOkButton())
|
||||
this.emit('action-invoked', 'ok');
|
||||
return true;
|
||||
} else if (key == Clutter.KEY_Escape) {
|
||||
this.emit('action-invoked', 'cancel');
|
||||
@ -458,6 +430,12 @@ const PinNotification = new Lang.Class({
|
||||
this.addButton('ok', _("OK"));
|
||||
this.addButton('cancel', _("Cancel"));
|
||||
|
||||
this.setButtonSensitive('ok', this._canActivateOkButton());
|
||||
this._entry.clutter_text.connect('text-changed', Lang.bind(this,
|
||||
function() {
|
||||
this.setButtonSensitive('ok', this._canActivateOkButton());
|
||||
}));
|
||||
|
||||
this.connect('action-invoked', Lang.bind(this, function(self, action) {
|
||||
if (action == 'ok') {
|
||||
if (this._numeric) {
|
||||
@ -480,6 +458,11 @@ const PinNotification = new Lang.Class({
|
||||
}));
|
||||
},
|
||||
|
||||
_canActivateOkButton: function() {
|
||||
// PINs have a fixed length of 6
|
||||
return this._entry.clutter_text.text.length == 6;
|
||||
},
|
||||
|
||||
grabFocus: function(lockTray) {
|
||||
this.parent(lockTray);
|
||||
global.stage.set_key_focus(this._entry);
|
||||
|
@ -1644,7 +1644,10 @@ const NMApplet = new Lang.Class({
|
||||
|
||||
_ensureSource: function() {
|
||||
if (!this._source) {
|
||||
this._source = new NMMessageTraySource();
|
||||
this._source = new MessageTray.Source(_("Network Manager"),
|
||||
'network-transmit-receive',
|
||||
St.IconType.SYMBOLIC);
|
||||
|
||||
this._source.connect('destroy', Lang.bind(this, function() {
|
||||
this._source = null;
|
||||
}));
|
||||
@ -2100,18 +2103,3 @@ const NMApplet = new Lang.Class({
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
const NMMessageTraySource = new Lang.Class({
|
||||
Name: 'NMMessageTraySource',
|
||||
Extends: MessageTray.Source,
|
||||
|
||||
_init: function() {
|
||||
this.parent(_("Network Manager"));
|
||||
|
||||
let icon = new St.Icon({ icon_name: 'network-transmit-receive',
|
||||
icon_type: St.IconType.SYMBOLIC,
|
||||
icon_size: this.ICON_SIZE
|
||||
});
|
||||
this._setSummaryIcon(icon);
|
||||
}
|
||||
});
|
||||
|
@ -365,8 +365,9 @@ const Client = new Lang.Class({
|
||||
|
||||
_ensureSubscriptionSource: function() {
|
||||
if (this._subscriptionSource == null) {
|
||||
this._subscriptionSource = new MultiNotificationSource(
|
||||
_("Subscription request"), 'gtk-dialog-question');
|
||||
this._subscriptionSource = new MessageTray.Source(_("Subscription request"),
|
||||
'gtk-dialog-question',
|
||||
St.IconType.FULLCOLOR);
|
||||
Main.messageTray.add(this._subscriptionSource);
|
||||
this._subscriptionSource.connect('destroy', Lang.bind(this, function () {
|
||||
this._subscriptionSource = null;
|
||||
@ -401,8 +402,9 @@ const Client = new Lang.Class({
|
||||
|
||||
_ensureAccountSource: function() {
|
||||
if (this._accountSource == null) {
|
||||
this._accountSource = new MultiNotificationSource(
|
||||
_("Connection error"), 'gtk-dialog-error');
|
||||
this._accountSource = new MessageTray.Source(_("Connection error"),
|
||||
'gtk-dialog-error',
|
||||
St.IconType.FULLCOLOR);
|
||||
Main.messageTray.add(this._accountSource);
|
||||
this._accountSource.connect('destroy', Lang.bind(this, function () {
|
||||
this._accountSource = null;
|
||||
@ -418,14 +420,14 @@ const ChatSource = new Lang.Class({
|
||||
Extends: MessageTray.Source,
|
||||
|
||||
_init: function(account, conn, channel, contact, client) {
|
||||
this.parent(contact.get_alias());
|
||||
|
||||
this.isChat = true;
|
||||
|
||||
this._account = account;
|
||||
this._contact = contact;
|
||||
this._client = client;
|
||||
|
||||
this.parent(contact.get_alias());
|
||||
|
||||
this._pendingMessages = [];
|
||||
|
||||
this._conn = conn;
|
||||
@ -446,8 +448,6 @@ const ChatSource = new Lang.Class({
|
||||
this._receivedId = this._channel.connect('message-received', Lang.bind(this, this._messageReceived));
|
||||
this._pendingId = this._channel.connect('pending-message-removed', Lang.bind(this, this._pendingRemoved));
|
||||
|
||||
this._setSummaryIcon(this.createNotificationIcon());
|
||||
|
||||
this._notifyAliasId = this._contact.connect('notify::alias', Lang.bind(this, this._updateAlias));
|
||||
this._notifyAvatarId = this._contact.connect('notify::avatar-file', Lang.bind(this, this._updateAvatarIcon));
|
||||
this._presenceChangedId = this._contact.connect('presence-changed', Lang.bind(this, this._presenceChanged));
|
||||
@ -1002,10 +1002,9 @@ const ApproverSource = new Lang.Class({
|
||||
Extends: MessageTray.Source,
|
||||
|
||||
_init: function(dispatchOp, text, gicon) {
|
||||
this.parent(text);
|
||||
|
||||
this._gicon = gicon;
|
||||
this._setSummaryIcon(this.createNotificationIcon());
|
||||
|
||||
this.parent(text);
|
||||
|
||||
this._dispatchOp = dispatchOp;
|
||||
|
||||
@ -1028,7 +1027,6 @@ const ApproverSource = new Lang.Class({
|
||||
|
||||
createNotificationIcon: function() {
|
||||
return new St.Icon({ gicon: this._gicon,
|
||||
icon_type: St.IconType.FULLCOLOR,
|
||||
icon_size: this.ICON_SIZE });
|
||||
}
|
||||
});
|
||||
@ -1151,40 +1149,6 @@ const FileTransferNotification = new Lang.Class({
|
||||
}
|
||||
});
|
||||
|
||||
// A notification source that can embed multiple notifications
|
||||
const MultiNotificationSource = new Lang.Class({
|
||||
Name: 'MultiNotificationSource',
|
||||
Extends: MessageTray.Source,
|
||||
|
||||
_init: function(title, icon) {
|
||||
this.parent(title);
|
||||
|
||||
this._icon = icon;
|
||||
this._setSummaryIcon(this.createNotificationIcon());
|
||||
this._nbNotifications = 0;
|
||||
},
|
||||
|
||||
notify: function(notification) {
|
||||
this.parent(notification);
|
||||
|
||||
this._nbNotifications += 1;
|
||||
|
||||
// Display the source while there is at least one notification
|
||||
notification.connect('destroy', Lang.bind(this, function () {
|
||||
this._nbNotifications -= 1;
|
||||
|
||||
if (this._nbNotifications == 0)
|
||||
this.destroy();
|
||||
}));
|
||||
},
|
||||
|
||||
createNotificationIcon: function() {
|
||||
return new St.Icon({ gicon: Gio.icon_new_for_string(this._icon),
|
||||
icon_type: St.IconType.FULLCOLOR,
|
||||
icon_size: this.ICON_SIZE });
|
||||
}
|
||||
});
|
||||
|
||||
// Subscription request
|
||||
const SubscriptionRequestNotification = new Lang.Class({
|
||||
Name: 'SubscriptionRequestNotification',
|
||||
|
363
js/ui/unlockDialog.js
Normal file
363
js/ui/unlockDialog.js
Normal file
@ -0,0 +1,363 @@
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const AccountsService = imports.gi.AccountsService;
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const GdmGreeter = imports.gi.GdmGreeter;
|
||||
const Gio = imports.gi.Gio;
|
||||
const GLib = imports.gi.GLib;
|
||||
const Gtk = imports.gi.Gtk;
|
||||
const Lang = imports.lang;
|
||||
const Mainloop = imports.mainloop;
|
||||
const Signals = imports.signals;
|
||||
const Shell = imports.gi.Shell;
|
||||
const St = imports.gi.St;
|
||||
|
||||
const ModalDialog = imports.ui.modalDialog;
|
||||
|
||||
const Fprint = imports.gdm.fingerprint;
|
||||
const GdmLoginDialog = imports.gdm.loginDialog;
|
||||
|
||||
function _fadeInActor(actor) {
|
||||
if (actor.opacity == 255 && actor.visible)
|
||||
return;
|
||||
|
||||
actor.show();
|
||||
let [minHeight, naturalHeight] = actor.get_preferred_height(-1);
|
||||
|
||||
actor.opacity = 0;
|
||||
actor.set_height(0);
|
||||
Tweener.addTween(actor,
|
||||
{ opacity: 255,
|
||||
height: naturalHeight,
|
||||
time: _FADE_ANIMATION_TIME,
|
||||
transition: 'easeOutQuad',
|
||||
onComplete: function() {
|
||||
this.set_height(-1);
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
function _fadeOutActor(actor) {
|
||||
if (!actor.visible || actor.opacity == 0) {
|
||||
actor.opacity = 0;
|
||||
actor.hide();
|
||||
}
|
||||
|
||||
Tweener.addTween(actor,
|
||||
{ opacity: 0,
|
||||
height: 0,
|
||||
time: _FADE_ANIMATION_TIME,
|
||||
transition: 'easeOutQuad',
|
||||
onComplete: function() {
|
||||
this.hide();
|
||||
this.set_height(-1);
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
// A widget showing the user avatar and name
|
||||
const UserWidget = new Lang.Class({
|
||||
Name: 'UserWidget',
|
||||
|
||||
_init: function(user) {
|
||||
this._user = user;
|
||||
|
||||
this.actor = new St.BoxLayout({ style_class: 'status-chooser',
|
||||
vertical: false,
|
||||
reactive: false
|
||||
});
|
||||
|
||||
this._iconBin = new St.Bin({ style_class: 'status-chooser-user-icon' });
|
||||
this.actor.add(this._iconBin,
|
||||
{ x_fill: true,
|
||||
y_fill: true });
|
||||
|
||||
this._label = new St.Label({ style_class: 'login-dialog-prompt-label',
|
||||
// FIXME:
|
||||
style: 'text-align: right' });
|
||||
this.actor.add(this._label,
|
||||
{ expand: true,
|
||||
x_fill: true,
|
||||
y_fill: true
|
||||
});
|
||||
|
||||
this._userLoadedId = this._user.connect('notify::is-loaded',
|
||||
Lang.bind(this,
|
||||
this._updateUser));
|
||||
this._userChangedId = this._user.connect('changed',
|
||||
Lang.bind(this,
|
||||
this._updateUser));
|
||||
this.actor.connect('notify::mapped', Lang.bind(this, function() {
|
||||
if (this.actor.mapped)
|
||||
this._updateUser();
|
||||
}));
|
||||
},
|
||||
|
||||
destroy: function() {
|
||||
// clean up signal handlers
|
||||
if (this._userLoadedId != 0) {
|
||||
this._user.disconnect(this._userLoadedId);
|
||||
this._userLoadedId = 0;
|
||||
}
|
||||
|
||||
if (this._userChangedId != 0) {
|
||||
this._user.disconnect(this._userChangedId);
|
||||
this._userChangedId = 0;
|
||||
}
|
||||
|
||||
this.actor.destroy();
|
||||
},
|
||||
|
||||
_updateUser: function() {
|
||||
let iconFile = null;
|
||||
if (this._user.is_loaded) {
|
||||
this._label.text = this._user.get_real_name();
|
||||
iconFile = this._user.get_icon_file();
|
||||
if (!GLib.file_test(iconFile, GLib.FileTest.EXISTS))
|
||||
iconFile = null;
|
||||
} else {
|
||||
this._label.text = "";
|
||||
}
|
||||
|
||||
if (iconFile)
|
||||
this._setIconFromFile(iconFile);
|
||||
else
|
||||
this._setIconFromName('avatar-default');
|
||||
},
|
||||
|
||||
// XXX: a GFileIcon instead?
|
||||
_setIconFromFile: function(iconFile) {
|
||||
this._iconBin.set_style('background-image: url("' + iconFile + '");' +
|
||||
'background-size: contain;');
|
||||
this._iconBin.child = null;
|
||||
},
|
||||
|
||||
_setIconFromName: function(iconName) {
|
||||
this._iconBin.set_style(null);
|
||||
|
||||
if (iconName != null) {
|
||||
let icon = new St.Icon({ icon_name: iconName,
|
||||
icon_type: St.IconType.SYMBOLIC,
|
||||
icon_size: DIALOG_ICON_SIZE });
|
||||
this._iconBin.child = icon;
|
||||
this._iconBin.show();
|
||||
} else {
|
||||
this._iconBin.child = null;
|
||||
this._iconBin.hide();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
const UnlockDialog = new Lang.Class({
|
||||
Name: 'UnlockDialog',
|
||||
Extends: ModalDialog.ModalDialog,
|
||||
|
||||
_init: function() {
|
||||
this.parent({ shellReactive: true,
|
||||
styleClass: 'login-dialog' });
|
||||
|
||||
this._userManager = AccountsService.UserManager.get_default();
|
||||
this._userName = GLib.get_user_name();
|
||||
this._user = this._userManager.get_user(this._userName);
|
||||
|
||||
this._greeterClient = GdmGreeter.Server.new_for_display_sync(null, null);
|
||||
|
||||
this._greeterClient.call_start_conversation_sync(GdmLoginDialog.PASSWORD_SERVICE_NAME, null);
|
||||
|
||||
this._greeterClient.connect('reset',
|
||||
Lang.bind(this, this._onReset));
|
||||
this._greeterClient.connect('ready',
|
||||
Lang.bind(this, this._onReady));
|
||||
this._greeterClient.connect('info',
|
||||
Lang.bind(this, this._onInfo));
|
||||
this._greeterClient.connect('problem',
|
||||
Lang.bind(this, this._onProblem));
|
||||
this._greeterClient.connect('info-query',
|
||||
Lang.bind(this, this._onInfoQuery));
|
||||
this._greeterClient.connect('secret-info-query',
|
||||
Lang.bind(this, this._onSecretInfoQuery));
|
||||
this._greeterClient.connect('session-opened',
|
||||
Lang.bind(this, this._onSessionOpened));
|
||||
this._greeterClient.connect('conversation-stopped',
|
||||
Lang.bind(this, this._onConversationStopped));
|
||||
|
||||
this._fprintManager = new Fprint.FprintManager();
|
||||
this._startFingerprintConversationIfNeeded();
|
||||
|
||||
this._userWidget = new UserWidget(this._user);
|
||||
this.contentLayout.add_actor(this._userWidget.actor);
|
||||
|
||||
this._promptLayout = new St.BoxLayout({ style_class: 'login-dialog-prompt-layout',
|
||||
vertical: false
|
||||
});
|
||||
|
||||
this._promptLabel = new St.Label({ style_class: 'login-dialog-prompt-label' });
|
||||
this._promptLayout.add(this._promptLabel,
|
||||
{ expand: false,
|
||||
x_fill: true,
|
||||
y_fill: true,
|
||||
x_align: St.Align.START });
|
||||
|
||||
this._promptEntry = new St.Entry({ style_class: 'login-dialog-prompt-entry',
|
||||
can_focus: true });
|
||||
this._promptLayout.add(this._promptEntry,
|
||||
{ expand: true,
|
||||
x_fill: true,
|
||||
y_fill: false,
|
||||
x_align: St.Align.START });
|
||||
|
||||
this.contentLayout.add_actor(this._promptLayout);
|
||||
|
||||
// Translators: this message is shown below the password entry field
|
||||
// to indicate the user can swipe their finger instead
|
||||
this._promptFingerprintMessage = new St.Label({ text: _("(or swipe finger)"),
|
||||
style_class: 'login-dialog-prompt-fingerprint-message' });
|
||||
this._promptFingerprintMessage.hide();
|
||||
this.contentLayout.add_actor(this._promptFingerprintMessage);
|
||||
|
||||
this._okButton = { label: _("Unlock"),
|
||||
action: Lang.bind(this, this._doUnlock),
|
||||
key: Clutter.KEY_Return,
|
||||
};
|
||||
this.setButtons([this._okButton]);
|
||||
|
||||
this._updateOkButton(true);
|
||||
},
|
||||
|
||||
_updateOkButton: function(sensitive) {
|
||||
this._okButton.button.reactive = sensitive;
|
||||
this._okButton.button.can_focus = sensitive;
|
||||
if (sensitive)
|
||||
this._okButton.button.remove_style_pseudo_class('disabled');
|
||||
else
|
||||
this._okButton.button.add_style_pseudo_class('disabled');
|
||||
},
|
||||
|
||||
_onReset: function() {
|
||||
// I'm not sure this is emitted for external greeters...
|
||||
|
||||
this._greeterClient.call_start_conversation_sync(GdmLoginDialog.PASSWORD_SERVICE_NAME, null);
|
||||
this._startFingerprintConversationIfNeeded();
|
||||
},
|
||||
|
||||
_startFingerprintConversationIfNeeded: function() {
|
||||
this._haveFingerprintReader = false;
|
||||
|
||||
// FIXME: the greeter has a GSettings key for disabling fingerprint auth
|
||||
|
||||
this._fprintManager.GetDefaultDeviceRemote(Lang.bind(this,
|
||||
function(device, error) {
|
||||
if (!error && device)
|
||||
this._haveFingerprintReader = true;
|
||||
|
||||
if (this._haveFingerprintReader)
|
||||
this._greeterClient.call_start_conversation_sync(GdmLoginDialog.FINGERPRINT_SERVICE_NAME, null);
|
||||
}));
|
||||
},
|
||||
|
||||
_onReady: function(greeter, serviceName) {
|
||||
greeter.call_begin_verification_for_user_sync(serviceName, this._userName, null);
|
||||
},
|
||||
|
||||
_onInfo: function(greeter, serviceName, info) {
|
||||
// We don't display fingerprint messages, because they
|
||||
// have words like UPEK in them. Instead we use the messages
|
||||
// as a cue to display our own message.
|
||||
if (serviceName == GdmLoginDialog.FINGERPRINT_SERVICE_NAME &&
|
||||
this._haveFingerprintReader &&
|
||||
(!this._promptFingerprintMessage.visible ||
|
||||
this._promptFingerprintMessage.opacity != 255)) {
|
||||
|
||||
_fadeInActor(this._promptFingerprintMessage);
|
||||
return;
|
||||
}
|
||||
|
||||
if (serviceName != GdmLoginDialog.PASSWORD_SERVICE_NAME)
|
||||
return;
|
||||
Main.notify(info);
|
||||
},
|
||||
|
||||
_onProblem: function(client, serviceName, problem) {
|
||||
// we don't want to show auth failed messages to
|
||||
// users who haven't enrolled their fingerprint.
|
||||
if (serviceName != GdmLoginDialog.PASSWORD_SERVICE_NAME)
|
||||
return;
|
||||
Main.notifyError(problem);
|
||||
},
|
||||
|
||||
_onInfoQuery: function(client, serviceName, question) {
|
||||
// We only expect questions to come from the main auth service
|
||||
if (serviceName != GdmLoginDialog.PASSWORD_SERVICE_NAME)
|
||||
return;
|
||||
|
||||
this._promptLabel.text = question;
|
||||
this._promptEntry.text = '';
|
||||
this._promptEntry.clutter_text.set_password_char('');
|
||||
|
||||
this._currentQuery = serviceName;
|
||||
this._updateOkButton(true);
|
||||
},
|
||||
|
||||
_onSecretInfoQuery: function(client, serviceName, secretQuestion) {
|
||||
// We only expect secret requests to come from the main auth service
|
||||
if (serviceName != GdmLoginDialog.PASSWORD_SERVICE_NAME)
|
||||
return;
|
||||
|
||||
this._promptLabel.text = secretQuestion;
|
||||
this._promptEntry.text = '';
|
||||
this._promptEntry.clutter_text.set_password_char('\u25cf');
|
||||
|
||||
this._currentQuery = serviceName;
|
||||
this._updateOkButton(true);
|
||||
},
|
||||
|
||||
_doUnlock: function() {
|
||||
if (!this._currentQuery)
|
||||
return;
|
||||
|
||||
let query = this._currentQuery;
|
||||
this._currentQuery = null;
|
||||
|
||||
this._updateOkButton(false);
|
||||
|
||||
this._greeterClient.call_answer_query_sync(query, this._promptEntry.text, null);
|
||||
},
|
||||
|
||||
_onConversationStopped: function(client, serviceName) {
|
||||
// if the password service fails, then cancel everything.
|
||||
// But if, e.g., fingerprint fails, still give
|
||||
// password authentication a chance to succeed
|
||||
if (serviceName == GdmLoginDialog.PASSWORD_SERVICE_NAME) {
|
||||
this._greeterClient.call_cancel_sync(null);
|
||||
this.emit('failed');
|
||||
} else if (serviceName == GdmLoginDialog.FINGERPRINT_SERVICE_NAME) {
|
||||
_fadeOutActor(this._promptFingerprintMessage);
|
||||
}
|
||||
},
|
||||
|
||||
_onSessionOpened: function(client, serviceName) {
|
||||
// For external greeters, SessionOpened means we succeded
|
||||
// in the authentication process
|
||||
|
||||
// Close the greeter proxy
|
||||
this._greeterClient.run_dispose();
|
||||
this._greeterClient = null;
|
||||
|
||||
this.emit('unlocked');
|
||||
},
|
||||
|
||||
destroy: function() {
|
||||
if (this._greeterClient) {
|
||||
this._greeterClient.run_dispose();
|
||||
this._greeterClient = null;
|
||||
}
|
||||
|
||||
this.parent();
|
||||
},
|
||||
|
||||
cancel: function() {
|
||||
this._greeterClient.call_cancel_sync(null);
|
||||
|
||||
this.destroy();
|
||||
},
|
||||
});
|
@ -497,13 +497,13 @@ const UserMenuButton = new Lang.Class({
|
||||
}));
|
||||
|
||||
this._userManager.connect('notify::is-loaded',
|
||||
Lang.bind(this, this._updateSwitchUser));
|
||||
Lang.bind(this, this._updateMultiUser));
|
||||
this._userManager.connect('notify::has-multiple-users',
|
||||
Lang.bind(this, this._updateSwitchUser));
|
||||
Lang.bind(this, this._updateMultiUser));
|
||||
this._userManager.connect('user-added',
|
||||
Lang.bind(this, this._updateSwitchUser));
|
||||
Lang.bind(this, this._updateMultiUser));
|
||||
this._userManager.connect('user-removed',
|
||||
Lang.bind(this, this._updateSwitchUser));
|
||||
Lang.bind(this, this._updateMultiUser));
|
||||
this._lockdownSettings.connect('changed::' + DISABLE_USER_SWITCH_KEY,
|
||||
Lang.bind(this, this._updateSwitchUser));
|
||||
this._lockdownSettings.connect('changed::' + DISABLE_LOG_OUT_KEY,
|
||||
@ -542,24 +542,26 @@ const UserMenuButton = new Lang.Class({
|
||||
this._name.set_text("");
|
||||
},
|
||||
|
||||
_updateMultiUser: function() {
|
||||
this._updateSwitchUser();
|
||||
this._updateLogout();
|
||||
},
|
||||
|
||||
_updateSwitchUser: function() {
|
||||
let allowSwitch = !this._lockdownSettings.get_boolean(DISABLE_USER_SWITCH_KEY);
|
||||
if (allowSwitch &&
|
||||
this._userManager.can_switch() &&
|
||||
this._userManager.has_multiple_users)
|
||||
this._loginScreenItem.actor.show();
|
||||
else
|
||||
this._loginScreenItem.actor.hide();
|
||||
this._loginScreenItem.actor.visible = allowSwitch &&
|
||||
this._userManager.can_switch() &&
|
||||
this._userManager.has_multiple_users;
|
||||
},
|
||||
|
||||
_updateLogout: function() {
|
||||
let allowLogout = !this._lockdownSettings.get_boolean(DISABLE_LOG_OUT_KEY);
|
||||
this._logoutItem.actor.visible = allowLogout;
|
||||
this._logoutItem.actor.visible = allowLogout && this._userManager.has_multiple_users;
|
||||
},
|
||||
|
||||
_updateLockScreen: function() {
|
||||
let allowLockScreen = !this._lockdownSettings.get_boolean(DISABLE_LOCK_SCREEN_KEY);
|
||||
this._logoutItem.actor.visible = allowLockScreen;
|
||||
this._lockScreenItem.actor.visible = allowLockScreen;
|
||||
},
|
||||
|
||||
_updateHaveShutdown: function() {
|
||||
@ -580,14 +582,14 @@ const UserMenuButton = new Lang.Class({
|
||||
|
||||
this._suspendOrPowerOffItem.actor.visible = this._haveShutdown || this._haveSuspend;
|
||||
|
||||
// If we can't suspend show Power Off... instead
|
||||
// If we can't power off show Suspend instead
|
||||
// and disable the alt key
|
||||
if (!this._haveSuspend) {
|
||||
this._suspendOrPowerOffItem.updateText(_("Power Off..."), null);
|
||||
} else if (!this._haveShutdown) {
|
||||
if (!this._haveShutdown) {
|
||||
this._suspendOrPowerOffItem.updateText(_("Suspend"), null);
|
||||
} else if (!this._haveSuspend) {
|
||||
this._suspendOrPowerOffItem.updateText(_("Power Off"), null);
|
||||
} else {
|
||||
this._suspendOrPowerOffItem.updateText(_("Suspend"), _("Power Off..."));
|
||||
this._suspendOrPowerOffItem.updateText(_("Power Off"), _("Suspend"));
|
||||
}
|
||||
},
|
||||
|
||||
@ -627,28 +629,26 @@ const UserMenuButton = new Lang.Class({
|
||||
item = new PopupMenu.PopupSeparatorMenuItem();
|
||||
this.menu.addMenuItem(item);
|
||||
|
||||
item = new PopupMenu.PopupMenuItem(_("Online Accounts"));
|
||||
item.connect('activate', Lang.bind(this, this._onOnlineAccountsActivate));
|
||||
this.menu.addMenuItem(item);
|
||||
|
||||
item = new PopupMenu.PopupMenuItem(_("System Settings"));
|
||||
item.connect('activate', Lang.bind(this, this._onPreferencesActivate));
|
||||
this.menu.addMenuItem(item);
|
||||
|
||||
item = new PopupMenu.PopupAlternatingMenuItem(_("Power Off"),
|
||||
_("Suspend"));
|
||||
this.menu.addMenuItem(item);
|
||||
item.connect('activate', Lang.bind(this, this._onSuspendOrPowerOffActivate));
|
||||
this._suspendOrPowerOffItem = item;
|
||||
this._updateSuspendOrPowerOff();
|
||||
|
||||
item = new PopupMenu.PopupSeparatorMenuItem();
|
||||
this.menu.addMenuItem(item);
|
||||
|
||||
item = new PopupMenu.PopupMenuItem(_("Lock Screen"));
|
||||
item.connect('activate', Lang.bind(this, this._onLockScreenActivate));
|
||||
this.menu.addMenuItem(item);
|
||||
this._lockScreenItem = item;
|
||||
|
||||
item = new PopupMenu.PopupMenuItem(_("Switch User"));
|
||||
item.connect('activate', Lang.bind(this, this._onLoginScreenActivate));
|
||||
this.menu.addMenuItem(item);
|
||||
this._loginScreenItem = item;
|
||||
|
||||
item = new PopupMenu.PopupMenuItem(_("Log Out..."));
|
||||
item = new PopupMenu.PopupMenuItem(_("Log Out"));
|
||||
item.connect('activate', Lang.bind(this, this._onQuitSessionActivate));
|
||||
this.menu.addMenuItem(item);
|
||||
this._logoutItem = item;
|
||||
@ -656,12 +656,10 @@ const UserMenuButton = new Lang.Class({
|
||||
item = new PopupMenu.PopupSeparatorMenuItem();
|
||||
this.menu.addMenuItem(item);
|
||||
|
||||
item = new PopupMenu.PopupAlternatingMenuItem(_("Suspend"),
|
||||
_("Power Off..."));
|
||||
item = new PopupMenu.PopupMenuItem(_("Lock"));
|
||||
item.connect('activate', Lang.bind(this, this._onLockScreenActivate));
|
||||
this.menu.addMenuItem(item);
|
||||
this._suspendOrPowerOffItem = item;
|
||||
item.connect('activate', Lang.bind(this, this._onSuspendOrPowerOffActivate));
|
||||
this._updateSuspendOrPowerOff();
|
||||
this._lockScreenItem = item;
|
||||
},
|
||||
|
||||
_updatePresenceStatus: function(item, event) {
|
||||
@ -689,12 +687,6 @@ const UserMenuButton = new Lang.Class({
|
||||
app.activate();
|
||||
},
|
||||
|
||||
_onOnlineAccountsActivate: function() {
|
||||
Main.overview.hide();
|
||||
let app = Shell.AppSystem.get_default().lookup_setting('gnome-online-accounts-panel.desktop');
|
||||
app.activate(-1);
|
||||
},
|
||||
|
||||
_onPreferencesActivate: function() {
|
||||
Main.overview.hide();
|
||||
let app = Shell.AppSystem.get_default().lookup_app('gnome-control-center.desktop');
|
||||
@ -723,14 +715,14 @@ const UserMenuButton = new Lang.Class({
|
||||
_onSuspendOrPowerOffActivate: function() {
|
||||
Main.overview.hide();
|
||||
|
||||
if (this._haveSuspend &&
|
||||
if (this._haveShutdown &&
|
||||
this._suspendOrPowerOffItem.state == PopupMenu.PopupAlternatingMenuItemState.DEFAULT) {
|
||||
this._session.ShutdownRemote();
|
||||
} else {
|
||||
// Ensure we only suspend after locking the screen
|
||||
this._screenSaverProxy.LockRemote(Lang.bind(this, function() {
|
||||
this._upClient.suspend_sync(null);
|
||||
}));
|
||||
} else {
|
||||
this._session.ShutdownRemote();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -168,34 +168,35 @@ const WandaSearchProvider = new Lang.Class({
|
||||
this.parent(_("Your favorite Easter Egg"));
|
||||
},
|
||||
|
||||
getResultMetas: function(fish) {
|
||||
return [{ 'id': fish[0], // there may be many fish in the sea, but
|
||||
// only one which speaks the truth!
|
||||
'name': capitalize(fish[0]),
|
||||
'createIcon': function(iconSize) {
|
||||
// for DND only (maybe could be improved)
|
||||
// DON'T use St.Icon here, it crashes the shell
|
||||
// (dnd.js code assumes it can query the actor size
|
||||
// without parenting it, while StWidget accesses
|
||||
// StThemeNode in get_preferred_width/height, which
|
||||
// triggers an assertion failure)
|
||||
return St.TextureCache.get_default().load_icon_name(null,
|
||||
'face-smile',
|
||||
St.IconType.FULLCOLOR,
|
||||
iconSize);
|
||||
}
|
||||
}];
|
||||
getResultMetas: function(fish, callback) {
|
||||
callback([{ 'id': fish[0], // there may be many fish in the sea, but
|
||||
// only one which speaks the truth!
|
||||
'name': capitalize(fish[0]),
|
||||
'createIcon': function(iconSize) {
|
||||
// for DND only (maybe could be improved)
|
||||
// DON'T use St.Icon here, it crashes the shell
|
||||
// (dnd.js code assumes it can query the actor size
|
||||
// without parenting it, while StWidget accesses
|
||||
// StThemeNode in get_preferred_width/height, which
|
||||
// triggers an assertion failure)
|
||||
return St.TextureCache.get_default().load_icon_name(null,
|
||||
'face-smile',
|
||||
St.IconType.FULLCOLOR,
|
||||
iconSize);
|
||||
}
|
||||
}]);
|
||||
},
|
||||
|
||||
getInitialResultSet: function(terms) {
|
||||
if (terms.join(' ') == MAGIC_FISH_KEY) {
|
||||
return [ FISH_NAME ];
|
||||
this.searchSystem.pushResults(this, [ FISH_NAME ]);
|
||||
} else {
|
||||
this.searchSystem.pushResults(this, []);
|
||||
}
|
||||
return [];
|
||||
},
|
||||
|
||||
getSubsearchResultSet: function(previousResults, terms) {
|
||||
return this.getInitialResultSet(terms);
|
||||
this.getInitialResultSet(terms);
|
||||
},
|
||||
|
||||
activateResult: function(fish, params) {
|
||||
|
@ -53,10 +53,10 @@ const Source = new Lang.Class({
|
||||
Extends: MessageTray.Source,
|
||||
|
||||
_init: function(app, window) {
|
||||
this.parent(app.get_name());
|
||||
this._window = window;
|
||||
this._app = app;
|
||||
this._setSummaryIcon(this.createNotificationIcon());
|
||||
|
||||
this.parent(app.get_name());
|
||||
|
||||
this.signalIDs = [];
|
||||
this.signalIDs.push(this._window.connect('notify::demands-attention', Lang.bind(this, function() { this.destroy(); })));
|
||||
|
@ -301,7 +301,8 @@ const WindowClone = new Lang.Class({
|
||||
|
||||
if (!this._zoomLightbox)
|
||||
this._zoomLightbox = new Lightbox.Lightbox(Main.uiGroup,
|
||||
{ fadeTime: LIGHTBOX_FADE_TIME });
|
||||
{ fadeInTime: LIGHTBOX_FADE_TIME,
|
||||
fadeOutTime: LIGHTBOX_FADE_TIME });
|
||||
this._zoomLightbox.show();
|
||||
|
||||
this._zoomLocalOrig = new ScaledPoint(this.actor.x, this.actor.y, this.actor.scale_x, this.actor.scale_y);
|
||||
|
203
po/es.po
203
po/es.po
@ -10,8 +10,8 @@ msgstr ""
|
||||
"Project-Id-Version: gnome-shell.master\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||
"shell&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2012-04-24 15:39+0000\n"
|
||||
"PO-Revision-Date: 2012-04-25 12:09+0200\n"
|
||||
"POT-Creation-Date: 2012-05-10 14:28+0000\n"
|
||||
"PO-Revision-Date: 2012-05-10 18:04+0200\n"
|
||||
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
|
||||
"Language-Team: Español <gnome-es-list@gnome.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -141,12 +141,10 @@ msgid "Keybinding to open the application menu."
|
||||
msgstr "Asociación de teclas para abrir el menú de la aplicación."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
#| msgid "Keybinding to open the application menu"
|
||||
msgid "Keybinding to toggle the screen recorder"
|
||||
msgstr "Asociación de teclas cambiar el grabador de pantalla"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
#| msgid "Keybinding to open the application menu."
|
||||
msgid "Keybinding to start/stop the builtin screen recorder."
|
||||
msgstr "Asociación de teclas para iniciar/detener el grabador de pantalla."
|
||||
|
||||
@ -268,7 +266,7 @@ msgstr "¿No está en la lista?"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1023 ../js/ui/endSessionDialog.js:401
|
||||
#: ../js/ui/extensionSystem.js:400 ../js/ui/networkAgent.js:153
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:175 ../js/ui/status/bluetooth.js:462
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:175 ../js/ui/status/bluetooth.js:459
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
@ -281,16 +279,17 @@ msgstr "Iniciar sesión"
|
||||
msgid "Login Window"
|
||||
msgstr "Ventana de inicio de sesión"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:155 ../js/ui/userMenu.js:597
|
||||
#: ../js/ui/userMenu.js:599 ../js/ui/userMenu.js:668
|
||||
#: ../js/gdm/powerMenu.js:130 ../js/ui/userMenu.js:588
|
||||
#: ../js/ui/userMenu.js:592 ../js/ui/userMenu.js:637
|
||||
msgid "Suspend"
|
||||
msgstr "Suspender"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:160
|
||||
#: ../js/gdm/powerMenu.js:135
|
||||
msgid "Restart"
|
||||
msgstr "Reiniciar"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:165
|
||||
#: ../js/gdm/powerMenu.js:140 ../js/ui/userMenu.js:590
|
||||
#: ../js/ui/userMenu.js:592 ../js/ui/userMenu.js:636
|
||||
msgid "Power Off"
|
||||
msgstr "Apagar"
|
||||
|
||||
@ -318,19 +317,19 @@ msgstr "Todas"
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "APLICACIONES"
|
||||
|
||||
#: ../js/ui/appDisplay.js:375
|
||||
#: ../js/ui/appDisplay.js:374
|
||||
msgid "SETTINGS"
|
||||
msgstr "CONFIGURACIÓN"
|
||||
|
||||
#: ../js/ui/appDisplay.js:680
|
||||
#: ../js/ui/appDisplay.js:679
|
||||
msgid "New Window"
|
||||
msgstr "Ventana nueva"
|
||||
|
||||
#: ../js/ui/appDisplay.js:683
|
||||
#: ../js/ui/appDisplay.js:682
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Quitar de los favoritos"
|
||||
|
||||
#: ../js/ui/appDisplay.js:684
|
||||
#: ../js/ui/appDisplay.js:683
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Añadir a los favoritos"
|
||||
|
||||
@ -528,7 +527,7 @@ msgstr "Desconectado"
|
||||
msgid "CONTACTS"
|
||||
msgstr "CONTACTOS"
|
||||
|
||||
#: ../js/ui/dash.js:229 ../js/ui/messageTray.js:1207
|
||||
#: ../js/ui/dash.js:239 ../js/ui/messageTray.js:1209
|
||||
msgid "Remove"
|
||||
msgstr "Quitar"
|
||||
|
||||
@ -704,73 +703,73 @@ msgstr "Contraseña:"
|
||||
msgid "Type again:"
|
||||
msgstr "Escriba de nuevo:"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:732
|
||||
#: ../js/ui/lookingGlass.js:693
|
||||
msgid "No extensions installed"
|
||||
msgstr "No hay extensiones instaladas"
|
||||
|
||||
#. Translators: argument is an extension UUID.
|
||||
#: ../js/ui/lookingGlass.js:786
|
||||
#: ../js/ui/lookingGlass.js:747
|
||||
#, c-format
|
||||
msgid "%s has not emitted any errors."
|
||||
msgstr "%s no ha generado ningún error."
|
||||
|
||||
#: ../js/ui/lookingGlass.js:792
|
||||
#: ../js/ui/lookingGlass.js:753
|
||||
msgid "Hide Errors"
|
||||
msgstr "Ocultar errores"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:796 ../js/ui/lookingGlass.js:847
|
||||
#: ../js/ui/lookingGlass.js:757 ../js/ui/lookingGlass.js:808
|
||||
msgid "Show Errors"
|
||||
msgstr "Mostrar errores"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:805
|
||||
#: ../js/ui/lookingGlass.js:766
|
||||
msgid "Enabled"
|
||||
msgstr "Activado"
|
||||
|
||||
#. translators:
|
||||
#. * The device has been disabled
|
||||
#: ../js/ui/lookingGlass.js:808 ../src/gvc/gvc-mixer-control.c:1082
|
||||
#: ../js/ui/lookingGlass.js:769 ../src/gvc/gvc-mixer-control.c:1082
|
||||
msgid "Disabled"
|
||||
msgstr "Desactivado"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:810
|
||||
#: ../js/ui/lookingGlass.js:771
|
||||
msgid "Error"
|
||||
msgstr "Error"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:812
|
||||
#: ../js/ui/lookingGlass.js:773
|
||||
msgid "Out of date"
|
||||
msgstr "Caducado"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:814
|
||||
#: ../js/ui/lookingGlass.js:775
|
||||
msgid "Downloading"
|
||||
msgstr "Descargando"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:835
|
||||
#: ../js/ui/lookingGlass.js:796
|
||||
msgid "View Source"
|
||||
msgstr "Ver fuente"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:841
|
||||
#: ../js/ui/lookingGlass.js:802
|
||||
msgid "Web Page"
|
||||
msgstr "Página web"
|
||||
|
||||
#. Translators: this is a filename used for screencast recording
|
||||
#: ../js/ui/main.js:121
|
||||
#: ../js/ui/main.js:118
|
||||
#, no-c-format
|
||||
msgid "Screencast from %d %t"
|
||||
msgstr "Screencast desde %d %t"
|
||||
|
||||
#: ../js/ui/messageTray.js:1200
|
||||
#: ../js/ui/messageTray.js:1202
|
||||
msgid "Open"
|
||||
msgstr "Abrir"
|
||||
|
||||
#: ../js/ui/messageTray.js:1217
|
||||
#: ../js/ui/messageTray.js:1219
|
||||
msgid "Unmute"
|
||||
msgstr "Dar voz"
|
||||
|
||||
#: ../js/ui/messageTray.js:1217
|
||||
#: ../js/ui/messageTray.js:1219
|
||||
msgid "Mute"
|
||||
msgstr "Silenciar"
|
||||
|
||||
#: ../js/ui/messageTray.js:2490
|
||||
#: ../js/ui/messageTray.js:2492
|
||||
msgid "System Information"
|
||||
msgstr "Información del sistema"
|
||||
|
||||
@ -933,7 +932,7 @@ msgstr "Inténtelo de nuevo,"
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
#. switches containing "◯" and "|"). Other values will
|
||||
#. simply result in invisible toggle switches.
|
||||
#: ../js/ui/popupMenu.js:724
|
||||
#: ../js/ui/popupMenu.js:728
|
||||
msgid "toggle-switch-us"
|
||||
msgstr "toggle-switch-intl"
|
||||
|
||||
@ -941,11 +940,11 @@ msgstr "toggle-switch-intl"
|
||||
msgid "Please enter a command:"
|
||||
msgstr "Introduzca un comando:"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:332
|
||||
#: ../js/ui/searchDisplay.js:321
|
||||
msgid "Searching..."
|
||||
msgstr "Buscando…"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:415
|
||||
#: ../js/ui/searchDisplay.js:374
|
||||
msgid "No matching results."
|
||||
msgstr "No se encontró ningún resultado coincidente."
|
||||
|
||||
@ -1017,9 +1016,9 @@ msgid "Large Text"
|
||||
msgstr "Texto grande"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:31 ../js/ui/status/bluetooth.js:35
|
||||
#: ../js/ui/status/bluetooth.js:258 ../js/ui/status/bluetooth.js:341
|
||||
#: ../js/ui/status/bluetooth.js:371 ../js/ui/status/bluetooth.js:407
|
||||
#: ../js/ui/status/bluetooth.js:436 ../js/ui/status/network.js:893
|
||||
#: ../js/ui/status/bluetooth.js:255 ../js/ui/status/bluetooth.js:338
|
||||
#: ../js/ui/status/bluetooth.js:368 ../js/ui/status/bluetooth.js:404
|
||||
#: ../js/ui/status/bluetooth.js:433 ../js/ui/status/network.js:890
|
||||
msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
@ -1044,102 +1043,102 @@ msgstr "Configuración de Bluetooth"
|
||||
msgid "hardware disabled"
|
||||
msgstr "hardware desactivado"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:203
|
||||
#: ../js/ui/status/bluetooth.js:200
|
||||
msgid "Connection"
|
||||
msgstr "Conexión"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:214 ../js/ui/status/network.js:491
|
||||
#: ../js/ui/status/bluetooth.js:211 ../js/ui/status/network.js:491
|
||||
msgid "disconnecting..."
|
||||
msgstr "deconectando…"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:227 ../js/ui/status/network.js:497
|
||||
#: ../js/ui/status/bluetooth.js:224 ../js/ui/status/network.js:497
|
||||
msgid "connecting..."
|
||||
msgstr "conectando…"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:245
|
||||
#: ../js/ui/status/bluetooth.js:242
|
||||
msgid "Send Files..."
|
||||
msgstr "Enviar archivos…"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:250
|
||||
#: ../js/ui/status/bluetooth.js:247
|
||||
msgid "Browse Files..."
|
||||
msgstr "Examinar archivos…"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:259
|
||||
#: ../js/ui/status/bluetooth.js:256
|
||||
msgid "Error browsing device"
|
||||
msgstr "Error al examinar el dispositivo"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:260
|
||||
#: ../js/ui/status/bluetooth.js:257
|
||||
#, c-format
|
||||
msgid "The requested device cannot be browsed, error is '%s'"
|
||||
msgstr "No se puede examinar el dispositivo solicitado, el error es «%s»"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:268
|
||||
#: ../js/ui/status/bluetooth.js:265
|
||||
msgid "Keyboard Settings"
|
||||
msgstr "Configuración del teclado"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:271
|
||||
#: ../js/ui/status/bluetooth.js:268
|
||||
msgid "Mouse Settings"
|
||||
msgstr "Ajustes del ratón…"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:276 ../js/ui/status/volume.js:59
|
||||
#: ../js/ui/status/bluetooth.js:273 ../js/ui/status/volume.js:59
|
||||
msgid "Sound Settings"
|
||||
msgstr "Configuración del sonido"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:372
|
||||
#: ../js/ui/status/bluetooth.js:369
|
||||
#, c-format
|
||||
msgid "Authorization request from %s"
|
||||
msgstr "Solicitud de autorización de %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:378
|
||||
#: ../js/ui/status/bluetooth.js:375
|
||||
#, c-format
|
||||
msgid "Device %s wants access to the service '%s'"
|
||||
msgstr "El dispositivo %s quiere acceder al servicio «%s»"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:380
|
||||
#: ../js/ui/status/bluetooth.js:377
|
||||
msgid "Always grant access"
|
||||
msgstr "Conceder acceso siempre"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:381
|
||||
#: ../js/ui/status/bluetooth.js:378
|
||||
msgid "Grant this time only"
|
||||
msgstr "Conceder sólo esta vez"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:382 ../js/ui/telepathyClient.js:1093
|
||||
#: ../js/ui/status/bluetooth.js:379 ../js/ui/telepathyClient.js:1093
|
||||
msgid "Reject"
|
||||
msgstr "Rechazar"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:408
|
||||
#: ../js/ui/status/bluetooth.js:405
|
||||
#, c-format
|
||||
msgid "Pairing confirmation for %s"
|
||||
msgstr "Confirmación de emparejamiento para «%s»"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:414 ../js/ui/status/bluetooth.js:444
|
||||
#: ../js/ui/status/bluetooth.js:411 ../js/ui/status/bluetooth.js:441
|
||||
#, c-format
|
||||
msgid "Device %s wants to pair with this computer"
|
||||
msgstr "El dispositivo «%s» quiere emparejarse con este equipo"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:415
|
||||
#: ../js/ui/status/bluetooth.js:412
|
||||
#, c-format
|
||||
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
||||
msgstr "Confirme que el PIN mostrado en «%s» coincide con el del dispositivo."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:417
|
||||
#: ../js/ui/status/bluetooth.js:414
|
||||
msgid "Matches"
|
||||
msgstr "Coincide"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:418
|
||||
#: ../js/ui/status/bluetooth.js:415
|
||||
msgid "Does not match"
|
||||
msgstr "No coincide"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:437
|
||||
#: ../js/ui/status/bluetooth.js:434
|
||||
#, c-format
|
||||
msgid "Pairing request for %s"
|
||||
msgstr "Solicitud de emparejamiento para «%s»"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:445
|
||||
#: ../js/ui/status/bluetooth.js:442
|
||||
msgid "Please enter the PIN mentioned on the device."
|
||||
msgstr "Introduzca el PIN mencionado en el dispositivo."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:461
|
||||
#: ../js/ui/status/bluetooth.js:458
|
||||
msgid "OK"
|
||||
msgstr "Aceptar"
|
||||
|
||||
@ -1192,13 +1191,13 @@ msgstr "no disponible"
|
||||
msgid "connection failed"
|
||||
msgstr "falló la conexión"
|
||||
|
||||
#: ../js/ui/status/network.js:585 ../js/ui/status/network.js:1505
|
||||
#: ../js/ui/status/network.js:585 ../js/ui/status/network.js:1497
|
||||
msgid "More..."
|
||||
msgstr "Más…"
|
||||
|
||||
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
||||
#. and we cannot access its settings (including the name)
|
||||
#: ../js/ui/status/network.js:621 ../js/ui/status/network.js:1440
|
||||
#: ../js/ui/status/network.js:621 ../js/ui/status/network.js:1432
|
||||
msgid "Connected (private)"
|
||||
msgstr "Conectada (privada)"
|
||||
|
||||
@ -1206,69 +1205,69 @@ msgstr "Conectada (privada)"
|
||||
msgid "Auto Ethernet"
|
||||
msgstr "Ethernet automática"
|
||||
|
||||
#: ../js/ui/status/network.js:757
|
||||
#: ../js/ui/status/network.js:754
|
||||
msgid "Auto broadband"
|
||||
msgstr "Banda ancha automática"
|
||||
|
||||
#: ../js/ui/status/network.js:760
|
||||
#: ../js/ui/status/network.js:757
|
||||
msgid "Auto dial-up"
|
||||
msgstr "Marcado automático"
|
||||
|
||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||
#: ../js/ui/status/network.js:879 ../js/ui/status/network.js:1452
|
||||
#: ../js/ui/status/network.js:876 ../js/ui/status/network.js:1444
|
||||
#, c-format
|
||||
msgid "Auto %s"
|
||||
msgstr "%s automática"
|
||||
|
||||
#: ../js/ui/status/network.js:881
|
||||
#: ../js/ui/status/network.js:878
|
||||
msgid "Auto bluetooth"
|
||||
msgstr "Bluetooth automático"
|
||||
|
||||
#: ../js/ui/status/network.js:1454
|
||||
#: ../js/ui/status/network.js:1446
|
||||
msgid "Auto wireless"
|
||||
msgstr "Inalámbrica automática"
|
||||
|
||||
#: ../js/ui/status/network.js:1541
|
||||
#: ../js/ui/status/network.js:1533
|
||||
msgid "Network"
|
||||
msgstr "Red"
|
||||
|
||||
#: ../js/ui/status/network.js:1548
|
||||
#: ../js/ui/status/network.js:1540
|
||||
msgid "Enable networking"
|
||||
msgstr "Activar red"
|
||||
|
||||
#: ../js/ui/status/network.js:1560
|
||||
#: ../js/ui/status/network.js:1552
|
||||
msgid "Wired"
|
||||
msgstr "Cableada"
|
||||
|
||||
#: ../js/ui/status/network.js:1571
|
||||
#: ../js/ui/status/network.js:1563
|
||||
msgid "Wireless"
|
||||
msgstr "Inalámbrica"
|
||||
|
||||
#: ../js/ui/status/network.js:1581
|
||||
#: ../js/ui/status/network.js:1573
|
||||
msgid "Mobile broadband"
|
||||
msgstr "Banda ancha móvil"
|
||||
|
||||
#: ../js/ui/status/network.js:1591
|
||||
#: ../js/ui/status/network.js:1583
|
||||
msgid "VPN Connections"
|
||||
msgstr "Conexiones VPN"
|
||||
|
||||
#: ../js/ui/status/network.js:1602
|
||||
#: ../js/ui/status/network.js:1594
|
||||
msgid "Network Settings"
|
||||
msgstr "Configuración de la red"
|
||||
|
||||
#: ../js/ui/status/network.js:1739
|
||||
#: ../js/ui/status/network.js:1731
|
||||
msgid "Connection failed"
|
||||
msgstr "Falló la conexión"
|
||||
|
||||
#: ../js/ui/status/network.js:1740
|
||||
#: ../js/ui/status/network.js:1732
|
||||
msgid "Activation of network connection failed"
|
||||
msgstr "Falló la activación de la conexión de red"
|
||||
|
||||
#: ../js/ui/status/network.js:1993
|
||||
#: ../js/ui/status/network.js:1985
|
||||
msgid "Networking is disabled"
|
||||
msgstr "La red está desactivada"
|
||||
|
||||
#: ../js/ui/status/network.js:2117
|
||||
#: ../js/ui/status/network.js:2109
|
||||
msgid "Network Manager"
|
||||
msgstr "Gestor de la red"
|
||||
|
||||
@ -1642,39 +1641,34 @@ msgstr "Inactivo"
|
||||
msgid "Unavailable"
|
||||
msgstr "No disponible"
|
||||
|
||||
#: ../js/ui/userMenu.js:595 ../js/ui/userMenu.js:599 ../js/ui/userMenu.js:669
|
||||
msgid "Power Off..."
|
||||
msgstr "Apagar…"
|
||||
|
||||
#: ../js/ui/userMenu.js:631
|
||||
#: ../js/ui/userMenu.js:624
|
||||
msgid "Notifications"
|
||||
msgstr "Notificaciones"
|
||||
|
||||
#: ../js/ui/userMenu.js:639
|
||||
msgid "Online Accounts"
|
||||
msgstr "Cuentas en línea"
|
||||
|
||||
#: ../js/ui/userMenu.js:643
|
||||
#: ../js/ui/userMenu.js:632
|
||||
msgid "System Settings"
|
||||
msgstr "Configuración del sistema"
|
||||
|
||||
#: ../js/ui/userMenu.js:650
|
||||
msgid "Lock Screen"
|
||||
msgstr "Bloquear la pantalla"
|
||||
|
||||
#: ../js/ui/userMenu.js:655
|
||||
#: ../js/ui/userMenu.js:646
|
||||
msgid "Switch User"
|
||||
msgstr "Cambiar de usuario"
|
||||
|
||||
#: ../js/ui/userMenu.js:660
|
||||
msgid "Log Out..."
|
||||
msgstr "Cerrar la sesión…"
|
||||
#: ../js/ui/userMenu.js:651
|
||||
#| msgctxt "title"
|
||||
#| msgid "Log Out"
|
||||
msgid "Log Out"
|
||||
msgstr "Cerrar la sesión"
|
||||
|
||||
#: ../js/ui/userMenu.js:688
|
||||
#: ../js/ui/userMenu.js:659
|
||||
#| msgid "Clock"
|
||||
msgid "Lock"
|
||||
msgstr "Bloquear"
|
||||
|
||||
#: ../js/ui/userMenu.js:677
|
||||
msgid "Your chat status will be set to busy"
|
||||
msgstr "Su estado del chat se establecerá a «ocupado»"
|
||||
|
||||
#: ../js/ui/userMenu.js:689
|
||||
#: ../js/ui/userMenu.js:678
|
||||
msgid ""
|
||||
"Notifications are now disabled, including chat messages. Your online status "
|
||||
"has been adjusted to let others know that you might not see their messages."
|
||||
@ -1795,6 +1789,18 @@ msgstr "Sistema de archivos"
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "Power Off..."
|
||||
#~ msgstr "Apagar…"
|
||||
|
||||
#~ msgid "Online Accounts"
|
||||
#~ msgstr "Cuentas en línea"
|
||||
|
||||
#~ msgid "Lock Screen"
|
||||
#~ msgstr "Bloquear la pantalla"
|
||||
|
||||
#~ msgid "Log Out..."
|
||||
#~ msgstr "Cerrar la sesión…"
|
||||
|
||||
#~ msgid "RECENT ITEMS"
|
||||
#~ msgstr "ELEMENTOS RECIENTES"
|
||||
|
||||
@ -2054,9 +2060,6 @@ msgstr "%1$s: %2$s"
|
||||
#~ msgid "Can't remove the first workspace."
|
||||
#~ msgstr "No se puede quitar el primer área de trabajo."
|
||||
|
||||
#~ msgid "Clock"
|
||||
#~ msgstr "Reloj"
|
||||
|
||||
#~ msgid "Customize the panel clock"
|
||||
#~ msgstr "Personalizar el reloj del panel"
|
||||
|
||||
|
199
po/gl.po
199
po/gl.po
@ -12,8 +12,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell master\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2012-04-27 17:06+0200\n"
|
||||
"PO-Revision-Date: 2012-04-27 17:07+0200\n"
|
||||
"POT-Creation-Date: 2012-05-11 11:31+0200\n"
|
||||
"PO-Revision-Date: 2012-05-11 11:31+0200\n"
|
||||
"Last-Translator: Fran Dieguez <frandieguez@gnome.org>\n"
|
||||
"Language-Team: Galician <gnome-l10n-gl@gnome.org>\n"
|
||||
"Language: gl\n"
|
||||
@ -270,7 +270,7 @@ msgstr "Non está na lista?"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1023 ../js/ui/endSessionDialog.js:401
|
||||
#: ../js/ui/extensionSystem.js:400 ../js/ui/networkAgent.js:153
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:175 ../js/ui/status/bluetooth.js:462
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:175 ../js/ui/status/bluetooth.js:459
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
@ -283,30 +283,31 @@ msgstr "Iniciar sesión"
|
||||
msgid "Login Window"
|
||||
msgstr "Xanela de inicio de sesión"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:155 ../js/ui/userMenu.js:597
|
||||
#: ../js/ui/userMenu.js:599 ../js/ui/userMenu.js:668
|
||||
#: ../js/gdm/powerMenu.js:130 ../js/ui/userMenu.js:588
|
||||
#: ../js/ui/userMenu.js:592 ../js/ui/userMenu.js:637
|
||||
msgid "Suspend"
|
||||
msgstr "Suspender"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:160
|
||||
#: ../js/gdm/powerMenu.js:135
|
||||
msgid "Restart"
|
||||
msgstr "Reiniciar"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:165
|
||||
#: ../js/gdm/powerMenu.js:140 ../js/ui/userMenu.js:590
|
||||
#: ../js/ui/userMenu.js:592 ../js/ui/userMenu.js:636
|
||||
msgid "Power Off"
|
||||
msgstr "Apagar"
|
||||
|
||||
#: ../js/misc/util.js:92
|
||||
#: ../js/misc/util.js:93
|
||||
msgid "Command not found"
|
||||
msgstr "Orde non atopada"
|
||||
|
||||
#. Replace "Error invoking GLib.shell_parse_argv: " with
|
||||
#. something nicer
|
||||
#: ../js/misc/util.js:119
|
||||
#: ../js/misc/util.js:124
|
||||
msgid "Could not parse command:"
|
||||
msgstr "Non foi posíbel analizar a orde:"
|
||||
|
||||
#: ../js/misc/util.js:127
|
||||
#: ../js/misc/util.js:132
|
||||
#, c-format
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "Produciuse un fallo na execución de «%s»:"
|
||||
@ -320,19 +321,19 @@ msgstr "Todos"
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "APLICATIVOS"
|
||||
|
||||
#: ../js/ui/appDisplay.js:375
|
||||
#: ../js/ui/appDisplay.js:374
|
||||
msgid "SETTINGS"
|
||||
msgstr "CONFIGURACIÓN"
|
||||
|
||||
#: ../js/ui/appDisplay.js:680
|
||||
#: ../js/ui/appDisplay.js:679
|
||||
msgid "New Window"
|
||||
msgstr "Xanela nova"
|
||||
|
||||
#: ../js/ui/appDisplay.js:683
|
||||
#: ../js/ui/appDisplay.js:682
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Eliminar dos favoritos"
|
||||
|
||||
#: ../js/ui/appDisplay.js:684
|
||||
#: ../js/ui/appDisplay.js:683
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Engadir aos favoritos"
|
||||
|
||||
@ -530,7 +531,7 @@ msgstr "Desconectado"
|
||||
msgid "CONTACTS"
|
||||
msgstr "CONTACTOS"
|
||||
|
||||
#: ../js/ui/dash.js:229 ../js/ui/messageTray.js:1207
|
||||
#: ../js/ui/dash.js:239 ../js/ui/messageTray.js:1209
|
||||
msgid "Remove"
|
||||
msgstr "Quitar"
|
||||
|
||||
@ -705,73 +706,73 @@ msgstr "Contrasinal:"
|
||||
msgid "Type again:"
|
||||
msgstr "Escriba de novo:"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:732
|
||||
#: ../js/ui/lookingGlass.js:693
|
||||
msgid "No extensions installed"
|
||||
msgstr "Non hai ningunha extensión instalada"
|
||||
|
||||
#. Translators: argument is an extension UUID.
|
||||
#: ../js/ui/lookingGlass.js:786
|
||||
#: ../js/ui/lookingGlass.js:747
|
||||
#, c-format
|
||||
msgid "%s has not emitted any errors."
|
||||
msgstr "%s non xerou ningún erro."
|
||||
|
||||
#: ../js/ui/lookingGlass.js:792
|
||||
#: ../js/ui/lookingGlass.js:753
|
||||
msgid "Hide Errors"
|
||||
msgstr "Ocultar erros"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:796 ../js/ui/lookingGlass.js:847
|
||||
#: ../js/ui/lookingGlass.js:757 ../js/ui/lookingGlass.js:808
|
||||
msgid "Show Errors"
|
||||
msgstr "Mostrar erros"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:805
|
||||
#: ../js/ui/lookingGlass.js:766
|
||||
msgid "Enabled"
|
||||
msgstr "Activado"
|
||||
|
||||
#. translators:
|
||||
#. * The device has been disabled
|
||||
#: ../js/ui/lookingGlass.js:808 ../src/gvc/gvc-mixer-control.c:1082
|
||||
#: ../js/ui/lookingGlass.js:769 ../src/gvc/gvc-mixer-control.c:1082
|
||||
msgid "Disabled"
|
||||
msgstr "Desactivado"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:810
|
||||
#: ../js/ui/lookingGlass.js:771
|
||||
msgid "Error"
|
||||
msgstr "Erro"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:812
|
||||
#: ../js/ui/lookingGlass.js:773
|
||||
msgid "Out of date"
|
||||
msgstr "Caducado"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:814
|
||||
#: ../js/ui/lookingGlass.js:775
|
||||
msgid "Downloading"
|
||||
msgstr "Descargando"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:835
|
||||
#: ../js/ui/lookingGlass.js:796
|
||||
msgid "View Source"
|
||||
msgstr "Ver fonte"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:841
|
||||
#: ../js/ui/lookingGlass.js:802
|
||||
msgid "Web Page"
|
||||
msgstr "Páxina web"
|
||||
|
||||
#. Translators: this is a filename used for screencast recording
|
||||
#: ../js/ui/main.js:121
|
||||
#: ../js/ui/main.js:118
|
||||
#, no-c-format
|
||||
msgid "Screencast from %d %t"
|
||||
msgstr "Screencast desde %d %t"
|
||||
|
||||
#: ../js/ui/messageTray.js:1200
|
||||
#: ../js/ui/messageTray.js:1202
|
||||
msgid "Open"
|
||||
msgstr "Abrir"
|
||||
|
||||
#: ../js/ui/messageTray.js:1217
|
||||
#: ../js/ui/messageTray.js:1219
|
||||
msgid "Unmute"
|
||||
msgstr "Desactivar silencio"
|
||||
|
||||
#: ../js/ui/messageTray.js:1217
|
||||
#: ../js/ui/messageTray.js:1219
|
||||
msgid "Mute"
|
||||
msgstr "Silenciar"
|
||||
|
||||
#: ../js/ui/messageTray.js:2490
|
||||
#: ../js/ui/messageTray.js:2492
|
||||
msgid "System Information"
|
||||
msgstr "Información do sistema"
|
||||
|
||||
@ -942,11 +943,11 @@ msgstr "toggle-switch-intl"
|
||||
msgid "Please enter a command:"
|
||||
msgstr "Escriba unha orde:"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:332
|
||||
#: ../js/ui/searchDisplay.js:321
|
||||
msgid "Searching..."
|
||||
msgstr "Buscando…"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:415
|
||||
#: ../js/ui/searchDisplay.js:374
|
||||
msgid "No matching results."
|
||||
msgstr "Non hai resultados que coincidan."
|
||||
|
||||
@ -1018,9 +1019,9 @@ msgid "Large Text"
|
||||
msgstr "Texto grande"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:31 ../js/ui/status/bluetooth.js:35
|
||||
#: ../js/ui/status/bluetooth.js:258 ../js/ui/status/bluetooth.js:341
|
||||
#: ../js/ui/status/bluetooth.js:371 ../js/ui/status/bluetooth.js:407
|
||||
#: ../js/ui/status/bluetooth.js:436 ../js/ui/status/network.js:893
|
||||
#: ../js/ui/status/bluetooth.js:255 ../js/ui/status/bluetooth.js:338
|
||||
#: ../js/ui/status/bluetooth.js:368 ../js/ui/status/bluetooth.js:404
|
||||
#: ../js/ui/status/bluetooth.js:433 ../js/ui/status/network.js:890
|
||||
msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
@ -1045,102 +1046,102 @@ msgstr "Preferencias do Bluetooth"
|
||||
msgid "hardware disabled"
|
||||
msgstr "hardware desactivado"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:203
|
||||
#: ../js/ui/status/bluetooth.js:200
|
||||
msgid "Connection"
|
||||
msgstr "Conexión"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:214 ../js/ui/status/network.js:491
|
||||
#: ../js/ui/status/bluetooth.js:211 ../js/ui/status/network.js:491
|
||||
msgid "disconnecting..."
|
||||
msgstr "desconectando…"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:227 ../js/ui/status/network.js:497
|
||||
#: ../js/ui/status/bluetooth.js:224 ../js/ui/status/network.js:497
|
||||
msgid "connecting..."
|
||||
msgstr "conectando…"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:245
|
||||
#: ../js/ui/status/bluetooth.js:242
|
||||
msgid "Send Files..."
|
||||
msgstr "Enviar ficheiros…"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:250
|
||||
#: ../js/ui/status/bluetooth.js:247
|
||||
msgid "Browse Files..."
|
||||
msgstr "Explorar ficheiros…"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:259
|
||||
#: ../js/ui/status/bluetooth.js:256
|
||||
msgid "Error browsing device"
|
||||
msgstr "Produciuse un erro ao explorar o dispositivo"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:260
|
||||
#: ../js/ui/status/bluetooth.js:257
|
||||
#, c-format
|
||||
msgid "The requested device cannot be browsed, error is '%s'"
|
||||
msgstr "O dispositivo solicitado non pode explorarse, o erro é «%s»"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:268
|
||||
#: ../js/ui/status/bluetooth.js:265
|
||||
msgid "Keyboard Settings"
|
||||
msgstr "Preferencias do teclado"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:271
|
||||
#: ../js/ui/status/bluetooth.js:268
|
||||
msgid "Mouse Settings"
|
||||
msgstr "Preferencias do rato"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:276 ../js/ui/status/volume.js:59
|
||||
#: ../js/ui/status/bluetooth.js:273 ../js/ui/status/volume.js:59
|
||||
msgid "Sound Settings"
|
||||
msgstr "Preferencias do son"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:372
|
||||
#: ../js/ui/status/bluetooth.js:369
|
||||
#, c-format
|
||||
msgid "Authorization request from %s"
|
||||
msgstr "Solicitude de autorización de %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:378
|
||||
#: ../js/ui/status/bluetooth.js:375
|
||||
#, c-format
|
||||
msgid "Device %s wants access to the service '%s'"
|
||||
msgstr "O dispositivo %s quere acceder ao servizo «%s»"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:380
|
||||
#: ../js/ui/status/bluetooth.js:377
|
||||
msgid "Always grant access"
|
||||
msgstr "Conceder acceso sempre"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:381
|
||||
#: ../js/ui/status/bluetooth.js:378
|
||||
msgid "Grant this time only"
|
||||
msgstr "Conceder só esta vez"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:382 ../js/ui/telepathyClient.js:1093
|
||||
#: ../js/ui/status/bluetooth.js:379 ../js/ui/telepathyClient.js:1093
|
||||
msgid "Reject"
|
||||
msgstr "Rexeitar"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:408
|
||||
#: ../js/ui/status/bluetooth.js:405
|
||||
#, c-format
|
||||
msgid "Pairing confirmation for %s"
|
||||
msgstr "Confirmación de emparellado para «%s»"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:414 ../js/ui/status/bluetooth.js:444
|
||||
#: ../js/ui/status/bluetooth.js:411 ../js/ui/status/bluetooth.js:441
|
||||
#, c-format
|
||||
msgid "Device %s wants to pair with this computer"
|
||||
msgstr "O dispositivo «%s» quere emparellarse con este equipo"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:415
|
||||
#: ../js/ui/status/bluetooth.js:412
|
||||
#, c-format
|
||||
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
||||
msgstr "Confirme que o PIN mostrado en «%s» coincide co do dispositivo."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:417
|
||||
#: ../js/ui/status/bluetooth.js:414
|
||||
msgid "Matches"
|
||||
msgstr "Coincide"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:418
|
||||
#: ../js/ui/status/bluetooth.js:415
|
||||
msgid "Does not match"
|
||||
msgstr "Non coincide"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:437
|
||||
#: ../js/ui/status/bluetooth.js:434
|
||||
#, c-format
|
||||
msgid "Pairing request for %s"
|
||||
msgstr "Solicitude de emparellamento para «%s»"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:445
|
||||
#: ../js/ui/status/bluetooth.js:442
|
||||
msgid "Please enter the PIN mentioned on the device."
|
||||
msgstr "Escriba o PIN mencionado no dispositivo."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:461
|
||||
#: ../js/ui/status/bluetooth.js:458
|
||||
msgid "OK"
|
||||
msgstr "Aceptar"
|
||||
|
||||
@ -1193,13 +1194,13 @@ msgstr "non dispoñíbel"
|
||||
msgid "connection failed"
|
||||
msgstr "conexión fallida"
|
||||
|
||||
#: ../js/ui/status/network.js:585 ../js/ui/status/network.js:1505
|
||||
#: ../js/ui/status/network.js:585 ../js/ui/status/network.js:1497
|
||||
msgid "More..."
|
||||
msgstr "Máis…"
|
||||
|
||||
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
||||
#. and we cannot access its settings (including the name)
|
||||
#: ../js/ui/status/network.js:621 ../js/ui/status/network.js:1440
|
||||
#: ../js/ui/status/network.js:621 ../js/ui/status/network.js:1432
|
||||
msgid "Connected (private)"
|
||||
msgstr "Conectada (privada)"
|
||||
|
||||
@ -1207,69 +1208,69 @@ msgstr "Conectada (privada)"
|
||||
msgid "Auto Ethernet"
|
||||
msgstr "Ethernet automática"
|
||||
|
||||
#: ../js/ui/status/network.js:757
|
||||
#: ../js/ui/status/network.js:754
|
||||
msgid "Auto broadband"
|
||||
msgstr "Banda larga automática"
|
||||
|
||||
#: ../js/ui/status/network.js:760
|
||||
#: ../js/ui/status/network.js:757
|
||||
msgid "Auto dial-up"
|
||||
msgstr "Marcado automático"
|
||||
|
||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||
#: ../js/ui/status/network.js:879 ../js/ui/status/network.js:1452
|
||||
#: ../js/ui/status/network.js:876 ../js/ui/status/network.js:1444
|
||||
#, c-format
|
||||
msgid "Auto %s"
|
||||
msgstr "%s automática"
|
||||
|
||||
#: ../js/ui/status/network.js:881
|
||||
#: ../js/ui/status/network.js:878
|
||||
msgid "Auto bluetooth"
|
||||
msgstr "Bluetooth automática"
|
||||
|
||||
#: ../js/ui/status/network.js:1454
|
||||
#: ../js/ui/status/network.js:1446
|
||||
msgid "Auto wireless"
|
||||
msgstr "Sen fíos automática"
|
||||
|
||||
#: ../js/ui/status/network.js:1541
|
||||
#: ../js/ui/status/network.js:1533
|
||||
msgid "Network"
|
||||
msgstr "Rede"
|
||||
|
||||
#: ../js/ui/status/network.js:1548
|
||||
#: ../js/ui/status/network.js:1540
|
||||
msgid "Enable networking"
|
||||
msgstr "Activar rede"
|
||||
|
||||
#: ../js/ui/status/network.js:1560
|
||||
#: ../js/ui/status/network.js:1552
|
||||
msgid "Wired"
|
||||
msgstr "Con fíos"
|
||||
|
||||
#: ../js/ui/status/network.js:1571
|
||||
#: ../js/ui/status/network.js:1563
|
||||
msgid "Wireless"
|
||||
msgstr "Sen fíos"
|
||||
|
||||
#: ../js/ui/status/network.js:1581
|
||||
#: ../js/ui/status/network.js:1573
|
||||
msgid "Mobile broadband"
|
||||
msgstr "Banda larga móbil"
|
||||
|
||||
#: ../js/ui/status/network.js:1591
|
||||
#: ../js/ui/status/network.js:1583
|
||||
msgid "VPN Connections"
|
||||
msgstr "Conexións VPN"
|
||||
|
||||
#: ../js/ui/status/network.js:1602
|
||||
#: ../js/ui/status/network.js:1594
|
||||
msgid "Network Settings"
|
||||
msgstr "Preferencias da rede"
|
||||
|
||||
#: ../js/ui/status/network.js:1739
|
||||
#: ../js/ui/status/network.js:1731
|
||||
msgid "Connection failed"
|
||||
msgstr "Produciuse un fallo na conexión"
|
||||
|
||||
#: ../js/ui/status/network.js:1740
|
||||
#: ../js/ui/status/network.js:1732
|
||||
msgid "Activation of network connection failed"
|
||||
msgstr "Produciuse un fallo na activación da conexión de rede"
|
||||
|
||||
#: ../js/ui/status/network.js:1993
|
||||
#: ../js/ui/status/network.js:1985
|
||||
msgid "Networking is disabled"
|
||||
msgstr "A rede está desactivada"
|
||||
|
||||
#: ../js/ui/status/network.js:2117
|
||||
#: ../js/ui/status/network.js:2109
|
||||
msgid "Network Manager"
|
||||
msgstr "Xestor da rede"
|
||||
|
||||
@ -1643,39 +1644,31 @@ msgstr "Inactivo"
|
||||
msgid "Unavailable"
|
||||
msgstr "Non dispoñíbel"
|
||||
|
||||
#: ../js/ui/userMenu.js:595 ../js/ui/userMenu.js:599 ../js/ui/userMenu.js:669
|
||||
msgid "Power Off..."
|
||||
msgstr "Apagar…"
|
||||
|
||||
#: ../js/ui/userMenu.js:631
|
||||
#: ../js/ui/userMenu.js:624
|
||||
msgid "Notifications"
|
||||
msgstr "Notificacións"
|
||||
|
||||
#: ../js/ui/userMenu.js:639
|
||||
msgid "Online Accounts"
|
||||
msgstr "Contas en liña"
|
||||
|
||||
#: ../js/ui/userMenu.js:643
|
||||
#: ../js/ui/userMenu.js:632
|
||||
msgid "System Settings"
|
||||
msgstr "Preferencias do sistema"
|
||||
|
||||
#: ../js/ui/userMenu.js:650
|
||||
msgid "Lock Screen"
|
||||
msgstr "Bloquear a pantalla"
|
||||
|
||||
#: ../js/ui/userMenu.js:655
|
||||
#: ../js/ui/userMenu.js:646
|
||||
msgid "Switch User"
|
||||
msgstr "Cambiar de usuario"
|
||||
|
||||
#: ../js/ui/userMenu.js:660
|
||||
msgid "Log Out..."
|
||||
msgstr "Saír da sesión…"
|
||||
#: ../js/ui/userMenu.js:651
|
||||
msgid "Log Out"
|
||||
msgstr "Saír da sesión"
|
||||
|
||||
#: ../js/ui/userMenu.js:688
|
||||
#: ../js/ui/userMenu.js:659
|
||||
msgid "Lock"
|
||||
msgstr "Bloquear"
|
||||
|
||||
#: ../js/ui/userMenu.js:677
|
||||
msgid "Your chat status will be set to busy"
|
||||
msgstr "O seu estado do chat estabelecerase a «ocupado»"
|
||||
|
||||
#: ../js/ui/userMenu.js:689
|
||||
#: ../js/ui/userMenu.js:678
|
||||
msgid ""
|
||||
"Notifications are now disabled, including chat messages. Your online status "
|
||||
"has been adjusted to let others know that you might not see their messages."
|
||||
@ -1796,6 +1789,18 @@ msgstr "Sistema de ficheiros"
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "Power Off..."
|
||||
#~ msgstr "Apagar…"
|
||||
|
||||
#~ msgid "Online Accounts"
|
||||
#~ msgstr "Contas en liña"
|
||||
|
||||
#~ msgid "Lock Screen"
|
||||
#~ msgstr "Bloquear a pantalla"
|
||||
|
||||
#~ msgid "Log Out..."
|
||||
#~ msgstr "Saír da sesión…"
|
||||
|
||||
#~ msgid "RECENT ITEMS"
|
||||
#~ msgstr "ELEMENTOS RECENTES"
|
||||
|
||||
|
238
po/it.po
238
po/it.po
@ -8,16 +8,15 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||
"shell&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2012-04-28 13:41+0000\n"
|
||||
"PO-Revision-Date: 2012-04-30 15:32+0200\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2012-05-12 20:08+0200\n"
|
||||
"PO-Revision-Date: 2012-05-12 20:09+0200\n"
|
||||
"Last-Translator: Luca Ferretti <lferrett@gnome.org>\n"
|
||||
"Language-Team: Italian <tp@lists.linux.it>\n"
|
||||
"Language: it\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: it\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
|
||||
|
||||
#: ../data/gnome-shell.desktop.in.in.h:1
|
||||
@ -144,34 +143,42 @@ msgid "Keybinding to open the application menu."
|
||||
msgstr "Associazione di tasti per aprire il menù delle applicazioni."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
msgid "Keybinding to toggle the screen recorder"
|
||||
msgstr "Associazione tasti per commutare registrazione schermo"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
msgid "Keybinding to start/stop the builtin screen recorder."
|
||||
msgstr "Associazione di tasti per avviare/fermare il registratore di schermo incorporato."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
msgid "Which keyboard to use"
|
||||
msgstr "Quale tastiera usare"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
msgid "The type of keyboard to use."
|
||||
msgstr "Il tipo di tastiera da usare."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
||||
msgid "Show time with seconds"
|
||||
msgstr "Mostra l'ora con i secondi"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:23
|
||||
msgid "If true, display seconds in time."
|
||||
msgstr "Se VERO, mostra i secondi nell'orario."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
||||
msgid "Show date in clock"
|
||||
msgstr "Mostra la data nell'orologio"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:23
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
||||
msgid "If true, display date in the clock, in addition to time."
|
||||
msgstr "Se VERO, mostra nell'orologio la data, oltre all'orario."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:26
|
||||
msgid "Framerate used for recording screencasts."
|
||||
msgstr "Framerate per la registrazione di screencast."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:27
|
||||
msgid ""
|
||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||
"screencast recorder in frames-per-second."
|
||||
@ -179,11 +186,11 @@ msgstr ""
|
||||
"Il framerate in fotogrammi al secondo dello screencast registrato attraverso "
|
||||
"il registratore della GNOME Shell."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:26
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:28
|
||||
msgid "The gstreamer pipeline used to encode the screencast"
|
||||
msgstr "La pipeline di gstreamer utilizzata per codificare lo screencast"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:28
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:30
|
||||
#, no-c-format
|
||||
msgid ""
|
||||
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
||||
@ -209,11 +216,11 @@ msgstr ""
|
||||
"WEBM usando il codec VP8. %T è usato come un segnaposto per una stima del "
|
||||
"valore di thread ottimale per il sistema in uso."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:29
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:31
|
||||
msgid "File extension used for storing the screencast"
|
||||
msgstr "Estensione del file utilizzato per salvare lo screencast"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:30
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:32
|
||||
msgid ""
|
||||
"The filename for recorded screencasts will be a unique filename based on the "
|
||||
"current date, and use this extension. It should be changed when recording to "
|
||||
@ -263,7 +270,7 @@ msgstr "Non elencato?"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1023 ../js/ui/endSessionDialog.js:401
|
||||
#: ../js/ui/extensionSystem.js:400 ../js/ui/networkAgent.js:153
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:175 ../js/ui/status/bluetooth.js:462
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:175 ../js/ui/status/bluetooth.js:459
|
||||
msgid "Cancel"
|
||||
msgstr "Annulla"
|
||||
|
||||
@ -276,30 +283,31 @@ msgstr "Accedi"
|
||||
msgid "Login Window"
|
||||
msgstr "Finestra di accesso"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:155 ../js/ui/userMenu.js:597
|
||||
#: ../js/ui/userMenu.js:599 ../js/ui/userMenu.js:668
|
||||
#: ../js/gdm/powerMenu.js:130 ../js/ui/userMenu.js:588
|
||||
#: ../js/ui/userMenu.js:592 ../js/ui/userMenu.js:637
|
||||
msgid "Suspend"
|
||||
msgstr "Sospendi"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:160
|
||||
#: ../js/gdm/powerMenu.js:135
|
||||
msgid "Restart"
|
||||
msgstr "Riavvia"
|
||||
|
||||
#: ../js/gdm/powerMenu.js:165
|
||||
#: ../js/gdm/powerMenu.js:140 ../js/ui/userMenu.js:590
|
||||
#: ../js/ui/userMenu.js:592 ../js/ui/userMenu.js:636
|
||||
msgid "Power Off"
|
||||
msgstr "Spegni"
|
||||
|
||||
#: ../js/misc/util.js:92
|
||||
#: ../js/misc/util.js:93
|
||||
msgid "Command not found"
|
||||
msgstr "Comando non trovato"
|
||||
|
||||
#. Replace "Error invoking GLib.shell_parse_argv: " with
|
||||
#. something nicer
|
||||
#: ../js/misc/util.js:119
|
||||
#: ../js/misc/util.js:124
|
||||
msgid "Could not parse command:"
|
||||
msgstr "Impossibile analizzare il comando:"
|
||||
|
||||
#: ../js/misc/util.js:127
|
||||
#: ../js/misc/util.js:132
|
||||
#, c-format
|
||||
msgid "Execution of '%s' failed:"
|
||||
msgstr "Esecuzione di «%s» non riuscita:"
|
||||
@ -313,19 +321,19 @@ msgstr "Tutte"
|
||||
msgid "APPLICATIONS"
|
||||
msgstr "APPLICAZIONI"
|
||||
|
||||
#: ../js/ui/appDisplay.js:375
|
||||
#: ../js/ui/appDisplay.js:374
|
||||
msgid "SETTINGS"
|
||||
msgstr "IMPOSTAZIONI"
|
||||
|
||||
#: ../js/ui/appDisplay.js:680
|
||||
#: ../js/ui/appDisplay.js:679
|
||||
msgid "New Window"
|
||||
msgstr "Nuova finestra"
|
||||
|
||||
#: ../js/ui/appDisplay.js:683
|
||||
#: ../js/ui/appDisplay.js:682
|
||||
msgid "Remove from Favorites"
|
||||
msgstr "Rimuovi dai preferiti"
|
||||
|
||||
#: ../js/ui/appDisplay.js:684
|
||||
#: ../js/ui/appDisplay.js:683
|
||||
msgid "Add to Favorites"
|
||||
msgstr "Aggiungi ai preferiti"
|
||||
|
||||
@ -525,7 +533,7 @@ msgstr "Fuori rete"
|
||||
msgid "CONTACTS"
|
||||
msgstr "CONTATTI"
|
||||
|
||||
#: ../js/ui/dash.js:229 ../js/ui/messageTray.js:1207
|
||||
#: ../js/ui/dash.js:239 ../js/ui/messageTray.js:1209
|
||||
msgid "Remove"
|
||||
msgstr "Rimuovi"
|
||||
|
||||
@ -707,53 +715,53 @@ msgstr "Password:"
|
||||
msgid "Type again:"
|
||||
msgstr "Inserire di nuovo:"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:732
|
||||
#: ../js/ui/lookingGlass.js:693
|
||||
msgid "No extensions installed"
|
||||
msgstr "Nessuna estensione installata"
|
||||
|
||||
#. Translators: argument is an extension UUID.
|
||||
#: ../js/ui/lookingGlass.js:786
|
||||
#: ../js/ui/lookingGlass.js:747
|
||||
#, c-format
|
||||
msgid "%s has not emitted any errors."
|
||||
msgstr "%s non ha emesso alcun errore."
|
||||
|
||||
#: ../js/ui/lookingGlass.js:792
|
||||
#: ../js/ui/lookingGlass.js:753
|
||||
msgid "Hide Errors"
|
||||
msgstr "Nascondi errori"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:796 ../js/ui/lookingGlass.js:847
|
||||
#: ../js/ui/lookingGlass.js:757 ../js/ui/lookingGlass.js:808
|
||||
msgid "Show Errors"
|
||||
msgstr "Mostra errori"
|
||||
|
||||
# (ndt) o abilitata?
|
||||
#: ../js/ui/lookingGlass.js:805
|
||||
#: ../js/ui/lookingGlass.js:766
|
||||
msgid "Enabled"
|
||||
msgstr "Abilitato"
|
||||
|
||||
# (ndt) o disabilitata?
|
||||
#. translators:
|
||||
#. * The device has been disabled
|
||||
#: ../js/ui/lookingGlass.js:808 ../src/gvc/gvc-mixer-control.c:1082
|
||||
#: ../js/ui/lookingGlass.js:769 ../src/gvc/gvc-mixer-control.c:1082
|
||||
msgid "Disabled"
|
||||
msgstr "Disabilitato"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:810
|
||||
#: ../js/ui/lookingGlass.js:771
|
||||
msgid "Error"
|
||||
msgstr "Errore"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:812
|
||||
#: ../js/ui/lookingGlass.js:773
|
||||
msgid "Out of date"
|
||||
msgstr "Non aggiornato"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:814
|
||||
#: ../js/ui/lookingGlass.js:775
|
||||
msgid "Downloading"
|
||||
msgstr "Scaricamento"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:835
|
||||
#: ../js/ui/lookingGlass.js:796
|
||||
msgid "View Source"
|
||||
msgstr "Visualizza sorgente"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:841
|
||||
#: ../js/ui/lookingGlass.js:802
|
||||
msgid "Web Page"
|
||||
msgstr "Pagina web"
|
||||
|
||||
@ -763,19 +771,19 @@ msgstr "Pagina web"
|
||||
msgid "Screencast from %d %t"
|
||||
msgstr "Screencast da %d %t"
|
||||
|
||||
#: ../js/ui/messageTray.js:1200
|
||||
#: ../js/ui/messageTray.js:1202
|
||||
msgid "Open"
|
||||
msgstr "Apri"
|
||||
|
||||
#: ../js/ui/messageTray.js:1217
|
||||
#: ../js/ui/messageTray.js:1219
|
||||
msgid "Unmute"
|
||||
msgstr "Attiva audio"
|
||||
|
||||
#: ../js/ui/messageTray.js:1217
|
||||
#: ../js/ui/messageTray.js:1219
|
||||
msgid "Mute"
|
||||
msgstr "Escludi audio"
|
||||
|
||||
#: ../js/ui/messageTray.js:2490
|
||||
#: ../js/ui/messageTray.js:2492
|
||||
msgid "System Information"
|
||||
msgstr "Informazione di sistema"
|
||||
|
||||
@ -821,8 +829,8 @@ msgstr "Richiesta autenticazione dalla rete wireless"
|
||||
#: ../js/ui/networkAgent.js:330
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Passwords or encryption keys are required to access the wireless network '%"
|
||||
"s'."
|
||||
"Passwords or encryption keys are required to access the wireless network "
|
||||
"'%s'."
|
||||
msgstr ""
|
||||
"È richiesta una password o una chiave di cifratura per accedere alla rete "
|
||||
"wireless «%s»."
|
||||
@ -940,7 +948,7 @@ msgstr "Errore nell'autenticazione. Provare di nuovo."
|
||||
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
|
||||
#. switches containing "◯" and "|"). Other values will
|
||||
#. simply result in invisible toggle switches.
|
||||
#: ../js/ui/popupMenu.js:724
|
||||
#: ../js/ui/popupMenu.js:728
|
||||
msgid "toggle-switch-us"
|
||||
msgstr "toggle-switch-us"
|
||||
|
||||
@ -948,11 +956,11 @@ msgstr "toggle-switch-us"
|
||||
msgid "Please enter a command:"
|
||||
msgstr "Inserire un comando:"
|
||||
|
||||
#: ../js/ui/searchDisplay.js:332
|
||||
#: ../js/ui/searchDisplay.js:321
|
||||
msgid "Searching..."
|
||||
msgstr "Ricerca..."
|
||||
|
||||
#: ../js/ui/searchDisplay.js:415
|
||||
#: ../js/ui/searchDisplay.js:374
|
||||
msgid "No matching results."
|
||||
msgstr "Nessun risultato corrispondente."
|
||||
|
||||
@ -1025,9 +1033,9 @@ msgid "Large Text"
|
||||
msgstr "Caratteri grandi"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:31 ../js/ui/status/bluetooth.js:35
|
||||
#: ../js/ui/status/bluetooth.js:258 ../js/ui/status/bluetooth.js:341
|
||||
#: ../js/ui/status/bluetooth.js:371 ../js/ui/status/bluetooth.js:407
|
||||
#: ../js/ui/status/bluetooth.js:436 ../js/ui/status/network.js:893
|
||||
#: ../js/ui/status/bluetooth.js:255 ../js/ui/status/bluetooth.js:338
|
||||
#: ../js/ui/status/bluetooth.js:368 ../js/ui/status/bluetooth.js:404
|
||||
#: ../js/ui/status/bluetooth.js:433 ../js/ui/status/network.js:890
|
||||
msgid "Bluetooth"
|
||||
msgstr "Bluetooth"
|
||||
|
||||
@ -1055,102 +1063,102 @@ msgstr "hardware disabilitato"
|
||||
|
||||
# indica lo stato del device BT, per esempio gli auricolari
|
||||
# credo sia meglio l'aggettivo che il sostantivo
|
||||
#: ../js/ui/status/bluetooth.js:203
|
||||
#: ../js/ui/status/bluetooth.js:200
|
||||
msgid "Connection"
|
||||
msgstr "Collegato"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:214 ../js/ui/status/network.js:491
|
||||
#: ../js/ui/status/bluetooth.js:211 ../js/ui/status/network.js:491
|
||||
msgid "disconnecting..."
|
||||
msgstr "disconnessione..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:227 ../js/ui/status/network.js:497
|
||||
#: ../js/ui/status/bluetooth.js:224 ../js/ui/status/network.js:497
|
||||
msgid "connecting..."
|
||||
msgstr "connessione..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:245
|
||||
#: ../js/ui/status/bluetooth.js:242
|
||||
msgid "Send Files..."
|
||||
msgstr "Invia file..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:250
|
||||
#: ../js/ui/status/bluetooth.js:247
|
||||
msgid "Browse Files..."
|
||||
msgstr "Esplora file..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:259
|
||||
#: ../js/ui/status/bluetooth.js:256
|
||||
msgid "Error browsing device"
|
||||
msgstr "Errore nell'esplorare il dispositivo"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:260
|
||||
#: ../js/ui/status/bluetooth.js:257
|
||||
#, c-format
|
||||
msgid "The requested device cannot be browsed, error is '%s'"
|
||||
msgstr "Non è possibile esplorare il dispositivo richiesto, l'errore è «%s»"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:268
|
||||
#: ../js/ui/status/bluetooth.js:265
|
||||
msgid "Keyboard Settings"
|
||||
msgstr "Impostazioni tastiera"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:271
|
||||
#: ../js/ui/status/bluetooth.js:268
|
||||
msgid "Mouse Settings"
|
||||
msgstr "Impostazioni mouse"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:276 ../js/ui/status/volume.js:59
|
||||
#: ../js/ui/status/bluetooth.js:273 ../js/ui/status/volume.js:59
|
||||
msgid "Sound Settings"
|
||||
msgstr "Impostazioni audio"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:372
|
||||
#: ../js/ui/status/bluetooth.js:369
|
||||
#, c-format
|
||||
msgid "Authorization request from %s"
|
||||
msgstr "Richesta autorizzazione da %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:378
|
||||
#: ../js/ui/status/bluetooth.js:375
|
||||
#, c-format
|
||||
msgid "Device %s wants access to the service '%s'"
|
||||
msgstr "Il dispositivo %s vuole accedere al servizio «%s»"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:380
|
||||
#: ../js/ui/status/bluetooth.js:377
|
||||
msgid "Always grant access"
|
||||
msgstr "Accorda sempre l'accesso"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:381
|
||||
#: ../js/ui/status/bluetooth.js:378
|
||||
msgid "Grant this time only"
|
||||
msgstr "Accorda solo stavolta"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:382 ../js/ui/telepathyClient.js:1093
|
||||
#: ../js/ui/status/bluetooth.js:379 ../js/ui/telepathyClient.js:1093
|
||||
msgid "Reject"
|
||||
msgstr "Rifiuta"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:408
|
||||
#: ../js/ui/status/bluetooth.js:405
|
||||
#, c-format
|
||||
msgid "Pairing confirmation for %s"
|
||||
msgstr "Conferma associazione per %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:414 ../js/ui/status/bluetooth.js:444
|
||||
#: ../js/ui/status/bluetooth.js:411 ../js/ui/status/bluetooth.js:441
|
||||
#, c-format
|
||||
msgid "Device %s wants to pair with this computer"
|
||||
msgstr "Il dispositivo %s vuole associarsi con questo computer"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:415
|
||||
#: ../js/ui/status/bluetooth.js:412
|
||||
#, c-format
|
||||
msgid "Please confirm whether the PIN '%s' matches the one on the device."
|
||||
msgstr "Confermare la corrispondenza del PIN «%s» con quello sul dispositivo."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:417
|
||||
#: ../js/ui/status/bluetooth.js:414
|
||||
msgid "Matches"
|
||||
msgstr "Corrisponde"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:418
|
||||
#: ../js/ui/status/bluetooth.js:415
|
||||
msgid "Does not match"
|
||||
msgstr "Non corrisponde"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:437
|
||||
#: ../js/ui/status/bluetooth.js:434
|
||||
#, c-format
|
||||
msgid "Pairing request for %s"
|
||||
msgstr "Richiesta di associazione per %s"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:445
|
||||
#: ../js/ui/status/bluetooth.js:442
|
||||
msgid "Please enter the PIN mentioned on the device."
|
||||
msgstr "Inserire il PIN indicato sul dispositivo."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:461
|
||||
#: ../js/ui/status/bluetooth.js:458
|
||||
msgid "OK"
|
||||
msgstr "OK"
|
||||
|
||||
@ -1204,13 +1212,13 @@ msgstr "non disponibile"
|
||||
msgid "connection failed"
|
||||
msgstr "connessione non riuscita"
|
||||
|
||||
#: ../js/ui/status/network.js:585 ../js/ui/status/network.js:1505
|
||||
#: ../js/ui/status/network.js:585 ../js/ui/status/network.js:1497
|
||||
msgid "More..."
|
||||
msgstr "Altro..."
|
||||
|
||||
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
|
||||
#. and we cannot access its settings (including the name)
|
||||
#: ../js/ui/status/network.js:621 ../js/ui/status/network.js:1440
|
||||
#: ../js/ui/status/network.js:621 ../js/ui/status/network.js:1432
|
||||
msgid "Connected (private)"
|
||||
msgstr "Connessa (privata)"
|
||||
|
||||
@ -1218,69 +1226,69 @@ msgstr "Connessa (privata)"
|
||||
msgid "Auto Ethernet"
|
||||
msgstr "Ethernet automatica"
|
||||
|
||||
#: ../js/ui/status/network.js:757
|
||||
#: ../js/ui/status/network.js:754
|
||||
msgid "Auto broadband"
|
||||
msgstr "Banda larga automatica"
|
||||
|
||||
#: ../js/ui/status/network.js:760
|
||||
#: ../js/ui/status/network.js:757
|
||||
msgid "Auto dial-up"
|
||||
msgstr "Dial-up automatica"
|
||||
|
||||
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
|
||||
#: ../js/ui/status/network.js:879 ../js/ui/status/network.js:1452
|
||||
#: ../js/ui/status/network.js:876 ../js/ui/status/network.js:1444
|
||||
#, c-format
|
||||
msgid "Auto %s"
|
||||
msgstr "%s automatica"
|
||||
|
||||
#: ../js/ui/status/network.js:881
|
||||
#: ../js/ui/status/network.js:878
|
||||
msgid "Auto bluetooth"
|
||||
msgstr "Bluetooth automatica"
|
||||
|
||||
#: ../js/ui/status/network.js:1454
|
||||
#: ../js/ui/status/network.js:1446
|
||||
msgid "Auto wireless"
|
||||
msgstr "Wireless automatica"
|
||||
|
||||
#: ../js/ui/status/network.js:1541
|
||||
#: ../js/ui/status/network.js:1533
|
||||
msgid "Network"
|
||||
msgstr "Rete"
|
||||
|
||||
#: ../js/ui/status/network.js:1548
|
||||
#: ../js/ui/status/network.js:1540
|
||||
msgid "Enable networking"
|
||||
msgstr "Abilita rete"
|
||||
|
||||
#: ../js/ui/status/network.js:1560
|
||||
#: ../js/ui/status/network.js:1552
|
||||
msgid "Wired"
|
||||
msgstr "Via cavo"
|
||||
|
||||
#: ../js/ui/status/network.js:1571
|
||||
#: ../js/ui/status/network.js:1563
|
||||
msgid "Wireless"
|
||||
msgstr "Wireless"
|
||||
|
||||
#: ../js/ui/status/network.js:1581
|
||||
#: ../js/ui/status/network.js:1573
|
||||
msgid "Mobile broadband"
|
||||
msgstr "Banda larga mobile"
|
||||
|
||||
#: ../js/ui/status/network.js:1591
|
||||
#: ../js/ui/status/network.js:1583
|
||||
msgid "VPN Connections"
|
||||
msgstr "Connessioni VPN"
|
||||
|
||||
#: ../js/ui/status/network.js:1602
|
||||
#: ../js/ui/status/network.js:1594
|
||||
msgid "Network Settings"
|
||||
msgstr "Impostazioni rete"
|
||||
|
||||
#: ../js/ui/status/network.js:1739
|
||||
#: ../js/ui/status/network.js:1731
|
||||
msgid "Connection failed"
|
||||
msgstr "Connessione non riuscita"
|
||||
|
||||
#: ../js/ui/status/network.js:1740
|
||||
#: ../js/ui/status/network.js:1732
|
||||
msgid "Activation of network connection failed"
|
||||
msgstr "Attivazione della connessione di rete non riuscita"
|
||||
|
||||
#: ../js/ui/status/network.js:1993
|
||||
#: ../js/ui/status/network.js:1985
|
||||
msgid "Networking is disabled"
|
||||
msgstr "Rete disabilitata"
|
||||
|
||||
#: ../js/ui/status/network.js:2117
|
||||
#: ../js/ui/status/network.js:2109
|
||||
msgid "Network Manager"
|
||||
msgstr "Gestore reti"
|
||||
|
||||
@ -1660,40 +1668,32 @@ msgstr "Inattivo"
|
||||
msgid "Unavailable"
|
||||
msgstr "Non disponibile"
|
||||
|
||||
#: ../js/ui/userMenu.js:595 ../js/ui/userMenu.js:599 ../js/ui/userMenu.js:669
|
||||
msgid "Power Off..."
|
||||
msgstr "Spegni..."
|
||||
|
||||
#: ../js/ui/userMenu.js:631
|
||||
#: ../js/ui/userMenu.js:624
|
||||
msgid "Notifications"
|
||||
msgstr "Notifiche"
|
||||
|
||||
#: ../js/ui/userMenu.js:639
|
||||
msgid "Online Accounts"
|
||||
msgstr "Account online"
|
||||
|
||||
#: ../js/ui/userMenu.js:643
|
||||
#: ../js/ui/userMenu.js:632
|
||||
msgid "System Settings"
|
||||
msgstr "Impostazioni di sistema"
|
||||
|
||||
#: ../js/ui/userMenu.js:650
|
||||
msgid "Lock Screen"
|
||||
msgstr "Blocca schermo"
|
||||
|
||||
#: ../js/ui/userMenu.js:655
|
||||
#: ../js/ui/userMenu.js:646
|
||||
msgid "Switch User"
|
||||
msgstr "Cambia utente"
|
||||
|
||||
#: ../js/ui/userMenu.js:660
|
||||
msgid "Log Out..."
|
||||
msgstr "Termina sessione..."
|
||||
#: ../js/ui/userMenu.js:651
|
||||
msgid "Log Out"
|
||||
msgstr "Termina sessione"
|
||||
|
||||
#: ../js/ui/userMenu.js:659
|
||||
msgid "Lock"
|
||||
msgstr "Blocca"
|
||||
|
||||
# accorciato, altrimenti non si legge...
|
||||
#: ../js/ui/userMenu.js:688
|
||||
#: ../js/ui/userMenu.js:677
|
||||
msgid "Your chat status will be set to busy"
|
||||
msgstr "Stato per chat impostato a non disponibile"
|
||||
|
||||
#: ../js/ui/userMenu.js:689
|
||||
#: ../js/ui/userMenu.js:678
|
||||
msgid ""
|
||||
"Notifications are now disabled, including chat messages. Your online status "
|
||||
"has been adjusted to let others know that you might not see their messages."
|
||||
@ -1817,6 +1817,18 @@ msgstr "File system"
|
||||
msgid "%1$s: %2$s"
|
||||
msgstr "%1$s: %2$s"
|
||||
|
||||
#~ msgid "Power Off..."
|
||||
#~ msgstr "Spegni..."
|
||||
|
||||
#~ msgid "Online Accounts"
|
||||
#~ msgstr "Account online"
|
||||
|
||||
#~ msgid "Lock Screen"
|
||||
#~ msgstr "Blocca schermo"
|
||||
|
||||
#~ msgid "Log Out..."
|
||||
#~ msgstr "Termina sessione..."
|
||||
|
||||
#~ msgid "RECENT ITEMS"
|
||||
#~ msgstr "ELEMENTI RECENTI"
|
||||
|
||||
|
11
po/ja.po
11
po/ja.po
@ -6,15 +6,16 @@
|
||||
# Jiro Matsuzawa <jmatsuzawa@src.gnome.org>, 2011, 2012.
|
||||
# Takayuki KUSANO <AE5T-KSN@asahi-net.or.jp>, 2011, 2012.
|
||||
# Hideki Yamane <henrich@debian.org>, 2011.
|
||||
# Takanori MATSUURA <t.matsuu@gmail.com>, 2012.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnome-shell master\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||
"shell&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2012-04-19 21:14+0000\n"
|
||||
"PO-Revision-Date: 2012-04-21 21:35+0900\n"
|
||||
"Last-Translator: OKANO Takayoshi <kano@na.rim.or.jp>\n"
|
||||
"POT-Creation-Date: 2012-05-10 04:40+0000\n"
|
||||
"PO-Revision-Date: 2012-05-15 00:48+0900\n"
|
||||
"Last-Translator: Takanori MATSUURA <t.matsuu@gmail.com>\n"
|
||||
"Language-Team: Japanese <gnome-translation@gnome.gr.jp>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@ -524,11 +525,11 @@ msgstr "カレンダーを開く"
|
||||
#. in 24-hour mode.
|
||||
#: ../js/ui/dateMenu.js:187
|
||||
msgid "%a %b %e, %R:%S"
|
||||
msgstr "%m/%d (%a) %R:%S"
|
||||
msgstr "%B%e日 (%a) %R:%S"
|
||||
|
||||
#: ../js/ui/dateMenu.js:188
|
||||
msgid "%a %b %e, %R"
|
||||
msgstr "%m/%d (%a) %R"
|
||||
msgstr "%B%e日 (%a) %R"
|
||||
|
||||
#. Translators: This is the time format without date used
|
||||
#. in 24-hour mode.
|
||||
|
278
po/mr.po
278
po/mr.po
@ -8,8 +8,8 @@ msgstr ""
|
||||
"Project-Id-Version: mr\n"
|
||||
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||
"shell&keywords=I18N+L10N&component=general\n"
|
||||
"POT-Creation-Date: 2012-03-30 17:59+0000\n"
|
||||
"PO-Revision-Date: 2012-04-02 11:33+0530\n"
|
||||
"POT-Creation-Date: 2012-04-24 15:39+0000\n"
|
||||
"PO-Revision-Date: 2012-05-10 09:57+0530\n"
|
||||
"Last-Translator: Sandeep Shedmake <sshedmak@redhat.com>\n"
|
||||
"Language-Team: Marathi <fedora-trans-mr@redhat.com>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -47,7 +47,6 @@ msgid ""
|
||||
msgstr "आंतरिक डिबगिंग व Alt-F2 संवादचा वापर करून निंयत्रणकरीता प्रवेश देतो."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:3
|
||||
#| msgid "Uuids of extensions to disable"
|
||||
msgid "Uuids of extensions to enable"
|
||||
msgstr "सुरू करण्याजोगी एक्सटेंशन्स्चे Uuids"
|
||||
|
||||
@ -59,10 +58,10 @@ msgid ""
|
||||
"DisableExtension DBus methods on org.gnome.Shell."
|
||||
msgstr ""
|
||||
"GNOME शेल एक्सटेंशन्सकडे uuid गुणधर्म असते; हि कि एक्सटेंशन्स् दाखवते ज्यास "
|
||||
"लोड करणे आवश्यक आहे. "
|
||||
"लोड करण्याजोगी कोणत्याहि एक्सटेंशला सूचीत असणे आवश्यक आहे. "
|
||||
"org.gnome.Shell वरील EnableExtension व DisableExtension DBus मेथडससह या सूचीत "
|
||||
"बदल करणे शक्य आहे."
|
||||
"लोड करणे आवश्यक "
|
||||
"आहे. लोड करण्याजोगी कोणत्याहि एक्सटेंशला सूचीत असणे आवश्यक आहे. org.gnome."
|
||||
"Shell वरील "
|
||||
"EnableExtension व DisableExtension DBus मेथडससह या सूचीत बदल करणे शक्य आहे."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:5
|
||||
msgid "Whether to collect stats about applications usage"
|
||||
@ -110,7 +109,8 @@ msgid ""
|
||||
"The value here is from the TpConnectionPresenceType enumeration."
|
||||
msgstr ""
|
||||
"वापरकर्तातर्फे ठरवलेले शेवटचे IM हाजेरी साठवण्याकरीता आंतरिकपणे वापरले जाते. "
|
||||
"येथील मूल्य TpConnectionPresenceType एन्युमरेशनपासूनचे आहे."
|
||||
"येथील मूल्य "
|
||||
"TpConnectionPresenceType एन्युमरेशनपासूनचे आहे."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:13
|
||||
msgid ""
|
||||
@ -118,8 +118,8 @@ msgid ""
|
||||
"value here is from the GsmPresenceStatus enumeration."
|
||||
msgstr ""
|
||||
"वापरकर्तातर्फे ठरवलेले शेवटचे सत्र हाजेरी साठवण्याकरीता आंतरिकपणे वापरले जाते."
|
||||
" "
|
||||
"येथील मूल्य GsmPresenceStatus एन्युमरेशनपासूनचे आहे."
|
||||
" येथील मूल्य "
|
||||
"GsmPresenceStatus एन्युमरेशनपासूनचे आहे."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:14
|
||||
msgid "Show the week date in the calendar"
|
||||
@ -138,34 +138,44 @@ msgid "Keybinding to open the application menu."
|
||||
msgstr "ॲप्लिकेशन मेन्यु उघडण्यासाठी किबाइंडिंग."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:18
|
||||
#| msgid "Keybinding to open the application menu"
|
||||
msgid "Keybinding to toggle the screen recorder"
|
||||
msgstr "स्क्रीन रेकॉर्डरमधील बदलसाठी किबाइंडिंग"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
#| msgid "Keybinding to open the application menu."
|
||||
msgid "Keybinding to start/stop the builtin screen recorder."
|
||||
msgstr "बिल्टइन स्क्रीन रेकॉर्डर सुरू किंवा थांबवण्यासाठी किबाइंडिंग."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
msgid "Which keyboard to use"
|
||||
msgstr "कुठले किबोर्ड वापरायचे"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:19
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
msgid "The type of keyboard to use."
|
||||
msgstr "वापरण्याजोगी किबोर्डचे प्रकार."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:20
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
||||
msgid "Show time with seconds"
|
||||
msgstr "सेकंदात वेळ दाखवा"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:21
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:23
|
||||
msgid "If true, display seconds in time."
|
||||
msgstr "खरे असल्यास, वेळेत सेकंद दाखवा."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:22
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
||||
msgid "Show date in clock"
|
||||
msgstr "घड्याळात दिनांक दाखवा"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:23
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
||||
msgid "If true, display date in the clock, in addition to time."
|
||||
msgstr "खरे असल्यास,वेळेबरोबर तारीख पण घड्याळात दाखवा."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:24
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:26
|
||||
msgid "Framerate used for recording screencasts."
|
||||
msgstr "स्क्रिनकास्ट्स् रेकॉर्ड करण्यासाठी वापरलेले फ्रेमरेट."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:25
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:27
|
||||
msgid ""
|
||||
"The framerate of the resulting screencast recordered by GNOME Shell's "
|
||||
"screencast recorder in frames-per-second."
|
||||
@ -174,24 +184,12 @@ msgstr ""
|
||||
"केलेल्या परिणामक "
|
||||
"सक्रीनकास्टचा फ्रेमरेट."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:26
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:28
|
||||
msgid "The gstreamer pipeline used to encode the screencast"
|
||||
msgstr "स्क्रीनकास्ट एंकोड करण्यासाठी वापरलेले gstreamer पाइपलाइन"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:28
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:30
|
||||
#, no-c-format
|
||||
#| msgid ""
|
||||
#| "Sets the GStreamer pipeline used to encode recordings. It follows the "
|
||||
#| "syntax used for gst-launch. The pipeline should have an unconnected sink "
|
||||
#| "pad where the recorded video is recorded. It will normally have a "
|
||||
#| "unconnected source pad; output from that pad will be written into the "
|
||||
#| "output file. However the pipeline can also take care of its own output - "
|
||||
#| "this might be used to send the output to an icecast server via shout2send "
|
||||
#| "or similar. When unset or set to an empty value, the default pipeline "
|
||||
#| "will be used. This is currently 'videorate ! vp8enc quality=10 speed=2 "
|
||||
#| "threads=%T ! queue ! webmmux' and records to WEBM using the VP8 codec. %T "
|
||||
#| "is used as a placeholder for a guess at the optimal thread count on the "
|
||||
#| "system."
|
||||
msgid ""
|
||||
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
|
||||
"used for gst-launch. The pipeline should have an unconnected sink pad where "
|
||||
@ -205,21 +203,26 @@ msgid ""
|
||||
"thread count on the system."
|
||||
msgstr ""
|
||||
"रेकॉर्डिंग्स् एंकोड करण्यासाठी GStreamer पाइपलाइन ठरवतो. gst-launch सुरू "
|
||||
"करण्यासाठी मांडणीचा वापर करतो. पाइपलाइनमध्ये जोडणी अशक्य सिंक पॅड असायला हवे "
|
||||
"जेथे रेकॉर्डेड व्हिडीओ रेकॉर्ड केले जाते. सहसा जोडणी अशक्य स्रोत पॅड असते; "
|
||||
"पॅडपासूनचे आऊटपुट, आऊटपुट फाइलमध्ये लिहले जाते. तरी पाइपलाइन स्वतःच्या "
|
||||
"आऊटपुटची काळजी घेतो - याचा वापर shout2send किंवा समानतर्फे icecast "
|
||||
"सर्व्हरकरीता आऊटपुट पाठवण्याकरीता केला जातो. रिकामे मूल्यकरीता सेट अशक्य "
|
||||
"किंवा शक्य केल्यावर, मूळ पाइपलाइनचा वापर केला जातो. हे सध्या 'vp8enc "
|
||||
"quality=8 speed=6 threads=%T ! queue ! webmmux' आहे व VP8 कोडेकचा वापर करून "
|
||||
"WEBM करीता रेकॉर्डिंग करतो. %T चा वापर प्रणालीवरील कमाल थ्रेड गणणा "
|
||||
"ओळखण्यासाठी प्लेसहोल्डर म्हणून केला जातो."
|
||||
"करण्यासाठी "
|
||||
"मांडणीचा वापर करतो. पाइपलाइनमध्ये जोडणी अशक्य सिंक पॅड असायला हवे जेथे "
|
||||
"रेकॉर्डेड व्हिडीओ "
|
||||
"रेकॉर्ड केले जाते. सहसा जोडणी अशक्य स्रोत पॅड असते; पॅडपासूनचे आऊटपुट, आऊटपुट "
|
||||
"फाइलमध्ये लिहले "
|
||||
"जाते. तरी पाइपलाइन स्वतःच्या आऊटपुटची काळजी घेतो - याचा वापर shout2send किंवा "
|
||||
"समानतर्फे icecast सर्व्हरकरीता आऊटपुट पाठवण्याकरीता केला जातो. रिकामे "
|
||||
"मूल्यकरीता सेट "
|
||||
"अशक्य किंवा शक्य केल्यावर, मूळ पाइपलाइनचा वापर केला जातो. हे सध्या 'vp8enc "
|
||||
"quality=8 "
|
||||
"speed=6 threads=%T ! queue ! webmmux' आहे व VP8 कोडेकचा वापर करून WEBM करीता "
|
||||
"रेकॉर्डिंग करतो. %T चा वापर प्रणालीवरील कमाल थ्रेड गणणा ओळखण्यासाठी "
|
||||
"प्लेसहोल्डर म्हणून "
|
||||
"केला जातो."
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:29
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:31
|
||||
msgid "File extension used for storing the screencast"
|
||||
msgstr "स्क्रिनकास्ट साठवण्याकरीता वापरलेले फाइल एक्सटेंशन"
|
||||
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:30
|
||||
#: ../data/org.gnome.shell.gschema.xml.in.h:32
|
||||
msgid ""
|
||||
"The filename for recorded screencasts will be a unique filename based on the "
|
||||
"current date, and use this extension. It should be changed when recording to "
|
||||
@ -243,42 +246,40 @@ msgstr "<b>एक्सटेंशन</b>"
|
||||
msgid "Select an extension to configure using the combobox above."
|
||||
msgstr "वरील कॉम्बोबॉक्सचा वापर करून संरचनाकरीता एक्सटेंशनचा वापर करा."
|
||||
|
||||
#: ../js/gdm/loginDialog.js:624
|
||||
#| msgid "Searching..."
|
||||
#: ../js/gdm/loginDialog.js:627
|
||||
msgid "Session..."
|
||||
msgstr "सत्र..."
|
||||
|
||||
#: ../js/gdm/loginDialog.js:786
|
||||
#: ../js/gdm/loginDialog.js:789
|
||||
msgctxt "title"
|
||||
msgid "Sign In"
|
||||
msgstr "प्रवेश करा"
|
||||
|
||||
#. Translators: this message is shown below the password entry field
|
||||
#. to indicate the user can swipe their finger instead
|
||||
#: ../js/gdm/loginDialog.js:831
|
||||
#: ../js/gdm/loginDialog.js:834
|
||||
msgid "(or swipe finger)"
|
||||
msgstr "(किंवा बोट फिरवा)"
|
||||
|
||||
#. translators: this message is shown below the user list on the
|
||||
#. login screen. It can be activated to reveal an entry for
|
||||
#. manually entering the username.
|
||||
#: ../js/gdm/loginDialog.js:852
|
||||
#: ../js/gdm/loginDialog.js:855
|
||||
msgid "Not listed?"
|
||||
msgstr "सूचीत नाही?"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1020 ../js/ui/endSessionDialog.js:401
|
||||
#: ../js/ui/extensionSystem.js:399 ../js/ui/networkAgent.js:153
|
||||
#: ../js/gdm/loginDialog.js:1023 ../js/ui/endSessionDialog.js:401
|
||||
#: ../js/ui/extensionSystem.js:400 ../js/ui/networkAgent.js:153
|
||||
#: ../js/ui/polkitAuthenticationAgent.js:175 ../js/ui/status/bluetooth.js:462
|
||||
msgid "Cancel"
|
||||
msgstr "रद्द करा"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1025
|
||||
#: ../js/gdm/loginDialog.js:1028
|
||||
msgctxt "button"
|
||||
msgid "Sign In"
|
||||
msgstr "प्रवेश करा"
|
||||
|
||||
#: ../js/gdm/loginDialog.js:1377
|
||||
#| msgid "New Window"
|
||||
#: ../js/gdm/loginDialog.js:1380
|
||||
msgid "Login Window"
|
||||
msgstr "प्रवेश पटल"
|
||||
|
||||
@ -355,7 +356,6 @@ msgid "Open with %s"
|
||||
msgstr "%s सह उघडा"
|
||||
|
||||
#: ../js/ui/autorunManager.js:586
|
||||
#| msgid "Reject"
|
||||
msgid "Eject"
|
||||
msgstr "बाहेर काढा"
|
||||
|
||||
@ -591,13 +591,11 @@ msgstr "%A %B %e, %Y"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:61
|
||||
#, c-format
|
||||
#| msgid "Log Out %s"
|
||||
msgctxt "title"
|
||||
msgid "Log Out %s"
|
||||
msgstr "%s पासून बाहेर पडा"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:62
|
||||
#| msgid "Log Out"
|
||||
msgctxt "title"
|
||||
msgid "Log Out"
|
||||
msgstr "बाहेर पडा"
|
||||
@ -609,7 +607,6 @@ msgstr ""
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:65
|
||||
#, c-format
|
||||
#| msgid "%s will be logged out automatically in %d seconds."
|
||||
msgid "%s will be logged out automatically in %d second."
|
||||
msgid_plural "%s will be logged out automatically in %d seconds."
|
||||
msgstr[0] "%s स्वयं, %d सेकंदात बाहेर पडेल."
|
||||
@ -617,7 +614,6 @@ msgstr[1] "%s स्वयं, %d सेकंदात बाहेर पड
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:70
|
||||
#, c-format
|
||||
#| msgid "You will be logged out automatically in %d seconds."
|
||||
msgid "You will be logged out automatically in %d second."
|
||||
msgid_plural "You will be logged out automatically in %d seconds."
|
||||
msgstr[0] "%d सेकंदात तुम्ही स्वयं बाहेर पडाल."
|
||||
@ -628,13 +624,11 @@ msgid "Logging out of the system."
|
||||
msgstr "प्रणालीतून बाहेर पडत आहे."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:76
|
||||
#| msgid "Log Out"
|
||||
msgctxt "button"
|
||||
msgid "Log Out"
|
||||
msgstr "बाहेर पडा"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:81
|
||||
#| msgid "Power Off"
|
||||
msgctxt "title"
|
||||
msgid "Power Off"
|
||||
msgstr "बंद करा"
|
||||
@ -645,7 +639,6 @@ msgstr "ॲप्लिकेशन्स् बंद करण्यासा
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:84
|
||||
#, c-format
|
||||
#| msgid "The system will power off automatically in %d seconds."
|
||||
msgid "The system will power off automatically in %d second."
|
||||
msgid_plural "The system will power off automatically in %d seconds."
|
||||
msgstr[0] "प्रणाली स्वयं %d सेकंदात बंद होईल."
|
||||
@ -656,19 +649,16 @@ msgid "Powering off the system."
|
||||
msgstr "प्रणाली बंद करत आहे."
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:90 ../js/ui/endSessionDialog.js:107
|
||||
#| msgid "Restart"
|
||||
msgctxt "button"
|
||||
msgid "Restart"
|
||||
msgstr "पुनः सुरू करा"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:92
|
||||
#| msgid "Power Off"
|
||||
msgctxt "button"
|
||||
msgid "Power Off"
|
||||
msgstr "बंद करा"
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:98
|
||||
#| msgid "Restart"
|
||||
msgctxt "title"
|
||||
msgid "Restart"
|
||||
msgstr "पुनः सुरू करा"
|
||||
@ -680,7 +670,6 @@ msgstr ""
|
||||
|
||||
#: ../js/ui/endSessionDialog.js:101
|
||||
#, c-format
|
||||
#| msgid "The system will restart automatically in %d seconds."
|
||||
msgid "The system will restart automatically in %d second."
|
||||
msgid_plural "The system will restart automatically in %d seconds."
|
||||
msgstr[0] "प्रणाली स्वयं %d सेकंदात पुनः सुरू होईल."
|
||||
@ -690,21 +679,21 @@ msgstr[1] "प्रणाली स्वयं %d सेकंदामध्
|
||||
msgid "Restarting the system."
|
||||
msgstr "प्रणाली पुनःसुरू करत आहे."
|
||||
|
||||
#: ../js/ui/extensionSystem.js:403
|
||||
#: ../js/ui/extensionSystem.js:404
|
||||
msgid "Install"
|
||||
msgstr "प्रतिष्ठापीत करा"
|
||||
|
||||
#: ../js/ui/extensionSystem.js:407
|
||||
#: ../js/ui/extensionSystem.js:408
|
||||
#, c-format
|
||||
msgid "Download and install '%s' from extensions.gnome.org?"
|
||||
msgstr " extensions.gnome.org पासून '%s' डाऊनलोड व प्रतिष्ठापीत करा?"
|
||||
|
||||
#: ../js/ui/keyboard.js:327
|
||||
#| msgid "Retry"
|
||||
msgid "tray"
|
||||
msgstr "ट्रे"
|
||||
|
||||
#: ../js/ui/keyboard.js:544 ../js/ui/status/power.js:203
|
||||
#: ../js/ui/keyboard.js:544 ../js/ui/status/keyboard.js:44
|
||||
#: ../js/ui/status/power.js:203
|
||||
msgid "Keyboard"
|
||||
msgstr "कळफलक"
|
||||
|
||||
@ -727,12 +716,10 @@ msgid "%s has not emitted any errors."
|
||||
msgstr "%s ने कोणत्याहि त्रुटी दाखवले नाही."
|
||||
|
||||
#: ../js/ui/lookingGlass.js:792
|
||||
#| msgid "Error"
|
||||
msgid "Hide Errors"
|
||||
msgstr "त्रुटी लपवा"
|
||||
|
||||
#: ../js/ui/lookingGlass.js:796 ../js/ui/lookingGlass.js:847
|
||||
#| msgid "Error"
|
||||
msgid "Show Errors"
|
||||
msgstr "त्रुटी दाखवा"
|
||||
|
||||
@ -742,7 +729,7 @@ msgstr "सुरू केले"
|
||||
|
||||
#. translators:
|
||||
#. * The device has been disabled
|
||||
#: ../js/ui/lookingGlass.js:808 ../src/gvc/gvc-mixer-control.c:1093
|
||||
#: ../js/ui/lookingGlass.js:808 ../src/gvc/gvc-mixer-control.c:1082
|
||||
msgid "Disabled"
|
||||
msgstr "बंद केले"
|
||||
|
||||
@ -767,7 +754,7 @@ msgid "Web Page"
|
||||
msgstr "वेब पृष्ठ"
|
||||
|
||||
#. Translators: this is a filename used for screencast recording
|
||||
#: ../js/ui/main.js:118
|
||||
#: ../js/ui/main.js:121
|
||||
#, no-c-format
|
||||
msgid "Screencast from %d %t"
|
||||
msgstr "%d %t पासून स्क्रीनकास्ट"
|
||||
@ -777,22 +764,18 @@ msgid "Open"
|
||||
msgstr "उघडा"
|
||||
|
||||
#: ../js/ui/messageTray.js:1217
|
||||
#| msgid "minute"
|
||||
#| msgid_plural "minutes"
|
||||
msgid "Unmute"
|
||||
msgstr "मंद करणे अशक्य करा"
|
||||
msgstr "बंद करणे अशक्य करा"
|
||||
|
||||
#: ../js/ui/messageTray.js:1217
|
||||
#| msgid "Mouse"
|
||||
msgid "Mute"
|
||||
msgstr "मंद करा"
|
||||
msgstr "बंद करा"
|
||||
|
||||
#: ../js/ui/messageTray.js:2490
|
||||
msgid "System Information"
|
||||
msgstr "प्रणाली माहिती"
|
||||
|
||||
#: ../js/ui/networkAgent.js:148
|
||||
#| msgid "Connection"
|
||||
msgid "Connect"
|
||||
msgstr "जोडणी करा"
|
||||
|
||||
@ -800,7 +783,6 @@ msgstr "जोडणी करा"
|
||||
#: ../js/ui/networkAgent.js:243 ../js/ui/networkAgent.js:255
|
||||
#: ../js/ui/networkAgent.js:282 ../js/ui/networkAgent.js:302
|
||||
#: ../js/ui/networkAgent.js:312
|
||||
#| msgid "Password:"
|
||||
msgid "Password: "
|
||||
msgstr "पासवर्ड: "
|
||||
|
||||
@ -829,7 +811,6 @@ msgid "Service: "
|
||||
msgstr "सर्व्हिस: "
|
||||
|
||||
#: ../js/ui/networkAgent.js:329
|
||||
#| msgid "Authentication Required"
|
||||
msgid "Authentication required by wireless network"
|
||||
msgstr "वायरलेस नेटवर्कतर्फे आवश्यक ओळखपटवणे"
|
||||
|
||||
@ -845,12 +826,10 @@ msgid "Wired 802.1X authentication"
|
||||
msgstr "वायर्ड 802.1X ओळखपटवणे"
|
||||
|
||||
#: ../js/ui/networkAgent.js:336
|
||||
#| msgid "Network Manager"
|
||||
msgid "Network name: "
|
||||
msgstr "नेटवर्क नाव: "
|
||||
|
||||
#: ../js/ui/networkAgent.js:341
|
||||
#| msgid "authentication required"
|
||||
msgid "DSL authentication"
|
||||
msgstr "DSL ओळख पटवणे"
|
||||
|
||||
@ -867,13 +846,11 @@ msgid "PIN: "
|
||||
msgstr "PIN: "
|
||||
|
||||
#: ../js/ui/networkAgent.js:356
|
||||
#| msgid "Mobile broadband"
|
||||
msgid "Mobile broadband network password"
|
||||
msgstr "मोबाईल ब्रॉडबँड नेटवर्क पासवर्ड"
|
||||
|
||||
#: ../js/ui/networkAgent.js:357
|
||||
#, c-format
|
||||
#| msgid "You're now connected to '%s'"
|
||||
msgid "A password is required to connect to '%s'."
|
||||
msgstr "'%s' सह जोडणीकरीता पासवर्ड आवश्यक आहे."
|
||||
|
||||
@ -900,7 +877,6 @@ msgid "Dash"
|
||||
msgstr "डॅश"
|
||||
|
||||
#: ../js/ui/panel.js:592
|
||||
#| msgid "Quit %s"
|
||||
msgid "Quit"
|
||||
msgstr "बाहेर पडा"
|
||||
|
||||
@ -968,7 +944,7 @@ msgstr "कृपया आदेश द्या:"
|
||||
msgid "Searching..."
|
||||
msgstr "शोधत आहे..."
|
||||
|
||||
#: ../js/ui/searchDisplay.js:414
|
||||
#: ../js/ui/searchDisplay.js:415
|
||||
msgid "No matching results."
|
||||
msgstr "जुळवण्याजोगी परिणाम आढळले नाही."
|
||||
|
||||
@ -985,7 +961,6 @@ msgid "Show Text"
|
||||
msgstr "मजकूर दाखवा"
|
||||
|
||||
#: ../js/ui/shellEntry.js:79
|
||||
#| msgid "Large Text"
|
||||
msgid "Hide Text"
|
||||
msgstr "मजकूर लपवा"
|
||||
|
||||
@ -994,7 +969,6 @@ msgid "Wrong password, please try again"
|
||||
msgstr "चुकिचा पासवर्ड, कृपया पुनः प्रयत्न करा"
|
||||
|
||||
#: ../js/ui/status/accessibility.js:47
|
||||
#| msgid "Visibility"
|
||||
msgid "Accessibility"
|
||||
msgstr "ॲक्सेसिबिलिटि"
|
||||
|
||||
@ -1006,7 +980,6 @@ msgstr "झूम"
|
||||
#. 'screen-reader-enabled');
|
||||
#. this.menu.addMenuItem(screenReader);
|
||||
#: ../js/ui/status/accessibility.js:63
|
||||
#| msgid "Keyboard"
|
||||
msgid "Screen Keyboard"
|
||||
msgstr "स्क्रीन किबोर्ड"
|
||||
|
||||
@ -1058,7 +1031,6 @@ msgid "Send Files to Device..."
|
||||
msgstr "फाइल्स्ना साधनावर पाठवा..."
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:63
|
||||
#| msgid "Setup a New Device..."
|
||||
msgid "Set up a New Device..."
|
||||
msgstr "नविन साधनची मांडणी करा..."
|
||||
|
||||
@ -1068,7 +1040,6 @@ msgstr "ब्ल्यूटूथ सेटिंग्स्"
|
||||
|
||||
#. TRANSLATORS: this means that bluetooth was disabled by hardware rfkill
|
||||
#: ../js/ui/status/bluetooth.js:107 ../js/ui/status/network.js:256
|
||||
#| msgid "disabled"
|
||||
msgid "hardware disabled"
|
||||
msgstr "हार्डवेअर बंद केले"
|
||||
|
||||
@ -1077,7 +1048,6 @@ msgid "Connection"
|
||||
msgstr "जोडणी"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:214 ../js/ui/status/network.js:491
|
||||
#| msgid "connecting..."
|
||||
msgid "disconnecting..."
|
||||
msgstr "जोडणी खंडीत करत आहे..."
|
||||
|
||||
@ -1132,7 +1102,7 @@ msgstr "नेहमी प्रवेश द्या"
|
||||
msgid "Grant this time only"
|
||||
msgstr "फक्त याचवेळी मान्य करा"
|
||||
|
||||
#: ../js/ui/status/bluetooth.js:382 ../js/ui/telepathyClient.js:1091
|
||||
#: ../js/ui/status/bluetooth.js:382 ../js/ui/telepathyClient.js:1093
|
||||
msgid "Reject"
|
||||
msgstr "नकारा"
|
||||
|
||||
@ -1173,12 +1143,10 @@ msgid "OK"
|
||||
msgstr "ठीक आहे"
|
||||
|
||||
#: ../js/ui/status/keyboard.js:68
|
||||
#| msgid "Show Keyboard Layout..."
|
||||
msgid "Show Keyboard Layout"
|
||||
msgstr "किबोर्ड लेआऊट दाखवा"
|
||||
|
||||
#: ../js/ui/status/keyboard.js:73
|
||||
#| msgid "Date and Time Settings"
|
||||
msgid "Region and Language Settings"
|
||||
msgstr "क्षेत्र व भाषा सेटिंग्स्"
|
||||
|
||||
@ -1260,7 +1228,6 @@ msgid "Auto wireless"
|
||||
msgstr "स्वयं वायरलेस्"
|
||||
|
||||
#: ../js/ui/status/network.js:1541
|
||||
#| msgid "Network Manager"
|
||||
msgid "Network"
|
||||
msgstr "नेटवर्क"
|
||||
|
||||
@ -1289,12 +1256,10 @@ msgid "Network Settings"
|
||||
msgstr "जाळं संयोजना"
|
||||
|
||||
#: ../js/ui/status/network.js:1739
|
||||
#| msgid "connection failed"
|
||||
msgid "Connection failed"
|
||||
msgstr "जोडणी अपयशी"
|
||||
|
||||
#: ../js/ui/status/network.js:1740
|
||||
#| msgid "connection failed"
|
||||
msgid "Activation of network connection failed"
|
||||
msgstr "नेटवर्क जोडणी सुरू करणे अपयशी"
|
||||
|
||||
@ -1415,7 +1380,6 @@ msgstr "आमंत्रण"
|
||||
|
||||
#. We got the TpContact
|
||||
#: ../js/ui/telepathyClient.js:271
|
||||
#| msgid "Cancel"
|
||||
msgid "Call"
|
||||
msgstr "कॉल"
|
||||
|
||||
@ -1425,12 +1389,10 @@ msgid "File Transfer"
|
||||
msgstr "फाइल स्थानांतरन"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:369
|
||||
#| msgid "Authorization request from %s"
|
||||
msgid "Subscription request"
|
||||
msgstr "सबस्क्रिप्शन विनंती"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:405
|
||||
#| msgid "Connection"
|
||||
msgid "Connection error"
|
||||
msgstr "जोडणी त्रुटी"
|
||||
|
||||
@ -1457,36 +1419,35 @@ msgstr "%s व्यग्र आहे."
|
||||
#. Translators: this is a time format string followed by a date.
|
||||
#. If applicable, replace %X with a strftime format valid for your
|
||||
#. locale, without seconds.
|
||||
#: ../js/ui/telepathyClient.js:887
|
||||
#: ../js/ui/telepathyClient.js:889
|
||||
#, no-c-format
|
||||
#| msgid "Sent at %X on %A"
|
||||
msgid "Sent at <b>%X</b> on <b>%A</b>"
|
||||
msgstr "<b>%X</b> वेळी, <b>%A</b> ला पाठवले"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25",
|
||||
#. shown when you get a chat message in the same year.
|
||||
#: ../js/ui/telepathyClient.js:893
|
||||
#: ../js/ui/telepathyClient.js:895
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
|
||||
msgstr "<b>%A</b> वेळी, <b>%B %d</b> ला पाठवले"
|
||||
|
||||
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
|
||||
#. shown when you get a chat message in a different year.
|
||||
#: ../js/ui/telepathyClient.js:898
|
||||
#: ../js/ui/telepathyClient.js:900
|
||||
#, no-c-format
|
||||
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
|
||||
msgstr "<b>%A</b>, <b>%B %d</b>, %Y वेळी पाठवले"
|
||||
|
||||
#. Translators: this is the other person changing their old IM name to their new
|
||||
#. IM name.
|
||||
#: ../js/ui/telepathyClient.js:940
|
||||
#: ../js/ui/telepathyClient.js:942
|
||||
#, c-format
|
||||
msgid "%s is now known as %s"
|
||||
msgstr "%s ला %s म्हणून ओळखले जाते"
|
||||
|
||||
#. translators: argument is a room name like
|
||||
#. * room@jabber.org for example.
|
||||
#: ../js/ui/telepathyClient.js:1042
|
||||
#: ../js/ui/telepathyClient.js:1044
|
||||
#, c-format
|
||||
msgid "Invitation to %s"
|
||||
msgstr "%s करीता आमंत्रण"
|
||||
@ -1494,35 +1455,35 @@ msgstr "%s करीता आमंत्रण"
|
||||
#. translators: first argument is the name of a contact and the second
|
||||
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
|
||||
#. * for example.
|
||||
#: ../js/ui/telepathyClient.js:1050
|
||||
#: ../js/ui/telepathyClient.js:1052
|
||||
#, c-format
|
||||
msgid "%s is inviting you to join %s"
|
||||
msgstr "%s तुम्हाला %s सह जोडणीकरीता आमंत्रण देत आहे"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1052 ../js/ui/telepathyClient.js:1131
|
||||
#: ../js/ui/telepathyClient.js:1229
|
||||
#: ../js/ui/telepathyClient.js:1054 ../js/ui/telepathyClient.js:1133
|
||||
#: ../js/ui/telepathyClient.js:1231
|
||||
msgid "Decline"
|
||||
msgstr "नकारा"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1053 ../js/ui/telepathyClient.js:1132
|
||||
#: ../js/ui/telepathyClient.js:1230
|
||||
#: ../js/ui/telepathyClient.js:1055 ../js/ui/telepathyClient.js:1134
|
||||
#: ../js/ui/telepathyClient.js:1232
|
||||
msgid "Accept"
|
||||
msgstr "स्वीकारा"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/telepathyClient.js:1083
|
||||
#: ../js/ui/telepathyClient.js:1085
|
||||
#, c-format
|
||||
msgid "Video call from %s"
|
||||
msgstr "%s पासून व्हिडीओ कॉल्स्"
|
||||
|
||||
#. translators: argument is a contact name like Alice for example.
|
||||
#: ../js/ui/telepathyClient.js:1086
|
||||
#: ../js/ui/telepathyClient.js:1088
|
||||
#, c-format
|
||||
msgid "Call from %s"
|
||||
msgstr "%s पासून कॉल"
|
||||
|
||||
#. translators: this is a button label (verb), not a noun
|
||||
#: ../js/ui/telepathyClient.js:1093
|
||||
#: ../js/ui/telepathyClient.js:1095
|
||||
msgid "Answer"
|
||||
msgstr "उत्तर"
|
||||
|
||||
@ -1531,147 +1492,138 @@ msgstr "उत्तर"
|
||||
#. * file name. The string will be something
|
||||
#. * like: "Alice is sending you test.ogg"
|
||||
#.
|
||||
#: ../js/ui/telepathyClient.js:1125
|
||||
#: ../js/ui/telepathyClient.js:1127
|
||||
#, c-format
|
||||
msgid "%s is sending you %s"
|
||||
msgstr "%s तुम्हाला %s पाठवत आहे"
|
||||
|
||||
#. To translators: The parameter is the contact's alias
|
||||
#: ../js/ui/telepathyClient.js:1194
|
||||
#: ../js/ui/telepathyClient.js:1196
|
||||
#, c-format
|
||||
msgid "%s would like permission to see when you are online"
|
||||
msgstr "ऑनलाइन असल्यावर %s परवानगी दृष्यास्पद करायची"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1287
|
||||
#| msgid "Network Manager"
|
||||
#: ../js/ui/telepathyClient.js:1289
|
||||
msgid "Network error"
|
||||
msgstr "नेटवर्क त्रुटी"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1289
|
||||
#| msgid "Authentication Required"
|
||||
#: ../js/ui/telepathyClient.js:1291
|
||||
msgid "Authentication failed"
|
||||
msgstr "ओळख पटवणे अपयशी"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1291
|
||||
#: ../js/ui/telepathyClient.js:1293
|
||||
msgid "Encryption error"
|
||||
msgstr "एंक्रिप्शन त्रुटी"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1293
|
||||
#: ../js/ui/telepathyClient.js:1295
|
||||
msgid "Certificate not provided"
|
||||
msgstr "प्रमाणपत्र पुरवले नाही"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1295
|
||||
#: ../js/ui/telepathyClient.js:1297
|
||||
msgid "Certificate untrusted"
|
||||
msgstr "प्रमाणपत्र अविश्वासर्ह आहे"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1297
|
||||
#: ../js/ui/telepathyClient.js:1299
|
||||
msgid "Certificate expired"
|
||||
msgstr "प्रमाणपत्राची वेळसमाप्ति"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1299
|
||||
#: ../js/ui/telepathyClient.js:1301
|
||||
msgid "Certificate not activated"
|
||||
msgstr "प्रमाणपत्र सुरू केले नाही"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1301
|
||||
#: ../js/ui/telepathyClient.js:1303
|
||||
msgid "Certificate hostname mismatch"
|
||||
msgstr "प्रमाणपत्र यजमाननाव जुळत नाही"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1303
|
||||
#: ../js/ui/telepathyClient.js:1305
|
||||
msgid "Certificate fingerprint mismatch"
|
||||
msgstr "प्रमाणपत्र फिंग्ररप्रिंट जुळत नाही"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1305
|
||||
#: ../js/ui/telepathyClient.js:1307
|
||||
msgid "Certificate self-signed"
|
||||
msgstr "प्रमाणपत्र स्वयं स्वाक्षरि"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1307
|
||||
#| msgid "%s is offline."
|
||||
#: ../js/ui/telepathyClient.js:1309
|
||||
msgid "Status is set to offline"
|
||||
msgstr "स्थिती ऑफलाइनकरीता ठरवली आहे"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1309
|
||||
#: ../js/ui/telepathyClient.js:1311
|
||||
msgid "Encryption is not available"
|
||||
msgstr "एंक्रिप्शन अनुपलब्ध"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1311
|
||||
#: ../js/ui/telepathyClient.js:1313
|
||||
msgid "Certificate is invalid"
|
||||
msgstr "प्रमाणपत्र अवैध आहे"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1313
|
||||
#| msgid "Connection established"
|
||||
#: ../js/ui/telepathyClient.js:1315
|
||||
msgid "Connection has been refused"
|
||||
msgstr "जोडणी नकारली गेली"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1315
|
||||
#| msgid "Connection established"
|
||||
#: ../js/ui/telepathyClient.js:1317
|
||||
msgid "Connection can't be established"
|
||||
msgstr "जोडणी स्थापीत करणे अशक्य"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1317
|
||||
#| msgid "Connection established"
|
||||
#: ../js/ui/telepathyClient.js:1319
|
||||
msgid "Connection has been lost"
|
||||
msgstr "जोडणी खंडीत झाली"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1319
|
||||
#: ../js/ui/telepathyClient.js:1321
|
||||
msgid "This account is already connected to the server"
|
||||
msgstr "हे खाते आधिपासूनच सर्व्हरसह जुळले आहे"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1321
|
||||
#: ../js/ui/telepathyClient.js:1323
|
||||
msgid ""
|
||||
"Connection has been replaced by a new connection using the same resource"
|
||||
msgstr "समान स्रोतचा वापर करून जोडणीला नविन जोडणीसह बदलाबदल केले आहे"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1323
|
||||
#: ../js/ui/telepathyClient.js:1325
|
||||
msgid "The account already exists on the server"
|
||||
msgstr "खाते आधिपासूनच सर्व्हरवर अस्तित्वात आहे"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1325
|
||||
#: ../js/ui/telepathyClient.js:1327
|
||||
msgid "Server is currently too busy to handle the connection"
|
||||
msgstr "जोडणी हाताळण्यासाठी सर्व्हर सध्या खूप व्यस्थ आहे"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1327
|
||||
#: ../js/ui/telepathyClient.js:1329
|
||||
msgid "Certificate has been revoked"
|
||||
msgstr "प्रमाणपत्र रद्द केले"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1329
|
||||
#: ../js/ui/telepathyClient.js:1331
|
||||
msgid ""
|
||||
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
|
||||
msgstr ""
|
||||
"प्रमाणपत्र असुरक्षित सिफर अल्गोरिदमचा वापर करते किंवा क्रिप्टोग्राफिकरित्या "
|
||||
"खूप कमजोर आहे"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1331
|
||||
#: ../js/ui/telepathyClient.js:1333
|
||||
msgid ""
|
||||
"The length of the server certificate, or the depth of the server certificate "
|
||||
"chain, exceed the limits imposed by the cryptography library"
|
||||
msgstr ""
|
||||
"सर्व्हर प्रमाणपत्राची लांबी, किंवा सर्व्हर प्रमाणपत्र चैनचे गांभीर्य, "
|
||||
"क्रिप्टोग्राफि लाइब्ररितर्फे लादलेल्या मर्यादापेक्षा जास्त आहे"
|
||||
"क्रिप्टोग्राफि "
|
||||
"लाइब्ररितर्फे लादलेल्या मर्यादापेक्षा जास्त आहे"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1333
|
||||
#: ../js/ui/telepathyClient.js:1335
|
||||
msgid "Internal error"
|
||||
msgstr "आंतरिक त्रुटी"
|
||||
|
||||
#. translators: argument is the account name, like
|
||||
#. * name@jabber.org for example.
|
||||
#: ../js/ui/telepathyClient.js:1343
|
||||
#: ../js/ui/telepathyClient.js:1345
|
||||
#, c-format
|
||||
#| msgid "connection failed"
|
||||
msgid "Connection to %s failed"
|
||||
msgstr "%s सह जोडणी अपयशी"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1352
|
||||
#| msgid "Reject"
|
||||
#: ../js/ui/telepathyClient.js:1354
|
||||
msgid "Reconnect"
|
||||
msgstr "पुनःजोडणी करा"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1353
|
||||
#| msgid "My Account"
|
||||
#: ../js/ui/telepathyClient.js:1355
|
||||
msgid "Edit account"
|
||||
msgstr "खाते संपादित करा"
|
||||
|
||||
#: ../js/ui/telepathyClient.js:1399
|
||||
#| msgid "Unknown"
|
||||
#: ../js/ui/telepathyClient.js:1401
|
||||
msgid "Unknown reason"
|
||||
msgstr "अपरिचीत कारण"
|
||||
|
||||
@ -1684,7 +1636,6 @@ msgid "Idle"
|
||||
msgstr "रिकामे"
|
||||
|
||||
#: ../js/ui/userMenu.js:144
|
||||
#| msgid "unavailable"
|
||||
msgid "Unavailable"
|
||||
msgstr "अनुपलब्ध"
|
||||
|
||||
@ -1693,12 +1644,10 @@ msgid "Power Off..."
|
||||
msgstr "बंद करा..."
|
||||
|
||||
#: ../js/ui/userMenu.js:631
|
||||
#| msgid "Applications"
|
||||
msgid "Notifications"
|
||||
msgstr "सूचना"
|
||||
|
||||
#: ../js/ui/userMenu.js:639
|
||||
#| msgid "My Account"
|
||||
msgid "Online Accounts"
|
||||
msgstr "ऑनलाइन खाते"
|
||||
|
||||
@ -1728,7 +1677,8 @@ msgid ""
|
||||
"has been adjusted to let others know that you might not see their messages."
|
||||
msgstr ""
|
||||
"सूचना आता बंद केले आहे, चॅट संदेश समाविष्टीत. इतरांना तुमचे संदेश दिसणार नाही "
|
||||
"हे कळवण्यासाठी ऑनलाइन स्थिती सुस्थीत केली आहे."
|
||||
"हे कळवण्यासाठी "
|
||||
"ऑनलाइन स्थिती सुस्थीत केली आहे."
|
||||
|
||||
#. Translators: this is the text displayed
|
||||
#. in the search entry when no search is
|
||||
@ -1767,7 +1717,7 @@ msgstr "'%s' सज्ज आहे"
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound outputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1100
|
||||
#: ../src/gvc/gvc-mixer-control.c:1089
|
||||
#, c-format
|
||||
msgid "%u Output"
|
||||
msgid_plural "%u Outputs"
|
||||
@ -1776,14 +1726,14 @@ msgstr[1] "%u आऊटपुट"
|
||||
|
||||
#. translators:
|
||||
#. * The number of sound inputs on a particular device
|
||||
#: ../src/gvc/gvc-mixer-control.c:1110
|
||||
#: ../src/gvc/gvc-mixer-control.c:1099
|
||||
#, c-format
|
||||
msgid "%u Input"
|
||||
msgid_plural "%u Inputs"
|
||||
msgstr[0] "%u इंपुट"
|
||||
msgstr[1] "%u इंपुट"
|
||||
|
||||
#: ../src/gvc/gvc-mixer-control.c:1408
|
||||
#: ../src/gvc/gvc-mixer-control.c:1397
|
||||
msgid "System Sounds"
|
||||
msgstr "प्रणाली आवाज"
|
||||
|
||||
@ -1801,7 +1751,6 @@ msgid "Failed to launch '%s'"
|
||||
msgstr "'%s' सुरू करण्यास अपयशी"
|
||||
|
||||
#: ../src/shell-keyring-prompt.c:708
|
||||
#| msgid "Does not match"
|
||||
msgid "Passwords do not match."
|
||||
msgstr "पासवर्डस् जुळत नाही."
|
||||
|
||||
@ -1824,7 +1773,6 @@ msgstr "ओळख पटवा संवाद वापरकर्त्या
|
||||
#. Translators: this is the same string as the one found in
|
||||
#. * nautilus
|
||||
#: ../src/shell-util.c:97
|
||||
#| msgid "Volume"
|
||||
msgid "Home"
|
||||
msgstr "होम"
|
||||
|
||||
|
@ -114,6 +114,7 @@ shell_public_headers_h = \
|
||||
shell-gtk-embed.h \
|
||||
shell-global.h \
|
||||
shell-idle-monitor.h \
|
||||
shell-invert-lightness-effect.h \
|
||||
shell-mobile-providers.h \
|
||||
shell-mount-operation.h \
|
||||
shell-network-agent.h \
|
||||
@ -161,6 +162,7 @@ libgnome_shell_la_SOURCES = \
|
||||
shell-gtk-embed.c \
|
||||
shell-global.c \
|
||||
shell-idle-monitor.c \
|
||||
shell-invert-lightness-effect.c \
|
||||
shell-keyring-prompt.h \
|
||||
shell-keyring-prompt.c \
|
||||
shell-mobile-providers.c \
|
||||
|
214
src/shell-invert-lightness-effect.c
Normal file
214
src/shell-invert-lightness-effect.c
Normal file
@ -0,0 +1,214 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
/*
|
||||
* Copyright (C) 2010-2012 Inclusive Design Research Centre, OCAD University.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Author:
|
||||
* Joseph Scheuhammer <clown@alum.mit.edu>
|
||||
*/
|
||||
|
||||
/**
|
||||
* SECTION:shell-invert-lightness-effect
|
||||
* @short_description: A colorization effect where lightness is inverted but
|
||||
* color is not.
|
||||
* @see_also: #ClutterEffect, #ClutterOffscreenEffect
|
||||
*
|
||||
* #ShellInvertLightnessEffect is a sub-class of #ClutterEffect that enhances
|
||||
* the appearance of a clutter actor. Specifically it inverts the lightness
|
||||
* of a #ClutterActor (e.g., darker colors become lighter, white becomes black,
|
||||
* and white, black).
|
||||
*/
|
||||
|
||||
#define SHELL_INVERT_LIGHTNESS_EFFECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_INVERT_LIGHTNESS_EFFECT, ShellInvertLightnessEffectClass))
|
||||
#define SHELL_IS_INVERT_EFFECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_INVERT_LIGHTNESS_EFFECT))
|
||||
#define SHELL_INVERT_LIGHTNESS_EFFECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_INVERT_LIGHTNESS_EFFEC, ShellInvertLightnessEffectClass))
|
||||
|
||||
#define CLUTTER_ENABLE_EXPERIMENTAL_API
|
||||
|
||||
#include "shell-invert-lightness-effect.h"
|
||||
|
||||
#include <cogl/cogl.h>
|
||||
|
||||
struct _ShellInvertLightnessEffect
|
||||
{
|
||||
ClutterOffscreenEffect parent_instance;
|
||||
|
||||
gint tex_width;
|
||||
gint tex_height;
|
||||
|
||||
CoglPipeline *pipeline;
|
||||
};
|
||||
|
||||
struct _ShellInvertLightnessEffectClass
|
||||
{
|
||||
ClutterOffscreenEffectClass parent_class;
|
||||
|
||||
CoglPipeline *base_pipeline;
|
||||
};
|
||||
|
||||
/* Lightness inversion in GLSL.
|
||||
*/
|
||||
static const gchar *invert_lightness_source =
|
||||
"cogl_texel = texture2D (cogl_sampler, cogl_tex_coord.st);\n"
|
||||
"vec3 effect = vec3 (cogl_texel);\n"
|
||||
"\n"
|
||||
"float maxColor = max (cogl_texel.r, max (cogl_texel.g, cogl_texel.b));\n"
|
||||
"float minColor = min (cogl_texel.r, min (cogl_texel.g, cogl_texel.b));\n"
|
||||
"float lightness = (maxColor + minColor) / 2.0;\n"
|
||||
"\n"
|
||||
"float delta = (1.0 - lightness) - lightness;\n"
|
||||
"effect.rgb = (effect.rgb + delta);\n"
|
||||
"\n"
|
||||
"cogl_texel = vec4 (effect, cogl_texel.a);\n";
|
||||
|
||||
G_DEFINE_TYPE (ShellInvertLightnessEffect,
|
||||
shell_invert_lightness_effect,
|
||||
CLUTTER_TYPE_OFFSCREEN_EFFECT);
|
||||
|
||||
static gboolean
|
||||
shell_invert_lightness_effect_pre_paint (ClutterEffect *effect)
|
||||
{
|
||||
ShellInvertLightnessEffect *self = SHELL_INVERT_LIGHTNESS_EFFECT (effect);
|
||||
ClutterEffectClass *parent_class;
|
||||
|
||||
if (!clutter_actor_meta_get_enabled (CLUTTER_ACTOR_META (effect)))
|
||||
return FALSE;
|
||||
|
||||
if (!clutter_feature_available (CLUTTER_FEATURE_SHADERS_GLSL))
|
||||
{
|
||||
/* if we don't have support for GLSL shaders then we
|
||||
* forcibly disable the ActorMeta
|
||||
*/
|
||||
g_warning ("Unable to use the ShellInvertLightnessEffect: the "
|
||||
"graphics hardware or the current GL driver does not "
|
||||
"implement support for the GLSL shading language.");
|
||||
clutter_actor_meta_set_enabled (CLUTTER_ACTOR_META (self), FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
parent_class =
|
||||
CLUTTER_EFFECT_CLASS (shell_invert_lightness_effect_parent_class);
|
||||
if (parent_class->pre_paint (effect))
|
||||
{
|
||||
ClutterOffscreenEffect *offscreen_effect =
|
||||
CLUTTER_OFFSCREEN_EFFECT (effect);
|
||||
CoglHandle texture;
|
||||
|
||||
texture = clutter_offscreen_effect_get_texture (offscreen_effect);
|
||||
self->tex_width = cogl_texture_get_width (texture);
|
||||
self->tex_height = cogl_texture_get_height (texture);
|
||||
|
||||
cogl_pipeline_set_layer_texture (self->pipeline, 0, texture);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
shell_invert_lightness_effect_paint_target (ClutterOffscreenEffect *effect)
|
||||
{
|
||||
ShellInvertLightnessEffect *self = SHELL_INVERT_LIGHTNESS_EFFECT (effect);
|
||||
ClutterActor *actor;
|
||||
guint8 paint_opacity;
|
||||
|
||||
actor = clutter_actor_meta_get_actor (CLUTTER_ACTOR_META (effect));
|
||||
paint_opacity = clutter_actor_get_paint_opacity (actor);
|
||||
|
||||
cogl_pipeline_set_color4ub (self->pipeline,
|
||||
paint_opacity,
|
||||
paint_opacity,
|
||||
paint_opacity,
|
||||
paint_opacity);
|
||||
cogl_push_source (self->pipeline);
|
||||
|
||||
cogl_rectangle (0, 0, self->tex_width, self->tex_height);
|
||||
|
||||
cogl_pop_source ();
|
||||
}
|
||||
|
||||
static void
|
||||
shell_invert_lightness_effect_dispose (GObject *gobject)
|
||||
{
|
||||
ShellInvertLightnessEffect *self = SHELL_INVERT_LIGHTNESS_EFFECT (gobject);
|
||||
|
||||
if (self->pipeline != NULL)
|
||||
{
|
||||
cogl_object_unref (self->pipeline);
|
||||
self->pipeline = NULL;
|
||||
}
|
||||
|
||||
G_OBJECT_CLASS (shell_invert_lightness_effect_parent_class)->dispose (gobject);
|
||||
}
|
||||
|
||||
static void
|
||||
shell_invert_lightness_effect_class_init (ShellInvertLightnessEffectClass *klass)
|
||||
{
|
||||
ClutterEffectClass *effect_class = CLUTTER_EFFECT_CLASS (klass);
|
||||
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
||||
ClutterOffscreenEffectClass *offscreen_class;
|
||||
|
||||
offscreen_class = CLUTTER_OFFSCREEN_EFFECT_CLASS (klass);
|
||||
offscreen_class->paint_target = shell_invert_lightness_effect_paint_target;
|
||||
|
||||
effect_class->pre_paint = shell_invert_lightness_effect_pre_paint;
|
||||
|
||||
gobject_class->dispose = shell_invert_lightness_effect_dispose;
|
||||
}
|
||||
|
||||
static void
|
||||
shell_invert_lightness_effect_init (ShellInvertLightnessEffect *self)
|
||||
{
|
||||
ShellInvertLightnessEffectClass *klass;
|
||||
klass = SHELL_INVERT_LIGHTNESS_EFFECT_GET_CLASS (self);
|
||||
|
||||
if (G_UNLIKELY (klass->base_pipeline == NULL))
|
||||
{
|
||||
CoglSnippet *snippet;
|
||||
CoglContext *ctx =
|
||||
clutter_backend_get_cogl_context (clutter_get_default_backend ());
|
||||
|
||||
klass->base_pipeline = cogl_pipeline_new (ctx);
|
||||
|
||||
snippet = cogl_snippet_new (COGL_SNIPPET_HOOK_TEXTURE_LOOKUP,
|
||||
NULL,
|
||||
NULL);
|
||||
cogl_snippet_set_replace (snippet, invert_lightness_source);
|
||||
cogl_pipeline_add_layer_snippet (klass->base_pipeline, 0, snippet);
|
||||
cogl_object_unref (snippet);
|
||||
|
||||
cogl_pipeline_set_layer_null_texture (klass->base_pipeline,
|
||||
0, /* layer number */
|
||||
COGL_TEXTURE_TYPE_2D);
|
||||
}
|
||||
|
||||
self->pipeline = cogl_pipeline_copy (klass->base_pipeline);
|
||||
}
|
||||
|
||||
/**
|
||||
* shell_invert_lightness_effect_new:
|
||||
*
|
||||
* Creates a new #ShellInvertLightnessEffect to be used with
|
||||
* clutter_actor_add_effect()
|
||||
*
|
||||
* Return value: (transfer full): the newly created
|
||||
* #ShellInvertLightnessEffect or %NULL. Use g_object_unref() when done.
|
||||
*/
|
||||
ClutterEffect *
|
||||
shell_invert_lightness_effect_new (void)
|
||||
{
|
||||
return g_object_new (SHELL_TYPE_INVERT_LIGHTNESS_EFFECT, NULL);
|
||||
}
|
42
src/shell-invert-lightness-effect.h
Normal file
42
src/shell-invert-lightness-effect.h
Normal file
@ -0,0 +1,42 @@
|
||||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
|
||||
/*
|
||||
* Copyright © 2010-2012 Inclusive Design Research Centre, OCAD University.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library 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
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Author:
|
||||
* Joseph Scheuhammer <clown@alum.mit.edu>
|
||||
*/
|
||||
#ifndef __SHELL_INVERT_LIGHTNESS_EFFECT_H__
|
||||
#define __SHELL_INVERT_LIGHTNESS_EFFECT_H__
|
||||
|
||||
#define COGL_ENABLE_EXPERIMENTAL_API
|
||||
#include <clutter/clutter.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define SHELL_TYPE_INVERT_LIGHTNESS_EFFECT (shell_invert_lightness_effect_get_type ())
|
||||
#define SHELL_INVERT_LIGHTNESS_EFFECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SHELL_TYPE_INVERT_LIGHTNESS_EFFECT, ShellInvertLightnessEffect))
|
||||
#define SHELL_IS_INVERT_LIGHTNESS_EFFECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SHELL_TYPE_INVERT_LIGHTNESS_EFFECT))
|
||||
|
||||
typedef struct _ShellInvertLightnessEffect ShellInvertLightnessEffect;
|
||||
typedef struct _ShellInvertLightnessEffectClass ShellInvertLightnessEffectClass;
|
||||
|
||||
GType shell_invert_lightness_effect_get_type (void) G_GNUC_CONST;
|
||||
|
||||
ClutterEffect *shell_invert_lightness_effect_new (void);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __SHELL_INVERT_LIGHTNESS_EFFECT_H__ */
|
@ -76,6 +76,26 @@ shell_agent_request_free (gpointer data)
|
||||
g_slice_free (ShellAgentRequest, request);
|
||||
}
|
||||
|
||||
static void
|
||||
shell_agent_request_cancel (ShellAgentRequest *request)
|
||||
{
|
||||
GError *error;
|
||||
ShellNetworkAgent *self;
|
||||
|
||||
self = request->self;
|
||||
|
||||
error = g_error_new (NM_SECRET_AGENT_ERROR,
|
||||
NM_SECRET_AGENT_ERROR_AGENT_CANCELED,
|
||||
"Canceled by NetworkManager");
|
||||
request->callback (NM_SECRET_AGENT (self), request->connection,
|
||||
NULL, error, request->callback_data);
|
||||
|
||||
g_signal_emit (self, signals[SIGNAL_CANCEL_REQUEST], 0, request->request_id);
|
||||
|
||||
g_hash_table_remove (self->priv->requests, request->request_id);
|
||||
g_error_free (error);
|
||||
}
|
||||
|
||||
static void
|
||||
shell_network_agent_init (ShellNetworkAgent *agent)
|
||||
{
|
||||
@ -341,6 +361,17 @@ shell_network_agent_get_secrets (NMSecretAgent *agent,
|
||||
ShellAgentRequest *request;
|
||||
NMSettingConnection *setting_connection;
|
||||
const char *connection_type;
|
||||
char *request_id;
|
||||
|
||||
request_id = g_strdup_printf ("%s/%s", connection_path, setting_name);
|
||||
if ((request = g_hash_table_lookup (self->priv->requests, request_id)) != NULL)
|
||||
{
|
||||
/* We already have a request pending for this (connection, setting)
|
||||
* Cancel it before starting the new one.
|
||||
* This will also free the request structure and associated resources.
|
||||
*/
|
||||
shell_agent_request_cancel (request);
|
||||
}
|
||||
|
||||
setting_connection = nm_connection_get_setting_connection (connection);
|
||||
connection_type = nm_setting_connection_get_connection_type (setting_connection);
|
||||
@ -371,7 +402,7 @@ shell_network_agent_get_secrets (NMSecretAgent *agent,
|
||||
else
|
||||
request->vpn_entries = NULL;
|
||||
|
||||
request->request_id = g_strdup_printf ("%s/%s", connection_path, setting_name);
|
||||
request->request_id = request_id;
|
||||
g_hash_table_replace (self->priv->requests, request->request_id, request);
|
||||
|
||||
if ((flags & NM_SECRET_AGENT_GET_SECRETS_FLAG_REQUEST_NEW) ||
|
||||
@ -490,30 +521,22 @@ shell_network_agent_cancel_get_secrets (NMSecretAgent *agent,
|
||||
{
|
||||
ShellNetworkAgent *self = SHELL_NETWORK_AGENT (agent);
|
||||
ShellNetworkAgentPrivate *priv = self->priv;
|
||||
gchar *request_id;
|
||||
ShellAgentRequest *request;
|
||||
|
||||
gchar *request_id = g_strdup_printf ("%s/%s", connection_path, setting_name);
|
||||
ShellAgentRequest *request = g_hash_table_lookup (priv->requests, request_id);
|
||||
GError *error;
|
||||
request_id = g_strdup_printf ("%s/%s", connection_path, setting_name);
|
||||
request = g_hash_table_lookup (priv->requests, request_id);
|
||||
g_free (request_id);
|
||||
|
||||
if (!request)
|
||||
{
|
||||
/* We've already sent the result, but the caller cancelled the
|
||||
* operation before receiving that result.
|
||||
*/
|
||||
g_free (request_id);
|
||||
return;
|
||||
}
|
||||
|
||||
error = g_error_new (NM_SECRET_AGENT_ERROR,
|
||||
NM_SECRET_AGENT_ERROR_AGENT_CANCELED,
|
||||
"Canceled by NetworkManager");
|
||||
request->callback (agent, request->connection, NULL, error, request->callback_data);
|
||||
|
||||
g_signal_emit (self, signals[SIGNAL_CANCEL_REQUEST], 0, request_id);
|
||||
|
||||
g_hash_table_remove (priv->requests, request_id);
|
||||
g_free (request_id);
|
||||
g_error_free (error);
|
||||
shell_agent_request_cancel (request);
|
||||
}
|
||||
|
||||
/************************* saving of secrets ****************************************/
|
||||
|
Reference in New Issue
Block a user