Compare commits

..

6 Commits

Author SHA1 Message Date
Giovanni Campagna
30898007f3 Make ShellXFixesCursor work under wayland
Replace ClutterX11 with GdkX11 + Mutter, so that it works when
Clutter is not using the X11 backend.

FIXME: doesn't work...
2013-07-15 13:22:10 +02:00
Giovanni Campagna
2754a5e3a1 Don't ignore crossing event
We were sometimes ignoring crossing events to avoid unfocusing
the tray after the user interacted with a legacy icon.
This can't happen any more, as the tray is modal and all events
are synthetized, so remove this code, which crashes the shell
under wayland.
2013-07-15 12:51:30 +02:00
Neil Roberts
da1b7f4f83 Don't pass on X events to Clutter
The Mutter plugin manager has now been changed so that it itself will
pass on the events through Clutter so there is no need to do this in
Gnome Shell anymore.
2013-06-19 14:31:25 +01:00
Neil Roberts
206f036cef wayland: Don't set properties on the overlay window on Wayland
When Mutter is running as a display server it won't create an overlay
window. Therefore we shouldn't need to set the DND proxy on the
window. This was previously causing X errors when it tried to set a
property on an invalid window.
2013-06-19 14:31:18 +01:00
Neil Roberts
e3be2237b8 wayland: Create a dummy stage window when running as a display server
When Mutter is running as a display server then Clutter won't be using
the X11 backend so there won't be a window for the stage. The shell
global keeps track of this stage window to be used in various places.
This patch adds a dummy window that is never mapped to use instead of
the stage window so that the various places that are using it might be
able to continue working without generating X errors.
2013-06-19 13:49:31 +01:00
Neil Roberts
d663beab97 wayland: Add a --display-server option
This makes Gnome Shell run as its own display server.
2013-06-17 12:30:08 +01:00
38 changed files with 1475 additions and 1689 deletions

30
NEWS
View File

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

View File

@@ -1,5 +1,5 @@
AC_PREREQ(2.63)
AC_INIT([gnome-shell],[3.9.3],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_INIT([gnome-shell],[3.9.2],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_SRCDIR([src/shell-global.c])
@@ -63,7 +63,7 @@ AM_CONDITIONAL(BUILD_RECORDER, $build_recorder)
CLUTTER_MIN_VERSION=1.13.4
GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
GJS_MIN_VERSION=1.35.4
MUTTER_MIN_VERSION=3.9.3
MUTTER_MIN_VERSION=3.9.2
GTK_MIN_VERSION=3.7.9
GIO_MIN_VERSION=2.37.0
LIBECAL_MIN_VERSION=3.5.3

View File

@@ -383,7 +383,6 @@ StScrollBar StButton#vhandle:active {
/* Entries */
#searchEntry,
.login-dialog StEntry,
.notification StEntry,
.modal-dialog StEntry {
color: rgb(64, 64, 64);
@@ -395,7 +394,6 @@ StScrollBar StButton#vhandle:active {
}
#searchEntry,
.login-dialog StEntry,
.run-dialog-entry,
.notification StEntry {
border: 2px solid rgba(245,245,245,0.2);
@@ -408,7 +406,6 @@ StScrollBar StButton#vhandle:active {
#searchEntry:focus,
#searchEntry:hover,
.login-dialog StEntry:focus,
.notification StEntry:focus,
.modal-dialog StEntry {
border: 2px solid rgb(136,138,133);
@@ -418,7 +415,6 @@ StScrollBar StButton#vhandle:active {
box-shadow: inset 0px 2px 4px rgba(0,0,0,0.6);
}
.login-dialog StEntry:focus,
.notification StEntry:focus,
.modal-dialog StEntry:focus {
border: 2px solid #3465a4;
@@ -442,7 +438,6 @@ StScrollBar StButton#vhandle:active {
transition-duration: 0ms;
}
.login-dialog StEntry,
.notification StEntry,
.modal-dialog StEntry {
border-radius: 5px;
@@ -456,7 +451,6 @@ StScrollBar StButton#vhandle:active {
padding: 0 4px;
}
.login-dialog StEntry:insensitive,
.modal-dialog StEntry:insensitive {
border-color: #666666;
color: #9f9f9f;
@@ -1160,6 +1154,11 @@ StScrollBar StButton#vhandle:active {
/* Calendar popup */
#calendarArea {
/* this is the total width of the popup */
width: 720px;
}
.calendar-vertical-separator {
-stipple-width: 1px;
-stipple-color: #505050;
@@ -2319,7 +2318,6 @@ StScrollBar StButton#vhandle:active {
font-weight: bold;
color: #666666;
padding-top: 1em;
padding-left: 2px;
}
.login-dialog-not-listed-button:focus .login-dialog-not-listed-label,
@@ -2350,17 +2348,43 @@ StScrollBar StButton#vhandle:active {
width: 15em;
}
.login-dialog-session-list-button StIcon {
icon-size: 1.25em;
.login-dialog-session-list,
.login-dialog-session-list-item {
color: #babdb6;
}
.login-dialog-session-list-button:focus,
.login-dialog-session-list-button:active,
.login-dialog-session-list-button:hover,
.login-dialog-session-list-item:focus,
.login-dialog-session-list-item:hover {
color: white;
}
.login-dialog-session-list-button {
color: #8b8b8b;
padding: 4px;
}
.login-dialog-session-list-button:hover,
.login-dialog-session-list-button:active {
color: white;
.login-dialog-session-list-scroll-view {
padding: 6px;
}
.login-dialog-session-list-item {
padding-bottom: 6px;
}
.login-dialog-session-list-triangle {
padding-right: 6px;
}
.login-dialog-session-list-item-box {
padding-left: 6px;
spacing: 6px;
}
.login-dialog-session-list-item-dot {
width: 10px;
height: 10px;
}
.login-dialog-logo-bin {

View File

@@ -37,7 +37,6 @@ nobase_dist_js_DATA = \
misc/util.js \
perf/core.js \
ui/altTab.js \
ui/animation.js \
ui/appDisplay.js \
ui/appFavorites.js \
ui/backgroundMenu.js \

View File

@@ -19,47 +19,38 @@
*/
const AccountsService = imports.gi.AccountsService;
const Atk = imports.gi.Atk;
const Clutter = imports.gi.Clutter;
const Gdm = imports.gi.Gdm;
const CtrlAltTab = imports.ui.ctrlAltTab;
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const Gtk = imports.gi.Gtk;
const Lang = imports.lang;
const Mainloop = imports.mainloop;
const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell;
const Signals = imports.signals;
const St = imports.gi.St;
const Animation = imports.ui.animation;
const Batch = imports.gdm.batch;
const BoxPointer = imports.ui.boxpointer;
const CtrlAltTab = imports.ui.ctrlAltTab;
const GdmUtil = imports.gdm.util;
const Layout = imports.ui.layout;
const Main = imports.ui.main;
const PopupMenu = imports.ui.popupMenu;
const Lang = imports.lang;
const Pango = imports.gi.Pango;
const Realmd = imports.gdm.realmd;
const Signals = imports.signals;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
const Gdm = imports.gi.Gdm;
const Batch = imports.gdm.batch;
const Fprint = imports.gdm.fingerprint;
const GdmUtil = imports.gdm.util;
const Lightbox = imports.ui.lightbox;
const Main = imports.ui.main;
const ModalDialog = imports.ui.modalDialog;
const PanelMenu = imports.ui.panelMenu;
const Tweener = imports.ui.tweener;
const UserWidget = imports.ui.userWidget;
const _FADE_ANIMATION_TIME = 0.25;
const _SCROLL_ANIMATION_TIME = 0.5;
const _DEFAULT_BUTTON_WELL_ICON_SIZE = 24;
const _DEFAULT_BUTTON_WELL_ANIMATION_DELAY = 1.0;
const _DEFAULT_BUTTON_WELL_ANIMATION_TIME = 0.3;
const _TIMED_LOGIN_IDLE_THRESHOLD = 5.0;
const _LOGO_ICON_HEIGHT = 48;
let _loginDialog = null;
const DefaultButtonWellMode = {
NONE: 0,
SESSION_MENU_BUTTON: 1,
SPINNER: 2
};
const UserListItem = new Lang.Class({
Name: 'UserListItem',
@@ -296,118 +287,203 @@ const UserList = new Lang.Class({
});
Signals.addSignalMethods(UserList.prototype);
const SessionMenuButton = new Lang.Class({
Name: 'SessionMenuButton',
const SessionListItem = new Lang.Class({
Name: 'SessionListItem',
_init: function(id, name) {
this.id = id;
this.actor = new St.Button({ style_class: 'login-dialog-session-list-item',
button_mask: St.ButtonMask.ONE | St.ButtonMask.THREE,
can_focus: true,
reactive: true,
x_fill: true,
x_align: St.Align.START });
this._box = new St.BoxLayout({ style_class: 'login-dialog-session-list-item-box' });
this.actor.add_actor(this._box);
this.actor.connect('clicked', Lang.bind(this, this._onClicked));
this._dot = new St.DrawingArea({ style_class: 'login-dialog-session-list-item-dot' });
this._dot.connect('repaint', Lang.bind(this, this._onRepaintDot));
this._box.add_actor(this._dot);
this.setShowDot(false);
let label = new St.Label({ style_class: 'login-dialog-session-list-item-label',
text: name });
this.actor.label_actor = label;
this._box.add_actor(label);
},
setShowDot: function(show) {
if (show)
this._dot.opacity = 255;
else
this._dot.opacity = 0;
},
_onRepaintDot: function(area) {
let cr = area.get_context();
let [width, height] = area.get_surface_size();
let color = area.get_theme_node().get_foreground_color();
cr.setSourceRGBA (color.red / 255,
color.green / 255,
color.blue / 255,
color.alpha / 255);
cr.arc(width / 2, height / 2, width / 3, 0, 2 * Math.PI);
cr.fill();
cr.$dispose();
},
_onClicked: function() {
this.emit('activate');
}
});
Signals.addSignalMethods(SessionListItem.prototype);
const SessionList = new Lang.Class({
Name: 'SessionList',
_init: function() {
let gearIcon = new St.Icon({ icon_name: 'emblem-system-symbolic' });
this.actor = new St.Bin();
this._box = new St.BoxLayout({ style_class: 'login-dialog-session-list',
vertical: true});
this.actor.child = this._box;
this._button = new St.Button({ style_class: 'login-dialog-session-list-button',
reactive: true,
track_hover: true,
button_mask: St.ButtonMask.ONE | St.ButtonMask.THREE,
can_focus: true,
accessible_name: _("Choose Session"),
accessible_role: Atk.Role.MENU,
child: gearIcon });
x_fill: true,
y_fill: true });
let box = new St.BoxLayout();
this._button.add_actor(box);
this.actor = new St.Bin({ child: this._button });
this._triangle = new St.Label({ style_class: 'login-dialog-session-list-triangle',
text: '\u25B8' });
box.add_actor(this._triangle);
this._menu = new PopupMenu.PopupMenu(this._button, 0, St.Side.TOP);
Main.uiGroup.add_actor(this._menu.actor);
this._menu.actor.hide();
let label = new St.Label({ style_class: 'login-dialog-session-list-label',
text: _("Session…") });
box.add_actor(label);
this._menu.connect('open-state-changed',
Lang.bind(this, function(menu, isOpen) {
if (isOpen)
this._button.add_style_pseudo_class('active');
else
this._button.remove_style_pseudo_class('active');
}));
let subtitle = new PopupMenu.PopupMenuItem(_("Session"), { style_class: 'popup-subtitle-menu-item',
reactive: false });
this._menu.addMenuItem(subtitle);
this._manager = new PopupMenu.PopupMenuManager({ actor: this._button });
this._manager.addMenu(this._menu);
this._button.connect('clicked', Lang.bind(this, function() {
this._menu.toggle();
}));
this._items = {};
this._activeSessionId = null;
this._button.connect('clicked',
Lang.bind(this, this._onClicked));
this._box.add_actor(this._button);
this._scrollView = new St.ScrollView({ style_class: 'login-dialog-session-list-scroll-view'});
this._scrollView.set_policy(Gtk.PolicyType.NEVER,
Gtk.PolicyType.AUTOMATIC);
this._box.add_actor(this._scrollView);
this._itemList = new St.BoxLayout({ style_class: 'login-dialog-session-item-list',
vertical: true });
this._scrollView.add_actor(this._itemList);
this._scrollView.hide();
this.isOpen = false;
this._populate();
},
open: function() {
if (this.isOpen)
return;
this._button.add_style_pseudo_class('open');
this._scrollView.show();
this._triangle.set_text('\u25BE');
this.isOpen = true;
},
close: function() {
if (!this.isOpen)
return;
this._button.remove_style_pseudo_class('open');
this._scrollView.hide();
this._triangle.set_text('\u25B8');
this.isOpen = false;
},
_onClicked: function() {
if (!this.isOpen)
this.open();
else
this.close();
},
updateSensitivity: function(sensitive) {
this._button.reactive = sensitive;
this._button.can_focus = sensitive;
this._menu.close(BoxPointer.PopupAnimation.NONE);
},
_updateOrnament: function() {
let itemIds = Object.keys(this._items);
for (let i = 0; i < itemIds.length; i++) {
if (itemIds[i] == this._activeSessionId)
this._items[itemIds[i]].setOrnament(PopupMenu.Ornament.DOT);
else
this._items[itemIds[i]].setOrnament(PopupMenu.Ornament.NONE);
}
for (let id in this._items)
this._items[id].actor.reactive = sensitive;
},
setActiveSession: function(sessionId) {
if (sessionId == this._activeSessionId)
return;
if (this._activeSessionId)
this._items[this._activeSessionId].setShowDot(false);
this._items[sessionId].setShowDot(true);
this._activeSessionId = sessionId;
this._updateOrnament();
this.emit('session-activated', this._activeSessionId);
},
close: function() {
this._menu.close();
},
_populate: function() {
this._itemList.destroy_all_children();
this._activeSessionId = null;
this._items = {};
let ids = Gdm.get_session_ids();
ids.sort();
if (ids.length <= 1) {
this._box.hide();
this._button.hide();
return;
} else {
this._button.show();
this._box.show();
}
for (let i = 0; i < ids.length; i++) {
let [sessionName, sessionDescription] = Gdm.get_session_name_and_description(ids[i]);
let id = ids[i];
let item = new PopupMenu.PopupMenuItem(sessionName);
this._menu.addMenuItem(item);
this._items[id] = item;
let item = new SessionListItem(ids[i], sessionName);
this._itemList.add_actor(item.actor);
this._items[ids[i]] = item;
if (!this._activeSessionId)
this.setActiveSession(id);
this.setActiveSession(ids[i]);
item.connect('activate', Lang.bind(this, function() {
this.setActiveSession(id);
}));
item.connect('activate',
Lang.bind(this, function() {
this.setActiveSession(item.id);
}));
}
}
});
Signals.addSignalMethods(SessionMenuButton.prototype);
Signals.addSignalMethods(SessionList.prototype);
const LoginDialog = new Lang.Class({
Name: 'LoginDialog',
Extends: ModalDialog.ModalDialog,
_init: function(parentActor) {
this.actor = new St.Widget({ accessible_role: Atk.Role.WINDOW,
style_class: 'login-dialog',
visible: false });
this.actor.add_constraint(new Layout.MonitorConstraint({ primary: true }));
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
parentActor.add_child(this.actor);
this.parent({ shellReactive: true,
styleClass: 'login-dialog',
parentActor: parentActor,
keybindingMode: Shell.KeyBindingMode.LOGIN_SCREEN,
shouldFadeIn: false });
this.connect('destroy',
Lang.bind(this, this._onDestroy));
this.connect('opened',
Lang.bind(this, this._onOpened));
this._userManager = AccountsService.UserManager.get_default()
this._greeterClient = new Gdm.Client();
@@ -450,10 +526,7 @@ const LoginDialog = new Lang.Class({
this._userSelectionBox = new St.BoxLayout({ style_class: 'login-dialog-user-selection-box',
vertical: true });
this._userSelectionBox.add_constraint(new Clutter.AlignConstraint({ source: this.actor,
align_axis: Clutter.AlignAxis.BOTH,
factor: 0.5 }));
this.actor.add_child(this._userSelectionBox);
this.contentLayout.add(this._userSelectionBox);
this._bannerLabel = new St.Label({ style_class: 'login-dialog-banner',
text: '' });
@@ -466,20 +539,15 @@ const LoginDialog = new Lang.Class({
x_fill: true,
y_fill: true });
this.setInitialKeyFocus(this._userList.actor);
this._promptBox = new St.BoxLayout({ style_class: 'login-dialog-prompt-layout',
vertical: true });
this._promptBox.connect('button-press-event',
Lang.bind(this, function(actor, event) {
if (event.get_key_symbol() == Clutter.KEY_Escape) {
this.cancel();
}
}));
this._promptBox.add_constraint(new Clutter.AlignConstraint({ source: this.actor,
align_axis: Clutter.AlignAxis.BOTH,
factor: 0.5 }));
this.actor.add_child(this._promptBox);
this.contentLayout.add(this._promptBox,
{ expand: true,
x_fill: true,
y_fill: true,
x_align: St.Align.START });
this._promptUser = new St.Bin({ x_fill: true,
x_align: St.Align.START });
this._promptBox.add(this._promptUser,
@@ -511,15 +579,19 @@ const LoginDialog = new Lang.Class({
this._promptLoginHint.hide();
this._promptBox.add(this._promptLoginHint);
this._buttonBox = new St.BoxLayout({ style_class: 'modal-dialog-button-box',
vertical: false });
this._promptBox.add(this._buttonBox,
{ expand: true,
x_align: St.Align.MIDDLE,
y_align: St.Align.END });
this._cancelButton = null;
this._signInButton = null;
this._sessionList = new SessionList();
this._sessionList.connect('session-activated',
Lang.bind(this, function(list, sessionId) {
this._greeter.call_select_session_sync (sessionId, null);
}));
this._promptBox.add(this._sessionList.actor,
{ expand: true,
x_fill: false,
y_fill: true,
x_align: St.Align.START });
this._promptBox.hide();
// translators: this message is shown below the user list on the
@@ -536,7 +608,6 @@ const LoginDialog = new Lang.Class({
x_fill: true });
this._notListedButton.connect('clicked', Lang.bind(this, this._hideUserListAndLogIn));
this._notListedButton.hide();
this._userSelectionBox.add(this._notListedButton,
{ expand: false,
@@ -545,13 +616,7 @@ const LoginDialog = new Lang.Class({
this._logoBin = new St.Bin({ style_class: 'login-dialog-logo-bin', y_expand: true });
this._logoBin.set_y_align(Clutter.ActorAlign.END);
this._logoBin.add_constraint(new Clutter.AlignConstraint({ source: this.actor,
align_axis: Clutter.AlignAxis.X_AXIS,
factor: 0.5 }));
this._logoBin.add_constraint(new Clutter.AlignConstraint({ source: this.actor,
align_axis: Clutter.AlignAxis.Y_AXIS,
factor: 1.0 }));
this.actor.add_child(this._logoBin);
this.backgroundStack.add_actor(this._logoBin);
this._updateLogo();
if (!this._userManager.is_loaded)
@@ -571,27 +636,6 @@ const LoginDialog = new Lang.Class({
this._onUserListActivated(item);
}));
this._defaultButtonWell = new St.Widget();
this._defaultButtonWellMode = DefaultButtonWellMode.NONE;
this._sessionMenuButton = new SessionMenuButton();
this._sessionMenuButton.connect('session-activated',
Lang.bind(this, function(list, sessionId) {
this._greeter.call_select_session_sync (sessionId, null);
}));
this._sessionMenuButton.actor.opacity = 0;
this._sessionMenuButton.actor.show();
this._defaultButtonWell.add_child(this._sessionMenuButton.actor);
let spinnerIcon = global.datadir + '/theme/process-working.svg';
this._workSpinner = new Animation.AnimatedIcon(spinnerIcon, _DEFAULT_BUTTON_WELL_ICON_SIZE);
this._workSpinner.actor.opacity = 0;
this._workSpinner.actor.show();
this._defaultButtonWell.add_child(this._workSpinner.actor);
this._sessionMenuButton.actor.add_constraint(new Clutter.AlignConstraint({ source: this._workSpinner.actor,
align_axis: Clutter.AlignAxis.BOTH,
factor: 0.5 }));
},
_updateDisableUserList: function() {
@@ -653,77 +697,15 @@ const LoginDialog = new Lang.Class({
this._showUserList();
},
_getActorForDefaultButtonWellMode: function(mode) {
let actor;
if (mode == DefaultButtonWellMode.NONE)
actor = null;
else if (mode == DefaultButtonWellMode.SPINNER)
actor = this._workSpinner.actor;
else if (mode == DefaultButtonWellMode.SESSION_MENU_BUTTON)
actor = this._sessionMenuButton.actor;
return actor;
},
_setDefaultButtonWellMode: function(mode, immediately) {
if (this._defaultButtonWellMode == DefaultButtonWellMode.NONE &&
mode == DefaultButtonWellMode.NONE)
return;
let oldActor = this._getActorForDefaultButtonWellMode(this._defaultButtonWellMode);
if (oldActor)
Tweener.removeTweens(oldActor);
let actor = this._getActorForDefaultButtonWellMode(mode);
if (this._defaultButtonWellMode != mode && oldActor) {
if (immediately)
oldActor.opacity = 0;
else
Tweener.addTween(oldActor,
{ opacity: 0,
time: _DEFAULT_BUTTON_WELL_ANIMATION_TIME,
delay: _DEFAULT_BUTTON_WELL_ANIMATION_DELAY,
transition: 'linear',
onCompleteScope: this,
onComplete: function() {
if (mode == DefaultButtonWellMode.SPINNER) {
if (this._workSpinner)
this._workSpinner.stop();
}
}
});
}
if (actor) {
if (mode == DefaultButtonWellMode.SPINNER)
this._workSpinner.play();
if (immediately)
actor.opacity = 255;
else
Tweener.addTween(actor,
{ opacity: 255,
time: _DEFAULT_BUTTON_WELL_ANIMATION_TIME,
delay: _DEFAULT_BUTTON_WELL_ANIMATION_DELAY,
transition: 'linear' });
}
this._defaultButtonWellMode = mode;
},
_verificationFailed: function() {
this._promptEntry.text = '';
this._updateSensitivity(true);
this._setDefaultButtonWellMode(DefaultButtonWellMode.NONE, true);
this.setWorking(false);
},
_onDefaultSessionChanged: function(client, sessionId) {
this._sessionMenuButton.setActiveSession(sessionId);
this._sessionList.setActiveSession(sessionId);
},
_showMessage: function(userVerifier, message, styleClass) {
@@ -754,20 +736,8 @@ const LoginDialog = new Lang.Class({
this._reset();
},
_shouldShowSessionMenuButton: function() {
if (this._verifyingUser)
return true;
if (!this._user)
return false;
if (this._user.is_logged_in)
return false;
return true;
},
_showPrompt: function(forSecret) {
this._sessionList.actor.hide();
this._promptLabel.show();
this._promptEntry.show();
this._promptLoginHint.opacity = 0;
@@ -779,10 +749,8 @@ const LoginDialog = new Lang.Class({
time: _FADE_ANIMATION_TIME,
transition: 'easeOutQuad' });
if (this._shouldShowSessionMenuButton())
this._setDefaultButtonWellMode(DefaultButtonWellMode.SESSION_MENU_BUTTON, true);
else
this._setDefaultButtonWellMode(DefaultButtonWellMode.NONE, true);
if ((this._user && !this._user.is_logged_in()) || this._verifyingUser)
this._sessionList.actor.show();
this._promptEntry.grab_key_focus();
@@ -799,49 +767,33 @@ const LoginDialog = new Lang.Class({
},
_prepareDialog: function(forSecret, hold) {
this._buttonBox.visible = true;
this._buttonBox.remove_all_children();
this.buttonLayout.visible = true;
this.clearButtons();
if (!this._disableUserList || this._verifyingUser) {
this._cancelButton = new St.Button({ style_class: 'modal-dialog-button',
button_mask: St.ButtonMask.ONE | St.ButtonMask.THREE,
reactive: true,
can_focus: true,
label: _("Cancel") });
this._cancelButton.connect('clicked',
Lang.bind(this, function() {
this.cancel();
}));
this._buttonBox.add(this._cancelButton,
{ expand: false,
x_fill: false,
y_fill: false,
x_align: St.Align.START,
y_align: St.Align.END });
}
this._buttonBox.add(this._defaultButtonWell,
{ expand: true,
x_fill: false,
y_fill: false,
x_align: St.Align.END,
y_align: St.Align.MIDDLE });
this._signInButton = new St.Button({ style_class: 'modal-dialog-button',
button_mask: St.ButtonMask.ONE | St.ButtonMask.THREE,
reactive: true,
can_focus: true,
label: forSecret ? C_("button", "Sign In") : _("Next") });
this._signInButton.connect('clicked',
Lang.bind(this, function() {
hold.release();
}));
this._signInButton.add_style_pseudo_class('default');
this._buttonBox.add(this._signInButton,
{ expand: false,
x_fill: false,
y_fill: false,
x_align: St.Align.END,
y_align: St.Align.END });
if (!this._disableUserList || this._verifyingUser)
this.addButton({ action: Lang.bind(this, this.cancel),
label: _("Cancel"),
key: Clutter.Escape },
{ expand: true,
x_fill: false,
y_fill: false,
x_align: St.Align.START,
y_align: St.Align.MIDDLE });
this.placeSpinner({ expand: false,
x_fill: false,
y_fill: false,
x_align: St.Align.END,
y_align: St.Align.MIDDLE });
this._signInButton = this.addButton({ action: Lang.bind(this, function() {
hold.release();
}),
label: forSecret ? C_("button", "Sign In") : _("Next"),
default: true },
{ expand: false,
x_fill: false,
y_fill: false,
x_align: St.Align.END,
y_align: St.Align.MIDDLE });
this._updateSignInButtonSensitivity(this._promptEntry.text.length > 0);
@@ -860,7 +812,7 @@ const LoginDialog = new Lang.Class({
_updateSensitivity: function(sensitive) {
this._promptEntry.reactive = sensitive;
this._promptEntry.clutter_text.editable = sensitive;
this._sessionMenuButton.updateSensitivity(sensitive);
this._sessionList.updateSensitivity(sensitive);
this._updateSignInButtonSensitivity(sensitive);
},
@@ -872,6 +824,8 @@ const LoginDialog = new Lang.Class({
},
_hidePrompt: function() {
this.setButtons([]);
if (this._promptEntryTextChangedId > 0) {
this._promptEntry.clutter_text.disconnect(this._promptEntryTextChangedId);
this._promptEntryTextChangedId = 0;
@@ -882,7 +836,7 @@ const LoginDialog = new Lang.Class({
this._promptEntryActivateId = 0;
}
this._setDefaultButtonWellMode(DefaultButtonWellMode.NONE, true);
this.setWorking(false);
this._promptBox.hide();
this._promptLoginHint.hide();
@@ -891,12 +845,11 @@ const LoginDialog = new Lang.Class({
this._updateSensitivity(true);
this._promptEntry.set_text('');
this._sessionMenuButton.close();
this._sessionList.close();
this._promptLoginHint.hide();
this._buttonBox.remove_all_children();
this.clearButtons();
this._signInButton = null;
this._cancelButton = null;
},
_askQuestion: function(verifier, serviceName, question, passwordChar) {
@@ -913,7 +866,7 @@ const LoginDialog = new Lang.Class({
function() {
let text = this._promptEntry.get_text();
this._updateSensitivity(false);
this._setDefaultButtonWellMode(DefaultButtonWellMode.SPINNER, false);
this.setWorking(true);
this._userVerifier.answerQuery(serviceName, text);
}];
@@ -962,7 +915,7 @@ const LoginDialog = new Lang.Class({
},
_startSession: function(serviceName) {
Tweener.addTween(this.actor,
Tweener.addTween(this.dialogLayout,
{ opacity: 0,
time: _FADE_ANIMATION_TIME,
transition: 'easeOutQuad',
@@ -971,7 +924,7 @@ const LoginDialog = new Lang.Class({
for (let i = 0; i < children.length; i++) {
if (children[i] != Main.layoutManager.screenShieldGroup)
children[i].opacity = this.actor.opacity;
children[i].opacity = this.dialogLayout.opacity;
}
},
onUpdateScope: this,
@@ -1134,7 +1087,6 @@ const LoginDialog = new Lang.Class({
_showUserList: function() {
this._hidePrompt();
this._setUserListExpanded(true);
this._notListedButton.show();
this._userList.actor.grab_key_focus();
},
@@ -1200,18 +1152,17 @@ const LoginDialog = new Lang.Class({
}));
},
open: function() {
Main.ctrlAltTabManager.addGroup(this.actor,
_onOpened: function() {
Main.ctrlAltTabManager.addGroup(this.dialogLayout,
_("Login Window"),
'dialog-password-symbolic',
{ sortGroup: CtrlAltTab.SortGroup.MIDDLE });
this._userList.actor.grab_key_focus();
this.actor.show();
return true;
},
close: function() {
this.parent();
Main.ctrlAltTabManager.removeGroup(this.dialogLayout);
},
@@ -1219,4 +1170,3 @@ const LoginDialog = new Lang.Class({
this._promptEntry.clutter_text.insert_unichar(unichar);
},
});
Signals.addSignalMethods(LoginDialog.prototype);

View File

@@ -164,7 +164,6 @@ const ShellUserVerifier = new Lang.Class({
answerQuery: function(serviceName, answer) {
if (!this._userVerifier.hasPendingMessages) {
this._clearMessageQueue();
this._userVerifier.call_answer_query(serviceName, answer, this._cancellable, null);
} else {
let signalId = this._userVerifier.connect('no-more-messages',

View File

@@ -1,84 +0,0 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Lang = imports.lang;
const Mainloop = imports.mainloop;
const St = imports.gi.St;
const Signals = imports.signals;
const Atk = imports.gi.Atk;
const ANIMATED_ICON_UPDATE_TIMEOUT = 100;
const Animation = new Lang.Class({
Name: 'Animation',
_init: function(filename, width, height, speed) {
this.actor = new St.Bin();
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
this._speed = speed;
this._isLoaded = false;
this._isPlaying = false;
this._timeoutId = 0;
this._frame = 0;
this._animations = St.TextureCache.get_default().load_sliced_image (filename, width, height,
Lang.bind(this, this._animationsLoaded));
this.actor.set_child(this._animations);
},
play: function() {
if (this._isLoaded && this._timeoutId == 0) {
if (this._frame == 0)
this._showFrame(0);
this._timeoutId = Mainloop.timeout_add(this._speed, Lang.bind(this, this._update));
}
this._isPlaying = true;
},
stop: function() {
if (this._timeoutId > 0) {
Mainloop.source_remove(this._timeoutId);
this._timeoutId = 0;
}
this._isPlaying = false;
},
_showFrame: function(frame) {
let oldFrameActor = this._animations.get_child_at_index(this._frame);
if (oldFrameActor)
oldFrameActor.hide();
this._frame = (frame % this._animations.get_n_children());
let newFrameActor = this._animations.get_child_at_index(this._frame);
if (newFrameActor)
newFrameActor.show();
},
_update: function() {
this._showFrame(this._frame + 1);
return true;
},
_animationsLoaded: function() {
this._isLoaded = true;
if (this._isPlaying)
this.play();
},
_onDestroy: function() {
this.stop();
}
});
const AnimatedIcon = new Lang.Class({
Name: 'AnimatedIcon',
Extends: Animation,
_init: function(filename, size) {
this.parent(filename, size, size, ANIMATED_ICON_UPDATE_TIMEOUT);
}
});

View File

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

View File

@@ -589,12 +589,12 @@ const BoxPointer = new Lang.Class({
return St.Side.TOP;
break;
case St.Side.LEFT:
if (sourceAllocation.x2 + boxWidth > monitor.x + monitor.width &&
if (sourceAllocation.y2 + boxWidth > monitor.x + monitor.width &&
boxWidth < sourceAllocation.x1 - monitor.x)
return St.Side.RIGHT;
break;
case St.Side.RIGHT:
if (sourceAllocation.x1 - boxWidth < monitor.x &&
if (sourceAllocation.y1 - boxWidth < monitor.x &&
boxWidth < monitor.x + monitor.width - sourceAllocation.x2)
return St.Side.LEFT;
break;

View File

@@ -31,7 +31,7 @@ function shouldAutorunMount(mount, forTransient) {
if (!volume || (!volume.allowAutorun && forTransient))
return false;
if (root.is_native() && isMountRootHidden(root))
if (!root.is_native() || isMountRootHidden(root))
return false;
return true;

View File

@@ -18,7 +18,7 @@ const Params = imports.misc.params;
const PopupMenu = imports.ui.popupMenu;
// See Notification.appendMessage
const SCROLLBACK_IMMEDIATE_TIME = 3 * 60; // 3 minutes
const SCROLLBACK_IMMEDIATE_TIME = 60; // 1 minute
const SCROLLBACK_RECENT_TIME = 15 * 60; // 15 minutes
const SCROLLBACK_RECENT_LENGTH = 20;
const SCROLLBACK_IDLE_LENGTH = 5;
@@ -967,8 +967,7 @@ const ChatNotification = new Lang.Class({
let timeLabel = this._append({ body: this._formatTimestamp(lastMessageDate),
group: 'meta',
styles: ['chat-meta-message'],
childProps: { expand: true, x_fill: false,
x_align: St.Align.END },
childProps: { expand: true, x_fill: false },
noTimestamp: true,
timestamp: lastMessageTime });

View File

@@ -153,14 +153,15 @@ const DateMenuButton = new Lang.Class({
this._openClocksItem.actor.visible = visible &&
(this._getClockApp() != null);
this._separator.visible = visible;
this._eventList.actor.visible = visible;
if (visible) {
let alignment = 0.25;
if (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL)
alignment = 1.0 - alignment;
this.menu._arrowAlignment = alignment;
let alignment = 0.25;
if (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL)
alignment = 1.0 - alignment;
this.menu._arrowAlignment = alignment;
this._eventList.actor.get_parent().show();
} else {
this.menu._arrowAlignment = 0.5;
this.menu._arrowAlignment = 0.5;
this._eventList.actor.get_parent().hide();
}
},

View File

@@ -1,7 +1,6 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Clutter = imports.gi.Clutter;
const GLib = imports.gi.GLib;
const Gtk = imports.gi.Gtk;
const St = imports.gi.St;
const Lang = imports.lang;
@@ -359,65 +358,60 @@ const _Draggable = new Lang.Class({
return true;
},
_updateDragHover : function () {
let target = this._dragActor.get_stage().get_actor_at_pos(Clutter.PickMode.ALL,
this._dragX, this._dragY);
let dragEvent = {
x: this._dragX,
y: this._dragY,
dragActor: this._dragActor,
source: this.actor._delegate,
targetActor: target
};
for (let i = 0; i < dragMonitors.length; i++) {
let motionFunc = dragMonitors[i].dragMotion;
if (motionFunc) {
let result = motionFunc(dragEvent);
if (result != DragMotionResult.CONTINUE) {
global.set_cursor(DRAG_CURSOR_MAP[result]);
return false;
}
}
}
while (target) {
if (target._delegate && target._delegate.handleDragOver) {
let [r, targX, targY] = target.transform_stage_point(this._dragX, this._dragY);
// We currently loop through all parents on drag-over even if one of the children has handled it.
// We can check the return value of the function and break the loop if it's true if we don't want
// to continue checking the parents.
let result = target._delegate.handleDragOver(this.actor._delegate,
this._dragActor,
targX,
targY,
0);
if (result != DragMotionResult.CONTINUE) {
global.set_cursor(DRAG_CURSOR_MAP[result]);
return false;
}
}
target = target.get_parent();
}
global.set_cursor(Shell.Cursor.DND_IN_DRAG);
return false;
},
_queueUpdateDragHover: function() {
if (this._updateHoverId)
GLib.source_remove(this._updateHoverId);
this._updateHoverId = GLib.idle_add(GLib.PRIORITY_DEFAULT,
Lang.bind(this, this._updateDragHover));
},
_updateDragPosition : function (event) {
let [stageX, stageY] = event.get_coords();
this._dragX = stageX;
this._dragY = stageY;
this._dragActor.set_position(stageX + this._dragOffsetX,
stageY + this._dragOffsetY);
this._queueUpdateDragHover();
// If we are dragging, update the position
if (this._dragActor) {
this._dragActor.set_position(stageX + this._dragOffsetX,
stageY + this._dragOffsetY);
let target = this._dragActor.get_stage().get_actor_at_pos(Clutter.PickMode.ALL,
stageX, stageY);
// We call observers only once per motion with the innermost
// target actor. If necessary, the observer can walk the
// parent itself.
let dragEvent = {
x: stageX,
y: stageY,
dragActor: this._dragActor,
source: this.actor._delegate,
targetActor: target
};
for (let i = 0; i < dragMonitors.length; i++) {
let motionFunc = dragMonitors[i].dragMotion;
if (motionFunc) {
let result = motionFunc(dragEvent);
if (result != DragMotionResult.CONTINUE) {
global.set_cursor(DRAG_CURSOR_MAP[result]);
return true;
}
}
}
while (target) {
if (target._delegate && target._delegate.handleDragOver) {
let [r, targX, targY] = target.transform_stage_point(stageX, stageY);
// We currently loop through all parents on drag-over even if one of the children has handled it.
// We can check the return value of the function and break the loop if it's true if we don't want
// to continue checking the parents.
let result = target._delegate.handleDragOver(this.actor._delegate,
this._dragActor,
targX,
targY,
event.get_time());
if (result != DragMotionResult.CONTINUE) {
global.set_cursor(DRAG_CURSOR_MAP[result]);
return true;
}
}
target = target.get_parent();
}
global.set_cursor(Shell.Cursor.DND_IN_DRAG);
}
return true;
},
@@ -517,11 +511,6 @@ const _Draggable = new Lang.Class({
},
_cancelDrag: function(eventTime) {
if (this._updateHoverId) {
GLib.source_remove(this._updateHoverId);
this._updateHoverId = 0;
}
this.emit('drag-cancelled', eventTime);
this._dragInProgress = false;
let [snapBackX, snapBackY, snapBackScale] = this._getRestoreLocation();

View File

@@ -749,8 +749,6 @@ const LayoutManager = new Lang.Class({
// and shown otherwise)
addChrome: function(actor, params) {
this.uiGroup.add_actor(actor);
if (this.uiGroup.contains(global.top_window_group))
this.uiGroup.set_child_below_sibling(actor, global.top_window_group);
this._trackActor(actor, params);
},

View File

@@ -53,7 +53,7 @@ const Magnifier = new Lang.Class({
this._zoomRegions = [];
// Create small clutter tree for the magnified mouse.
let xfixesCursor = Shell.XFixesCursor.get_for_stage(global.stage);
let xfixesCursor = Shell.XFixesCursor.get_for_screen(global.screen);
this._mouseSprite = new Clutter.Texture();
xfixesCursor.update_texture_image(this._mouseSprite);
this._cursorRoot = new Clutter.Actor();
@@ -83,7 +83,7 @@ const Magnifier = new Lang.Class({
* Show the system mouse pointer.
*/
showSystemCursor: function() {
this._xfixesCursor.show();
global.stage.show_cursor();
},
/**
@@ -91,7 +91,7 @@ const Magnifier = new Lang.Class({
* Hide the system mouse pointer.
*/
hideSystemCursor: function() {
this._xfixesCursor.hide();
global.stage.hide_cursor();
},
/**
@@ -112,7 +112,7 @@ const Magnifier = new Lang.Class({
// Make sure system mouse pointer is shown when all zoom regions are
// invisible.
if (!activate)
this._xfixesCursor.show();
global.stage.show_cursor();
// Notify interested parties of this change
this.emit('active-changed', activate);

View File

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

View File

@@ -14,7 +14,6 @@ const Atk = imports.gi.Atk;
const Params = imports.misc.params;
const Animation = imports.ui.animation;
const Layout = imports.ui.layout;
const Lightbox = imports.ui.lightbox;
const Main = imports.ui.main;
@@ -188,8 +187,10 @@ const ModalDialog = new Lang.Class({
},
placeSpinner: function(layoutInfo) {
/* This is here because of recursive imports */
const Panel = imports.ui.panel;
let spinnerIcon = global.datadir + '/theme/process-working.svg';
this._workSpinner = new Animation.AnimatedIcon(spinnerIcon, WORK_SPINNER_ICON_SIZE);
this._workSpinner = new Panel.AnimatedIcon(spinnerIcon, WORK_SPINNER_ICON_SIZE);
this._workSpinner.actor.opacity = 0;
this._workSpinner.actor.show();

View File

@@ -158,26 +158,23 @@ const OsdWindow = new Lang.Class({
return;
Mainloop.source_remove(this._hideTimeoutId);
this._hideTimeoutId = 0;
this._hide();
},
_hide: function() {
this._hideTimeoutId = 0;
Tweener.addTween(this.actor,
{ opacity: 0,
time: FADE_TIME,
transition: 'easeOutQuad',
onComplete: Lang.bind(this, function() {
this._reset();
Meta.enable_unredirect_for_screen(global.screen);
})
});
onComplete: Lang.bind(this, this._reset) });
},
_reset: function() {
this.actor.hide();
this.setLabel(null);
this.setLevel(null);
Meta.enable_unredirect_for_screen(global.screen);
},
_monitorsChanged: function() {

View File

@@ -15,7 +15,6 @@ const Signals = imports.signals;
const Atk = imports.gi.Atk;
const Animation = imports.ui.animation;
const Config = imports.misc.config;
const CtrlAltTab = imports.ui.ctrlAltTab;
const DND = imports.ui.dnd;
@@ -30,6 +29,7 @@ const PANEL_ICON_SIZE = 24;
const BUTTON_DND_ACTIVATION_TIMEOUT = 250;
const ANIMATED_ICON_UPDATE_TIMEOUT = 100;
const SPINNER_ANIMATION_TIME = 0.2;
// To make sure the panel corners blend nicely with the panel,
@@ -75,6 +75,81 @@ function _unpremultiply(color) {
blue: blue, alpha: color.alpha });
};
const Animation = new Lang.Class({
Name: 'Animation',
_init: function(filename, width, height, speed) {
this.actor = new St.Bin();
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
this._speed = speed;
this._isLoaded = false;
this._isPlaying = false;
this._timeoutId = 0;
this._frame = 0;
this._animations = St.TextureCache.get_default().load_sliced_image (filename, width, height,
Lang.bind(this, this._animationsLoaded));
this.actor.set_child(this._animations);
},
play: function() {
if (this._isLoaded && this._timeoutId == 0) {
if (this._frame == 0)
this._showFrame(0);
this._timeoutId = Mainloop.timeout_add(this._speed, Lang.bind(this, this._update));
}
this._isPlaying = true;
},
stop: function() {
if (this._timeoutId > 0) {
Mainloop.source_remove(this._timeoutId);
this._timeoutId = 0;
}
this._isPlaying = false;
},
_showFrame: function(frame) {
let oldFrameActor = this._animations.get_child_at_index(this._frame);
if (oldFrameActor)
oldFrameActor.hide();
this._frame = (frame % this._animations.get_n_children());
let newFrameActor = this._animations.get_child_at_index(this._frame);
if (newFrameActor)
newFrameActor.show();
},
_update: function() {
this._showFrame(this._frame + 1);
return true;
},
_animationsLoaded: function() {
this._isLoaded = true;
if (this._isPlaying)
this.play();
},
_onDestroy: function() {
this.stop();
}
});
const AnimatedIcon = new Lang.Class({
Name: 'AnimatedIcon',
Extends: Animation,
_init: function(filename, size) {
this.parent(filename, size, size, ANIMATED_ICON_UPDATE_TIMEOUT);
}
});
const TextShadower = new Lang.Class({
Name: 'TextShadower',
@@ -285,7 +360,7 @@ const AppMenuButton = new Lang.Class({
if (!success || this._spinnerIcon == icon)
return;
this._spinnerIcon = icon;
this._spinner = new Animation.AnimatedIcon(this._spinnerIcon, PANEL_ICON_SIZE);
this._spinner = new AnimatedIcon(this._spinnerIcon, PANEL_ICON_SIZE);
this._container.add_actor(this._spinner.actor);
this._spinner.actor.hide();
this._spinner.actor.lower_bottom();

View File

@@ -527,10 +527,6 @@ const PopupSliderMenuItem = new Lang.Class({
get value() {
return this._slider.value;
},
scroll: function (event) {
this._slider.scroll(event);
}
});

View File

@@ -720,8 +720,6 @@ const ScreenShield = new Lang.Class({
},
_onDragEnd: function(action, actor, eventX, eventY, modifiers) {
if (this._lockScreenState != MessageTray.State.HIDING)
return;
if (this._lockScreenGroup.y < -(ARROW_DRAG_THRESHOLD * global.stage.height)) {
// Complete motion automatically
let [velocity, velocityX, velocityY] = this._dragAction.get_velocity(0);

View File

@@ -48,10 +48,10 @@ const Slider = new Lang.Class({
let [hasHandleColor, handleBorderColor] =
themeNode.lookup_color('-slider-handle-border-color', false);
let sliderWidth = width - 2 * handleRadius;
let sliderHeight = themeNode.get_length('-slider-height');
let sliderBorderWidth = themeNode.get_length('-slider-border-width');
let sliderBorderRadius = Math.min(width, sliderHeight) / 2;
let sliderBorderColor = themeNode.get_color('-slider-border-color');
let sliderColor = themeNode.get_color('-slider-background-color');
@@ -59,40 +59,55 @@ const Slider = new Lang.Class({
let sliderActiveBorderColor = themeNode.get_color('-slider-active-border-color');
let sliderActiveColor = themeNode.get_color('-slider-active-background-color');
const TAU = Math.PI * 2;
let handleX = handleRadius + (width - 2 * handleRadius) * this._value;
cr.arc(sliderBorderRadius + sliderBorderWidth, height / 2, sliderBorderRadius, TAU * 1/4, TAU * 3/4);
cr.lineTo(handleX, (height - sliderHeight) / 2);
cr.lineTo(handleX, (height + sliderHeight) / 2);
cr.lineTo(sliderBorderRadius + sliderBorderWidth, (height + sliderHeight) / 2);
Clutter.cairo_set_source_color(cr, sliderActiveColor);
cr.setSourceRGBA (
sliderActiveColor.red / 255,
sliderActiveColor.green / 255,
sliderActiveColor.blue / 255,
sliderActiveColor.alpha / 255);
cr.rectangle(handleRadius, (height - sliderHeight) / 2, sliderWidth * this._value, sliderHeight);
cr.fillPreserve();
Clutter.cairo_set_source_color(cr, sliderActiveBorderColor);
cr.setSourceRGBA (
sliderActiveBorderColor.red / 255,
sliderActiveBorderColor.green / 255,
sliderActiveBorderColor.blue / 255,
sliderActiveBorderColor.alpha / 255);
cr.setLineWidth(sliderBorderWidth);
cr.stroke();
cr.arc(width - sliderBorderRadius - sliderBorderWidth, height / 2, sliderBorderRadius, TAU * 3/4, TAU * 1/4);
cr.lineTo(handleX, (height + sliderHeight) / 2);
cr.lineTo(handleX, (height - sliderHeight) / 2);
cr.lineTo(width - sliderBorderRadius - sliderBorderWidth, (height - sliderHeight) / 2);
Clutter.cairo_set_source_color(cr, sliderColor);
cr.setSourceRGBA (
sliderColor.red / 255,
sliderColor.green / 255,
sliderColor.blue / 255,
sliderColor.alpha / 255);
cr.rectangle(handleRadius + sliderWidth * this._value, (height - sliderHeight) / 2, sliderWidth * (1 - this._value), sliderHeight);
cr.fillPreserve();
Clutter.cairo_set_source_color(cr, sliderBorderColor);
cr.setSourceRGBA (
sliderBorderColor.red / 255,
sliderBorderColor.green / 255,
sliderBorderColor.blue / 255,
sliderBorderColor.alpha / 255);
cr.setLineWidth(sliderBorderWidth);
cr.stroke();
let handleY = height / 2;
let handleX = handleRadius + (width - 2 * handleRadius) * this._value;
let color = themeNode.get_foreground_color();
Clutter.cairo_set_source_color(cr, color);
cr.setSourceRGBA (
color.red / 255,
color.green / 255,
color.blue / 255,
color.alpha / 255);
cr.arc(handleX, handleY, handleRadius, 0, 2 * Math.PI);
cr.fillPreserve();
if (hasHandleColor && handleBorderWidth) {
Clutter.cairo_set_source_color(cr, handleBorderColor);
cr.setLineWidth(handleBorderWidth);
cr.stroke();
cr.setSourceRGBA(
handleBorderColor.red / 255,
handleBorderColor.green / 255,
handleBorderColor.blue / 255,
handleBorderColor.alpha / 255);
cr.setLineWidth(handleBorderWidth);
cr.stroke();
}
cr.$dispose();
},

View File

@@ -479,10 +479,6 @@ const WindowManager = new Lang.Class({
false, -1, 1);
},
keepWorkspaceAlive: function(workspace, duration) {
this._workspaceTracker.keepWorkspaceAlive(workspace, duration);
},
setCustomKeybindingHandler: function(name, modes, handler) {
if (Meta.keybindings_set_custom_handler(name, handler))
this.allowKeybinding(name, modes);

View File

@@ -127,7 +127,7 @@ const WindowClone = new Lang.Class({
if (this._stackAbove == null)
return null;
if (this.inDrag) {
if (this.inDrag || this._zooming) {
if (this._stackAbove._delegate)
return this._stackAbove._delegate.getActualStackAbove();
else
@@ -997,7 +997,7 @@ const Workspace = new Lang.Class({
this._dropRect.set_position(geom.x, geom.y);
this._dropRect.set_size(geom.width, geom.height);
this._updateWindowPositions(Main.overview.animationInProgress ? WindowPositionFlags.ANIMATE : WindowPositionFlags.NONE);
this._updateWindowPositions(WindowPositionFlags.NONE);
this._actualGeometryLater = 0;
return false;

View File

@@ -764,8 +764,8 @@ const ThumbnailsBox = new Lang.Class({
// to open its first window within some time, as tracked by Shell.WindowTracker.
// Here, we only add a very brief timeout to avoid the _immediate_ removal of the
// workspace while we wait for the startup sequence to load.
Main.wm.keepWorkspaceAlive(global.screen.get_workspace_by_index(newWorkspaceIndex),
WORKSPACE_KEEP_ALIVE_TIME);
Main.keepWorkspaceAlive(global.screen.get_workspace_by_index(newWorkspaceIndex),
WORKSPACE_KEEP_ALIVE_TIME);
}
// Start the animation on the workspace (which is actually

352
po/cs.po
View File

@@ -12,8 +12,8 @@ msgstr ""
"Project-Id-Version: gnome-shell\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2013-06-27 11:02+0000\n"
"PO-Revision-Date: 2013-06-28 18:32+0200\n"
"POT-Creation-Date: 2013-05-28 07:17+0000\n"
"PO-Revision-Date: 2013-05-29 12:26+0200\n"
"Last-Translator: Marek Černocký <marek@manet.cz>\n"
"Language-Team: Czech <gnome-cs-list@gnome.org>\n"
"Language: cs\n"
@@ -333,8 +333,7 @@ msgid ""
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
"GNOME Shell."
msgstr ""
"Když běží GNOME Shell, tento klíč přepíše klíč v org.gnome.desktop.wm."
"preferences"
"Když běží GNOME Shell, tento klíč přepíše klíč v org.gnome.desktop.wm.preferences"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:46
msgid "Enable edge tiling when dropping windows on screen edges"
@@ -363,41 +362,37 @@ msgid "Select an extension to configure using the combobox above."
msgstr ""
"Pomocí rozbalovacího seznamu výše zvolte rozšíření, které chete nastavit."
#: ../js/gdm/loginDialog.js:308
msgid "Choose Session"
msgstr "Vybrat sezení"
#: ../js/gdm/loginDialog.js:326
msgid "Session"
msgstr "Sezení"
#: ../js/gdm/loginDialog.js:371
msgid "Session"
msgstr "Sezení"
#. 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:528
#: ../js/gdm/loginDialog.js:601
msgid "Not listed?"
msgstr "Nejste na seznamu?"
#: ../js/gdm/loginDialog.js:810 ../js/ui/components/networkAgent.js:137
#: ../js/gdm/loginDialog.js:776 ../js/ui/components/networkAgent.js:137
#: ../js/ui/components/polkitAgent.js:161 ../js/ui/endSessionDialog.js:376
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/bluetooth.js:449 ../js/ui/unlockDialog.js:95
#: ../js/ui/userMenu.js:884
#: ../js/ui/status/bluetooth.js:415 ../js/ui/unlockDialog.js:96
#: ../js/ui/userMenu.js:938
msgid "Cancel"
msgstr "Zrušit"
#: ../js/gdm/loginDialog.js:833
#: ../js/gdm/loginDialog.js:791
msgctxt "button"
msgid "Sign In"
msgstr "Přihlásit se"
#: ../js/gdm/loginDialog.js:833
#: ../js/gdm/loginDialog.js:791
msgid "Next"
msgstr "Následující"
#. Translators: this message is shown below the username entry field
#. to clue the user in on how to login to the local network realm
#: ../js/gdm/loginDialog.js:934
#: ../js/gdm/loginDialog.js:888
#, c-format
msgid "(e.g., user or %s)"
msgstr "(např. uživatel nebo %s)"
@@ -405,12 +400,12 @@ msgstr "(např. uživatel nebo %s)"
#. TTLS and PEAP are actually much more complicated, but this complication
#. is not visible here since we only care about phase2 authentication
#. (and don't even care of which one)
#: ../js/gdm/loginDialog.js:938 ../js/ui/components/networkAgent.js:260
#: ../js/gdm/loginDialog.js:892 ../js/ui/components/networkAgent.js:260
#: ../js/ui/components/networkAgent.js:278
msgid "Username: "
msgstr "Uživatelské jméno: "
#: ../js/gdm/loginDialog.js:1205
#: ../js/gdm/loginDialog.js:1158
msgid "Login Window"
msgstr "Přihlašovací okno"
@@ -419,8 +414,8 @@ msgstr "Přihlašovací okno"
msgid "Power"
msgstr "Vypnout"
#: ../js/gdm/powerMenu.js:93 ../js/ui/userMenu.js:651 ../js/ui/userMenu.js:655
#: ../js/ui/userMenu.js:768
#: ../js/gdm/powerMenu.js:93 ../js/ui/userMenu.js:696 ../js/ui/userMenu.js:700
#: ../js/ui/userMenu.js:816
msgid "Suspend"
msgstr "Uspat do paměti"
@@ -428,18 +423,18 @@ msgstr "Uspat do paměti"
msgid "Restart"
msgstr "Restartovat"
#: ../js/gdm/powerMenu.js:103 ../js/ui/userMenu.js:653
#: ../js/ui/userMenu.js:655 ../js/ui/userMenu.js:767 ../js/ui/userMenu.js:888
#: ../js/gdm/powerMenu.js:103 ../js/ui/userMenu.js:698
#: ../js/ui/userMenu.js:700 ../js/ui/userMenu.js:815 ../js/ui/userMenu.js:942
msgid "Power Off"
msgstr "Vypnout"
#: ../js/gdm/util.js:248
#: ../js/gdm/util.js:247
msgid "Authentication error"
msgstr "Chyba ověření"
#. Translators: this message is shown below the password entry field
#. to indicate the user can swipe their finger instead
#: ../js/gdm/util.js:365
#: ../js/gdm/util.js:364
msgid "(or swipe finger)"
msgstr "(nebo otiskněte prst)"
@@ -458,23 +453,23 @@ msgstr "Nelze analyzovat příkaz:"
msgid "Execution of '%s' failed:"
msgstr "Vykonání „%s“ selhalo:"
#: ../js/ui/appDisplay.js:397
#: ../js/ui/appDisplay.js:361
msgid "Frequent"
msgstr "Časté"
#: ../js/ui/appDisplay.js:404
#: ../js/ui/appDisplay.js:368
msgid "All"
msgstr "Všechny"
#: ../js/ui/appDisplay.js:996
#: ../js/ui/appDisplay.js:960
msgid "New Window"
msgstr "Nové okno"
#: ../js/ui/appDisplay.js:999 ../js/ui/dash.js:284
#: ../js/ui/appDisplay.js:963 ../js/ui/dash.js:284
msgid "Remove from Favorites"
msgstr "Odstranit z oblíbených"
#: ../js/ui/appDisplay.js:1000
#: ../js/ui/appDisplay.js:964
msgid "Add to Favorites"
msgstr "Přidat mezi oblíbené"
@@ -488,7 +483,7 @@ msgstr "%s byl přidán mezi oblíbené."
msgid "%s has been removed from your favorites."
msgstr "%s byl odstraněn z oblíbených."
#: ../js/ui/backgroundMenu.js:19 ../js/ui/userMenu.js:744
#: ../js/ui/backgroundMenu.js:19 ../js/ui/userMenu.js:789
msgid "Settings"
msgstr "Nastavení"
@@ -613,35 +608,35 @@ msgid "S"
msgstr "So"
#. Translators: Text to show if there are no events
#: ../js/ui/calendar.js:750
#: ../js/ui/calendar.js:735
msgid "Nothing Scheduled"
msgstr "Nic nenaplánováno"
#. Translators: Shown on calendar heading when selected day occurs on current year
#: ../js/ui/calendar.js:768
#: ../js/ui/calendar.js:751
msgctxt "calendar heading"
msgid "%A, %B %d"
msgstr "%A, %e. %B"
#. Translators: Shown on calendar heading when selected day occurs on different year
#: ../js/ui/calendar.js:771
#: ../js/ui/calendar.js:754
msgctxt "calendar heading"
msgid "%A, %B %d, %Y"
msgstr "%A, %e. %B %Y"
#: ../js/ui/calendar.js:782
#: ../js/ui/calendar.js:764
msgid "Today"
msgstr "Dnes"
#: ../js/ui/calendar.js:786
#: ../js/ui/calendar.js:768
msgid "Tomorrow"
msgstr "Zítra"
#: ../js/ui/calendar.js:797
#: ../js/ui/calendar.js:779
msgid "This week"
msgstr "Tento týden"
#: ../js/ui/calendar.js:805
#: ../js/ui/calendar.js:787
msgid "Next week"
msgstr "Následující týden"
@@ -830,14 +825,14 @@ msgstr "<b>%d.</b> <b>%B</b> <b>%Y</b>, <b>%H:%M</b> "
#. Translators: this is the other person changing their old IM name to their new
#. IM name.
#: ../js/ui/components/telepathyClient.js:986
#: ../js/ui/components/telepathyClient.js:985
#, c-format
msgid "%s is now known as %s"
msgstr "%s je teď znám jako %s"
#. translators: argument is a room name like
#. * room@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1089
#: ../js/ui/components/telepathyClient.js:1088
#, c-format
msgid "Invitation to %s"
msgstr "Pozvánka na připojení k %s"
@@ -845,38 +840,38 @@ msgstr "Pozvánka na připojení k %s"
#. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example.
#: ../js/ui/components/telepathyClient.js:1097
#: ../js/ui/components/telepathyClient.js:1096
#, c-format
msgid "%s is inviting you to join %s"
msgstr "%s vás zve do %s"
#: ../js/ui/components/telepathyClient.js:1099
#: ../js/ui/components/telepathyClient.js:1138
#: ../js/ui/components/telepathyClient.js:1178
#: ../js/ui/components/telepathyClient.js:1241
#: ../js/ui/components/telepathyClient.js:1098
#: ../js/ui/components/telepathyClient.js:1137
#: ../js/ui/components/telepathyClient.js:1177
#: ../js/ui/components/telepathyClient.js:1240
msgid "Decline"
msgstr "Odmítnout"
#: ../js/ui/components/telepathyClient.js:1100
#: ../js/ui/components/telepathyClient.js:1179
#: ../js/ui/components/telepathyClient.js:1242
#: ../js/ui/components/telepathyClient.js:1099
#: ../js/ui/components/telepathyClient.js:1178
#: ../js/ui/components/telepathyClient.js:1241
msgid "Accept"
msgstr "Přijmout"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1130
#: ../js/ui/components/telepathyClient.js:1129
#, c-format
msgid "Video call from %s"
msgstr "Videohovor od %s"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1133
#: ../js/ui/components/telepathyClient.js:1132
#, c-format
msgid "Call from %s"
msgstr "Hovor od %s"
#. translators: this is a button label (verb), not a noun
#: ../js/ui/components/telepathyClient.js:1140
#: ../js/ui/components/telepathyClient.js:1139
msgid "Answer"
msgstr "Zvednout"
@@ -885,110 +880,110 @@ msgstr "Zvednout"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#.
#: ../js/ui/components/telepathyClient.js:1172
#: ../js/ui/components/telepathyClient.js:1171
#, c-format
msgid "%s is sending you %s"
msgstr "%s vám posílá %s"
#. To translators: The parameter is the contact's alias
#: ../js/ui/components/telepathyClient.js:1207
#: ../js/ui/components/telepathyClient.js:1206
#, c-format
msgid "%s would like permission to see when you are online"
msgstr "%s vás žádá o oprávnění vidět, že jste dostupní"
#: ../js/ui/components/telepathyClient.js:1299
#: ../js/ui/components/telepathyClient.js:1298
msgid "Network error"
msgstr "Chyba sítě"
#: ../js/ui/components/telepathyClient.js:1301
#: ../js/ui/components/telepathyClient.js:1300
msgid "Authentication failed"
msgstr "Ověření selhalo"
#: ../js/ui/components/telepathyClient.js:1303
#: ../js/ui/components/telepathyClient.js:1302
msgid "Encryption error"
msgstr "Chyba šifrování"
#: ../js/ui/components/telepathyClient.js:1305
#: ../js/ui/components/telepathyClient.js:1304
msgid "Certificate not provided"
msgstr "Certifikát neposkytnut"
#: ../js/ui/components/telepathyClient.js:1307
#: ../js/ui/components/telepathyClient.js:1306
msgid "Certificate untrusted"
msgstr "Nedůvěryhodný certifikát"
#: ../js/ui/components/telepathyClient.js:1309
#: ../js/ui/components/telepathyClient.js:1308
msgid "Certificate expired"
msgstr "Platnost certifikátu vypršela"
#: ../js/ui/components/telepathyClient.js:1311
#: ../js/ui/components/telepathyClient.js:1310
msgid "Certificate not activated"
msgstr "Certifikát není aktivován"
#: ../js/ui/components/telepathyClient.js:1313
#: ../js/ui/components/telepathyClient.js:1312
msgid "Certificate hostname mismatch"
msgstr "Název počítače certifikátu nesouhlasí"
#: ../js/ui/components/telepathyClient.js:1315
#: ../js/ui/components/telepathyClient.js:1314
msgid "Certificate fingerprint mismatch"
msgstr "Otisk prstu certifikátu nesouhlasí"
#: ../js/ui/components/telepathyClient.js:1317
#: ../js/ui/components/telepathyClient.js:1316
msgid "Certificate self-signed"
msgstr "Certifikát je podepsán sám sebou"
#: ../js/ui/components/telepathyClient.js:1319
#: ../js/ui/components/telepathyClient.js:1318
msgid "Status is set to offline"
msgstr "Stav nastaven na „Odhlášen“"
#: ../js/ui/components/telepathyClient.js:1321
#: ../js/ui/components/telepathyClient.js:1320
msgid "Encryption is not available"
msgstr "Šifrování není dostupné"
#: ../js/ui/components/telepathyClient.js:1323
#: ../js/ui/components/telepathyClient.js:1322
msgid "Certificate is invalid"
msgstr "Certifikát je neplatný"
#: ../js/ui/components/telepathyClient.js:1325
#: ../js/ui/components/telepathyClient.js:1324
msgid "Connection has been refused"
msgstr "Spojení bylo odmítnuto"
#: ../js/ui/components/telepathyClient.js:1327
#: ../js/ui/components/telepathyClient.js:1326
msgid "Connection can't be established"
msgstr "Spojení nemohlo bát navázáno"
#: ../js/ui/components/telepathyClient.js:1329
#: ../js/ui/components/telepathyClient.js:1328
msgid "Connection has been lost"
msgstr "Spojení bylo ztraceno"
#: ../js/ui/components/telepathyClient.js:1331
#: ../js/ui/components/telepathyClient.js:1330
msgid "This account is already connected to the server"
msgstr "Tento účet je již připojen k serveru"
#: ../js/ui/components/telepathyClient.js:1333
#: ../js/ui/components/telepathyClient.js:1332
msgid ""
"Connection has been replaced by a new connection using the same resource"
msgstr "Spojení bylo nahrazeno novým spojením, které používá stejný zdroj"
#: ../js/ui/components/telepathyClient.js:1335
#: ../js/ui/components/telepathyClient.js:1334
msgid "The account already exists on the server"
msgstr "Takový účet již na serveru existuje"
#: ../js/ui/components/telepathyClient.js:1337
#: ../js/ui/components/telepathyClient.js:1336
msgid "Server is currently too busy to handle the connection"
msgstr "Server je právě příliš zaneprázdněn na to, aby obsloužil spojení"
#: ../js/ui/components/telepathyClient.js:1339
#: ../js/ui/components/telepathyClient.js:1338
msgid "Certificate has been revoked"
msgstr "Certifikát byl odvolán"
#: ../js/ui/components/telepathyClient.js:1341
#: ../js/ui/components/telepathyClient.js:1340
msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr ""
"Certifikát používá nepříliš bezpečný šifrovací algoritmus nebo je z "
"kryptografického hlediska slabý"
#: ../js/ui/components/telepathyClient.js:1343
#: ../js/ui/components/telepathyClient.js:1342
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
@@ -996,22 +991,22 @@ msgstr ""
"Délka certifikátu serveru nebo délka zřetězených certifikátů serveru "
"přesáhla omezení dané kryptografickou knihovnou"
#: ../js/ui/components/telepathyClient.js:1345
#: ../js/ui/components/telepathyClient.js:1344
msgid "Internal error"
msgstr "Vnitřní chyba"
#. translators: argument is the account name, like
#. * name@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1355
#: ../js/ui/components/telepathyClient.js:1354
#, c-format
msgid "Unable to connect to %s"
msgstr "Nelze se připojit k „%s“"
#: ../js/ui/components/telepathyClient.js:1360
#: ../js/ui/components/telepathyClient.js:1359
msgid "View account"
msgstr "Zobrazit účet"
#: ../js/ui/components/telepathyClient.js:1399
#: ../js/ui/components/telepathyClient.js:1398
msgid "Unknown reason"
msgstr "Neznámý důvod"
@@ -1025,19 +1020,19 @@ msgstr "Zobrazit aplikace"
#. Translators: this is the name of the dock/favorites area on
#. the left of the overview
#: ../js/ui/dash.js:439
#: ../js/ui/dash.js:435
msgid "Dash"
msgstr "Oblíbené"
#: ../js/ui/dateMenu.js:85
#: ../js/ui/dateMenu.js:86
msgid "Open Calendar"
msgstr "Otevřít kalendář"
#: ../js/ui/dateMenu.js:89
#: ../js/ui/dateMenu.js:90
msgid "Open Clocks"
msgstr "Otevřít Hodiny"
#: ../js/ui/dateMenu.js:96
#: ../js/ui/dateMenu.js:97
msgid "Date & Time Settings"
msgstr "Nastavení data a času"
@@ -1045,7 +1040,7 @@ msgstr "Nastavení data a času"
#. Translators: This is the date format to use when the calendar popup is
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
#.
#: ../js/ui/dateMenu.js:201
#: ../js/ui/dateMenu.js:208
msgid "%A %B %e, %Y"
msgstr "%A, %e. %B, %Y"
@@ -1220,15 +1215,15 @@ msgstr "Vymazat zprávy"
msgid "Notification Settings"
msgstr "Nastavení upozornění"
#: ../js/ui/messageTray.js:1711
#: ../js/ui/messageTray.js:1707
msgid "No Messages"
msgstr "Žádné zprávy"
#: ../js/ui/messageTray.js:1784
#: ../js/ui/messageTray.js:1780
msgid "Message Tray"
msgstr "Lišta zpráv"
#: ../js/ui/messageTray.js:2811
#: ../js/ui/messageTray.js:2805
msgid "System Information"
msgstr "Informace o systému"
@@ -1237,7 +1232,7 @@ msgctxt "program"
msgid "Unknown"
msgstr "Neznámé"
#: ../js/ui/overviewControls.js:474 ../js/ui/screenShield.js:150
#: ../js/ui/overviewControls.js:472 ../js/ui/screenShield.js:150
#, c-format
msgid "%d new message"
msgid_plural "%d new messages"
@@ -1261,17 +1256,17 @@ msgstr "Přehled"
msgid "Type to search…"
msgstr "Vyhledávejte psaním…"
#: ../js/ui/panel.js:567
#: ../js/ui/panel.js:642
msgid "Quit"
msgstr "Ukončit"
#. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:618
#: ../js/ui/panel.js:693
msgid "Activities"
msgstr "Činnosti"
#: ../js/ui/panel.js:914
#: ../js/ui/panel.js:989
msgid "Top Bar"
msgstr "Horní lišta"
@@ -1280,7 +1275,7 @@ msgstr "Horní lišta"
#. "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:549
#: ../js/ui/popupMenu.js:738
msgid "toggle-switch-us"
msgstr "toggle-switch-intl"
@@ -1306,7 +1301,7 @@ msgstr[0] "%d nové upozornění"
msgstr[1] "%d nová upozornění"
msgstr[2] "%d nových upozornění"
#: ../js/ui/screenShield.js:449 ../js/ui/userMenu.js:759
#: ../js/ui/screenShield.js:449 ../js/ui/userMenu.js:807
msgid "Lock"
msgstr "Uzamknout"
@@ -1321,19 +1316,19 @@ msgstr "GNOME potřebuje uzamknout obrazovku"
#.
#. XXX: another option is to kick the user into the gdm login
#. screen, where we're not affected by grabs
#: ../js/ui/screenShield.js:775 ../js/ui/screenShield.js:1215
#: ../js/ui/screenShield.js:773 ../js/ui/screenShield.js:1213
msgid "Unable to lock"
msgstr "Nelze uzamknout obrazovku"
#: ../js/ui/screenShield.js:776 ../js/ui/screenShield.js:1216
#: ../js/ui/screenShield.js:774 ../js/ui/screenShield.js:1214
msgid "Lock was blocked by an application"
msgstr "Zamknutí bylo zablokováno některou z aplikací"
#: ../js/ui/searchDisplay.js:445
#: ../js/ui/searchDisplay.js:453
msgid "Searching…"
msgstr "Hledá se…"
#: ../js/ui/searchDisplay.js:489
#: ../js/ui/searchDisplay.js:497
msgid "No results."
msgstr "Žádné výsledky."
@@ -1361,7 +1356,7 @@ msgstr "Heslo"
msgid "Remember Password"
msgstr "Pamatovat si heslo"
#: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:108
#: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:109
msgid "Unlock"
msgstr "Odemknout"
@@ -1414,9 +1409,9 @@ msgid "Large Text"
msgstr "Styl velkého textu"
#: ../js/ui/status/bluetooth.js:28 ../js/ui/status/bluetooth.js:32
#: ../js/ui/status/bluetooth.js:290 ../js/ui/status/bluetooth.js:327
#: ../js/ui/status/bluetooth.js:355 ../js/ui/status/bluetooth.js:391
#: ../js/ui/status/bluetooth.js:422 ../js/ui/status/network.js:713
#: ../js/ui/status/bluetooth.js:289 ../js/ui/status/bluetooth.js:321
#: ../js/ui/status/bluetooth.js:357 ../js/ui/status/bluetooth.js:388
#: ../js/ui/status/network.js:739
msgid "Bluetooth"
msgstr "Bluetooth"
@@ -1437,106 +1432,97 @@ msgid "Bluetooth Settings"
msgstr "Nastavit Bluetooth"
#. TRANSLATORS: this means that bluetooth was disabled by hardware rfkill
#: ../js/ui/status/bluetooth.js:105 ../js/ui/status/network.js:140
#: ../js/ui/status/bluetooth.js:104 ../js/ui/status/network.js:142
msgid "hardware disabled"
msgstr "zařízení zakázáno"
#: ../js/ui/status/bluetooth.js:198
#: ../js/ui/status/bluetooth.js:197
msgid "Connection"
msgstr "Připojení"
#: ../js/ui/status/bluetooth.js:209 ../js/ui/status/network.js:399
#: ../js/ui/status/bluetooth.js:208 ../js/ui/status/network.js:404
msgid "disconnecting..."
msgstr "odpojování…"
#: ../js/ui/status/bluetooth.js:222 ../js/ui/status/network.js:405
#: ../js/ui/status/network.js:1298
#: ../js/ui/status/bluetooth.js:221 ../js/ui/status/network.js:410
#: ../js/ui/status/network.js:1343
msgid "connecting..."
msgstr "připojování…"
#: ../js/ui/status/bluetooth.js:240
#: ../js/ui/status/bluetooth.js:239
msgid "Send Files…"
msgstr "Odeslat soubory…"
#: ../js/ui/status/bluetooth.js:247
#: ../js/ui/status/bluetooth.js:246
msgid "Keyboard Settings"
msgstr "Nastavení klávesnice"
#: ../js/ui/status/bluetooth.js:250
#: ../js/ui/status/bluetooth.js:249
msgid "Mouse Settings"
msgstr "Nastavení myši"
#: ../js/ui/status/bluetooth.js:255 ../js/ui/status/volume.js:313
#: ../js/ui/status/bluetooth.js:254 ../js/ui/status/volume.js:316
msgid "Sound Settings"
msgstr "Nastavení zvuku"
#: ../js/ui/status/bluetooth.js:328 ../js/ui/status/bluetooth.js:356
#: ../js/ui/status/bluetooth.js:322
#, c-format
msgid "Authorization request from %s"
msgstr "Požadavek na autorizaci od %s"
#: ../js/ui/status/bluetooth.js:334 ../js/ui/status/bluetooth.js:399
#: ../js/ui/status/bluetooth.js:430
#, c-format
msgid "Device %s wants to pair with this computer"
msgstr "Zařízení %s se chce spárovat s tímto počítačem"
#: ../js/ui/status/bluetooth.js:336
msgid "Allow"
msgstr "Povolit"
#: ../js/ui/status/bluetooth.js:337
msgid "Deny"
msgstr "Zamítnout"
#: ../js/ui/status/bluetooth.js:362
#: ../js/ui/status/bluetooth.js:328
#, c-format
msgid "Device %s wants access to the service '%s'"
msgstr "Zařízení %s požaduje přístup ke službě „%s“"
#: ../js/ui/status/bluetooth.js:364
#: ../js/ui/status/bluetooth.js:330
msgid "Always grant access"
msgstr "Vždy udělovat přístup"
#: ../js/ui/status/bluetooth.js:365
#: ../js/ui/status/bluetooth.js:331
msgid "Grant this time only"
msgstr "Udělit pouze tentokrát"
#: ../js/ui/status/bluetooth.js:366
#: ../js/ui/status/bluetooth.js:332
msgid "Reject"
msgstr "Odmítnout"
#. Translators: argument is the device short name
#: ../js/ui/status/bluetooth.js:393
#: ../js/ui/status/bluetooth.js:359
#, c-format
msgid "Pairing confirmation for %s"
msgstr "Potvrzení spárování pro %s"
#: ../js/ui/status/bluetooth.js:400
#: ../js/ui/status/bluetooth.js:365 ../js/ui/status/bluetooth.js:396
#, c-format
msgid "Device %s wants to pair with this computer"
msgstr "Zařízení %s se chce spárovat s tímto počítačem"
#: ../js/ui/status/bluetooth.js:366
#, c-format
msgid ""
"Please confirm whether the Passkey '%06d' matches the one on the device."
msgstr "Ověřte prosím, zda klíč „%06d“ odpovídá tomu na zařízení."
#. Translators: this is the verb, not the noun
#: ../js/ui/status/bluetooth.js:403
#: ../js/ui/status/bluetooth.js:369
msgid "Matches"
msgstr "Souhlasí"
#: ../js/ui/status/bluetooth.js:404
#: ../js/ui/status/bluetooth.js:370
msgid "Does not match"
msgstr "Nesouhlasí"
#: ../js/ui/status/bluetooth.js:423
#: ../js/ui/status/bluetooth.js:389
#, c-format
msgid "Pairing request for %s"
msgstr "Požadavek na spárování pro %s"
#: ../js/ui/status/bluetooth.js:431
#: ../js/ui/status/bluetooth.js:397
msgid "Please enter the PIN mentioned on the device."
msgstr "Zadejte prosím PIN, který je uveden na zařízení."
#: ../js/ui/status/bluetooth.js:448
#: ../js/ui/status/bluetooth.js:414
msgid "OK"
msgstr "Budiž"
@@ -1556,81 +1542,87 @@ msgstr "Hlasitost, síť, baterie"
msgid "<unknown>"
msgstr "<neznámé>"
#: ../js/ui/status/network.js:125
#: ../js/ui/status/network.js:127
msgid "Wi-Fi"
msgstr "Wi-Fi"
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
#: ../js/ui/status/network.js:162
#: ../js/ui/status/network.js:164
msgid "disabled"
msgstr "zakázáno"
#. Translators: this is for network devices that are physically present but are not
#. under NetworkManager's control (and thus cannot be used in the menu)
#: ../js/ui/status/network.js:397
#: ../js/ui/status/network.js:402
msgid "unmanaged"
msgstr "nespravováno"
#. Translators: this is for network connections that require some kind of key or password
#: ../js/ui/status/network.js:408 ../js/ui/status/network.js:1301
#: ../js/ui/status/network.js:413 ../js/ui/status/network.js:1346
msgid "authentication required"
msgstr "je vyžadováno ověření"
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing
#: ../js/ui/status/network.js:419
#: ../js/ui/status/network.js:423
msgid "firmware missing"
msgstr "nedostupný firmware"
#. Translators: this is for wired network devices that are physically disconnected
#: ../js/ui/status/network.js:430
msgid "cable unplugged"
msgstr "kabel byl odpojen"
#. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage
#: ../js/ui/status/network.js:423
#: ../js/ui/status/network.js:435
msgid "unavailable"
msgstr "nedostupné"
#: ../js/ui/status/network.js:425 ../js/ui/status/network.js:1303
#: ../js/ui/status/network.js:437 ../js/ui/status/network.js:1348
msgid "connection failed"
msgstr "připojení selhalo"
#: ../js/ui/status/network.js:478 ../js/ui/status/network.js:1190
#: ../js/ui/status/network.js:490 ../js/ui/status/network.js:1236
#: ../js/ui/status/network.js:1424
msgid "More…"
msgstr "Další…"
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
#. and we cannot access its settings (including the name)
#: ../js/ui/status/network.js:506 ../js/ui/status/network.js:1142
#: ../js/ui/status/network.js:518 ../js/ui/status/network.js:1191
msgid "Connected (private)"
msgstr "Připojení (soukromé)"
#: ../js/ui/status/network.js:572
#: ../js/ui/status/network.js:597
msgid "Wired"
msgstr "Drátová"
#: ../js/ui/status/network.js:592
#: ../js/ui/status/network.js:611
msgid "Mobile broadband"
msgstr "Mobilní širokopásmová"
#: ../js/ui/status/network.js:1474
#: ../js/ui/status/network.js:1522
msgid "Enable networking"
msgstr "Povolit síť"
#: ../js/ui/status/network.js:1522
#: ../js/ui/status/network.js:1583
msgid "Network Settings"
msgstr "Nastavení sítě"
#: ../js/ui/status/network.js:1539
#: ../js/ui/status/network.js:1600
msgid "Network Manager"
msgstr "Network Manager"
#: ../js/ui/status/network.js:1623
#: ../js/ui/status/network.js:1690
msgid "Connection failed"
msgstr "Připojení selhalo"
#: ../js/ui/status/network.js:1624
#: ../js/ui/status/network.js:1691
msgid "Activation of network connection failed"
msgstr "Aktivace síťového připojení selhala"
#: ../js/ui/status/network.js:1937
#: ../js/ui/status/network.js:2047
msgid "Networking is disabled"
msgstr "Síť je zakázána"
@@ -1735,72 +1727,72 @@ msgctxt "device"
msgid "Unknown"
msgstr "Neznámé"
#: ../js/ui/status/volume.js:121
#: ../js/ui/status/volume.js:124
msgid "Volume changed"
msgstr "Hlasitost změněna"
#. Translators: This is the label for audio volume
#: ../js/ui/status/volume.js:246 ../js/ui/status/volume.js:294
#: ../js/ui/status/volume.js:249 ../js/ui/status/volume.js:297
msgid "Volume"
msgstr "Hlasitost"
#: ../js/ui/status/volume.js:255
#: ../js/ui/status/volume.js:258
msgid "Microphone"
msgstr "Mikrofon"
#: ../js/ui/unlockDialog.js:119
#: ../js/ui/unlockDialog.js:120
msgid "Log in as another user"
msgstr "Přihlásit se jako jiný uživatel"
#: ../js/ui/unlockDialog.js:140
#: ../js/ui/unlockDialog.js:141
msgid "Unlock Window"
msgstr "Odemykací okno"
#: ../js/ui/userMenu.js:149
#: ../js/ui/userMenu.js:193
msgid "Available"
msgstr "Přítomen"
#: ../js/ui/userMenu.js:152
#: ../js/ui/userMenu.js:196
msgid "Busy"
msgstr "Zaneprázdněn"
#: ../js/ui/userMenu.js:155
#: ../js/ui/userMenu.js:199
msgid "Invisible"
msgstr "Neviditelný"
#: ../js/ui/userMenu.js:158
#: ../js/ui/userMenu.js:202
msgid "Away"
msgstr "Nepřítomen"
#: ../js/ui/userMenu.js:161
#: ../js/ui/userMenu.js:205
msgid "Idle"
msgstr "Nečinný"
#: ../js/ui/userMenu.js:164
#: ../js/ui/userMenu.js:208
msgid "Offline"
msgstr "Odpojen"
#: ../js/ui/userMenu.js:736
#: ../js/ui/userMenu.js:781
msgid "Notifications"
msgstr "Upozornění"
#: ../js/ui/userMenu.js:749
#: ../js/ui/userMenu.js:797
msgid "Switch User"
msgstr "Přepnout uživatele"
#: ../js/ui/userMenu.js:754
#: ../js/ui/userMenu.js:802
msgid "Log Out"
msgstr "Odhlásit se"
#: ../js/ui/userMenu.js:774
#: ../js/ui/userMenu.js:822
msgid "Install Updates & Restart"
msgstr "Nainstalovat aktualizace a restartovat"
#: ../js/ui/userMenu.js:792
#: ../js/ui/userMenu.js:840
msgid "Your chat status will be set to busy"
msgstr "Váš stav v konverzacích byl nastaven na „Zaneprázdněn“"
#: ../js/ui/userMenu.js:793
#: ../js/ui/userMenu.js:841
msgid ""
"Notifications are now disabled, including chat messages. Your online status "
"has been adjusted to let others know that you might not see their messages."
@@ -1808,22 +1800,22 @@ msgstr ""
"Upozornění jsou nyní vypnuta, včetně zpráv v konverzacích. Váš stav on-line "
"byl změněn tak, aby ostatní věděli, že si jejich zprávy nemusíte přečíst."
#: ../js/ui/userMenu.js:834
#: ../js/ui/userMenu.js:888
msgid "Other users are logged in."
msgstr "Jsou přihlášeni jiní uživatelé."
#: ../js/ui/userMenu.js:839
#: ../js/ui/userMenu.js:893
msgid "Shutting down might cause them to lose unsaved work."
msgstr "Vypnutí by mohlo způsobit ztrátu jejich neuložené práce."
#. Translators: Remote here refers to a remote session, like a ssh login
#: ../js/ui/userMenu.js:867
#: ../js/ui/userMenu.js:921
#, c-format
msgid "%s (remote)"
msgstr "%s (vzdálený)"
#. Translators: Console here refers to a tty like a VT console
#: ../js/ui/userMenu.js:870
#: ../js/ui/userMenu.js:924
#, c-format
msgid "%s (console)"
msgstr "%s (konzole)"
@@ -1883,19 +1875,19 @@ msgstr[2] "%u vstupů"
msgid "System Sounds"
msgstr "Systémové zvuky"
#: ../src/main.c:353
#: ../src/main.c:372
msgid "Print version"
msgstr "Vypsat verzi"
#: ../src/main.c:359
#: ../src/main.c:378
msgid "Mode used by GDM for login screen"
msgstr "Režim použitý GDM pro přihlašovací obrazovku"
#: ../src/main.c:365
#: ../src/main.c:384
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
msgstr "Použít pro přihlašovací obrazovku určitý mód, např. „gdm“."
#: ../src/main.c:371
#: ../src/main.c:390
msgid "List possible modes"
msgstr "Vypsat možné režimy"

360
po/es.po
View File

@@ -10,8 +10,8 @@ msgstr ""
"Project-Id-Version: gnome-shell.master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2013-06-26 18:42+0000\n"
"PO-Revision-Date: 2013-06-27 12:33+0200\n"
"POT-Creation-Date: 2013-05-25 08:18+0000\n"
"PO-Revision-Date: 2013-05-27 13:23+0200\n"
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
"Language-Team: Español <gnome-es-list@gnome.org>\n"
"Language: \n"
@@ -369,43 +369,37 @@ msgid "Select an extension to configure using the combobox above."
msgstr ""
"Seleccione una extensión que configurar usando la caja combinada de arriba."
#: ../js/gdm/loginDialog.js:302
#| msgid "Switch Session"
msgid "Choose Session"
msgstr "Elegir sesión"
#: ../js/gdm/loginDialog.js:320
#| msgid "Session…"
msgid "Session"
msgstr "Sesión"
#: ../js/gdm/loginDialog.js:371
msgid "Session"
msgstr "Sesión…"
#. translators: this message is shown below the user list on the
#. login screen. It can be activated to reveal an entry for
#. manually entering the username.
#: ../js/gdm/loginDialog.js:522
#: ../js/gdm/loginDialog.js:601
msgid "Not listed?"
msgstr "¿No está en la lista?"
#: ../js/gdm/loginDialog.js:739 ../js/ui/components/networkAgent.js:137
#: ../js/gdm/loginDialog.js:776 ../js/ui/components/networkAgent.js:137
#: ../js/ui/components/polkitAgent.js:161 ../js/ui/endSessionDialog.js:376
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/bluetooth.js:449 ../js/ui/unlockDialog.js:95
#: ../js/ui/userMenu.js:884
#: ../js/ui/status/bluetooth.js:415 ../js/ui/unlockDialog.js:96
#: ../js/ui/userMenu.js:938
msgid "Cancel"
msgstr "Cancelar"
#: ../js/gdm/loginDialog.js:768
#: ../js/gdm/loginDialog.js:791
msgctxt "button"
msgid "Sign In"
msgstr "Iniciar sesión"
#: ../js/gdm/loginDialog.js:768
#: ../js/gdm/loginDialog.js:791
msgid "Next"
msgstr "Siguiente"
#. Translators: this message is shown below the username entry field
#. to clue the user in on how to login to the local network realm
#: ../js/gdm/loginDialog.js:869
#: ../js/gdm/loginDialog.js:888
#, c-format
msgid "(e.g., user or %s)"
msgstr "(ej., usuario o %s)"
@@ -413,12 +407,12 @@ msgstr "(ej., usuario o %s)"
#. TTLS and PEAP are actually much more complicated, but this complication
#. is not visible here since we only care about phase2 authentication
#. (and don't even care of which one)
#: ../js/gdm/loginDialog.js:873 ../js/ui/components/networkAgent.js:260
#: ../js/gdm/loginDialog.js:892 ../js/ui/components/networkAgent.js:260
#: ../js/ui/components/networkAgent.js:278
msgid "Username: "
msgstr "Nombre de usuario:"
#: ../js/gdm/loginDialog.js:1140
#: ../js/gdm/loginDialog.js:1158
msgid "Login Window"
msgstr "Ventana de inicio de sesión"
@@ -427,8 +421,8 @@ msgstr "Ventana de inicio de sesión"
msgid "Power"
msgstr "Energía"
#: ../js/gdm/powerMenu.js:93 ../js/ui/userMenu.js:651 ../js/ui/userMenu.js:655
#: ../js/ui/userMenu.js:768
#: ../js/gdm/powerMenu.js:93 ../js/ui/userMenu.js:696 ../js/ui/userMenu.js:700
#: ../js/ui/userMenu.js:816
msgid "Suspend"
msgstr "Suspender"
@@ -436,18 +430,18 @@ msgstr "Suspender"
msgid "Restart"
msgstr "Reiniciar"
#: ../js/gdm/powerMenu.js:103 ../js/ui/userMenu.js:653
#: ../js/ui/userMenu.js:655 ../js/ui/userMenu.js:767 ../js/ui/userMenu.js:888
#: ../js/gdm/powerMenu.js:103 ../js/ui/userMenu.js:698
#: ../js/ui/userMenu.js:700 ../js/ui/userMenu.js:815 ../js/ui/userMenu.js:942
msgid "Power Off"
msgstr "Apagar"
#: ../js/gdm/util.js:248
#: ../js/gdm/util.js:247
msgid "Authentication error"
msgstr "Error de autenticación"
#. Translators: this message is shown below the password entry field
#. to indicate the user can swipe their finger instead
#: ../js/gdm/util.js:365
#: ../js/gdm/util.js:364
msgid "(or swipe finger)"
msgstr "(o pase el dedo)"
@@ -466,23 +460,23 @@ msgstr "No se pudo analizar el comando:"
msgid "Execution of '%s' failed:"
msgstr "Falló la ejecución de «%s»:"
#: ../js/ui/appDisplay.js:397
#: ../js/ui/appDisplay.js:361
msgid "Frequent"
msgstr "Frecuentes"
#: ../js/ui/appDisplay.js:404
#: ../js/ui/appDisplay.js:368
msgid "All"
msgstr "Todas"
#: ../js/ui/appDisplay.js:996
#: ../js/ui/appDisplay.js:960
msgid "New Window"
msgstr "Ventana nueva"
#: ../js/ui/appDisplay.js:999 ../js/ui/dash.js:284
#: ../js/ui/appDisplay.js:963 ../js/ui/dash.js:284
msgid "Remove from Favorites"
msgstr "Quitar de los favoritos"
#: ../js/ui/appDisplay.js:1000
#: ../js/ui/appDisplay.js:964
msgid "Add to Favorites"
msgstr "Añadir a los favoritos"
@@ -496,7 +490,7 @@ msgstr "Se ha añadido %s a sus favoritos."
msgid "%s has been removed from your favorites."
msgstr "Se ha quitado %s de sus favoritos."
#: ../js/ui/backgroundMenu.js:19 ../js/ui/userMenu.js:744
#: ../js/ui/backgroundMenu.js:19 ../js/ui/userMenu.js:789
msgid "Settings"
msgstr "Configuración"
@@ -621,35 +615,35 @@ msgid "S"
msgstr "S"
#. Translators: Text to show if there are no events
#: ../js/ui/calendar.js:750
#: ../js/ui/calendar.js:735
msgid "Nothing Scheduled"
msgstr "Nada programado"
#. Translators: Shown on calendar heading when selected day occurs on current year
#: ../js/ui/calendar.js:768
#: ../js/ui/calendar.js:751
msgctxt "calendar heading"
msgid "%A, %B %d"
msgstr "%A, %d de %B"
#. Translators: Shown on calendar heading when selected day occurs on different year
#: ../js/ui/calendar.js:771
#: ../js/ui/calendar.js:754
msgctxt "calendar heading"
msgid "%A, %B %d, %Y"
msgstr "%A, %d de %B de %Y"
#: ../js/ui/calendar.js:782
#: ../js/ui/calendar.js:764
msgid "Today"
msgstr "Hoy"
#: ../js/ui/calendar.js:786
#: ../js/ui/calendar.js:768
msgid "Tomorrow"
msgstr "Mañana"
#: ../js/ui/calendar.js:797
#: ../js/ui/calendar.js:779
msgid "This week"
msgstr "Esta semana"
#: ../js/ui/calendar.js:805
#: ../js/ui/calendar.js:787
msgid "Next week"
msgstr "La semana que viene"
@@ -838,14 +832,14 @@ msgstr "<b>%d</b> de <b>%B</b> <b>%Y</b>, <b>%H:%M</b> "
#. Translators: this is the other person changing their old IM name to their new
#. IM name.
#: ../js/ui/components/telepathyClient.js:986
#: ../js/ui/components/telepathyClient.js:985
#, c-format
msgid "%s is now known as %s"
msgstr "Ahora %s se llama %s"
#. translators: argument is a room name like
#. * room@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1089
#: ../js/ui/components/telepathyClient.js:1088
#, c-format
msgid "Invitation to %s"
msgstr "Invitación a %s"
@@ -853,38 +847,38 @@ msgstr "Invitación a %s"
#. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example.
#: ../js/ui/components/telepathyClient.js:1097
#: ../js/ui/components/telepathyClient.js:1096
#, c-format
msgid "%s is inviting you to join %s"
msgstr "%s le está invitando a unirse a %s"
#: ../js/ui/components/telepathyClient.js:1099
#: ../js/ui/components/telepathyClient.js:1138
#: ../js/ui/components/telepathyClient.js:1178
#: ../js/ui/components/telepathyClient.js:1241
#: ../js/ui/components/telepathyClient.js:1098
#: ../js/ui/components/telepathyClient.js:1137
#: ../js/ui/components/telepathyClient.js:1177
#: ../js/ui/components/telepathyClient.js:1240
msgid "Decline"
msgstr "Rechazar"
#: ../js/ui/components/telepathyClient.js:1100
#: ../js/ui/components/telepathyClient.js:1179
#: ../js/ui/components/telepathyClient.js:1242
#: ../js/ui/components/telepathyClient.js:1099
#: ../js/ui/components/telepathyClient.js:1178
#: ../js/ui/components/telepathyClient.js:1241
msgid "Accept"
msgstr "Aceptar"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1130
#: ../js/ui/components/telepathyClient.js:1129
#, c-format
msgid "Video call from %s"
msgstr "Videollamada de %s"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1133
#: ../js/ui/components/telepathyClient.js:1132
#, c-format
msgid "Call from %s"
msgstr "Llamada de %s"
#. translators: this is a button label (verb), not a noun
#: ../js/ui/components/telepathyClient.js:1140
#: ../js/ui/components/telepathyClient.js:1139
msgid "Answer"
msgstr "Responder"
@@ -893,112 +887,112 @@ msgstr "Responder"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#.
#: ../js/ui/components/telepathyClient.js:1172
#: ../js/ui/components/telepathyClient.js:1171
#, c-format
msgid "%s is sending you %s"
msgstr "%s le está enviando %s"
#. To translators: The parameter is the contact's alias
#: ../js/ui/components/telepathyClient.js:1207
#: ../js/ui/components/telepathyClient.js:1206
#, c-format
msgid "%s would like permission to see when you are online"
msgstr "%s solicita permiso para ver cuándo está en línea"
#: ../js/ui/components/telepathyClient.js:1299
#: ../js/ui/components/telepathyClient.js:1298
msgid "Network error"
msgstr "Error de la red"
#: ../js/ui/components/telepathyClient.js:1301
#: ../js/ui/components/telepathyClient.js:1300
msgid "Authentication failed"
msgstr "Falló la autenticación"
#: ../js/ui/components/telepathyClient.js:1303
#: ../js/ui/components/telepathyClient.js:1302
msgid "Encryption error"
msgstr "Error de cifrado"
#: ../js/ui/components/telepathyClient.js:1305
#: ../js/ui/components/telepathyClient.js:1304
msgid "Certificate not provided"
msgstr "Certificado no proporcionado"
#: ../js/ui/components/telepathyClient.js:1307
#: ../js/ui/components/telepathyClient.js:1306
msgid "Certificate untrusted"
msgstr "No se confía en el certificado"
#: ../js/ui/components/telepathyClient.js:1309
#: ../js/ui/components/telepathyClient.js:1308
msgid "Certificate expired"
msgstr "Certificado caducado"
#: ../js/ui/components/telepathyClient.js:1311
#: ../js/ui/components/telepathyClient.js:1310
msgid "Certificate not activated"
msgstr "Certificado no activado"
#: ../js/ui/components/telepathyClient.js:1313
#: ../js/ui/components/telepathyClient.js:1312
msgid "Certificate hostname mismatch"
msgstr "El nombre del servidor dle certificado no coincide"
#: ../js/ui/components/telepathyClient.js:1315
#: ../js/ui/components/telepathyClient.js:1314
msgid "Certificate fingerprint mismatch"
msgstr "La huella del certificado no coincide"
#: ../js/ui/components/telepathyClient.js:1317
#: ../js/ui/components/telepathyClient.js:1316
msgid "Certificate self-signed"
msgstr "Certificado autofirmado"
#: ../js/ui/components/telepathyClient.js:1319
#: ../js/ui/components/telepathyClient.js:1318
msgid "Status is set to offline"
msgstr "El estado está establecido a «desconectado»"
#: ../js/ui/components/telepathyClient.js:1321
#: ../js/ui/components/telepathyClient.js:1320
msgid "Encryption is not available"
msgstr "El cifrado no está disponible"
#: ../js/ui/components/telepathyClient.js:1323
#: ../js/ui/components/telepathyClient.js:1322
msgid "Certificate is invalid"
msgstr "El certificado no es válido"
#: ../js/ui/components/telepathyClient.js:1325
#: ../js/ui/components/telepathyClient.js:1324
msgid "Connection has been refused"
msgstr "Se ha rechazado la conexión"
#: ../js/ui/components/telepathyClient.js:1327
#: ../js/ui/components/telepathyClient.js:1326
msgid "Connection can't be established"
msgstr "No se puede establecer la conexión"
#: ../js/ui/components/telepathyClient.js:1329
#: ../js/ui/components/telepathyClient.js:1328
msgid "Connection has been lost"
msgstr "Se ha perdido la conexión"
#: ../js/ui/components/telepathyClient.js:1331
#: ../js/ui/components/telepathyClient.js:1330
msgid "This account is already connected to the server"
msgstr "Esta cuenta ya está conectada al servidor"
#: ../js/ui/components/telepathyClient.js:1333
#: ../js/ui/components/telepathyClient.js:1332
msgid ""
"Connection has been replaced by a new connection using the same resource"
msgstr ""
"Se ha sustituido la conexión por una nueva conexión usando el mismo recurso"
#: ../js/ui/components/telepathyClient.js:1335
#: ../js/ui/components/telepathyClient.js:1334
msgid "The account already exists on the server"
msgstr "La cuenta ya existe en el servidor"
#: ../js/ui/components/telepathyClient.js:1337
#: ../js/ui/components/telepathyClient.js:1336
msgid "Server is currently too busy to handle the connection"
msgstr ""
"Actualmente el servidor está muy ocupado intentando gestionar la conexión"
#: ../js/ui/components/telepathyClient.js:1339
#: ../js/ui/components/telepathyClient.js:1338
msgid "Certificate has been revoked"
msgstr "Se ha revocado el certificado"
#: ../js/ui/components/telepathyClient.js:1341
#: ../js/ui/components/telepathyClient.js:1340
msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr ""
"El certificado usa un algoritmo de cifrado inseguro o es criptográficamente "
"débil"
#: ../js/ui/components/telepathyClient.js:1343
#: ../js/ui/components/telepathyClient.js:1342
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
@@ -1007,22 +1001,22 @@ msgstr ""
"certificado del servidor exceden los límites impuestos por la biblioteca de "
"criptografía"
#: ../js/ui/components/telepathyClient.js:1345
#: ../js/ui/components/telepathyClient.js:1344
msgid "Internal error"
msgstr "Error interno"
#. translators: argument is the account name, like
#. * name@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1355
#: ../js/ui/components/telepathyClient.js:1354
#, c-format
msgid "Unable to connect to %s"
msgstr "No se pudo conectar a %s"
#: ../js/ui/components/telepathyClient.js:1360
#: ../js/ui/components/telepathyClient.js:1359
msgid "View account"
msgstr "Ver cuenta"
#: ../js/ui/components/telepathyClient.js:1399
#: ../js/ui/components/telepathyClient.js:1398
msgid "Unknown reason"
msgstr "Razón desconocida"
@@ -1036,26 +1030,26 @@ msgstr "Mostrar aplicaciones"
#. Translators: this is the name of the dock/favorites area on
#. the left of the overview
#: ../js/ui/dash.js:439
#: ../js/ui/dash.js:435
msgid "Dash"
msgstr "Tablero"
#: ../js/ui/dateMenu.js:85
#: ../js/ui/dateMenu.js:86
msgid "Open Calendar"
msgstr "Abrir calendario"
#: ../js/ui/dateMenu.js:89
#: ../js/ui/dateMenu.js:90
msgid "Open Clocks"
msgstr "Abrir Relojes"
#: ../js/ui/dateMenu.js:96
#: ../js/ui/dateMenu.js:97
msgid "Date & Time Settings"
msgstr "Configuración de hora y fecha"
#. Translators: This is the date format to use when the calendar popup is
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
#.
#: ../js/ui/dateMenu.js:201
#: ../js/ui/dateMenu.js:208
msgid "%A %B %e, %Y"
msgstr "%A, %e de %B de %Y"
@@ -1159,7 +1153,7 @@ msgstr "Instalar"
msgid "Download and install '%s' from extensions.gnome.org?"
msgstr "¿Descargar e instalar «%s» desde extensions.gnome.org?"
#: ../js/ui/keyboard.js:619 ../js/ui/status/keyboard.js:333
#: ../js/ui/keyboard.js:619 ../js/ui/status/keyboard.js:314
#: ../js/ui/status/power.js:211
msgid "Keyboard"
msgstr "Teclado"
@@ -1228,15 +1222,15 @@ msgstr "Limpiar mensajes"
msgid "Notification Settings"
msgstr "Configuración de las notificaciones"
#: ../js/ui/messageTray.js:1711
#: ../js/ui/messageTray.js:1707
msgid "No Messages"
msgstr "No hay mensajes"
#: ../js/ui/messageTray.js:1784
#: ../js/ui/messageTray.js:1780
msgid "Message Tray"
msgstr "Bandeja de mensajes"
#: ../js/ui/messageTray.js:2811
#: ../js/ui/messageTray.js:2800
msgid "System Information"
msgstr "Información del sistema"
@@ -1245,7 +1239,7 @@ msgctxt "program"
msgid "Unknown"
msgstr "Desconocido"
#: ../js/ui/overviewControls.js:474 ../js/ui/screenShield.js:150
#: ../js/ui/overviewControls.js:472 ../js/ui/screenShield.js:150
#, c-format
msgid "%d new message"
msgid_plural "%d new messages"
@@ -1268,17 +1262,17 @@ msgstr "Vista general"
msgid "Type to search…"
msgstr "Escribir para buscar…"
#: ../js/ui/panel.js:567
#: ../js/ui/panel.js:642
msgid "Quit"
msgstr "Salir"
#. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:618
#: ../js/ui/panel.js:693
msgid "Activities"
msgstr "Actividades"
#: ../js/ui/panel.js:914
#: ../js/ui/panel.js:989
msgid "Top Bar"
msgstr "Barra superior"
@@ -1287,7 +1281,7 @@ msgstr "Barra superior"
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
#. switches containing "◯" and "|"). Other values will
#. simply result in invisible toggle switches.
#: ../js/ui/popupMenu.js:549
#: ../js/ui/popupMenu.js:738
msgid "toggle-switch-us"
msgstr "toggle-switch-intl"
@@ -1312,7 +1306,7 @@ msgid_plural "%d new notifications"
msgstr[0] "%d notificación nueva"
msgstr[1] "%d notificaciones nuevas"
#: ../js/ui/screenShield.js:449 ../js/ui/userMenu.js:759
#: ../js/ui/screenShield.js:449 ../js/ui/userMenu.js:807
msgid "Lock"
msgstr "Bloquear"
@@ -1335,11 +1329,11 @@ msgstr "No se pudo bloquear"
msgid "Lock was blocked by an application"
msgstr "Una aplicación impidió el bloqueo"
#: ../js/ui/searchDisplay.js:445
#: ../js/ui/searchDisplay.js:453
msgid "Searching…"
msgstr "Buscando…"
#: ../js/ui/searchDisplay.js:489
#: ../js/ui/searchDisplay.js:497
msgid "No results."
msgstr "No se encontraron resultados."
@@ -1367,7 +1361,7 @@ msgstr "Contraseña"
msgid "Remember Password"
msgstr "Recordar contraseña"
#: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:108
#: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:109
msgid "Unlock"
msgstr "Desbloquear"
@@ -1420,9 +1414,9 @@ msgid "Large Text"
msgstr "Texto grande"
#: ../js/ui/status/bluetooth.js:28 ../js/ui/status/bluetooth.js:32
#: ../js/ui/status/bluetooth.js:290 ../js/ui/status/bluetooth.js:327
#: ../js/ui/status/bluetooth.js:355 ../js/ui/status/bluetooth.js:391
#: ../js/ui/status/bluetooth.js:422 ../js/ui/status/network.js:713
#: ../js/ui/status/bluetooth.js:289 ../js/ui/status/bluetooth.js:321
#: ../js/ui/status/bluetooth.js:357 ../js/ui/status/bluetooth.js:388
#: ../js/ui/status/network.js:739
msgid "Bluetooth"
msgstr "Bluetooth"
@@ -1443,115 +1437,107 @@ msgid "Bluetooth Settings"
msgstr "Configuración de Bluetooth"
#. TRANSLATORS: this means that bluetooth was disabled by hardware rfkill
#: ../js/ui/status/bluetooth.js:105 ../js/ui/status/network.js:140
#: ../js/ui/status/bluetooth.js:104 ../js/ui/status/network.js:142
msgid "hardware disabled"
msgstr "hardware desactivado"
#: ../js/ui/status/bluetooth.js:198
#: ../js/ui/status/bluetooth.js:197
msgid "Connection"
msgstr "Conexión"
#: ../js/ui/status/bluetooth.js:209 ../js/ui/status/network.js:399
#: ../js/ui/status/bluetooth.js:208 ../js/ui/status/network.js:404
msgid "disconnecting..."
msgstr "deconectando…"
#: ../js/ui/status/bluetooth.js:222 ../js/ui/status/network.js:405
#: ../js/ui/status/network.js:1298
#: ../js/ui/status/bluetooth.js:221 ../js/ui/status/network.js:410
#: ../js/ui/status/network.js:1343
msgid "connecting..."
msgstr "conectando…"
#: ../js/ui/status/bluetooth.js:240
#: ../js/ui/status/bluetooth.js:239
msgid "Send Files…"
msgstr "Enviar archivos…"
#: ../js/ui/status/bluetooth.js:247
#: ../js/ui/status/bluetooth.js:246
msgid "Keyboard Settings"
msgstr "Configuración del teclado"
#: ../js/ui/status/bluetooth.js:250
#: ../js/ui/status/bluetooth.js:249
msgid "Mouse Settings"
msgstr "Configuración del ratón…"
#: ../js/ui/status/bluetooth.js:255 ../js/ui/status/volume.js:313
#: ../js/ui/status/bluetooth.js:254 ../js/ui/status/volume.js:316
msgid "Sound Settings"
msgstr "Configuración del sonido"
#: ../js/ui/status/bluetooth.js:328 ../js/ui/status/bluetooth.js:356
#: ../js/ui/status/bluetooth.js:322
#, c-format
msgid "Authorization request from %s"
msgstr "Solicitud de autorización de %s"
#: ../js/ui/status/bluetooth.js:334 ../js/ui/status/bluetooth.js:399
#: ../js/ui/status/bluetooth.js:430
#, c-format
msgid "Device %s wants to pair with this computer"
msgstr "El dispositivo «%s» quiere emparejarse con este equipo"
#: ../js/ui/status/bluetooth.js:336
msgid "Allow"
msgstr "Permitir"
#: ../js/ui/status/bluetooth.js:337
msgid "Deny"
msgstr "Denegar"
#: ../js/ui/status/bluetooth.js:362
#: ../js/ui/status/bluetooth.js:328
#, c-format
msgid "Device %s wants access to the service '%s'"
msgstr "El dispositivo %s quiere acceder al servicio «%s»"
#: ../js/ui/status/bluetooth.js:364
#: ../js/ui/status/bluetooth.js:330
msgid "Always grant access"
msgstr "Conceder acceso siempre"
#: ../js/ui/status/bluetooth.js:365
#: ../js/ui/status/bluetooth.js:331
msgid "Grant this time only"
msgstr "Conceder sólo esta vez"
#: ../js/ui/status/bluetooth.js:366
#: ../js/ui/status/bluetooth.js:332
msgid "Reject"
msgstr "Rechazar"
#. Translators: argument is the device short name
#: ../js/ui/status/bluetooth.js:393
#: ../js/ui/status/bluetooth.js:359
#, c-format
msgid "Pairing confirmation for %s"
msgstr "Confirmación de emparejamiento para «%s»"
#: ../js/ui/status/bluetooth.js:400
#: ../js/ui/status/bluetooth.js:365 ../js/ui/status/bluetooth.js:396
#, c-format
msgid "Device %s wants to pair with this computer"
msgstr "El dispositivo «%s» quiere emparejarse con este equipo"
#: ../js/ui/status/bluetooth.js:366
#, c-format
#| msgid "Please confirm whether the PIN '%06d' matches the one on the device."
msgid ""
"Please confirm whether the Passkey '%06d' matches the one on the device."
msgstr ""
"Confirme que la clave mostrada en «%06d» coincide con la del dispositivo."
#. Translators: this is the verb, not the noun
#: ../js/ui/status/bluetooth.js:403
#: ../js/ui/status/bluetooth.js:369
msgid "Matches"
msgstr "Coincide"
#: ../js/ui/status/bluetooth.js:404
#: ../js/ui/status/bluetooth.js:370
msgid "Does not match"
msgstr "No coincide"
#: ../js/ui/status/bluetooth.js:423
#: ../js/ui/status/bluetooth.js:389
#, c-format
msgid "Pairing request for %s"
msgstr "Solicitud de emparejamiento para «%s»"
#: ../js/ui/status/bluetooth.js:431
#: ../js/ui/status/bluetooth.js:397
msgid "Please enter the PIN mentioned on the device."
msgstr "Introduzca el PIN mencionado en el dispositivo."
#: ../js/ui/status/bluetooth.js:448
#: ../js/ui/status/bluetooth.js:414
msgid "OK"
msgstr "Aceptar"
#: ../js/ui/status/keyboard.js:396
#: ../js/ui/status/keyboard.js:368
msgid "Show Keyboard Layout"
msgstr "Mostrar la distribución del teclado"
#: ../js/ui/status/keyboard.js:401
#: ../js/ui/status/keyboard.js:373
msgid "Region & Language Settings"
msgstr "Configuración de región e idioma"
@@ -1563,81 +1549,87 @@ msgstr "Volumen, red, batería"
msgid "<unknown>"
msgstr "<desconocido>"
#: ../js/ui/status/network.js:125
#: ../js/ui/status/network.js:127
msgid "Wi-Fi"
msgstr "Wi-Fi"
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
#: ../js/ui/status/network.js:162
#: ../js/ui/status/network.js:164
msgid "disabled"
msgstr "desactivada"
#. Translators: this is for network devices that are physically present but are not
#. under NetworkManager's control (and thus cannot be used in the menu)
#: ../js/ui/status/network.js:397
#: ../js/ui/status/network.js:402
msgid "unmanaged"
msgstr "no gestionada"
#. Translators: this is for network connections that require some kind of key or password
#: ../js/ui/status/network.js:408 ../js/ui/status/network.js:1301
#: ../js/ui/status/network.js:413 ../js/ui/status/network.js:1346
msgid "authentication required"
msgstr "se necesita autenticación"
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing
#: ../js/ui/status/network.js:419
#: ../js/ui/status/network.js:423
msgid "firmware missing"
msgstr "falta el «firmware»"
#. Translators: this is for wired network devices that are physically disconnected
#: ../js/ui/status/network.js:430
msgid "cable unplugged"
msgstr "cable desconectado"
#. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage
#: ../js/ui/status/network.js:423
#: ../js/ui/status/network.js:435
msgid "unavailable"
msgstr "no disponible"
#: ../js/ui/status/network.js:425 ../js/ui/status/network.js:1303
#: ../js/ui/status/network.js:437 ../js/ui/status/network.js:1348
msgid "connection failed"
msgstr "falló la conexión"
#: ../js/ui/status/network.js:478 ../js/ui/status/network.js:1190
#: ../js/ui/status/network.js:490 ../js/ui/status/network.js:1236
#: ../js/ui/status/network.js:1424
msgid "More…"
msgstr "Más…"
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
#. and we cannot access its settings (including the name)
#: ../js/ui/status/network.js:506 ../js/ui/status/network.js:1142
#: ../js/ui/status/network.js:518 ../js/ui/status/network.js:1191
msgid "Connected (private)"
msgstr "Conectada (privada)"
#: ../js/ui/status/network.js:572
#: ../js/ui/status/network.js:597
msgid "Wired"
msgstr "Cableada"
#: ../js/ui/status/network.js:592
#: ../js/ui/status/network.js:611
msgid "Mobile broadband"
msgstr "Banda ancha móvil"
#: ../js/ui/status/network.js:1474
#: ../js/ui/status/network.js:1522
msgid "Enable networking"
msgstr "Activar red"
#: ../js/ui/status/network.js:1522
#: ../js/ui/status/network.js:1583
msgid "Network Settings"
msgstr "Configuración de la red"
#: ../js/ui/status/network.js:1539
#: ../js/ui/status/network.js:1600
msgid "Network Manager"
msgstr "Gestor de la red"
#: ../js/ui/status/network.js:1623
#: ../js/ui/status/network.js:1690
msgid "Connection failed"
msgstr "Falló la conexión"
#: ../js/ui/status/network.js:1624
#: ../js/ui/status/network.js:1691
msgid "Activation of network connection failed"
msgstr "Falló la activación de la conexión de red"
#: ../js/ui/status/network.js:1937
#: ../js/ui/status/network.js:2047
msgid "Networking is disabled"
msgstr "La red está desactivada"
@@ -1738,72 +1730,72 @@ msgctxt "device"
msgid "Unknown"
msgstr "Desconocido"
#: ../js/ui/status/volume.js:121
#: ../js/ui/status/volume.js:124
msgid "Volume changed"
msgstr "Volumen modificado"
#. Translators: This is the label for audio volume
#: ../js/ui/status/volume.js:246 ../js/ui/status/volume.js:294
#: ../js/ui/status/volume.js:249 ../js/ui/status/volume.js:297
msgid "Volume"
msgstr "Volumen"
#: ../js/ui/status/volume.js:255
#: ../js/ui/status/volume.js:258
msgid "Microphone"
msgstr "Micrófono"
#: ../js/ui/unlockDialog.js:119
#: ../js/ui/unlockDialog.js:120
msgid "Log in as another user"
msgstr "Iniciar sesión como otro usuario"
#: ../js/ui/unlockDialog.js:140
#: ../js/ui/unlockDialog.js:141
msgid "Unlock Window"
msgstr "Desbloquear ventana"
#: ../js/ui/userMenu.js:149
#: ../js/ui/userMenu.js:193
msgid "Available"
msgstr "Disponible"
#: ../js/ui/userMenu.js:152
#: ../js/ui/userMenu.js:196
msgid "Busy"
msgstr "Ocupado"
#: ../js/ui/userMenu.js:155
#: ../js/ui/userMenu.js:199
msgid "Invisible"
msgstr "Invisible"
#: ../js/ui/userMenu.js:158
#: ../js/ui/userMenu.js:202
msgid "Away"
msgstr "Ausente"
#: ../js/ui/userMenu.js:161
#: ../js/ui/userMenu.js:205
msgid "Idle"
msgstr "Inactivo"
#: ../js/ui/userMenu.js:164
#: ../js/ui/userMenu.js:208
msgid "Offline"
msgstr "Desconectado"
#: ../js/ui/userMenu.js:736
#: ../js/ui/userMenu.js:781
msgid "Notifications"
msgstr "Notificaciones"
#: ../js/ui/userMenu.js:749
#: ../js/ui/userMenu.js:797
msgid "Switch User"
msgstr "Cambiar de usuario"
#: ../js/ui/userMenu.js:754
#: ../js/ui/userMenu.js:802
msgid "Log Out"
msgstr "Cerrar la sesión"
#: ../js/ui/userMenu.js:774
#: ../js/ui/userMenu.js:822
msgid "Install Updates & Restart"
msgstr "Instalar actualizaciones y reiniciar"
#: ../js/ui/userMenu.js:792
#: ../js/ui/userMenu.js:840
msgid "Your chat status will be set to busy"
msgstr "Su estado del chat se establecerá a «ocupado»"
#: ../js/ui/userMenu.js:793
#: ../js/ui/userMenu.js:841
msgid ""
"Notifications are now disabled, including chat messages. Your online status "
"has been adjusted to let others know that you might not see their messages."
@@ -1812,22 +1804,22 @@ msgstr ""
"chat. Su estado en línea se ha ajustado para que otros sepan que puede no "
"leer sus mensajes."
#: ../js/ui/userMenu.js:834
#: ../js/ui/userMenu.js:888
msgid "Other users are logged in."
msgstr "Hay otros usuarios con la sesión iniciada"
#: ../js/ui/userMenu.js:839
#: ../js/ui/userMenu.js:893
msgid "Shutting down might cause them to lose unsaved work."
msgstr "Apagar puede hacer que pierdan el trabajo que no hayan guardado."
#. Translators: Remote here refers to a remote session, like a ssh login
#: ../js/ui/userMenu.js:867
#: ../js/ui/userMenu.js:921
#, c-format
msgid "%s (remote)"
msgstr "%s (remoto)"
#. Translators: Console here refers to a tty like a VT console
#: ../js/ui/userMenu.js:870
#: ../js/ui/userMenu.js:924
#, c-format
msgid "%s (console)"
msgstr "%s (consola)"
@@ -1885,21 +1877,21 @@ msgstr[1] "%u entradas"
msgid "System Sounds"
msgstr "Sonidos del sistema"
#: ../src/main.c:353
#: ../src/main.c:372
msgid "Print version"
msgstr "Imprimir versión"
#: ../src/main.c:359
#: ../src/main.c:378
msgid "Mode used by GDM for login screen"
msgstr "Modo usado por GDM para la pantalla de inicio"
#: ../src/main.c:365
#: ../src/main.c:384
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
msgstr ""
"Usar un modo específico, por ejemplo, «gdm» para la pantalla de inicio de "
"sesión"
#: ../src/main.c:371
#: ../src/main.c:390
msgid "List possible modes"
msgstr "Listar los modos posibles"
@@ -1920,9 +1912,6 @@ msgstr "La contraseña no puede estar vacía"
msgid "Authentication dialog was dismissed by the user"
msgstr "El usuario rechazó el diálogo de autenticación"
#~ msgid "cable unplugged"
#~ msgstr "cable desconectado"
#~ msgid "Whether to collect stats about applications usage"
#~ msgstr ""
#~ "Indica si se deben recolectar estadísticas acerca del uso de las "
@@ -2039,6 +2028,9 @@ msgstr "El usuario rechazó el diálogo de autenticación"
#~ msgid "System Settings"
#~ msgstr "Configuración del sistema"
#~ msgid "Switch Session"
#~ msgstr "Cambiar de sesión"
#~ msgid "disabled OpenSearch providers"
#~ msgstr "proveedores OpenSearch desactivados"

343
po/gl.po
View File

@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-06-28 01:33+0200\n"
"PO-Revision-Date: 2013-06-28 01:35+0200\n"
"POT-Creation-Date: 2013-05-31 01:03+0200\n"
"PO-Revision-Date: 2013-05-31 01:04+0200\n"
"Last-Translator: Fran Dieguez <frandieguez@gnome.org>\n"
"Language-Team: gnome-l10n-gl@gnome.org\n"
"Language: gl\n"
@@ -369,41 +369,37 @@ msgid "Select an extension to configure using the combobox above."
msgstr ""
"Seleccione unha extensión que configurar usando a caixa combinada de arriba."
#: ../js/gdm/loginDialog.js:308
msgid "Choose Session"
msgstr "Escolla unha sesión"
#: ../js/gdm/loginDialog.js:326
msgid "Session"
msgstr "Sesión"
#: ../js/gdm/loginDialog.js:371
msgid "Session"
msgstr "Sesión"
#. translators: this message is shown below the user list on the
#. login screen. It can be activated to reveal an entry for
#. manually entering the username.
#: ../js/gdm/loginDialog.js:528
#: ../js/gdm/loginDialog.js:601
msgid "Not listed?"
msgstr "Non está na lista?"
#: ../js/gdm/loginDialog.js:810 ../js/ui/components/networkAgent.js:137
#: ../js/gdm/loginDialog.js:776 ../js/ui/components/networkAgent.js:137
#: ../js/ui/components/polkitAgent.js:161 ../js/ui/endSessionDialog.js:376
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/bluetooth.js:449 ../js/ui/unlockDialog.js:95
#: ../js/ui/userMenu.js:884
#: ../js/ui/status/bluetooth.js:415 ../js/ui/unlockDialog.js:96
#: ../js/ui/userMenu.js:938
msgid "Cancel"
msgstr "Cancelar"
#: ../js/gdm/loginDialog.js:833
#: ../js/gdm/loginDialog.js:791
msgctxt "button"
msgid "Sign In"
msgstr "Iniciar sesión"
#: ../js/gdm/loginDialog.js:833
#: ../js/gdm/loginDialog.js:791
msgid "Next"
msgstr "Seguinte"
#. Translators: this message is shown below the username entry field
#. to clue the user in on how to login to the local network realm
#: ../js/gdm/loginDialog.js:934
#: ../js/gdm/loginDialog.js:888
#, c-format
msgid "(e.g., user or %s)"
msgstr "(p.ex., usuario ou %s)"
@@ -411,12 +407,12 @@ msgstr "(p.ex., usuario ou %s)"
#. TTLS and PEAP are actually much more complicated, but this complication
#. is not visible here since we only care about phase2 authentication
#. (and don't even care of which one)
#: ../js/gdm/loginDialog.js:938 ../js/ui/components/networkAgent.js:260
#: ../js/gdm/loginDialog.js:892 ../js/ui/components/networkAgent.js:260
#: ../js/ui/components/networkAgent.js:278
msgid "Username: "
msgstr "Nome de usuario: "
#: ../js/gdm/loginDialog.js:1205
#: ../js/gdm/loginDialog.js:1158
msgid "Login Window"
msgstr "Xanela de inicio de sesión"
@@ -425,8 +421,8 @@ msgstr "Xanela de inicio de sesión"
msgid "Power"
msgstr "Apagar"
#: ../js/gdm/powerMenu.js:93 ../js/ui/userMenu.js:651 ../js/ui/userMenu.js:655
#: ../js/ui/userMenu.js:768
#: ../js/gdm/powerMenu.js:93 ../js/ui/userMenu.js:696 ../js/ui/userMenu.js:700
#: ../js/ui/userMenu.js:816
msgid "Suspend"
msgstr "Suspender"
@@ -434,18 +430,18 @@ msgstr "Suspender"
msgid "Restart"
msgstr "Reiniciar"
#: ../js/gdm/powerMenu.js:103 ../js/ui/userMenu.js:653
#: ../js/ui/userMenu.js:655 ../js/ui/userMenu.js:767 ../js/ui/userMenu.js:888
#: ../js/gdm/powerMenu.js:103 ../js/ui/userMenu.js:698
#: ../js/ui/userMenu.js:700 ../js/ui/userMenu.js:815 ../js/ui/userMenu.js:942
msgid "Power Off"
msgstr "Apagar"
#: ../js/gdm/util.js:248
#: ../js/gdm/util.js:247
msgid "Authentication error"
msgstr "Erro de autenticación"
#. Translators: this message is shown below the password entry field
#. to indicate the user can swipe their finger instead
#: ../js/gdm/util.js:365
#: ../js/gdm/util.js:364
msgid "(or swipe finger)"
msgstr "(ou pase o dedo)"
@@ -464,23 +460,23 @@ msgstr "Non foi posíbel analizar a orde:"
msgid "Execution of '%s' failed:"
msgstr "Produciuse un fallo na execución de «%s»:"
#: ../js/ui/appDisplay.js:397
#: ../js/ui/appDisplay.js:361
msgid "Frequent"
msgstr "Frecuentes"
#: ../js/ui/appDisplay.js:404
#: ../js/ui/appDisplay.js:368
msgid "All"
msgstr "Todos"
#: ../js/ui/appDisplay.js:996
#: ../js/ui/appDisplay.js:960
msgid "New Window"
msgstr "Xanela nova"
#: ../js/ui/appDisplay.js:999 ../js/ui/dash.js:284
#: ../js/ui/appDisplay.js:963 ../js/ui/dash.js:284
msgid "Remove from Favorites"
msgstr "Retirar dos marcadores"
#: ../js/ui/appDisplay.js:1000
#: ../js/ui/appDisplay.js:964
msgid "Add to Favorites"
msgstr "Engadir aos favoritos"
@@ -494,7 +490,7 @@ msgstr "%s foi engadido aos seus favoritos."
msgid "%s has been removed from your favorites."
msgstr "%s retirouse dos seus marcadores."
#: ../js/ui/backgroundMenu.js:19 ../js/ui/userMenu.js:744
#: ../js/ui/backgroundMenu.js:19 ../js/ui/userMenu.js:789
msgid "Settings"
msgstr "Preferencias"
@@ -619,35 +615,35 @@ msgid "S"
msgstr "S"
#. Translators: Text to show if there are no events
#: ../js/ui/calendar.js:750
#: ../js/ui/calendar.js:735
msgid "Nothing Scheduled"
msgstr "Nada programado"
#. Translators: Shown on calendar heading when selected day occurs on current year
#: ../js/ui/calendar.js:768
#: ../js/ui/calendar.js:751
msgctxt "calendar heading"
msgid "%A, %B %d"
msgstr "%A, %d de %B"
#. Translators: Shown on calendar heading when selected day occurs on different year
#: ../js/ui/calendar.js:771
#: ../js/ui/calendar.js:754
msgctxt "calendar heading"
msgid "%A, %B %d, %Y"
msgstr "%A, %d de %B de %Y"
#: ../js/ui/calendar.js:782
#: ../js/ui/calendar.js:764
msgid "Today"
msgstr "Hoxe"
#: ../js/ui/calendar.js:786
#: ../js/ui/calendar.js:768
msgid "Tomorrow"
msgstr "Mañá"
#: ../js/ui/calendar.js:797
#: ../js/ui/calendar.js:779
msgid "This week"
msgstr "Esta semana"
#: ../js/ui/calendar.js:805
#: ../js/ui/calendar.js:787
msgid "Next week"
msgstr "A vindeira semana"
@@ -836,14 +832,14 @@ msgstr "<b>%d</b> de <b>%B</b> de <b>%Y</b>, <b>%H:%M</b> "
#. Translators: this is the other person changing their old IM name to their new
#. IM name.
#: ../js/ui/components/telepathyClient.js:986
#: ../js/ui/components/telepathyClient.js:985
#, c-format
msgid "%s is now known as %s"
msgstr "Agora %s chámase %s"
#. translators: argument is a room name like
#. * room@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1089
#: ../js/ui/components/telepathyClient.js:1088
#, c-format
msgid "Invitation to %s"
msgstr "Convite a %s"
@@ -851,38 +847,38 @@ msgstr "Convite a %s"
#. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example.
#: ../js/ui/components/telepathyClient.js:1097
#: ../js/ui/components/telepathyClient.js:1096
#, c-format
msgid "%s is inviting you to join %s"
msgstr "%s estalle convidando a unirse a %s"
#: ../js/ui/components/telepathyClient.js:1099
#: ../js/ui/components/telepathyClient.js:1138
#: ../js/ui/components/telepathyClient.js:1178
#: ../js/ui/components/telepathyClient.js:1241
#: ../js/ui/components/telepathyClient.js:1098
#: ../js/ui/components/telepathyClient.js:1137
#: ../js/ui/components/telepathyClient.js:1177
#: ../js/ui/components/telepathyClient.js:1240
msgid "Decline"
msgstr "Rexeitar"
#: ../js/ui/components/telepathyClient.js:1100
#: ../js/ui/components/telepathyClient.js:1179
#: ../js/ui/components/telepathyClient.js:1242
#: ../js/ui/components/telepathyClient.js:1099
#: ../js/ui/components/telepathyClient.js:1178
#: ../js/ui/components/telepathyClient.js:1241
msgid "Accept"
msgstr "Aceptar"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1130
#: ../js/ui/components/telepathyClient.js:1129
#, c-format
msgid "Video call from %s"
msgstr "Videochamada de %s"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1133
#: ../js/ui/components/telepathyClient.js:1132
#, c-format
msgid "Call from %s"
msgstr "Chamada de %s"
#. translators: this is a button label (verb), not a noun
#: ../js/ui/components/telepathyClient.js:1140
#: ../js/ui/components/telepathyClient.js:1139
msgid "Answer"
msgstr "Responder"
@@ -891,112 +887,112 @@ msgstr "Responder"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#.
#: ../js/ui/components/telepathyClient.js:1172
#: ../js/ui/components/telepathyClient.js:1171
#, c-format
msgid "%s is sending you %s"
msgstr "%s esta enviándolle %s"
#. To translators: The parameter is the contact's alias
#: ../js/ui/components/telepathyClient.js:1207
#: ../js/ui/components/telepathyClient.js:1206
#, c-format
msgid "%s would like permission to see when you are online"
msgstr "%s solicítalle permiso para ver cando está en liña"
#: ../js/ui/components/telepathyClient.js:1299
#: ../js/ui/components/telepathyClient.js:1298
msgid "Network error"
msgstr "Erro da rede"
#: ../js/ui/components/telepathyClient.js:1301
#: ../js/ui/components/telepathyClient.js:1300
msgid "Authentication failed"
msgstr "Fallou a autenticación"
#: ../js/ui/components/telepathyClient.js:1303
#: ../js/ui/components/telepathyClient.js:1302
msgid "Encryption error"
msgstr "Erro de cifrado"
#: ../js/ui/components/telepathyClient.js:1305
#: ../js/ui/components/telepathyClient.js:1304
msgid "Certificate not provided"
msgstr "Certificado non fornecido"
#: ../js/ui/components/telepathyClient.js:1307
#: ../js/ui/components/telepathyClient.js:1306
msgid "Certificate untrusted"
msgstr "Non se confía no certificado"
#: ../js/ui/components/telepathyClient.js:1309
#: ../js/ui/components/telepathyClient.js:1308
msgid "Certificate expired"
msgstr "Certificado caducado"
#: ../js/ui/components/telepathyClient.js:1311
#: ../js/ui/components/telepathyClient.js:1310
msgid "Certificate not activated"
msgstr "Certificado non activado"
#: ../js/ui/components/telepathyClient.js:1313
#: ../js/ui/components/telepathyClient.js:1312
msgid "Certificate hostname mismatch"
msgstr "O nome do servidor do certificado non coincide"
#: ../js/ui/components/telepathyClient.js:1315
#: ../js/ui/components/telepathyClient.js:1314
msgid "Certificate fingerprint mismatch"
msgstr "A pegada do certificado non coincide"
#: ../js/ui/components/telepathyClient.js:1317
#: ../js/ui/components/telepathyClient.js:1316
msgid "Certificate self-signed"
msgstr "Certificado autoasinado"
#: ../js/ui/components/telepathyClient.js:1319
#: ../js/ui/components/telepathyClient.js:1318
msgid "Status is set to offline"
msgstr "O estado está definido a «desconectado»"
#: ../js/ui/components/telepathyClient.js:1321
#: ../js/ui/components/telepathyClient.js:1320
msgid "Encryption is not available"
msgstr "O cifrado non está dispoñíbel"
#: ../js/ui/components/telepathyClient.js:1323
#: ../js/ui/components/telepathyClient.js:1322
msgid "Certificate is invalid"
msgstr "O certificado non é válido"
#: ../js/ui/components/telepathyClient.js:1325
#: ../js/ui/components/telepathyClient.js:1324
msgid "Connection has been refused"
msgstr "Rexeitouse a conexión"
#: ../js/ui/components/telepathyClient.js:1327
#: ../js/ui/components/telepathyClient.js:1326
msgid "Connection can't be established"
msgstr "Non é posíbel estabelecer a conexión"
#: ../js/ui/components/telepathyClient.js:1329
#: ../js/ui/components/telepathyClient.js:1328
msgid "Connection has been lost"
msgstr "Perdeuse a conexión"
#: ../js/ui/components/telepathyClient.js:1331
#: ../js/ui/components/telepathyClient.js:1330
msgid "This account is already connected to the server"
msgstr "Esta cuenta xa está conectada ao servidor"
#: ../js/ui/components/telepathyClient.js:1333
#: ../js/ui/components/telepathyClient.js:1332
msgid ""
"Connection has been replaced by a new connection using the same resource"
msgstr ""
"Substituíuse a conexión por unha nova conexión empregando o mesmo recurso"
#: ../js/ui/components/telepathyClient.js:1335
#: ../js/ui/components/telepathyClient.js:1334
msgid "The account already exists on the server"
msgstr "Esta conta xa existe no servidor"
#: ../js/ui/components/telepathyClient.js:1337
#: ../js/ui/components/telepathyClient.js:1336
msgid "Server is currently too busy to handle the connection"
msgstr ""
"Nestes intres o servidor está moi ocupado tentando xestionar a conexión"
#: ../js/ui/components/telepathyClient.js:1339
#: ../js/ui/components/telepathyClient.js:1338
msgid "Certificate has been revoked"
msgstr "Revogouse o certificado"
#: ../js/ui/components/telepathyClient.js:1341
#: ../js/ui/components/telepathyClient.js:1340
msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr ""
"O certificado usa un algoritmo de cifrado inseguro ou é criptográficamente "
"débil"
#: ../js/ui/components/telepathyClient.js:1343
#: ../js/ui/components/telepathyClient.js:1342
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
@@ -1005,22 +1001,22 @@ msgstr ""
"certificado do servidor excede os límites impostos pola biblioteca de "
"criptografía."
#: ../js/ui/components/telepathyClient.js:1345
#: ../js/ui/components/telepathyClient.js:1344
msgid "Internal error"
msgstr "Erro interno"
#. translators: argument is the account name, like
#. * name@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1355
#: ../js/ui/components/telepathyClient.js:1354
#, c-format
msgid "Unable to connect to %s"
msgstr "Non foi posíbel conectarse a %s"
#: ../js/ui/components/telepathyClient.js:1360
#: ../js/ui/components/telepathyClient.js:1359
msgid "View account"
msgstr "Ver conta"
#: ../js/ui/components/telepathyClient.js:1399
#: ../js/ui/components/telepathyClient.js:1398
msgid "Unknown reason"
msgstr "Razón descoñecida"
@@ -1034,26 +1030,26 @@ msgstr "Mostrar aplicativos"
#. Translators: this is the name of the dock/favorites area on
#. the left of the overview
#: ../js/ui/dash.js:439
#: ../js/ui/dash.js:435
msgid "Dash"
msgstr "Taboleiro"
#: ../js/ui/dateMenu.js:85
#: ../js/ui/dateMenu.js:86
msgid "Open Calendar"
msgstr "Abrir Calendario"
#: ../js/ui/dateMenu.js:89
#: ../js/ui/dateMenu.js:90
msgid "Open Clocks"
msgstr "Abrir Reloxos"
#: ../js/ui/dateMenu.js:96
#: ../js/ui/dateMenu.js:97
msgid "Date & Time Settings"
msgstr "Preferencias de data e hora"
#. Translators: This is the date format to use when the calendar popup is
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
#.
#: ../js/ui/dateMenu.js:201
#: ../js/ui/dateMenu.js:208
msgid "%A %B %e, %Y"
msgstr "%a, %e de %B, %Y"
@@ -1265,17 +1261,17 @@ msgstr "Vista xeral"
msgid "Type to search…"
msgstr "Escriba para buscar…"
#: ../js/ui/panel.js:567
#: ../js/ui/panel.js:642
msgid "Quit"
msgstr "Saír"
#. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:618
#: ../js/ui/panel.js:693
msgid "Activities"
msgstr "Actividades"
#: ../js/ui/panel.js:914
#: ../js/ui/panel.js:989
msgid "Top Bar"
msgstr "Barra superior"
@@ -1284,7 +1280,7 @@ msgstr "Barra superior"
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
#. switches containing "◯" and "|"). Other values will
#. simply result in invisible toggle switches.
#: ../js/ui/popupMenu.js:549
#: ../js/ui/popupMenu.js:738
msgid "toggle-switch-us"
msgstr "toggle-switch-intl"
@@ -1309,7 +1305,7 @@ msgid_plural "%d new notifications"
msgstr[0] "%d notificación nova"
msgstr[1] "%d notificacións novas"
#: ../js/ui/screenShield.js:449 ../js/ui/userMenu.js:759
#: ../js/ui/screenShield.js:449 ../js/ui/userMenu.js:807
msgid "Lock"
msgstr "Bloquear"
@@ -1324,11 +1320,11 @@ msgstr "GNOME precisa bloquear a pantalla"
#.
#. XXX: another option is to kick the user into the gdm login
#. screen, where we're not affected by grabs
#: ../js/ui/screenShield.js:775 ../js/ui/screenShield.js:1215
#: ../js/ui/screenShield.js:773 ../js/ui/screenShield.js:1213
msgid "Unable to lock"
msgstr "Non foi posíbel bloquear"
#: ../js/ui/screenShield.js:776 ../js/ui/screenShield.js:1216
#: ../js/ui/screenShield.js:774 ../js/ui/screenShield.js:1214
msgid "Lock was blocked by an application"
msgstr "Un aplicativo impediu o bloqueo"
@@ -1364,7 +1360,7 @@ msgstr "Contrasinal"
msgid "Remember Password"
msgstr "Lembrar contrasinal"
#: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:108
#: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:109
msgid "Unlock"
msgstr "Desbloquear"
@@ -1417,9 +1413,9 @@ msgid "Large Text"
msgstr "Texto grande"
#: ../js/ui/status/bluetooth.js:28 ../js/ui/status/bluetooth.js:32
#: ../js/ui/status/bluetooth.js:290 ../js/ui/status/bluetooth.js:327
#: ../js/ui/status/bluetooth.js:355 ../js/ui/status/bluetooth.js:391
#: ../js/ui/status/bluetooth.js:422 ../js/ui/status/network.js:713
#: ../js/ui/status/bluetooth.js:289 ../js/ui/status/bluetooth.js:321
#: ../js/ui/status/bluetooth.js:357 ../js/ui/status/bluetooth.js:388
#: ../js/ui/status/network.js:739
msgid "Bluetooth"
msgstr "Bluetooth"
@@ -1440,82 +1436,73 @@ msgid "Bluetooth Settings"
msgstr "Preferencias do Bluetooth"
#. TRANSLATORS: this means that bluetooth was disabled by hardware rfkill
#: ../js/ui/status/bluetooth.js:105 ../js/ui/status/network.js:140
#: ../js/ui/status/bluetooth.js:104 ../js/ui/status/network.js:142
msgid "hardware disabled"
msgstr "hardware desactivado"
#: ../js/ui/status/bluetooth.js:198
#: ../js/ui/status/bluetooth.js:197
msgid "Connection"
msgstr "Conexión"
#: ../js/ui/status/bluetooth.js:209 ../js/ui/status/network.js:399
#: ../js/ui/status/bluetooth.js:208 ../js/ui/status/network.js:404
msgid "disconnecting..."
msgstr "desconectando…"
#: ../js/ui/status/bluetooth.js:222 ../js/ui/status/network.js:405
#: ../js/ui/status/network.js:1298
#: ../js/ui/status/bluetooth.js:221 ../js/ui/status/network.js:410
#: ../js/ui/status/network.js:1343
msgid "connecting..."
msgstr "conectando…"
#: ../js/ui/status/bluetooth.js:240
#: ../js/ui/status/bluetooth.js:239
msgid "Send Files…"
msgstr "Enviar ficheiros…"
#: ../js/ui/status/bluetooth.js:247
#: ../js/ui/status/bluetooth.js:246
msgid "Keyboard Settings"
msgstr "Preferencias do teclado"
#: ../js/ui/status/bluetooth.js:250
#: ../js/ui/status/bluetooth.js:249
msgid "Mouse Settings"
msgstr "Preferencias do rato"
#: ../js/ui/status/bluetooth.js:255 ../js/ui/status/volume.js:313
#: ../js/ui/status/bluetooth.js:254 ../js/ui/status/volume.js:316
msgid "Sound Settings"
msgstr "Preferencias do son"
#: ../js/ui/status/bluetooth.js:328 ../js/ui/status/bluetooth.js:356
#: ../js/ui/status/bluetooth.js:322
#, c-format
msgid "Authorization request from %s"
msgstr "Solicitude de autorización de %s"
#: ../js/ui/status/bluetooth.js:334 ../js/ui/status/bluetooth.js:399
#: ../js/ui/status/bluetooth.js:430
#, c-format
msgid "Device %s wants to pair with this computer"
msgstr "O dispositivo «%s» quere emparellarse con este equipo"
#: ../js/ui/status/bluetooth.js:336
msgid "Allow"
msgstr "Permitir"
#: ../js/ui/status/bluetooth.js:337
msgid "Deny"
msgstr "Denegar"
#: ../js/ui/status/bluetooth.js:362
#: ../js/ui/status/bluetooth.js:328
#, c-format
msgid "Device %s wants access to the service '%s'"
msgstr "O dispositivo %s quere acceder ao servizo «%s»"
#: ../js/ui/status/bluetooth.js:364
#: ../js/ui/status/bluetooth.js:330
msgid "Always grant access"
msgstr "Conceder acceso sempre"
#: ../js/ui/status/bluetooth.js:365
#: ../js/ui/status/bluetooth.js:331
msgid "Grant this time only"
msgstr "Conceder só esta vez"
#: ../js/ui/status/bluetooth.js:366
#: ../js/ui/status/bluetooth.js:332
msgid "Reject"
msgstr "Rexeitar"
#. Translators: argument is the device short name
#: ../js/ui/status/bluetooth.js:393
#: ../js/ui/status/bluetooth.js:359
#, c-format
msgid "Pairing confirmation for %s"
msgstr "Confirmación de emparellado para «%s»"
#: ../js/ui/status/bluetooth.js:400
#: ../js/ui/status/bluetooth.js:365 ../js/ui/status/bluetooth.js:396
#, c-format
msgid "Device %s wants to pair with this computer"
msgstr "O dispositivo «%s» quere emparellarse con este equipo"
#: ../js/ui/status/bluetooth.js:366
#, c-format
msgid ""
"Please confirm whether the Passkey '%06d' matches the one on the device."
@@ -1523,24 +1510,24 @@ msgstr ""
"Confirme que a frase de paso «%06d» coincide coa mostrada no dispositivo."
#. Translators: this is the verb, not the noun
#: ../js/ui/status/bluetooth.js:403
#: ../js/ui/status/bluetooth.js:369
msgid "Matches"
msgstr "Coincide"
#: ../js/ui/status/bluetooth.js:404
#: ../js/ui/status/bluetooth.js:370
msgid "Does not match"
msgstr "Non coincide"
#: ../js/ui/status/bluetooth.js:423
#: ../js/ui/status/bluetooth.js:389
#, c-format
msgid "Pairing request for %s"
msgstr "Solicitude de emparellamento para «%s»"
#: ../js/ui/status/bluetooth.js:431
#: ../js/ui/status/bluetooth.js:397
msgid "Please enter the PIN mentioned on the device."
msgstr "Escriba o PIN mencionado no dispositivo."
#: ../js/ui/status/bluetooth.js:448
#: ../js/ui/status/bluetooth.js:414
msgid "OK"
msgstr "Aceptar"
@@ -1560,81 +1547,87 @@ msgstr "Volume, rede, batería"
msgid "<unknown>"
msgstr "<descoñecido>"
#: ../js/ui/status/network.js:125
#: ../js/ui/status/network.js:127
msgid "Wi-Fi"
msgstr "Wifi"
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
#: ../js/ui/status/network.js:162
#: ../js/ui/status/network.js:164
msgid "disabled"
msgstr "desactivada"
#. Translators: this is for network devices that are physically present but are not
#. under NetworkManager's control (and thus cannot be used in the menu)
#: ../js/ui/status/network.js:397
#: ../js/ui/status/network.js:402
msgid "unmanaged"
msgstr "non xestionada"
#. Translators: this is for network connections that require some kind of key or password
#: ../js/ui/status/network.js:408 ../js/ui/status/network.js:1301
#: ../js/ui/status/network.js:413 ../js/ui/status/network.js:1346
msgid "authentication required"
msgstr "requírese autenticación"
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing
#: ../js/ui/status/network.js:419
#: ../js/ui/status/network.js:423
msgid "firmware missing"
msgstr "falta o «firmware»"
#. Translators: this is for wired network devices that are physically disconnected
#: ../js/ui/status/network.js:430
msgid "cable unplugged"
msgstr "cable desconectado"
#. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage
#: ../js/ui/status/network.js:423
#: ../js/ui/status/network.js:435
msgid "unavailable"
msgstr "non dispoñíbel"
#: ../js/ui/status/network.js:425 ../js/ui/status/network.js:1303
#: ../js/ui/status/network.js:437 ../js/ui/status/network.js:1348
msgid "connection failed"
msgstr "conexión fallada"
#: ../js/ui/status/network.js:478 ../js/ui/status/network.js:1190
#: ../js/ui/status/network.js:490 ../js/ui/status/network.js:1236
#: ../js/ui/status/network.js:1424
msgid "More…"
msgstr "Má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:506 ../js/ui/status/network.js:1142
#: ../js/ui/status/network.js:518 ../js/ui/status/network.js:1191
msgid "Connected (private)"
msgstr "Conectada (privada)"
#: ../js/ui/status/network.js:572
#: ../js/ui/status/network.js:597
msgid "Wired"
msgstr "Con fíos"
#: ../js/ui/status/network.js:592
#: ../js/ui/status/network.js:611
msgid "Mobile broadband"
msgstr "Banda larga móbil"
#: ../js/ui/status/network.js:1474
#: ../js/ui/status/network.js:1522
msgid "Enable networking"
msgstr "Activar rede"
#: ../js/ui/status/network.js:1522
#: ../js/ui/status/network.js:1583
msgid "Network Settings"
msgstr "Preferencias da rede"
#: ../js/ui/status/network.js:1539
#: ../js/ui/status/network.js:1600
msgid "Network Manager"
msgstr "Xestor da rede"
#: ../js/ui/status/network.js:1623
#: ../js/ui/status/network.js:1690
msgid "Connection failed"
msgstr "Produciuse un fallo na conexión"
#: ../js/ui/status/network.js:1624
#: ../js/ui/status/network.js:1691
msgid "Activation of network connection failed"
msgstr "Produciuse un fallo na activación da conexión de rede"
#: ../js/ui/status/network.js:1937
#: ../js/ui/status/network.js:2047
msgid "Networking is disabled"
msgstr "A rede está desactivada"
@@ -1735,72 +1728,72 @@ msgctxt "device"
msgid "Unknown"
msgstr "Descoñecido"
#: ../js/ui/status/volume.js:121
#: ../js/ui/status/volume.js:124
msgid "Volume changed"
msgstr "Volume cambiado"
#. Translators: This is the label for audio volume
#: ../js/ui/status/volume.js:246 ../js/ui/status/volume.js:294
#: ../js/ui/status/volume.js:249 ../js/ui/status/volume.js:297
msgid "Volume"
msgstr "Volume"
#: ../js/ui/status/volume.js:255
#: ../js/ui/status/volume.js:258
msgid "Microphone"
msgstr "Micrófono"
#: ../js/ui/unlockDialog.js:119
#: ../js/ui/unlockDialog.js:120
msgid "Log in as another user"
msgstr "Iniciar sesión como outro usuario"
#: ../js/ui/unlockDialog.js:140
#: ../js/ui/unlockDialog.js:141
msgid "Unlock Window"
msgstr "Desbloquear xanela"
#: ../js/ui/userMenu.js:149
#: ../js/ui/userMenu.js:193
msgid "Available"
msgstr "Dispoñíbel"
#: ../js/ui/userMenu.js:152
#: ../js/ui/userMenu.js:196
msgid "Busy"
msgstr "Ocupado"
#: ../js/ui/userMenu.js:155
#: ../js/ui/userMenu.js:199
msgid "Invisible"
msgstr "Invisíbel"
#: ../js/ui/userMenu.js:158
#: ../js/ui/userMenu.js:202
msgid "Away"
msgstr "Ausente"
#: ../js/ui/userMenu.js:161
#: ../js/ui/userMenu.js:205
msgid "Idle"
msgstr "Inactivo"
#: ../js/ui/userMenu.js:164
#: ../js/ui/userMenu.js:208
msgid "Offline"
msgstr "Desconectado"
#: ../js/ui/userMenu.js:736
#: ../js/ui/userMenu.js:781
msgid "Notifications"
msgstr "Notificacións"
#: ../js/ui/userMenu.js:749
#: ../js/ui/userMenu.js:797
msgid "Switch User"
msgstr "Cambiar de usuario"
#: ../js/ui/userMenu.js:754
#: ../js/ui/userMenu.js:802
msgid "Log Out"
msgstr "Saír da sesión"
#: ../js/ui/userMenu.js:774
#: ../js/ui/userMenu.js:822
msgid "Install Updates & Restart"
msgstr "Instalar actualizacións e reiniciar"
#: ../js/ui/userMenu.js:792
#: ../js/ui/userMenu.js:840
msgid "Your chat status will be set to busy"
msgstr "O seu estado de conversa estabelecerase a «ocupado»"
#: ../js/ui/userMenu.js:793
#: ../js/ui/userMenu.js:841
msgid ""
"Notifications are now disabled, including chat messages. Your online status "
"has been adjusted to let others know that you might not see their messages."
@@ -1809,22 +1802,22 @@ msgstr ""
"conversa. O seu estado de conexión axustouse para que outros saiban que non "
"quere ver as súas mensaxes."
#: ../js/ui/userMenu.js:834
#: ../js/ui/userMenu.js:888
msgid "Other users are logged in."
msgstr "Hai outros usuarios conectados."
#: ../js/ui/userMenu.js:839
#: ../js/ui/userMenu.js:893
msgid "Shutting down might cause them to lose unsaved work."
msgstr "Se apaga o computador pode perder o traballo que non gardou."
#. Translators: Remote here refers to a remote session, like a ssh login
#: ../js/ui/userMenu.js:867
#: ../js/ui/userMenu.js:921
#, c-format
msgid "%s (remote)"
msgstr "%s (remoto)"
#. Translators: Console here refers to a tty like a VT console
#: ../js/ui/userMenu.js:870
#: ../js/ui/userMenu.js:924
#, c-format
msgid "%s (console)"
msgstr "%s (consola)"
@@ -1882,21 +1875,21 @@ msgstr[1] "%u entradas"
msgid "System Sounds"
msgstr "Sons do sistema"
#: ../src/main.c:353
#: ../src/main.c:372
msgid "Print version"
msgstr "Imprimir versión"
#: ../src/main.c:359
#: ../src/main.c:378
msgid "Mode used by GDM for login screen"
msgstr "Modo usado por GDM para a pantalla de inicio"
#: ../src/main.c:365
#: ../src/main.c:384
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
msgstr ""
"Usar un modo específico, por exemplo, «gdm» para a pantalla de inicio de "
"sesión"
#: ../src/main.c:371
#: ../src/main.c:390
msgid "List possible modes"
msgstr "Listar os modos posíbeis"
@@ -1917,9 +1910,6 @@ msgstr "O contrasinal non pode estar baleiro"
msgid "Authentication dialog was dismissed by the user"
msgstr "O usuario rexeitou o diálogo de autenticación"
#~ msgid "cable unplugged"
#~ msgstr "cable desconectado"
#~ msgid "Whether to collect stats about applications usage"
#~ msgstr ""
#~ "Indica se se deben recolectar estatísticas sobre o uso dos aplicativos"
@@ -2037,6 +2027,9 @@ msgstr "O usuario rexeitou o diálogo de autenticación"
#~ msgid "System Settings"
#~ msgstr "Preferencias do sistema"
#~ msgid "Switch Session"
#~ msgstr "Cambiar de sesión"
#~ msgid "disabled OpenSearch providers"
#~ msgstr "fornecedores OpenSearch desactivados"

554
po/kk.po

File diff suppressed because it is too large Load Diff

243
po/nb.po
View File

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

View File

@@ -314,38 +314,6 @@ gnome_shell_plugin_kill_switch_workspace (MetaPlugin *plugin)
_shell_wm_kill_switch_workspace (get_shell_wm());
}
static gboolean
ignore_crossing_event (MetaPlugin *plugin,
XIEnterEvent *enter_event)
{
MetaScreen *screen = meta_plugin_get_screen (plugin);
ClutterStage *stage = CLUTTER_STAGE (meta_get_stage_for_screen (screen));
if (enter_event->event == clutter_x11_get_stage_window (stage))
{
/* If the pointer enters a child of the stage window (eg, a
* trayicon), we want to consider it to still be in the stage,
* so don't let Clutter see the event.
*/
if (enter_event->detail == XINotifyInferior)
return TRUE;
/* If the pointer is grabbed by a window it is not currently in,
* filter that out as well. In particular, if a trayicon grabs
* the pointer after a click on its label, we don't want to hide
* the message tray. Filtering out this event will leave Clutter
* out of sync, but that happens fairly often with grabs, and we
* can work around it. (Eg, shell_global_sync_pointer().)
*/
if (enter_event->mode == XINotifyGrab &&
(enter_event->detail == XINotifyNonlinear ||
enter_event->detail == XINotifyNonlinearVirtual))
return TRUE;
}
return FALSE;
}
static gboolean
gnome_shell_plugin_xevent_filter (MetaPlugin *plugin,
XEvent *xev)
@@ -371,25 +339,10 @@ gnome_shell_plugin_xevent_filter (MetaPlugin *plugin,
}
#endif
/* Make sure that Clutter doesn't see certain focus change events,
* so that when we're moving into something like a tray icon, we
* don't unfocus the container. */
if (xev->type == GenericEvent &&
xev->xcookie.extension == meta_display_get_xinput_opcode (display))
{
XIEvent *input_event = (XIEvent *) xev->xcookie.data;
if ((input_event->evtype == XI_Enter || input_event->evtype == XI_Leave) &&
ignore_crossing_event (plugin, (XIEnterEvent *) input_event))
return TRUE;
}
/*
* Pass the event to shell-global
*/
if (_shell_global_check_xdnd_event (shell_plugin->global, xev))
return TRUE;
return clutter_x11_handle_event (xev) != CLUTTER_X11_FILTER_CONTINUE;
return _shell_global_check_xdnd_event (shell_plugin->global, xev);
}
static gboolean

View File

@@ -22,6 +22,7 @@
#include <atk-bridge.h>
#include <telepathy-glib/debug.h>
#include <telepathy-glib/debug-sender.h>
#include <meta/util.h>
#include "shell-global.h"
#include "shell-global-private.h"
@@ -41,6 +42,7 @@ extern GType gnome_shell_plugin_get_type (void);
static gboolean is_gdm_mode = FALSE;
static char *session_mode = NULL;
static gboolean is_display_server = FALSE;
#define DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER 1
#define DBUS_REQUEST_NAME_REPLY_ALREADY_OWNER 4
@@ -347,6 +349,12 @@ print_version (const gchar *option_name,
}
GOptionEntry gnome_shell_options[] = {
{
"display-server", 0, 0, G_OPTION_ARG_NONE,
&is_display_server,
N_("Run as a display server"),
NULL,
},
{
"version", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK,
print_version,
@@ -386,8 +394,6 @@ main (int argc, char **argv)
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
textdomain (GETTEXT_PACKAGE);
g_setenv ("GDK_SCALE", "1", TRUE);
ctx = meta_get_option_context ();
g_option_context_add_main_entries (ctx, gnome_shell_options, GETTEXT_PACKAGE);
if (!g_option_context_parse (ctx, &argc, &argv, &error))
@@ -398,6 +404,8 @@ main (int argc, char **argv)
g_option_context_free (ctx);
meta_set_is_display_server (is_display_server);
meta_plugin_manager_set_plugin_type (gnome_shell_plugin_get_type ());
meta_set_wm_name (WM_NAME);
@@ -437,8 +445,6 @@ main (int argc, char **argv)
_shell_global_init ("session-mode", session_mode, NULL);
g_unsetenv ("GDK_SCALE");
ecode = meta_run ();
if (g_getenv ("GNOME_SHELL_ENABLE_CLEANUP"))

View File

@@ -930,9 +930,34 @@ _shell_global_set_plugin (ShellGlobal *global,
meta_screen_get_screen_number (global->meta_screen));
global->stage = CLUTTER_STAGE (meta_get_stage_for_screen (global->meta_screen));
global->stage_xwindow = clutter_x11_get_stage_window (global->stage);
global->stage_gdk_window = gdk_x11_window_foreign_new_for_display (global->gdk_display,
global->stage_xwindow);
if (meta_is_display_server ())
{
/* When Mutter is acting as its own display server then the
stage does not have a window. Instead we'll just create a
dummy window that might make some things blunder along but
will probably just leave most things broken. It might be
possible to fix this to make the fake window be the same size
as the stage window would be and make it more useful. */
GdkWindowAttr attributes;
attributes.wclass = GDK_INPUT_OUTPUT;
attributes.width = 100;
attributes.height = 100;
attributes.window_type = GDK_WINDOW_TOPLEVEL;
global->stage_gdk_window = gdk_window_new (NULL,
&attributes,
0 /* attributes_mask */);
global->stage_xwindow = gdk_x11_window_get_xid (global->stage_gdk_window);
}
else
{
global->stage_xwindow = clutter_x11_get_stage_window (global->stage);
global->stage_gdk_window =
gdk_x11_window_foreign_new_for_display (global->gdk_display,
global->stage_xwindow);
}
g_signal_connect (global->stage, "notify::width",
G_CALLBACK (global_stage_notify_width), global);
@@ -1240,9 +1265,12 @@ void shell_global_init_xdnd (ShellGlobal *global)
gdk_x11_get_xatom_by_name ("XdndAware"), XA_ATOM,
32, PropModeReplace, (const unsigned char *)&xdnd_version, 1);
XChangeProperty (global->xdisplay, output_window,
gdk_x11_get_xatom_by_name ("XdndProxy"), XA_WINDOW,
32, PropModeReplace, (const unsigned char *)&global->stage_xwindow, 1);
/* There is no overlay window when running as a display server */
if (output_window)
XChangeProperty (global->xdisplay, output_window,
gdk_x11_get_xatom_by_name ("XdndProxy"), XA_WINDOW,
32, PropModeReplace,
(const unsigned char *)&global->stage_xwindow, 1);
/*
* XdndProxy is additionally set on the proxy window as verification that the

View File

@@ -43,6 +43,8 @@ struct _ShellNetworkAgentClass
/* used by SHELL_TYPE_NETWORK_AGENT */
GType shell_network_agent_get_type (void);
ShellNetworkAgent *shell_network_agent_new (void);
void shell_network_agent_set_password (ShellNetworkAgent *self,
gchar *request_id,
gchar *setting_key,

View File

@@ -4,8 +4,11 @@
#include "shell-xfixes-cursor.h"
#include <clutter/x11/clutter-x11.h>
#include <gdk/gdkx.h>
#include <X11/extensions/Xfixes.h>
#include <meta/display.h>
#include <meta/screen.h>
#include <meta/util.h>
/**
* SECTION:shell-xfixes-cursor
@@ -24,7 +27,7 @@ struct _ShellXFixesCursorClass
struct _ShellXFixesCursor {
GObject parent;
ClutterStage *stage;
MetaScreen *screen;
gboolean have_xfixes;
int xfixes_event_base;
@@ -36,17 +39,14 @@ struct _ShellXFixesCursor {
int cursor_hot_y;
};
static void xfixes_cursor_show (ShellXFixesCursor *xfixes_cursor);
static void xfixes_cursor_hide (ShellXFixesCursor *xfixes_cursor);
static void xfixes_cursor_set_stage (ShellXFixesCursor *xfixes_cursor,
ClutterStage *stage);
static void xfixes_cursor_set_screen (ShellXFixesCursor *xfixes_cursor,
MetaScreen *screen);
static void xfixes_cursor_reset_image (ShellXFixesCursor *xfixes_cursor);
enum {
PROP_0,
PROP_STAGE,
PROP_SCREEN,
};
G_DEFINE_TYPE(ShellXFixesCursor, shell_xfixes_cursor, G_TYPE_OBJECT);
@@ -71,31 +71,22 @@ shell_xfixes_cursor_finalize (GObject *object)
{
ShellXFixesCursor *xfixes_cursor = SHELL_XFIXES_CURSOR (object);
// Make sure the system cursor is showing before leaving the stage.
xfixes_cursor_show (xfixes_cursor);
xfixes_cursor_set_stage (xfixes_cursor, NULL);
xfixes_cursor_set_screen (xfixes_cursor, NULL);
if (xfixes_cursor->cursor_sprite != NULL)
cogl_handle_unref (xfixes_cursor->cursor_sprite);
G_OBJECT_CLASS (shell_xfixes_cursor_parent_class)->finalize (object);
}
static void
xfixes_cursor_on_stage_destroy (ClutterActor *actor,
ShellXFixesCursor *xfixes_cursor)
{
xfixes_cursor_set_stage (xfixes_cursor, NULL);
}
static ClutterX11FilterReturn
xfixes_cursor_event_filter (XEvent *xev,
ClutterEvent *cev,
gpointer data)
static GdkFilterReturn
xfixes_cursor_event_filter (XEvent *xev,
GdkEvent *ev,
gpointer data)
{
ShellXFixesCursor *xfixes_cursor = data;
if (xev->xany.window != clutter_x11_get_stage_window (xfixes_cursor->stage))
return CLUTTER_X11_FILTER_CONTINUE;
if (xev->xany.window != meta_get_overlay_window (xfixes_cursor->screen))
return GDK_FILTER_CONTINUE;
if (xev->xany.type == xfixes_cursor->xfixes_event_base + XFixesCursorNotify)
{
@@ -103,93 +94,43 @@ xfixes_cursor_event_filter (XEvent *xev,
if (notify_event->subtype == XFixesDisplayCursorNotify)
xfixes_cursor_reset_image (xfixes_cursor);
}
return CLUTTER_X11_FILTER_CONTINUE;
return GDK_FILTER_CONTINUE;
}
static void
xfixes_cursor_set_stage (ShellXFixesCursor *xfixes_cursor,
ClutterStage *stage)
xfixes_cursor_set_screen (ShellXFixesCursor *xfixes_cursor,
MetaScreen *screen)
{
if (xfixes_cursor->stage == stage)
if (xfixes_cursor->screen == screen)
return;
if (xfixes_cursor->stage)
if (xfixes_cursor->screen)
{
g_signal_handlers_disconnect_by_func (xfixes_cursor->stage,
(void *)xfixes_cursor_on_stage_destroy,
xfixes_cursor);
clutter_x11_remove_filter (xfixes_cursor_event_filter, xfixes_cursor);
gdk_window_remove_filter (NULL, (GdkFilterFunc)xfixes_cursor_event_filter, xfixes_cursor);
}
xfixes_cursor->stage = stage;
if (xfixes_cursor->stage)
xfixes_cursor->screen = screen;
if (xfixes_cursor->screen)
{
int error_base;
xfixes_cursor->stage = stage;
g_signal_connect (xfixes_cursor->stage, "destroy",
G_CALLBACK (xfixes_cursor_on_stage_destroy), xfixes_cursor);
gdk_window_add_filter (NULL, (GdkFilterFunc)xfixes_cursor_event_filter, xfixes_cursor);
clutter_x11_add_filter (xfixes_cursor_event_filter, xfixes_cursor);
xfixes_cursor->have_xfixes = XFixesQueryExtension (clutter_x11_get_default_display (),
xfixes_cursor->have_xfixes = XFixesQueryExtension (gdk_x11_get_default_xdisplay (),
&xfixes_cursor->xfixes_event_base,
&error_base);
if (xfixes_cursor->have_xfixes)
XFixesSelectCursorInput (clutter_x11_get_default_display (),
clutter_x11_get_stage_window (stage),
/* FIXME: this needs to be moved down to mutter as a whole */
if (xfixes_cursor->have_xfixes && !meta_is_display_server())
XFixesSelectCursorInput (gdk_x11_get_default_xdisplay (),
meta_get_overlay_window (screen),
XFixesDisplayCursorNotifyMask);
xfixes_cursor_reset_image (xfixes_cursor);
}
}
static void
xfixes_cursor_show (ShellXFixesCursor *xfixes_cursor)
{
int minor, major;
Display *xdisplay;
Window xwindow;
if (xfixes_cursor->is_showing == TRUE)
return;
if (!xfixes_cursor->have_xfixes || !xfixes_cursor->stage)
return;
xdisplay = clutter_x11_get_default_display ();
xwindow = clutter_x11_get_stage_window (xfixes_cursor->stage);
XFixesQueryVersion (xdisplay, &major, &minor);
if (major >= 4)
{
XFixesShowCursor (xdisplay, xwindow);
xfixes_cursor->is_showing = TRUE;
}
}
static void
xfixes_cursor_hide (ShellXFixesCursor *xfixes_cursor)
{
int minor, major;
Display *xdisplay;
Window xwindow;
if (xfixes_cursor->is_showing == FALSE)
return;
if (!xfixes_cursor->have_xfixes || !xfixes_cursor->stage)
return;
xdisplay = clutter_x11_get_default_display ();
xwindow = clutter_x11_get_stage_window (xfixes_cursor->stage);
XFixesQueryVersion (xdisplay, &major, &minor);
if (major >= 4)
{
XFixesHideCursor (xdisplay, xwindow);
xfixes_cursor->is_showing = FALSE;
}
}
static void
xfixes_cursor_reset_image (ShellXFixesCursor *xfixes_cursor)
{
@@ -201,7 +142,7 @@ xfixes_cursor_reset_image (ShellXFixesCursor *xfixes_cursor)
if (!xfixes_cursor->have_xfixes)
return;
cursor_image = XFixesGetCursorImage (clutter_x11_get_default_display ());
cursor_image = XFixesGetCursorImage (gdk_x11_get_default_xdisplay ());
if (!cursor_image)
return;
@@ -265,8 +206,8 @@ shell_xfixes_cursor_set_property (GObject *object,
switch (prop_id)
{
case PROP_STAGE:
xfixes_cursor_set_stage (xfixes_cursor, g_value_get_object (value));
case PROP_SCREEN:
xfixes_cursor_set_screen (xfixes_cursor, g_value_get_object (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -284,8 +225,8 @@ shell_xfixes_cursor_get_property (GObject *object,
switch (prop_id)
{
case PROP_STAGE:
g_value_set_object (value, G_OBJECT (xfixes_cursor->stage));
case PROP_SCREEN:
g_value_set_object (value, G_OBJECT (xfixes_cursor->screen));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -311,22 +252,22 @@ shell_xfixes_cursor_class_init (ShellXFixesCursorClass *klass)
gobject_class->set_property = shell_xfixes_cursor_set_property;
g_object_class_install_property (gobject_class,
PROP_STAGE,
g_param_spec_object ("stage",
"Stage",
"Stage for mouse cursor",
CLUTTER_TYPE_STAGE,
PROP_SCREEN,
g_param_spec_object ("screen",
"Screen",
"Screen for mouse cursor",
META_TYPE_SCREEN,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
}
/**
* shell_xfixes_cursor_get_for_stage:
* @stage: (transfer none): The #ClutterStage to get the cursor for
* shell_xfixes_cursor_get_for_screen:
* @screen: (transfer none): The #MetaScreen to get the cursor for
*
* Return value: (transfer none): A #ShellXFixesCursor instance
*/
ShellXFixesCursor *
shell_xfixes_cursor_get_for_stage (ClutterStage *stage)
shell_xfixes_cursor_get_for_screen (MetaScreen *screen)
{
ShellXFixesCursor *instance;
static GQuark xfixes_cursor_quark;
@@ -334,47 +275,19 @@ shell_xfixes_cursor_get_for_stage (ClutterStage *stage)
if (G_UNLIKELY (xfixes_cursor_quark == 0))
xfixes_cursor_quark = g_quark_from_static_string ("gnome-shell-xfixes-cursor");
instance = g_object_get_qdata (G_OBJECT (stage), xfixes_cursor_quark);
instance = g_object_get_qdata (G_OBJECT (screen), xfixes_cursor_quark);
if (instance == NULL)
{
instance = g_object_new (SHELL_TYPE_XFIXES_CURSOR,
"stage", stage,
"screen", screen,
NULL);
g_object_set_qdata (G_OBJECT (stage), xfixes_cursor_quark, instance);
g_object_set_qdata (G_OBJECT (screen), xfixes_cursor_quark, instance);
}
return instance;
}
/**
* shell_xfixes_cursor_hide:
* @xfixes_cursor: the #ShellXFixesCursor
*
* Hide the system mouse cursor.
*/
void
shell_xfixes_cursor_hide (ShellXFixesCursor *xfixes_cursor)
{
g_return_if_fail (SHELL_IS_XFIXES_CURSOR (xfixes_cursor));
xfixes_cursor_hide (xfixes_cursor);
}
/**
* shell_xfixes_cursor_show:
* @xfixes_cursor: the #ShellXFixesCursor
*
* Show the system mouse cursor to show
*/
void
shell_xfixes_cursor_show (ShellXFixesCursor *xfixes_cursor)
{
g_return_if_fail (SHELL_IS_XFIXES_CURSOR (xfixes_cursor));
xfixes_cursor_show (xfixes_cursor);
}
/**
* shell_xfixes_cursor_update_texture_image:
* @xfixes_cursor: the #ShellXFixesCursor

View File

@@ -4,6 +4,7 @@
#include <clutter/clutter.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <meta/screen.h>
G_BEGIN_DECLS
@@ -19,10 +20,8 @@ typedef struct _ShellXFixesCursorClass ShellXFixesCursorClass;
GType shell_xfixes_cursor_get_type (void) G_GNUC_CONST;
ShellXFixesCursor *shell_xfixes_cursor_get_for_stage (ClutterStage *stage);
ShellXFixesCursor *shell_xfixes_cursor_get_for_screen (MetaScreen *screen);
void shell_xfixes_cursor_show (ShellXFixesCursor *xfixes_cursor);
void shell_xfixes_cursor_hide (ShellXFixesCursor *xfixes_cursor);
int shell_xfixes_cursor_get_hot_x (ShellXFixesCursor *xfixes_cursor);
int shell_xfixes_cursor_get_hot_y (ShellXFixesCursor *xfixes_cursor);
void shell_xfixes_cursor_update_texture_image (ShellXFixesCursor *xfixes_cursor,

View File

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

View File

@@ -385,7 +385,7 @@ st_widget_finalize (GObject *gobject)
g_free (priv->inline_style);
for (i = 0; i < G_N_ELEMENTS (priv->paint_states); i++)
st_theme_node_paint_state_free (&priv->paint_states[i]);
st_theme_node_paint_state_init (&priv->paint_states[i]);
G_OBJECT_CLASS (st_widget_parent_class)->finalize (gobject);
}
@@ -643,9 +643,8 @@ st_widget_get_theme_node (StWidget *widget)
if (stage == NULL)
{
g_critical ("st_widget_get_theme_node called on the widget %s which is not in the stage.",
st_describe_actor (CLUTTER_ACTOR (widget)));
return g_object_new (ST_TYPE_THEME_NODE, NULL);
g_error ("st_widget_get_theme_node called on the widget %s which is not in the stage.",
st_describe_actor (CLUTTER_ACTOR (widget)));
}
if (parent_node == NULL)