Compare commits

..

29 Commits

Author SHA1 Message Date
isa
c8892e7e73 Use Super+Tab to change realms 2024-02-15 15:58:16 -05:00
isa
6f159728d3 Add bla bla 2024-02-15 15:40:37 -05:00
d85bd654a3 Don't display label on full-screen windows 2021-12-13 14:21:01 -05:00
7d08587000 Ensure that Main.overview._overview exists before accessing it. 2021-12-13 11:30:43 -05:00
c93e5e6431 Citadel changes to gnome-shell 2021-12-03 14:04:05 -05:00
Florian Müllner
a1b537eebf Bump version to 41.1
Update NEWS.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2022>
2021-11-04 14:09:52 +01:00
Florian Müllner
d3c6dd75bb Revert !1999
The changes introduce crashes, so back out until we
figure those out.

This reverts commits ceee53aa0a and 5d5bfe492c.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2022>
2021-11-04 14:08:05 +01:00
Florian Müllner
a369371519 Revert "layout: Exclude hidden actors from struts"
The change unvealed a series of mutter bugs that for most
users are worse than the issue that was fixed. So revert
the change on stable branches until the mutter side is
fixed.

This reverts commit cd1102ff30.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2022>
2021-11-03 23:50:32 +01:00
Christian Kirbach
03a3ce062a Update German translation 2021-11-03 20:33:48 +00:00
Aleksandr Melman
6456fa0df4 Update Russian translation 2021-11-03 17:53:21 +00:00
Hugo Carvalho
1ec0f01cfc Update Portuguese translation 2021-11-03 11:50:26 +00:00
Kukuh Syafaat
0512d1fff4 Update Indonesian translation 2021-11-03 10:04:19 +00:00
Rafael Fontenelle
ba32dcc16b Update Brazilian Portuguese translation 2021-11-03 01:19:46 +00:00
Anders Jonsson
edcee44c72 Update Swedish translation 2021-11-02 21:05:16 +00:00
Matej Urbančič
be32cab39b Update Slovenian translation 2021-11-02 16:54:37 +00:00
Yuri Chornoivan
f8cdac49c6 Update Ukrainian translation 2021-11-02 16:31:49 +00:00
Florian Müllner
b6b9e755c7 dbusServices/extensions: Only allow one dialog at a time
Showing multiple preference dialogs at the same time (for instance
by repeated `gnome-extensions prefs` calls) may or may not work as
expected, depending on whether any of the dialogs is modal or not
(read: opened via the Extensions app).

The easiest way to address this is to disallow more than a single
dialog at the time. It's arguably also the more predictable behavior,
and means extensions don't have to deal with inconsistent state
caused by multiple dialogs.

https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4564

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2013>
(cherry picked from commit b93342f72e)
2021-11-02 15:39:08 +01:00
Florian Müllner
1297d8dc30 dbusServices/extensions: Fix shutdown after showing prefs
GTK4 relies entirely on refcounting for cleanup (that is,
there is no longer a destroy() method that forces a dispose
run regardless of the refcount).

Unfortunately that makes cleanup harder in (some) language
bindings, where an object may be kept alive implicitly by
closures etc.

Address this by releasing the hold count when the window
is closed rather than when it is destroyed.

This isn't the most elegant, but it ensure that the service
doesn't get stuck if an extension doesn't carefully clean
up everything in its prefs widget.

https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4564

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2013>
(cherry picked from commit 4d2b008966)
2021-11-02 15:39:08 +01:00
Florian Müllner
fd60591bb3 extensions-tool/prefs: Log D-Bus errors
We currently ignore any error that may occur when calling the
OpenExtensionPrefs D-Bus method. Right now such an error is highly
unlikely, given that we already checked that we are running under
gnome-shell and the extension in question exists and has prefs.

We'll soon make sure that only one dialog is shown at any time,
which is an error that we can realistically expect, so handle that
properly.

https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4564

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2013>
(cherry picked from commit 09ed1c533c)
2021-11-02 15:39:08 +01:00
Florian Müllner
1b5ff77d02 extensions-tool: Add missing newline
Unlike g_warning() and friends, g_printerr() does not append
a trailing newline.

https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4564

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2013>
(cherry picked from commit 79f448958b)
2021-11-02 15:39:08 +01:00
Sebastian Keller
488fb46edf shell/app: Don't move all workspace windows to their startup workspace
Windows from some applications, such as guake, are created as showing on
all workspaces. When these windows are put on the workspaces via
set_workspace_state() during construction, the first time the window is
added to a workspace in the loop triggers the shell app tracker which
then tries to move the window to its startup workspace. This makes the
window unsticky which triggers another set_workspace_state() which
tries to remove the window from all workspaces, but currently it is only
on the first one and then adds it to the startup workspace. Once that is
finished, the first set_workspace_state() continues adding the window
to the remaining workspaces, despite the window now no longer having
on_all_workspaces set to true.

When the window is now unmanaged, the window according to its internal
state is only found on the startup workspace, so it will only be removed
from that. This causes the assertion to fail that checks that the window
is no longer present on any workspace after this.

Fixes https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4720

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2014>
(cherry picked from commit bc32a52108)
2021-11-02 15:38:54 +01:00
Carlos Garnacho
ddf03b5d94 Revert "st: Only use clutter_actor_invalidate_paint_volume() if the API exists"
Since we are past the 40 API change hurdle, it is safe to revert this
commit.

This reverts commit 1cefd589da.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2010>
(cherry picked from commit ff4ff66498)
2021-11-02 15:38:35 +01:00
Florian Müllner
fc680556f5 environment: Apply autoReverse/repeatCount to all transitions
Like the old Tweener API, ease() allows to transition multiple
properties at once. If autoReverse or repeatCount are specified,
they should apply to all transitions, but right now we only set
them for the first one.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2007>
(cherry picked from commit cc5cc0d653)
2021-11-02 15:38:20 +01:00
Carlos Garnacho
a2f6efa5e1 inputMethod: Do not reset invisible preedit on focus_out
If the preedit is in invisible state, the last preedit string that
was sent around is already null, so there is no need to clear the preedit
in that case.

(Cherry-picked from commit 0177560952)
2021-11-01 18:34:57 +01:00
Carlos Garnacho
62fce73aee inputMethod: Do not communicate preedit text change on reset
This is now done in the ClutterInputFocus for us, since
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1940. There
is no need to duplicate this call, and it happens to cause undesired
scrolling to content in some cases when this reset happens during
a change in the IM focused client state.

Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4647

(Cherry-picked from commit 047691b0d3)
2021-11-01 18:34:46 +01:00
Carlos Garnacho
b1538fcb20 inputMethod: Equate empty preedit string to null
If we get '' from the IM as the preedit string, it is pretty safe
to handle it as "no preedit" altogether.

(Cherry-picked from commit 286cfdc6d4)
2021-11-01 18:34:27 +01:00
eshagh shahidani
025588b89a Update Persian translation 2021-10-25 20:42:25 +00:00
Rūdolfs Mazurs
ce2ae0642f Update Latvian translation 2021-10-25 17:56:42 +00:00
Selyan Slimane AMIRI
8c5d552cc2 Update Kabyle translation 2021-10-16 14:35:12 +00:00
79 changed files with 5180 additions and 2343 deletions

24
NEWS
View File

@ -1,3 +1,27 @@
41.1
====
* Fix icon updates while hidden [Marco; !1983]
* Fix erratic scrolling in GTK apps [Christian, Carlos; !1993, #4647]
* Fix GTK color picker support [Florian; !1990]
* Fix sound-file support in notifications [Florian; !1991]
* Fix high-contrast switches [Florian; !2000]
* Only allow one extension prefs dialog at a time [Florian; #4564]
* Fixed crashes [Ray, Sebastian; !2004, !2014]
* Misc. bug fixes and cleanups [Jonas, Florian, Jakub, Carlos; !1985, !1998,
!1996, !1979, !2007, !2010]
Contributors:
Marco Trevisan (Treviño), Carlos Garnacho, Christian Hergert,
Sebastian Keller, Florian Müllner, Jakub Steiner, Ray Strode, Jonas Ådahl
Translators:
Марко Костић [sr], Ngọc Quân Trần [vi], Emin Tufan Çetin [tr],
Yaron Shahrabani [he], Sveinn í Felli [is], Goran Vidović [hr],
Marek Černocký [cs], Selyan Slimane AMIRI [kab], Rūdolfs Mazurs [lv],
eshagh shahidani [fa], Yuri Chornoivan [uk], Matej Urbančič [sl],
Anders Jonsson [sv], Rafael Fontenelle [pt_BR], Kukuh Syafaat [id],
Hugo Carvalho [pt], Aleksandr Melman [ru], Christian Kirbach [de]
41.0
====

1
bla bla Normal file
View File

@ -0,0 +1 @@
bla test

View File

@ -6,7 +6,7 @@
<arg type="b" name="force_reload" direction="in"/>
</method>
<signal name="EventsAddedOrUpdated">
<arg type="a(ssxxa{sv})" name="events" direction="out"/>
<arg type="a(ssbxxa{sv})" name="events" direction="out"/>
</signal>
<signal name="EventsRemoved">
<arg type="as" name="ids" direction="out"/>

View File

@ -230,6 +230,14 @@
<default>["&lt;Super&gt;9"]</default>
<summary>Switch to application 9</summary>
</key>
<key name="switch-realm" type="as">
<default><![CDATA[['<Super>Tab']]]></default>
<summary>Open Realm Switcher</summary>
</key>
<key name="switch-realm-backward" type="as">
<default><![CDATA[['<Super><Shift>Tab']]]></default>
<summary>Open Realm Switcher Backwards</summary>
</key>
</schema>
<schema id="org.gnome.shell.app-switcher"

View File

@ -116,7 +116,7 @@ stage {
&:focus { @include button(focus);}
&:hover { @include button(hover);}
&:insensitive { @include button(insensitive);}
&:active, &:checked { @include button(active);}
&:active { @include button(active);}
}
// buttons in dialogs

View File

@ -49,3 +49,5 @@
// Lock / login screens
@import 'widgets/login-dialog';
@import 'widgets/screen-shield';
@import 'widgets/realms';

View File

@ -0,0 +1,17 @@
.realm-switch-label {
font-size: 36px;
font-weight: bold;
color: #ffffff;
background-color: rgba(10, 10, 10, 0.7);
border-radius: 5px;
padding: .5em;
}
.realm-frame-label {
font-size: 12pt;
font-weight: bold;
}
.realm-config-icon {
color: #8e8e80;
}

View File

@ -29,6 +29,7 @@ theme_sources = files([
'gnome-shell-sass/widgets/_overview.scss',
'gnome-shell-sass/widgets/_panel.scss',
'gnome-shell-sass/widgets/_popovers.scss',
'gnome-shell-sass/widgets/_realms.scss',
'gnome-shell-sass/widgets/_screen-shield.scss',
'gnome-shell-sass/widgets/_scrollbars.scss',
'gnome-shell-sass/widgets/_search-entry.scss',

View File

@ -27,7 +27,7 @@ foreach service, dir : dbus_services
serviceconf = configuration_data()
serviceconf.set('service', service)
serviceconf.set('gjs', gjs.path())
serviceconf.set('gjs', gjs)
serviceconf.set('pkgdatadir', pkgdatadir)
configure_file(

View File

@ -142,5 +142,12 @@
<file>ui/status/remoteAccess.js</file>
<file>ui/status/system.js</file>
<file>ui/status/thunderbolt.js</file>
<file>ui/realms/realmIndicator.js</file>
<file>ui/realms/realmManager.js</file>
<file>ui/realms/realmSearchProvider.js</file>
<file>ui/realms/realmSwitcher.js</file>
<file>ui/realms/realmWindowFrame.js</file>
<file>ui/realms/realmWindowMenu.js</file>
</gresource>
</gresources>

View File

@ -76,12 +76,10 @@ class AccessDialog extends ModalDialog.ModalDialog {
}
open() {
if (!super.open())
return false;
super.open();
let connection = this._invocation.get_connection();
this._requestExported = this._request.export(connection, this._handle);
return true;
}
CloseAsync(invocation, _params) {

View File

@ -919,6 +919,43 @@ var BaseAppView = GObject.registerClass({
}
}
animate(animationDirection, onComplete) {
if (onComplete) {
let animationDoneId = this._grid.connect('animation-done', () => {
this._grid.disconnect(animationDoneId);
onComplete();
});
}
this._clearAnimateLater();
this._grid.opacity = 255;
if (animationDirection == IconGrid.AnimationDirection.IN) {
const doSpringAnimationLater = laterType => {
this._animateLaterId = Meta.later_add(laterType,
() => {
this._animateLaterId = 0;
this._doSpringAnimation(animationDirection);
return GLib.SOURCE_REMOVE;
});
};
if (this._viewIsReady) {
this._grid.opacity = 0;
doSpringAnimationLater(Meta.LaterType.IDLE);
} else {
this._viewLoadedHandlerId = this.connect('view-loaded',
() => {
this._clearAnimateLater();
this._grid.opacity = 255;
doSpringAnimationLater(Meta.LaterType.BEFORE_REDRAW);
});
}
} else {
this._doSpringAnimation(animationDirection);
}
}
_getDropTarget(x, y, source) {
const { currentPage } = this._grid;
@ -1619,6 +1656,24 @@ class AppDisplay extends BaseAppView {
return appIcons;
}
// Overridden from BaseAppView
animate(animationDirection, onComplete) {
this._scrollView.reactive = false;
this._swipeTracker.enabled = false;
let completionFunc = () => {
this._scrollView.reactive = true;
this._swipeTracker.enabled = this.mapped;
if (onComplete)
onComplete();
};
if (animationDirection == IconGrid.AnimationDirection.OUT &&
this._displayingDialog && this._currentDialog)
this._currentDialog.popdown();
else
super.animate(animationDirection, completionFunc);
}
animateSwitch(animationDirection) {
super.animateSwitch(animationDirection);
@ -2222,6 +2277,11 @@ class FolderView extends BaseAppView {
return aPosition - bPosition;
}
// Overridden from BaseAppView
animate(animationDirection) {
this._grid.animatePulse(animationDirection);
}
createFolderIcon(size) {
const layout = new Clutter.GridLayout({
row_homogeneous: true,

View File

@ -12,6 +12,7 @@ const Util = imports.misc.util;
const { loadInterfaceXML } = imports.misc.fileUtils;
var MSECS_IN_DAY = 24 * 60 * 60 * 1000;
var SHOW_WEEKDATE_KEY = 'show-weekdate';
var MESSAGE_ICON_SIZE = -1; // pick up from CSS
@ -46,8 +47,11 @@ function _getBeginningOfDay(date) {
}
function _getEndOfDay(date) {
const ret = _getBeginningOfDay(date);
ret.setDate(ret.getDate() + 1);
let ret = new Date(date.getTime());
ret.setHours(23);
ret.setMinutes(59);
ret.setSeconds(59);
ret.setMilliseconds(999);
return ret;
}
@ -78,11 +82,12 @@ function _getCalendarDayAbbreviation(dayNumber) {
// Abstraction for an appointment/event in a calendar
var CalendarEvent = class CalendarEvent {
constructor(id, date, end, summary) {
constructor(id, date, end, summary, allDay) {
this.id = id;
this.date = date;
this.end = end;
this.summary = summary;
this.allDay = allDay;
}
};
@ -170,26 +175,13 @@ function _datesEqual(a, b) {
return true;
}
/**
* Checks whether an event overlaps a given interval
*
* @param {Date} e0 Beginning of the event
* @param {Date} e1 End of the event
* @param {Date} i0 Beginning of the interval
* @param {Date} i1 End of the interval
* @returns {boolean} Whether there was an overlap
*/
function _eventOverlapsInterval(e0, e1, i0, i1) {
// This also ensures zero-length events are included
if (e0 >= i0 && e1 < i1)
function _dateIntervalsOverlap(a0, a1, b0, b1) {
if (a1 <= b0)
return false;
else if (b1 <= a0)
return false;
else
return true;
if (e1 <= i0)
return false;
if (i1 <= e0)
return false;
return true;
}
// an implementation that reads data from a session bus service
@ -287,10 +279,10 @@ class DBusEventSource extends EventSourceBase {
let changed = false;
for (let n = 0; n < appointments.length; n++) {
const [id, summary, startTime, endTime] = appointments[n];
const [id, summary, allDay, startTime, endTime] = appointments[n];
const date = new Date(startTime * 1000);
const end = new Date(endTime * 1000);
let event = new CalendarEvent(id, date, end, summary);
let event = new CalendarEvent(id, date, end, summary, allDay);
this._events.set(event.id, event);
changed = true;
@ -305,7 +297,7 @@ class DBusEventSource extends EventSourceBase {
let changed = false;
for (const id of ids)
changed = changed || this._events.delete(id);
changed |= this._events.delete(id);
if (changed)
this.emit('changed');
@ -318,7 +310,7 @@ class DBusEventSource extends EventSourceBase {
let changed = false;
for (const id of this._events.keys()) {
if (id.startsWith(sourceUid))
changed = changed || this._events.delete(id);
changed |= this._events.delete(id);
}
if (changed)
@ -355,7 +347,7 @@ class DBusEventSource extends EventSourceBase {
*_getFilteredEvents(begin, end) {
for (const event of this._events.values()) {
if (_eventOverlapsInterval(event.date, event.end, begin, end))
if (_dateIntervalsOverlap(event.date, event.end, begin, end))
yield event;
}
}
@ -509,7 +501,7 @@ var Calendar = GObject.registerClass({
else
col = offsetCols + (7 + iter.getDay() - this._weekStart) % 7;
layout.attach(label, col, 1, 1, 1);
iter.setDate(iter.getDate() + 1);
iter.setTime(iter.getTime() + MSECS_IN_DAY);
}
// All the children after this are days, and get removed when we update the calendar
@ -610,8 +602,10 @@ var Calendar = GObject.registerClass({
// Actually computing the number of weeks is complex, but we know that the
// problematic categories (2 and 4) always start on week start, and that
// all months at the end have 6 weeks.
let beginDate = new Date(
this._selectedDate.getFullYear(), this._selectedDate.getMonth(), 1);
let beginDate = new Date(this._selectedDate);
beginDate.setDate(1);
beginDate.setSeconds(0);
beginDate.setHours(12);
this._calendarBegin = new Date(beginDate);
this._markedAsToday = now;
@ -620,7 +614,7 @@ var Calendar = GObject.registerClass({
let startsOnWeekStart = daysToWeekStart == 0;
let weekPadding = startsOnWeekStart ? 7 : 0;
beginDate.setDate(beginDate.getDate() - (weekPadding + daysToWeekStart));
beginDate.setTime(beginDate.getTime() - (weekPadding + daysToWeekStart) * MSECS_IN_DAY);
let layout = this.layout_manager;
let iter = new Date(beginDate);
@ -691,7 +685,7 @@ var Calendar = GObject.registerClass({
layout.attach(label, rtl ? 7 : 0, row, 1, 1);
}
iter.setDate(iter.getDate() + 1);
iter.setTime(iter.getTime() + MSECS_IN_DAY);
if (iter.getDay() == this._weekStart)
row++;

View File

@ -76,7 +76,7 @@ class KeyringDialog extends ModalDialog.ModalDialog {
warning.opacity = this.prompt.warning_visible ? 255 : 0;
});
this.prompt.connect('notify::warning', () => {
if (this._passwordEntry && this.prompt.warning !== '')
if (this._passwordEntry && warning !== '')
Util.wiggle(this._passwordEntry);
});
warningBox.add_child(warning);

View File

@ -127,10 +127,9 @@ class EventsSection extends St.Button {
}
setDate(date) {
this._startDate =
new Date(date.getFullYear(), date.getMonth(), date.getDate());
this._endDate =
new Date(date.getFullYear(), date.getMonth(), date.getDate() + 1);
const day = [date.getFullYear(), date.getMonth(), date.getDate()];
this._startDate = new Date(...day);
this._endDate = new Date(...day, 23, 59, 59, 999);
this._updateTitle();
this._reloadEvents();
@ -157,11 +156,11 @@ class EventsSection extends St.Button {
const timeSpanDay = GLib.TIME_SPAN_DAY / 1000;
const now = new Date();
if (this._startDate <= now && now < this._endDate)
if (this._startDate <= now && now <= this._endDate)
this._title.text = _('Today');
else if (this._endDate <= now && now - this._endDate < timeSpanDay)
else if (this._endDate < now && now - this._endDate < timeSpanDay)
this._title.text = _('Yesterday');
else if (this._startDate > now && this._startDate - now <= timeSpanDay)
else if (this._startDate > now && this._startDate - now < timeSpanDay)
this._title.text = _('Tomorrow');
else if (this._startDate.getFullYear() === now.getFullYear())
this._title.text = this._startDate.toLocaleFormat(sameYearFormat);
@ -170,8 +169,8 @@ class EventsSection extends St.Button {
}
_formatEventTime(event) {
const allDay =
event.date <= this._startDate && event.end >= this._endDate;
const allDay = event.allDay ||
(event.date <= this._startDate && event.end >= this._endDate);
let title;
if (allDay) {
@ -185,13 +184,13 @@ class EventsSection extends St.Button {
}
const rtl = Clutter.get_default_text_direction() === Clutter.TextDirection.RTL;
if (event.date < this._startDate) {
if (event.date < this._startDate && !event.allDay) {
if (rtl)
title = '%s%s'.format(title, ELLIPSIS_CHAR);
else
title = '%s%s'.format(ELLIPSIS_CHAR, title);
}
if (event.end > this._endDate) {
if (event.end > this._endDate && !event.allDay) {
if (rtl)
title = '%s%s'.format(ELLIPSIS_CHAR, title);
else

View File

@ -6,8 +6,6 @@ const Config = imports.misc.config;
imports.gi.versions.Clutter = Config.LIBMUTTER_API_VERSION;
imports.gi.versions.Gio = '2.0';
imports.gi.versions.GdkPixbuf = '2.0';
imports.gi.versions.GnomeBluetooth = '1.0';
imports.gi.versions.GnomeDesktop = '3.0';
imports.gi.versions.Gtk = '3.0';
imports.gi.versions.Soup = '3.0';
imports.gi.versions.TelepathyGLib = '0.12';

View File

@ -22,6 +22,7 @@ const UPDATE_CHECK_TIMEOUT = 24 * 60 * 60; // 1 day in seconds
var ExtensionManager = class {
constructor() {
this._initialized = false;
this._enabled = false;
this._updateNotified = false;
this._extensions = new Map();
@ -73,21 +74,6 @@ var ExtensionManager = class {
return [...this._extensions.keys()];
}
_extensionSupportsSessionMode(uuid) {
const extension = this.lookup(uuid);
if (!extension)
return false;
if (extension.sessionModes.includes(Main.sessionMode.currentMode))
return true;
if (extension.sessionModes.includes(Main.sessionMode.parentMode))
return true;
return false;
}
_callExtensionDisable(uuid) {
let extension = this.lookup(uuid);
if (!extension)
@ -147,7 +133,7 @@ var ExtensionManager = class {
}
_callExtensionEnable(uuid) {
if (!this._extensionSupportsSessionMode(uuid))
if (!Main.sessionMode.allowExtensions)
return;
let extension = this.lookup(uuid);
@ -329,7 +315,6 @@ var ExtensionManager = class {
hasPrefs: dir.get_child('prefs.js').query_exists(null),
hasUpdate: false,
canChange: false,
sessionModes: meta['session-modes'] ? meta['session-modes'] : ['user'],
};
this._extensions.set(uuid, extension);
@ -414,7 +399,7 @@ var ExtensionManager = class {
}
_callExtensionInit(uuid) {
if (!this._extensionSupportsSessionMode(uuid))
if (!Main.sessionMode.allowExtensions)
return false;
let extension = this.lookup(uuid);
@ -503,15 +488,13 @@ var ExtensionManager = class {
// Find and enable all the newly enabled extensions: UUIDs found in the
// new setting, but not in the old one.
newEnabledExtensions
.filter(uuid => !this._enabledExtensions.includes(uuid) &&
this._extensionSupportsSessionMode(uuid))
.filter(uuid => !this._enabledExtensions.includes(uuid))
.forEach(uuid => this._callExtensionEnable(uuid));
// Find and disable all the newly disabled extensions: UUIDs found in the
// old setting, but not in the new one.
this._extensionOrder
.filter(uuid => !newEnabledExtensions.includes(uuid) ||
!this._extensionSupportsSessionMode(uuid))
.filter(uuid => !newEnabledExtensions.includes(uuid))
.reverse().forEach(uuid => this._callExtensionDisable(uuid));
this._enabledExtensions = newEnabledExtensions;
@ -606,6 +589,9 @@ var ExtensionManager = class {
}
_enableAllExtensions() {
if (this._enabled)
return;
if (!this._initialized) {
this._loadExtensions();
this._initialized = true;
@ -614,20 +600,34 @@ var ExtensionManager = class {
this._callExtensionEnable(uuid);
});
}
this._enabled = true;
}
_disableAllExtensions() {
if (!this._enabled)
return;
if (this._initialized) {
this._extensionOrder.slice().reverse().forEach(uuid => {
this._callExtensionDisable(uuid);
});
}
this._enabled = false;
}
_sessionUpdated() {
// Take care of added or removed sessionMode extensions
this._onEnabledExtensionsChanged();
this._enableAllExtensions();
// For now sessionMode.allowExtensions controls extensions from both the
// 'enabled-extensions' preference and the sessionMode.enabledExtensions
// property; it might make sense to make enabledExtensions independent
// from allowExtensions in the future
if (Main.sessionMode.allowExtensions) {
// Take care of added or removed sessionMode extensions
this._onEnabledExtensionsChanged();
this._enableAllExtensions();
} else {
this._disableAllExtensions();
}
}
};
Signals.addSignalMethods(ExtensionManager.prototype);

View File

@ -934,6 +934,13 @@ var LayoutManager = GObject.registerClass({
}
}
_getWindowActorsForWorkspace(workspace) {
return global.get_window_actors().filter(actor => {
let win = actor.meta_window;
return win.located_on_workspace(workspace);
});
}
_updateFullscreen() {
this._updateVisibility();
this._queueUpdateRegions();
@ -967,9 +974,6 @@ var LayoutManager = GObject.registerClass({
for (i = 0; i < this._trackedActors.length; i++) {
let actorData = this._trackedActors[i];
if (!actorData.actor.get_paint_visibility())
continue;
if (!(actorData.affectsInputRegion && wantsInputRegion) && !actorData.affectsStruts)
continue;
@ -980,7 +984,7 @@ var LayoutManager = GObject.registerClass({
w = Math.round(w);
h = Math.round(h);
if (actorData.affectsInputRegion && wantsInputRegion)
if (actorData.affectsInputRegion && wantsInputRegion && actorData.actor.get_paint_visibility())
rects.push(new Meta.Rectangle({ x, y, width: w, height: h }));
let monitor = null;

View File

@ -200,7 +200,7 @@ var Magnifier = class Magnifier {
*/
startTrackingMouse() {
if (!this._pointerWatch) {
let interval = 1000 / 60;
let interval = 1000 / Clutter.get_default_frame_rate();
this._pointerWatch = PointerWatcher.getPointerWatcher().addWatch(interval, this.scrollToMousePos.bind(this));
}
}
@ -1898,7 +1898,6 @@ var MagShaderEffects = class MagShaderEffects {
this._colorDesaturation = new Clutter.DesaturateEffect();
this._inverse.set_enabled(false);
this._brightnessContrast.set_enabled(false);
this._colorDesaturation.set_enabled(false);
this._magView = uiGroupClone;
this._magView.add_effect(this._inverse);
@ -1931,7 +1930,6 @@ var MagShaderEffects = class MagShaderEffects {
setColorSaturation(factor) {
this._colorDesaturation.set_factor(1.0 - factor);
this._colorDesaturation.set_enabled(factor !== 1.0);
}
/**

View File

@ -49,6 +49,7 @@ const PointerA11yTimeout = imports.ui.pointerA11yTimeout;
const ParentalControlsManager = imports.misc.parentalControlsManager;
const Config = imports.misc.config;
const Util = imports.misc.util;
const RealmManager = imports.ui.realms.realmManager;
const WELCOME_DIALOG_LAST_SHOWN_VERSION = 'welcome-dialog-last-shown-version';
// Make sure to mention the point release, otherwise it will show every time
@ -91,6 +92,7 @@ var kbdA11yDialog = null;
var inputMethod = null;
var introspectService = null;
var locatePointer = null;
var realmManager = null;
let _startDate;
let _defaultCssStylesheet = null;
let _cssStylesheet = null;
@ -247,23 +249,6 @@ function _initializeUI() {
global.display.connect('gl-video-memory-purged', loadTheme);
global.context.connect('notify::unsafe-mode', () => {
if (!global.context.unsafe_mode)
return; // we're safe
if (lookingGlass?.isOpen)
return; // assume user action
const source = new MessageTray.SystemNotificationSource();
messageTray.add(source);
const notification = new MessageTray.Notification(source,
_('System was put in unsafe mode'),
_('Applications now have unrestricted access'));
notification.addAction(_('Undo'),
() => (global.context.unsafe_mode = false));
notification.setTransient(true);
source.showNotification(notification);
});
// Provide the bus object for gnome-session to
// initiate logouts.
EndSessionDialog.init();
@ -281,6 +266,8 @@ function _initializeUI() {
extensionManager = new ExtensionSystem.ExtensionManager();
extensionManager.init();
realmManager = new RealmManager.RealmManager();
if (sessionMode.isGreeter && screenShield) {
layoutManager.connect('startup-prepared', () => {
screenShield.showDialog();

View File

@ -663,24 +663,12 @@ var MessageListSection = GObject.registerClass({
}
removeMessage(message, animate) {
const messages = this._messages;
if (!messages.includes(message))
if (!this._messages.includes(message))
throw new Error(`Impossible to remove untracked message`);
let listItem = message.get_parent();
listItem._connectionsIds.forEach(id => message.disconnect(id));
let nextMessage = null;
if (message.has_key_focus()) {
const index = messages.indexOf(message);
nextMessage =
messages[index + 1] ||
messages[index - 1] ||
this._list;
}
if (animate) {
listItem.ease({
scale_x: 0,
@ -689,12 +677,10 @@ var MessageListSection = GObject.registerClass({
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
onComplete: () => {
listItem.destroy();
nextMessage?.grab_key_focus();
},
});
} else {
listItem.destroy();
nextMessage?.grab_key_focus();
}
}

View File

@ -251,7 +251,7 @@ var Overview = class {
DND.addDragMonitor(this._dragMonitor);
// Remember the workspace we started from
let workspaceManager = global.workspace_manager;
this._lastActiveWorkspaceIndex = workspaceManager.get_active_workspace_index();
this._lastActiveWorkspaceIndex = workspaceManager.get_active_workspace_id();
}
_onDragEnd(time) {

View File

@ -342,6 +342,8 @@ class ControlsManager extends St.Widget {
workspaceManager.connect('notify::n-workspaces',
this._updateAdjustment.bind(this));
this._contextSwitchedId = workspaceManager.connect('context-switched', this._updateAdjustment.bind(this));
this._searchController = new SearchController.SearchController(
this._searchEntry,
this.dash.showAppsButton);
@ -653,6 +655,7 @@ class ControlsManager extends St.Widget {
_onDestroy() {
global.workspace_manager.disconnect(this._nWorkspacesNotifyId);
global.workspace_manager.disconnect(this._contextSwitchedId);
}
_updateAdjustment() {

View File

@ -0,0 +1,37 @@
const { Clutter, GObject, Shell, St } = imports.gi;
const PanelMenu = imports.ui.panelMenu;
var RealmPanelIndicator = GObject.registerClass(
class RealmPanelIndicator extends PanelMenu.Button {
_init() {
super._init(0.5, "Current Realm");
this._label = new St.Label({
style_class: 'current-realm-label',
y_align: Clutter.ActorAlign.CENTER
});
this.add_child(this._label);
this.update();
}
clear() {
this._label.set_text('');
}
update() {
let realm_name = '';
const realms = Shell.Realms.get_default();
let current = realms.current_realm;
if (current) {
realm_name = current.realm_name;
this._label.set_text(`realm-${realm_name}`);
}
if (realm_name.length > 0) {
this._label.set_text(`realm-${realm_name}`);
} else {
this._label.set_text('');
}
}
});

View File

@ -0,0 +1,59 @@
const { Clutter, Gio, Meta, Shell, St } = imports.gi;
const Main = imports.ui.main;
const RealmIndicator = imports.ui.realms.realmIndicator;
const RealmSwitcher = imports.ui.realms.realmSwitcher;
const Lightbox = imports.ui.lightbox;
const RealmSearchProvider = imports.ui.realms.realmSearchProvider;
const RealmWindowFrame = imports.ui.realms.realmWindowFrame;
var RealmManager = class {
constructor() {
this._realmIndicator = new RealmIndicator.RealmPanelIndicator();
Main.panel.addToStatusArea('RealmIndicator', this._realmIndicator);
this._switchAction = Main.wm.addKeybinding('switch-realm',
new Gio.Settings({ schema_id: "org.gnome.shell.keybindings"}),
Meta.KeyBindingFlags.NONE,
Shell.ActionMode.NORMAL,
this._switchRealms.bind(this));
this._switchActionBackward = Main.wm.addKeybinding('switch-realm-backward',
new Gio.Settings({ schema_id: "org.gnome.shell.keybindings"}),
Meta.KeyBindingFlags.IS_REVERSED,
Shell.ActionMode.NORMAL,
this._switchRealms.bind(this));
const realms = Shell.Realms.get_default();
realms.connect('realm-context-switched', () => {
Main.overview.dash._queueRedisplay();
this._realmIndicator.update();
});
this._switchAnimation = new RealmSwitcher.ContextSwitchAnimationController(this._realmIndicator);
if (Main.overview._overview) {
this._searchResults = Main.overview._overview.controls._searchController._searchResults;
this._searchProvider = new RealmSearchProvider.RealmSearchProvider();
this._searchProvider.createResultDisplay(this._searchResults);
this._searchResults._registerProvider(this._searchProvider);
} else {
log("Not creating search provider because Main.overview._overview does not exist");
}
this._frameManager = new RealmWindowFrame.WindowFrameManager();
}
animateSwitch(from, to, onComplete) {
this._switchAnimation.animateSwitch(from, to, onComplete);
}
_switchRealms(display, window, binding) {
let popup = new RealmSwitcher.SwitchRealmPopup(this._switchAction, this._switchActionBackward);
if (!popup.show(binding.is_reversed(), binding.get_name(), binding.get_mask()))
popup.fadeAndDestroy();
}
};

View File

@ -0,0 +1,326 @@
const { Clutter, GObject, Pango, Shell, St } = imports.gi;
const Search = imports.ui.search;
const Main = imports.ui.main;
const Util = imports.misc.util;
// Based on ProviderInfo in search.js
var RealmProviderInfo = GObject.registerClass(
class RealmProviderInfo extends St.Button {
_init() {
super._init({
style_class: 'search-provider-icon',
reactive: false,
can_focus: false,
accessible_name: "Realms",
track_hover: false,
y_align: Clutter.ActorAlign.START,
});
this._content = new St.BoxLayout({ vertical: false,
style_class: 'list-search-provider-content' });
this.set_child(this._content);
let icon = new St.Icon({ icon_size: this.PROVIDER_ICON_SIZE,
icon_name: 'computer' });
let detailsBox = new St.BoxLayout({ style_class: 'list-search-provider-details',
vertical: true,
x_expand: true });
let nameLabel = new St.Label({
text: "Realms",
x_align: Clutter.ActorAlign.START
});
this._moreLabel = new St.Label({ x_align: Clutter.ActorAlign.START });
detailsBox.add_actor(nameLabel);
detailsBox.add_actor(this._moreLabel);
this._content.add_actor(icon);
this._content.add_actor(detailsBox);
}
get PROVIDER_ICON_SIZE() {
return 48;
}
setMoreCount(count) {
this._moreLabel.text = ngettext("%d more", "%d more", count).format(count);
this._moreLabel.visible = count > 0;
}
});
var MAX_LIST_SEARCH_RESULTS_ROWS = 10;
// Based on ListSearchResult in search.js
var RealmSearchResult = GObject.registerClass(
class ListSearchResult extends Search.SearchResult {
_init(provider, metaInfo, resultsView) {
super._init(provider, metaInfo, resultsView);
this.style_class = 'list-search-result';
let content = new St.BoxLayout({
style_class: 'list-search-result-content',
vertical: false,
x_align: Clutter.ActorAlign.FILL,
x_expand: true,
y_expand: true,
});
this.set_child(content);
this._termsChangedId = 0;
let titleBox = new St.BoxLayout({
style_class: 'list-search-result-title',
y_align: Clutter.ActorAlign.CENTER,
});
content.add_child(titleBox);
// An icon for, or thumbnail of, content
let icon = this.metaInfo['createIcon'](this.ICON_SIZE);
if (icon)
titleBox.add(icon);
let title = new St.Label({
text: this.metaInfo['name'],
y_align: Clutter.ActorAlign.CENTER,
});
titleBox.add_child(title);
this.label_actor = title;
if (this.metaInfo['description']) {
this._descriptionLabel = new St.Label({
style_class: 'list-search-result-description',
x_expand: true,
x_align: Clutter.ActorAlign.START,
y_align: Clutter.ActorAlign.CENTER,
});
this._descriptionLabel.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
content.add_child(this._descriptionLabel);
this._termsChangedId =
this._resultsView.connect('terms-changed',
this._highlightTerms.bind(this));
this._highlightTerms();
}
let id = this.metaInfo['id'];
if (id != ':new:') {
this.configButton = new St.Button({
style_class: 'button',
track_hover: true,
can_focus: true,
child: new St.Icon({
style_class: 'realm-config-icon',
icon_name: 'emblem-system-symbolic',
icon_size: 24,
}),
});
this.configButton.connect('clicked', () => {
Main.overview.toggle();
Util.spawn(['/usr/libexec/realm-config-ui', id]);
});
content.add_child(this.configButton);
}
this.connect('destroy', this._onDestroy.bind(this));
}
get ICON_SIZE() {
return 24;
}
_highlightTerms() {
let markup = this._resultsView.highlightTerms(this.metaInfo['description'].split('\n')[0]);
this._descriptionLabel.clutter_text.set_markup(markup);
}
_onDestroy() {
if (this._termsChangedId)
this._resultsView.disconnect(this._termsChangedId);
this._termsChangedId = 0;
}
});
// Based on ListSearchResults in search.js
var RealmSearchResults = GObject.registerClass(
class RealmSearchResults extends Search.SearchResultsBase {
_init(provider, resultsView) {
super._init(provider, resultsView);
this._container = new St.BoxLayout({ style_class: 'search-section-content' });
this.providerInfo = new RealmProviderInfo();
this.providerInfo.connect('key-focus-in', this._keyFocusIn.bind(this));
this.providerInfo.connect('clicked', () => {
Main.overview.toggle();
});
this._container.add_child(this.providerInfo);
this._content = new St.BoxLayout({
style_class: 'list-search-results',
vertical: true,
x_expand: true,
});
this._container.add_child(this._content);
this._resultDisplayBin.set_child(this._container);
}
_setMoreCount(count) {
this.providerInfo.setMoreCount(count);
}
_getMaxDisplayedResults() {
return MAX_LIST_SEARCH_RESULTS_ROWS;
}
_clearResultDisplay() {
this._content.remove_all_children();
}
_createResultDisplay(meta) {
return super._createResultDisplay(meta) ||
new RealmSearchResult(this.provider, meta, this._resultsView);
}
_addItem(display) {
this._content.add_actor(display);
}
getFirstResult() {
if (this._content.get_n_children() > 0)
return this._content.get_child_at_index(0);
else
return null;
}
});
var RealmSearchProvider = class RealmSearchProvider {
constructor() {
this._shellRealms = Shell.Realms.get_default();
this.id = 'realms';
this.isRemoteProvider = false;
this.canLaunchSearch = false;
this.display = null;
}
createResultDisplay(resultsView) {
this.display = new RealmSearchResults(this, resultsView);
this.display.connect('notify::focus-child', resultsView._focusChildChanged.bind(resultsView));
this.display.hide();
resultsView._content.add(this.display);
}
createIcon(size, realm) {
if (realm.is_running()) {
return new St.Icon({ icon_name: 'emblem-synchronizing', icon_size: size });
} else {
return new St.Icon({ icon_name: 'exaile', icon_size: size });
}
}
createRealmMeta(realm) {
let id = realm.get_realm_name();
let description = '';
if (realm.is_running()) {
description = `Set realm-${id} as current realm`;
} else {
description = `Start realm-${id}`;
}
return {
id: id,
name: `realm-${id}`,
description: description,
createIcon: size => {
return this.createIcon(size, realm);
},
};
}
createNewRealmMeta() {
return {
id: ':new:',
name: 'New Realm',
description: 'Create a new realm',
createIcon: size => {
return new St.Icon({
icon_name: 'computer',
icon_size: size,
});
}
}
}
getResultMetas (ids, callback) {
let metas = [];
for (let id of ids) {
if (id == ":new:") {
metas.push(this.createNewRealmMeta());
} else {
let realm = this._shellRealms.realm_by_name(id);
if (realm && !realm.is_current()) {
metas.push(this.createRealmMeta(realm));
} else {
log(`No realm found for ${id}`);
}
}
}
callback(metas);
}
activateResult (resultId, _terms) {
if (resultId == ':new:') {
Main.overview.toggle();
Util.spawn(['/usr/libexec/realm-config-ui', '--new']);
return;
}
let realm = this._shellRealms.realm_by_name(resultId);
if (realm) {
realm.set_current();
} else {
log(`No realm found for ${resultId}`);
}
}
filterResults(results, maxNumber) {
return results.slice(0, maxNumber)
}
getInitialResultSet(terms, callback, _cancellable) {
let realms = this._shellRealms.get_all_realms();
let matches = [];
if (terms.length == 1 && "new".startsWith(terms[0])) {
matches.push(":new:");
}
for (let realm of realms) {
if (!realm.is_current()) {
let name = realm.get_realm_name();
if (terms.every(t => name.indexOf(t) != -1)) {
matches.push(name);
}
}
}
callback(matches);
}
getSubsearchResultSet(previousResults, terms, callback, cancellable) {
this.getInitialResultSet(terms, callback, cancellable)
}
}

View File

@ -0,0 +1,325 @@
const { Clutter, GObject, Meta, Shell, St } = imports.gi;
const Background = imports.ui.background;
const SwitcherPopup = imports.ui.switcherPopup;
const Layout = imports.ui.layout;
const Main = imports.ui.main;
const WINDOW_ANIMATION_TIME = 2000;
var APP_ICON_SIZE = 96;
var RealmItem = GObject.registerClass(
class RealmItem extends St.BoxLayout {
_init(realm, workspace_group) {
super._init({ vertical: true });
this.realm = realm;
this.add_child(workspace_group);
this.label = new St.Label({
text: `realm-${this.realm.realm_name}`,
x_align: Clutter.ActorAlign.CENTER,
});
this.add_child(this.label);
}
activate() {
this.realm.set_current();
}
});
function getRealmItems() {
const monitor = Main.layoutManager.primaryMonitor;
const realms = Shell.Realms.get_default();
let realm_list = realms.get_running_realms();
let items = [];
realm_list.forEach(realm => {
let ws = realm.get_active_workspace();
if (ws) {
let size = 256; // default thumbnail size
let scale = Math.min(1.0, size / monitor.width, size / monitor.height);
let wsgroup = new WorkspaceGroup(ws, monitor, scale);
items.push(new RealmItem(realm, wsgroup));
}
});
return items;
}
var SwitchRealmList = GObject.registerClass(
class SwitchRealmList extends SwitcherPopup.SwitcherList {
_init(items) {
super._init(false);
items.forEach(item => {
this.addItem(item, item.label);
});
}
});
var SwitchRealmPopup = GObject.registerClass(
class SwitchRealmPopup extends SwitcherPopup.SwitcherPopup {
_init(action, actionBackward) {
super._init();
this._action = action;
this._actionBackward = actionBackward;
this._items = getRealmItems();
this._switcherList = new SwitchRealmList(this._items);
}
_keyPressHandler(keysym, action) {
if (action == this._action)
this._select(this._next());
else if (action == this._actionBackward)
this._select(this._previous());
else if (keysym == Clutter.KEY_Left)
this._select(this._previous());
else if (keysym == Clutter.KEY_Right)
this._select(this._next());
else
return Clutter.EVENT_PROPAGATE;
return Clutter.EVENT_STOP;
}
_finish() {
super._finish();
this._items[this._selectedIndex].activate();
}
});
const WorkspaceGroup = GObject.registerClass(
class WorkspaceGroup extends Clutter.Actor {
_init(workspace, monitor, scale = 1.0) {
super._init();
this._workspace = workspace;
this._monitor = monitor;
this._scale = scale;
this._windowRecords = [];
this.width = monitor.width * scale;
this.height = monitor.height * scale;
this._background = new Meta.BackgroundGroup({
width: this.width * this._scale,
height: this.height * this._scale,
});
this.add_actor(this._background);
this._bgManager = new Background.BackgroundManager({
container: this._background,
monitorIndex: this._monitor.index,
controlPosition: false,
});
this.clip_to_allocation = true;
this._createWindows();
this.connect('destroy', this._onDestroy.bind(this));
this._restackedId = global.display.connect('restacked', this._syncStacking.bind(this));
}
get workspace() {
return this._workspace;
}
_shouldShowWindow(window) {
if (!window.showing_on_its_workspace())
return false;
const geometry = global.display.get_monitor_geometry(this._monitor.index);
const [intersects] = window.get_frame_rect().intersect(geometry);
if (!intersects)
return false;
const isSticky = window.is_on_all_workspaces();
return !isSticky && window.located_on_workspace(this._workspace);
}
_syncStacking() {
const windowActors = global.get_window_actors().filter(w =>
this._shouldShowWindow(w.meta_window));
let lastRecord;
for (const windowActor of windowActors) {
const record = this._windowRecords.find(r => r.windowActor === windowActor);
this.set_child_above_sibling(record.clone, lastRecord ? lastRecord.clone : this._background);
lastRecord = record;
}
}
_createWindows() {
const windowActors = global.get_window_actors().filter(w =>
this._shouldShowWindow(w.meta_window));
for (const windowActor of windowActors) {
let [width,height] = windowActor.get_size();
const clone = new Clutter.Clone({
source: windowActor,
width: width * this._scale,
height: height * this._scale,
x: (windowActor.x - this._monitor.x) * this._scale,
y: (windowActor.y - this._monitor.y) * this._scale,
});
this.add_child(clone);
const record = {windowActor, clone };
record.windowDestroyId = windowActor.connect('destroy', () => {
clone.destroy();
this._windowRecords.splice(this._windowRecords.indexOf(record), 1);
});
this._windowRecords.push(record);
}
}
_removeWindows() {
for (const record of this._windowRecords) {
record.windowActor.disconnect(record.windowDestroyId);
record.clone.destroy();
}
this._windowRecords = [];
}
_onDestroy() {
global.display.disconnect(this._restackedId);
this._removeWindows();
this._bgManager.destroy();
}
});
const MonitorGroup = GObject.registerClass({
Properties: {
'progress': GObject.ParamSpec.double(
'progress', 'progress', 'progress',
GObject.ParamFlags.READWRITE,
-Infinity, Infinity, 0),
},
}, class MonitorGroup extends St.Widget {
_init(monitor, fromIndex, toIndex) {
super._init({
clip_to_allocation: true,
style_class: 'workspace-animation',
});
this._monitor = monitor;
const constraint = new Layout.MonitorConstraint({ index: monitor.index });
this.add_constraint(constraint);
this._container = new Clutter.Actor();
this.add_child(this._container);
this._progress = 0;
this._fadeOut = true;
this._workspaceGroups = [];
this._blackBackground = new Clutter.Actor();
this._blackBackground.width = monitor.width;
this._blackBackground.height = monitor.height;
let [_res, color] = Clutter.Color.from_string("#000000ff");
this._blackBackground.background_color = color;
this.addWorkspaceByIndex(toIndex, monitor);
// add opaque black actor
this._container.add_child(this._blackBackground);
this.addWorkspaceByIndex(fromIndex, monitor);
// tween 'from' WorkspaceGroup opacity from 255 to 0 fading workspace to black background
// tween 'block' actor opacity from 255 to 0 revealing 'to' WorkspaceGroup
}
addWorkspaceByIndex(idx, monitor) {
const workspaceManager = global.workspace_manager;
const ws = workspaceManager.get_workspace_by_index(idx);
if (ws) {
const fullscreen = ws.list_windows().some(w => w.get_monitor() === monitor.index && w.is_fullscreen());
const group = new WorkspaceGroup(ws, monitor);
this._workspaceGroups.push(group);
this._container.add_child(group);
}
}
get progress() {
return this._progress;
}
// Interpolate opacity from 0 (full opaque) to 50 (full transparent)
calculateOpacity(progress) {
return 255 - (255 * (progress / 50.0));
}
set progress(p) {
const fromGroup = this._workspaceGroups[this._workspaceGroups.length - 1];
this._progress = p;
// 0 - 50
if (p < 50) {
this._blackBackground.opacity = 255;
fromGroup.opacity = this.calculateOpacity(p);
} else if (p < 100) {
if (this._fadeOut) {
this._fadeOut = false;
}
fromGroup.opacity = 0;
this._blackBackground.opacity = this.calculateOpacity(p - 50);
} else {
fromGroup.opacity = 0;
this._blackBackground.opacity = 0;
}
}
});
var ContextSwitchAnimationController = class {
constructor(indicator) {
this._switchData = null;
this._indicator = indicator;
}
_prepareContextSwitch(fromIdx, toIdx) {
if (this._switchData) {
this._switchData.monitors[0].remove_all_transitions();
this._finishContextSwitch(this._switchData);
}
const switchData = {};
this._switchData = switchData;
switchData.monitors = [];
switchData.inProgress = false;
const monitor = Main.layoutManager.primaryMonitor;
const group = new MonitorGroup(monitor, fromIdx, toIdx);
Main.uiGroup.insert_child_above(group, global.window_group);
switchData.monitors.push(group);
Meta.disable_unredirect_for_display(global.display);
}
_finishContextSwitch(switchData) {
Meta.enable_unredirect_for_display(global.display);
this._indicator.update();
this._switchData = null;
switchData.monitors.forEach(m => m.destroy());
if (switchData.onComplete) {
switchData.onComplete();
}
}
animateSwitch(fromIdx, toIdx, onComplete) {
this._prepareContextSwitch(fromIdx, toIdx);
this._switchData.inProgress = true;
this._switchData.onComplete = onComplete;
const params = {
duration: WINDOW_ANIMATION_TIME,
mode: Clutter.AnimationMode.EASE_IN_OUT_QUAD,
};
params.onComplete = () => {
this._finishContextSwitch(this._switchData);
};
this._indicator.clear();
this._switchData.monitors[0].ease_property('progress', 100, params);
}
}

View File

@ -0,0 +1,323 @@
const { Clutter, Cogl, GObject, Meta, Shell, St } = imports.gi;
var WindowFrameManager = class WindowFrameManager {
constructor() {
this._realms = Shell.Realms.get_default();
let frames = this._realms.window_frames();
this._frame_effects = [];
global.window_manager.connect('map', this._handleWindowMap.bind(this));
global.workspace_manager.connect('context-window-moved', this._onContextWindowMoved.bind(this));
global.workspace_manager.connect('context-removed', this._onContextRemoved.bind(this));
frames.connect('realm-frame-colors-changed', this._onFrameColorsChanged.bind(this));
this.trackWindows();
}
_onContextWindowMoved(workspaceManager, window) {
let actor = window.get_compositor_private();
if (actor) {
this.handleWindow(actor);
}
return Clutter.EVENT_PROPAGATE;
}
_handleWindowMap(shellwm, actor) {
this.handleWindow(actor);
return Clutter.EVENT_PROPAGATE;
}
_onContextRemoved(workspaceManager, id) {
this.trackWindows();
}
_onFrameColorsChanged(realms) {
this.trackWindows();
}
trackWindows() {
var actors = global.get_window_actors();
actors.forEach(a => this.handleWindow(a));
}
handleWindow(actor) {
let win = actor.metaWindow;
let win_id = win.get_stable_sequence();
let effect = this._frame_effects[win_id];
let frames = this._realms.window_frames();
if (frames.has_frame(win) && frames.is_frame_enabled(win)) {
let color = frames.color_for_window(win);
if (effect) {
effect.setColor(color);
} else {
let label = frames.label_for_window(win);
effect = new RealmFrameEffect(actor, color, label);
this._frame_effects[win_id] = effect;
}
} else if (effect) {
effect.removeEffect(actor);
this._frame_effects[win_id] = null;
}
}
}
var RealmFrameEffect = GObject.registerClass(
class RealmFrameEffect extends Clutter.Effect {
_init(actor, color, label_text) {
super._init();
this._frame_width = 2;
this._pipeline = null;
this._color = color;
this._label_on_top = true;
this._label = null;
this._label_text = label_text;
if (label_text) {
this._updateLabel(actor.metaWindow);
}
this._sizeChangedId = actor.metaWindow.connect('size-changed', window => {
this._updateLabel(window);
});
actor.add_effect(this);
}
removeEffect(actor) {
if (this._label) {
actor.remove_child(this._label);
this._label = null;
}
if (this._sizeChangedId) {
let win = actor.metaWindow;
win.disconnect(this._sizeChangedId);
this._sizeChangedId = 0;
}
actor.remove_effect(this);
}
_createLabel(actor, label_text) {
let label = new St.Label({
style_class: 'realm-frame-label',
z_position: 1.0,
});
label.set_text(' '+label_text+' ');
actor.add_child(label);
return label;
}
_updateLabel(window) {
if (!this._label_text) {
return;
}
if (window.is_fullscreen()) {
if (this._label) {
let actor = window.get_compositor_private();
actor.remove_child(this._label);
this._label = null;
}
} else if (!this._label) {
let actor = window.get_compositor_private();
this._label = this._createLabel(actor, this._label_text);
}
if (this._label) {
this._updateLabelPosition(window);
this._updateLabelColor();
}
}
_updateLabelPosition(window) {
if (!this._label_height) {
// If we scale the text, the reported size of the label will not be the value we need so
// save the initial value.
this._label_height = this._label.get_height();
}
let maximized = window.is_fullscreen() === true || // Fullscreen
[Meta.MaximizeFlags.BOTH, Meta.MaximizeFlags.VERTICAL].includes(window.get_maximized()); // Maximized
this._label_on_top = !maximized;
let frame_rect = window.get_frame_rect();
let buffer_rect = window.get_buffer_rect();
let offsetX = frame_rect.x - buffer_rect.x;
let offsetY = frame_rect.y - buffer_rect.y;
if (window.get_client_type() === Meta.WindowClientType.WAYLAND) {
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
if (scaleFactor !== 1) {
offsetX = offsetX / scaleFactor;
this._label.set_style(`font-size: ${12 / scaleFactor}pt;`);
}
offsetX -= 1;
offsetY -= 4;
}
// If label is on top and there is enough space above title bar move position up by label height
if (this._label_on_top && this._label_height <= offsetY) {
offsetY -= this._label_height;
} else if (maximized) {
offsetX = 0;
offsetY = 0;
}
this._label.set_position(offsetX, offsetY);
}
_updateLabelColor() {
let fg = new Clutter.Color({
red: 0,
green: 0,
blue: 0,
alpha: 96,
});
let bg = this._color.copy();
if (this._label_on_top) {
bg.alpha = 100;
} else {
bg.alpha = 200;
}
let clutter_text = this._label.get_clutter_text();
clutter_text.set_color(fg);
clutter_text.set_background_color(bg);
}
setColor(color) {
if (this._color && this._color.equal(color)) {
return;
}
this._color = color;
this.setPipelineColor();
if (this._label) {
this._updateLabelColor();
}
}
setPipelineColor() {
if (!this._color || !this._pipeline) {
return;
}
let s = this._color.to_string();
let cogl_color = new Cogl.Color();
cogl_color.init_from_4ub(this._color.red, this._color.green, this._color.blue, 0xc4);
this._pipeline.set_color(cogl_color);
}
_calculate_frame_box(window, allocation) {
let frame_rect = window.get_frame_rect();
let buffer_rect = window.get_buffer_rect();
let offsetX = frame_rect.x - buffer_rect.x;
let offsetY = frame_rect.y - buffer_rect.y;
let top = offsetY - 3;
let bottom = offsetY - 1;
let left = offsetX - 3;
let right = offsetX - 1;
let wayland = window.get_client_type() == Meta.WindowClientType.WAYLAND;
if (wayland) {
bottom += 4;
}
let fw = this._frame_width;
switch (window.get_maximized()) {
case Meta.MaximizeFlags.BOTH:
top += fw;
right += fw;
bottom += fw - (wayland ? 5 : 0);
left += fw;
break;
case Meta.MaximizeFlags.HORIZONTAL:
right += fw;
left += fw;
break;
case Meta.MaximizeFlags.VERTICAL:
top += fw;
bottom += fw;
break;
}
if (window.is_fullscreen()) {
top += 3;
right += 2;
bottom -= (wayland ? 3 : 0);
left += 3;
}
if (!wayland && !window.decorated && !window.is_fullscreen() && (window.get_maximized() !== Meta.MaximizeFlags.BOTH)) {
bottom += 4;
}
let x = left;
let y = top + fw;
let w = allocation.get_width() - (right + left);
let h = allocation.get_height() - (bottom + top + fw);
return [x, y, w, h];
}
draw_rect(node, x, y, width, height) {
const box = new Clutter.ActorBox();
box.set_origin(x, y);
box.set_size(width, height);
node.add_rectangle(box);
}
draw_hline(node, x, y, width, width_factor = 1) {
this.draw_rect(node, x, y, width, this._frame_width * width_factor);
}
draw_vline(node, x, y, height, width_factor = 1) {
this.draw_rect(node, x, y, this._frame_width * width_factor, height);
}
vfunc_paint_node(node, ctx) {
let actor = this.get_actor();
const actorNode = new Clutter.ActorNode(actor, -1);
node.add_child(actorNode);
if (!this._pipeline) {
let framebuffer = ctx.get_framebuffer();
let coglContext = framebuffer.get_context();
this._pipeline = new Cogl.Pipeline(coglContext);
this.setPipelineColor();
}
const pipelineNode = new Clutter.PipelineNode(this._pipeline);
pipelineNode.set_name('Realm Frame');
node.add_child(pipelineNode);
let [x, y, width, height] = this._calculate_frame_box(actor.metaWindow, actor.get_allocation_box());
// Top
this.draw_hline(pipelineNode, x, y, width, 2);
// Right
this.draw_vline(pipelineNode, x + width, y, height);
// Bottom
this.draw_hline(pipelineNode, x, y + height, width);
// Left
this.draw_vline(pipelineNode, x, y, height);
}
});

View File

@ -0,0 +1,133 @@
const { Shell, GObject } = imports.gi;
const PopupMenu = imports.ui.popupMenu;
function _windowAppId(window) {
const tracker = Shell.WindowTracker.get_default();
const app = tracker.get_window_app(window);
if (app) {
return app.get_id();
} else {
log(`No app found for window ${window.get_description()}`)
return null;
}
}
function windowMenuDebugString(window) {
const id = _windowAppId(window);
const realm_name = windowRealmName(window);
if (!realm_name) {
return id;
} else if (window.is_on_foreign_workspace_context()) {
return `${id} [${realm_name}]`;
} else {
return `${id} (${realm_name})`;
}
}
function _createMoveWindowItem(label, realm_name, window) {
let item = new PopupMenu.PopupMenuItem(label);
item.connect('activate', () => {
let realms = Shell.Realms.get_default();
let realm = realms.realm_by_name(realm_name);
if (realm) {
realm.move_window_to_context(window);
}
});
return item;
}
// Return name of the realm the application this window belongs to is running in.
function windowRealmName(window) {
const realms = Shell.Realms.get_default();
if (realms.is_citadel_window(window)) {
return "Citadel"
}
let realm = realms.realm_by_window(window);
if (realm) {
return realm.realm_name;
} else {
return null;
}
}
// Return name of realm the context this window is currently located on belongs to
function windowContextRealmName(window) {
if (window.on_all_workspaces) {
return windowRealmName(window);
}
let ws = window.get_workspace();
if (!ws) {
return null;
}
const realms = Shell.Realms.get_default();
let realm = realms.realm_by_context_id(ws.get_context_id());
if (realm) {
return realm.realm_name;
} else {
return null;
}
}
function enableFrameItem(window) {
const realms = Shell.Realms.get_default();
const frames = realms.window_frames();
if (!frames.has_frame(window)) {
return null;
}
let enabled = frames.is_frame_enabled(window);
let item = new PopupMenu.PopupMenuItem("Display colored window frame");
if (enabled) {
item.setOrnament(PopupMenu.Ornament.CHECK);
}
item.connect('activate', () => {
let realms = Shell.Realms.get_default();
const frames = realms.window_frames();
frames.set_frame_enabled(window, !enabled);
});
return item;
}
function realmWindowMenu(window) {
const realm_name = windowContextRealmName(window);
if (!realm_name) {
return null;
}
const realms = Shell.Realms.get_default();
let other_realms = [];
let running_realms = realms.get_running_realms();
running_realms.forEach(realm => {
if (realm.realm_name != realm_name) {
other_realms.push(realm.realm_name);
}
});
if (other_realms.length == 0) {
return null;
} else if (other_realms.length == 1) {
let name = other_realms[0];
return _createMoveWindowItem(`Move to realm-${name}`, name, window);
}
let subMenu = new PopupMenu.PopupSubMenuMenuItem('Move to Realm...', true);
other_realms.forEach(name => {
let item = _createMoveWindowItem(`realm-${name}`, name, window);
subMenu.menu.addMenuItem(item);
});
return subMenu;
}

View File

@ -249,8 +249,8 @@ class RunDialog extends ModalDialog.ModalDialog {
this._commandError = false;
if (this._lockdownSettings.get_boolean(DISABLE_COMMAND_LINE_KEY))
return false;
return;
return super.open();
super.open();
}
});

View File

@ -20,6 +20,7 @@ const _modes = {
showCalendarEvents: false,
showWelcomeDialog: false,
allowSettings: false,
allowExtensions: false,
allowScreencast: false,
enabledExtensions: [],
hasRunDialog: false,
@ -70,9 +71,10 @@ const _modes = {
'user': {
hasOverview: true,
showCalendarEvents: true,
showCalendarEvents: false,
showWelcomeDialog: true,
allowSettings: true,
allowExtensions: true,
allowScreencast: true,
hasRunDialog: true,
hasWorkspaces: true,

View File

@ -542,6 +542,7 @@ var GnomeShellMountOpHandler = class {
Gio.BusNameOwnerFlags.REPLACE, null, null);
this._dialog = null;
this._volumeMonitor = Gio.VolumeMonitor.get();
this._ensureEmptyRequest();
}

View File

@ -113,7 +113,7 @@ class Indicator extends PanelMenu.SystemIndicator {
bindFlags);
this._sessionSubMenu = new PopupMenu.PopupSubMenuMenuItem(
_('Power Off / Log Out'), true);
_('Power Off'), true);
this._sessionSubMenu.icon.icon_name = 'system-shutdown-symbolic';
item = new PopupMenu.PopupMenuItem(_('Suspend'));

View File

@ -493,7 +493,7 @@ var SwipeTracker = GObject.registerClass({
this.bind_property('orientation', this._touchGesture, 'orientation',
GObject.BindingFlags.SYNC_CREATE);
this.bind_property('distance', this._touchGesture, 'distance', 0);
global.stage.add_action_full('swipe', Clutter.EventPhase.CAPTURE, this._touchGesture);
global.stage.add_action(this._touchGesture);
if (params.allowDrag) {
this._dragGesture = new TouchSwipeGesture(allowedModes, 1,

View File

@ -676,14 +676,16 @@ var UnlockDialog = GObject.registerClass({
}
_ensureAuthPrompt() {
if (!this._authPrompt) {
this._authPrompt = new AuthPrompt.AuthPrompt(this._gdmClient,
AuthPrompt.AuthPromptMode.UNLOCK_ONLY);
this._authPrompt.connect('failed', this._fail.bind(this));
this._authPrompt.connect('cancelled', this._fail.bind(this));
this._authPrompt.connect('reset', this._onReset.bind(this));
this._promptBox.add_child(this._authPrompt);
}
if (this._authPrompt)
return;
this._authPrompt = new AuthPrompt.AuthPrompt(this._gdmClient,
AuthPrompt.AuthPromptMode.UNLOCK_ONLY);
this._authPrompt.connect('failed', this._fail.bind(this));
this._authPrompt.connect('cancelled', this._fail.bind(this));
this._authPrompt.connect('reset', this._onReset.bind(this));
this._promptBox.add_child(this._authPrompt);
this._authPrompt.reset();
this._authPrompt.updateSensitivity(true);
@ -870,11 +872,7 @@ var UnlockDialog = GObject.registerClass({
}
finish(onComplete) {
if (!this._authPrompt) {
onComplete();
return;
}
this._ensureAuthPrompt();
this._authPrompt.finish(onComplete);
}

View File

@ -26,9 +26,9 @@ class WelcomeDialog extends ModalDialog.ModalDialog {
open() {
if (!this._tourAppInfo)
return false;
return;
return super.open();
super.open();
}
_buildLayout() {

View File

@ -198,6 +198,8 @@ var WorkspaceTracker = class {
workspaceManager.connect('workspaces-reordered', () => {
this._workspaces.sort((a, b) => a.index() - b.index());
});
workspaceManager.connect('context-switched',
this._workspaceContextSwitched.bind(this));
global.window_manager.connect('switch-workspace',
this._queueCheckWorkspaces.bind(this));
@ -253,6 +255,8 @@ var WorkspaceTracker = class {
emptyWorkspaces[index] = false;
}
let current_context_id = workspaceManager.active_context_id();
let windows = global.get_window_actors();
for (i = 0; i < windows.length; i++) {
let actor = windows[i];
@ -261,7 +265,12 @@ var WorkspaceTracker = class {
if (win.is_on_all_workspaces())
continue;
let workspaceIndex = win.get_workspace().index();
let workspace = win.get_workspace();
if (workspace.get_context_id() != current_context_id)
continue;
let workspaceIndex = workspace.index();
emptyWorkspaces[workspaceIndex] = false;
}
@ -339,6 +348,28 @@ var WorkspaceTracker = class {
this._checkWorkspacesId = Meta.later_add(Meta.LaterType.BEFORE_REDRAW, this._checkWorkspaces.bind(this));
}
_workspaceContextSwitched() {
let workspaceManager = global.workspace_manager;
let numWorkspaces = workspaceManager.n_workspaces;
this._workspaces.forEach(workspace => {
workspace.disconnect(workspace._windowAddedId);
workspace.disconnect(workspace._windowRemovedId);
});
this._workspaces = [];
for (let w = 0; w < numWorkspaces; w++) {
let workspace = workspaceManager.get_workspace_by_index(w);
workspace._windowAddedId = workspace.connect('window-added', this._queueCheckWorkspaces.bind(this));
workspace._windowRemovedId = workspace.connect('window-removed', this._windowRemoved.bind(this));
this._workspaces[w] = workspace;
}
this._queueCheckWorkspaces();
return false;
}
_nWorkspacesChanged() {
let workspaceManager = global.workspace_manager;
let oldNumWorkspaces = this._workspaces.length;
@ -936,7 +967,7 @@ var WindowManager = class {
let appSwitchAction = new AppSwitchAction();
appSwitchAction.connect('activated', this._switchApp.bind(this));
global.stage.add_action_full('app-switch', Clutter.EventPhase.CAPTURE, appSwitchAction);
global.stage.add_action(appSwitchAction);
let mode = Shell.ActionMode.ALL & ~Shell.ActionMode.LOCK_SCREEN;
let topDragAction = new EdgeDragAction.EdgeDragAction(St.Side.TOP, mode);
@ -954,7 +985,7 @@ var WindowManager = class {
global.display.connect('notify::focus-window', updateUnfullscreenGesture);
global.display.connect('in-fullscreen-changed', updateUnfullscreenGesture);
global.stage.add_action_full('unfullscreen', Clutter.EventPhase.CAPTURE, topDragAction);
global.stage.add_action(topDragAction);
this._workspaceAnimation =
new WorkspaceAnimation.WorkspaceAnimationController();
@ -1641,6 +1672,14 @@ var WindowManager = class {
this._switchInProgress = true;
if (direction == Meta.MotionDirection.CONTEXT_SWITCH) {
Main.realmManager.animateSwitch(from, to, () => {
this._shellwm.completed_switch_workspace();
this._switchInProgress = false;
});
return;
}
this._workspaceAnimation.animateSwitch(from, to, direction, () => {
this._shellwm.completed_switch_workspace();
this._switchInProgress = false;

View File

@ -1,11 +1,12 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*
/* exported WindowMenuManager */
const { GLib, Meta, St } = imports.gi;
const { GLib, Meta, Shell, St } = imports.gi;
const BoxPointer = imports.ui.boxpointer;
const Main = imports.ui.main;
const PopupMenu = imports.ui.popupMenu;
const RealmWindowMenu = imports.ui.realms.realmWindowMenu;
var WindowMenu = class extends PopupMenu.PopupMenu {
constructor(window, sourceActor) {
@ -24,6 +25,23 @@ var WindowMenu = class extends PopupMenu.PopupMenu {
let item;
let s = RealmWindowMenu.windowMenuDebugString(window);
this.addMenuItem(new PopupMenu.PopupSeparatorMenuItem(s));
item = RealmWindowMenu.enableFrameItem(window);
if (item) {
this.addMenuItem(item);
}
if (!window.is_on_all_workspaces()) {
let realmSubmenu = RealmWindowMenu.realmWindowMenu(window);
if (realmSubmenu) {
this.addMenuItem(realmSubmenu);
}
}
this.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
item = this.addAction(_('Hide'), () => {
window.minimize();
});

View File

@ -122,6 +122,10 @@ class WorkspacesView extends WorkspacesViewBase {
this._updateWorkspacesId =
workspaceManager.connect('notify::n-workspaces',
this._updateWorkspaces.bind(this));
this._contextSwitchedId =
workspaceManager.connect('context-switched',
this._refreshWorkspaces.bind(this));
this._reorderWorkspacesId =
workspaceManager.connect('workspaces-reordered', () => {
this._workspaces.sort((a, b) => {
@ -450,6 +454,13 @@ class WorkspacesView extends WorkspacesViewBase {
}
}
_refreshWorkspaces() {
for (let ws = this._workspaces.pop(); ws; ws = this._workspaces.pop()) {
ws.destroy();
}
this._updateWorkspaces();
}
_updateWorkspaces() {
let workspaceManager = global.workspace_manager;
let newNumWorkspaces = workspaceManager.n_workspaces;
@ -499,6 +510,7 @@ class WorkspacesView extends WorkspacesViewBase {
global.window_manager.disconnect(this._switchWorkspaceNotifyId);
let workspaceManager = global.workspace_manager;
workspaceManager.disconnect(this._updateWorkspacesId);
workspaceManager.disconnect(this._contextSwitchedId);
workspaceManager.disconnect(this._reorderWorkspacesId);
}

View File

@ -1,5 +1,5 @@
project('gnome-shell', 'c',
version: '41.0',
version: '41.1',
meson_version: '>= 0.53.0',
license: 'GPLv2+'
)
@ -8,9 +8,10 @@ split_version = meson.project_version().split('.')
# We depend on a specific version of the libmutter API. The mutter variants of
# the Cogl and Clutter libraries also use this API version.
# The API version is increased each development cycle,
# The API version is increased automatically each development cycle,
# starting with 0 in 3.23.x
mutter_api_version = '10'
api_version = split_version[0].to_int() - 32
mutter_api_version = '@0@'.format(api_version)
clutter_pc = 'mutter-clutter-' + mutter_api_version
cogl_pc = 'mutter-cogl-' + mutter_api_version
@ -18,8 +19,8 @@ cogl_pango_pc = 'mutter-cogl-pango-' + mutter_api_version
libmutter_pc = 'libmutter-' + mutter_api_version
libmutter_test_pc = 'libmutter-test-' + mutter_api_version
ecal_req = '>= 3.33.1'
eds_req = '>= 3.33.1'
#ecal_req = '>= 3.33.1'
#eds_req = '>= 3.33.1'
gcr_req = '>= 3.7.5'
gio_req = '>= 2.56.0'
gi_req = '>= 1.49.1'
@ -71,8 +72,8 @@ else
endif
atk_bridge_dep = dependency('atk-bridge-2.0')
ecal_dep = dependency('libecal-2.0', version: ecal_req)
eds_dep = dependency('libedataserver-1.2', version: eds_req)
#ecal_dep = dependency('libecal-2.0', version: ecal_req)
#eds_dep = dependency('libedataserver-1.2', version: eds_req)
gcr_dep = dependency('gcr-base-3', version: gcr_req)
gdk_x11_dep = dependency('gdk-x11-3.0')
gdk_pixbuf_dep = dependency('gdk-pixbuf-2.0')
@ -138,7 +139,7 @@ endif
mutter_typelibdir = mutter_dep.get_pkgconfig_variable('typelibdir')
python = find_program('python3')
gjs = find_program('gjs')
gjs = '/usr/bin/gjs'
cc = meson.get_compiler('c')

280
po/es.po
View File

@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell.master\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
"POT-Creation-Date: 2021-11-13 20:24+0000\n"
"POT-Creation-Date: 2021-08-17 23:56+0000\n"
"PO-Revision-Date: 2021-08-25 16:54+0200\n"
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
"Language-Team: Spanish - Spain <gnome-es-list@gnome.org>\n"
@ -257,11 +257,23 @@ msgstr ""
"posible y un número muy grande representará una versión que todavía no "
"existe. Este número muy grande se puede usar para desactivar el diálogo."
#: data/org.gnome.shell.gschema.xml.in:133
#: data/org.gnome.shell.gschema.xml.in:109
msgid "Enable introspection API"
msgstr "Activar la introspección de API"
#: data/org.gnome.shell.gschema.xml.in:110
msgid ""
"Enables a D-Bus API that allows to introspect the application state of the "
"shell."
msgstr ""
"Activa una API de D-Bus que permite la introspección del estado de la "
"aplicación de la shell."
#: data/org.gnome.shell.gschema.xml.in:141
msgid "Layout of the app picker"
msgstr "Distribución del selector de aplicaciones"
#: data/org.gnome.shell.gschema.xml.in:134
#: data/org.gnome.shell.gschema.xml.in:142
msgid ""
"Layout of the app picker. Each entry in the array is a page. Pages are "
"stored in the order they appear in GNOME Shell. Each page contains an "
@ -274,112 +286,112 @@ msgstr ""
"guardan los siguientes valores como 'data': • “position”:la posición del "
"icono de la aplicación en la página"
#: data/org.gnome.shell.gschema.xml.in:149
#: data/org.gnome.shell.gschema.xml.in:157
msgid "Keybinding to open the application menu"
msgstr "Asociación de teclas para abrir el menú de la aplicación"
#: data/org.gnome.shell.gschema.xml.in:150
#: data/org.gnome.shell.gschema.xml.in:158
msgid "Keybinding to open the application menu."
msgstr "Asociación de teclas para abrir el menú de la aplicación."
#: data/org.gnome.shell.gschema.xml.in:156
#: data/org.gnome.shell.gschema.xml.in:163
#: data/org.gnome.shell.gschema.xml.in:164
#: data/org.gnome.shell.gschema.xml.in:171
msgid "Keybinding to shift between overview states"
msgstr "Asociación de teclas para cambiar entre estados de la vista general"
#: data/org.gnome.shell.gschema.xml.in:157
#: data/org.gnome.shell.gschema.xml.in:165
msgid "Keybinding to shift between session, window picker and app grid"
msgstr ""
"Asociación de teclas para cambiar entre sesión, selector de ventanas y "
"cuadrícula de aplicaciones"
#: data/org.gnome.shell.gschema.xml.in:164
#: data/org.gnome.shell.gschema.xml.in:172
msgid "Keybinding to shift between app grid, window picker and session"
msgstr ""
"Asociación de teclas para cambiar entre cuadrícula de aplicaciones, selector "
"de ventanas y sesión"
#: data/org.gnome.shell.gschema.xml.in:170
#: data/org.gnome.shell.gschema.xml.in:178
msgid "Keybinding to open the “Show Applications” view"
msgstr "Asociación de teclas para la vista «Mostrar aplicaciones»"
#: data/org.gnome.shell.gschema.xml.in:171
#: data/org.gnome.shell.gschema.xml.in:179
msgid ""
"Keybinding to open the “Show Applications” view of the Activities Overview."
msgstr ""
"Asociación de teclas para abrir la vista «Mostrar aplicaciones» de la vista "
"de actividades."
#: data/org.gnome.shell.gschema.xml.in:178
#: data/org.gnome.shell.gschema.xml.in:186
msgid "Keybinding to open the overview"
msgstr "Asociación de teclas para la vista general"
#: data/org.gnome.shell.gschema.xml.in:179
#: data/org.gnome.shell.gschema.xml.in:187
msgid "Keybinding to open the Activities Overview."
msgstr "Asociación de teclas para abrir la Vista de actividades."
#: data/org.gnome.shell.gschema.xml.in:185
#: data/org.gnome.shell.gschema.xml.in:193
msgid "Keybinding to toggle the visibility of the notification list"
msgstr ""
"Asociación de teclas para cambiar la visibilidad de la lista de "
"notificaciones"
#: data/org.gnome.shell.gschema.xml.in:186
#: data/org.gnome.shell.gschema.xml.in:194
msgid "Keybinding to toggle the visibility of the notification list."
msgstr ""
"Asociación de teclas para cambiar la visibilidad de la lista de "
"notificaciones."
#: data/org.gnome.shell.gschema.xml.in:192
#: data/org.gnome.shell.gschema.xml.in:200
msgid "Keybinding to focus the active notification"
msgstr "Asociación de teclas para dar el foco a la notificación activa"
#: data/org.gnome.shell.gschema.xml.in:193
#: data/org.gnome.shell.gschema.xml.in:201
msgid "Keybinding to focus the active notification."
msgstr "Asociación de teclas para dar el foco a la notificación activa."
#: data/org.gnome.shell.gschema.xml.in:199
#: data/org.gnome.shell.gschema.xml.in:207
msgid "Switch to application 1"
msgstr "Cambiar a la aplicación 1"
#: data/org.gnome.shell.gschema.xml.in:203
#: data/org.gnome.shell.gschema.xml.in:211
msgid "Switch to application 2"
msgstr "Cambiar a la aplicación 2"
#: data/org.gnome.shell.gschema.xml.in:207
#: data/org.gnome.shell.gschema.xml.in:215
msgid "Switch to application 3"
msgstr "Cambiar a la aplicación 3"
#: data/org.gnome.shell.gschema.xml.in:211
#: data/org.gnome.shell.gschema.xml.in:219
msgid "Switch to application 4"
msgstr "Cambiar a la aplicación 4"
#: data/org.gnome.shell.gschema.xml.in:215
#: data/org.gnome.shell.gschema.xml.in:223
msgid "Switch to application 5"
msgstr "Cambiar a la aplicación 5"
#: data/org.gnome.shell.gschema.xml.in:219
#: data/org.gnome.shell.gschema.xml.in:227
msgid "Switch to application 6"
msgstr "Cambiar a la aplicación 6"
#: data/org.gnome.shell.gschema.xml.in:223
#: data/org.gnome.shell.gschema.xml.in:231
msgid "Switch to application 7"
msgstr "Cambiar a la aplicación 7"
#: data/org.gnome.shell.gschema.xml.in:227
#: data/org.gnome.shell.gschema.xml.in:235
msgid "Switch to application 8"
msgstr "Cambiar a la aplicación 8"
#: data/org.gnome.shell.gschema.xml.in:231
#: data/org.gnome.shell.gschema.xml.in:239
msgid "Switch to application 9"
msgstr "Cambiar a la aplicación 9"
#: data/org.gnome.shell.gschema.xml.in:240
#: data/org.gnome.shell.gschema.xml.in:267
#: data/org.gnome.shell.gschema.xml.in:248
#: data/org.gnome.shell.gschema.xml.in:275
msgid "Limit switcher to current workspace."
msgstr "Limitar el intercambiador al área de trabajo actual."
#: data/org.gnome.shell.gschema.xml.in:241
#: data/org.gnome.shell.gschema.xml.in:249
msgid ""
"If true, only applications that have windows on the current workspace are "
"shown in the switcher. Otherwise, all applications are included."
@ -388,11 +400,11 @@ msgstr ""
"trabajo actual se muestran en el selector. Si no, se incluyen todas las "
"aplicaciones."
#: data/org.gnome.shell.gschema.xml.in:258
#: data/org.gnome.shell.gschema.xml.in:266
msgid "The application icon mode."
msgstr "El modo de icono de la aplicación."
#: data/org.gnome.shell.gschema.xml.in:259
#: data/org.gnome.shell.gschema.xml.in:267
msgid ""
"Configures how the windows are shown in the switcher. Valid possibilities "
"are “thumbnail-only” (shows a thumbnail of the window), “app-icon-"
@ -402,7 +414,7 @@ msgstr ""
"son «thumbnail-only» (muestra una miniatura de la ventana), «app-icon-"
"only» (sólo muestra el icono de la aplicación) «both»."
#: data/org.gnome.shell.gschema.xml.in:268
#: data/org.gnome.shell.gschema.xml.in:276
msgid ""
"If true, only windows from the current workspace are shown in the switcher. "
"Otherwise, all windows are included."
@ -410,59 +422,59 @@ msgstr ""
"Si es cierto, sólo se muestran en el selector las ventanas del área de "
"trabajo actual. Si no, se incluyen todas las ventanas."
#: data/org.gnome.shell.gschema.xml.in:278
#: data/org.gnome.shell.gschema.xml.in:286
msgid "Locations"
msgstr "Ubicaciones"
#: data/org.gnome.shell.gschema.xml.in:279
#: data/org.gnome.shell.gschema.xml.in:287
msgid "The locations to show in world clocks"
msgstr "Las ubicaciones que mostrar en los relojes del mundo"
#: data/org.gnome.shell.gschema.xml.in:289
#: data/org.gnome.shell.gschema.xml.in:297
msgid "Automatic location"
msgstr "Ubicación automática"
#: data/org.gnome.shell.gschema.xml.in:290
#: data/org.gnome.shell.gschema.xml.in:298
msgid "Whether to fetch the current location or not"
msgstr "Indica si se debe o no obtener la ubicación actual"
#: data/org.gnome.shell.gschema.xml.in:297
#: data/org.gnome.shell.gschema.xml.in:305
msgid "Location"
msgstr "Ubicación"
#: data/org.gnome.shell.gschema.xml.in:298
#: data/org.gnome.shell.gschema.xml.in:306
msgid "The location for which to show a forecast"
msgstr "La ubicación para la que mostrar la predicción"
#: data/org.gnome.shell.gschema.xml.in:310
#: data/org.gnome.shell.gschema.xml.in:318
msgid "Attach modal dialog to the parent window"
msgstr "Acoplar un diálogo modal a la ventana padre"
#: data/org.gnome.shell.gschema.xml.in:311
#: data/org.gnome.shell.gschema.xml.in:320
#: data/org.gnome.shell.gschema.xml.in:319
#: data/org.gnome.shell.gschema.xml.in:328
#: data/org.gnome.shell.gschema.xml.in:336
#: data/org.gnome.shell.gschema.xml.in:344
#: data/org.gnome.shell.gschema.xml.in:352
msgid ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgstr ""
"Esta clave sobrescribe la clave en org.gnome.mutter al ejecutar GNOME Shell."
#: data/org.gnome.shell.gschema.xml.in:319
#: data/org.gnome.shell.gschema.xml.in:327
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr ""
"Activar el mosaico en los bordes al arrastrar ventanas a los bordes de la "
"ventana"
#: data/org.gnome.shell.gschema.xml.in:327
#: data/org.gnome.shell.gschema.xml.in:335
msgid "Workspaces are managed dynamically"
msgstr "Las áreas de trabajo se gestionan dinámicamente"
#: data/org.gnome.shell.gschema.xml.in:335
#: data/org.gnome.shell.gschema.xml.in:343
msgid "Workspaces only on primary monitor"
msgstr "Áreas de trabajo solo en la pantalla principal"
#: data/org.gnome.shell.gschema.xml.in:343
#: data/org.gnome.shell.gschema.xml.in:351
msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr ""
"Retardo al cambiar el foco del ratón hasta que el puntero deja de moverse"
@ -498,18 +510,18 @@ msgid "Visit extension homepage"
msgstr "Visitar la página web de la extensión"
#: js/gdm/authPrompt.js:141 js/ui/audioDeviceSelection.js:61
#: js/ui/components/networkAgent.js:110 js/ui/components/polkitAgent.js:138
#: js/ui/endSessionDialog.js:438 js/ui/extensionDownloader.js:228
#: js/ui/components/networkAgent.js:111 js/ui/components/polkitAgent.js:138
#: js/ui/endSessionDialog.js:438 js/ui/extensionDownloader.js:190
#: js/ui/shellMountOperation.js:376 js/ui/shellMountOperation.js:386
#: js/ui/status/network.js:978 subprojects/extensions-app/js/main.js:183
msgid "Cancel"
msgstr "Cancelar"
#. Cisco LEAP
#: js/gdm/authPrompt.js:285 js/ui/components/networkAgent.js:209
#: js/ui/components/networkAgent.js:225 js/ui/components/networkAgent.js:249
#: js/ui/components/networkAgent.js:270 js/ui/components/networkAgent.js:290
#: js/ui/components/networkAgent.js:300 js/ui/components/polkitAgent.js:275
#: js/gdm/authPrompt.js:285 js/ui/components/networkAgent.js:210
#: js/ui/components/networkAgent.js:226 js/ui/components/networkAgent.js:250
#: js/ui/components/networkAgent.js:271 js/ui/components/networkAgent.js:291
#: js/ui/components/networkAgent.js:301 js/ui/components/polkitAgent.js:275
#: js/ui/shellMountOperation.js:326
msgid "Password"
msgstr "Contraseña"
@ -532,8 +544,8 @@ 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:926 js/ui/components/networkAgent.js:245
#: js/ui/components/networkAgent.js:268 js/ui/components/networkAgent.js:286
#: js/gdm/loginDialog.js:926 js/ui/components/networkAgent.js:246
#: js/ui/components/networkAgent.js:269 js/ui/components/networkAgent.js:287
msgid "Username"
msgstr "Nombre de usuario"
@ -638,65 +650,65 @@ msgctxt "search-result"
msgid "Lock Screen Rotation"
msgstr "Bloquear la rotación de la pantalla"
#: js/misc/util.js:121
#: js/misc/util.js:120
msgid "Command not found"
msgstr "Comando no encontrado"
#. Replace "Error invoking GLib.shell_parse_argv: " with
#. something nicer
#: js/misc/util.js:157
#: js/misc/util.js:156
msgid "Could not parse command:"
msgstr "No se pudo analizar el comando:"
#: js/misc/util.js:165
#: js/misc/util.js:164
#, javascript-format
msgid "Execution of “%s” failed:"
msgstr "Falló la ejecución de «%s»:"
#: js/misc/util.js:182
#: js/misc/util.js:181
msgid "Just now"
msgstr "Ahora mismo"
#: js/misc/util.js:184
#: js/misc/util.js:183
#, javascript-format
msgid "%d minute ago"
msgid_plural "%d minutes ago"
msgstr[0] "Hace %d minuto"
msgstr[1] "Hace %d minutos"
#: js/misc/util.js:188
#: js/misc/util.js:187
#, javascript-format
msgid "%d hour ago"
msgid_plural "%d hours ago"
msgstr[0] "Hace %d hora"
msgstr[1] "Hace %d horas"
#: js/misc/util.js:192 js/ui/dateMenu.js:162
#: js/misc/util.js:191 js/ui/dateMenu.js:162
msgid "Yesterday"
msgstr "Ayer"
#: js/misc/util.js:194
#: js/misc/util.js:193
#, javascript-format
msgid "%d day ago"
msgid_plural "%d days ago"
msgstr[0] "Hace %d día"
msgstr[1] "Hace %d días"
#: js/misc/util.js:198
#: js/misc/util.js:197
#, javascript-format
msgid "%d week ago"
msgid_plural "%d weeks ago"
msgstr[0] "Hace %d semana"
msgstr[1] "Hace %d semanas"
#: js/misc/util.js:202
#: js/misc/util.js:201
#, javascript-format
msgid "%d month ago"
msgid_plural "%d months ago"
msgstr[0] "Hace %d mes"
msgstr[1] "Hace %d meses"
#: js/misc/util.js:205
#: js/misc/util.js:204
#, javascript-format
msgid "%d year ago"
msgid_plural "%d years ago"
@ -704,20 +716,20 @@ msgstr[0] "Hace %d año"
msgstr[1] "Hace %d años"
#. Translators: Time in 24h format
#: js/misc/util.js:238
#: js/misc/util.js:237
msgid "%H%M"
msgstr "%H%M"
#. Translators: this is the word "Yesterday" followed by a
#. time string in 24h format. i.e. "Yesterday, 14:30"
#: js/misc/util.js:244
#: js/misc/util.js:243
#, no-c-format
msgid "Yesterday, %H%M"
msgstr "Ayer, %H%M"
#. Translators: this is the week day name followed by a time
#. string in 24h format. i.e. "Monday, 14:30"
#: js/misc/util.js:250
#: js/misc/util.js:249
#, no-c-format
msgid "%A, %H%M"
msgstr "%A, %H%M"
@ -725,7 +737,7 @@ msgstr "%A, %H%M"
#. Translators: this is the month name and day number
#. followed by a time string in 24h format.
#. i.e. "May 25, 14:30"
#: js/misc/util.js:256
#: js/misc/util.js:255
#, no-c-format
msgid "%B %-d, %H%M"
msgstr "%d de %B, %H%M"
@ -733,7 +745,7 @@ msgstr "%d de %B, %H%M"
#. Translators: this is the month name, day number, year
#. number followed by a time string in 24h format.
#. i.e. "May 25 2012, 14:30"
#: js/misc/util.js:262
#: js/misc/util.js:261
#, no-c-format
msgid "%B %-d %Y, %H%M"
msgstr "%d de %B de %Y, %H%M"
@ -741,20 +753,20 @@ msgstr "%d de %B de %Y, %H%M"
#. Show only the time if date is on today
#. eslint-disable-line no-lonely-if
#. Translators: Time in 12h format
#: js/misc/util.js:267
#: js/misc/util.js:266
msgid "%l%M %p"
msgstr "%l%M %p"
#. Translators: this is the word "Yesterday" followed by a
#. time string in 12h format. i.e. "Yesterday, 2:30 pm"
#: js/misc/util.js:273
#: js/misc/util.js:272
#, no-c-format
msgid "Yesterday, %l%M %p"
msgstr "Ayer a las %l%M %p"
#. Translators: this is the week day name followed by a time
#. string in 12h format. i.e. "Monday, 2:30 pm"
#: js/misc/util.js:279
#: js/misc/util.js:278
#, no-c-format
msgid "%A, %l%M %p"
msgstr "%A, %l%M %p"
@ -762,7 +774,7 @@ msgstr "%A, %l%M %p"
#. Translators: this is the month name and day number
#. followed by a time string in 12h format.
#. i.e. "May 25, 2:30 pm"
#: js/misc/util.js:285
#: js/misc/util.js:284
#, no-c-format
msgid "%B %-d, %l%M %p"
msgstr "%d de %B, %l%M %p"
@ -770,17 +782,17 @@ msgstr "%d de %B, %l%M %p"
#. Translators: this is the month name, day number, year
#. number followed by a time string in 12h format.
#. i.e. "May 25 2012, 2:30 pm"
#: js/misc/util.js:291
#: js/misc/util.js:290
#, no-c-format
msgid "%B %-d %Y, %l%M %p"
msgstr "%d de %B de %Y, %l%M %p"
#. TRANSLATORS: this is the title of the wifi captive portal login window
#: js/portalHelper/main.js:49
#: js/portalHelper/main.js:42
msgid "Hotspot Login"
msgstr "Inicio de sesión en el punto de acceso"
#: js/portalHelper/main.js:95
#: js/portalHelper/main.js:88
msgid ""
"Your connection to this hotspot login is not secure. Passwords or other "
"information you enter on this page can be viewed by people nearby."
@ -1025,39 +1037,39 @@ msgstr "La versión de udisks instalada no soporta la configuración PIM"
msgid "Open with %s"
msgstr "Abrir con %s"
#: js/ui/components/networkAgent.js:92
#: js/ui/components/networkAgent.js:93
msgid ""
"Alternatively you can connect by pushing the “WPS” button on your router."
msgstr ""
"Alternativamente puede conectarse pulsando el botón «WPS» de su router."
#: js/ui/components/networkAgent.js:104 js/ui/status/network.js:258
#: js/ui/components/networkAgent.js:105 js/ui/status/network.js:258
#: js/ui/status/network.js:349 js/ui/status/network.js:981
msgid "Connect"
msgstr "Conectar"
#: js/ui/components/networkAgent.js:215
#: js/ui/components/networkAgent.js:216
msgid "Key"
msgstr "Clave"
#: js/ui/components/networkAgent.js:253 js/ui/components/networkAgent.js:276
#: js/ui/components/networkAgent.js:254 js/ui/components/networkAgent.js:277
msgid "Private key password"
msgstr "Contraseña de la clave privada"
#: js/ui/components/networkAgent.js:274
#: js/ui/components/networkAgent.js:275
msgid "Identity"
msgstr "Identidad"
#: js/ui/components/networkAgent.js:288
#: js/ui/components/networkAgent.js:289
msgid "Service"
msgstr "Servicio"
#: js/ui/components/networkAgent.js:317 js/ui/components/networkAgent.js:345
#: js/ui/components/networkAgent.js:318 js/ui/components/networkAgent.js:346
#: js/ui/components/networkAgent.js:679 js/ui/components/networkAgent.js:700
msgid "Authentication required"
msgstr "Autenticación requerida"
#: js/ui/components/networkAgent.js:318 js/ui/components/networkAgent.js:680
#: js/ui/components/networkAgent.js:319 js/ui/components/networkAgent.js:680
#, javascript-format
msgid ""
"Passwords or encryption keys are required to access the wireless network "
@ -1066,31 +1078,31 @@ msgstr ""
"Se necesitan contraseñas o claves de cifrado para acceder a la red "
"inalámbrica «%s»."
#: js/ui/components/networkAgent.js:322 js/ui/components/networkAgent.js:684
#: js/ui/components/networkAgent.js:323 js/ui/components/networkAgent.js:684
msgid "Wired 802.1X authentication"
msgstr "Autenticación 802.1X cableada"
#: js/ui/components/networkAgent.js:324
#: js/ui/components/networkAgent.js:325
msgid "Network name"
msgstr "Nombre de la red"
#: js/ui/components/networkAgent.js:329 js/ui/components/networkAgent.js:688
#: js/ui/components/networkAgent.js:330 js/ui/components/networkAgent.js:688
msgid "DSL authentication"
msgstr "Autenticación DSL"
#: js/ui/components/networkAgent.js:336 js/ui/components/networkAgent.js:693
#: js/ui/components/networkAgent.js:337 js/ui/components/networkAgent.js:693
msgid "PIN code required"
msgstr "Código PIN requerido"
#: js/ui/components/networkAgent.js:337 js/ui/components/networkAgent.js:694
#: js/ui/components/networkAgent.js:338 js/ui/components/networkAgent.js:694
msgid "PIN code is needed for the mobile broadband device"
msgstr "Se necesita un código PIN para el dispositivo de banda ancha móvil"
#: js/ui/components/networkAgent.js:338
#: js/ui/components/networkAgent.js:339
msgid "PIN"
msgstr "PIN"
#: js/ui/components/networkAgent.js:346 js/ui/components/networkAgent.js:685
#: js/ui/components/networkAgent.js:347 js/ui/components/networkAgent.js:685
#: js/ui/components/networkAgent.js:689 js/ui/components/networkAgent.js:701
#: js/ui/components/networkAgent.js:705
#, javascript-format
@ -1382,24 +1394,24 @@ msgstr "%s (remoto)"
msgid "%s (console)"
msgstr "%s (consola)"
#: js/ui/extensionDownloader.js:232
#: js/ui/extensionDownloader.js:194
msgid "Install"
msgstr "Instalar"
#: js/ui/extensionDownloader.js:238
#: js/ui/extensionDownloader.js:200
msgid "Install Extension"
msgstr "Instalar extensión"
#: js/ui/extensionDownloader.js:239
#: js/ui/extensionDownloader.js:201
#, javascript-format
msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "¿Descargar e instalar «%s» desde extensions.gnome.org?"
#: js/ui/extensionSystem.js:266
#: js/ui/extensionSystem.js:253
msgid "Extension Updates Available"
msgstr "Actualizaciones de extensiones disponibles"
#: js/ui/extensionSystem.js:267
#: js/ui/extensionSystem.js:254
msgid "Extension updates are ready to be installed."
msgstr "Las actualizaciones de las extensiones están listas para instalarse."
@ -1444,8 +1456,8 @@ msgid ""
"You just held down the Shift key for 8 seconds. This is the shortcut for the "
"Slow Keys feature, which affects the way your keyboard works."
msgstr ""
"Acaba de pulsar la tecla «Mayúsculas» durante 8 segundos. Ésto es el "
"atajo del teclado para la característica «Teclas lentas», que afecta la "
"Acaba de pulsar la tecla «Mayúsculas» durante 8 segundos. Ésta es la "
"combinación de teclas para la característica «Teclas lentas», que afecta la "
"forma en que funciona el teclado."
#: js/ui/kbdA11yDialog.js:40
@ -1496,7 +1508,7 @@ msgstr "Apagar"
msgid "Leave Off"
msgstr "Dejar apagado"
#: js/ui/keyboard.js:226
#: js/ui/keyboard.js:227
msgid "Region & Language Settings"
msgstr "Configuración de región e idioma"
@ -1549,11 +1561,11 @@ msgstr "Ver fuente"
msgid "Web Page"
msgstr "Página web"
#: js/ui/main.js:290
#: js/ui/main.js:294
msgid "Logged in as a privileged user"
msgstr "Sesión iniciada como usuario con privilegios"
#: js/ui/main.js:291
#: js/ui/main.js:295
msgid ""
"Running a session as a privileged user should be avoided for security "
"reasons. If possible, you should log in as a normal user."
@ -1561,15 +1573,15 @@ msgstr ""
"Se debe evitar ejecutar una sesión como usuario con privilegios por motivos "
"de seguridad. Si es posible, inicie sesión como un usuario normal."
#: js/ui/main.js:340
#: js/ui/main.js:344
msgid "Screen Lock disabled"
msgstr "Pantalla de bloqueo desactivada"
#: js/ui/main.js:341
#: js/ui/main.js:345
msgid "Screen Locking requires the GNOME display manager."
msgstr "La pantalla de bloqueo necesita el gestor de pantallas de GNOME."
#: js/ui/messageTray.js:1443
#: js/ui/messageTray.js:1440
msgid "System Information"
msgstr "Información del sistema"
@ -1603,47 +1615,47 @@ msgstr "Deshacer"
msgid "Overview"
msgstr "Vista general"
#: js/ui/padOsd.js:95
#: js/ui/padOsd.js:96
msgid "New shortcut…"
msgstr "Atajo nuevo…"
#: js/ui/padOsd.js:142
#: js/ui/padOsd.js:143
msgid "Application defined"
msgstr "Aplicación definida"
#: js/ui/padOsd.js:143
#: js/ui/padOsd.js:144
msgid "Show on-screen help"
msgstr "Mostrar la ayuda en pantalla"
#: js/ui/padOsd.js:144
#: js/ui/padOsd.js:145
msgid "Switch monitor"
msgstr "Cambiar monitor"
#: js/ui/padOsd.js:145
#: js/ui/padOsd.js:146
msgid "Assign keystroke"
msgstr "Asignar pulsación"
#: js/ui/padOsd.js:211
#: js/ui/padOsd.js:212
msgid "Done"
msgstr "Hecho"
#: js/ui/padOsd.js:716
#: js/ui/padOsd.js:718
msgid "Edit…"
msgstr "Editar…"
#: js/ui/padOsd.js:758 js/ui/padOsd.js:875
#: js/ui/padOsd.js:760 js/ui/padOsd.js:877
msgid "None"
msgstr "Nada"
#: js/ui/padOsd.js:829
#: js/ui/padOsd.js:831
msgid "Press a button to configure"
msgstr "Pulse un botón para configurar"
#: js/ui/padOsd.js:830
#: js/ui/padOsd.js:832
msgid "Press Esc to exit"
msgstr "Pulse Esc para salir"
#: js/ui/padOsd.js:833
#: js/ui/padOsd.js:835
msgid "Press any key to exit"
msgstr "Pulse cualquier tecla para salir"
@ -1653,12 +1665,12 @@ msgstr "Pulse cualquier tecla para salir"
msgid "Activities"
msgstr "Actividades"
#: js/ui/panel.js:556
#: js/ui/panel.js:542
msgctxt "System menu in the top bar"
msgid "System"
msgstr "Sistema"
#: js/ui/panel.js:674
#: js/ui/panel.js:658
msgid "Top Bar"
msgstr "Barra superior"
@ -1697,7 +1709,7 @@ msgstr "No se pudo bloquear"
msgid "Lock was blocked by an application"
msgstr "Una aplicación impidió el bloqueo"
#: js/ui/screenshot.js:155
#: js/ui/screenshot.js:141
msgid "Screenshot taken"
msgstr "Captura de pantalla realizada"
@ -2396,10 +2408,13 @@ msgid "%d × %d"
msgstr "%d × %d"
#: js/ui/windowMenu.js:27
#| msgid "Hide Text"
msgid "Hide"
msgstr "Ocultar"
#: js/ui/windowMenu.js:34
#| msgctxt "search-result"
#| msgid "Restart"
msgid "Restore"
msgstr "Restaurar"
@ -2756,7 +2771,6 @@ msgstr "Se necesita el UUID, el nombre y la descripción"
#: subprojects/extensions-tool/src/command-enable.c:46
#: subprojects/extensions-tool/src/command-info.c:50
#: subprojects/extensions-tool/src/command-list.c:64
#: subprojects/extensions-tool/src/main.c:146
msgid "Failed to connect to GNOME Shell\n"
msgstr "Falló al conectar a GNOME Shell\n"
@ -2773,7 +2787,7 @@ msgstr "Desactivar una extensión"
#: subprojects/extensions-tool/src/command-disable.c:119
#: subprojects/extensions-tool/src/command-enable.c:119
#: subprojects/extensions-tool/src/command-info.c:103
#: subprojects/extensions-tool/src/command-prefs.c:105
#: subprojects/extensions-tool/src/command-prefs.c:97
#: subprojects/extensions-tool/src/command-reset.c:76
#: subprojects/extensions-tool/src/command-uninstall.c:104
msgid "No UUID given"
@ -2782,7 +2796,7 @@ msgstr "No se ha especificado el UUID"
#: subprojects/extensions-tool/src/command-disable.c:124
#: subprojects/extensions-tool/src/command-enable.c:124
#: subprojects/extensions-tool/src/command-info.c:108
#: subprojects/extensions-tool/src/command-prefs.c:110
#: subprojects/extensions-tool/src/command-prefs.c:102
#: subprojects/extensions-tool/src/command-reset.c:81
#: subprojects/extensions-tool/src/command-uninstall.c:109
msgid "More than one UUID given"
@ -2912,12 +2926,7 @@ msgstr "Se ha especificado más de una carpeta fuente"
msgid "Extension “%s” doesn't have preferences\n"
msgstr "La extensión «%s» no tiene opciones\n"
#: subprojects/extensions-tool/src/command-prefs.c:62
#, c-format
msgid "Failed to open prefs for extension “%s”: %s\n"
msgstr ""
#: subprojects/extensions-tool/src/command-prefs.c:87
#: subprojects/extensions-tool/src/command-prefs.c:79
msgid "Opens extension preferences"
msgstr "abre las preferencias de la extensión"
@ -2942,6 +2951,10 @@ msgstr "Desinstalar una extensión"
msgid "Do not print error messages"
msgstr "No mostrar mensajes de errores"
#: subprojects/extensions-tool/src/main.c:146
msgid "Failed to connect to GNOME Shell"
msgstr "Falló al conectar a GNOME Shell"
#: subprojects/extensions-tool/src/main.c:244
msgid "Path"
msgstr "Ruta"
@ -3072,19 +3085,6 @@ msgstr[1] "%u entradas"
msgid "System Sounds"
msgstr "Sonidos del sistema"
#~ msgid "Enable introspection API"
#~ msgstr "Activar la introspección de API"
#~ msgid ""
#~ "Enables a D-Bus API that allows to introspect the application state of "
#~ "the shell."
#~ msgstr ""
#~ "Activa una API de D-Bus que permite la introspección del estado de la "
#~ "aplicación de la shell."
#~ msgid "Failed to connect to GNOME Shell"
#~ msgstr "Falló al conectar a GNOME Shell"
#~ msgid "Minimize"
#~ msgstr "Minimizar"

537
po/fa.po
View File

@ -9,9 +9,9 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
"POT-Creation-Date: 2021-11-17 10:36+0000\n"
"PO-Revision-Date: 2021-11-19 15:48+0330\n"
"Last-Translator: MohammadSaleh Kamyab <mskf1383@protonmail.com>\n"
"POT-Creation-Date: 2021-09-09 03:40+0000\n"
"PO-Revision-Date: 2021-10-21 19:49+0330\n"
"Last-Translator: eshagh <eshagh094@gmail.com>\n"
"Language-Team: Persian <>\n"
"Language: fa\n"
"MIME-Version: 1.0\n"
@ -19,7 +19,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
"X-Poedit-SourceCharset: utf-8\n"
"X-Generator: Poedit 2.4.2\n"
"X-Generator: Poedit 3.0\n"
#: data/50-gnome-shell-launchers.xml:6
msgid "Launchers"
@ -98,8 +98,7 @@ msgid "Enable internal tools useful for developers and testers from Alt-F2"
msgstr "به کار انداختن ابزارهای داخلی مفید برای توسعه‌دهندگان و آزمونگران از Alt-F2"
#: data/org.gnome.shell.gschema.xml.in:9
msgid ""
"Allows access to internal debugging and monitoring tools using the Alt-F2 dialog."
msgid "Allows access to internal debugging and monitoring tools using the Alt-F2 dialog."
msgstr "اجازه دسترسی به ابزارهای اشکال‌زدا و پایشگر داخلی با استفاده از محاورهٔ Alt-F2."
#: data/org.gnome.shell.gschema.xml.in:16
@ -108,15 +107,13 @@ msgstr "شناسه‌های یکتای افزونه‌ها برای به کار
#: data/org.gnome.shell.gschema.xml.in:17
msgid ""
"GNOME Shell extensions have a UUID property; this key lists extensions which should "
"be loaded. Any extension that wants to be loaded needs to be in this list. You can "
"also manipulate this list with the EnableExtension and DisableExtension D-Bus "
"methods on org.gnome.Shell."
"GNOME Shell extensions have a UUID property; this key lists extensions which should be loaded. Any extension that "
"wants to be loaded needs to be in this list. You can also manipulate this list with the EnableExtension and "
"DisableExtension D-Bus methods on org.gnome.Shell."
msgstr ""
"افزونه‌های گنوم‌شل مشخصهٔ UUID دارند؛ این کلید، افزونه‌هایی که باید بار شوند را فهرست "
"می‌کند. هر افزونه‌ای که می‌خواهد بار شود، باید در این فهرست باشد. شما همچنین می‌توانید "
"این فهرست را از طریق EnableExtension و DisableExtension (روش‌های D-Bus) در org.gnome."
"Shell نیز بسازید."
"افزونه‌های گنوم‌شل مشخصهٔ UUID دارند؛ این کلید، افزونه‌هایی که باید بار شوند را فهرست می‌کند. هر افزونه‌ای که می‌خواهد بار "
"شود، باید در این فهرست باشد. شما همچنین می‌توانید این فهرست را از طریق EnableExtension و DisableExtension (روش‌های D-"
"Bus) در org.gnome.Shell نیز بسازید."
#: data/org.gnome.shell.gschema.xml.in:26
msgid "UUIDs of extensions to force disabling"
@ -124,27 +121,21 @@ msgstr "شناسه‌های یکتای افزونه‌ها برای از کار
#: data/org.gnome.shell.gschema.xml.in:27
msgid ""
"GNOME Shell extensions have a UUID property; this key lists extensions which should "
"be disabled, even if loaded as part of the current mode. You can also manipulate "
"this list with the EnableExtension and DisableExtension D-Bus methods on org.gnome."
"Shell. This key takes precedence over the “enabled-extensions” setting."
"GNOME Shell extensions have a UUID property; this key lists extensions which should be disabled, even if loaded as "
"part of the current mode. You can also manipulate this list with the EnableExtension and DisableExtension D-Bus "
"methods on org.gnome.Shell. This key takes precedence over the “enabled-extensions” setting."
msgstr ""
"افزونه‌های پوستهٔ گنوم شل شناسه‌ای یکتا دارند؛ این کلید، افزونه‌هایی که باید غیرفعّال "
"شوند را فهرست می‌کند، حتا اگر به عنوان بخشی از حالت فعلی بار شده باشند. می‌توانید این "
"فهرست را از طریق روش‌های دی‌باس EnableExtension و DisableExtension در org.gnome.Shell "
"نیز تغییر دهید."
"افزونه‌های پوستهٔ گنوم شل شناسه‌ای یکتا دارند؛ این کلید، افزونه‌هایی که باید غیرفعّال شوند را فهرست می‌کند، حتا اگر به عنوان "
"بخشی از حالت فعلی بار شده باشند. می‌توانید این فهرست را از طریق روش‌های دی‌باس EnableExtension و DisableExtension در org."
"gnome.Shell نیز تغییر دهید."
#: data/org.gnome.shell.gschema.xml.in:37
msgid "Disable user extensions"
msgstr "از کار انداختن افزونه‌های کاربر"
#: data/org.gnome.shell.gschema.xml.in:38
msgid ""
"Disable all extensions the user has enabled without affecting the “enabled-"
"extension” setting."
msgstr ""
"از کار انداختن تمام افزونه‌هایی که کاربر به کار انداخته، بدون اثر روی تنظیمات "
"«افزونهٔ فعّال»."
msgid "Disable all extensions the user has enabled without affecting the “enabled-extension” setting."
msgstr "از کار انداختن تمام افزونه‌هایی که کاربر به کار انداخته، بدون اثر روی تنظیمات «افزونهٔ فعّال»."
#: data/org.gnome.shell.gschema.xml.in:45
msgid "Disables the validation of extension version compatibility"
@ -152,22 +143,18 @@ msgstr "از کار انداختن بررسی سازگاری نسخهٔ افزو
#: data/org.gnome.shell.gschema.xml.in:46
msgid ""
"GNOME Shell will only load extensions that claim to support the current running "
"version. Enabling this option will disable this check and try to load all "
"extensions regardless of the versions they claim to support."
"GNOME Shell will only load extensions that claim to support the current running version. Enabling this option will "
"disable this check and try to load all extensions regardless of the versions they claim to support."
msgstr ""
"پوستهٔ گنوم تنها نگارش‌هایی از افزونه‌ها را که ادّعا می‌کنند از نگارش درحال اجرا "
"پشتیبانی می‌کند، بار می‌کند. به کار اندازی این گزینه، بررسی این مورد را از کار "
"انداخته و سعی می‌کند تمام افزونه‌ها، بدون درنظر گرفتن سازگاری آنها بار شوند."
"پوستهٔ گنوم تنها نگارش‌هایی از افزونه‌ها را که ادّعا می‌کنند از نگارش درحال اجرا پشتیبانی می‌کند، بار می‌کند. به کار اندازی "
"این گزینه، بررسی این مورد را از کار انداخته و سعی می‌کند تمام افزونه‌ها، بدون درنظر گرفتن سازگاری آنها بار شوند."
#: data/org.gnome.shell.gschema.xml.in:54
msgid "List of desktop file IDs for favorite applications"
msgstr "فهرست شناسه‌های پروندهٔ میزکار برای برنامه‌های مورد علاقه"
#: data/org.gnome.shell.gschema.xml.in:55
msgid ""
"The applications corresponding to these identifiers will be displayed in the "
"favorites area."
msgid "The applications corresponding to these identifiers will be displayed in the favorites area."
msgstr "برنامه‌های مشابه این شناسه‌ها در قسمت مورد علاقه‌ها نمایش داده می‌شود."
#: data/org.gnome.shell.gschema.xml.in:62
@ -184,27 +171,21 @@ msgid "Always show the “Log out” menu item in the user menu."
msgstr "نمایش همیشگی «خروج» در فهرست کاربر."
#: data/org.gnome.shell.gschema.xml.in:72
msgid ""
"This key overrides the automatic hiding of the “Log out” menu item in single-user, "
"single-session situations."
msgstr ""
"این کلید، نهفتن خودکار «خروج» در فهرست را در حالت‌های تک‌کاربر، تک‌نشست بازنویسی می‌کند."
msgid "This key overrides the automatic hiding of the “Log out” menu item in single-user, single-session situations."
msgstr "این کلید، نهفتن خودکار «خروج» در فهرست را در حالت‌های تک‌کاربر، تک‌نشست بازنویسی می‌کند."
#: data/org.gnome.shell.gschema.xml.in:79
msgid "Whether to remember password for mounting encrypted or remote filesystems"
msgstr ""
"اینکه آیا گذرواژه برای سوارکردن سامانه‌های پروندهٔ رمزنگاری شده و یا دوردست به‌خاطر "
"سپرده شود یا خیر"
msgstr "اینکه آیا گذرواژه برای سوارکردن سامانه‌های پروندهٔ رمزنگاری شده و یا دوردست به‌خاطر سپرده شود یا خیر"
#: data/org.gnome.shell.gschema.xml.in:80
msgid ""
"The shell will request a password when an encrypted device or a remote filesystem "
"is mounted. If the password can be saved for future use a “Remember Password” "
"checkbox will be present. This key sets the default state of the checkbox."
"The shell will request a password when an encrypted device or a remote filesystem is mounted. If the password can be "
"saved for future use a “Remember Password” checkbox will be present. This key sets the default state of the checkbox."
msgstr ""
"هنگامی که دستگاهی رمزنگاری شده یا سامانه‌پرونده‌ای دوردست سوار می‌شود، پوسته درخواست "
"گذرواژه می‌کند. اگر گذرواژه را بتوان برای استفادهٔ آینده ذخیره کرد، گزینهٔ «به‌خاطر "
"سپردن گذرواژه» موجود خواهد بود. این کلید، حالت پیش‌گزیدهٔ این گزینه را تنظیم می‌کند."
"هنگامی که دستگاهی رمزنگاری شده یا سامانه‌پرونده‌ای دوردست سوار می‌شود، پوسته درخواست گذرواژه می‌کند. اگر گذرواژه را بتوان "
"برای استفادهٔ آینده ذخیره کرد، گزینهٔ «به‌خاطر سپردن گذرواژه» موجود خواهد بود. این کلید، حالت پیش‌گزیدهٔ این گزینه را تنظیم "
"می‌کند."
#: data/org.gnome.shell.gschema.xml.in:89
msgid "Whether the default Bluetooth adapter had set up devices associated to it"
@ -212,12 +193,12 @@ msgstr "اینکه آداپتور بلوتوث پیش‌گزیده دستگاه
#: data/org.gnome.shell.gschema.xml.in:90
msgid ""
"The shell will only show a Bluetooth menu item if a Bluetooth adapter is powered, "
"or if there were devices set up associated with the default adapter. This will be "
"reset if the default adapter is ever seen not to have devices associated to it."
"The shell will only show a Bluetooth menu item if a Bluetooth adapter is powered, or if there were devices set up "
"associated with the default adapter. This will be reset if the default adapter is ever seen not to have devices "
"associated to it."
msgstr ""
"پوسته تنها زمانی فهرست بلوتوث را نمایش می‌دهد که آداپتور بلوتوث روشن باشد، یا "
"دستگاه‌هایی به گونه‌ای تنظیم شده باشند که به آداپتور پیش‌گزیده متّصل شوند."
"پوسته تنها زمانی فهرست بلوتوث را نمایش می‌دهد که آداپتور بلوتوث روشن باشد، یا دستگاه‌هایی به گونه‌ای تنظیم شده باشند که "
"به آداپتور پیش‌گزیده متّصل شوند."
#: data/org.gnome.shell.gschema.xml.in:99
msgid "The last version the “Welcome to GNOME” dialog was shown for"
@ -225,15 +206,13 @@ msgstr "آخرین نگارش گفت‌وگوی «به گنوم خوش آمدی
#: data/org.gnome.shell.gschema.xml.in:100
msgid ""
"This key determines for which version the “Welcome to GNOME” dialog was last shown. "
"An empty string represents the oldest possible version, and a huge number will "
"represent versions that do not exist yet. This huge number can be used to "
"effectively disable the dialog."
"This key determines for which version the “Welcome to GNOME” dialog was last shown. An empty string represents the "
"oldest possible version, and a huge number will represent versions that do not exist yet. This huge number can be used "
"to effectively disable the dialog."
msgstr ""
"این کلید مشخّص می‌کند گفت‌وگوی «به گنوم خوش آمدید»، برای کدام نگارش نشان داده شده. یک "
"رشتهٔ خالی، نمایانگر قدیمی‌ترین نگارش ممکن بوده و یه عدد بزرگ، نمایانگر نگارش‌هاییست "
"که هنوز وجود ندارند. این عدد بزرگ می‌تواند برای از کار انداختن مؤثّر گفت‌وگو استفاده "
"شود."
"این کلید مشخّص می‌کند گفت‌وگوی «به گنوم خوش آمدید»، برای کدام نگارش نشان داده شده. یک رشتهٔ خالی، نمایانگر قدیمی‌ترین نگارش "
"ممکن بوده و یه عدد بزرگ، نمایانگر نگارش‌هاییست که هنوز وجود ندارند. این عدد بزرگ می‌تواند برای از کار انداختن مؤثّر "
"گفت‌وگو استفاده شود."
#: data/org.gnome.shell.gschema.xml.in:133
msgid "Layout of the app picker"
@ -241,15 +220,13 @@ msgstr "چینش گزینشگر کاره"
#: data/org.gnome.shell.gschema.xml.in:134
msgid ""
"Layout of the app picker. Each entry in the array is a page. Pages are stored in "
"the order they appear in GNOME Shell. Each page contains an “application id” → "
"'data' pair. Currently, the following values are stored as 'data': • “position”: "
"the position of the application icon in the page"
"Layout of the app picker. Each entry in the array is a page. Pages are stored in the order they appear in GNOME Shell. "
"Each page contains an “application id” → 'data' pair. Currently, the following values are stored as 'data': • "
"“position”: the position of the application icon in the page"
msgstr ""
"چینش گزینشگر کاره. هر ورودی در آرایه، یک صفحه است. صفحه‌ها به ترتیبی که در پوستهٔ "
"گنوم ظاهر می‌شوند، ذخیره می‌شوند. هر صفحه دارای یک جفت «شناسهٔ برنامه» ← «داده» است. "
"درحال حاضر، مقدارهای زیر به عنوان «داده»: • «موقعیت»: موقعیت نقشک برنامه در صفحه "
"ذخیره شده‌اند"
"چینش گزینشگر کاره. هر ورودی در آرایه، یک صفحه است. صفحه‌ها به ترتیبی که در پوستهٔ گنوم ظاهر می‌شوند، ذخیره می‌شوند. هر "
"صفحه دارای یک جفت «شناسهٔ برنامه» ← «داده» است. درحال حاضر، مقدارهای زیر به عنوان «داده»: • «موقعیت»: موقعیت نقشک "
"برنامه در صفحه ذخیره شده‌اند"
#: data/org.gnome.shell.gschema.xml.in:149
msgid "Keybinding to open the application menu"
@ -345,11 +322,11 @@ msgstr "محدود کردن تعویض‌گر به فضای‌کاری فعلی.
#: data/org.gnome.shell.gschema.xml.in:241
msgid ""
"If true, only applications that have windows on the current workspace are shown in "
"the switcher. Otherwise, all applications are included."
"If true, only applications that have windows on the current workspace are shown in the switcher. Otherwise, all "
"applications are included."
msgstr ""
"اگر درست باشد، تنها برنامه‌هایی که در فضای‌کاری فعلی پنجره دارند در تعویض‌گر نشان داده "
"می‌شوند. در غیر این صورت، تمام برنامه‌ها نشان داده می‌شوند."
"اگر درست باشد، تنها برنامه‌هایی که در فضای‌کاری فعلی پنجره دارند در تعویض‌گر نشان داده می‌شوند. در غیر این صورت، تمام "
"برنامه‌ها نشان داده می‌شوند."
#: data/org.gnome.shell.gschema.xml.in:258
msgid "The application icon mode."
@ -357,21 +334,16 @@ msgstr "حالت شمایلی برنامه."
#: data/org.gnome.shell.gschema.xml.in:259
msgid ""
"Configures how the windows are shown in the switcher. Valid possibilities are "
"“thumbnail-only” (shows a thumbnail of the window), “app-icon-only” (shows only the "
"application icon) or “both”."
"Configures how the windows are shown in the switcher. Valid possibilities are “thumbnail-only” (shows a thumbnail of "
"the window), “app-icon-only” (shows only the application icon) or “both”."
msgstr ""
"نحوه نمایش پنجره‌ها را در تعویضگر پیکربندی می‌کند. مقدارهای ممکن عبارتند از "
"«thumbnail-only» (نمایش تصویر بندانگشتی از پنجره)، «app-icon-only» (نمایش تنها "
"شمایل برنامه) یا «both» (هر دو)."
"نحوه نمایش پنجره‌ها را در تعویضگر پیکربندی می‌کند. مقدارهای ممکن عبارتند از «thumbnail-only» (نمایش تصویر بندانگشتی از "
"پنجره)، «app-icon-only» (نمایش تنها شمایل برنامه) یا «both» (هر دو)."
#: data/org.gnome.shell.gschema.xml.in:268
msgid ""
"If true, only windows from the current workspace are shown in the switcher. "
"Otherwise, all windows are included."
msgid "If true, only windows from the current workspace are shown in the switcher. Otherwise, all windows are included."
msgstr ""
"اگر درست باشد، تنها پنجره‌های فضای‌کاری فعلی در تعویض‌گر نمایش داده می‌شود. در غیر این "
"صورت، تمام پنجره‌ها اضافه می‌شوند."
"اگر درست باشد، تنها پنجره‌های فضای‌کاری فعلی در تعویض‌گر نمایش داده می‌شود. در غیر این صورت، تمام پنجره‌ها اضافه می‌شوند."
#: data/org.gnome.shell.gschema.xml.in:278
msgid "Locations"
@ -421,25 +393,23 @@ msgstr "فضاهای کاری تنها در صفحه‌نمایش اصلی"
#: data/org.gnome.shell.gschema.xml.in:343
msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr ""
"به تأخیر انداختن تغییر تمرکز در حالت موشی تا زمانی که نشانگر از حرکت باز ایستد"
msgstr "به تأخیر انداختن تغییر تمرکز در حالت موشی تا زمانی که نشانگر از حرکت باز ایستد"
#: data/org.gnome.Shell.PortalHelper.desktop.in.in:3
msgid "Network Login"
msgstr "ورود شبکه‌ای"
#: js/dbusServices/extensions/ui/extension-prefs-dialog.ui:28
#: subprojects/extensions-app/data/ui/extensions-window.ui:241
#: js/dbusServices/extensions/ui/extension-prefs-dialog.ui:28 subprojects/extensions-app/data/ui/extensions-window.ui:241
msgid "Somethings gone wrong"
msgstr "اشتباهی صورت گرفت"
#: js/dbusServices/extensions/ui/extension-prefs-dialog.ui:39
msgid ""
"Were very sorry, but theres been a problem: the settings for this extension cant "
"be displayed. We recommend that you report the issue to the extension authors."
"Were very sorry, but theres been a problem: the settings for this extension cant be displayed. We recommend that "
"you report the issue to the extension authors."
msgstr ""
"متأسفیم، ولی مشکلی وجود داشت: تنظیمات این افزونه نمی‌تواند نشان داده شوند. توصیه "
"می‌کنیم مشکل را به نگارندهٔ افزونه گزارش دهید."
"متأسفیم، ولی مشکلی وجود داشت: تنظیمات این افزونه نمی‌تواند نشان داده شوند. توصیه می‌کنیم مشکل را به نگارندهٔ افزونه گزارش "
"دهید."
#: js/dbusServices/extensions/ui/extension-prefs-dialog.ui:64
msgid "Technical Details"
@ -453,20 +423,17 @@ msgstr "صفحهٔ خانگی"
msgid "Visit extension homepage"
msgstr "مشاهدهٔ صفحهٔ خانگی افزونه"
#: js/gdm/authPrompt.js:141 js/ui/audioDeviceSelection.js:61
#: js/ui/components/networkAgent.js:110 js/ui/components/polkitAgent.js:138
#: js/ui/endSessionDialog.js:438 js/ui/extensionDownloader.js:228
#: js/ui/shellMountOperation.js:376 js/ui/shellMountOperation.js:386
#: js/ui/status/network.js:978 subprojects/extensions-app/js/main.js:183
#: js/gdm/authPrompt.js:141 js/ui/audioDeviceSelection.js:61 js/ui/components/networkAgent.js:110
#: js/ui/components/polkitAgent.js:138 js/ui/endSessionDialog.js:438 js/ui/extensionDownloader.js:228
#: js/ui/shellMountOperation.js:376 js/ui/shellMountOperation.js:386 js/ui/status/network.js:978
#: subprojects/extensions-app/js/main.js:183
msgid "Cancel"
msgstr "لغو"
#. Cisco LEAP
#: js/gdm/authPrompt.js:285 js/ui/components/networkAgent.js:209
#: js/ui/components/networkAgent.js:225 js/ui/components/networkAgent.js:249
#: js/ui/components/networkAgent.js:270 js/ui/components/networkAgent.js:290
#: js/ui/components/networkAgent.js:300 js/ui/components/polkitAgent.js:275
#: js/ui/shellMountOperation.js:326
#: js/gdm/authPrompt.js:285 js/ui/components/networkAgent.js:209 js/ui/components/networkAgent.js:225
#: js/ui/components/networkAgent.js:249 js/ui/components/networkAgent.js:270 js/ui/components/networkAgent.js:290
#: js/ui/components/networkAgent.js:300 js/ui/components/polkitAgent.js:275 js/ui/shellMountOperation.js:326
msgid "Password"
msgstr "گذرواژه"
@ -488,8 +455,8 @@ msgstr "(برای مثال، کاربر یا %s)"
#. TTLS and PEAP are actually much more complicated, but this complication
#. is not visible here since we only care about phase2 authentication
#. (and don't even care of which one)
#: js/gdm/loginDialog.js:926 js/ui/components/networkAgent.js:245
#: js/ui/components/networkAgent.js:268 js/ui/components/networkAgent.js:286
#: js/gdm/loginDialog.js:926 js/ui/components/networkAgent.js:245 js/ui/components/networkAgent.js:268
#: js/ui/components/networkAgent.js:286
msgid "Username"
msgstr "نام‌کاربری"
@ -748,11 +715,11 @@ msgstr "ورود به نقطهٔ داغ"
#: js/portalHelper/main.js:95
msgid ""
"Your connection to this hotspot login is not secure. Passwords or other information "
"you enter on this page can be viewed by people nearby."
"Your connection to this hotspot login is not secure. Passwords or other information you enter on this page can be "
"viewed by people nearby."
msgstr ""
"اتّصال شما به این ورود نقطهٔ داغ امن نیست. گذرواژه‌ها یا دیگر اطّلاعاتی که در این صفحه "
"وارد می‌کنید، می‌تواند توسّط افراد اطراف دیده شود."
"اتّصال شما به این ورود نقطهٔ داغ امن نیست. گذرواژه‌ها یا دیگر اطّلاعاتی که در این صفحه وارد می‌کنید، می‌تواند توسّط افراد "
"اطراف دیده شود."
#. No support for non-modal system dialogs, so ignore the option
#. let modal = options['modal'] || true;
@ -764,7 +731,7 @@ msgstr "رد دسترسی"
msgid "Grant Access"
msgstr "پذیرفتن دسترسی"
#: js/ui/appDisplay.js:1791
#: js/ui/appDisplay.js:1846
msgid "Unnamed Folder"
msgstr "پوشهٔ بی‌نام"
@ -955,12 +922,8 @@ msgid "“%s” is not responding."
msgstr "«%s» پاسخگو نیست."
#: js/ui/closeDialog.js:43
msgid ""
"You may choose to wait a short while for it to continue or force the application to "
"quit entirely."
msgstr ""
"ممکن است بخواهید مدت کوتاهی منتظر مانده تا ادامه دهد یا برنامه را مجبور به خروج "
"کامل کنید."
msgid "You may choose to wait a short while for it to continue or force the application to quit entirely."
msgstr "ممکن است بخواهید مدت کوتاهی منتظر مانده تا ادامه دهد یا برنامه را مجبور به خروج کامل کنید."
#: js/ui/closeDialog.js:70
msgid "Force Quit"
@ -995,8 +958,8 @@ msgstr "گشودن با %s"
msgid "Alternatively you can connect by pushing the “WPS” button on your router."
msgstr "به عنوان جایگزین می‌توانید با فشردن دکمهٔ WPS روی مسیریابتان، وصل شوید."
#: js/ui/components/networkAgent.js:104 js/ui/status/network.js:258
#: js/ui/status/network.js:349 js/ui/status/network.js:981
#: js/ui/components/networkAgent.js:104 js/ui/status/network.js:258 js/ui/status/network.js:349
#: js/ui/status/network.js:981
msgid "Connect"
msgstr "اتّصال"
@ -1016,8 +979,8 @@ msgstr "شناسه"
msgid "Service"
msgstr "خدمت"
#: js/ui/components/networkAgent.js:317 js/ui/components/networkAgent.js:345
#: js/ui/components/networkAgent.js:679 js/ui/components/networkAgent.js:700
#: js/ui/components/networkAgent.js:317 js/ui/components/networkAgent.js:345 js/ui/components/networkAgent.js:679
#: js/ui/components/networkAgent.js:700
msgid "Authentication required"
msgstr "نیاز به تأیید هویت است"
@ -1050,9 +1013,8 @@ msgstr "رمز پین برای دستگاه پهن‌باند همراه لاز
msgid "PIN"
msgstr "پین"
#: js/ui/components/networkAgent.js:346 js/ui/components/networkAgent.js:685
#: js/ui/components/networkAgent.js:689 js/ui/components/networkAgent.js:701
#: js/ui/components/networkAgent.js:705
#: js/ui/components/networkAgent.js:346 js/ui/components/networkAgent.js:685 js/ui/components/networkAgent.js:689
#: js/ui/components/networkAgent.js:701 js/ui/components/networkAgent.js:705
#, javascript-format
msgid "A password is required to connect to “%s”."
msgstr "برای اتّصال به «%s» گذرواژه لازم است."
@ -1271,14 +1233,9 @@ msgstr "راه‌اندازی دوباره و نصب به‌روز رسانی‌
#: js/ui/endSessionDialog.js:104
#, javascript-format
msgid "The system will automatically restart and install updates in %d second."
msgid_plural ""
"The system will automatically restart and install updates in %d seconds."
msgstr[0] ""
"سامانه پس از %Id ثانیه به طور خودکار دوباره راه‌اندازی می‌شود و به‌روز رسانی‌ها را نصب "
"می‌کند."
msgstr[1] ""
"سامانه پس از %Id ثانیه به طور خودکار دوبارها راه‌اندازی می‌شود و به‌روز رسانی‌ها را نصب "
"می‌کند."
msgid_plural "The system will automatically restart and install updates in %d seconds."
msgstr[0] "سامانه پس از %Id ثانیه به طور خودکار دوباره راه‌اندازی می‌شود و به‌روز رسانی‌ها را نصب می‌کند."
msgstr[1] "سامانه پس از %Id ثانیه به طور خودکار دوبارها راه‌اندازی می‌شود و به‌روز رسانی‌ها را نصب می‌کند."
#: js/ui/endSessionDialog.js:111 js/ui/endSessionDialog.js:132
msgctxt "button"
@ -1306,11 +1263,11 @@ msgstr "راه‌اندازی دوباره و نصب ارتقا"
#: js/ui/endSessionDialog.js:126
#, javascript-format
msgid ""
"%s %s will be installed after restart. Upgrade installation can take a long time: "
"ensure that you have backed up and that the computer is plugged in."
"%s %s will be installed after restart. Upgrade installation can take a long time: ensure that you have backed up and "
"that the computer is plugged in."
msgstr ""
"پس از راه‌اندازی دوباره %s %s نصب خواهد شد. نصب ارتقا ممکن است زمان زیادی طول بکشد: "
"مطمئن شوید که پشتیبان دارید و رایانه به برق وصل است."
"پس از راه‌اندازی دوباره %s %s نصب خواهد شد. نصب ارتقا ممکن است زمان زیادی طول بکشد: مطمئن شوید که پشتیبان دارید و "
"رایانه به برق وصل است."
#: js/ui/endSessionDialog.js:284
msgid "Low battery power: please plug in before installing updates."
@ -1354,11 +1311,11 @@ msgstr "نصب افزونه"
msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "بارگیری و نصب «%s» از extensions.gnome.org؟"
#: js/ui/extensionSystem.js:266
#: js/ui/extensionSystem.js:252
msgid "Extension Updates Available"
msgstr "به‌روز رسانی‌های افزونه موجودند"
#: js/ui/extensionSystem.js:267
#: js/ui/extensionSystem.js:253
msgid "Extension updates are ready to be installed."
msgstr "به‌روز رسانی‌های افزونه‌ها آمادهٔ نصبند."
@ -1400,11 +1357,10 @@ msgstr "کلیدهای آهسته خاموش شدند"
#: js/ui/kbdA11yDialog.js:34
msgid ""
"You just held down the Shift key for 8 seconds. This is the shortcut for the Slow "
"Keys feature, which affects the way your keyboard works."
"You just held down the Shift key for 8 seconds. This is the shortcut for the Slow Keys feature, which affects the way "
"your keyboard works."
msgstr ""
"دکمهٔ تبدیل را ۸ ثانیه نگه داشتید. این میان‌بری برای ویژگی دکمه‌های آهسته است که بر "
"نحوهٔ کار صفحه‌کلیدتان اثر می‌گذارد."
"دکمهٔ تبدیل را ۸ ثانیه نگه داشتید. این میان‌بری برای ویژگی دکمه‌های آهسته است که بر نحوهٔ کار صفحه‌کلیدتان اثر می‌گذارد."
#: js/ui/kbdA11yDialog.js:40
msgid "Sticky Keys Turned On"
@ -1416,33 +1372,30 @@ msgstr "کلیدهای چسبان خاموش شدند"
#: js/ui/kbdA11yDialog.js:43
msgid ""
"You just pressed the Shift key 5 times in a row. This is the shortcut for the "
"Sticky Keys feature, which affects the way your keyboard works."
"You just pressed the Shift key 5 times in a row. This is the shortcut for the Sticky Keys feature, which affects the "
"way your keyboard works."
msgstr ""
"کلید تبدیل را ۵ بار پشت سر هم زدید. این میان‌بری برای ویژگی کلید‌های چسبان است که بر "
"نحوهٔ کار صفحه‌کلیدتان اثر می‌گذارد."
"کلید تبدیل را ۵ بار پشت سر هم زدید. این میان‌بری برای ویژگی کلید‌های چسبان است که بر نحوهٔ کار صفحه‌کلیدتان اثر می‌گذارد."
#: js/ui/kbdA11yDialog.js:45
msgid ""
"You just pressed two keys at once, or pressed the Shift key 5 times in a row. This "
"turns off the Sticky Keys feature, which affects the way your keyboard works."
"You just pressed two keys at once, or pressed the Shift key 5 times in a row. This turns off the Sticky Keys feature, "
"which affects the way your keyboard works."
msgstr ""
"دو کلید را هم‌زمان فشرده یا کلید تبدیل را ۵ بار پشت سر هم زدید. این میان‌بری برای "
"ویژگی کلید‌های چسبان است که بر نحوهٔ کار صفحه‌کلیدتان اثر می‌گذارد."
"دو کلید را هم‌زمان فشرده یا کلید تبدیل را ۵ بار پشت سر هم زدید. این میان‌بری برای ویژگی کلید‌های چسبان است که بر نحوهٔ کار "
"صفحه‌کلیدتان اثر می‌گذارد."
#: js/ui/kbdA11yDialog.js:54
msgid "Leave On"
msgstr "روشن گذاشتن"
#: js/ui/kbdA11yDialog.js:54 js/ui/status/bluetooth.js:156
#: js/ui/status/network.js:1377
#: js/ui/kbdA11yDialog.js:54 js/ui/status/bluetooth.js:156 js/ui/status/network.js:1377
msgid "Turn On"
msgstr "روشن کردن"
#: js/ui/kbdA11yDialog.js:62 js/ui/status/bluetooth.js:156 js/ui/status/network.js:166
#: js/ui/status/network.js:350 js/ui/status/network.js:1377
#: js/ui/status/network.js:1489 js/ui/status/nightLight.js:41
#: js/ui/status/rfkill.js:81 js/ui/status/rfkill.js:110
#: js/ui/kbdA11yDialog.js:62 js/ui/status/bluetooth.js:156 js/ui/status/network.js:166 js/ui/status/network.js:350
#: js/ui/status/network.js:1377 js/ui/status/network.js:1489 js/ui/status/nightLight.js:41 js/ui/status/rfkill.js:81
#: js/ui/status/rfkill.js:110
msgid "Turn Off"
msgstr "خاموش کردن"
@ -1508,11 +1461,10 @@ msgstr "واردشده به عنوان کاربری ممتاز"
#: js/ui/main.js:291
msgid ""
"Running a session as a privileged user should be avoided for security reasons. If "
"possible, you should log in as a normal user."
"Running a session as a privileged user should be avoided for security reasons. If possible, you should log in as a "
"normal user."
msgstr ""
"به دلایل امنیتی باید از اجرای یک نشست به عنوان کاربری ممتاز خودداری کرد. در صورت "
"امکان، با کاربری عادی وارد شوید."
"به دلایل امنیتی باید از اجرای یک نشست به عنوان کاربری ممتاز خودداری کرد. در صورت امکان، با کاربری عادی وارد شوید."
#: js/ui/main.js:340
msgid "Screen Lock disabled"
@ -1709,9 +1661,7 @@ msgstr "از پرونده‌های کلید استفاده می‌کند"
#: js/ui/shellMountOperation.js:298
#, javascript-format
msgid "To unlock a volume that uses keyfiles, use the <i>%s</i> utility instead."
msgstr ""
"برای قفل‌گشایی حجمی که از پرونده‌های کلید استفاده می‌کند، از ابزار <i>%s</i> استفاده "
"کنید."
msgstr "برای قفل‌گشایی حجمی که از پرونده‌های کلید استفاده می‌کند، از ابزار <i>%s</i> استفاده کنید."
#: js/ui/shellMountOperation.js:306
msgid "PIM Number"
@ -2212,12 +2162,8 @@ msgid "Unknown Thunderbolt device"
msgstr "افزارهٔ تاندربولت ناشناخته"
#: js/ui/status/thunderbolt.js:325
msgid ""
"New device has been detected while you were away. Please disconnect and reconnect "
"the device to start using it."
msgstr ""
"هنگام نبودنتان، افزارهٔ جدید شناسایی شد. لطفاً برای شروع به استفاده از آن، قطعش کرده "
"و دوباره وصل کنید."
msgid "New device has been detected while you were away. Please disconnect and reconnect the device to start using it."
msgstr "هنگام نبودنتان، افزارهٔ جدید شناسایی شد. لطفاً برای شروع به استفاده از آن، قطعش کرده و دوباره وصل کنید."
#: js/ui/status/thunderbolt.js:328
msgid "Unauthorized Thunderbolt device"
@ -2457,8 +2403,7 @@ msgid "Authentication dialog was dismissed by the user"
msgstr "محاوره تأیید هویت از طرف کاربر رد شد"
#: subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in:5
#: subprojects/extensions-app/data/org.gnome.Extensions.desktop.in.in:4
#: subprojects/extensions-app/js/main.js:217
#: subprojects/extensions-app/data/org.gnome.Extensions.desktop.in.in:4 subprojects/extensions-app/js/main.js:217
#: subprojects/extensions-app/data/ui/extensions-window.ui:56
msgid "Extensions"
msgstr "افزونه‌ها"
@ -2474,11 +2419,9 @@ msgstr "پروژهٔ گنوم"
#: subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in:36
msgid ""
"GNOME Extensions handles updating extensions, configuring extension preferences and "
"removing or disabling unwanted extensions."
msgstr ""
"افزونه‌های گنوم؛ به‌روز رسانی، پیکربندی، برداشتن یا از کار انداختن افزونه‌ها را مدیریت "
"می‌کند."
"GNOME Extensions handles updating extensions, configuring extension preferences and removing or disabling unwanted "
"extensions."
msgstr "افزونه‌های گنوم؛ به‌روز رسانی، پیکربندی، برداشتن یا از کار انداختن افزونه‌ها را مدیریت می‌کند."
#: subprojects/extensions-app/data/org.gnome.Extensions.desktop.in.in:7
msgid "Configure GNOME Shell Extensions"
@ -2494,9 +2437,7 @@ msgid "Remove “%s”?"
msgstr "برداشتن «%s»؟"
#: subprojects/extensions-app/js/main.js:180
msgid ""
"If you remove the extension, you need to return to download it if you want to "
"enable it again"
msgid "If you remove the extension, you need to return to download it if you want to enable it again"
msgstr "اگر افزونه را بردارید، باید برای به کار انداختن دوباره‌اش، بارگیریش کنید"
#: subprojects/extensions-app/js/main.js:184
@ -2524,14 +2465,12 @@ msgstr "افزونه با نگارش جاری گنوم ناسازگار است"
msgid "The extension had an error"
msgstr "افزونه خطایی داشت"
#: subprojects/extensions-app/data/ui/extension-row.ui:83
#: subprojects/extensions-tool/src/command-create.c:322
#: subprojects/extensions-app/data/ui/extension-row.ui:83 subprojects/extensions-tool/src/command-create.c:322
#: subprojects/extensions-tool/src/main.c:241
msgid "Description"
msgstr "شرح"
#: subprojects/extensions-app/data/ui/extension-row.ui:104
#: subprojects/extensions-tool/src/main.c:253
#: subprojects/extensions-app/data/ui/extension-row.ui:104 subprojects/extensions-tool/src/main.c:253
msgid "Version"
msgstr "نگارش"
@ -2556,12 +2495,8 @@ msgid "About Extensions"
msgstr "دربارهٔ افزونه‌ها"
#: subprojects/extensions-app/data/ui/extensions-window.ui:27
msgid ""
"To find and add extensions, visit <a href=\"https://extensions.gnome.org"
"\">extensions.gnome.org</a>."
msgstr ""
"برای یافتن و افزودن افزونه‌ها، <a href=\"https://extensions.gnome.org\">پایگاه "
"افزونه‌های گنوم</a> را ببینید."
msgid "To find and add extensions, visit <a href=\"https://extensions.gnome.org\">extensions.gnome.org</a>."
msgstr "برای یافتن و افزودن افزونه‌ها، <a href=\"https://extensions.gnome.org\">پایگاه افزونه‌های گنوم</a> را ببینید."
#: subprojects/extensions-app/data/ui/extensions-window.ui:34
msgid "Warning"
@ -2569,11 +2504,11 @@ msgstr "هشدار"
#: subprojects/extensions-app/data/ui/extensions-window.ui:44
msgid ""
"Extensions can cause system issues, including performance problems. If you "
"encounter problems with your system, it is recommended to disable all extensions."
"Extensions can cause system issues, including performance problems. If you encounter problems with your system, it is "
"recommended to disable all extensions."
msgstr ""
"افزونه‌ها می‌توانند موجب اشکال‌های سامانه‌ای مانند مشکلات اجرایی شوند. اگر با مشکلاتی "
"روی سامانه‌تان مواجه شدید، پیشنهاد می‌شود تمام افزونه‌ها را از کار بندازید."
"افزونه‌ها می‌توانند موجب اشکال‌های سامانه‌ای مانند مشکلات اجرایی شوند. اگر با مشکلاتی روی سامانه‌تان مواجه شدید، پیشنهاد "
"می‌شود تمام افزونه‌ها را از کار بندازید."
#: subprojects/extensions-app/data/ui/extensions-window.ui:150
msgid "Manually Installed"
@ -2589,11 +2524,9 @@ msgstr "هیچ افزونه‌ای نصب نشده"
#: subprojects/extensions-app/data/ui/extensions-window.ui:252
msgid ""
"Were very sorry, but it was not possible to get the list of installed extensions. "
"Make sure you are logged into GNOME and try again."
msgstr ""
"متأسفیم، ولی امکان گرفتن فهرست افزونه‌های نصب‌شده نبود. مطمئن شوید که به گنوم وارد "
"شده‌اید و دوباره تلاش کنید."
"Were very sorry, but it was not possible to get the list of installed extensions. Make sure you are logged into GNOME "
"and try again."
msgstr "متأسفیم، ولی امکان گرفتن فهرست افزونه‌های نصب‌شده نبود. مطمئن شوید که به گنوم وارد شده‌اید و دوباره تلاش کنید."
#: subprojects/extensions-app/data/ui/extensions-window.ui:288
msgid "Extension Updates Ready"
@ -2618,8 +2551,7 @@ msgstr ""
"نام باید رشته‌ای بسیار کوتاه و توصیفی باشد.\n"
"مانند: %s"
#: subprojects/extensions-tool/src/command-create.c:302
#: subprojects/extensions-tool/src/main.c:238
#: subprojects/extensions-tool/src/command-create.c:302 subprojects/extensions-tool/src/main.c:238
msgid "Name"
msgstr "نام"
@ -2635,8 +2567,7 @@ msgstr ""
#: subprojects/extensions-tool/src/command-create.c:336
msgid ""
"UUID is a globally-unique identifier for your extension.\n"
"This should be in the format of an email address (clicktofocus@janedoe.example."
"com)\n"
"This should be in the format of an email address (clicktofocus@janedoe.example.com)\n"
msgstr ""
"شناسهٔ یکتا، شناسهٔ بی‌تکراری برای افزونه‌تان است.\n"
"این شناسه باید در قالب یک نشانی رایانامه باشد (clicktofocus@janedoe.example.com)\n"
@ -2685,8 +2616,7 @@ msgstr "اطّلاعات افزونه را به صورت تعاملی وارد
msgid "Create a new extension"
msgstr "ایجاد افزونه‌ای جدید"
#: subprojects/extensions-tool/src/command-create.c:476
#: subprojects/extensions-tool/src/command-list.c:172
#: subprojects/extensions-tool/src/command-create.c:476 subprojects/extensions-tool/src/command-list.c:172
msgid "Unknown arguments"
msgstr "آرگومان ناشناخته"
@ -2694,16 +2624,12 @@ msgstr "آرگومان ناشناخته"
msgid "UUID, name and description are required"
msgstr "شناسهٔ یکتا، نام و شرح مورد نیازند"
#: subprojects/extensions-tool/src/command-disable.c:46
#: subprojects/extensions-tool/src/command-enable.c:46
#: subprojects/extensions-tool/src/command-info.c:50
#: subprojects/extensions-tool/src/command-list.c:64
#: subprojects/extensions-tool/src/main.c:146
#: subprojects/extensions-tool/src/command-disable.c:46 subprojects/extensions-tool/src/command-enable.c:46
#: subprojects/extensions-tool/src/command-info.c:50 subprojects/extensions-tool/src/command-list.c:64
msgid "Failed to connect to GNOME Shell\n"
msgstr "شکست در وصل شدن به پوستهٔ گنوم\n"
#: subprojects/extensions-tool/src/command-disable.c:53
#: subprojects/extensions-tool/src/command-enable.c:53
#: subprojects/extensions-tool/src/command-disable.c:53 subprojects/extensions-tool/src/command-enable.c:53
#, c-format
msgid "Extension “%s” does not exist\n"
msgstr "افزونهٔ «%s» وجود ندارد\n"
@ -2712,21 +2638,15 @@ msgstr "افزونهٔ «%s» وجود ندارد\n"
msgid "Disable an extension"
msgstr "از کار انداختن یک افزونه"
#: subprojects/extensions-tool/src/command-disable.c:119
#: subprojects/extensions-tool/src/command-enable.c:119
#: subprojects/extensions-tool/src/command-info.c:103
#: subprojects/extensions-tool/src/command-prefs.c:105
#: subprojects/extensions-tool/src/command-reset.c:76
#: subprojects/extensions-tool/src/command-uninstall.c:104
#: subprojects/extensions-tool/src/command-disable.c:119 subprojects/extensions-tool/src/command-enable.c:119
#: subprojects/extensions-tool/src/command-info.c:103 subprojects/extensions-tool/src/command-prefs.c:97
#: subprojects/extensions-tool/src/command-reset.c:76 subprojects/extensions-tool/src/command-uninstall.c:104
msgid "No UUID given"
msgstr "هیچ شناسهٔ یکتایی داده نشده"
#: subprojects/extensions-tool/src/command-disable.c:124
#: subprojects/extensions-tool/src/command-enable.c:124
#: subprojects/extensions-tool/src/command-info.c:108
#: subprojects/extensions-tool/src/command-prefs.c:110
#: subprojects/extensions-tool/src/command-reset.c:81
#: subprojects/extensions-tool/src/command-uninstall.c:109
#: subprojects/extensions-tool/src/command-disable.c:124 subprojects/extensions-tool/src/command-enable.c:124
#: subprojects/extensions-tool/src/command-info.c:108 subprojects/extensions-tool/src/command-prefs.c:102
#: subprojects/extensions-tool/src/command-reset.c:81 subprojects/extensions-tool/src/command-uninstall.c:109
msgid "More than one UUID given"
msgstr "بیش از یک شناسهٔ یکتا داده شده"
@ -2734,8 +2654,7 @@ msgstr "بیش از یک شناسهٔ یکتا داده شده"
msgid "Enable an extension"
msgstr "به کار انداختن یک افزونه"
#: subprojects/extensions-tool/src/command-info.c:59
#: subprojects/extensions-tool/src/main.c:155
#: subprojects/extensions-tool/src/command-info.c:59 subprojects/extensions-tool/src/main.c:155
#, c-format
msgid "Extension “%s” doesn't exist\n"
msgstr "افزونهٔ «%s» وجود ندارد\n"
@ -2812,8 +2731,7 @@ msgstr "SCHEMA"
msgid "A GSettings schema that should be included"
msgstr "یک شمای Gsettings که باید شامل شود"
#: subprojects/extensions-tool/src/command-pack.c:457
#: subprojects/extensions-tool/src/command-pack.c:468
#: subprojects/extensions-tool/src/command-pack.c:457 subprojects/extensions-tool/src/command-pack.c:468
msgid "DIRECTORY"
msgstr "DIRECTORY"
@ -2854,12 +2772,7 @@ msgstr "بیش از یک شاخهٔ منبع مشخّص شده است"
msgid "Extension “%s” doesn't have preferences\n"
msgstr "افزونهٔ «%s» ترجیحات ندارد\n"
#: subprojects/extensions-tool/src/command-prefs.c:62
#, c-format
msgid "Failed to open prefs for extension “%s”: %s\n"
msgstr "شکست در گشودن ترجیحات برای افزونهٔ «%s»: %s\n"
#: subprojects/extensions-tool/src/command-prefs.c:87
#: subprojects/extensions-tool/src/command-prefs.c:79
msgid "Opens extension preferences"
msgstr "ترجیحات افزونه را می‌گشاید"
@ -2884,6 +2797,10 @@ msgstr "حذف نصب یک افزونه"
msgid "Do not print error messages"
msgstr "چاپ نکردن پیام‌های خطا"
#: subprojects/extensions-tool/src/main.c:146
msgid "Failed to connect to GNOME Shell"
msgstr "شکست در وصل شدن به پوستهٔ گنوم"
#: subprojects/extensions-tool/src/main.c:244
msgid "Path"
msgstr "مسیر"
@ -2904,8 +2821,7 @@ msgstr "وضعیت"
msgid "“version” takes no arguments"
msgstr "«version» آرگومانی نمی‌گیرد"
#: subprojects/extensions-tool/src/main.c:292
#: subprojects/extensions-tool/src/main.c:312
#: subprojects/extensions-tool/src/main.c:292 subprojects/extensions-tool/src/main.c:312
msgid "Usage:"
msgstr "استفاده:"
@ -2913,8 +2829,7 @@ msgstr "استفاده:"
msgid "Print version information and exit."
msgstr "چاپ اطّلاعات نگارش و خروج."
#: subprojects/extensions-tool/src/main.c:310
#: subprojects/extensions-tool/src/main.c:313
#: subprojects/extensions-tool/src/main.c:310 subprojects/extensions-tool/src/main.c:313
msgid "COMMAND"
msgstr "COMMAND"
@ -2950,8 +2865,7 @@ msgstr "حذف نصب افزونه"
msgid "List extensions"
msgstr "فهرست افزونه‌ها"
#: subprojects/extensions-tool/src/main.c:323
#: subprojects/extensions-tool/src/main.c:324
#: subprojects/extensions-tool/src/main.c:323 subprojects/extensions-tool/src/main.c:324
msgid "Show extension info"
msgstr "نمایش اطّلاعات افزونه"
@ -3014,17 +2928,11 @@ msgstr[1] "%Iu ورودی"
msgid "System Sounds"
msgstr "صداهای سامانه"
#~ msgid "Failed to connect to GNOME Shell"
#~ msgstr "شکست در وصل شدن به پوستهٔ گنوم"
#~ msgid "Enable introspection API"
#~ msgstr "به کار انداختن رابط برنامه‌نویسی درون‌نگر"
#~ msgid ""
#~ "Enables a D-Bus API that allows to introspect the application state of the shell."
#~ msgstr ""
#~ "رابط برنامه‌‌نویسی دی‌باسی را به کار می‌اندازد که اجازهٔ درون‌نگری وضعیت برنامهٔ پوسته "
#~ "را می‌دهد."
#~ msgid "Enables a D-Bus API that allows to introspect the application state of the shell."
#~ msgstr "رابط برنامه‌‌نویسی دی‌باسی را به کار می‌اندازد که اجازهٔ درون‌نگری وضعیت برنامهٔ پوسته را می‌دهد."
#~ msgid "Minimize"
#~ msgstr "کمینه کردن"
@ -3114,11 +3022,8 @@ msgstr "صداهای سامانه"
#~ msgid "Orientation Lock"
#~ msgstr "قفل جهت"
#~ msgid ""
#~ "Keybinding that pauses and resumes all running tweens, for debugging purposes"
#~ msgstr ""
#~ "کلیدهای مقید برای مکث کردن و اجرا کردن تمام دوغلوهای در حال اجرا، برای مصارف رفع "
#~ "اشکال"
#~ msgid "Keybinding that pauses and resumes all running tweens, for debugging purposes"
#~ msgstr "کلیدهای مقید برای مکث کردن و اجرا کردن تمام دوغلوهای در حال اجرا، برای مصارف رفع اشکال"
#~ msgid "Which keyboard to use"
#~ msgstr "استفاده از کدام صفحه‌کلید"
@ -3361,15 +3266,13 @@ msgstr "صداهای سامانه"
#~ msgstr "گواهینامه لغو شده است"
#~ msgid "Certificate uses an insecure cipher algorithm or is cryptographically weak"
#~ msgstr ""
#~ "گواهینامه از الگوریتم رمزی نامطمئنی استفاده می‌کند یا از نظر cryptography ضعیف است"
#~ msgstr "گواهینامه از الگوریتم رمزی نامطمئنی استفاده می‌کند یا از نظر cryptography ضعیف است"
#~ msgid ""
#~ "The length of the server certificate, or the depth of the server certificate "
#~ "chain, exceed the limits imposed by the cryptography library"
#~ "The length of the server certificate, or the depth of the server certificate chain, exceed the limits imposed by "
#~ "the cryptography library"
#~ msgstr ""
#~ "اندازه گواهینامه کارگزار، یا عمق حلقه‌ی گواهینامه کارگزار، از محدودیت اعمال شده "
#~ "توسط کتابخانه cryptography تجاوز کرد"
#~ "اندازه گواهینامه کارگزار، یا عمق حلقه‌ی گواهینامه کارگزار، از محدودیت اعمال شده توسط کتابخانه cryptography تجاوز کرد"
#~ msgid "Internal error"
#~ msgstr "خطای داخلی"
@ -3416,21 +3319,17 @@ msgstr "صداهای سامانه"
#~ msgstr "فهرست دسته‌هایی که باید به شکل پوشه نمایش داده شوند"
#~ msgid ""
#~ "Each category name in this list will be represented as folder in the application "
#~ "view, rather than being displayed inline in the main view."
#~ "Each category name in this list will be represented as folder in the application view, rather than being displayed "
#~ "inline in the main view."
#~ msgstr ""
#~ "هر نام دسته در این فهرست، بجای اینکه پشت سر هم در نمای اصلی نمایش داده شود، "
#~ "به‌عنوان پوشه در نمای برنامه‌ها نشان داده می‌شود."
#~ "هر نام دسته در این فهرست، بجای اینکه پشت سر هم در نمای اصلی نمایش داده شود، به‌عنوان پوشه در نمای برنامه‌ها نشان داده "
#~ "می‌شود."
#~ msgid "Arrangement of buttons on the titlebar"
#~ msgstr "چیدمان دکمه‌ها در نوار عنوان"
#~ msgid ""
#~ "This key overrides the key in org.gnome.desktop.wm.preferences when running "
#~ "GNOME Shell."
#~ msgstr ""
#~ "این کلید، کلید org.gnome.desktop.wm.preferences را در زمان اجرای گنوم‌شل بازنویسی "
#~ "می‌کند."
#~ msgid "This key overrides the key in org.gnome.desktop.wm.preferences when running GNOME Shell."
#~ msgstr "این کلید، کلید org.gnome.desktop.wm.preferences را در زمان اجرای گنوم‌شل بازنویسی می‌کند."
#~ msgid "Select an extension to configure using the combobox above."
#~ msgstr "با استفاده از جعبه‌ی بالا یک افزونه برای پیکربندی انتخاب کنید."
@ -3466,9 +3365,7 @@ msgstr "صداهای سامانه"
#~ msgstr "تایید جهت جفت‌شدن با %s"
#~ msgid "Please confirm whether the Passkey '%06d' matches the one on the device."
#~ msgstr ""
#~ "لطفا تایید کنید که آیا کلید عبور مربوط به «%I06d» با همتای آن در دستگاه مطابقت "
#~ "دارد یا خیر."
#~ msgstr "لطفا تایید کنید که آیا کلید عبور مربوط به «%I06d» با همتای آن در دستگاه مطابقت دارد یا خیر."
#~ msgid "Does not match"
#~ msgstr "منطبق نیست"
@ -3502,29 +3399,27 @@ msgstr "صداهای سامانه"
#~ msgstr "اینکه اطلاعات برنامه‌ها درباره‌ی میزان استفاده از منابع جمع‌آوری شود یا خیر"
#~ msgid ""
#~ "The shell normally monitors active applications in order to present the most "
#~ "used ones (e.g. in launchers). While this data will be kept private, you may "
#~ "want to disable this for privacy reasons. Please note that doing so won't remove "
#~ "already saved data."
#~ "The shell normally monitors active applications in order to present the most used ones (e.g. in launchers). While "
#~ "this data will be kept private, you may want to disable this for privacy reasons. Please note that doing so won't "
#~ "remove already saved data."
#~ msgstr ""
#~ "پوسته گنوم در حالت عادی برنامه‌های فعال را جهت ارائه برنامه‌های بیشتر استفاده شده "
#~ "پایش می کند. (برای مثال در اجرا کننده‌ها). با اینکه که این اطلاعات به صورت خصوصی "
#~ "نگاه‌داری می‌شود، ممکن است شما بخواهید این امکان را به دلایل امنیتی غیرفعال کنید. "
#~ "لطفا توجه کنید این کار باعث پاک شدن اطلاعاتی که تاکنون ذخیره شده‌اند نمی‌شود."
#~ "پوسته گنوم در حالت عادی برنامه‌های فعال را جهت ارائه برنامه‌های بیشتر استفاده شده پایش می کند. (برای مثال در اجرا "
#~ "کننده‌ها). با اینکه که این اطلاعات به صورت خصوصی نگاه‌داری می‌شود، ممکن است شما بخواهید این امکان را به دلایل امنیتی "
#~ "غیرفعال کنید. لطفا توجه کنید این کار باعث پاک شدن اطلاعاتی که تاکنون ذخیره شده‌اند نمی‌شود."
#~ msgid ""
#~ "Internally used to store the last IM presence explicitly set by the user. The "
#~ "value here is from the TpConnectionPresenceType enumeration."
#~ "Internally used to store the last IM presence explicitly set by the user. The value here is from the "
#~ "TpConnectionPresenceType enumeration."
#~ msgstr ""
#~ "به‌طور داخلی جهت ذخیره‌ی آخرین وضعیتِ حاضرِ ثبت شده‌ی توسط کاربر استفاده می‌شود. مقدار "
#~ "اینجا از محل محاسبه‌ی TpConnectionPresenceType است."
#~ "به‌طور داخلی جهت ذخیره‌ی آخرین وضعیتِ حاضرِ ثبت شده‌ی توسط کاربر استفاده می‌شود. مقدار اینجا از محل محاسبه‌ی "
#~ "TpConnectionPresenceType است."
#~ msgid ""
#~ "Internally used to store the last session presence status for the user. The "
#~ "value here is from the GsmPresenceStatus enumeration."
#~ "Internally used to store the last session presence status for the user. The value here is from the "
#~ "GsmPresenceStatus enumeration."
#~ msgstr ""
#~ "به‌طور داخلی برای ذخیره آخرین نشستی که کاربر در آن وضعیت حاضر داشته است استفاده "
#~ "می‌شود. مقدار اینجا از محاسبه GsmPresenceStatus است."
#~ "به‌طور داخلی برای ذخیره آخرین نشستی که کاربر در آن وضعیت حاضر داشته است استفاده می‌شود. مقدار اینجا از محاسبه "
#~ "GsmPresenceStatus است."
#~ msgid "Keybinding to toggle the screen recorder"
#~ msgstr "کلید مقید برای تغییر وضعیت ضبط کننده‌ی صفحه"
@ -3536,49 +3431,38 @@ msgstr "صداهای سامانه"
#~ msgstr "سرعت فریم استفاده شده در تصویربرداری از صفحه‌نمایش."
#~ msgid ""
#~ "The framerate of the resulting screencast recordered by GNOME Shell's screencast "
#~ "recorder in frames-per-second."
#~ msgstr ""
#~ "سرعت فریم حاصل از تصویربرداری از صفحه نمایش با استفاده از ضبط کننده نمایشگر "
#~ "پوسته‌ی گنوم بر اساس فریم بر ثانیه"
#~ "The framerate of the resulting screencast recordered by GNOME Shell's screencast recorder in frames-per-second."
#~ msgstr "سرعت فریم حاصل از تصویربرداری از صفحه نمایش با استفاده از ضبط کننده نمایشگر پوسته‌ی گنوم بر اساس فریم بر ثانیه"
#~ msgid "The gstreamer pipeline used to encode the screencast"
#~ msgstr "مجرای ارتباطی gstreamer برای کدگذاری تصویربرداری از صفحه نمایش"
#~ msgid ""
#~ "Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
#~ "used for gst-launch. The pipeline should have an unconnected sink pad where the "
#~ "recorded video is recorded. It will normally have a unconnected source pad; "
#~ "output from that pad will be written into the output file. However the pipeline "
#~ "can also take care of its own output - this might be used to send the output to "
#~ "an icecast server via shout2send or similar. When unset or set to an empty "
#~ "value, the default pipeline will be used. This is currently 'vp8enc "
#~ "min_quantizer=13 max_quantizer=13 cpu-used=5 deadline=1000000 threads=%T ! "
#~ "queue ! webmmux' and records to WEBM using the VP8 codec. %T is used as a "
#~ "placeholder for a guess at the optimal thread count on the system."
#~ "Sets the GStreamer pipeline used to encode recordings. It follows the syntax used for gst-launch. The pipeline "
#~ "should have an unconnected sink pad where the recorded video is recorded. It will normally have a unconnected "
#~ "source pad; output from that pad will be written into the output file. However the pipeline can also take care of "
#~ "its own output - this might be used to send the output to an icecast server via shout2send or similar. When unset "
#~ "or set to an empty value, the default pipeline will be used. This is currently 'vp8enc min_quantizer=13 "
#~ "max_quantizer=13 cpu-used=5 deadline=1000000 threads=%T ! queue ! webmmux' and records to WEBM using the VP8 codec. "
#~ "%T is used as a placeholder for a guess at the optimal thread count on the system."
#~ msgstr ""
#~ "Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
#~ "used for gst-launch. The pipeline should have an unconnected sink pad where the "
#~ "recorded video is recorded. It will normally have a unconnected source pad; "
#~ "output from that pad will be written into the output file. However the pipeline "
#~ "can also take care of its own output - this might be used to send the output to "
#~ "an icecast server via shout2send or similar. When unset or set to an empty "
#~ "value, the default pipeline will be used. This is currently 'vp8enc "
#~ "min_quantizer=13 max_quantizer=13 cpu-used=5 deadline=1000000 threads=%T ! "
#~ "queue ! webmmux' and records to WEBM using the VP8 codec. %T is used as a "
#~ "placeholder for a guess at the optimal thread count on the system."
#~ "Sets the GStreamer pipeline used to encode recordings. It follows the syntax used for gst-launch. The pipeline "
#~ "should have an unconnected sink pad where the recorded video is recorded. It will normally have a unconnected "
#~ "source pad; output from that pad will be written into the output file. However the pipeline can also take care of "
#~ "its own output - this might be used to send the output to an icecast server via shout2send or similar. When unset "
#~ "or set to an empty value, the default pipeline will be used. This is currently 'vp8enc min_quantizer=13 "
#~ "max_quantizer=13 cpu-used=5 deadline=1000000 threads=%T ! queue ! webmmux' and records to WEBM using the VP8 codec. "
#~ "%T is used as a placeholder for a guess at the optimal thread count on the system."
#~ msgid "File extension used for storing the screencast"
#~ msgstr "پسوند پرونده‌ی قابل استفاده برای ذخیره تصویربرداری از صفحه‌نمایش"
#~ msgid ""
#~ "The filename for recorded screencasts will be a unique filename based on the "
#~ "current date, and use this extension. It should be changed when recording to a "
#~ "different container format."
#~ "The filename for recorded screencasts will be a unique filename based on the current date, and use this extension. "
#~ "It should be changed when recording to a different container format."
#~ msgstr ""
#~ "نام پرونده‌ی ضبط شده برای تصویربرداری از صفحه‌نمایش یکتا و براساس تاریخ جاری خواهد "
#~ "بود و از این افزونه استفاده خواهد کرد. اگر در زمان ضبط از قالب دیگری استفاده "
#~ "کنید باید تغییر کند."
#~ "نام پرونده‌ی ضبط شده برای تصویربرداری از صفحه‌نمایش یکتا و براساس تاریخ جاری خواهد بود و از این افزونه استفاده خواهد "
#~ "کرد. اگر در زمان ضبط از قالب دیگری استفاده کنید باید تغییر کند."
#~| msgid "Session..."
#~ msgid "Session…"
@ -3599,8 +3483,7 @@ msgstr "صداهای سامانه"
#~ msgstr "ویدئو صفحه‌نمایش %Id %t"
#~ msgid "Click Log Out to quit these applications and log out of the system."
#~ msgstr ""
#~ "بر روی خروج از سیستم کلیک کنید تا از این برنامه‌ها خارج و از سیستم خارج شوید."
#~ msgstr "بر روی خروج از سیستم کلیک کنید تا از این برنامه‌ها خارج و از سیستم خارج شوید."
#~ msgid "Logging out of the system."
#~ msgstr "درحال خروج از سیستم."
@ -3612,9 +3495,7 @@ msgstr "صداهای سامانه"
#~ msgstr "درحال خاموش کردن سیستم."
#~ msgid "Click Restart to quit these applications and restart the system."
#~ msgstr ""
#~ "بر روی راه‌اندازی مجدد کلیک کنید تا از این برنامه‌ها خارج و سیستم مجددا راه‌اندازی "
#~ "گردد."
#~ msgstr "بر روی راه‌اندازی مجدد کلیک کنید تا از این برنامه‌ها خارج و سیستم مجددا راه‌اندازی گردد."
#~ msgid "Restarting the system."
#~ msgstr "درحال راه‌اندازی مجدد سیستم."
@ -3742,11 +3623,11 @@ msgstr "صداهای سامانه"
#~ msgstr "وضعیت گپ شما «مشغول» تنظیم می‌شود"
#~ 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."
#~ "Notifications are now disabled, including chat messages. Your online status has been adjusted to let others know "
#~ "that you might not see their messages."
#~ msgstr ""
#~ "هم‌اکنون اعلان‌ها، از جمله پیام‌های گپ، غیرفعال هستند. وضعیتِ برخطِ شما به گونه‌ای "
#~ "تنظیم شده است که به دیگران نشان دهد ممکن است شما پیام‌هایشان را نبینید."
#~ "هم‌اکنون اعلان‌ها، از جمله پیام‌های گپ، غیرفعال هستند. وضعیتِ برخطِ شما به گونه‌ای تنظیم شده است که به دیگران نشان دهد "
#~ "ممکن است شما پیام‌هایشان را نبینید."
#~ msgid "Shutting down might cause them to lose unsaved work."
#~ msgstr "خاموش‌کردن ممکن است باعث شود که کارهای ذخیره نشده خود را از دست بدهند."

287
po/fr.po
View File

@ -23,8 +23,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell master fr\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
"POT-Creation-Date: 2021-11-03 01:20+0000\n"
"PO-Revision-Date: 2021-11-03 10:00+0100\n"
"POT-Creation-Date: 2021-08-17 23:56+0000\n"
"PO-Revision-Date: 2021-08-30 19:11+0200\n"
"Last-Translator: Charles Monzat <charles.monzat@free.fr>\n"
"Language-Team: GNOME French Team <gnomefr@traduc.org>\n"
"Language: fr\n"
@ -39,38 +39,47 @@ msgid "Launchers"
msgstr "Lanceurs"
#: data/50-gnome-shell-launchers.xml:10
#| msgid "Switch to application 1"
msgid "Activate favorite application 1"
msgstr "Activer lapplication favorite 1"
#: data/50-gnome-shell-launchers.xml:14
#| msgid "Switch to application 2"
msgid "Activate favorite application 2"
msgstr "Activer lapplication favorite 2"
#: data/50-gnome-shell-launchers.xml:18
#| msgid "Switch to application 3"
msgid "Activate favorite application 3"
msgstr "Activer lapplication favorite 3"
#: data/50-gnome-shell-launchers.xml:22
#| msgid "Switch to application 4"
msgid "Activate favorite application 4"
msgstr "Activer lapplication favorite 4"
#: data/50-gnome-shell-launchers.xml:26
#| msgid "Switch to application 5"
msgid "Activate favorite application 5"
msgstr "Activer lapplication favorite 5"
#: data/50-gnome-shell-launchers.xml:30
#| msgid "Switch to application 6"
msgid "Activate favorite application 6"
msgstr "Activer lapplication favorite 6"
#: data/50-gnome-shell-launchers.xml:34
#| msgid "Switch to application 7"
msgid "Activate favorite application 7"
msgstr "Activer lapplication favorite 7"
#: data/50-gnome-shell-launchers.xml:38
#| msgid "Switch to application 8"
msgid "Activate favorite application 8"
msgstr "Activer lapplication favorite 8"
#: data/50-gnome-shell-launchers.xml:42
#| msgid "Switch to application 9"
msgid "Activate favorite application 9"
msgstr "Activer lapplication favorite 9"
@ -273,11 +282,22 @@ msgstr ""
"un nombre très élevé représentera des versions qui nexistent pas encore. Ce "
"nombre très élevé peut être utilisé pour désactiver le dialogue."
#: data/org.gnome.shell.gschema.xml.in:133
#: data/org.gnome.shell.gschema.xml.in:109
msgid "Enable introspection API"
msgstr "Activer lAPI dintrospection"
#: data/org.gnome.shell.gschema.xml.in:110
msgid ""
"Enables a D-Bus API that allows to introspect the application state of the "
"shell."
msgstr ""
"Active lAPI D-Bus, qui permet dintrospecter létat dapplication du shell."
#: data/org.gnome.shell.gschema.xml.in:141
msgid "Layout of the app picker"
msgstr "Disposition du sélecteur dapplications"
#: data/org.gnome.shell.gschema.xml.in:134
#: data/org.gnome.shell.gschema.xml.in:142
msgid ""
"Layout of the app picker. Each entry in the array is a page. Pages are "
"stored in the order they appear in GNOME Shell. Each page contains an "
@ -291,114 +311,114 @@ msgstr ""
"stockées comme « données » : • « position » : la position de licône de "
"lapplication sur la page"
#: data/org.gnome.shell.gschema.xml.in:149
#: data/org.gnome.shell.gschema.xml.in:157
msgid "Keybinding to open the application menu"
msgstr "Combinaison de touches pour ouvrir le menu de lapplication"
#: data/org.gnome.shell.gschema.xml.in:150
#: data/org.gnome.shell.gschema.xml.in:158
msgid "Keybinding to open the application menu."
msgstr "Combinaison de touches pour ouvrir le menu de lapplication."
#: data/org.gnome.shell.gschema.xml.in:156
#: data/org.gnome.shell.gschema.xml.in:163
#: data/org.gnome.shell.gschema.xml.in:164
#: data/org.gnome.shell.gschema.xml.in:171
msgid "Keybinding to shift between overview states"
msgstr ""
"Combinaison de touches pour basculer entre les états de la vue densemble"
#: data/org.gnome.shell.gschema.xml.in:157
#: data/org.gnome.shell.gschema.xml.in:165
msgid "Keybinding to shift between session, window picker and app grid"
msgstr ""
"Combinaison de touches pour basculer entre la session, le sélecteur de "
"fenêtre et la grille des applications"
#: data/org.gnome.shell.gschema.xml.in:164
#: data/org.gnome.shell.gschema.xml.in:172
msgid "Keybinding to shift between app grid, window picker and session"
msgstr ""
"Combinaison de touches pour basculer entre la grille des applications, le "
"sélecteur de fenêtre et la session"
#: data/org.gnome.shell.gschema.xml.in:170
#: data/org.gnome.shell.gschema.xml.in:178
msgid "Keybinding to open the “Show Applications” view"
msgstr ""
"Combinaison de touches pour ouvrir la vue « Afficher les applications »"
#: data/org.gnome.shell.gschema.xml.in:171
#: data/org.gnome.shell.gschema.xml.in:179
msgid ""
"Keybinding to open the “Show Applications” view of the Activities Overview."
msgstr ""
"Combinaison de touches pour ouvrir la vue « Afficher les applications » de "
"la vue densemble des activités."
#: data/org.gnome.shell.gschema.xml.in:178
#: data/org.gnome.shell.gschema.xml.in:186
msgid "Keybinding to open the overview"
msgstr "Combinaison de touches pour ouvrir la vue densemble"
#: data/org.gnome.shell.gschema.xml.in:179
#: data/org.gnome.shell.gschema.xml.in:187
msgid "Keybinding to open the Activities Overview."
msgstr "Combinaison de touches pour ouvrir la vue densemble des activités."
#: data/org.gnome.shell.gschema.xml.in:185
#: data/org.gnome.shell.gschema.xml.in:193
msgid "Keybinding to toggle the visibility of the notification list"
msgstr ""
"Combinaison de touches pour inverser la visibilité de la liste des "
"notifications"
#: data/org.gnome.shell.gschema.xml.in:186
#: data/org.gnome.shell.gschema.xml.in:194
msgid "Keybinding to toggle the visibility of the notification list."
msgstr ""
"Combinaison de touches pour inverser la visibilité de la liste des "
"notifications."
#: data/org.gnome.shell.gschema.xml.in:192
#: data/org.gnome.shell.gschema.xml.in:200
msgid "Keybinding to focus the active notification"
msgstr "Combinaison de touches pour donner le focus à la notification active"
#: data/org.gnome.shell.gschema.xml.in:193
#: data/org.gnome.shell.gschema.xml.in:201
msgid "Keybinding to focus the active notification."
msgstr "Combinaison de touches pour donner le focus à la notification active."
#: data/org.gnome.shell.gschema.xml.in:199
#: data/org.gnome.shell.gschema.xml.in:207
msgid "Switch to application 1"
msgstr "Passer à lapplication 1"
#: data/org.gnome.shell.gschema.xml.in:203
#: data/org.gnome.shell.gschema.xml.in:211
msgid "Switch to application 2"
msgstr "Passer à lapplication 2"
#: data/org.gnome.shell.gschema.xml.in:207
#: data/org.gnome.shell.gschema.xml.in:215
msgid "Switch to application 3"
msgstr "Passer à lapplication 3"
#: data/org.gnome.shell.gschema.xml.in:211
#: data/org.gnome.shell.gschema.xml.in:219
msgid "Switch to application 4"
msgstr "Passer à lapplication 4"
#: data/org.gnome.shell.gschema.xml.in:215
#: data/org.gnome.shell.gschema.xml.in:223
msgid "Switch to application 5"
msgstr "Passer à lapplication 5"
#: data/org.gnome.shell.gschema.xml.in:219
#: data/org.gnome.shell.gschema.xml.in:227
msgid "Switch to application 6"
msgstr "Passer à lapplication 6"
#: data/org.gnome.shell.gschema.xml.in:223
#: data/org.gnome.shell.gschema.xml.in:231
msgid "Switch to application 7"
msgstr "Passer à lapplication 7"
#: data/org.gnome.shell.gschema.xml.in:227
#: data/org.gnome.shell.gschema.xml.in:235
msgid "Switch to application 8"
msgstr "Passer à lapplication 8"
#: data/org.gnome.shell.gschema.xml.in:231
#: data/org.gnome.shell.gschema.xml.in:239
msgid "Switch to application 9"
msgstr "Passer à lapplication 9"
#: data/org.gnome.shell.gschema.xml.in:240
#: data/org.gnome.shell.gschema.xml.in:267
#: data/org.gnome.shell.gschema.xml.in:248
#: data/org.gnome.shell.gschema.xml.in:275
msgid "Limit switcher to current workspace."
msgstr "Limite le sélecteur de fenêtres à lespace de travail actuel."
#: data/org.gnome.shell.gschema.xml.in:241
#: data/org.gnome.shell.gschema.xml.in:249
msgid ""
"If true, only applications that have windows on the current workspace are "
"shown in the switcher. Otherwise, all applications are included."
@ -407,11 +427,11 @@ msgstr ""
"travail actuel sont affichées dans le sélecteur. Sinon, toutes les "
"applications y sont incluses."
#: data/org.gnome.shell.gschema.xml.in:258
#: data/org.gnome.shell.gschema.xml.in:266
msgid "The application icon mode."
msgstr "Le type dicône des applications."
#: data/org.gnome.shell.gschema.xml.in:259
#: data/org.gnome.shell.gschema.xml.in:267
msgid ""
"Configures how the windows are shown in the switcher. Valid possibilities "
"are “thumbnail-only” (shows a thumbnail of the window), “app-icon-"
@ -422,7 +442,7 @@ msgstr ""
"fenêtre), « app-icon-only » (affiche uniquement licône de lapplication), "
"ou « both » (affiche les deux)."
#: data/org.gnome.shell.gschema.xml.in:268
#: data/org.gnome.shell.gschema.xml.in:276
msgid ""
"If true, only windows from the current workspace are shown in the switcher. "
"Otherwise, all windows are included."
@ -430,58 +450,58 @@ msgstr ""
"Si vrai, seules les fenêtres de lespace de travail actuel sont affichées "
"dans le sélecteur. Sinon, toutes les fenêtres y sont incluses."
#: data/org.gnome.shell.gschema.xml.in:278
#: data/org.gnome.shell.gschema.xml.in:286
msgid "Locations"
msgstr "Emplacements"
#: data/org.gnome.shell.gschema.xml.in:279
#: data/org.gnome.shell.gschema.xml.in:287
msgid "The locations to show in world clocks"
msgstr "Les emplacements à afficher dans les horloges mondiales"
#: data/org.gnome.shell.gschema.xml.in:289
#: data/org.gnome.shell.gschema.xml.in:297
msgid "Automatic location"
msgstr "Emplacement automatique"
#: data/org.gnome.shell.gschema.xml.in:290
#: data/org.gnome.shell.gschema.xml.in:298
msgid "Whether to fetch the current location or not"
msgstr "Indique sil faut récupérer lemplacement actuel ou non"
#: data/org.gnome.shell.gschema.xml.in:297
#: data/org.gnome.shell.gschema.xml.in:305
msgid "Location"
msgstr "Emplacement"
#: data/org.gnome.shell.gschema.xml.in:298
#: data/org.gnome.shell.gschema.xml.in:306
msgid "The location for which to show a forecast"
msgstr "Lemplacement pour lequel afficher les prévisions"
#: data/org.gnome.shell.gschema.xml.in:310
#: data/org.gnome.shell.gschema.xml.in:318
msgid "Attach modal dialog to the parent window"
msgstr "Attacher les dialogues modaux à leur fenêtre parente"
#: data/org.gnome.shell.gschema.xml.in:311
#: data/org.gnome.shell.gschema.xml.in:320
#: data/org.gnome.shell.gschema.xml.in:319
#: data/org.gnome.shell.gschema.xml.in:328
#: data/org.gnome.shell.gschema.xml.in:336
#: data/org.gnome.shell.gschema.xml.in:344
#: data/org.gnome.shell.gschema.xml.in:352
msgid ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgstr ""
"Cette clé prend le pas sur la clé dans org.gnome.mutter lorsque Shell de "
"GNOME est lancé."
#: data/org.gnome.shell.gschema.xml.in:319
#: data/org.gnome.shell.gschema.xml.in:327
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr "Activer lempilage des fenêtres déposées sur les bords de lécran"
#: data/org.gnome.shell.gschema.xml.in:327
#: data/org.gnome.shell.gschema.xml.in:335
msgid "Workspaces are managed dynamically"
msgstr "Les espaces de travail sont gérés dynamiquement"
#: data/org.gnome.shell.gschema.xml.in:335
#: data/org.gnome.shell.gschema.xml.in:343
msgid "Workspaces only on primary monitor"
msgstr "Les espaces de travail sont uniquement sur lécran principal"
#: data/org.gnome.shell.gschema.xml.in:343
#: data/org.gnome.shell.gschema.xml.in:351
msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr ""
"Retarder les changements de focus en mode souris jusquà ce que le pointeur "
@ -519,18 +539,18 @@ msgid "Visit extension homepage"
msgstr "Visiter le site Web de lextension"
#: js/gdm/authPrompt.js:141 js/ui/audioDeviceSelection.js:61
#: js/ui/components/networkAgent.js:110 js/ui/components/polkitAgent.js:138
#: js/ui/endSessionDialog.js:438 js/ui/extensionDownloader.js:228
#: js/ui/components/networkAgent.js:111 js/ui/components/polkitAgent.js:138
#: js/ui/endSessionDialog.js:438 js/ui/extensionDownloader.js:190
#: js/ui/shellMountOperation.js:376 js/ui/shellMountOperation.js:386
#: js/ui/status/network.js:978 subprojects/extensions-app/js/main.js:183
msgid "Cancel"
msgstr "Annuler"
#. Cisco LEAP
#: js/gdm/authPrompt.js:285 js/ui/components/networkAgent.js:209
#: js/ui/components/networkAgent.js:225 js/ui/components/networkAgent.js:249
#: js/ui/components/networkAgent.js:270 js/ui/components/networkAgent.js:290
#: js/ui/components/networkAgent.js:300 js/ui/components/polkitAgent.js:275
#: js/gdm/authPrompt.js:285 js/ui/components/networkAgent.js:210
#: js/ui/components/networkAgent.js:226 js/ui/components/networkAgent.js:250
#: js/ui/components/networkAgent.js:271 js/ui/components/networkAgent.js:291
#: js/ui/components/networkAgent.js:301 js/ui/components/polkitAgent.js:275
#: js/ui/shellMountOperation.js:326
msgid "Password"
msgstr "Mot de passe"
@ -553,8 +573,8 @@ msgstr "(par ex. utilisateur 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:926 js/ui/components/networkAgent.js:245
#: js/ui/components/networkAgent.js:268 js/ui/components/networkAgent.js:286
#: js/gdm/loginDialog.js:926 js/ui/components/networkAgent.js:246
#: js/ui/components/networkAgent.js:269 js/ui/components/networkAgent.js:287
msgid "Username"
msgstr "Nom dutilisateur"
@ -659,65 +679,65 @@ msgctxt "search-result"
msgid "Lock Screen Rotation"
msgstr "Verrouiller la rotation de lécran"
#: js/misc/util.js:121
#: js/misc/util.js:120
msgid "Command not found"
msgstr "Commande non trouvée"
#. Replace "Error invoking GLib.shell_parse_argv: " with
#. something nicer
#: js/misc/util.js:157
#: js/misc/util.js:156
msgid "Could not parse command:"
msgstr "Impossible danalyser la commande :"
#: js/misc/util.js:165
#: js/misc/util.js:164
#, javascript-format
msgid "Execution of “%s” failed:"
msgstr "Exécution de « %s » impossible :"
#: js/misc/util.js:182
#: js/misc/util.js:181
msgid "Just now"
msgstr "À linstant"
#: js/misc/util.js:184
#: js/misc/util.js:183
#, javascript-format
msgid "%d minute ago"
msgid_plural "%d minutes ago"
msgstr[0] "Il y a %d minute"
msgstr[1] "Il y a %d minutes"
#: js/misc/util.js:188
#: js/misc/util.js:187
#, javascript-format
msgid "%d hour ago"
msgid_plural "%d hours ago"
msgstr[0] "Il y a %d heure"
msgstr[1] "Il y a %d heures"
#: js/misc/util.js:192 js/ui/dateMenu.js:162
#: js/misc/util.js:191 js/ui/dateMenu.js:162
msgid "Yesterday"
msgstr "Hier"
#: js/misc/util.js:194
#: js/misc/util.js:193
#, javascript-format
msgid "%d day ago"
msgid_plural "%d days ago"
msgstr[0] "Il y a %d jour"
msgstr[1] "Il y a %d jours"
#: js/misc/util.js:198
#: js/misc/util.js:197
#, javascript-format
msgid "%d week ago"
msgid_plural "%d weeks ago"
msgstr[0] "Il y a %d semaine"
msgstr[1] "Il y a %d semaines"
#: js/misc/util.js:202
#: js/misc/util.js:201
#, javascript-format
msgid "%d month ago"
msgid_plural "%d months ago"
msgstr[0] "Il y a %d mois"
msgstr[1] "Il y a %d mois"
#: js/misc/util.js:205
#: js/misc/util.js:204
#, javascript-format
msgid "%d year ago"
msgid_plural "%d years ago"
@ -725,20 +745,20 @@ msgstr[0] "Il y a %d an"
msgstr[1] "Il y a %d ans"
#. Translators: Time in 24h format
#: js/misc/util.js:238
#: js/misc/util.js:237
msgid "%H%M"
msgstr "%H%M"
#. Translators: this is the word "Yesterday" followed by a
#. time string in 24h format. i.e. "Yesterday, 14:30"
#: js/misc/util.js:244
#: js/misc/util.js:243
#, no-c-format
msgid "Yesterday, %H%M"
msgstr "Hier, %H%M"
#. Translators: this is the week day name followed by a time
#. string in 24h format. i.e. "Monday, 14:30"
#: js/misc/util.js:250
#: js/misc/util.js:249
#, no-c-format
msgid "%A, %H%M"
msgstr "%A, %H%M"
@ -746,7 +766,7 @@ msgstr "%A, %H%M"
#. Translators: this is the month name and day number
#. followed by a time string in 24h format.
#. i.e. "May 25, 14:30"
#: js/misc/util.js:256
#: js/misc/util.js:255
#, no-c-format
msgid "%B %-d, %H%M"
msgstr "%-d %B, %H%M"
@ -754,7 +774,7 @@ msgstr "%-d %B, %H%M"
#. Translators: this is the month name, day number, year
#. number followed by a time string in 24h format.
#. i.e. "May 25 2012, 14:30"
#: js/misc/util.js:262
#: js/misc/util.js:261
#, no-c-format
msgid "%B %-d %Y, %H%M"
msgstr "%-d %B %Y, %H%M"
@ -762,20 +782,20 @@ msgstr "%-d %B %Y, %H%M"
#. Show only the time if date is on today
#. eslint-disable-line no-lonely-if
#. Translators: Time in 12h format
#: js/misc/util.js:267
#: js/misc/util.js:266
msgid "%l%M %p"
msgstr "%l%M %p"
#. Translators: this is the word "Yesterday" followed by a
#. time string in 12h format. i.e. "Yesterday, 2:30 pm"
#: js/misc/util.js:273
#: js/misc/util.js:272
#, no-c-format
msgid "Yesterday, %l%M %p"
msgstr "Hier, %l%M %p"
#. Translators: this is the week day name followed by a time
#. string in 12h format. i.e. "Monday, 2:30 pm"
#: js/misc/util.js:279
#: js/misc/util.js:278
#, no-c-format
msgid "%A, %l%M %p"
msgstr "%A, %l%M %p"
@ -783,7 +803,7 @@ msgstr "%A, %l%M %p"
#. Translators: this is the month name and day number
#. followed by a time string in 12h format.
#. i.e. "May 25, 2:30 pm"
#: js/misc/util.js:285
#: js/misc/util.js:284
#, no-c-format
msgid "%B %-d, %l%M %p"
msgstr "%-d %B, %l%M %p"
@ -791,17 +811,17 @@ msgstr "%-d %B, %l%M %p"
#. Translators: this is the month name, day number, year
#. number followed by a time string in 12h format.
#. i.e. "May 25 2012, 2:30 pm"
#: js/misc/util.js:291
#: js/misc/util.js:290
#, no-c-format
msgid "%B %-d %Y, %l%M %p"
msgstr "%-d %B %Y, %l%M %p"
#. TRANSLATORS: this is the title of the wifi captive portal login window
#: js/portalHelper/main.js:49
#: js/portalHelper/main.js:42
msgid "Hotspot Login"
msgstr "Identification du point daccès"
#: js/portalHelper/main.js:95
#: js/portalHelper/main.js:88
msgid ""
"Your connection to this hotspot login is not secure. Passwords or other "
"information you enter on this page can be viewed by people nearby."
@ -1047,40 +1067,40 @@ msgstr "La version installée de udisks ne gère pas le réglage PIM"
msgid "Open with %s"
msgstr "Ouvrir avec %s"
#: js/ui/components/networkAgent.js:92
#: js/ui/components/networkAgent.js:93
msgid ""
"Alternatively you can connect by pushing the “WPS” button on your router."
msgstr ""
"Vous pouvez également vous connecter en appuyant sur le bouton « WPS » sur "
"votre routeur."
#: js/ui/components/networkAgent.js:104 js/ui/status/network.js:258
#: js/ui/components/networkAgent.js:105 js/ui/status/network.js:258
#: js/ui/status/network.js:349 js/ui/status/network.js:981
msgid "Connect"
msgstr "Se connecter"
#: js/ui/components/networkAgent.js:215
#: js/ui/components/networkAgent.js:216
msgid "Key"
msgstr "Clé"
#: js/ui/components/networkAgent.js:253 js/ui/components/networkAgent.js:276
#: js/ui/components/networkAgent.js:254 js/ui/components/networkAgent.js:277
msgid "Private key password"
msgstr "Mot de passe de la clé privée"
#: js/ui/components/networkAgent.js:274
#: js/ui/components/networkAgent.js:275
msgid "Identity"
msgstr "Identité"
#: js/ui/components/networkAgent.js:288
#: js/ui/components/networkAgent.js:289
msgid "Service"
msgstr "Service"
#: js/ui/components/networkAgent.js:317 js/ui/components/networkAgent.js:345
#: js/ui/components/networkAgent.js:318 js/ui/components/networkAgent.js:346
#: js/ui/components/networkAgent.js:679 js/ui/components/networkAgent.js:700
msgid "Authentication required"
msgstr "Authentification nécessaire"
#: js/ui/components/networkAgent.js:318 js/ui/components/networkAgent.js:680
#: js/ui/components/networkAgent.js:319 js/ui/components/networkAgent.js:680
#, javascript-format
msgid ""
"Passwords or encryption keys are required to access the wireless network "
@ -1089,31 +1109,31 @@ msgstr ""
"Il faut un mot de passe ou une clé de chiffrement pour accéder au réseau "
"sans fil « %s »."
#: js/ui/components/networkAgent.js:322 js/ui/components/networkAgent.js:684
#: js/ui/components/networkAgent.js:323 js/ui/components/networkAgent.js:684
msgid "Wired 802.1X authentication"
msgstr "Authentification filaire 802.1X"
#: js/ui/components/networkAgent.js:324
#: js/ui/components/networkAgent.js:325
msgid "Network name"
msgstr "Nom du réseau"
#: js/ui/components/networkAgent.js:329 js/ui/components/networkAgent.js:688
#: js/ui/components/networkAgent.js:330 js/ui/components/networkAgent.js:688
msgid "DSL authentication"
msgstr "Authentification DSL"
#: js/ui/components/networkAgent.js:336 js/ui/components/networkAgent.js:693
#: js/ui/components/networkAgent.js:337 js/ui/components/networkAgent.js:693
msgid "PIN code required"
msgstr "Code PIN requis"
#: js/ui/components/networkAgent.js:337 js/ui/components/networkAgent.js:694
#: js/ui/components/networkAgent.js:338 js/ui/components/networkAgent.js:694
msgid "PIN code is needed for the mobile broadband device"
msgstr "Un code PIN est nécessaire pour les connexions mobiles"
#: js/ui/components/networkAgent.js:338
#: js/ui/components/networkAgent.js:339
msgid "PIN"
msgstr "PIN"
#: js/ui/components/networkAgent.js:346 js/ui/components/networkAgent.js:685
#: js/ui/components/networkAgent.js:347 js/ui/components/networkAgent.js:685
#: js/ui/components/networkAgent.js:689 js/ui/components/networkAgent.js:701
#: js/ui/components/networkAgent.js:705
#, javascript-format
@ -1441,24 +1461,24 @@ msgstr "%s (distant)"
msgid "%s (console)"
msgstr "%s (console)"
#: js/ui/extensionDownloader.js:232
#: js/ui/extensionDownloader.js:194
msgid "Install"
msgstr "Installer"
#: js/ui/extensionDownloader.js:238
#: js/ui/extensionDownloader.js:200
msgid "Install Extension"
msgstr "Installer lextension"
#: js/ui/extensionDownloader.js:239
#: js/ui/extensionDownloader.js:201
#, javascript-format
msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "Télécharger et installer « %s » à partir de extensions.gnome.org ?"
#: js/ui/extensionSystem.js:252
#: js/ui/extensionSystem.js:253
msgid "Extension Updates Available"
msgstr "Mises à jour dextensions disponibles"
#: js/ui/extensionSystem.js:253
#: js/ui/extensionSystem.js:254
msgid "Extension updates are ready to be installed."
msgstr "Des mises à jour dextensions sont prêtes à être installées."
@ -1555,7 +1575,7 @@ msgstr "Éteindre"
msgid "Leave Off"
msgstr "Laisser éteint"
#: js/ui/keyboard.js:226
#: js/ui/keyboard.js:227
msgid "Region & Language Settings"
msgstr "Paramètres de langue et région"
@ -1608,11 +1628,11 @@ msgstr "Afficher la source"
msgid "Web Page"
msgstr "Page Web"
#: js/ui/main.js:290
#: js/ui/main.js:294
msgid "Logged in as a privileged user"
msgstr "Connecté en tant quutilisateur privilégié"
#: js/ui/main.js:291
#: js/ui/main.js:295
msgid ""
"Running a session as a privileged user should be avoided for security "
"reasons. If possible, you should log in as a normal user."
@ -1621,16 +1641,16 @@ msgstr ""
"des raisons de sécurité. Si possible, connectez-vous comme utilisateur "
"normal."
#: js/ui/main.js:340
#: js/ui/main.js:344
msgid "Screen Lock disabled"
msgstr "Verrouillage décran désactivé"
#: js/ui/main.js:341
#: js/ui/main.js:345
msgid "Screen Locking requires the GNOME display manager."
msgstr ""
"Le verrouillage de lécran nécessite le gestionnaire daffichage GNOME."
#: js/ui/messageTray.js:1443
#: js/ui/messageTray.js:1440
msgid "System Information"
msgstr "Informations du système"
@ -1664,47 +1684,47 @@ msgstr "Annuler"
msgid "Overview"
msgstr "Vue densemble"
#: js/ui/padOsd.js:95
#: js/ui/padOsd.js:96
msgid "New shortcut…"
msgstr "Nouveau raccourci…"
#: js/ui/padOsd.js:142
#: js/ui/padOsd.js:143
msgid "Application defined"
msgstr "Applications définies"
#: js/ui/padOsd.js:143
#: js/ui/padOsd.js:144
msgid "Show on-screen help"
msgstr "Afficher laide à lécran"
#: js/ui/padOsd.js:144
#: js/ui/padOsd.js:145
msgid "Switch monitor"
msgstr "Changer décran"
#: js/ui/padOsd.js:145
#: js/ui/padOsd.js:146
msgid "Assign keystroke"
msgstr "Associer une touche"
#: js/ui/padOsd.js:211
#: js/ui/padOsd.js:212
msgid "Done"
msgstr "Terminé"
#: js/ui/padOsd.js:716
#: js/ui/padOsd.js:718
msgid "Edit…"
msgstr "Édition…"
#: js/ui/padOsd.js:758 js/ui/padOsd.js:875
#: js/ui/padOsd.js:760 js/ui/padOsd.js:877
msgid "None"
msgstr "Aucun"
#: js/ui/padOsd.js:829
#: js/ui/padOsd.js:831
msgid "Press a button to configure"
msgstr "Appuyez sur un bouton pour le configurer"
#: js/ui/padOsd.js:830
#: js/ui/padOsd.js:832
msgid "Press Esc to exit"
msgstr "Appuyez sur Échap pour quitter"
#: js/ui/padOsd.js:833
#: js/ui/padOsd.js:835
msgid "Press any key to exit"
msgstr "Appuyez sur une touche pour quitter"
@ -1714,12 +1734,12 @@ msgstr "Appuyez sur une touche pour quitter"
msgid "Activities"
msgstr "Activités"
#: js/ui/panel.js:556
#: js/ui/panel.js:542
msgctxt "System menu in the top bar"
msgid "System"
msgstr "Système"
#: js/ui/panel.js:674
#: js/ui/panel.js:658
msgid "Top Bar"
msgstr "Barre supérieure"
@ -1758,7 +1778,7 @@ msgstr "Impossible de verrouiller"
msgid "Lock was blocked by an application"
msgstr "Le verrouillage a été bloqué par une application"
#: js/ui/screenshot.js:155
#: js/ui/screenshot.js:141
msgid "Screenshot taken"
msgstr "Capture décran effectuée"
@ -2264,6 +2284,7 @@ msgid "Balanced"
msgstr "Équilibré"
#: js/ui/status/powerProfiles.js:21
#| msgid "Power Settings"
msgctxt "Power profile"
msgid "Power Saver"
msgstr "Économie dénergie"
@ -2458,10 +2479,13 @@ msgid "%d × %d"
msgstr "%d × %d"
#: js/ui/windowMenu.js:27
#| msgid "Hide Text"
msgid "Hide"
msgstr "Masquer"
#: js/ui/windowMenu.js:34
#| msgctxt "search-result"
#| msgid "Restart"
msgid "Restore"
msgstr "Restaurer"
@ -2833,7 +2857,6 @@ msgstr "Les champs UUID, nom et description sont obligatoires"
#: subprojects/extensions-tool/src/command-enable.c:46
#: subprojects/extensions-tool/src/command-info.c:50
#: subprojects/extensions-tool/src/command-list.c:64
#: subprojects/extensions-tool/src/main.c:146
msgid "Failed to connect to GNOME Shell\n"
msgstr "Erreur lors de la connexion à Shell de GNOME\n"
@ -2850,7 +2873,7 @@ msgstr "Désactiver une extension"
#: subprojects/extensions-tool/src/command-disable.c:119
#: subprojects/extensions-tool/src/command-enable.c:119
#: subprojects/extensions-tool/src/command-info.c:103
#: subprojects/extensions-tool/src/command-prefs.c:105
#: subprojects/extensions-tool/src/command-prefs.c:97
#: subprojects/extensions-tool/src/command-reset.c:76
#: subprojects/extensions-tool/src/command-uninstall.c:104
msgid "No UUID given"
@ -2859,7 +2882,7 @@ msgstr "Aucun UUID indiqué"
#: subprojects/extensions-tool/src/command-disable.c:124
#: subprojects/extensions-tool/src/command-enable.c:124
#: subprojects/extensions-tool/src/command-info.c:108
#: subprojects/extensions-tool/src/command-prefs.c:110
#: subprojects/extensions-tool/src/command-prefs.c:102
#: subprojects/extensions-tool/src/command-reset.c:81
#: subprojects/extensions-tool/src/command-uninstall.c:109
msgid "More than one UUID given"
@ -2989,12 +3012,7 @@ msgstr "Plus dun répertoire source indiqué"
msgid "Extension “%s” doesn't have preferences\n"
msgstr "Lextension « %s » na pas de préférences\n"
#: subprojects/extensions-tool/src/command-prefs.c:62
#, c-format
msgid "Failed to open prefs for extension “%s”: %s\n"
msgstr "Impossible douvrir les préférences de lextension « %s » : %s\n"
#: subprojects/extensions-tool/src/command-prefs.c:87
#: subprojects/extensions-tool/src/command-prefs.c:79
msgid "Opens extension preferences"
msgstr "Ouvre les préférences de lextension"
@ -3019,6 +3037,10 @@ msgstr "Désinstaller une extension"
msgid "Do not print error messages"
msgstr "Ne pas afficher les messages derreur"
#: subprojects/extensions-tool/src/main.c:146
msgid "Failed to connect to GNOME Shell"
msgstr "Impossible de se connecter à Shell de GNOME"
#: subprojects/extensions-tool/src/main.c:244
msgid "Path"
msgstr "Chemin"
@ -3149,19 +3171,6 @@ msgstr[1] "%u entrées"
msgid "System Sounds"
msgstr "Sons système"
#~ msgid "Enable introspection API"
#~ msgstr "Activer lAPI dintrospection"
#~ msgid ""
#~ "Enables a D-Bus API that allows to introspect the application state of "
#~ "the shell."
#~ msgstr ""
#~ "Active lAPI D-Bus, qui permet dintrospecter létat dapplication du "
#~ "shell."
#~ msgid "Failed to connect to GNOME Shell"
#~ msgstr "Impossible de se connecter à Shell de GNOME"
#~ msgid "Minimize"
#~ msgstr "Minimiser"

476
po/fur.po

File diff suppressed because it is too large Load Diff

View File

@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
"POT-Creation-Date: 2021-11-06 13:28+0000\n"
"PO-Revision-Date: 2021-11-12 00:26+0200\n"
"POT-Creation-Date: 2021-09-23 14:20+0000\n"
"PO-Revision-Date: 2021-09-27 11:13+0300\n"
"Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n"
"Language-Team: Hebrew <yoseforb@gmail.com>\n"
"Language: he\n"
@ -1387,11 +1387,11 @@ msgstr "התקנת הרחבות"
msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "הורדה והתקנה של „%s” מ־extensions.gnome.org?"
#: js/ui/extensionSystem.js:266
#: js/ui/extensionSystem.js:252
msgid "Extension Updates Available"
msgstr "עדכוני הרחבות זמינים"
#: js/ui/extensionSystem.js:267
#: js/ui/extensionSystem.js:253
msgid "Extension updates are ready to be installed."
msgstr "עדכוני הרחבות מוכנים להתקנה."
@ -2747,7 +2747,6 @@ msgstr "UUID, name and description are required"
#: subprojects/extensions-tool/src/command-enable.c:46
#: subprojects/extensions-tool/src/command-info.c:50
#: subprojects/extensions-tool/src/command-list.c:64
#: subprojects/extensions-tool/src/main.c:146
msgid "Failed to connect to GNOME Shell\n"
msgstr "Failed to connect to GNOME Shell\n"
@ -2764,7 +2763,7 @@ msgstr "Disable an extension"
#: subprojects/extensions-tool/src/command-disable.c:119
#: subprojects/extensions-tool/src/command-enable.c:119
#: subprojects/extensions-tool/src/command-info.c:103
#: subprojects/extensions-tool/src/command-prefs.c:105
#: subprojects/extensions-tool/src/command-prefs.c:97
#: subprojects/extensions-tool/src/command-reset.c:76
#: subprojects/extensions-tool/src/command-uninstall.c:104
msgid "No UUID given"
@ -2773,7 +2772,7 @@ msgstr "No UUID given"
#: subprojects/extensions-tool/src/command-disable.c:124
#: subprojects/extensions-tool/src/command-enable.c:124
#: subprojects/extensions-tool/src/command-info.c:108
#: subprojects/extensions-tool/src/command-prefs.c:110
#: subprojects/extensions-tool/src/command-prefs.c:102
#: subprojects/extensions-tool/src/command-reset.c:81
#: subprojects/extensions-tool/src/command-uninstall.c:109
msgid "More than one UUID given"
@ -2843,7 +2842,7 @@ msgstr "Print extension details"
#: subprojects/extensions-tool/src/command-list.c:154
msgid "List installed extensions"
msgstr "הצגת ההרחבות המותקנות"
msgstr "List installed extensions"
#: subprojects/extensions-tool/src/command-pack.c:450
msgid "FILE"
@ -2896,19 +2895,14 @@ msgstr "Create an extension bundle"
#: subprojects/extensions-tool/src/command-pack.c:501
msgid "More than one source directory specified"
msgstr "צוינה יותר מתיקיית מקור אחת"
msgstr "More than one source directory specified"
#: subprojects/extensions-tool/src/command-prefs.c:47
#, c-format
msgid "Extension “%s” doesn't have preferences\n"
msgstr "להרחבה „%s” אין העדפות\n"
msgstr "Extension “%s” doesn't have preferences\n"
#: subprojects/extensions-tool/src/command-prefs.c:62
#, c-format
msgid "Failed to open prefs for extension “%s”: %s\n"
msgstr "פתיחת ההעדפות של ההרחבה „%s” נכשלה: %s\n"
#: subprojects/extensions-tool/src/command-prefs.c:87
#: subprojects/extensions-tool/src/command-prefs.c:79
msgid "Opens extension preferences"
msgstr "Opens extension preferences"
@ -2933,6 +2927,10 @@ msgstr "Uninstall an extension"
msgid "Do not print error messages"
msgstr "Do not print error messages"
#: subprojects/extensions-tool/src/main.c:146
msgid "Failed to connect to GNOME Shell"
msgstr "Failed to connect to GNOME Shell"
#: subprojects/extensions-tool/src/main.c:244
msgid "Path"
msgstr "Path"
@ -3067,9 +3065,6 @@ msgstr[3] "%u ערוצי קלט"
msgid "System Sounds"
msgstr "צלילי מערכת"
#~ msgid "Failed to connect to GNOME Shell"
#~ msgstr "Failed to connect to GNOME Shell"
#~ msgid "Enable introspection API"
#~ msgstr "Enable introspection API"

View File

@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
"POT-Creation-Date: 2021-11-26 16:19+0000\n"
"PO-Revision-Date: 2021-11-26 19:03+0100\n"
"POT-Creation-Date: 2021-09-23 14:20+0000\n"
"PO-Revision-Date: 2021-10-06 19:07+0200\n"
"Last-Translator: gogo <trebelnik2@gmail.com>\n"
"Language-Team: Croatian <hr@li.org>\n"
"Language: hr\n"
@ -17,7 +17,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Poedit 2.3\n"
"X-Generator: Poedit 3.0\n"
#: data/50-gnome-shell-launchers.xml:6
msgid "Launchers"
@ -794,7 +794,7 @@ msgstr "Zabrani pristup"
msgid "Grant Access"
msgstr "Dopusti pristup"
#: js/ui/appDisplay.js:1791
#: js/ui/appDisplay.js:1846
msgid "Unnamed Folder"
msgstr "Neimenovana mapa"
@ -1398,11 +1398,11 @@ msgstr "Instaliraj proširenje"
msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "Preuzmi i instaliraj “%s” sa extensions.gnome.org?"
#: js/ui/extensionSystem.js:266
#: js/ui/extensionSystem.js:252
msgid "Extension Updates Available"
msgstr "Nadopuna proširenja je dostupna"
#: js/ui/extensionSystem.js:267
#: js/ui/extensionSystem.js:253
msgid "Extension updates are ready to be installed."
msgstr "Nadopune proširenja su spremne za instalaciju."
@ -1550,23 +1550,11 @@ msgstr "Pogledaj izvor"
msgid "Web Page"
msgstr "Web stranica"
#: js/ui/main.js:259
msgid "System was put in unsafe mode"
msgstr "Sustav je stavljen u nesiguran način rada"
#: js/ui/main.js:260
msgid "Applications now have unrestricted access"
msgstr "Aplikacije sada imaju neograničen pristup"
#: js/ui/main.js:261 js/ui/overview.js:58
msgid "Undo"
msgstr "Poništi"
#: js/ui/main.js:307
#: js/ui/main.js:290
msgid "Logged in as a privileged user"
msgstr "Prijavljeni ste kao administratorski korisnik"
#: js/ui/main.js:308
#: js/ui/main.js:291
msgid ""
"Running a session as a privileged user should be avoided for security "
"reasons. If possible, you should log in as a normal user."
@ -1575,11 +1563,11 @@ msgstr ""
"izbjegavati iz sigurnosnih razloga. Ako je moguće, trebate se prijaviti kao "
"normalan korisnik."
#: js/ui/main.js:357
#: js/ui/main.js:340
msgid "Screen Lock disabled"
msgstr "Zaključavanje zaslona je onemogućeno"
#: js/ui/main.js:358
#: js/ui/main.js:341
msgid "Screen Locking requires the GNOME display manager."
msgstr "Zaključavanje zaslona zahtijeva GNOME upravitelja zaslona."
@ -1607,6 +1595,10 @@ msgstr "Upiši za pretragu"
msgid "Applications"
msgstr "Aplikacije"
#: js/ui/overview.js:58
msgid "Undo"
msgstr "Poništi"
#. Translators: This is the main view to select
#. activities. See also note for "Activities" string.
#: js/ui/overview.js:71
@ -2776,7 +2768,6 @@ msgstr "UUID, naziv i opis su potrebni"
#: subprojects/extensions-tool/src/command-enable.c:46
#: subprojects/extensions-tool/src/command-info.c:50
#: subprojects/extensions-tool/src/command-list.c:64
#: subprojects/extensions-tool/src/main.c:146
msgid "Failed to connect to GNOME Shell\n"
msgstr "Neuspjelo povezivanje s GNOME ljuskom\n"
@ -2793,7 +2784,7 @@ msgstr "Onemogući proširenje"
#: subprojects/extensions-tool/src/command-disable.c:119
#: subprojects/extensions-tool/src/command-enable.c:119
#: subprojects/extensions-tool/src/command-info.c:103
#: subprojects/extensions-tool/src/command-prefs.c:105
#: subprojects/extensions-tool/src/command-prefs.c:97
#: subprojects/extensions-tool/src/command-reset.c:76
#: subprojects/extensions-tool/src/command-uninstall.c:104
msgid "No UUID given"
@ -2802,7 +2793,7 @@ msgstr "UUID nije naveden"
#: subprojects/extensions-tool/src/command-disable.c:124
#: subprojects/extensions-tool/src/command-enable.c:124
#: subprojects/extensions-tool/src/command-info.c:108
#: subprojects/extensions-tool/src/command-prefs.c:110
#: subprojects/extensions-tool/src/command-prefs.c:102
#: subprojects/extensions-tool/src/command-reset.c:81
#: subprojects/extensions-tool/src/command-uninstall.c:109
msgid "More than one UUID given"
@ -2932,12 +2923,7 @@ msgstr "Određeno je više od jedne izvorne mape"
msgid "Extension “%s” doesn't have preferences\n"
msgstr "Proširenje “%s” ne sadrži osobitosti\n"
#: subprojects/extensions-tool/src/command-prefs.c:62
#, c-format
msgid "Failed to open prefs for extension “%s”: %s\n"
msgstr "Neuspjelo otvaranje osobitosti za proširenje “%s”: %s\n"
#: subprojects/extensions-tool/src/command-prefs.c:87
#: subprojects/extensions-tool/src/command-prefs.c:79
msgid "Opens extension preferences"
msgstr "Otvara osobitosti proširenja"
@ -2962,6 +2948,10 @@ msgstr "Ukloni proširenje"
msgid "Do not print error messages"
msgstr "Ne ispisuj poruke greške"
#: subprojects/extensions-tool/src/main.c:146
msgid "Failed to connect to GNOME Shell"
msgstr "Neuspjelo povezivanje s GNOME ljuskom"
#: subprojects/extensions-tool/src/main.c:244
msgid "Path"
msgstr "Putanja"
@ -3094,9 +3084,6 @@ msgstr[2] "%u ulaza"
msgid "System Sounds"
msgstr "Zvukovi sustava"
#~ msgid "Failed to connect to GNOME Shell"
#~ msgstr "Neuspjelo povezivanje s GNOME ljuskom"
#~ msgid "Enable introspection API"
#~ msgstr "Omogući API samoispitivanja"

669
po/it.po

File diff suppressed because it is too large Load Diff

286
po/lt.po
View File

@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
"POT-Creation-Date: 2021-11-13 17:10+0000\n"
"PO-Revision-Date: 2021-11-21 21:42+0200\n"
"POT-Creation-Date: 2021-08-17 23:56+0000\n"
"PO-Revision-Date: 2021-09-01 23:06+0300\n"
"Last-Translator: Aurimas Černius <aurisc4@gmail.com>\n"
"Language-Team: Lietuvių <gnome-lt@lists.akl.lt>\n"
"Language: lt\n"
@ -28,38 +28,47 @@ msgid "Launchers"
msgstr "Paleidikliai"
#: data/50-gnome-shell-launchers.xml:10
#| msgid "Switch to application 1"
msgid "Activate favorite application 1"
msgstr "Paleisti mėgiamą programą 1"
#: data/50-gnome-shell-launchers.xml:14
#| msgid "Switch to application 2"
msgid "Activate favorite application 2"
msgstr "Paleisti mėgiamą programą 2"
#: data/50-gnome-shell-launchers.xml:18
#| msgid "Switch to application 3"
msgid "Activate favorite application 3"
msgstr "Paleisti mėgiamą programą 3"
#: data/50-gnome-shell-launchers.xml:22
#| msgid "Switch to application 4"
msgid "Activate favorite application 4"
msgstr "Paleisti mėgiamą programą 4"
#: data/50-gnome-shell-launchers.xml:26
#| msgid "Switch to application 5"
msgid "Activate favorite application 5"
msgstr "Paleisti mėgiamą programą 5"
#: data/50-gnome-shell-launchers.xml:30
#| msgid "Switch to application 6"
msgid "Activate favorite application 6"
msgstr "Paleisti mėgiamą programą 6"
#: data/50-gnome-shell-launchers.xml:34
#| msgid "Switch to application 7"
msgid "Activate favorite application 7"
msgstr "Paleisti mėgiamą programą 7"
#: data/50-gnome-shell-launchers.xml:38
#| msgid "Switch to application 8"
msgid "Activate favorite application 8"
msgstr "Paleisti mėgiamą programą 8"
#: data/50-gnome-shell-launchers.xml:42
#| msgid "Switch to application 9"
msgid "Activate favorite application 9"
msgstr "Paleisti mėgiamą programą 9"
@ -256,11 +265,22 @@ msgstr ""
"versiją, o milžiniški skaičiai reiškia versijas, kurių dar nėra. Todėl "
"milžiniškus skaičius galima naudoti šio dialogo išjungimui."
#: data/org.gnome.shell.gschema.xml.in:133
#: data/org.gnome.shell.gschema.xml.in:109
msgid "Enable introspection API"
msgstr "Įjungti nagrinėjimo sąsają"
#: data/org.gnome.shell.gschema.xml.in:110
msgid ""
"Enables a D-Bus API that allows to introspect the application state of the "
"shell."
msgstr ""
"Įjungia D-Bus sąsają, kuri leidžia nagrinėti apvalkalo programos būseną."
#: data/org.gnome.shell.gschema.xml.in:141
msgid "Layout of the app picker"
msgstr "Programų pasirinkimo išdėstymas"
#: data/org.gnome.shell.gschema.xml.in:134
#: data/org.gnome.shell.gschema.xml.in:142
msgid ""
"Layout of the app picker. Each entry in the array is a page. Pages are "
"stored in the order they appear in GNOME Shell. Each page contains an "
@ -273,108 +293,108 @@ msgstr ""
"vertės yra įrašomos kaip „duomenys“: • “position”: programos piktogramos "
"padėtis puslapyje"
#: data/org.gnome.shell.gschema.xml.in:149
#: data/org.gnome.shell.gschema.xml.in:157
msgid "Keybinding to open the application menu"
msgstr "Klavišų susiejimas, kuriuo atveriamas programų meniu"
#: data/org.gnome.shell.gschema.xml.in:150
#: data/org.gnome.shell.gschema.xml.in:158
msgid "Keybinding to open the application menu."
msgstr "Klavišų susiejimas, kuriuo atveriamas programų meniu."
#: data/org.gnome.shell.gschema.xml.in:156
#: data/org.gnome.shell.gschema.xml.in:163
#: data/org.gnome.shell.gschema.xml.in:164
#: data/org.gnome.shell.gschema.xml.in:171
msgid "Keybinding to shift between overview states"
msgstr "Klavišų susiejimas apžvalgos būsenų keitimui"
#: data/org.gnome.shell.gschema.xml.in:157
#: data/org.gnome.shell.gschema.xml.in:165
msgid "Keybinding to shift between session, window picker and app grid"
msgstr ""
"Klavišų susiejimas perėjimui tarp seanso, langų pasirinkimo ir programų "
"tinklelio"
#: data/org.gnome.shell.gschema.xml.in:164
#: data/org.gnome.shell.gschema.xml.in:172
msgid "Keybinding to shift between app grid, window picker and session"
msgstr ""
"Klavišų susiejimas perėjimui tarp programų tinklelio, langų pasirinkimo bei "
"seanso."
#: data/org.gnome.shell.gschema.xml.in:170
#: data/org.gnome.shell.gschema.xml.in:178
msgid "Keybinding to open the “Show Applications” view"
msgstr "Klavišų susiejimas, kuriuo atveriamas rodinys „rodyti programas“"
#: data/org.gnome.shell.gschema.xml.in:171
#: data/org.gnome.shell.gschema.xml.in:179
msgid ""
"Keybinding to open the “Show Applications” view of the Activities Overview."
msgstr ""
"Klavišų susiejimas, kuriuo atveriamas rodinys „rodyti programas“ veiklų "
"apžvalgoje."
#: data/org.gnome.shell.gschema.xml.in:178
#: data/org.gnome.shell.gschema.xml.in:186
msgid "Keybinding to open the overview"
msgstr "Klavišų susiejimas, kuriuo atveriama apžvalga"
#: data/org.gnome.shell.gschema.xml.in:179
#: data/org.gnome.shell.gschema.xml.in:187
msgid "Keybinding to open the Activities Overview."
msgstr "Klavišų susiejimas, kuriuo atveriama veiklų apžvalga."
#: data/org.gnome.shell.gschema.xml.in:185
#: data/org.gnome.shell.gschema.xml.in:193
msgid "Keybinding to toggle the visibility of the notification list"
msgstr "Klavišų susiejimas pranešimų juostos matomumui perjungti"
#: data/org.gnome.shell.gschema.xml.in:186
#: data/org.gnome.shell.gschema.xml.in:194
msgid "Keybinding to toggle the visibility of the notification list."
msgstr "Klavišų susiejimas pranešimų juostos matomumui perjungti."
#: data/org.gnome.shell.gschema.xml.in:192
#: data/org.gnome.shell.gschema.xml.in:200
msgid "Keybinding to focus the active notification"
msgstr "Klavišų susiejimas, kuriuo fokusuojamas aktyvus pranešimas"
#: data/org.gnome.shell.gschema.xml.in:193
#: data/org.gnome.shell.gschema.xml.in:201
msgid "Keybinding to focus the active notification."
msgstr "Klavišų susiejimas, kuriuo fokusuojamas aktyvus pranešimas."
#: data/org.gnome.shell.gschema.xml.in:199
#: data/org.gnome.shell.gschema.xml.in:207
msgid "Switch to application 1"
msgstr "Pereiti į programą 1"
#: data/org.gnome.shell.gschema.xml.in:203
#: data/org.gnome.shell.gschema.xml.in:211
msgid "Switch to application 2"
msgstr "Pereiti į programą 2"
#: data/org.gnome.shell.gschema.xml.in:207
#: data/org.gnome.shell.gschema.xml.in:215
msgid "Switch to application 3"
msgstr "Pereiti į programą 3"
#: data/org.gnome.shell.gschema.xml.in:211
#: data/org.gnome.shell.gschema.xml.in:219
msgid "Switch to application 4"
msgstr "Pereiti į programą 4"
#: data/org.gnome.shell.gschema.xml.in:215
#: data/org.gnome.shell.gschema.xml.in:223
msgid "Switch to application 5"
msgstr "Pereiti į programą 5"
#: data/org.gnome.shell.gschema.xml.in:219
#: data/org.gnome.shell.gschema.xml.in:227
msgid "Switch to application 6"
msgstr "Pereiti į programą 6"
#: data/org.gnome.shell.gschema.xml.in:223
#: data/org.gnome.shell.gschema.xml.in:231
msgid "Switch to application 7"
msgstr "Pereiti į programą 7"
#: data/org.gnome.shell.gschema.xml.in:227
#: data/org.gnome.shell.gschema.xml.in:235
msgid "Switch to application 8"
msgstr "Pereiti į programą 8"
#: data/org.gnome.shell.gschema.xml.in:231
#: data/org.gnome.shell.gschema.xml.in:239
msgid "Switch to application 9"
msgstr "Pereiti į programą 9"
#: data/org.gnome.shell.gschema.xml.in:240
#: data/org.gnome.shell.gschema.xml.in:267
#: data/org.gnome.shell.gschema.xml.in:248
#: data/org.gnome.shell.gschema.xml.in:275
msgid "Limit switcher to current workspace."
msgstr "Apriboti perjungėją dabartine darbo sritimi."
#: data/org.gnome.shell.gschema.xml.in:241
#: data/org.gnome.shell.gschema.xml.in:249
msgid ""
"If true, only applications that have windows on the current workspace are "
"shown in the switcher. Otherwise, all applications are included."
@ -382,11 +402,11 @@ msgstr ""
"Jei teigiama, perjungimo lange bus rodomos tik programos, turinčios langų "
"dabartinėje darbo srityje. Priešingu atveju įtraukiamos visos programos."
#: data/org.gnome.shell.gschema.xml.in:258
#: data/org.gnome.shell.gschema.xml.in:266
msgid "The application icon mode."
msgstr "Programos piktogramos veiksena."
#: data/org.gnome.shell.gschema.xml.in:259
#: data/org.gnome.shell.gschema.xml.in:267
msgid ""
"Configures how the windows are shown in the switcher. Valid possibilities "
"are “thumbnail-only” (shows a thumbnail of the window), “app-icon-"
@ -396,7 +416,7 @@ msgstr ""
"„thumbnail-only“ (rodo lango miniatiūrą), „app-icon-only“ (rodo tik "
"programos piktogramą) arba „both“ (abu)."
#: data/org.gnome.shell.gschema.xml.in:268
#: data/org.gnome.shell.gschema.xml.in:276
msgid ""
"If true, only windows from the current workspace are shown in the switcher. "
"Otherwise, all windows are included."
@ -404,56 +424,56 @@ msgstr ""
"Jei teigiama, perjungimo lange rodomi tik langai iš dabartinės darbo "
"srities. Priešingu atveju įtraukiami visi langai."
#: data/org.gnome.shell.gschema.xml.in:278
#: data/org.gnome.shell.gschema.xml.in:286
msgid "Locations"
msgstr "Vietos"
#: data/org.gnome.shell.gschema.xml.in:279
#: data/org.gnome.shell.gschema.xml.in:287
msgid "The locations to show in world clocks"
msgstr "Vietos, kurias rodyti pasaulio laikrodžiuose"
#: data/org.gnome.shell.gschema.xml.in:289
#: data/org.gnome.shell.gschema.xml.in:297
msgid "Automatic location"
msgstr "Automatinė vieta"
#: data/org.gnome.shell.gschema.xml.in:290
#: data/org.gnome.shell.gschema.xml.in:298
msgid "Whether to fetch the current location or not"
msgstr "Ar gauti dabartinę vietą"
#: data/org.gnome.shell.gschema.xml.in:297
#: data/org.gnome.shell.gschema.xml.in:305
msgid "Location"
msgstr "Vieta"
#: data/org.gnome.shell.gschema.xml.in:298
#: data/org.gnome.shell.gschema.xml.in:306
msgid "The location for which to show a forecast"
msgstr "Vieta, kuriai rodyti prognozę"
#: data/org.gnome.shell.gschema.xml.in:310
#: data/org.gnome.shell.gschema.xml.in:318
msgid "Attach modal dialog to the parent window"
msgstr "Prikabinti modalinį dialogą prie tėvinio lango"
#: data/org.gnome.shell.gschema.xml.in:311
#: data/org.gnome.shell.gschema.xml.in:320
#: data/org.gnome.shell.gschema.xml.in:319
#: data/org.gnome.shell.gschema.xml.in:328
#: data/org.gnome.shell.gschema.xml.in:336
#: data/org.gnome.shell.gschema.xml.in:344
#: data/org.gnome.shell.gschema.xml.in:352
msgid ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgstr "Šis raktas perrašo org.gnome.mutter raktą, kai vykdoma GNOME Shell."
#: data/org.gnome.shell.gschema.xml.in:319
#: data/org.gnome.shell.gschema.xml.in:327
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr "Įjungti kraštų išplėtimą, kai langai numetami ekrano kraštuose"
#: data/org.gnome.shell.gschema.xml.in:327
#: data/org.gnome.shell.gschema.xml.in:335
msgid "Workspaces are managed dynamically"
msgstr "Darbo sritys yra tvarkomos dinamiškai"
#: data/org.gnome.shell.gschema.xml.in:335
#: data/org.gnome.shell.gschema.xml.in:343
msgid "Workspaces only on primary monitor"
msgstr "Darbo sritys tik pagrindiniame monitoriuje"
#: data/org.gnome.shell.gschema.xml.in:343
#: data/org.gnome.shell.gschema.xml.in:351
msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr "Atidėti fokuso pakeitimus pelei iki žymiklis nustos judėti"
@ -488,18 +508,18 @@ msgid "Visit extension homepage"
msgstr "Aplankyti plėtinio namų tinklalapį"
#: js/gdm/authPrompt.js:141 js/ui/audioDeviceSelection.js:61
#: js/ui/components/networkAgent.js:110 js/ui/components/polkitAgent.js:138
#: js/ui/endSessionDialog.js:438 js/ui/extensionDownloader.js:228
#: js/ui/components/networkAgent.js:111 js/ui/components/polkitAgent.js:138
#: js/ui/endSessionDialog.js:438 js/ui/extensionDownloader.js:190
#: js/ui/shellMountOperation.js:376 js/ui/shellMountOperation.js:386
#: js/ui/status/network.js:978 subprojects/extensions-app/js/main.js:183
msgid "Cancel"
msgstr "Atsisakyti"
#. Cisco LEAP
#: js/gdm/authPrompt.js:285 js/ui/components/networkAgent.js:209
#: js/ui/components/networkAgent.js:225 js/ui/components/networkAgent.js:249
#: js/ui/components/networkAgent.js:270 js/ui/components/networkAgent.js:290
#: js/ui/components/networkAgent.js:300 js/ui/components/polkitAgent.js:275
#: js/gdm/authPrompt.js:285 js/ui/components/networkAgent.js:210
#: js/ui/components/networkAgent.js:226 js/ui/components/networkAgent.js:250
#: js/ui/components/networkAgent.js:271 js/ui/components/networkAgent.js:291
#: js/ui/components/networkAgent.js:301 js/ui/components/polkitAgent.js:275
#: js/ui/shellMountOperation.js:326
msgid "Password"
msgstr "Slaptažodis"
@ -522,8 +542,8 @@ msgstr "(pvz., naudotojas arba %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:926 js/ui/components/networkAgent.js:245
#: js/ui/components/networkAgent.js:268 js/ui/components/networkAgent.js:286
#: js/gdm/loginDialog.js:926 js/ui/components/networkAgent.js:246
#: js/ui/components/networkAgent.js:269 js/ui/components/networkAgent.js:287
msgid "Username"
msgstr "Naudotojo vardas"
@ -628,26 +648,26 @@ msgctxt "search-result"
msgid "Lock Screen Rotation"
msgstr "Užrakinti ekrano orientaciją"
#: js/misc/util.js:121
#: js/misc/util.js:120
msgid "Command not found"
msgstr "Komanda nerasta"
#. Replace "Error invoking GLib.shell_parse_argv: " with
#. something nicer
#: js/misc/util.js:157
#: js/misc/util.js:156
msgid "Could not parse command:"
msgstr "Nepavyko perskaityti komandos:"
#: js/misc/util.js:165
#: js/misc/util.js:164
#, javascript-format
msgid "Execution of “%s” failed:"
msgstr "Nepavyko įvykdyti „%s“:"
#: js/misc/util.js:182
#: js/misc/util.js:181
msgid "Just now"
msgstr "Ką tik"
#: js/misc/util.js:184
#: js/misc/util.js:183
#, javascript-format
msgid "%d minute ago"
msgid_plural "%d minutes ago"
@ -655,7 +675,7 @@ msgstr[0] "Prieš %d minutę"
msgstr[1] "Prieš %d minutes"
msgstr[2] "Prieš %d minučių"
#: js/misc/util.js:188
#: js/misc/util.js:187
#, javascript-format
msgid "%d hour ago"
msgid_plural "%d hours ago"
@ -663,11 +683,11 @@ msgstr[0] "Prieš %d valandą"
msgstr[1] "Prieš %d valandas"
msgstr[2] "Prieš %d valandų"
#: js/misc/util.js:192 js/ui/dateMenu.js:162
#: js/misc/util.js:191 js/ui/dateMenu.js:162
msgid "Yesterday"
msgstr "Vakar"
#: js/misc/util.js:194
#: js/misc/util.js:193
#, javascript-format
msgid "%d day ago"
msgid_plural "%d days ago"
@ -675,7 +695,7 @@ msgstr[0] "Prieš %d dieną"
msgstr[1] "Prieš %d dienas"
msgstr[2] "Prieš %d dienų"
#: js/misc/util.js:198
#: js/misc/util.js:197
#, javascript-format
msgid "%d week ago"
msgid_plural "%d weeks ago"
@ -683,7 +703,7 @@ msgstr[0] "Prieš %d savaitę"
msgstr[1] "Prieš %d savaites"
msgstr[2] "Prieš %d savaičių"
#: js/misc/util.js:202
#: js/misc/util.js:201
#, javascript-format
msgid "%d month ago"
msgid_plural "%d months ago"
@ -691,7 +711,7 @@ msgstr[0] "Prieš %d mėnesį"
msgstr[1] "Prieš %d mėnesius"
msgstr[2] "Prieš %d mėnesių"
#: js/misc/util.js:205
#: js/misc/util.js:204
#, javascript-format
msgid "%d year ago"
msgid_plural "%d years ago"
@ -700,20 +720,20 @@ msgstr[1] "Prieš %d metus"
msgstr[2] "Prieš %d metų"
#. Translators: Time in 24h format
#: js/misc/util.js:238
#: js/misc/util.js:237
msgid "%H%M"
msgstr "%H%M"
#. Translators: this is the word "Yesterday" followed by a
#. time string in 24h format. i.e. "Yesterday, 14:30"
#: js/misc/util.js:244
#: js/misc/util.js:243
#, no-c-format
msgid "Yesterday, %H%M"
msgstr "Vakar, %H:%M"
#. Translators: this is the week day name followed by a time
#. string in 24h format. i.e. "Monday, 14:30"
#: js/misc/util.js:250
#: js/misc/util.js:249
#, no-c-format
msgid "%A, %H%M"
msgstr "%A, %H%M"
@ -721,7 +741,7 @@ msgstr "%A, %H%M"
#. Translators: this is the month name and day number
#. followed by a time string in 24h format.
#. i.e. "May 25, 14:30"
#: js/misc/util.js:256
#: js/misc/util.js:255
#, no-c-format
msgid "%B %-d, %H%M"
msgstr "%B %-d, %H%M"
@ -729,7 +749,7 @@ msgstr "%B %-d, %H%M"
#. Translators: this is the month name, day number, year
#. number followed by a time string in 24h format.
#. i.e. "May 25 2012, 14:30"
#: js/misc/util.js:262
#: js/misc/util.js:261
#, no-c-format
msgid "%B %-d %Y, %H%M"
msgstr "%Y %m %-d, %H%M"
@ -737,20 +757,20 @@ msgstr "%Y %m %-d, %H%M"
#. Show only the time if date is on today
#. eslint-disable-line no-lonely-if
#. Translators: Time in 12h format
#: js/misc/util.js:267
#: js/misc/util.js:266
msgid "%l%M %p"
msgstr "%l%M %p"
#. Translators: this is the word "Yesterday" followed by a
#. time string in 12h format. i.e. "Yesterday, 2:30 pm"
#: js/misc/util.js:273
#: js/misc/util.js:272
#, no-c-format
msgid "Yesterday, %l%M %p"
msgstr "Vakar, %l%M %p"
#. Translators: this is the week day name followed by a time
#. string in 12h format. i.e. "Monday, 2:30 pm"
#: js/misc/util.js:279
#: js/misc/util.js:278
#, no-c-format
msgid "%A, %l%M %p"
msgstr "%A, %l%M %p"
@ -758,7 +778,7 @@ msgstr "%A, %l%M %p"
#. Translators: this is the month name and day number
#. followed by a time string in 12h format.
#. i.e. "May 25, 2:30 pm"
#: js/misc/util.js:285
#: js/misc/util.js:284
#, no-c-format
msgid "%B %-d, %l%M %p"
msgstr "%B %-d, %l%M %p"
@ -766,17 +786,17 @@ msgstr "%B %-d, %l%M %p"
#. Translators: this is the month name, day number, year
#. number followed by a time string in 12h format.
#. i.e. "May 25 2012, 2:30 pm"
#: js/misc/util.js:291
#: js/misc/util.js:290
#, no-c-format
msgid "%B %-d %Y, %l%M %p"
msgstr "%Y %m %-d, %l%M %p"
#. TRANSLATORS: this is the title of the wifi captive portal login window
#: js/portalHelper/main.js:49
#: js/portalHelper/main.js:42
msgid "Hotspot Login"
msgstr "Prisijungimas prie prieigos taško"
#: js/portalHelper/main.js:95
#: js/portalHelper/main.js:88
msgid ""
"Your connection to this hotspot login is not secure. Passwords or other "
"information you enter on this page can be viewed by people nearby."
@ -1021,39 +1041,39 @@ msgstr "Įdiegta udisks versija nepalaiko PIM nustatymo"
msgid "Open with %s"
msgstr "Atverti su %s"
#: js/ui/components/networkAgent.js:92
#: js/ui/components/networkAgent.js:93
msgid ""
"Alternatively you can connect by pushing the “WPS” button on your router."
msgstr ""
"Taip pat galite prisijungti paspausdami „WPS“ mygtuką savo maršrutizatoriuje."
#: js/ui/components/networkAgent.js:104 js/ui/status/network.js:258
#: js/ui/components/networkAgent.js:105 js/ui/status/network.js:258
#: js/ui/status/network.js:349 js/ui/status/network.js:981
msgid "Connect"
msgstr "Prisijungti"
#: js/ui/components/networkAgent.js:215
#: js/ui/components/networkAgent.js:216
msgid "Key"
msgstr "Raktas"
#: js/ui/components/networkAgent.js:253 js/ui/components/networkAgent.js:276
#: js/ui/components/networkAgent.js:254 js/ui/components/networkAgent.js:277
msgid "Private key password"
msgstr "Privataus rakto slaptažodis"
#: js/ui/components/networkAgent.js:274
#: js/ui/components/networkAgent.js:275
msgid "Identity"
msgstr "Tapatybė"
#: js/ui/components/networkAgent.js:288
#: js/ui/components/networkAgent.js:289
msgid "Service"
msgstr "Tarnyba"
#: js/ui/components/networkAgent.js:317 js/ui/components/networkAgent.js:345
#: js/ui/components/networkAgent.js:318 js/ui/components/networkAgent.js:346
#: js/ui/components/networkAgent.js:679 js/ui/components/networkAgent.js:700
msgid "Authentication required"
msgstr "Reikia patvirtinti tapatybę"
#: js/ui/components/networkAgent.js:318 js/ui/components/networkAgent.js:680
#: js/ui/components/networkAgent.js:319 js/ui/components/networkAgent.js:680
#, javascript-format
msgid ""
"Passwords or encryption keys are required to access the wireless network "
@ -1062,31 +1082,31 @@ msgstr ""
"Slaptažodžiai arba šifravimo raktai yra būtini priėjimui prie belaidžio "
"tinklo „%s“."
#: js/ui/components/networkAgent.js:322 js/ui/components/networkAgent.js:684
#: js/ui/components/networkAgent.js:323 js/ui/components/networkAgent.js:684
msgid "Wired 802.1X authentication"
msgstr "Laidinis 802.1X tapatybės patvirtinimas"
#: js/ui/components/networkAgent.js:324
#: js/ui/components/networkAgent.js:325
msgid "Network name"
msgstr "Tinklo vardas"
#: js/ui/components/networkAgent.js:329 js/ui/components/networkAgent.js:688
#: js/ui/components/networkAgent.js:330 js/ui/components/networkAgent.js:688
msgid "DSL authentication"
msgstr "DSL tapatybės patvirtinimas"
#: js/ui/components/networkAgent.js:336 js/ui/components/networkAgent.js:693
#: js/ui/components/networkAgent.js:337 js/ui/components/networkAgent.js:693
msgid "PIN code required"
msgstr "Reikalingas PIN kodas"
#: js/ui/components/networkAgent.js:337 js/ui/components/networkAgent.js:694
#: js/ui/components/networkAgent.js:338 js/ui/components/networkAgent.js:694
msgid "PIN code is needed for the mobile broadband device"
msgstr "Reikalingas PIN kodas mobiliajam plačiajuosčiam įrenginiui"
#: js/ui/components/networkAgent.js:338
#: js/ui/components/networkAgent.js:339
msgid "PIN"
msgstr "PIN"
#: js/ui/components/networkAgent.js:346 js/ui/components/networkAgent.js:685
#: js/ui/components/networkAgent.js:347 js/ui/components/networkAgent.js:685
#: js/ui/components/networkAgent.js:689 js/ui/components/networkAgent.js:701
#: js/ui/components/networkAgent.js:705
#, javascript-format
@ -1383,24 +1403,24 @@ msgstr "%s (nutolęs)"
msgid "%s (console)"
msgstr "%s (komandų eilutė)"
#: js/ui/extensionDownloader.js:232
#: js/ui/extensionDownloader.js:194
msgid "Install"
msgstr "Įdiegti"
#: js/ui/extensionDownloader.js:238
#: js/ui/extensionDownloader.js:200
msgid "Install Extension"
msgstr "Išdiegti plėtinį"
#: js/ui/extensionDownloader.js:239
#: js/ui/extensionDownloader.js:201
#, javascript-format
msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "Parsiųsti ir įdiegti „%s“ iš extensions.gnome.org?"
#: js/ui/extensionSystem.js:252
#: js/ui/extensionSystem.js:253
msgid "Extension Updates Available"
msgstr "Yra plėtinių atnaujinimų"
#: js/ui/extensionSystem.js:253
#: js/ui/extensionSystem.js:254
msgid "Extension updates are ready to be installed."
msgstr "Plėtinių atnaujinimai paruošti diegimui."
@ -1495,7 +1515,7 @@ msgstr "Išjungti"
msgid "Leave Off"
msgstr "Palikti išjungtą"
#: js/ui/keyboard.js:226
#: js/ui/keyboard.js:227
msgid "Region & Language Settings"
msgstr "Regiono ir kalbos nustatymai"
@ -1548,11 +1568,11 @@ msgstr "Žiūrėti šaltinį"
msgid "Web Page"
msgstr "Tinklalapis"
#: js/ui/main.js:290
#: js/ui/main.js:294
msgid "Logged in as a privileged user"
msgstr "Prisijungta privilegijuotu naudotoju"
#: js/ui/main.js:291
#: js/ui/main.js:295
msgid ""
"Running a session as a privileged user should be avoided for security "
"reasons. If possible, you should log in as a normal user."
@ -1560,15 +1580,15 @@ msgstr ""
"Saugumo sumetimais turėtų būti vengiama vykdyti seansus privilegijuotais "
"naudotojais. Jei įmanoma, turėtumėt visada prisjungti normaliu naudotoju."
#: js/ui/main.js:340
#: js/ui/main.js:344
msgid "Screen Lock disabled"
msgstr "Ekrano užraktas išjungtas"
#: js/ui/main.js:341
#: js/ui/main.js:345
msgid "Screen Locking requires the GNOME display manager."
msgstr "Ekrano užrakinimas reikalaujas GNOME vaizduoklio valdyklės."
#: js/ui/messageTray.js:1443
#: js/ui/messageTray.js:1440
msgid "System Information"
msgstr "Sistemos informacija"
@ -1602,47 +1622,47 @@ msgstr "Atšaukti"
msgid "Overview"
msgstr "Apžvalga"
#: js/ui/padOsd.js:95
#: js/ui/padOsd.js:96
msgid "New shortcut…"
msgstr "Naujas trumpinys…"
#: js/ui/padOsd.js:142
#: js/ui/padOsd.js:143
msgid "Application defined"
msgstr "Programos nustatytas"
#: js/ui/padOsd.js:143
#: js/ui/padOsd.js:144
msgid "Show on-screen help"
msgstr "Rodyti pagalbą ekrane"
#: js/ui/padOsd.js:144
#: js/ui/padOsd.js:145
msgid "Switch monitor"
msgstr "Keisti monitorių"
#: js/ui/padOsd.js:145
#: js/ui/padOsd.js:146
msgid "Assign keystroke"
msgstr "Priskirti klavišų kombinaciją"
#: js/ui/padOsd.js:211
#: js/ui/padOsd.js:212
msgid "Done"
msgstr "Atlikta"
#: js/ui/padOsd.js:716
#: js/ui/padOsd.js:718
msgid "Edit…"
msgstr "Keisti…"
#: js/ui/padOsd.js:758 js/ui/padOsd.js:875
#: js/ui/padOsd.js:760 js/ui/padOsd.js:877
msgid "None"
msgstr "Nėra"
#: js/ui/padOsd.js:829
#: js/ui/padOsd.js:831
msgid "Press a button to configure"
msgstr "Spauskite mygtuką konfigūravimui"
#: js/ui/padOsd.js:830
#: js/ui/padOsd.js:832
msgid "Press Esc to exit"
msgstr "Spauskit Esc išėjimui"
#: js/ui/padOsd.js:833
#: js/ui/padOsd.js:835
msgid "Press any key to exit"
msgstr "Išėjimui spauskite bet kurį klavišą"
@ -1652,12 +1672,12 @@ msgstr "Išėjimui spauskite bet kurį klavišą"
msgid "Activities"
msgstr "Apžvalga"
#: js/ui/panel.js:556
#: js/ui/panel.js:542
msgctxt "System menu in the top bar"
msgid "System"
msgstr "Sistema"
#: js/ui/panel.js:674
#: js/ui/panel.js:658
msgid "Top Bar"
msgstr "Viršutinė juosta"
@ -1696,7 +1716,7 @@ msgstr "Nepavyksta užrakinti"
msgid "Lock was blocked by an application"
msgstr "Programa užblokavo užrakinimą"
#: js/ui/screenshot.js:155
#: js/ui/screenshot.js:141
msgid "Screenshot taken"
msgstr "Ekrano nuotrauka padaryta"
@ -2205,6 +2225,7 @@ msgid "Balanced"
msgstr "Balansuotas"
#: js/ui/status/powerProfiles.js:21
#| msgid "Power Settings"
msgctxt "Power profile"
msgid "Power Saver"
msgstr "Taupantis energiją"
@ -2398,10 +2419,13 @@ msgid "%d × %d"
msgstr "%d × %d"
#: js/ui/windowMenu.js:27
#| msgid "Hide Text"
msgid "Hide"
msgstr "Slėpti"
#: js/ui/windowMenu.js:34
#| msgctxt "search-result"
#| msgid "Restart"
msgid "Restore"
msgstr "Atstatyti"
@ -2754,7 +2778,6 @@ msgstr "UUID, pavadinimas ir aprašymas yra būtini"
#: subprojects/extensions-tool/src/command-enable.c:46
#: subprojects/extensions-tool/src/command-info.c:50
#: subprojects/extensions-tool/src/command-list.c:64
#: subprojects/extensions-tool/src/main.c:146
msgid "Failed to connect to GNOME Shell\n"
msgstr "Nepavyko prisijungti prie GNOME apvalkalo\n"
@ -2771,7 +2794,7 @@ msgstr "Išjungti plėtinį"
#: subprojects/extensions-tool/src/command-disable.c:119
#: subprojects/extensions-tool/src/command-enable.c:119
#: subprojects/extensions-tool/src/command-info.c:103
#: subprojects/extensions-tool/src/command-prefs.c:105
#: subprojects/extensions-tool/src/command-prefs.c:97
#: subprojects/extensions-tool/src/command-reset.c:76
#: subprojects/extensions-tool/src/command-uninstall.c:104
msgid "No UUID given"
@ -2780,7 +2803,7 @@ msgstr "Nenurodytas UUID"
#: subprojects/extensions-tool/src/command-disable.c:124
#: subprojects/extensions-tool/src/command-enable.c:124
#: subprojects/extensions-tool/src/command-info.c:108
#: subprojects/extensions-tool/src/command-prefs.c:110
#: subprojects/extensions-tool/src/command-prefs.c:102
#: subprojects/extensions-tool/src/command-reset.c:81
#: subprojects/extensions-tool/src/command-uninstall.c:109
msgid "More than one UUID given"
@ -2910,12 +2933,7 @@ msgstr "Nurodytas daugiau nei vienas kodo aplankas"
msgid "Extension “%s” doesn't have preferences\n"
msgstr "Plėtinys „%s“ neturi nustatymų\n"
#: subprojects/extensions-tool/src/command-prefs.c:62
#, c-format
msgid "Failed to open prefs for extension “%s”: %s\n"
msgstr "Nepavyko atverti nuostatų plėtinio „%s“: %s\n"
#: subprojects/extensions-tool/src/command-prefs.c:87
#: subprojects/extensions-tool/src/command-prefs.c:79
msgid "Opens extension preferences"
msgstr "Atveria plėtinio nuostatas"
@ -2940,6 +2958,10 @@ msgstr "Išdiegti plėtinį"
msgid "Do not print error messages"
msgstr "Nespausdinti klaidų pranešimų"
#: subprojects/extensions-tool/src/main.c:146
msgid "Failed to connect to GNOME Shell"
msgstr "Nepavyko prisijungti prie GNOME apvalkalo"
#: subprojects/extensions-tool/src/main.c:244
msgid "Path"
msgstr "Kelias"
@ -3072,18 +3094,6 @@ msgstr[2] "%u įvesčių"
msgid "System Sounds"
msgstr "Sistemos garsai"
#~ msgid "Enable introspection API"
#~ msgstr "Įjungti nagrinėjimo sąsają"
#~ msgid ""
#~ "Enables a D-Bus API that allows to introspect the application state of "
#~ "the shell."
#~ msgstr ""
#~ "Įjungia D-Bus sąsają, kuri leidžia nagrinėti apvalkalo programos būseną."
#~ msgid "Failed to connect to GNOME Shell"
#~ msgstr "Nepavyko prisijungti prie GNOME apvalkalo"
#~ msgid "Minimize"
#~ msgstr "Sumažinti"

View File

@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell master oc\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
"POT-Creation-Date: 2021-11-13 20:24+0000\n"
"PO-Revision-Date: 2021-11-07 20:30+0100\n"
"POT-Creation-Date: 2021-09-09 03:40+0000\n"
"PO-Revision-Date: 2021-08-18 11:11+0200\n"
"Last-Translator: Quentin PAGÈS\n"
"Language-Team: Tot En Òc\n"
"Language: oc\n"
@ -191,14 +191,14 @@ msgstr "Istoric de la bóstia de dialòg d'inspeccion"
#: data/org.gnome.shell.gschema.xml.in:71
msgid "Always show the “Log out” menu item in the user menu."
msgstr "Totjorn afichar lelement «Se desconnectar» dins lo menú utilizaire."
msgstr "Totjorn afichar lelement « Se desconnectar » dins lo menú utilizaire."
#: data/org.gnome.shell.gschema.xml.in:72
msgid ""
"This key overrides the automatic hiding of the “Log out” menu item in single-"
"user, single-session situations."
msgstr ""
"Aquesta clau aficha lelement «Se desconnectar» del menú utilizaire "
"Aquesta clau aficha lelement « Se desconnectar » del menú utilizaire "
"normalament amagat automaticament dins lo cas duna session o dun "
"utilizaire unic."
@ -218,7 +218,7 @@ msgid ""
msgstr ""
"Lo shell demandarà un senhal al montatge dun periferic chifrat o dun "
"sistèma de fichièrs distant. Se lo senhal pòt èsser enregistrat per una "
"utilizacion ulteriora, una casa de marcar «Se remembrar del senhal» serà "
"utilizacion ulteriora, una casa de marcar « Se remembrar del senhal » serà "
"presenta. Aquesta clau determina lestat per defaut d'aquesta casa de marcar."
#: data/org.gnome.shell.gschema.xml.in:89
@ -241,7 +241,7 @@ msgstr ""
#: data/org.gnome.shell.gschema.xml.in:99
msgid "The last version the “Welcome to GNOME” dialog was shown for"
msgstr ""
"La darrièra version de la fenèstra de «Benvenguda a GNOME» èra mostrada per"
"La darrièra version de la fenèstra de « Benvenguda a GNOME » èra mostrada per"
#: data/org.gnome.shell.gschema.xml.in:100
msgid ""
@ -250,7 +250,7 @@ msgid ""
"number will represent versions that do not exist yet. This huge number can "
"be used to effectively disable the dialog."
msgstr ""
"Aquesta clau determina la version de la fenèstra «Benvenguda de GNOME» "
"Aquesta clau determina la version de la fenèstra « la Benvenguda de GNOME » "
"darrièrament afichada. Una cadena de tèxt voida indica la version mai "
"anciana possibla, e un grand nombre representa una version qu'existís pas "
"encara. Un grand nombre pòt servir a desactivar dun biais efectiu la "
@ -301,13 +301,13 @@ msgstr ""
#: data/org.gnome.shell.gschema.xml.in:170
msgid "Keybinding to open the “Show Applications” view"
msgstr "Combinason de tòcas per dobrir la vista «Afichar las aplicacions»"
msgstr "Combinason de tòcas per dobrir la vista « Afichar las aplicacions »"
#: data/org.gnome.shell.gschema.xml.in:171
msgid ""
"Keybinding to open the “Show Applications” view of the Activities Overview."
msgstr ""
"Combinason de tòcas per dobrir la vista «Afichar las aplicacions» de la "
"Combinason de tòcas per dobrir la vista « Afichar las aplicacions » de la "
"vista densemble de las activitats."
#: data/org.gnome.shell.gschema.xml.in:178
@ -399,9 +399,9 @@ msgid ""
"only” (shows only the application icon) or “both”."
msgstr ""
"Configura lo biais que las fenèstras son afichadas dins lo selector. Las "
"causidas possiblas son «thumbnail-only» (aficha una miniatura de la "
"fenèstra), «app-icon-only» (aficha unicament licòna de laplicacion), o « "
"both» (aficha los dos)."
"causidas possiblas son « thumbnail-only » (aficha una miniatura de la "
"fenèstra), « app-icon-only » (aficha unicament licòna de laplicacion), o « "
"both » (aficha los dos)."
#: data/org.gnome.shell.gschema.xml.in:268
msgid ""
@ -522,7 +522,7 @@ msgstr "Causir una session"
#: js/gdm/loginDialog.js:456
msgid "Not listed?"
msgstr "Absent de la lista?"
msgstr "Absent de la lista ?"
#. Translators: this message is shown below the username entry field
#. to clue the user in on how to login to the local network realm
@ -653,7 +653,7 @@ msgstr "Impossible d'analisar la comanda :"
#: js/misc/util.js:165
#, javascript-format
msgid "Execution of “%s” failed:"
msgstr "Execucion de «%s» impossibla:"
msgstr "Execucion de « %s » impossibla :"
#: js/misc/util.js:182
msgid "Just now"
@ -989,7 +989,7 @@ msgstr "Escafar"
#: js/ui/closeDialog.js:42
#, javascript-format
msgid "“%s” is not responding."
msgstr "«%s» respond pas."
msgstr "« %s » respond pas."
#: js/ui/closeDialog.js:43
msgid ""
@ -1064,7 +1064,7 @@ msgid ""
"Passwords or encryption keys are required to access the wireless network "
"“%s”."
msgstr ""
"Cal un senhal o una clau de chiframent per accedir a la ret sens fial «%s»."
"Cal un senhal o una clau de chiframent per accedir a la ret sens fial « %s »."
#: js/ui/components/networkAgent.js:322 js/ui/components/networkAgent.js:684
msgid "Wired 802.1X authentication"
@ -1095,7 +1095,7 @@ msgstr "PIN"
#: js/ui/components/networkAgent.js:705
#, javascript-format
msgid "A password is required to connect to “%s”."
msgstr "Un senhal es requesit per se connectar a «%s»."
msgstr "Un senhal es requesit per se connectar a « %s »."
#: js/ui/components/networkAgent.js:668 js/ui/status/network.js:1789
msgid "Network Manager"
@ -1433,13 +1433,13 @@ msgstr "Installar lextension"
#: js/ui/extensionDownloader.js:239
#, javascript-format
msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "Telecargar e installar «%s» a partir de extensions.gnome.org?"
msgstr "Telecargar e installar « %s » a partir de extensions.gnome.org ?"
#: js/ui/extensionSystem.js:266
#: js/ui/extensionSystem.js:252
msgid "Extension Updates Available"
msgstr "Mesas a jorn extension disponiblas"
#: js/ui/extensionSystem.js:267
#: js/ui/extensionSystem.js:253
msgid "Extension updates are ready to be installed."
msgstr "Mesas a jorn per lextension prèstas per installacion."
@ -2404,7 +2404,7 @@ msgstr "Far la visita"
#: js/ui/windowAttentionHandler.js:20
#, javascript-format
msgid "“%s” is ready"
msgstr "«%s» es prèst"
msgstr "« %s » es prèst"
#. Translators: This string should be shorter than 30 characters
#: js/ui/windowManager.js:63
@ -2518,7 +2518,7 @@ msgstr "Mòde utilizat per GDM per l'ecran de connexion"
#: src/main.c:431
msgid "Use a specific mode, e.g. “gdm” for login screen"
msgstr "Utilizar un mòde particular, per ex. «gdm» per lecran de connexion"
msgstr "Utilizar un mòde particular, per ex. « gdm » per lecran de connexion"
#: src/main.c:437
msgid "List possible modes"
@ -2532,7 +2532,7 @@ msgstr "Desconegut"
#: src/shell-app.c:549
#, c-format
msgid "Failed to launch “%s”"
msgstr "Impossible d'aviar «%s»"
msgstr "Impossible d'aviar « %s »"
#: src/shell-keyring-prompt.c:731
msgid "Passwords do not match."
@ -2583,7 +2583,7 @@ msgstr "Cap de correspondéncia pas trobada"
#: subprojects/extensions-app/js/main.js:179
#, javascript-format
msgid "Remove “%s”?"
msgstr "Suprimir «%s»?"
msgstr "Suprimir « %s » ?"
#: subprojects/extensions-app/js/main.js:180
msgid ""
@ -2794,7 +2794,6 @@ msgstr "Los camps UUIS, nom e descripcion son obligatòris"
#: subprojects/extensions-tool/src/command-enable.c:46
#: subprojects/extensions-tool/src/command-info.c:50
#: subprojects/extensions-tool/src/command-list.c:64
#: subprojects/extensions-tool/src/main.c:146
msgid "Failed to connect to GNOME Shell\n"
msgstr "Error en se connectant a Shell de GNOME\n"
@ -2811,7 +2810,7 @@ msgstr "Desactivar una extension"
#: subprojects/extensions-tool/src/command-disable.c:119
#: subprojects/extensions-tool/src/command-enable.c:119
#: subprojects/extensions-tool/src/command-info.c:103
#: subprojects/extensions-tool/src/command-prefs.c:105
#: subprojects/extensions-tool/src/command-prefs.c:97
#: subprojects/extensions-tool/src/command-reset.c:76
#: subprojects/extensions-tool/src/command-uninstall.c:104
msgid "No UUID given"
@ -2820,7 +2819,7 @@ msgstr "Cap dUUID pas indicat"
#: subprojects/extensions-tool/src/command-disable.c:124
#: subprojects/extensions-tool/src/command-enable.c:124
#: subprojects/extensions-tool/src/command-info.c:108
#: subprojects/extensions-tool/src/command-prefs.c:110
#: subprojects/extensions-tool/src/command-prefs.c:102
#: subprojects/extensions-tool/src/command-reset.c:81
#: subprojects/extensions-tool/src/command-uninstall.c:109
msgid "More than one UUID given"
@ -2950,12 +2949,7 @@ msgstr "Mai dun repertòri font indicat"
msgid "Extension “%s” doesn't have preferences\n"
msgstr "Lextension « %s » a pas de preferéncias\n"
#: subprojects/extensions-tool/src/command-prefs.c:62
#, c-format
msgid "Failed to open prefs for extension “%s”: %s\n"
msgstr "Dobertura impossibla de las preferéncias per l'extension « %s»: %s\n"
#: subprojects/extensions-tool/src/command-prefs.c:87
#: subprojects/extensions-tool/src/command-prefs.c:79
msgid "Opens extension preferences"
msgstr "Dobrís las preferéncias de las extensions"
@ -2980,6 +2974,10 @@ msgstr "Desinstallar una extension"
msgid "Do not print error messages"
msgstr "Afichar pas los messatges d'error"
#: subprojects/extensions-tool/src/main.c:146
msgid "Failed to connect to GNOME Shell"
msgstr "Error en se connectant a Shell de GNOME"
#: subprojects/extensions-tool/src/main.c:244
msgid "Path"
msgstr "Camin"
@ -2998,7 +2996,7 @@ msgstr "Estat"
#: subprojects/extensions-tool/src/main.c:290
msgid "“version” takes no arguments"
msgstr "«version» accèpta pas cap de paramètre"
msgstr "« version » accèpta pas cap de paramètre"
#: subprojects/extensions-tool/src/main.c:292
#: subprojects/extensions-tool/src/main.c:312
@ -3020,7 +3018,7 @@ msgstr "[PARAMS...]"
#: subprojects/extensions-tool/src/main.c:315
msgid "Commands:"
msgstr "Comandas:"
msgstr "Comandas :"
#: subprojects/extensions-tool/src/main.c:316
msgid "Print help"
@ -3110,9 +3108,6 @@ msgstr[1] "%u entradas"
msgid "System Sounds"
msgstr "Sons sistèma"
#~ msgid "Failed to connect to GNOME Shell"
#~ msgstr "Error en se connectant a Shell de GNOME"
#~ msgid "Enable introspection API"
#~ msgstr "Activar lAPI dintrospeccion"

View File

@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
"POT-Creation-Date: 2021-11-04 17:29+0000\n"
"PO-Revision-Date: 2021-11-06 14:25+0100\n"
"POT-Creation-Date: 2021-09-03 21:44+0000\n"
"PO-Revision-Date: 2021-09-11 15:48+0200\n"
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
"Language-Team: Polish <community-poland@mozilla.org>\n"
"Language: pl\n"
@ -2771,7 +2771,6 @@ msgstr "UUID, nazwa i opis są wymagane"
#: subprojects/extensions-tool/src/command-enable.c:46
#: subprojects/extensions-tool/src/command-info.c:50
#: subprojects/extensions-tool/src/command-list.c:64
#: subprojects/extensions-tool/src/main.c:146
msgid "Failed to connect to GNOME Shell\n"
msgstr "Połączenie z powłoką GNOME się nie powiodło\n"
@ -2788,7 +2787,7 @@ msgstr "Wyłącza rozszerzenie"
#: subprojects/extensions-tool/src/command-disable.c:119
#: subprojects/extensions-tool/src/command-enable.c:119
#: subprojects/extensions-tool/src/command-info.c:103
#: subprojects/extensions-tool/src/command-prefs.c:105
#: subprojects/extensions-tool/src/command-prefs.c:97
#: subprojects/extensions-tool/src/command-reset.c:76
#: subprojects/extensions-tool/src/command-uninstall.c:104
msgid "No UUID given"
@ -2797,7 +2796,7 @@ msgstr "Nie podano UUID"
#: subprojects/extensions-tool/src/command-disable.c:124
#: subprojects/extensions-tool/src/command-enable.c:124
#: subprojects/extensions-tool/src/command-info.c:108
#: subprojects/extensions-tool/src/command-prefs.c:110
#: subprojects/extensions-tool/src/command-prefs.c:102
#: subprojects/extensions-tool/src/command-reset.c:81
#: subprojects/extensions-tool/src/command-uninstall.c:109
msgid "More than one UUID given"
@ -2927,12 +2926,7 @@ msgstr "Podano więcej niż jeden katalog źródłowy"
msgid "Extension “%s” doesn't have preferences\n"
msgstr "Rozszerzenie „%s” nie ma preferencji\n"
#: subprojects/extensions-tool/src/command-prefs.c:62
#, c-format
msgid "Failed to open prefs for extension “%s”: %s\n"
msgstr "Otwarcie preferencji rozszerzenia „%s” się nie powiodło: %s\n"
#: subprojects/extensions-tool/src/command-prefs.c:87
#: subprojects/extensions-tool/src/command-prefs.c:79
msgid "Opens extension preferences"
msgstr "Otwiera preferencje rozszerzenia"
@ -2957,6 +2951,10 @@ msgstr "Odinstalowuje rozszerzenie"
msgid "Do not print error messages"
msgstr "Bez wyświetlania komunikatów o błędach"
#: subprojects/extensions-tool/src/main.c:146
msgid "Failed to connect to GNOME Shell"
msgstr "Połączenie z powłoką GNOME się nie powiodło"
#: subprojects/extensions-tool/src/main.c:244
msgid "Path"
msgstr "Ścieżka"

View File

@ -16,8 +16,8 @@ msgid ""
msgstr ""
"Project-Id-Version: 3.14\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
"POT-Creation-Date: 2021-11-26 16:19+0000\n"
"PO-Revision-Date: 2021-11-27 15:42+0000\n"
"POT-Creation-Date: 2021-11-03 10:04+0000\n"
"PO-Revision-Date: 2021-11-03 11:49+0000\n"
"Last-Translator: Hugo Carvalho <hugokarvalho@hotmail.com>\n"
"Language-Team: Português <https://l10n.gnome.org/teams/pt/>\n"
"Language: pt\n"
@ -802,7 +802,7 @@ msgstr "Negar acesso"
msgid "Grant Access"
msgstr "Conceder acesso"
#: js/ui/appDisplay.js:1791
#: js/ui/appDisplay.js:1846
msgid "Unnamed Folder"
msgstr "Pasta sem nome"
@ -1398,11 +1398,11 @@ msgstr "Instalar extensão"
msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "Transferir e instalar \"%s\" a partir de extensions.gnome.org?"
#: js/ui/extensionSystem.js:266
#: js/ui/extensionSystem.js:252
msgid "Extension Updates Available"
msgstr "Há atualizações de extensões disponíveis"
#: js/ui/extensionSystem.js:267
#: js/ui/extensionSystem.js:253
msgid "Extension updates are ready to be installed."
msgstr "As atualizações de extensões estão prontas para serem instaladas."
@ -1551,23 +1551,11 @@ msgstr "Ver fonte"
msgid "Web Page"
msgstr "Página Web"
#: js/ui/main.js:259
msgid "System was put in unsafe mode"
msgstr "O sistema foi colocado em modo inseguro"
#: js/ui/main.js:260
msgid "Applications now have unrestricted access"
msgstr "As aplicações têm agora acesso sem restrições"
#: js/ui/main.js:261 js/ui/overview.js:58
msgid "Undo"
msgstr "Desfazer"
#: js/ui/main.js:307
#: js/ui/main.js:290
msgid "Logged in as a privileged user"
msgstr "Em sessão como utilizador privilegiado"
#: js/ui/main.js:308
#: js/ui/main.js:291
msgid ""
"Running a session as a privileged user should be avoided for security "
"reasons. If possible, you should log in as a normal user."
@ -1575,11 +1563,11 @@ msgstr ""
"Executar uma sessão como utilizador privilegiado deve ser evitado por "
"motivos de segurança. Se possível, aceder como utilizador normal."
#: js/ui/main.js:357
#: js/ui/main.js:340
msgid "Screen Lock disabled"
msgstr "Bloqueio de ecrã desligado"
#: js/ui/main.js:358
#: js/ui/main.js:341
msgid "Screen Locking requires the GNOME display manager."
msgstr "O bloqueio de ecrã requer o gestor de exibição do GNOME."
@ -1607,6 +1595,10 @@ msgstr "Escreva para pesquisar"
msgid "Applications"
msgstr "Aplicações"
#: js/ui/overview.js:58
msgid "Undo"
msgstr "Desfazer"
#. Translators: This is the main view to select
#. activities. See also note for "Activities" string.
#: js/ui/overview.js:71
@ -2927,7 +2919,7 @@ msgstr "Criar um pacote de extensões"
#: subprojects/extensions-tool/src/command-pack.c:501
msgid "More than one source directory specified"
msgstr "Especificado mais do que um diretório origem"
msgstr "Mais do que um diretório de origem especificado"
#: subprojects/extensions-tool/src/command-prefs.c:47
#, c-format
@ -2937,7 +2929,7 @@ msgstr "A extensão “%s” não tem preferências\n"
#: subprojects/extensions-tool/src/command-prefs.c:62
#, c-format
msgid "Failed to open prefs for extension “%s”: %s\n"
msgstr "Falha ao abrir prefs para a extensão \"%s\": %s\n"
msgstr "Falha ao abrir prefs para extensão \"%s\": %s\n"
#: subprojects/extensions-tool/src/command-prefs.c:87
msgid "Opens extension preferences"
@ -3092,7 +3084,7 @@ msgstr[1] "%u entradas"
#: subprojects/gvc/gvc-mixer-control.c:2867
msgid "System Sounds"
msgstr "Sons de sistema"
msgstr "Sons do sistema"
#~ msgid "Enable introspection API"
#~ msgstr "Ativar API de introspecção"

463
po/ru.po
View File

@ -15,22 +15,28 @@
# Stas Solovey <whats_up@tut.by>, 2011, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020.
# Ivan Molodetskikh <yalterz@gmail.com>, 2020.
# Konstantin Nezhbert <zhbert@yandex.ru>, 2021.
# Melman <Alexmelman88@gmail.com>, 2021.
#
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
"POT-Creation-Date: 2021-08-17 23:56+0000\n"
"PO-Revision-Date: 2021-08-19 08:44+0300\n"
"Last-Translator: Alexey Rubtsov <rushills@gmail.com>\n"
"POT-Creation-Date: 2021-11-03 10:04+0000\n"
"PO-Revision-Date: 2021-11-03 14:58+0300\n"
"Last-Translator: Melman <Alexmelman88@gmail.com>\n"
"Language-Team: Russian <gnome-cyr@gnome.org>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Poedit 3.0\n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
"X-Generator: Gtranslator 40.0\n"
"X-DL-Team: ru\n"
"X-DL-Module: gnome-shell\n"
"X-DL-Branch: gnome-41\n"
"X-DL-Domain: po\n"
"X-DL-State: None\n"
# Запуск приложений, как другой вариант
#: data/50-gnome-shell-launchers.xml:6
@ -263,23 +269,11 @@ msgstr ""
"существуют. Это большое число может быть использовано для эффективного "
"отключения диалога."
#: data/org.gnome.shell.gschema.xml.in:109
msgid "Enable introspection API"
msgstr "Включить API самоанализа"
#: data/org.gnome.shell.gschema.xml.in:110
msgid ""
"Enables a D-Bus API that allows to introspect the application state of the "
"shell."
msgstr ""
"Включает D-Bus API, который позволяет анализировать состояние приложения "
"gnome shell."
#: data/org.gnome.shell.gschema.xml.in:141
#: data/org.gnome.shell.gschema.xml.in:133
msgid "Layout of the app picker"
msgstr "Макет меню выбора приложений"
#: data/org.gnome.shell.gschema.xml.in:142
#: data/org.gnome.shell.gschema.xml.in:134
msgid ""
"Layout of the app picker. Each entry in the array is a page. Pages are "
"stored in the order they appear in GNOME Shell. Each page contains an "
@ -292,107 +286,107 @@ msgstr ""
"настоящее время в качестве “data” хранятся следующие значения: • \"position"
"\" - положение значка приложения на странице"
#: data/org.gnome.shell.gschema.xml.in:157
#: data/org.gnome.shell.gschema.xml.in:149
msgid "Keybinding to open the application menu"
msgstr "Комбинация клавиш для открытия меню приложения"
#: data/org.gnome.shell.gschema.xml.in:158
#: data/org.gnome.shell.gschema.xml.in:150
msgid "Keybinding to open the application menu."
msgstr "Комбинация клавиш для открытия меню приложения."
#: data/org.gnome.shell.gschema.xml.in:164
#: data/org.gnome.shell.gschema.xml.in:171
#: data/org.gnome.shell.gschema.xml.in:156
#: data/org.gnome.shell.gschema.xml.in:163
msgid "Keybinding to shift between overview states"
msgstr "Сочетание клавиш для переключения между состояниями обзора"
#: data/org.gnome.shell.gschema.xml.in:165
#: data/org.gnome.shell.gschema.xml.in:157
msgid "Keybinding to shift between session, window picker and app grid"
msgstr ""
"Сочетание клавиш для переключения между сеансом, меню выбора окон и сеткой "
"приложений"
#: data/org.gnome.shell.gschema.xml.in:172
#: data/org.gnome.shell.gschema.xml.in:164
msgid "Keybinding to shift between app grid, window picker and session"
msgstr ""
"Сочетание клавиш для переключения между сеткой приложений, меню выбора окон "
"и сеансом"
#: data/org.gnome.shell.gschema.xml.in:178
#: data/org.gnome.shell.gschema.xml.in:170
msgid "Keybinding to open the “Show Applications” view"
msgstr "Комбинация клавиш для перехода в режим просмотра приложений"
#: data/org.gnome.shell.gschema.xml.in:179
#: data/org.gnome.shell.gschema.xml.in:171
msgid ""
"Keybinding to open the “Show Applications” view of the Activities Overview."
msgstr ""
"Комбинация клавиш для перехода в режим просмотра приложений в меню «Обзор»."
#: data/org.gnome.shell.gschema.xml.in:186
#: data/org.gnome.shell.gschema.xml.in:178
msgid "Keybinding to open the overview"
msgstr "Комбинация клавиш для перехода в режим обзора"
#: data/org.gnome.shell.gschema.xml.in:187
#: data/org.gnome.shell.gschema.xml.in:179
msgid "Keybinding to open the Activities Overview."
msgstr "Комбинация клавиш для перехода в режим обзора."
#: data/org.gnome.shell.gschema.xml.in:193
#: data/org.gnome.shell.gschema.xml.in:185
msgid "Keybinding to toggle the visibility of the notification list"
msgstr "Комбинация клавиш для отображения или скрытия списка уведомлений"
#: data/org.gnome.shell.gschema.xml.in:194
#: data/org.gnome.shell.gschema.xml.in:186
msgid "Keybinding to toggle the visibility of the notification list."
msgstr "Комбинация клавиш для отображения или скрытия списка уведомлений."
#: data/org.gnome.shell.gschema.xml.in:200
#: data/org.gnome.shell.gschema.xml.in:192
msgid "Keybinding to focus the active notification"
msgstr "Комбинация клавиш для перевода фокуса на текущее уведомление"
#: data/org.gnome.shell.gschema.xml.in:201
#: data/org.gnome.shell.gschema.xml.in:193
msgid "Keybinding to focus the active notification."
msgstr "Комбинация клавиш для перевода фокуса на текущее уведомление."
#: data/org.gnome.shell.gschema.xml.in:207
#: data/org.gnome.shell.gschema.xml.in:199
msgid "Switch to application 1"
msgstr "Переключиться на приложение 1"
#: data/org.gnome.shell.gschema.xml.in:211
#: data/org.gnome.shell.gschema.xml.in:203
msgid "Switch to application 2"
msgstr "Переключиться на приложение 2"
#: data/org.gnome.shell.gschema.xml.in:215
#: data/org.gnome.shell.gschema.xml.in:207
msgid "Switch to application 3"
msgstr "Переключиться на приложение 3"
#: data/org.gnome.shell.gschema.xml.in:219
#: data/org.gnome.shell.gschema.xml.in:211
msgid "Switch to application 4"
msgstr "Переключиться на приложение 4"
#: data/org.gnome.shell.gschema.xml.in:223
#: data/org.gnome.shell.gschema.xml.in:215
msgid "Switch to application 5"
msgstr "Переключиться на приложение 5"
#: data/org.gnome.shell.gschema.xml.in:227
#: data/org.gnome.shell.gschema.xml.in:219
msgid "Switch to application 6"
msgstr "Переключиться на приложение 6"
#: data/org.gnome.shell.gschema.xml.in:231
#: data/org.gnome.shell.gschema.xml.in:223
msgid "Switch to application 7"
msgstr "Переключиться на приложение 7"
#: data/org.gnome.shell.gschema.xml.in:235
#: data/org.gnome.shell.gschema.xml.in:227
msgid "Switch to application 8"
msgstr "Переключиться на приложение 8"
#: data/org.gnome.shell.gschema.xml.in:239
#: data/org.gnome.shell.gschema.xml.in:231
msgid "Switch to application 9"
msgstr "Переключиться на приложение 9"
#: data/org.gnome.shell.gschema.xml.in:248
#: data/org.gnome.shell.gschema.xml.in:275
#: data/org.gnome.shell.gschema.xml.in:240
#: data/org.gnome.shell.gschema.xml.in:267
msgid "Limit switcher to current workspace."
msgstr "Ограничить переключатель текущим рабочим местом."
#: data/org.gnome.shell.gschema.xml.in:249
#: data/org.gnome.shell.gschema.xml.in:241
msgid ""
"If true, only applications that have windows on the current workspace are "
"shown in the switcher. Otherwise, all applications are included."
@ -401,11 +395,11 @@ msgstr ""
"чьи окна находятся на текущем рабочем месте. Иначе все приложения будут "
"включены."
#: data/org.gnome.shell.gschema.xml.in:266
#: data/org.gnome.shell.gschema.xml.in:258
msgid "The application icon mode."
msgstr "Режим значка приложения."
#: data/org.gnome.shell.gschema.xml.in:267
#: data/org.gnome.shell.gschema.xml.in:259
msgid ""
"Configures how the windows are shown in the switcher. Valid possibilities "
"are “thumbnail-only” (shows a thumbnail of the window), “app-icon-"
@ -415,7 +409,7 @@ msgstr ""
"«thumbnail-only» (показывать миниатюру окна), «app-icon-only» (показывать "
"только значок приложения), «both» (показывать миниатюру и значок)."
#: data/org.gnome.shell.gschema.xml.in:276
#: data/org.gnome.shell.gschema.xml.in:268
msgid ""
"If true, only windows from the current workspace are shown in the switcher. "
"Otherwise, all windows are included."
@ -423,59 +417,59 @@ msgstr ""
"Если выбрано, то в переключателе будут показываться только окна из текущего "
"рабочего места. Иначе все окна будут включены."
#: data/org.gnome.shell.gschema.xml.in:286
#: data/org.gnome.shell.gschema.xml.in:278
msgid "Locations"
msgstr "Местоположения"
#: data/org.gnome.shell.gschema.xml.in:287
#: data/org.gnome.shell.gschema.xml.in:279
msgid "The locations to show in world clocks"
msgstr "Местоположения для отображения в мировых часах"
#: data/org.gnome.shell.gschema.xml.in:297
#: data/org.gnome.shell.gschema.xml.in:289
msgid "Automatic location"
msgstr "Автоматическое местоположение"
#: data/org.gnome.shell.gschema.xml.in:298
#: data/org.gnome.shell.gschema.xml.in:290
msgid "Whether to fetch the current location or not"
msgstr "Определяет получать местоположение или нет"
#: data/org.gnome.shell.gschema.xml.in:305
#: data/org.gnome.shell.gschema.xml.in:297
msgid "Location"
msgstr "Местоположение"
#: data/org.gnome.shell.gschema.xml.in:306
#: data/org.gnome.shell.gschema.xml.in:298
msgid "The location for which to show a forecast"
msgstr "Местоположение для которого отображается прогноз погоды"
#: data/org.gnome.shell.gschema.xml.in:318
#: data/org.gnome.shell.gschema.xml.in:310
msgid "Attach modal dialog to the parent window"
msgstr "Прикреплять модальное диалоговое окно к родительскому окну"
#: data/org.gnome.shell.gschema.xml.in:319
#: data/org.gnome.shell.gschema.xml.in:311
#: data/org.gnome.shell.gschema.xml.in:320
#: data/org.gnome.shell.gschema.xml.in:328
#: data/org.gnome.shell.gschema.xml.in:336
#: data/org.gnome.shell.gschema.xml.in:344
#: data/org.gnome.shell.gschema.xml.in:352
msgid ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgstr ""
"Этот ключ переопределяет ключ в org.gnome.mutter при запуске GNOME Shell."
#: data/org.gnome.shell.gschema.xml.in:327
#: data/org.gnome.shell.gschema.xml.in:319
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr ""
"Включить автоматическое изменение размеров окон при перемещении окон к краям "
"экрана"
#: data/org.gnome.shell.gschema.xml.in:335
#: data/org.gnome.shell.gschema.xml.in:327
msgid "Workspaces are managed dynamically"
msgstr "Рабочие места управляются динамически"
#: data/org.gnome.shell.gschema.xml.in:343
#: data/org.gnome.shell.gschema.xml.in:335
msgid "Workspaces only on primary monitor"
msgstr "Рабочие места только на основном мониторе"
#: data/org.gnome.shell.gschema.xml.in:351
#: data/org.gnome.shell.gschema.xml.in:343
msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr "Задержка изменения фокуса в режиме мыши после остановки указателя"
@ -510,18 +504,18 @@ msgid "Visit extension homepage"
msgstr "Посетить домашнюю страницу расширения"
#: js/gdm/authPrompt.js:141 js/ui/audioDeviceSelection.js:61
#: js/ui/components/networkAgent.js:111 js/ui/components/polkitAgent.js:138
#: js/ui/endSessionDialog.js:438 js/ui/extensionDownloader.js:190
#: js/ui/components/networkAgent.js:110 js/ui/components/polkitAgent.js:138
#: js/ui/endSessionDialog.js:438 js/ui/extensionDownloader.js:228
#: js/ui/shellMountOperation.js:376 js/ui/shellMountOperation.js:386
#: js/ui/status/network.js:978 subprojects/extensions-app/js/main.js:183
msgid "Cancel"
msgstr "Отмена"
#. Cisco LEAP
#: js/gdm/authPrompt.js:285 js/ui/components/networkAgent.js:210
#: js/ui/components/networkAgent.js:226 js/ui/components/networkAgent.js:250
#: js/ui/components/networkAgent.js:271 js/ui/components/networkAgent.js:291
#: js/ui/components/networkAgent.js:301 js/ui/components/polkitAgent.js:275
#: js/gdm/authPrompt.js:285 js/ui/components/networkAgent.js:209
#: js/ui/components/networkAgent.js:225 js/ui/components/networkAgent.js:249
#: js/ui/components/networkAgent.js:270 js/ui/components/networkAgent.js:290
#: js/ui/components/networkAgent.js:300 js/ui/components/polkitAgent.js:275
#: js/ui/shellMountOperation.js:326
msgid "Password"
msgstr "Пароль"
@ -544,8 +538,8 @@ msgstr "(например, пользователь или %s)"
#. TTLS and PEAP are actually much more complicated, but this complication
#. is not visible here since we only care about phase2 authentication
#. (and don't even care of which one)
#: js/gdm/loginDialog.js:926 js/ui/components/networkAgent.js:246
#: js/ui/components/networkAgent.js:269 js/ui/components/networkAgent.js:287
#: js/gdm/loginDialog.js:926 js/ui/components/networkAgent.js:245
#: js/ui/components/networkAgent.js:268 js/ui/components/networkAgent.js:286
msgid "Username"
msgstr "Имя пользователя"
@ -650,26 +644,26 @@ msgctxt "search-result"
msgid "Lock Screen Rotation"
msgstr "Заблокировать ориентацию экрана"
#: js/misc/util.js:120
#: js/misc/util.js:121
msgid "Command not found"
msgstr "Команда не найдена"
#. Replace "Error invoking GLib.shell_parse_argv: " with
#. something nicer
#: js/misc/util.js:156
#: js/misc/util.js:157
msgid "Could not parse command:"
msgstr "Не удалось разобрать команду:"
#: js/misc/util.js:164
#: js/misc/util.js:165
#, javascript-format
msgid "Execution of “%s” failed:"
msgstr "Не удалось выполнить «%s»:"
#: js/misc/util.js:181
#: js/misc/util.js:182
msgid "Just now"
msgstr "Прямо сейчас"
#: js/misc/util.js:183
#: js/misc/util.js:184
#, javascript-format
msgid "%d minute ago"
msgid_plural "%d minutes ago"
@ -677,7 +671,7 @@ msgstr[0] "%d минута назад"
msgstr[1] "%d минуты назад"
msgstr[2] "%d минут назад"
#: js/misc/util.js:187
#: js/misc/util.js:188
#, javascript-format
msgid "%d hour ago"
msgid_plural "%d hours ago"
@ -685,11 +679,11 @@ msgstr[0] "%d час назад"
msgstr[1] "%d часа назад"
msgstr[2] "%d часов назад"
#: js/misc/util.js:191 js/ui/dateMenu.js:162
#: js/misc/util.js:192 js/ui/dateMenu.js:162
msgid "Yesterday"
msgstr "Вчера"
#: js/misc/util.js:193
#: js/misc/util.js:194
#, javascript-format
msgid "%d day ago"
msgid_plural "%d days ago"
@ -697,7 +691,7 @@ msgstr[0] "%d день назад"
msgstr[1] "%d дня назад"
msgstr[2] "%d дней назад"
#: js/misc/util.js:197
#: js/misc/util.js:198
#, javascript-format
msgid "%d week ago"
msgid_plural "%d weeks ago"
@ -705,7 +699,7 @@ msgstr[0] "%d неделя назад"
msgstr[1] "%d недели назад"
msgstr[2] "%d недель назад"
#: js/misc/util.js:201
#: js/misc/util.js:202
#, javascript-format
msgid "%d month ago"
msgid_plural "%d months ago"
@ -713,7 +707,7 @@ msgstr[0] "%d месяц назад"
msgstr[1] "%d месяца назад"
msgstr[2] "%d месяцев назад"
#: js/misc/util.js:204
#: js/misc/util.js:205
#, javascript-format
msgid "%d year ago"
msgid_plural "%d years ago"
@ -722,20 +716,20 @@ msgstr[1] "%d года назад"
msgstr[2] "%d лет назад"
#. Translators: Time in 24h format
#: js/misc/util.js:237
#: js/misc/util.js:238
msgid "%H%M"
msgstr "%H%M"
#. Translators: this is the word "Yesterday" followed by a
#. time string in 24h format. i.e. "Yesterday, 14:30"
#: js/misc/util.js:243
#: js/misc/util.js:244
#, no-c-format
msgid "Yesterday, %H%M"
msgstr "Вчера, %H%M"
#. Translators: this is the week day name followed by a time
#. string in 24h format. i.e. "Monday, 14:30"
#: js/misc/util.js:249
#: js/misc/util.js:250
#, no-c-format
msgid "%A, %H%M"
msgstr "%A, %H%M"
@ -743,7 +737,7 @@ msgstr "%A, %H%M"
#. Translators: this is the month name and day number
#. followed by a time string in 24h format.
#. i.e. "May 25, 14:30"
#: js/misc/util.js:255
#: js/misc/util.js:256
#, no-c-format
msgid "%B %-d, %H%M"
msgstr "%-d %B, %H%M"
@ -751,7 +745,7 @@ msgstr "%-d %B, %H%M"
#. Translators: this is the month name, day number, year
#. number followed by a time string in 24h format.
#. i.e. "May 25 2012, 14:30"
#: js/misc/util.js:261
#: js/misc/util.js:262
#, no-c-format
msgid "%B %-d %Y, %H%M"
msgstr "%-d %B %Y, %H%M"
@ -759,20 +753,20 @@ msgstr "%-d %B %Y, %H%M"
#. Show only the time if date is on today
#. eslint-disable-line no-lonely-if
#. Translators: Time in 12h format
#: js/misc/util.js:266
#: js/misc/util.js:267
msgid "%l%M %p"
msgstr "%-l%M%p"
#. Translators: this is the word "Yesterday" followed by a
#. time string in 12h format. i.e. "Yesterday, 2:30 pm"
#: js/misc/util.js:272
#: js/misc/util.js:273
#, no-c-format
msgid "Yesterday, %l%M %p"
msgstr "Вчера, %-l%M%p"
#. Translators: this is the week day name followed by a time
#. string in 12h format. i.e. "Monday, 2:30 pm"
#: js/misc/util.js:278
#: js/misc/util.js:279
#, no-c-format
msgid "%A, %l%M %p"
msgstr "%A, %-l%M%p"
@ -780,7 +774,7 @@ msgstr "%A, %-l%M%p"
#. Translators: this is the month name and day number
#. followed by a time string in 12h format.
#. i.e. "May 25, 2:30 pm"
#: js/misc/util.js:284
#: js/misc/util.js:285
#, no-c-format
msgid "%B %-d, %l%M %p"
msgstr "%-d %B, %l%M %p"
@ -789,17 +783,17 @@ msgstr "%-d %B, %l%M %p"
#. Translators: this is the month name, day number, year
#. number followed by a time string in 12h format.
#. i.e. "May 25 2012, 2:30 pm"
#: js/misc/util.js:290
#: js/misc/util.js:291
#, no-c-format
msgid "%B %-d %Y, %l%M %p"
msgstr "%-d %B %Y, %l%M %p"
#. TRANSLATORS: this is the title of the wifi captive portal login window
#: js/portalHelper/main.js:42
#: js/portalHelper/main.js:49
msgid "Hotspot Login"
msgstr "Авторизация в точке доступа"
#: js/portalHelper/main.js:88
#: js/portalHelper/main.js:95
msgid ""
"Your connection to this hotspot login is not secure. Passwords or other "
"information you enter on this page can be viewed by people nearby."
@ -1045,40 +1039,40 @@ msgstr "Установленная версия udisks не поддержива
msgid "Open with %s"
msgstr "Открыть с помощью %s"
#: js/ui/components/networkAgent.js:93
#: js/ui/components/networkAgent.js:92
msgid ""
"Alternatively you can connect by pushing the “WPS” button on your router."
msgstr ""
"В качестве альтернативы вы можете подключиться, нажав кнопку «WPS» на вашем "
"маршрутизаторе."
#: js/ui/components/networkAgent.js:105 js/ui/status/network.js:258
#: js/ui/components/networkAgent.js:104 js/ui/status/network.js:258
#: js/ui/status/network.js:349 js/ui/status/network.js:981
msgid "Connect"
msgstr "Соединиться"
#: js/ui/components/networkAgent.js:216
#: js/ui/components/networkAgent.js:215
msgid "Key"
msgstr "Ключ"
#: js/ui/components/networkAgent.js:254 js/ui/components/networkAgent.js:277
#: js/ui/components/networkAgent.js:253 js/ui/components/networkAgent.js:276
msgid "Private key password"
msgstr "Пароль личного ключа"
#: js/ui/components/networkAgent.js:275
#: js/ui/components/networkAgent.js:274
msgid "Identity"
msgstr "Идентичность"
#: js/ui/components/networkAgent.js:289
#: js/ui/components/networkAgent.js:288
msgid "Service"
msgstr "Служба"
#: js/ui/components/networkAgent.js:318 js/ui/components/networkAgent.js:346
#: js/ui/components/networkAgent.js:317 js/ui/components/networkAgent.js:345
#: js/ui/components/networkAgent.js:679 js/ui/components/networkAgent.js:700
msgid "Authentication required"
msgstr "Требуется подтверждение подлинности"
#: js/ui/components/networkAgent.js:319 js/ui/components/networkAgent.js:680
#: js/ui/components/networkAgent.js:318 js/ui/components/networkAgent.js:680
#, javascript-format
msgid ""
"Passwords or encryption keys are required to access the wireless network "
@ -1086,31 +1080,31 @@ msgid ""
msgstr ""
"Для доступа к беспроводной сети «%s» требуется пароль или ключ шифрования."
#: js/ui/components/networkAgent.js:323 js/ui/components/networkAgent.js:684
#: js/ui/components/networkAgent.js:322 js/ui/components/networkAgent.js:684
msgid "Wired 802.1X authentication"
msgstr "Аутентификация Wired 802.1X"
#: js/ui/components/networkAgent.js:325
#: js/ui/components/networkAgent.js:324
msgid "Network name"
msgstr "Название сети"
#: js/ui/components/networkAgent.js:330 js/ui/components/networkAgent.js:688
#: js/ui/components/networkAgent.js:329 js/ui/components/networkAgent.js:688
msgid "DSL authentication"
msgstr "Аутентификация DSL"
#: js/ui/components/networkAgent.js:337 js/ui/components/networkAgent.js:693
#: js/ui/components/networkAgent.js:336 js/ui/components/networkAgent.js:693
msgid "PIN code required"
msgstr "Требуется PIN-код"
#: js/ui/components/networkAgent.js:338 js/ui/components/networkAgent.js:694
#: js/ui/components/networkAgent.js:337 js/ui/components/networkAgent.js:694
msgid "PIN code is needed for the mobile broadband device"
msgstr "Для устройства мобильной связи требуется PIN-код"
#: js/ui/components/networkAgent.js:339
#: js/ui/components/networkAgent.js:338
msgid "PIN"
msgstr "PIN"
#: js/ui/components/networkAgent.js:347 js/ui/components/networkAgent.js:685
#: js/ui/components/networkAgent.js:346 js/ui/components/networkAgent.js:685
#: js/ui/components/networkAgent.js:689 js/ui/components/networkAgent.js:701
#: js/ui/components/networkAgent.js:705
#, javascript-format
@ -1409,24 +1403,24 @@ msgstr "%s (удалённый)"
msgid "%s (console)"
msgstr "%s (консоль)"
#: js/ui/extensionDownloader.js:194
#: js/ui/extensionDownloader.js:232
msgid "Install"
msgstr "Установить"
#: js/ui/extensionDownloader.js:200
#: js/ui/extensionDownloader.js:238
msgid "Install Extension"
msgstr "Установить расширение"
#: js/ui/extensionDownloader.js:201
#: js/ui/extensionDownloader.js:239
#, javascript-format
msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "Загрузить и установить расширение «%s» из extensions.gnome.org?"
#: js/ui/extensionSystem.js:253
#: js/ui/extensionSystem.js:252
msgid "Extension Updates Available"
msgstr "Доступны обновления расширений"
#: js/ui/extensionSystem.js:254
#: js/ui/extensionSystem.js:253
msgid "Extension updates are ready to be installed."
msgstr "Обновления расширений готовы к установке."
@ -1523,7 +1517,7 @@ msgstr "Выключить"
msgid "Leave Off"
msgstr "Оставить выключенными"
#: js/ui/keyboard.js:227
#: js/ui/keyboard.js:226
msgid "Region & Language Settings"
msgstr "Настройки языка и региона"
@ -1576,11 +1570,11 @@ msgstr "Показать код"
msgid "Web Page"
msgstr "Веб-страница"
#: js/ui/main.js:294
#: js/ui/main.js:290
msgid "Logged in as a privileged user"
msgstr "Авторизован как привилегированный пользователь"
#: js/ui/main.js:295
#: js/ui/main.js:291
msgid ""
"Running a session as a privileged user should be avoided for security "
"reasons. If possible, you should log in as a normal user."
@ -1589,15 +1583,15 @@ msgstr ""
"привилегированного пользователя. Если это возможно, вам следует войти от "
"имени обычного пользователя."
#: js/ui/main.js:344
#: js/ui/main.js:340
msgid "Screen Lock disabled"
msgstr "Блокировка экрана отключена"
#: js/ui/main.js:345
#: js/ui/main.js:341
msgid "Screen Locking requires the GNOME display manager."
msgstr "Для блокировки экрана требуется GNOME display manager."
#: js/ui/messageTray.js:1440
#: js/ui/messageTray.js:1443
msgid "System Information"
msgstr "Системная информация"
@ -1631,47 +1625,47 @@ msgstr "Отменить"
msgid "Overview"
msgstr "Обзор"
#: js/ui/padOsd.js:96
#: js/ui/padOsd.js:95
msgid "New shortcut…"
msgstr "Создать комбинацию клавиш…"
#: js/ui/padOsd.js:143
#: js/ui/padOsd.js:142
msgid "Application defined"
msgstr "Определено приложением"
#: js/ui/padOsd.js:144
#: js/ui/padOsd.js:143
msgid "Show on-screen help"
msgstr "Показывать экранную справку"
#: js/ui/padOsd.js:145
#: js/ui/padOsd.js:144
msgid "Switch monitor"
msgstr "Переключить монитор"
#: js/ui/padOsd.js:146
#: js/ui/padOsd.js:145
msgid "Assign keystroke"
msgstr "Назначение клавишь"
#: js/ui/padOsd.js:212
#: js/ui/padOsd.js:211
msgid "Done"
msgstr "Готово"
#: js/ui/padOsd.js:718
#: js/ui/padOsd.js:716
msgid "Edit…"
msgstr "Правка…"
#: js/ui/padOsd.js:760 js/ui/padOsd.js:877
#: js/ui/padOsd.js:758 js/ui/padOsd.js:875
msgid "None"
msgstr "Нет"
#: js/ui/padOsd.js:831
#: js/ui/padOsd.js:829
msgid "Press a button to configure"
msgstr "Нажмите кнопку для настройки"
#: js/ui/padOsd.js:832
#: js/ui/padOsd.js:830
msgid "Press Esc to exit"
msgstr "Нажмите Esc для выхода"
#: js/ui/padOsd.js:835
#: js/ui/padOsd.js:833
msgid "Press any key to exit"
msgstr "Нажмите любую клавишу для выхода"
@ -1681,12 +1675,12 @@ msgstr "Нажмите любую клавишу для выхода"
msgid "Activities"
msgstr "Обзор"
#: js/ui/panel.js:542
#: js/ui/panel.js:556
msgctxt "System menu in the top bar"
msgid "System"
msgstr "Система"
#: js/ui/panel.js:658
#: js/ui/panel.js:674
msgid "Top Bar"
msgstr "Верхняя панель"
@ -1725,7 +1719,7 @@ msgstr "Не удалось заблокировать"
msgid "Lock was blocked by an application"
msgstr "Блокировке помешало приложение"
#: js/ui/screenshot.js:141
#: js/ui/screenshot.js:155
msgid "Screenshot taken"
msgstr "Сделан снимок экрана"
@ -2832,6 +2826,7 @@ msgstr "Необходимо указать UUID, имя и описание"
#: subprojects/extensions-tool/src/command-enable.c:46
#: subprojects/extensions-tool/src/command-info.c:50
#: subprojects/extensions-tool/src/command-list.c:64
#: subprojects/extensions-tool/src/main.c:146
msgid "Failed to connect to GNOME Shell\n"
msgstr "Невозможно подключиться к GNOME Shell\n"
@ -2848,7 +2843,7 @@ msgstr "Выключить расширение"
#: subprojects/extensions-tool/src/command-disable.c:119
#: subprojects/extensions-tool/src/command-enable.c:119
#: subprojects/extensions-tool/src/command-info.c:103
#: subprojects/extensions-tool/src/command-prefs.c:97
#: subprojects/extensions-tool/src/command-prefs.c:105
#: subprojects/extensions-tool/src/command-reset.c:76
#: subprojects/extensions-tool/src/command-uninstall.c:104
msgid "No UUID given"
@ -2857,7 +2852,7 @@ msgstr "UUID не указан"
#: subprojects/extensions-tool/src/command-disable.c:124
#: subprojects/extensions-tool/src/command-enable.c:124
#: subprojects/extensions-tool/src/command-info.c:108
#: subprojects/extensions-tool/src/command-prefs.c:102
#: subprojects/extensions-tool/src/command-prefs.c:110
#: subprojects/extensions-tool/src/command-reset.c:81
#: subprojects/extensions-tool/src/command-uninstall.c:109
msgid "More than one UUID given"
@ -2987,7 +2982,12 @@ msgstr "Указано больше одной исходной директор
msgid "Extension “%s” doesn't have preferences\n"
msgstr "Расширение «%s» не имеет настроек\n"
#: subprojects/extensions-tool/src/command-prefs.c:79
#: subprojects/extensions-tool/src/command-prefs.c:62
#, c-format
msgid "Failed to open prefs for extension “%s”: %s\n"
msgstr "Не удалось открыть настройки для расширения \"%s\": %s\n"
#: subprojects/extensions-tool/src/command-prefs.c:87
msgid "Opens extension preferences"
msgstr "Открыть параметры расширения"
@ -3012,10 +3012,6 @@ msgstr "Удалить расширение"
msgid "Do not print error messages"
msgstr "Не показывать сообщения об ошибках"
#: subprojects/extensions-tool/src/main.c:146
msgid "Failed to connect to GNOME Shell"
msgstr "Невозможно подключиться к GNOME Shell"
#: subprojects/extensions-tool/src/main.c:244
msgid "Path"
msgstr "Путь"
@ -3148,192 +3144,3 @@ msgstr[2] "%u входов"
msgid "System Sounds"
msgstr "Системные звуки"
#~ msgid "Minimize"
#~ msgstr "Свернуть"
#~ msgid "Unmaximize"
#~ msgstr "Вернуть прежний размер"
#~ msgid "App Picker View"
#~ msgstr "Экран выбора приложений"
#~ msgid "Index of the currently selected view in the application picker."
#~ msgstr "Индекс текущего выбранного экрана приложений."
#~ msgid "Frequently used applications will appear here"
#~ msgstr "Здесь появляются часто используемые приложения"
#~ msgid "Frequent"
#~ msgstr "Популярные"
#~ msgid "All"
#~ msgstr "Все"
#~ msgctxt "calendar heading"
#~ msgid "%A, %B %-d"
#~ msgstr "%A, %-d %B"
#~ msgctxt "calendar heading"
#~ msgid "%A, %B %-d, %Y"
#~ msgstr "%A, %-d %B %Y"
#~ msgid "Copy Error"
#~ msgstr "Скопировать ошибку"
#~ msgid "Off"
#~ msgstr "Выключено"
#~ msgid "On"
#~ msgstr "Включено"
# tweens — что-то типа анимации
#~ msgid ""
#~ "Keybinding that pauses and resumes all running tweens, for debugging "
#~ "purposes"
#~ msgstr ""
#~ "Комбинация клавиш, которая приостанавливает и возобновляет все запущенные "
#~ "анимации (для отладки)"
#~ msgid "Which keyboard to use"
#~ msgstr "Какую клавиатуру использовать"
#~ msgid "The type of keyboard to use."
#~ msgstr "Тип используемой клавиатуры."
#~ msgid "network-workgroup"
#~ msgstr "network-workgroup"
#~ msgid "Browse in Software"
#~ msgstr "Просмотреть в Центре приложений"
#~ msgid "Next"
#~ msgstr "Далее"
#~ msgctxt "button"
#~ msgid "Sign In"
#~ msgstr "Войти"
#~ msgid "Password:"
#~ msgstr "Пароль:"
#~ msgid "Type again:"
#~ msgstr "Введите ещё раз:"
#~ msgid "Password: "
#~ msgstr "Пароль: "
#~ msgid "Authentication required by wireless network"
#~ msgstr "Беспроводная сеть требует аутентификацию"
#~ msgid "Mobile broadband network password"
#~ msgstr "Пароль сети мобильной связи"
#~ msgid "toggle-switch-us"
#~ msgstr "toggle-switch-intl"
#~ msgid "%A, %B %d"
#~ msgstr "%A, %-d %B"
#~ msgid "%d new message"
#~ msgid_plural "%d new messages"
#~ msgstr[0] "%d новое сообщение"
#~ msgstr[1] "%d новых сообщения"
#~ msgstr[2] "%d новых сообщений"
#~ msgid "%d new notification"
#~ msgid_plural "%d new notifications"
#~ msgstr[0] "%d новое уведомление"
#~ msgstr[1] "%d новых уведомления"
#~ msgstr[2] "%d новых уведомлений"
#~ msgid "Account Settings"
#~ msgstr "Параметры учётных записей"
#~ msgid "Orientation Lock"
#~ msgstr "Заблокировать ориентацию"
#~ msgid "evolution"
#~ msgstr "evolution"
#~ msgid "There was an error loading the preferences dialog for %s:"
#~ msgstr "Возникла ошибка загрузки диалогового окна параметров для %s:"
#~ msgid "%s all day."
#~ msgstr "%s весь день."
#~ msgid "%s, then %s later."
#~ msgstr "%s, затем позднее %s."
#~ msgid "%s, then %s, followed by %s later."
#~ msgstr "%s, затем %s, позже %s."
#~ msgid "Feels like %s."
#~ msgstr "Ощущается как %s."
#~ msgctxt "search-result"
#~ msgid "Power off"
#~ msgstr "Выключение"
#~ msgctxt "search-result"
#~ msgid "Log out"
#~ msgstr "Завершение сеанса"
#~ msgctxt "search-result"
#~ msgid "Switch user"
#~ msgstr "Смена пользователя"
#~ msgid "Hide tray"
#~ msgstr "Скрыть лоток"
#~ msgid "Status Icons"
#~ msgstr "Значки состояния"
#~ msgid "Web Authentication Redirect"
#~ msgstr "Перенаправление для проверки подлинности"
#~ msgid "Events"
#~ msgstr "События"
#~ msgid "Notifications"
#~ msgstr "Уведомления"
#~ msgid "Clear section"
#~ msgstr "Очистить секцию"
#~ msgid "Media"
#~ msgstr "Медиа"
#~ msgid "Not In Use"
#~ msgstr "Не используется"
#~ msgid "%d x %d"
#~ msgstr "%d x %d"
#~ msgid "Show the week date in the calendar"
#~ msgstr "Показывать в календаре нумерацию недель"
#~ msgid "If true, display the ISO week date in the calendar."
#~ msgstr ""
#~ "Если включено, календарь будет показывать нумерацию недель в формате ISO."
#~ msgid "Use as Internet connection"
#~ msgstr "Использовать как Интернет-соединение"
#~ msgid "%s is requesting access to your location."
#~ msgstr "%s запрашивает доступ к вашему положению."
#~ msgid "GNOME Shell (wayland compositor)"
#~ msgstr "GNOME Shell (компоновщик wayland)"
#~ msgid "%d Connected Device"
#~ msgid_plural "%d Connected Devices"
#~ msgstr[0] "Подключено %d устройство"
#~ msgstr[1] "Подключено %d устройства"
#~ msgstr[2] "Подключено %d устройств"
# Источник Бесперебойного Питания
#~ msgid "UPS"
#~ msgstr "ИБП"
#~ msgid "Battery"
#~ msgstr "Батарея"

275
po/sk.po
View File

@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
"POT-Creation-Date: 2021-11-06 13:27+0000\n"
"PO-Revision-Date: 2021-11-06 15:10+0100\n"
"POT-Creation-Date: 2021-08-17 23:56+0000\n"
"PO-Revision-Date: 2021-08-31 15:49+0200\n"
"Last-Translator: Dušan Kazik <prescott66@gmail.com>\n"
"Language-Team: Slovak <kde-i18n-doc@kde.org>\n"
"Language: sk\n"
@ -268,11 +268,23 @@ msgstr ""
"veľké číslo bude predstavovať verzie, ktoré zatiaľ neexistujú. Toto veľké "
"číslo je možné použiť na efektívne deaktivovanie dialógového okna."
#: data/org.gnome.shell.gschema.xml.in:133
#: data/org.gnome.shell.gschema.xml.in:109
msgid "Enable introspection API"
msgstr "Povoliť sebapozorovacie API"
#: data/org.gnome.shell.gschema.xml.in:110
msgid ""
"Enables a D-Bus API that allows to introspect the application state of the "
"shell."
msgstr ""
"Povolí D-Bus API, ktoré umožní sebapozorovanie stavu aplikácie prostredia "
"shell."
#: data/org.gnome.shell.gschema.xml.in:141
msgid "Layout of the app picker"
msgstr "Rozloženie nástroja na výber aplikácie"
#: data/org.gnome.shell.gschema.xml.in:134
#: data/org.gnome.shell.gschema.xml.in:142
msgid ""
"Layout of the app picker. Each entry in the array is a page. Pages are "
"stored in the order they appear in GNOME Shell. Each page contains an "
@ -285,119 +297,119 @@ msgstr ""
"sú nasledovné hodnoty uložené ako „údaje“: • “„pozícia“: pozícia ikony "
"aplikácie na stránke."
#: data/org.gnome.shell.gschema.xml.in:149
#: data/org.gnome.shell.gschema.xml.in:157
msgid "Keybinding to open the application menu"
msgstr "Klávesová skratka na otvorenie ponuky aplikácií"
#: data/org.gnome.shell.gschema.xml.in:150
#: data/org.gnome.shell.gschema.xml.in:158
msgid "Keybinding to open the application menu."
msgstr "Klávesová skratka na otvorenie ponuky aplikácií."
#: data/org.gnome.shell.gschema.xml.in:156
#: data/org.gnome.shell.gschema.xml.in:163
#: data/org.gnome.shell.gschema.xml.in:164
#: data/org.gnome.shell.gschema.xml.in:171
msgid "Keybinding to shift between overview states"
msgstr "Kombinácia kláves na prepínanie medzi stavmi prehľadu"
#: data/org.gnome.shell.gschema.xml.in:157
#: data/org.gnome.shell.gschema.xml.in:165
msgid "Keybinding to shift between session, window picker and app grid"
msgstr ""
"Klávesová skratka na prepínanie medzi sedením, výberom okna a mriežkou "
"aplikácií"
#: data/org.gnome.shell.gschema.xml.in:164
#: data/org.gnome.shell.gschema.xml.in:172
msgid "Keybinding to shift between app grid, window picker and session"
msgstr ""
"Klávesová skratka slúži na prepínanie medzi mriežkou aplikácií, výberom okna "
"a sedením"
#: data/org.gnome.shell.gschema.xml.in:170
#: data/org.gnome.shell.gschema.xml.in:178
msgid "Keybinding to open the “Show Applications” view"
msgstr "Klávesová skratka na otvorenie pohľadu „Zobraziť aplikácie“"
#: data/org.gnome.shell.gschema.xml.in:171
#: data/org.gnome.shell.gschema.xml.in:179
msgid ""
"Keybinding to open the “Show Applications” view of the Activities Overview."
msgstr ""
"Klávesová skratka na otvorenie pohľadu „Zobraziť aplikácie“ v prehľade "
"aktivít."
#: data/org.gnome.shell.gschema.xml.in:178
#: data/org.gnome.shell.gschema.xml.in:186
msgid "Keybinding to open the overview"
msgstr "Klávesová skratka na otvorenie prehľadu"
#: data/org.gnome.shell.gschema.xml.in:179
#: data/org.gnome.shell.gschema.xml.in:187
msgid "Keybinding to open the Activities Overview."
msgstr "Klávesová skratka na otvorenie prehľadu aktivít."
#: data/org.gnome.shell.gschema.xml.in:185
#: data/org.gnome.shell.gschema.xml.in:193
msgid "Keybinding to toggle the visibility of the notification list"
msgstr "Klávesová skratka na prepnutie viditeľnosti zoznamu s oznámeniami"
#: data/org.gnome.shell.gschema.xml.in:186
#: data/org.gnome.shell.gschema.xml.in:194
msgid "Keybinding to toggle the visibility of the notification list."
msgstr "Klávesová skratka na prepnutie viditeľnosti zoznamu s oznámeniami."
#: data/org.gnome.shell.gschema.xml.in:192
#: data/org.gnome.shell.gschema.xml.in:200
msgid "Keybinding to focus the active notification"
msgstr "Klávesová skratka na zameranie aktívnych oznámení"
#: data/org.gnome.shell.gschema.xml.in:193
#: data/org.gnome.shell.gschema.xml.in:201
msgid "Keybinding to focus the active notification."
msgstr "Klávesová skratka, s ktorou sa zamerá na aktívne oznámenia."
# tooltip
#: data/org.gnome.shell.gschema.xml.in:199
#: data/org.gnome.shell.gschema.xml.in:207
msgid "Switch to application 1"
msgstr "Prepnúť na aplikáciu č. 1"
# tooltip
#: data/org.gnome.shell.gschema.xml.in:203
#: data/org.gnome.shell.gschema.xml.in:211
msgid "Switch to application 2"
msgstr "Prepnúť na aplikáciu č. 2"
# tooltip
#: data/org.gnome.shell.gschema.xml.in:207
#: data/org.gnome.shell.gschema.xml.in:215
msgid "Switch to application 3"
msgstr "Prepnúť na aplikáciu č. 3"
# tooltip
#: data/org.gnome.shell.gschema.xml.in:211
#: data/org.gnome.shell.gschema.xml.in:219
msgid "Switch to application 4"
msgstr "Prepnúť na aplikáciu č. 4"
# tooltip
#: data/org.gnome.shell.gschema.xml.in:215
#: data/org.gnome.shell.gschema.xml.in:223
msgid "Switch to application 5"
msgstr "Prepnúť na aplikáciu č. 5"
# tooltip
#: data/org.gnome.shell.gschema.xml.in:219
#: data/org.gnome.shell.gschema.xml.in:227
msgid "Switch to application 6"
msgstr "Prepnúť na aplikáciu č. 6"
# tooltip
#: data/org.gnome.shell.gschema.xml.in:223
#: data/org.gnome.shell.gschema.xml.in:231
msgid "Switch to application 7"
msgstr "Prepnúť na aplikáciu č. 7"
# tooltip
#: data/org.gnome.shell.gschema.xml.in:227
#: data/org.gnome.shell.gschema.xml.in:235
msgid "Switch to application 8"
msgstr "Prepnúť na aplikáciu č. 8"
# tooltip
#: data/org.gnome.shell.gschema.xml.in:231
#: data/org.gnome.shell.gschema.xml.in:239
msgid "Switch to application 9"
msgstr "Prepnúť na aplikáciu č. 9"
# summary
#: data/org.gnome.shell.gschema.xml.in:240
#: data/org.gnome.shell.gschema.xml.in:267
#: data/org.gnome.shell.gschema.xml.in:248
#: data/org.gnome.shell.gschema.xml.in:275
msgid "Limit switcher to current workspace."
msgstr "Obmedziť prepínač na aktuálny pracovný priestor."
# desc
#: data/org.gnome.shell.gschema.xml.in:241
#: data/org.gnome.shell.gschema.xml.in:249
msgid ""
"If true, only applications that have windows on the current workspace are "
"shown in the switcher. Otherwise, all applications are included."
@ -405,11 +417,11 @@ msgstr ""
"Ak je true, iba aplikácie, ktoré majú okná na aktuálnom pracovnom priestore "
"budú zobrazené v prepínači. Inak budú zahrnuté všetky aplikácie."
#: data/org.gnome.shell.gschema.xml.in:258
#: data/org.gnome.shell.gschema.xml.in:266
msgid "The application icon mode."
msgstr "Režim ikonizácie aplikácií."
#: data/org.gnome.shell.gschema.xml.in:259
#: data/org.gnome.shell.gschema.xml.in:267
msgid ""
"Configures how the windows are shown in the switcher. Valid possibilities "
"are “thumbnail-only” (shows a thumbnail of the window), “app-icon-"
@ -420,7 +432,7 @@ msgstr ""
"ikonu aplikácie) alebo „both“ (zobrazí oboje)."
# desc
#: data/org.gnome.shell.gschema.xml.in:268
#: data/org.gnome.shell.gschema.xml.in:276
msgid ""
"If true, only windows from the current workspace are shown in the switcher. "
"Otherwise, all windows are included."
@ -428,59 +440,59 @@ msgstr ""
"Ak je true, iba okná z aktuálneho pracovného priestoru budú zobrazené v "
"prepínači. Inak budú zahrnuté všetky okná."
#: data/org.gnome.shell.gschema.xml.in:278
#: data/org.gnome.shell.gschema.xml.in:286
msgid "Locations"
msgstr "Umiestnenia"
#: data/org.gnome.shell.gschema.xml.in:279
#: data/org.gnome.shell.gschema.xml.in:287
msgid "The locations to show in world clocks"
msgstr "Zobrazené umiestnenia v svetových časoch"
#: data/org.gnome.shell.gschema.xml.in:289
#: data/org.gnome.shell.gschema.xml.in:297
msgid "Automatic location"
msgstr "Automatické umiestnenie"
#: data/org.gnome.shell.gschema.xml.in:290
#: data/org.gnome.shell.gschema.xml.in:298
msgid "Whether to fetch the current location or not"
msgstr "Určuje, či sa má získať aktuálne umiestnenie alebo nie"
#: data/org.gnome.shell.gschema.xml.in:297
#: data/org.gnome.shell.gschema.xml.in:305
msgid "Location"
msgstr "Umiestnenie"
#: data/org.gnome.shell.gschema.xml.in:298
#: data/org.gnome.shell.gschema.xml.in:306
msgid "The location for which to show a forecast"
msgstr "Umiestnenie, pre ktoré zobraziť predpoveď"
#: data/org.gnome.shell.gschema.xml.in:310
#: data/org.gnome.shell.gschema.xml.in:318
msgid "Attach modal dialog to the parent window"
msgstr "Pripojiť modálne dialógové okno k rodičovskému oknu"
#: data/org.gnome.shell.gschema.xml.in:311
#: data/org.gnome.shell.gschema.xml.in:320
#: data/org.gnome.shell.gschema.xml.in:319
#: data/org.gnome.shell.gschema.xml.in:328
#: data/org.gnome.shell.gschema.xml.in:336
#: data/org.gnome.shell.gschema.xml.in:344
#: data/org.gnome.shell.gschema.xml.in:352
msgid ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgstr ""
"Tento kľúč preváži kľúč v org.gnome.mutter po spustení Shellu prostredia "
"GNOME."
#: data/org.gnome.shell.gschema.xml.in:319
#: data/org.gnome.shell.gschema.xml.in:327
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr "Povoliť natiahnutie k okraju pri pustení okien na okrajoch obrazovky"
#: data/org.gnome.shell.gschema.xml.in:327
#: data/org.gnome.shell.gschema.xml.in:335
msgid "Workspaces are managed dynamically"
msgstr "Pracovné priestory sú spravované dynamicky"
#: data/org.gnome.shell.gschema.xml.in:335
#: data/org.gnome.shell.gschema.xml.in:343
msgid "Workspaces only on primary monitor"
msgstr "Pracovné priestory sú iba na primárnom monitore"
# summary
#: data/org.gnome.shell.gschema.xml.in:343
#: data/org.gnome.shell.gschema.xml.in:351
msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr ""
"Oneskoriť pohyb zamerania v režime myši, až kým sa ukazovateľ nezastaví"
@ -516,18 +528,18 @@ msgid "Visit extension homepage"
msgstr "Navštíviť domovskú stránku rozšírenia"
#: js/gdm/authPrompt.js:141 js/ui/audioDeviceSelection.js:61
#: js/ui/components/networkAgent.js:110 js/ui/components/polkitAgent.js:138
#: js/ui/endSessionDialog.js:438 js/ui/extensionDownloader.js:228
#: js/ui/components/networkAgent.js:111 js/ui/components/polkitAgent.js:138
#: js/ui/endSessionDialog.js:438 js/ui/extensionDownloader.js:190
#: js/ui/shellMountOperation.js:376 js/ui/shellMountOperation.js:386
#: js/ui/status/network.js:978 subprojects/extensions-app/js/main.js:183
msgid "Cancel"
msgstr "Zrušiť"
#. Cisco LEAP
#: js/gdm/authPrompt.js:285 js/ui/components/networkAgent.js:209
#: js/ui/components/networkAgent.js:225 js/ui/components/networkAgent.js:249
#: js/ui/components/networkAgent.js:270 js/ui/components/networkAgent.js:290
#: js/ui/components/networkAgent.js:300 js/ui/components/polkitAgent.js:275
#: js/gdm/authPrompt.js:285 js/ui/components/networkAgent.js:210
#: js/ui/components/networkAgent.js:226 js/ui/components/networkAgent.js:250
#: js/ui/components/networkAgent.js:271 js/ui/components/networkAgent.js:291
#: js/ui/components/networkAgent.js:301 js/ui/components/polkitAgent.js:275
#: js/ui/shellMountOperation.js:326
msgid "Password"
msgstr "Heslo"
@ -552,8 +564,8 @@ msgstr "(napr., používateľ alebo %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:926 js/ui/components/networkAgent.js:245
#: js/ui/components/networkAgent.js:268 js/ui/components/networkAgent.js:286
#: js/gdm/loginDialog.js:926 js/ui/components/networkAgent.js:246
#: js/ui/components/networkAgent.js:269 js/ui/components/networkAgent.js:287
msgid "Username"
msgstr "Používateľské meno"
@ -661,26 +673,26 @@ msgctxt "search-result"
msgid "Lock Screen Rotation"
msgstr "Uzamknúť otočenie obrazovky"
#: js/misc/util.js:121
#: js/misc/util.js:120
msgid "Command not found"
msgstr "Príkaz nebol nájdený"
#. Replace "Error invoking GLib.shell_parse_argv: " with
#. something nicer
#: js/misc/util.js:157
#: js/misc/util.js:156
msgid "Could not parse command:"
msgstr "Nepodarilo sa analyzovať príkaz:"
#: js/misc/util.js:165
#: js/misc/util.js:164
#, javascript-format
msgid "Execution of “%s” failed:"
msgstr "Spustenie „%s“ zlyhalo:"
#: js/misc/util.js:182
#: js/misc/util.js:181
msgid "Just now"
msgstr "Práve teraz"
#: js/misc/util.js:184
#: js/misc/util.js:183
#, javascript-format
msgid "%d minute ago"
msgid_plural "%d minutes ago"
@ -688,7 +700,7 @@ msgstr[0] "Pred %d minútami"
msgstr[1] "Pred %d minútou"
msgstr[2] "Pred %d minútami"
#: js/misc/util.js:188
#: js/misc/util.js:187
#, javascript-format
msgid "%d hour ago"
msgid_plural "%d hours ago"
@ -696,11 +708,11 @@ msgstr[0] "Pred %d hodinami"
msgstr[1] "Pred %d hodinou"
msgstr[2] "Pred %d hodinami"
#: js/misc/util.js:192 js/ui/dateMenu.js:162
#: js/misc/util.js:191 js/ui/dateMenu.js:162
msgid "Yesterday"
msgstr "Včera"
#: js/misc/util.js:194
#: js/misc/util.js:193
#, javascript-format
msgid "%d day ago"
msgid_plural "%d days ago"
@ -708,7 +720,7 @@ msgstr[0] "Pred %d dňami"
msgstr[1] "Pred %d dňom"
msgstr[2] "Pred %d dňami"
#: js/misc/util.js:198
#: js/misc/util.js:197
#, javascript-format
msgid "%d week ago"
msgid_plural "%d weeks ago"
@ -716,7 +728,7 @@ msgstr[0] "Pred %d týždňami"
msgstr[1] "Pred %d týždňom"
msgstr[2] "Pred %d týždňami"
#: js/misc/util.js:202
#: js/misc/util.js:201
#, javascript-format
msgid "%d month ago"
msgid_plural "%d months ago"
@ -724,7 +736,7 @@ msgstr[0] "Pred %d mesiacmi"
msgstr[1] "Pred %d mesiacom"
msgstr[2] "Pred %d mesiacmi"
#: js/misc/util.js:205
#: js/misc/util.js:204
#, javascript-format
msgid "%d year ago"
msgid_plural "%d years ago"
@ -733,20 +745,20 @@ msgstr[1] "Pred %d rokom"
msgstr[2] "Pred %d rokmi"
#. Translators: Time in 24h format
#: js/misc/util.js:238
#: js/misc/util.js:237
msgid "%H%M"
msgstr "%H:%M"
#. Translators: this is the word "Yesterday" followed by a
#. time string in 24h format. i.e. "Yesterday, 14:30"
#: js/misc/util.js:244
#: js/misc/util.js:243
#, no-c-format
msgid "Yesterday, %H%M"
msgstr "Včera o %H:%M"
#. Translators: this is the week day name followed by a time
#. string in 24h format. i.e. "Monday, 14:30"
#: js/misc/util.js:250
#: js/misc/util.js:249
#, no-c-format
msgid "%A, %H%M"
msgstr "%A, %H:%M"
@ -754,7 +766,7 @@ msgstr "%A, %H:%M"
#. Translators: this is the month name and day number
#. followed by a time string in 24h format.
#. i.e. "May 25, 14:30"
#: js/misc/util.js:256
#: js/misc/util.js:255
#, no-c-format
msgid "%B %-d, %H%M"
msgstr "%d. %B, %H:%M"
@ -762,7 +774,7 @@ msgstr "%d. %B, %H:%M"
#. Translators: this is the month name, day number, year
#. number followed by a time string in 24h format.
#. i.e. "May 25 2012, 14:30"
#: js/misc/util.js:262
#: js/misc/util.js:261
#, no-c-format
msgid "%B %-d %Y, %H%M"
msgstr "%d. %B %Y, %H:%M"
@ -770,13 +782,13 @@ msgstr "%d. %B %Y, %H:%M"
#. Show only the time if date is on today
#. eslint-disable-line no-lonely-if
#. Translators: Time in 12h format
#: js/misc/util.js:267
#: js/misc/util.js:266
msgid "%l%M %p"
msgstr "%l:%M %p"
#. Translators: this is the word "Yesterday" followed by a
#. time string in 12h format. i.e. "Yesterday, 2:30 pm"
#: js/misc/util.js:273
#: js/misc/util.js:272
#, no-c-format
msgid "Yesterday, %l%M %p"
msgstr "Včera, %l:%M %p"
@ -786,7 +798,7 @@ msgstr "Včera, %l:%M %p"
# v ostatnych retazcoch je pouzite %e, tak to bude asi OK
#. Translators: this is the week day name followed by a time
#. string in 12h format. i.e. "Monday, 2:30 pm"
#: js/misc/util.js:279
#: js/misc/util.js:278
#, no-c-format
msgid "%A, %l%M %p"
msgstr "%A, %l:%M %p"
@ -794,7 +806,7 @@ msgstr "%A, %l:%M %p"
#. Translators: this is the month name and day number
#. followed by a time string in 12h format.
#. i.e. "May 25, 2:30 pm"
#: js/misc/util.js:285
#: js/misc/util.js:284
#, no-c-format
msgid "%B %-d, %l%M %p"
msgstr "%d. %B, %l:%M %p"
@ -802,17 +814,17 @@ msgstr "%d. %B, %l:%M %p"
#. Translators: this is the month name, day number, year
#. number followed by a time string in 12h format.
#. i.e. "May 25 2012, 2:30 pm"
#: js/misc/util.js:291
#: js/misc/util.js:290
#, no-c-format
msgid "%B %-d %Y, %l%M %p"
msgstr "%d. %B %Y, %l:%M %p"
#. TRANSLATORS: this is the title of the wifi captive portal login window
#: js/portalHelper/main.js:49
#: js/portalHelper/main.js:42
msgid "Hotspot Login"
msgstr "Prihlásenie do aktívneho bodu"
#: js/portalHelper/main.js:95
#: js/portalHelper/main.js:88
msgid ""
"Your connection to this hotspot login is not secure. Passwords or other "
"information you enter on this page can be viewed by people nearby."
@ -1062,39 +1074,39 @@ msgstr "Nainštalovaná verzia programu udisks nepodporuje nastavenie PIM"
msgid "Open with %s"
msgstr "Otvoriť pomocou aplikácie %s"
#: js/ui/components/networkAgent.js:92
#: js/ui/components/networkAgent.js:93
msgid ""
"Alternatively you can connect by pushing the “WPS” button on your router."
msgstr ""
"Pripojiť sa môžete taktiež stlačením tlačidla „WPS“ na vašom smerovači."
#: js/ui/components/networkAgent.js:104 js/ui/status/network.js:258
#: js/ui/components/networkAgent.js:105 js/ui/status/network.js:258
#: js/ui/status/network.js:349 js/ui/status/network.js:981
msgid "Connect"
msgstr "Pripojiť"
#: js/ui/components/networkAgent.js:215
#: js/ui/components/networkAgent.js:216
msgid "Key"
msgstr "Kľúč"
#: js/ui/components/networkAgent.js:253 js/ui/components/networkAgent.js:276
#: js/ui/components/networkAgent.js:254 js/ui/components/networkAgent.js:277
msgid "Private key password"
msgstr "Heslo k súkromnému kľúču"
#: js/ui/components/networkAgent.js:274
#: js/ui/components/networkAgent.js:275
msgid "Identity"
msgstr "Identita"
#: js/ui/components/networkAgent.js:288
#: js/ui/components/networkAgent.js:289
msgid "Service"
msgstr "Služba"
#: js/ui/components/networkAgent.js:317 js/ui/components/networkAgent.js:345
#: js/ui/components/networkAgent.js:318 js/ui/components/networkAgent.js:346
#: js/ui/components/networkAgent.js:679 js/ui/components/networkAgent.js:700
msgid "Authentication required"
msgstr "Požaduje sa overenie totožnosti"
#: js/ui/components/networkAgent.js:318 js/ui/components/networkAgent.js:680
#: js/ui/components/networkAgent.js:319 js/ui/components/networkAgent.js:680
#, javascript-format
msgid ""
"Passwords or encryption keys are required to access the wireless network "
@ -1103,31 +1115,31 @@ msgstr ""
"Na prístup do bezdrôtovej siete „%s“ sú vyžadované heslá alebo šifrovacie "
"kľúče."
#: js/ui/components/networkAgent.js:322 js/ui/components/networkAgent.js:684
#: js/ui/components/networkAgent.js:323 js/ui/components/networkAgent.js:684
msgid "Wired 802.1X authentication"
msgstr "Overenie totožnosti k drôtovej sieti 802.1X"
#: js/ui/components/networkAgent.js:324
#: js/ui/components/networkAgent.js:325
msgid "Network name"
msgstr "Názov siete"
#: js/ui/components/networkAgent.js:329 js/ui/components/networkAgent.js:688
#: js/ui/components/networkAgent.js:330 js/ui/components/networkAgent.js:688
msgid "DSL authentication"
msgstr "Overenie totožnosti k DSL"
#: js/ui/components/networkAgent.js:336 js/ui/components/networkAgent.js:693
#: js/ui/components/networkAgent.js:337 js/ui/components/networkAgent.js:693
msgid "PIN code required"
msgstr "Požaduje sa kód PIN"
#: js/ui/components/networkAgent.js:337 js/ui/components/networkAgent.js:694
#: js/ui/components/networkAgent.js:338 js/ui/components/networkAgent.js:694
msgid "PIN code is needed for the mobile broadband device"
msgstr "Pre zariadenie mobilnej širokopásmovej siete je potrebný kód PIN"
#: js/ui/components/networkAgent.js:338
#: js/ui/components/networkAgent.js:339
msgid "PIN"
msgstr "PIN"
#: js/ui/components/networkAgent.js:346 js/ui/components/networkAgent.js:685
#: js/ui/components/networkAgent.js:347 js/ui/components/networkAgent.js:685
#: js/ui/components/networkAgent.js:689 js/ui/components/networkAgent.js:701
#: js/ui/components/networkAgent.js:705
#, javascript-format
@ -1425,25 +1437,25 @@ msgstr "%s (vzdialená relácia)"
msgid "%s (console)"
msgstr "%s (konzola)"
#: js/ui/extensionDownloader.js:232
#: js/ui/extensionDownloader.js:194
msgid "Install"
msgstr "Inštalovať"
# dialog title
#: js/ui/extensionDownloader.js:238
#: js/ui/extensionDownloader.js:200
msgid "Install Extension"
msgstr "Inštalácia rozšírenia"
#: js/ui/extensionDownloader.js:239
#: js/ui/extensionDownloader.js:201
#, javascript-format
msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "Prevziať a nainštalovať rozšírenie „%s“ z extensions.gnome.org?"
#: js/ui/extensionSystem.js:252
#: js/ui/extensionSystem.js:253
msgid "Extension Updates Available"
msgstr "Sú dostupné aktualizácie rozšírení"
#: js/ui/extensionSystem.js:253
#: js/ui/extensionSystem.js:254
msgid "Extension updates are ready to be installed."
msgstr "Aktualizácie rozšírení sú pripravené na inštaláciu."
@ -1543,7 +1555,7 @@ msgstr "Vypnúť"
msgid "Leave Off"
msgstr "Ponechať vypnuté"
#: js/ui/keyboard.js:226
#: js/ui/keyboard.js:227
msgid "Region & Language Settings"
msgstr "Nastavenia oblasti a jazyka"
@ -1597,11 +1609,11 @@ msgstr "Zobraziť zdroj"
msgid "Web Page"
msgstr "Webová stránka"
#: js/ui/main.js:290
#: js/ui/main.js:294
msgid "Logged in as a privileged user"
msgstr "Prihlásený ako privilegovaný používateľ"
#: js/ui/main.js:291
#: js/ui/main.js:295
msgid ""
"Running a session as a privileged user should be avoided for security "
"reasons. If possible, you should log in as a normal user."
@ -1610,15 +1622,15 @@ msgstr ""
"bezpečnostných dôvodov zabrániť. Ak je to možné, mali by ste sa prihlásiť "
"ako normálny používateľ."
#: js/ui/main.js:340
#: js/ui/main.js:344
msgid "Screen Lock disabled"
msgstr "Uzamknutie obrazovky je zakázané"
#: js/ui/main.js:341
#: js/ui/main.js:345
msgid "Screen Locking requires the GNOME display manager."
msgstr "Uzamykanie obrazovky vyžaduje správcu displejov prostredia GNOME."
#: js/ui/messageTray.js:1443
#: js/ui/messageTray.js:1440
msgid "System Information"
msgstr "Informácie o systéme"
@ -1653,47 +1665,47 @@ msgstr "Vrátiť"
msgid "Overview"
msgstr "Prehľad"
#: js/ui/padOsd.js:95
#: js/ui/padOsd.js:96
msgid "New shortcut…"
msgstr "Nová skratka…"
#: js/ui/padOsd.js:142
#: js/ui/padOsd.js:143
msgid "Application defined"
msgstr "Definované aplikáciou"
#: js/ui/padOsd.js:143
#: js/ui/padOsd.js:144
msgid "Show on-screen help"
msgstr "Zobraziť pomocníka na obrazovke"
#: js/ui/padOsd.js:144
#: js/ui/padOsd.js:145
msgid "Switch monitor"
msgstr "Prepnúť monitor"
#: js/ui/padOsd.js:145
#: js/ui/padOsd.js:146
msgid "Assign keystroke"
msgstr "Priradiť klávesu"
#: js/ui/padOsd.js:211
#: js/ui/padOsd.js:212
msgid "Done"
msgstr "Dokončiť"
#: js/ui/padOsd.js:716
#: js/ui/padOsd.js:718
msgid "Edit…"
msgstr "Upraviť…"
#: js/ui/padOsd.js:758 js/ui/padOsd.js:875
#: js/ui/padOsd.js:760 js/ui/padOsd.js:877
msgid "None"
msgstr "Žiadne"
#: js/ui/padOsd.js:829
#: js/ui/padOsd.js:831
msgid "Press a button to configure"
msgstr "Stlačte kláves na spustenie konfigurácie"
#: js/ui/padOsd.js:830
#: js/ui/padOsd.js:832
msgid "Press Esc to exit"
msgstr "Stlačte kláves Esc na skončenie"
#: js/ui/padOsd.js:833
#: js/ui/padOsd.js:835
msgid "Press any key to exit"
msgstr "Stlačte akýkoľvek kláves na skončenie"
@ -1703,12 +1715,12 @@ msgstr "Stlačte akýkoľvek kláves na skončenie"
msgid "Activities"
msgstr "Aktivity"
#: js/ui/panel.js:556
#: js/ui/panel.js:542
msgctxt "System menu in the top bar"
msgid "System"
msgstr "Systém"
#: js/ui/panel.js:674
#: js/ui/panel.js:658
msgid "Top Bar"
msgstr "Horná lišta"
@ -1748,7 +1760,7 @@ msgstr "Nepodarilo sa uzamknúť obrazovku"
msgid "Lock was blocked by an application"
msgstr "Uzamknutie bolo zablokované aplikáciou"
#: js/ui/screenshot.js:155
#: js/ui/screenshot.js:141
msgid "Screenshot taken"
msgstr "Snímka obrazovky bola zachytená"
@ -2819,7 +2831,6 @@ msgstr "Vlastnosť UUID, názov a popis sú povinné"
#: subprojects/extensions-tool/src/command-enable.c:46
#: subprojects/extensions-tool/src/command-info.c:50
#: subprojects/extensions-tool/src/command-list.c:64
#: subprojects/extensions-tool/src/main.c:146
msgid "Failed to connect to GNOME Shell\n"
msgstr "Zlyhalo pripojenie k Shellu prostredia GNOME\n"
@ -2837,7 +2848,7 @@ msgstr "Zakázať rozšírenie"
#: subprojects/extensions-tool/src/command-disable.c:119
#: subprojects/extensions-tool/src/command-enable.c:119
#: subprojects/extensions-tool/src/command-info.c:103
#: subprojects/extensions-tool/src/command-prefs.c:105
#: subprojects/extensions-tool/src/command-prefs.c:97
#: subprojects/extensions-tool/src/command-reset.c:76
#: subprojects/extensions-tool/src/command-uninstall.c:104
msgid "No UUID given"
@ -2846,7 +2857,7 @@ msgstr "Nebol zadaný žiadny identifikátor UUID"
#: subprojects/extensions-tool/src/command-disable.c:124
#: subprojects/extensions-tool/src/command-enable.c:124
#: subprojects/extensions-tool/src/command-info.c:108
#: subprojects/extensions-tool/src/command-prefs.c:110
#: subprojects/extensions-tool/src/command-prefs.c:102
#: subprojects/extensions-tool/src/command-reset.c:81
#: subprojects/extensions-tool/src/command-uninstall.c:109
msgid "More than one UUID given"
@ -2979,12 +2990,7 @@ msgstr "Bol určený viac ako jeden zdrojový adresár"
msgid "Extension “%s” doesn't have preferences\n"
msgstr "Rozšírenie „%s“ neobsahuje predvoľby\n"
#: subprojects/extensions-tool/src/command-prefs.c:62
#, c-format
msgid "Failed to open prefs for extension “%s”: %s\n"
msgstr "Zlyhalo otvorenie predvolieb rozšírenia „%s“: %s\n"
#: subprojects/extensions-tool/src/command-prefs.c:87
#: subprojects/extensions-tool/src/command-prefs.c:79
msgid "Opens extension preferences"
msgstr "Otvorí predvoľby rozšírenia"
@ -3012,6 +3018,10 @@ msgstr "Odinštalovať rozšírenie"
msgid "Do not print error messages"
msgstr "Nevypíše chybové správy"
#: subprojects/extensions-tool/src/main.c:146
msgid "Failed to connect to GNOME Shell"
msgstr "Zlyhalo pripojenie k Shellu prostredia GNOME"
#: subprojects/extensions-tool/src/main.c:244
msgid "Path"
msgstr "Cesta"
@ -3149,19 +3159,6 @@ msgstr[2] "%u vstupov"
msgid "System Sounds"
msgstr "Systémové zvuky"
#~ msgid "Enable introspection API"
#~ msgstr "Povoliť sebapozorovacie API"
#~ msgid ""
#~ "Enables a D-Bus API that allows to introspect the application state of "
#~ "the shell."
#~ msgstr ""
#~ "Povolí D-Bus API, ktoré umožní sebapozorovanie stavu aplikácie prostredia "
#~ "shell."
#~ msgid "Failed to connect to GNOME Shell"
#~ msgstr "Zlyhalo pripojenie k Shellu prostredia GNOME"
#~ msgid "Minimize"
#~ msgstr "Minimalizovať"

267
po/sl.po
View File

@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
"POT-Creation-Date: 2021-08-29 17:33+0000\n"
"PO-Revision-Date: 2021-08-30 21:12+0200\n"
"POT-Creation-Date: 2021-11-02 16:32+0000\n"
"PO-Revision-Date: 2021-11-02 17:49+0100\n"
"Last-Translator: Matej Urbančič <mateju@src.gnome.org>\n"
"Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n"
"Language: sl\n"
@ -19,7 +19,7 @@ msgstr ""
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n"
"%100==4 ? 3 : 0);\n"
"X-Poedit-SourceCharset: utf-8\n"
"X-Generator: Poedit 2.4.2\n"
"X-Generator: Poedit 3.0\n"
#: data/50-gnome-shell-launchers.xml:6
msgid "Launchers"
@ -251,21 +251,11 @@ msgstr ""
"različico in velike številke različice, ki še ne obstajajo. S temi velikimi "
"vrednostmi je mogoče preprečiti prikaz tega okna."
#: data/org.gnome.shell.gschema.xml.in:109
msgid "Enable introspection API"
msgstr "Omogoči API nadzora"
#: data/org.gnome.shell.gschema.xml.in:110
msgid ""
"Enables a D-Bus API that allows to introspect the application state of the "
"shell."
msgstr "Omogoči API sistema D-Bus, ki mogoča nadzor stanja programa lupine."
#: data/org.gnome.shell.gschema.xml.in:141
#: data/org.gnome.shell.gschema.xml.in:133
msgid "Layout of the app picker"
msgstr "Pogled izbirnika programov"
#: data/org.gnome.shell.gschema.xml.in:142
#: data/org.gnome.shell.gschema.xml.in:134
msgid ""
"Layout of the app picker. Each entry in the array is a page. Pages are "
"stored in the order they appear in GNOME Shell. Each page contains an "
@ -277,105 +267,105 @@ msgstr ""
"»ID programa« → »podatki«. Trenutno so kot podatki shranjeni:: • »položaj«: "
"položaj ikone programa na strani"
#: data/org.gnome.shell.gschema.xml.in:157
#: data/org.gnome.shell.gschema.xml.in:149
msgid "Keybinding to open the application menu"
msgstr "Tipkovna bližnjica, ki odpre meni programov"
#: data/org.gnome.shell.gschema.xml.in:158
#: data/org.gnome.shell.gschema.xml.in:150
msgid "Keybinding to open the application menu."
msgstr "Tipkovna bližnjica, ki odpre meni programov."
#: data/org.gnome.shell.gschema.xml.in:164
#: data/org.gnome.shell.gschema.xml.in:171
#: data/org.gnome.shell.gschema.xml.in:156
#: data/org.gnome.shell.gschema.xml.in:163
msgid "Keybinding to shift between overview states"
msgstr "Tipkovna bližnjica za preklop med stanji pregleda"
#: data/org.gnome.shell.gschema.xml.in:165
#: data/org.gnome.shell.gschema.xml.in:157
msgid "Keybinding to shift between session, window picker and app grid"
msgstr ""
"Tipkovna bližnjica za preklop med sejo, izbirniki oken in programsko mrežo"
#: data/org.gnome.shell.gschema.xml.in:172
#: data/org.gnome.shell.gschema.xml.in:164
msgid "Keybinding to shift between app grid, window picker and session"
msgstr ""
"Tipkovna bližnjica za preklop med programsko mrežo, izbirniki oken in sejo"
#: data/org.gnome.shell.gschema.xml.in:178
#: data/org.gnome.shell.gschema.xml.in:170
msgid "Keybinding to open the “Show Applications” view"
msgstr "Tipkovna bližnjica, ki odpre pogled »Pokaži programe«"
#: data/org.gnome.shell.gschema.xml.in:179
#: data/org.gnome.shell.gschema.xml.in:171
msgid ""
"Keybinding to open the “Show Applications” view of the Activities Overview."
msgstr ""
"Tipkovna bližnjica, ki odpre pogled »Pokaži programe« v pregledu dejavnosti."
#: data/org.gnome.shell.gschema.xml.in:186
#: data/org.gnome.shell.gschema.xml.in:178
msgid "Keybinding to open the overview"
msgstr "Tipkovna bližnjica, ki odpre pogled pregleda"
#: data/org.gnome.shell.gschema.xml.in:187
#: data/org.gnome.shell.gschema.xml.in:179
msgid "Keybinding to open the Activities Overview."
msgstr "Tipkovna bližnjica, ki odpre pogled pregleda dejavnosti."
#: data/org.gnome.shell.gschema.xml.in:193
#: data/org.gnome.shell.gschema.xml.in:185
msgid "Keybinding to toggle the visibility of the notification list"
msgstr "Tipkovna bližnjica za preklop vidnosti seznama obvestil"
#: data/org.gnome.shell.gschema.xml.in:194
#: data/org.gnome.shell.gschema.xml.in:186
msgid "Keybinding to toggle the visibility of the notification list."
msgstr "Tipkovna bližnjica za preklop vidnosti seznama obvestil."
#: data/org.gnome.shell.gschema.xml.in:200
#: data/org.gnome.shell.gschema.xml.in:192
msgid "Keybinding to focus the active notification"
msgstr "Tipkovna bližnjica za prikaz dejavnega obvestila"
#: data/org.gnome.shell.gschema.xml.in:201
#: data/org.gnome.shell.gschema.xml.in:193
msgid "Keybinding to focus the active notification."
msgstr "Tipkovna bližnjica za prikaz dejavnega obvestila."
#: data/org.gnome.shell.gschema.xml.in:207
#: data/org.gnome.shell.gschema.xml.in:199
msgid "Switch to application 1"
msgstr "Preklopi na program 1"
#: data/org.gnome.shell.gschema.xml.in:211
#: data/org.gnome.shell.gschema.xml.in:203
msgid "Switch to application 2"
msgstr "Preklopi na program 2"
#: data/org.gnome.shell.gschema.xml.in:215
#: data/org.gnome.shell.gschema.xml.in:207
msgid "Switch to application 3"
msgstr "Preklopi na program 3"
#: data/org.gnome.shell.gschema.xml.in:219
#: data/org.gnome.shell.gschema.xml.in:211
msgid "Switch to application 4"
msgstr "Preklopi na program 4"
#: data/org.gnome.shell.gschema.xml.in:223
#: data/org.gnome.shell.gschema.xml.in:215
msgid "Switch to application 5"
msgstr "Preklopi na program 5"
#: data/org.gnome.shell.gschema.xml.in:227
#: data/org.gnome.shell.gschema.xml.in:219
msgid "Switch to application 6"
msgstr "Preklopi na program 6"
#: data/org.gnome.shell.gschema.xml.in:231
#: data/org.gnome.shell.gschema.xml.in:223
msgid "Switch to application 7"
msgstr "Preklopi na program 7"
#: data/org.gnome.shell.gschema.xml.in:235
#: data/org.gnome.shell.gschema.xml.in:227
msgid "Switch to application 8"
msgstr "Preklopi na program 8"
#: data/org.gnome.shell.gschema.xml.in:239
#: data/org.gnome.shell.gschema.xml.in:231
msgid "Switch to application 9"
msgstr "Preklopi na program 9"
#: data/org.gnome.shell.gschema.xml.in:248
#: data/org.gnome.shell.gschema.xml.in:275
#: data/org.gnome.shell.gschema.xml.in:240
#: data/org.gnome.shell.gschema.xml.in:267
msgid "Limit switcher to current workspace."
msgstr "Omeji preklopnik na trenutno delovno površino."
#: data/org.gnome.shell.gschema.xml.in:249
#: data/org.gnome.shell.gschema.xml.in:241
msgid ""
"If true, only applications that have windows on the current workspace are "
"shown in the switcher. Otherwise, all applications are included."
@ -384,11 +374,11 @@ msgstr ""
"v izbrani delovni površini v preklopniku. V nasprotnem primeru so prikazana "
"vsa okna."
#: data/org.gnome.shell.gschema.xml.in:266
#: data/org.gnome.shell.gschema.xml.in:258
msgid "The application icon mode."
msgstr "Ikonski način programa."
#: data/org.gnome.shell.gschema.xml.in:267
#: data/org.gnome.shell.gschema.xml.in:259
msgid ""
"Configures how the windows are shown in the switcher. Valid possibilities "
"are “thumbnail-only” (shows a thumbnail of the window), “app-icon-"
@ -398,7 +388,7 @@ msgstr ""
"sličice»« (pokaže le sličice oken), »le ikona« (pokaže ikono programa) in pa "
"možnost »oboje«."
#: data/org.gnome.shell.gschema.xml.in:276
#: data/org.gnome.shell.gschema.xml.in:268
msgid ""
"If true, only windows from the current workspace are shown in the switcher. "
"Otherwise, all windows are included."
@ -406,57 +396,57 @@ msgstr ""
"Izbrana možnost določa, da bodo v trenutnem pogledu prikazana le okna v "
"preklopniku. V nasprotnem primeru so prikazana vsa okna."
#: data/org.gnome.shell.gschema.xml.in:286
#: data/org.gnome.shell.gschema.xml.in:278
msgid "Locations"
msgstr "Mesta"
#: data/org.gnome.shell.gschema.xml.in:287
#: data/org.gnome.shell.gschema.xml.in:279
msgid "The locations to show in world clocks"
msgstr "Mesta, za katere naj bodo prikazani svetovni časi"
#: data/org.gnome.shell.gschema.xml.in:297
#: data/org.gnome.shell.gschema.xml.in:289
msgid "Automatic location"
msgstr "Samodejno določanje mesta"
#: data/org.gnome.shell.gschema.xml.in:298
#: data/org.gnome.shell.gschema.xml.in:290
msgid "Whether to fetch the current location or not"
msgstr "Ali naj program pridobi trenutno mesto ali ne"
#: data/org.gnome.shell.gschema.xml.in:305
#: data/org.gnome.shell.gschema.xml.in:297
msgid "Location"
msgstr "Trenutno mesto"
#: data/org.gnome.shell.gschema.xml.in:306
#: data/org.gnome.shell.gschema.xml.in:298
msgid "The location for which to show a forecast"
msgstr "Mesto, za katero naj bo pokazana napoved"
#: data/org.gnome.shell.gschema.xml.in:318
#: data/org.gnome.shell.gschema.xml.in:310
msgid "Attach modal dialog to the parent window"
msgstr "Pripni modalno pogovorno okno na glavno okno"
#: data/org.gnome.shell.gschema.xml.in:319
#: data/org.gnome.shell.gschema.xml.in:311
#: data/org.gnome.shell.gschema.xml.in:320
#: data/org.gnome.shell.gschema.xml.in:328
#: data/org.gnome.shell.gschema.xml.in:336
#: data/org.gnome.shell.gschema.xml.in:344
#: data/org.gnome.shell.gschema.xml.in:352
msgid ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgstr ""
"Ključ prepiše vrednost v org.gnome.mutter med zaganjanjem lupine GNOME."
#: data/org.gnome.shell.gschema.xml.in:327
#: data/org.gnome.shell.gschema.xml.in:319
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr "Omogoči utripanje črte med spuščanjem okna na robove zaslona"
#: data/org.gnome.shell.gschema.xml.in:335
#: data/org.gnome.shell.gschema.xml.in:327
msgid "Workspaces are managed dynamically"
msgstr "Delovne površine se obravnavajo dinamično"
#: data/org.gnome.shell.gschema.xml.in:343
#: data/org.gnome.shell.gschema.xml.in:335
msgid "Workspaces only on primary monitor"
msgstr "Delovne površine so le na osnovnem zaslonu"
#: data/org.gnome.shell.gschema.xml.in:351
#: data/org.gnome.shell.gschema.xml.in:343
msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr ""
"Zamik žarišča se v načinu miške spreminja, dokler se kazalnik ne neha "
@ -493,18 +483,18 @@ msgid "Visit extension homepage"
msgstr "Odpri spletno stran razširitev"
#: js/gdm/authPrompt.js:141 js/ui/audioDeviceSelection.js:61
#: js/ui/components/networkAgent.js:111 js/ui/components/polkitAgent.js:138
#: js/ui/endSessionDialog.js:438 js/ui/extensionDownloader.js:230
#: js/ui/components/networkAgent.js:110 js/ui/components/polkitAgent.js:138
#: js/ui/endSessionDialog.js:438 js/ui/extensionDownloader.js:228
#: js/ui/shellMountOperation.js:376 js/ui/shellMountOperation.js:386
#: js/ui/status/network.js:978 subprojects/extensions-app/js/main.js:183
msgid "Cancel"
msgstr "Prekliči"
#. Cisco LEAP
#: js/gdm/authPrompt.js:285 js/ui/components/networkAgent.js:210
#: js/ui/components/networkAgent.js:226 js/ui/components/networkAgent.js:250
#: js/ui/components/networkAgent.js:271 js/ui/components/networkAgent.js:291
#: js/ui/components/networkAgent.js:301 js/ui/components/polkitAgent.js:275
#: js/gdm/authPrompt.js:285 js/ui/components/networkAgent.js:209
#: js/ui/components/networkAgent.js:225 js/ui/components/networkAgent.js:249
#: js/ui/components/networkAgent.js:270 js/ui/components/networkAgent.js:290
#: js/ui/components/networkAgent.js:300 js/ui/components/polkitAgent.js:275
#: js/ui/shellMountOperation.js:326
msgid "Password"
msgstr "Geslo"
@ -527,8 +517,8 @@ msgstr "(na primer, uporabnika ali %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:926 js/ui/components/networkAgent.js:246
#: js/ui/components/networkAgent.js:269 js/ui/components/networkAgent.js:287
#: js/gdm/loginDialog.js:926 js/ui/components/networkAgent.js:245
#: js/ui/components/networkAgent.js:268 js/ui/components/networkAgent.js:286
msgid "Username"
msgstr "Uporabniško ime"
@ -634,26 +624,26 @@ msgctxt "search-result"
msgid "Lock Screen Rotation"
msgstr "Vrtenje zaklepanja zaslona"
#: js/misc/util.js:120
#: js/misc/util.js:121
msgid "Command not found"
msgstr "Ukaz ni mogoče najti"
#. Replace "Error invoking GLib.shell_parse_argv: " with
#. something nicer
#: js/misc/util.js:156
#: js/misc/util.js:157
msgid "Could not parse command:"
msgstr "Ukaza ni mogoče razčleniti:"
#: js/misc/util.js:164
#: js/misc/util.js:165
#, javascript-format
msgid "Execution of “%s” failed:"
msgstr "Izvedba »%s« je spodletela:"
#: js/misc/util.js:181
#: js/misc/util.js:182
msgid "Just now"
msgstr "Ravnokar"
#: js/misc/util.js:183
#: js/misc/util.js:184
#, javascript-format
msgid "%d minute ago"
msgid_plural "%d minutes ago"
@ -662,7 +652,7 @@ msgstr[1] "Pred %d minuto"
msgstr[2] "Pred %d minutama"
msgstr[3] "Pred %d minutami"
#: js/misc/util.js:187
#: js/misc/util.js:188
#, javascript-format
msgid "%d hour ago"
msgid_plural "%d hours ago"
@ -671,11 +661,11 @@ msgstr[1] "Pred %d uro"
msgstr[2] "Pred %d urama"
msgstr[3] "Pred %d urami"
#: js/misc/util.js:191 js/ui/dateMenu.js:162
#: js/misc/util.js:192 js/ui/dateMenu.js:162
msgid "Yesterday"
msgstr "Včeraj"
#: js/misc/util.js:193
#: js/misc/util.js:194
#, javascript-format
msgid "%d day ago"
msgid_plural "%d days ago"
@ -684,7 +674,7 @@ msgstr[1] "Pred %d dnevom"
msgstr[2] "Pred %d dnevoma"
msgstr[3] "Pred %d dnevi"
#: js/misc/util.js:197
#: js/misc/util.js:198
#, javascript-format
msgid "%d week ago"
msgid_plural "%d weeks ago"
@ -693,7 +683,7 @@ msgstr[1] "Pred %d tednom"
msgstr[2] "Pred %d tednoma"
msgstr[3] "Pred %d tedni"
#: js/misc/util.js:201
#: js/misc/util.js:202
#, javascript-format
msgid "%d month ago"
msgid_plural "%d months ago"
@ -702,7 +692,7 @@ msgstr[1] "Pred %d mesecem"
msgstr[2] "Pred %d mesecema"
msgstr[3] "Pred %d meseci"
#: js/misc/util.js:204
#: js/misc/util.js:205
#, javascript-format
msgid "%d year ago"
msgid_plural "%d years ago"
@ -712,20 +702,20 @@ msgstr[2] "Pred %d letoma"
msgstr[3] "Pred %d leti"
#. Translators: Time in 24h format
#: js/misc/util.js:237
#: js/misc/util.js:238
msgid "%H%M"
msgstr "%H%M"
#. Translators: this is the word "Yesterday" followed by a
#. time string in 24h format. i.e. "Yesterday, 14:30"
#: js/misc/util.js:243
#: js/misc/util.js:244
#, no-c-format
msgid "Yesterday, %H%M"
msgstr "Včeraj, %H:%M"
#. Translators: this is the week day name followed by a time
#. string in 24h format. i.e. "Monday, 14:30"
#: js/misc/util.js:249
#: js/misc/util.js:250
#, no-c-format
msgid "%A, %H%M"
msgstr "%A, %H%M"
@ -733,7 +723,7 @@ msgstr "%A, %H%M"
#. Translators: this is the month name and day number
#. followed by a time string in 24h format.
#. i.e. "May 25, 14:30"
#: js/misc/util.js:255
#: js/misc/util.js:256
#, no-c-format
msgid "%B %-d, %H%M"
msgstr "%d %B, %H%M"
@ -741,7 +731,7 @@ msgstr "%d %B, %H%M"
#. Translators: this is the month name, day number, year
#. number followed by a time string in 24h format.
#. i.e. "May 25 2012, 14:30"
#: js/misc/util.js:261
#: js/misc/util.js:262
#, no-c-format
msgid "%B %-d %Y, %H%M"
msgstr "%d. %B %Y, %H%M"
@ -749,20 +739,20 @@ msgstr "%d. %B %Y, %H%M"
#. Show only the time if date is on today
#. eslint-disable-line no-lonely-if
#. Translators: Time in 12h format
#: js/misc/util.js:266
#: js/misc/util.js:267
msgid "%l%M %p"
msgstr "%l%M %p"
#. Translators: this is the word "Yesterday" followed by a
#. time string in 12h format. i.e. "Yesterday, 2:30 pm"
#: js/misc/util.js:272
#: js/misc/util.js:273
#, no-c-format
msgid "Yesterday, %l%M %p"
msgstr "Včeraj, %l%M %p"
#. Translators: this is the week day name followed by a time
#. string in 12h format. i.e. "Monday, 2:30 pm"
#: js/misc/util.js:278
#: js/misc/util.js:279
#, no-c-format
msgid "%A, %l%M %p"
msgstr "%A, %l%M %p"
@ -770,7 +760,7 @@ msgstr "%A, %l%M %p"
#. Translators: this is the month name and day number
#. followed by a time string in 12h format.
#. i.e. "May 25, 2:30 pm"
#: js/misc/util.js:284
#: js/misc/util.js:285
#, no-c-format
msgid "%B %-d, %l%M %p"
msgstr "%d. %B, %l%M %p"
@ -778,7 +768,7 @@ msgstr "%d. %B, %l%M %p"
#. Translators: this is the month name, day number, year
#. number followed by a time string in 12h format.
#. i.e. "May 25 2012, 2:30 pm"
#: js/misc/util.js:290
#: js/misc/util.js:291
#, no-c-format
msgid "%B %-d %Y, %l%M %p"
msgstr "%d. %B %Y, %l%M %p"
@ -1033,38 +1023,38 @@ msgstr "Nameščena različica udisks ne podpira nastavitev PIM"
msgid "Open with %s"
msgstr "Odpri s programom %s"
#: js/ui/components/networkAgent.js:93
#: js/ui/components/networkAgent.js:92
msgid ""
"Alternatively you can connect by pushing the “WPS” button on your router."
msgstr "Vzpostavitev povezave je mogoča tudi z gumbom »WPS« na usmerjevalniku."
#: js/ui/components/networkAgent.js:105 js/ui/status/network.js:258
#: js/ui/components/networkAgent.js:104 js/ui/status/network.js:258
#: js/ui/status/network.js:349 js/ui/status/network.js:981
msgid "Connect"
msgstr "Poveži"
#: js/ui/components/networkAgent.js:216
#: js/ui/components/networkAgent.js:215
msgid "Key"
msgstr "Ključ"
#: js/ui/components/networkAgent.js:254 js/ui/components/networkAgent.js:277
#: js/ui/components/networkAgent.js:253 js/ui/components/networkAgent.js:276
msgid "Private key password"
msgstr "Geslo zasebnega ključa"
#: js/ui/components/networkAgent.js:275
#: js/ui/components/networkAgent.js:274
msgid "Identity"
msgstr "Istovetnost"
#: js/ui/components/networkAgent.js:289
#: js/ui/components/networkAgent.js:288
msgid "Service"
msgstr "Storitev"
#: js/ui/components/networkAgent.js:318 js/ui/components/networkAgent.js:346
#: js/ui/components/networkAgent.js:317 js/ui/components/networkAgent.js:345
#: js/ui/components/networkAgent.js:679 js/ui/components/networkAgent.js:700
msgid "Authentication required"
msgstr "Zahtevana je overitev"
#: js/ui/components/networkAgent.js:319 js/ui/components/networkAgent.js:680
#: js/ui/components/networkAgent.js:318 js/ui/components/networkAgent.js:680
#, javascript-format
msgid ""
"Passwords or encryption keys are required to access the wireless network "
@ -1073,31 +1063,31 @@ msgstr ""
"Za povezavo v brezžično omrežje »%s« je zahtevano geslo oziroma šifrirni "
"ključ."
#: js/ui/components/networkAgent.js:323 js/ui/components/networkAgent.js:684
#: js/ui/components/networkAgent.js:322 js/ui/components/networkAgent.js:684
msgid "Wired 802.1X authentication"
msgstr "Žična overitev 802.1X"
#: js/ui/components/networkAgent.js:325
#: js/ui/components/networkAgent.js:324
msgid "Network name"
msgstr "Naziv omrežja"
#: js/ui/components/networkAgent.js:330 js/ui/components/networkAgent.js:688
#: js/ui/components/networkAgent.js:329 js/ui/components/networkAgent.js:688
msgid "DSL authentication"
msgstr "Overitev DSL"
#: js/ui/components/networkAgent.js:337 js/ui/components/networkAgent.js:693
#: js/ui/components/networkAgent.js:336 js/ui/components/networkAgent.js:693
msgid "PIN code required"
msgstr "Zahtevana koda PIN"
#: js/ui/components/networkAgent.js:338 js/ui/components/networkAgent.js:694
#: js/ui/components/networkAgent.js:337 js/ui/components/networkAgent.js:694
msgid "PIN code is needed for the mobile broadband device"
msgstr "Za napravo mobilnega širokopasovnega dostopa je zahtevana koda PIN."
#: js/ui/components/networkAgent.js:339
#: js/ui/components/networkAgent.js:338
msgid "PIN"
msgstr "Koda PIN"
#: js/ui/components/networkAgent.js:347 js/ui/components/networkAgent.js:685
#: js/ui/components/networkAgent.js:346 js/ui/components/networkAgent.js:685
#: js/ui/components/networkAgent.js:689 js/ui/components/networkAgent.js:701
#: js/ui/components/networkAgent.js:705
#, javascript-format
@ -1401,24 +1391,24 @@ msgstr "%s (oddaljeno)"
msgid "%s (console)"
msgstr "%s (konzola)"
#: js/ui/extensionDownloader.js:234
#: js/ui/extensionDownloader.js:232
msgid "Install"
msgstr "Namesti"
#: js/ui/extensionDownloader.js:240
#: js/ui/extensionDownloader.js:238
msgid "Install Extension"
msgstr "Namesti razširitev"
#: js/ui/extensionDownloader.js:241
#: js/ui/extensionDownloader.js:239
#, javascript-format
msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "Ali želite prejeti in namestiti »%s« prek extensions.gnome.org?"
#: js/ui/extensionSystem.js:253
#: js/ui/extensionSystem.js:252
msgid "Extension Updates Available"
msgstr "Na voljo so posodobitve razširitev"
#: js/ui/extensionSystem.js:254
#: js/ui/extensionSystem.js:253
msgid "Extension updates are ready to be installed."
msgstr "Posodobitve razširitev so pripravljene na namestitev."
@ -1513,7 +1503,7 @@ msgstr "Onemogoči"
msgid "Leave Off"
msgstr "Pusti onemogočeno"
#: js/ui/keyboard.js:227
#: js/ui/keyboard.js:226
msgid "Region & Language Settings"
msgstr "Nastavitve območja in jezika"
@ -1566,11 +1556,11 @@ msgstr "Poglej vir"
msgid "Web Page"
msgstr "Spletna stran"
#: js/ui/main.js:294
#: js/ui/main.js:290
msgid "Logged in as a privileged user"
msgstr "Zaznana je prijava s skrbniškimi dovoljenji"
#: js/ui/main.js:295
#: js/ui/main.js:291
msgid ""
"Running a session as a privileged user should be avoided for security "
"reasons. If possible, you should log in as a normal user."
@ -1578,11 +1568,11 @@ msgstr ""
"Zagona seje s skrbniškim računom se je treba iz varnostnih razlogov "
"izogibati. Priporočljivo je uporabljati običajen uporabniški račun."
#: js/ui/main.js:344
#: js/ui/main.js:340
msgid "Screen Lock disabled"
msgstr "Zaklep zaslona je onemogočen"
#: js/ui/main.js:345
#: js/ui/main.js:341
msgid "Screen Locking requires the GNOME display manager."
msgstr ""
"Zaklepanje zaslona zahteva namestitev upravljalnika zaslona za okolje GNOME."
@ -1621,47 +1611,47 @@ msgstr "Razveljavi"
msgid "Overview"
msgstr "Pregled"
#: js/ui/padOsd.js:96
#: js/ui/padOsd.js:95
msgid "New shortcut…"
msgstr "Nova bližnjica …"
#: js/ui/padOsd.js:143
#: js/ui/padOsd.js:142
msgid "Application defined"
msgstr "Program je določen"
#: js/ui/padOsd.js:144
#: js/ui/padOsd.js:143
msgid "Show on-screen help"
msgstr "Pokaži zaslonsko pomoč"
#: js/ui/padOsd.js:145
#: js/ui/padOsd.js:144
msgid "Switch monitor"
msgstr "Nadzornik preklopa"
#: js/ui/padOsd.js:146
#: js/ui/padOsd.js:145
msgid "Assign keystroke"
msgstr "Dodeli tipkovno bližnjico"
#: js/ui/padOsd.js:212
#: js/ui/padOsd.js:211
msgid "Done"
msgstr "Končano"
#: js/ui/padOsd.js:718
#: js/ui/padOsd.js:716
msgid "Edit…"
msgstr "Uredi …"
#: js/ui/padOsd.js:760 js/ui/padOsd.js:877
#: js/ui/padOsd.js:758 js/ui/padOsd.js:875
msgid "None"
msgstr "Brez"
#: js/ui/padOsd.js:831
#: js/ui/padOsd.js:829
msgid "Press a button to configure"
msgstr "Pritisnite gumb za nastavitev"
#: js/ui/padOsd.js:832
#: js/ui/padOsd.js:830
msgid "Press Esc to exit"
msgstr "Pritisnite tipko Esc za končanje"
#: js/ui/padOsd.js:835
#: js/ui/padOsd.js:833
msgid "Press any key to exit"
msgstr "Pritisnite katerokoli tipko za končanje"
@ -1671,12 +1661,12 @@ msgstr "Pritisnite katerokoli tipko za končanje"
msgid "Activities"
msgstr "Dejavnosti"
#: js/ui/panel.js:542
#: js/ui/panel.js:556
msgctxt "System menu in the top bar"
msgid "System"
msgstr "Sistem"
#: js/ui/panel.js:658
#: js/ui/panel.js:674
msgid "Top Bar"
msgstr "Vrhnja vrstica"
@ -1715,7 +1705,7 @@ msgstr "Zaklep ni mogoč"
msgid "Lock was blocked by an application"
msgstr "Zaklep je preprečil program"
#: js/ui/screenshot.js:141
#: js/ui/screenshot.js:155
msgid "Screenshot taken"
msgstr "Zaslonska slika je zajeta"
@ -2781,6 +2771,7 @@ msgstr "Zahtevani so določilo UUID, ime in opis"
#: subprojects/extensions-tool/src/command-enable.c:46
#: subprojects/extensions-tool/src/command-info.c:50
#: subprojects/extensions-tool/src/command-list.c:64
#: subprojects/extensions-tool/src/main.c:146
msgid "Failed to connect to GNOME Shell\n"
msgstr "Povezava z Lupino GNOME je spodletela\n"
@ -2797,7 +2788,7 @@ msgstr "Onemogoči razširitev"
#: subprojects/extensions-tool/src/command-disable.c:119
#: subprojects/extensions-tool/src/command-enable.c:119
#: subprojects/extensions-tool/src/command-info.c:103
#: subprojects/extensions-tool/src/command-prefs.c:97
#: subprojects/extensions-tool/src/command-prefs.c:105
#: subprojects/extensions-tool/src/command-reset.c:76
#: subprojects/extensions-tool/src/command-uninstall.c:104
msgid "No UUID given"
@ -2806,7 +2797,7 @@ msgstr "Ni podanega UUID"
#: subprojects/extensions-tool/src/command-disable.c:124
#: subprojects/extensions-tool/src/command-enable.c:124
#: subprojects/extensions-tool/src/command-info.c:108
#: subprojects/extensions-tool/src/command-prefs.c:102
#: subprojects/extensions-tool/src/command-prefs.c:110
#: subprojects/extensions-tool/src/command-reset.c:81
#: subprojects/extensions-tool/src/command-uninstall.c:109
msgid "More than one UUID given"
@ -2936,7 +2927,12 @@ msgstr "Določena je več kot ena izvorna mapa"
msgid "Extension “%s” doesn't have preferences\n"
msgstr "Razširitev »%s« nima posebnih nastavitev\n"
#: subprojects/extensions-tool/src/command-prefs.c:79
#: subprojects/extensions-tool/src/command-prefs.c:62
#, c-format
msgid "Failed to open prefs for extension “%s”: %s\n"
msgstr "Odpiranje lastnosti razširitve »%s« je spodletelo: %s\n"
#: subprojects/extensions-tool/src/command-prefs.c:87
msgid "Opens extension preferences"
msgstr "Odpre možnosti razširitve"
@ -2961,10 +2957,6 @@ msgstr "Odstrani razširitev"
msgid "Do not print error messages"
msgstr "Ne izpisuj sporočil o napakah"
#: subprojects/extensions-tool/src/main.c:146
msgid "Failed to connect to GNOME Shell"
msgstr "Povezava z Lupino GNOME je spodletela"
#: subprojects/extensions-tool/src/main.c:244
msgid "Path"
msgstr "Pot"
@ -3099,6 +3091,17 @@ msgstr[3] "%u dovodi naprave"
msgid "System Sounds"
msgstr "Sistemski zvoki"
#~ msgid "Enable introspection API"
#~ msgstr "Omogoči API nadzora"
#~ msgid ""
#~ "Enables a D-Bus API that allows to introspect the application state of "
#~ "the shell."
#~ msgstr "Omogoči API sistema D-Bus, ki mogoča nadzor stanja programa lupine."
#~ msgid "Failed to connect to GNOME Shell"
#~ msgstr "Povezava z Lupino GNOME je spodletela"
#~ msgid "Minimize"
#~ msgstr "Skrči"

View File

@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
"POT-Creation-Date: 2021-11-26 16:19+0000\n"
"PO-Revision-Date: 2021-11-26 23:35+0200\n"
"POT-Creation-Date: 2021-11-02 15:41+0000\n"
"PO-Revision-Date: 2021-11-02 18:31+0200\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <kde-i18n-uk@kde.org>\n"
"Language: uk\n"
@ -798,7 +798,7 @@ msgstr "Заборонити доступ"
msgid "Grant Access"
msgstr "Надати доступ"
#: js/ui/appDisplay.js:1791
#: js/ui/appDisplay.js:1846
msgid "Unnamed Folder"
msgstr "Неназвана тека"
@ -1402,11 +1402,11 @@ msgstr "Встановити розширення"
msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "Звантажити і встановити «%s» з extensions.gnome.org?"
#: js/ui/extensionSystem.js:266
#: js/ui/extensionSystem.js:252
msgid "Extension Updates Available"
msgstr "Випущено оновлення розширень"
#: js/ui/extensionSystem.js:267
#: js/ui/extensionSystem.js:253
msgid "Extension updates are ready to be installed."
msgstr "Приготовано до встановлення оновлення розширень."
@ -1553,25 +1553,11 @@ msgstr "Переглянути джерело"
msgid "Web Page"
msgstr "Веб-сторінка"
#: js/ui/main.js:259
msgid "System was put in unsafe mode"
msgstr ""
"Систему переведено у небезпечний режим"
#: js/ui/main.js:260
msgid "Applications now have unrestricted access"
msgstr ""
"Тепер програми мають необмежений доступ до даних"
#: js/ui/main.js:261 js/ui/overview.js:58
msgid "Undo"
msgstr "Повернути"
#: js/ui/main.js:307
#: js/ui/main.js:290
msgid "Logged in as a privileged user"
msgstr "Увійшов як наділений користувач"
#: js/ui/main.js:308
#: js/ui/main.js:291
msgid ""
"Running a session as a privileged user should be avoided for security "
"reasons. If possible, you should log in as a normal user."
@ -1579,11 +1565,11 @@ msgstr ""
"З міркувань безпеки слід уникати сеансів з наділеними правами. Користуйтесь "
"звичайним сеансом."
#: js/ui/main.js:357
#: js/ui/main.js:340
msgid "Screen Lock disabled"
msgstr "Блокування екрана вимкнено"
#: js/ui/main.js:358
#: js/ui/main.js:341
msgid "Screen Locking requires the GNOME display manager."
msgstr "Блокування екрана потребує керування входом GNOME."
@ -1611,6 +1597,10 @@ msgstr "Введіть текст для пошуку"
msgid "Applications"
msgstr "Програми"
#: js/ui/overview.js:58
msgid "Undo"
msgstr "Повернути"
#. Translators: This is the main view to select
#. activities. See also note for "Activities" string.
#: js/ui/overview.js:71
@ -2939,7 +2929,8 @@ msgstr "У розширення «%s» немає налаштувань\n"
#: subprojects/extensions-tool/src/command-prefs.c:62
#, c-format
msgid "Failed to open prefs for extension “%s”: %s\n"
msgstr "Не вдалося відкрити налаштування для розширення «%s»: %s\n"
msgstr ""
"Не вдалося відкрити налаштування для розширення «%s»: %s\n"
#: subprojects/extensions-tool/src/command-prefs.c:87
msgid "Opens extension preferences"

View File

@ -52,7 +52,7 @@ static const gchar introspection_xml[] =
" <arg type='b' name='force_reload' direction='in'/>"
" </method>"
" <signal name='EventsAddedOrUpdated'>"
" <arg type='a(ssxxa{sv})' name='events' direction='out'/>"
" <arg type='a(ssbxxa{sv})' name='events' direction='out'/>"
" </signal>"
" <signal name='EventsRemoved'>"
" <arg type='as' name='ids' direction='out'/>"
@ -110,25 +110,25 @@ typedef struct
gchar *summary;
time_t start_time;
time_t end_time;
guint is_all_day : 1;
} CalendarAppointment;
static gboolean
static time_t
get_time_from_property (ECalClient *cal,
ICalComponent *icomp,
ICalPropertyKind prop_kind,
ICalTime * (* get_prop_func) (ICalProperty *prop),
ICalTimezone *default_zone,
ICalTime **out_itt,
ICalTimezone **out_timezone)
ICalTimezone *default_zone)
{
ICalProperty *prop;
ICalTime *itt;
ICalParameter *param;
ICalTimezone *timezone = NULL;
time_t retval;
prop = i_cal_component_get_first_property (icomp, prop_kind);
if (!prop)
return FALSE;
return 0;
itt = get_prop_func (prop);
@ -142,13 +142,13 @@ get_time_from_property (ECalClient *cal,
i_cal_time_set_timezone (itt, timezone);
retval = i_cal_time_as_timet_with_zone (itt, timezone);
g_clear_object (&param);
g_clear_object (&prop);
g_clear_object (&itt);
*out_itt = itt;
*out_timezone = timezone;
return TRUE;
return retval;
}
static inline time_t
@ -156,26 +156,11 @@ get_ical_start_time (ECalClient *cal,
ICalComponent *icomp,
ICalTimezone *default_zone)
{
ICalTime *itt;
ICalTimezone *timezone;
time_t retval;
if (!get_time_from_property (cal,
icomp,
I_CAL_DTSTART_PROPERTY,
i_cal_property_get_dtstart,
default_zone,
&itt,
&timezone))
{
return 0;
}
retval = i_cal_time_as_timet_with_zone (itt, timezone);
g_clear_object (&itt);
return retval;
return get_time_from_property (cal,
icomp,
I_CAL_DTSTART_PROPERTY,
i_cal_property_get_dtstart,
default_zone);
}
static inline time_t
@ -183,36 +168,54 @@ get_ical_end_time (ECalClient *cal,
ICalComponent *icomp,
ICalTimezone *default_zone)
{
ICalTime *itt;
ICalTimezone *timezone;
time_t retval;
return get_time_from_property (cal,
icomp,
I_CAL_DTEND_PROPERTY,
i_cal_property_get_dtend,
default_zone);
}
if (!get_time_from_property (cal,
icomp,
I_CAL_DTEND_PROPERTY,
i_cal_property_get_dtend,
default_zone,
&itt,
&timezone))
static gboolean
get_ical_is_all_day (ECalClient *cal,
ICalComponent *icomp,
time_t start_time,
ICalTimezone *default_zone)
{
ICalProperty *prop;
ICalDuration *duration;
ICalTime *dtstart;
struct tm *start_tm;
time_t end_time;
gboolean retval;
dtstart = i_cal_component_get_dtstart (icomp);
if (dtstart && i_cal_time_is_date (dtstart))
{
if (!get_time_from_property (cal,
icomp,
I_CAL_DTSTART_PROPERTY,
i_cal_property_get_dtstart,
default_zone,
&itt,
&timezone))
{
return 0;
}
if (i_cal_time_is_date (itt))
i_cal_time_adjust (itt, 1, 0, 0, 0);
g_clear_object (&dtstart);
return TRUE;
}
retval = i_cal_time_as_timet_with_zone (itt, timezone);
g_clear_object (&dtstart);
g_clear_object (&itt);
start_tm = gmtime (&start_time);
if (start_tm->tm_sec != 0 ||
start_tm->tm_min != 0 ||
start_tm->tm_hour != 0)
return FALSE;
if ((end_time = get_ical_end_time (cal, icomp, default_zone)))
return (end_time - start_time) % 86400 == 0;
prop = i_cal_component_get_first_property (icomp, I_CAL_DURATION_PROPERTY);
if (!prop)
return FALSE;
duration = i_cal_property_get_duration (prop);
retval = duration && (i_cal_duration_as_int (duration) % 86400) == 0;
g_clear_object (&duration);
g_clear_object (&prop);
return retval;
}
@ -238,6 +241,10 @@ calendar_appointment_new (ECalClient *cal,
appt->summary = g_strdup (i_cal_component_get_summary (ical));
appt->start_time = get_ical_start_time (cal, ical, default_zone);
appt->end_time = get_ical_end_time (cal, ical, default_zone);
appt->is_all_day = get_ical_is_all_day (cal,
ical,
appt->start_time,
default_zone);
e_cal_component_id_free (id);
@ -354,7 +361,7 @@ app_notify_events_added (App *app)
/* The a{sv} is used as an escape hatch in case we want to provide more
* information in the future without breaking ABI
*/
g_variant_builder_init (&builder, G_VARIANT_TYPE ("a(ssxxa{sv})"));
g_variant_builder_init (&builder, G_VARIANT_TYPE ("a(ssbxxa{sv})"));
for (link = events; link; link = g_slist_next (link))
{
CalendarAppointment *appt = link->data;
@ -368,9 +375,10 @@ app_notify_events_added (App *app)
{
g_variant_builder_init (&extras_builder, G_VARIANT_TYPE ("a{sv}"));
g_variant_builder_add (&builder,
"(ssxxa{sv})",
"(ssbxxa{sv})",
appt->id,
appt->summary != NULL ? appt->summary : "",
(gboolean) appt->is_all_day,
(gint64) start_time,
(gint64) end_time,
&extras_builder);
@ -382,7 +390,7 @@ app_notify_events_added (App *app)
"/org/gnome/Shell/CalendarServer",
"org.gnome.Shell.CalendarServer",
"EventsAddedOrUpdated",
g_variant_new ("(a(ssxxa{sv}))", &builder),
g_variant_new ("(a(ssbxxa{sv}))", &builder),
NULL);
g_variant_builder_clear (&builder);

View File

@ -1,4 +1,4 @@
#!@PYTHON@
#!/usr/bin/env python3
# -*- mode: Python; indent-tabs-mode: nil; -*-
import subprocess

View File

@ -1,4 +1,4 @@
#!@PYTHON@
#!/usr/bin/env python3
# -*- mode: Python; indent-tabs-mode: nil; -*-
import datetime

View File

@ -46,6 +46,7 @@
#include "shell-global-private.h"
#include "shell-perf-log.h"
#include "shell-wm-private.h"
#include "shell-realms.h"
#define GNOME_TYPE_SHELL_PLUGIN (gnome_shell_plugin_get_type ())
G_DECLARE_FINAL_TYPE (GnomeShellPlugin, gnome_shell_plugin,
@ -214,6 +215,20 @@ gnome_shell_plugin_destroy (MetaPlugin *plugin,
actor);
}
static void
ensure_switched_context_current(guint ctx_id) {
ShellRealms *realms = shell_realms_get_default();
ShellRealmItem *realm = shell_realms_realm_by_context_id(realms, ctx_id);
if (!realm) {
g_warning ("No realm found for ctx_id = %d in context switch", ctx_id);
return;
}
if (!shell_realm_item_is_current(realm)) {
shell_realm_item_set_current(realm);
}
}
static void
gnome_shell_plugin_switch_workspace (MetaPlugin *plugin,
gint from,
@ -221,6 +236,10 @@ gnome_shell_plugin_switch_workspace (MetaPlugin *plugin,
MetaMotionDirection direction)
{
_shell_wm_switch_workspace (get_shell_wm(), from, to, direction);
if (direction == META_MOTION_CONTEXT_SWITCH) {
ensure_switched_context_current((guint) (to >> 16));
}
}
static void

View File

@ -1,7 +1,7 @@
service_data = configuration_data()
service_data.set('libexecdir', libexecdir)
subdir('calendar-server')
#subdir('calendar-server')
subdir('hotplug-sniffer')
subdir('st')
subdir('tray')
@ -125,6 +125,7 @@ libshell_private_headers = [
'shell-app-cache-private.h',
'shell-app-system-private.h',
'shell-global-private.h',
'shell-realms-private.h',
'shell-window-tracker-private.h',
'shell-wm-private.h'
]
@ -147,6 +148,14 @@ libshell_sources = [
'shell-perf-log.c',
'shell-polkit-authentication-agent.c',
'shell-polkit-authentication-agent.h',
'shell-realm-item.c',
'shell-realm-item.h',
'shell-realms-window-frames.c',
'shell-realms-window-frames.h',
'shell-realms.c',
'shell-realms.h',
'shell-realm-tracker.c',
'shell-realm-tracker.h',
'shell-screenshot.c',
'shell-secure-text-buffer.c',
'shell-secure-text-buffer.h',

View File

@ -23,7 +23,7 @@
* Shell is running.
*/
#define DEFAULT_TIMEOUT_SECONDS 5
#define DEFAULT_TIMEOUT_SECONDS 2
struct _ShellAppCache
{

View File

@ -12,6 +12,7 @@
#include "shell-app-cache-private.h"
#include "shell-app-private.h"
#include "shell-window-tracker-private.h"
#include "shell-realms.h"
#include "shell-app-system-private.h"
#include "shell-global.h"
#include "shell-util.h"
@ -91,6 +92,110 @@ static void shell_app_system_class_init(ShellAppSystemClass *klass)
G_TYPE_NONE, 0);
}
/*
* Applications belonging to realms have a prefix added to the filenames
* of their desktop files indicating the name of the realm. For example
* in a realm called 'main' the desktop file 'org.gnome.Terminal.desktop'
* is renamed to 'realm-main.org.gnome.Terminal.desktop'.
*
* This has the effect of creating a separate application ID for instances
* of the same application in multiple realms.
*/
static const char *
realm_name_from_application_id (const char *id)
{
gchar **split = NULL;
const char *result = NULL;
if (!g_str_has_prefix (id, "realm-")) {
return NULL;
}
split = g_strsplit(id, ".", 2);
if (split[0]) {
g_assert_true (g_str_has_prefix (split[0], "realm-"));
result = g_strdup(split[0] + 6);
}
g_strfreev (split);
return result;
}
char *
current_realm_name (gboolean name_only)
{
gchar *link = NULL;
gchar *p = NULL;
gchar *realm = NULL;
link = g_file_read_link ("/run/citadel/realms/current/current.realm", NULL);
if (link) {
p = g_strrstr(link, "/realm-");
if (p) {
/* skip slash character */
p++;
if (name_only) {
/* skip 'realm-' */
p += 6;
}
realm = g_strdup(p);
}
g_free (link);
}
return realm;
}
static gboolean
is_current_realm_app (const char *id, const char *current_realm)
{
return !g_str_has_prefix (id, "realm-") || g_str_has_prefix (id, current_realm);
}
static void
refresh_installed_apps (ShellAppSystem *self)
{
const GList *l;
GAppInfo *app;
const char *app_id;
char *current_realm;
ShellAppSystemPrivate *priv = self->priv;
g_list_free_full (g_steal_pointer (&priv->installed_apps), g_object_unref);
l = shell_app_cache_get_all (shell_app_cache_get_default ());
current_realm = current_realm_name (FALSE);
while (l) {
app = l->data;
app_id = g_app_info_get_id (app);
if (is_current_realm_app (app_id, current_realm)) {
priv->installed_apps = g_list_prepend (priv->installed_apps, g_object_ref (app));
}
l = l->next;
}
priv->installed_apps = g_list_reverse (priv->installed_apps);
g_free (current_realm);
}
static char *
realm_wm_class (const char *wmclass, const char *realm_name)
{
if (realm_name) {
return g_strdup_printf ("realm-%s.%s", realm_name, wmclass);
} else {
return g_strdup (wmclass);
}
}
static void
scan_startup_wm_class_to_id (ShellAppSystem *self)
{
@ -106,6 +211,7 @@ scan_startup_wm_class_to_id (ShellAppSystem *self)
{
GAppInfo *info = l->data;
const char *startup_wm_class, *id, *old_id;
char *realm_wmclass;
id = g_app_info_get_id (info);
startup_wm_class = g_desktop_app_info_get_startup_wm_class (G_DESKTOP_APP_INFO (info));
@ -113,12 +219,17 @@ scan_startup_wm_class_to_id (ShellAppSystem *self)
if (startup_wm_class == NULL)
continue;
realm_wmclass = realm_wm_class (startup_wm_class, realm_name_from_application_id (id));
/* In case multiple .desktop files set the same StartupWMClass, prefer
* the one where ID and StartupWMClass match */
old_id = g_hash_table_lookup (priv->startup_wm_class_to_id, startup_wm_class);
if (old_id == NULL || strcmp (id, startup_wm_class) == 0)
old_id = g_hash_table_lookup (priv->startup_wm_class_to_id, realm_wmclass);
if (old_id == NULL || strcmp (id, startup_wm_class) == 0) {
g_hash_table_insert (priv->startup_wm_class_to_id,
g_strdup (startup_wm_class), g_strdup (id));
g_strdup (realm_wmclass), g_strdup (id));
}
g_free (realm_wmclass);
}
}
@ -347,15 +458,19 @@ shell_app_system_lookup_heuristic_basename (ShellAppSystem *system,
*/
ShellApp *
shell_app_system_lookup_desktop_wmclass (ShellAppSystem *system,
const char *wmclass)
const char *wmclass,
const char *realm_name)
{
char *canonicalized;
char *desktop_file;
char *classname;
ShellApp *app;
if (wmclass == NULL)
return NULL;
classname = realm_wm_class (wmclass, realm_name);
/* First try without changing the case (this handles
org.example.Foo.Bar.desktop applications)
@ -363,14 +478,16 @@ shell_app_system_lookup_desktop_wmclass (ShellAppSystem *system,
the WM_CLASS to Org.example.Foo.Bar, but it also
sets the instance part to org.example.Foo.Bar, so we're ok
*/
desktop_file = g_strconcat (wmclass, ".desktop", NULL);
desktop_file = g_strconcat (classname, ".desktop", NULL);
app = shell_app_system_lookup_heuristic_basename (system, desktop_file);
g_free (desktop_file);
if (app)
if (app) {
g_free (classname);
return app;
}
canonicalized = g_ascii_strdown (wmclass, -1);
canonicalized = g_ascii_strdown (classname, -1);
/* This handles "Fedora Eclipse", probably others.
* Note g_strdelimit is modify-in-place. */
@ -382,6 +499,7 @@ shell_app_system_lookup_desktop_wmclass (ShellAppSystem *system,
g_free (canonicalized);
g_free (desktop_file);
g_free (classname);
return app;
}
@ -398,14 +516,20 @@ shell_app_system_lookup_desktop_wmclass (ShellAppSystem *system,
*/
ShellApp *
shell_app_system_lookup_startup_wmclass (ShellAppSystem *system,
const char *wmclass)
const char *wmclass,
const char *realm_name)
{
const char *id;
char *classname;
if (wmclass == NULL)
return NULL;
id = g_hash_table_lookup (system->priv->startup_wm_class_to_id, wmclass);
classname = realm_wm_class (wmclass, realm_name);
id = g_hash_table_lookup (system->priv->startup_wm_class_to_id, classname);
g_free (classname);
if (id == NULL)
return NULL;
@ -435,6 +559,29 @@ _shell_app_system_notify_app_state_changed (ShellAppSystem *self,
g_signal_emit (self, signals[APP_STATE_CHANGED], 0, app);
}
static gboolean
is_current_realm_context_app(ShellApp *app)
{
ShellRealms *realms = shell_realms_get_default();
ShellRealmItem *item = shell_realms_current_realm (realms);
guint id = (item) ? shell_realm_item_get_context_id (item) : 0;
GSList *iter = shell_app_get_windows (app);
while (iter) {
MetaWindow *window = iter->data;
if (meta_window_is_on_all_workspaces (window)) {
return true;
}
MetaWorkspace *workspace = meta_window_get_workspace (window);
if (meta_workspace_get_context_id (workspace) == id) {
return true;
}
iter = iter->next;
}
return false;
}
/**
* shell_app_system_get_running:
* @self: A #ShellAppSystem
@ -458,7 +605,9 @@ shell_app_system_get_running (ShellAppSystem *self)
{
ShellApp *app = key;
ret = g_slist_prepend (ret, app);
if (is_current_realm_context_app (app)) {
ret = g_slist_prepend (ret, app);
}
}
ret = g_slist_sort (ret, (GCompareFunc)shell_app_compare);
@ -482,12 +631,16 @@ shell_app_system_search (const char *search_string)
{
char ***results = g_desktop_app_info_search (search_string);
char ***groups, **ids;
char *current_realm;
current_realm = current_realm_name (FALSE);
for (groups = results; *groups; groups++)
for (ids = *groups; *ids; ids++)
if (!g_utf8_validate (*ids, -1, NULL))
if (!g_utf8_validate (*ids, -1, NULL) || !is_current_realm_app (*ids, current_realm))
**ids = '\0';
g_free (current_realm);
return results;
}
@ -504,5 +657,7 @@ shell_app_system_search (const char *search_string)
GList *
shell_app_system_get_installed (ShellAppSystem *self)
{
return shell_app_cache_get_all (shell_app_cache_get_default ());
ShellAppSystemPrivate *priv = self->priv;
refresh_installed_apps (self);
return priv->installed_apps;
}

View File

@ -20,9 +20,11 @@ ShellApp *shell_app_system_lookup_heuristic_basename (ShellAppSystem *
const char *id);
ShellApp *shell_app_system_lookup_startup_wmclass (ShellAppSystem *system,
const char *wmclass);
const char *wmclass,
const char *realm_name);
ShellApp *shell_app_system_lookup_desktop_wmclass (ShellAppSystem *system,
const char *wmclass);
const char *wmclass,
const char *realm_name);
GSList *shell_app_system_get_running (ShellAppSystem *self);
char ***shell_app_system_search (const char *search_string);

View File

@ -44,6 +44,7 @@
#include "shell-util.h"
#include "st.h"
#include "switcheroo-control.h"
#include "shell-realm-tracker.h"
static ShellGlobal *the_object = NULL;
@ -1068,6 +1069,8 @@ _shell_global_set_plugin (ShellGlobal *global,
global->focus_manager = st_focus_manager_get_for_stage (global->stage);
update_scaling_factor (global, settings);
shell_realm_tracker_start ();
}
GjsContext *

396
src/shell-realm-item.c Normal file
View File

@ -0,0 +1,396 @@
#include "shell-global.h"
#include "shell-realm-item.h"
#include "shell-realm-tracker.h"
#include <meta/meta-workspace-manager.h>
#include <meta/display.h>
struct _ShellRealmItem {
GObject parent;
char *realm_name;
char *description;
char *namespace;
MetaWorkspaceContext *context;
guint8 status;
gboolean tagged;
gboolean disposed;
};
G_DEFINE_TYPE (ShellRealmItem, shell_realm_item, G_TYPE_OBJECT);
enum {
PROP_0,
PROP_ITEM_REALM_NAME,
PROP_ITEM_DESCRIPTION,
PROP_ITEM_NAMESPACE
};
#define REALM_STATUS_RUNNING 1
#define REALM_STATUS_CURRENT 2
#define REALM_STATUS_SYSTEM 4
static void
shell_realm_item_init(ShellRealmItem *item)
{
}
ShellRealmItem *
shell_realm_item_new (const char *realm_name, const char *description, const char *namespace, guint8 status)
{
ShellRealmItem *item = g_object_new (SHELL_TYPE_REALM_ITEM, NULL);
item->realm_name = g_strdup (realm_name);
item->description = g_strdup (description);
item->namespace = g_strdup (namespace);
item->status = status;
item->context = NULL;
item->tagged = FALSE;
item->disposed = FALSE;
return item;
}
void
shell_realm_item_acquire_context (ShellRealmItem *item)
{
if (item->context || item->disposed || shell_realm_item_is_system (item)) {
return;
}
if (!item->namespace || !shell_realm_item_is_running (item)) {
g_warning ("ShellRealmItem: Cannot acquire workspace context for realm '%s' because not running or no namespace", item->realm_name);
return;
}
MetaDisplay *display = shell_global_get_display (shell_global_get());
MetaWorkspaceManager *workspace_manager = meta_display_get_workspace_manager (display);
item->context = meta_workspace_manager_context_for_namespace (workspace_manager, item->namespace);
}
/**
* shell_realm_item_get_realm_name:
* @item: A #ShellRealmItem instance
*
* Returns: The name of the realm for this #ShellRealmItem
*/
const char *
shell_realm_item_get_realm_name (ShellRealmItem *item)
{
return item->realm_name;
}
/**
* shell_realm_item_get_description:
* @item: A #ShellRealmItem instance
*
* Returns: The description field for this realm or an empty string if no description is set
*/
const char *
shell_realm_item_get_description (ShellRealmItem *item)
{
if (item->description)
return item->description;
else
return "";
}
/**
* shell_realm_item_get_namespace:
* @item: A #ShellRealmItem instance
*
* Returns: The namespace field for this realm or an empty string if no namespace is set
*/
const char *
shell_realm_item_get_namespace (ShellRealmItem *item)
{
if (item->namespace)
return item->namespace;
else
return "";
}
/**
* shell_realm_item_get_context_id:
* @item: A #ShellRealmItem instance
*
* Returns: The context id for the #MetaWorkspaceContext of this realm or 0 if
* no context exists.
*/
guint
shell_realm_item_get_context_id (ShellRealmItem *item)
{
if (shell_realm_item_is_running (item) && !item->context) {
shell_realm_item_acquire_context (item);
}
if (item->context) {
return meta_workspace_context_id (item->context);
} else {
return 0;
}
}
/**
* shell_realm_item_get_active_workspace:
* @item: A #ShellRealmItem
*
* Returns: (transfer none): The current workspace for the context
* belonging to this item.
*/
MetaWorkspace *
shell_realm_item_get_active_workspace (ShellRealmItem *item)
{
if (shell_realm_item_is_running (item) && !item->context) {
shell_realm_item_acquire_context (item);
}
if (item->context) {
return meta_workspace_context_get_active_workspace (item->context);
} else {
return NULL;
}
}
/**
* shell_realm_item_activate_context:
* @item: A #ShellRealmItem instance for a running realm
*
* If a #MetaWorkspaceContext is associated with this realm
* set it as the active workspace context.
*/
void
shell_realm_item_activate_context (ShellRealmItem *item)
{
shell_realm_item_acquire_context (item);
if (item->context) {
meta_workspace_context_activate (item->context);
}
}
/**
* shell_realm_item_set_current:
* @item: A #ShellRealmItem instance for a running realm
*
* Sends a DBUS request to change the current realm to this realm. This does not immediately
* influence any local state in GNOME shell. Once the realms daemon has changed the current realm
* it will emit a signal and the processing of that signal will update the local state.
*/
void
shell_realm_item_set_current (ShellRealmItem *item) {
ShellRealmTracker *tracker = shell_realm_tracker_get_default();
if (item && item->realm_name) {
shell_realm_tracker_call_set_current (tracker, item->realm_name);
}
}
/**
* shell_realm_item_move_window_to_context:
* @item: A #ShellRealmItem instance for a running realm
* @window: A #MetaWindow for some window
*
* Move window to the currently active workspace in the #MetaWorkspaceContext for
* this realm.
*/
void
shell_realm_item_move_window_to_context (ShellRealmItem *item, MetaWindow *window)
{
shell_realm_item_acquire_context (item);
if (item->context) {
meta_workspace_context_move_window_to_context (item->context, window);
} else {
g_warning ("ShellRealmItem: Attempted to move window to realm '%s' which has no workspace context", item->realm_name);
}
}
static gboolean
is_flag_set(guint8 status, guchar flag)
{
return ((status & flag) != 0) ? TRUE : FALSE;
}
static gboolean
has_status_flag (ShellRealmItem *item, guchar flag)
{
return is_flag_set (item->status, flag);
}
static void
set_status_flag (ShellRealmItem *item, guint8 flag, gboolean value)
{
if (value) {
item->status |= flag;
} else {
item->status &= ~flag;
}
}
/**
* shell_realm_item_is_current:
* @item: A #ShellRealmItem instance
*
* Returns: %TRUE if this #ShellRealmItem is the current realm
*/
gboolean
shell_realm_item_is_current (ShellRealmItem *item)
{
return has_status_flag (item, REALM_STATUS_CURRENT);
}
/**
* shell_realm_item_is_running:
* @item: A #ShellRealmItem instance
*
* Returns: %TRUE if this #ShellRealmItem is running
*/
gboolean
shell_realm_item_is_running (ShellRealmItem *item)
{
return has_status_flag (item, REALM_STATUS_RUNNING);
}
/**
* shell_realm_item_is_system:
* @item: A #ShellRealmItem instance
*
* Returns: %TRUE if this #ShellRealmItem is a system realm
*/
gboolean
shell_realm_item_is_system (ShellRealmItem *item)
{
return has_status_flag (item, REALM_STATUS_SYSTEM);
}
void shell_realm_item_set_current_flag (ShellRealmItem *item, gboolean value)
{
set_status_flag (item, REALM_STATUS_CURRENT, value);
}
void shell_realm_item_set_running_flag (ShellRealmItem *item, gboolean value)
{
set_status_flag (item, REALM_STATUS_RUNNING, value);
if (!value && item->context) {
meta_workspace_context_remove (item->context);
item->context = NULL;
}
}
void shell_realm_item_update (ShellRealmItem *item, const char *realm_name, const char *namespace, guint8 status)
{
if (g_strcmp0 (item->realm_name, realm_name)) {
g_message ("ShellRealmItem: Realm name changed from %s to %s", item->realm_name, realm_name);
g_free (item->realm_name);
item->realm_name = g_strdup (realm_name);
}
if (g_strcmp0 (item->namespace, namespace)) {
g_free(item->namespace);
item->namespace = g_strdup (namespace);
}
if (item->status != status) {
gboolean was_running = has_status_flag (item, REALM_STATUS_RUNNING);
gboolean is_running = is_flag_set (status, REALM_STATUS_RUNNING);
gboolean stopped = was_running && !is_running;
item->status = status;
if (stopped) {
meta_workspace_context_remove (item->context);
item->context = NULL;
}
}
}
void
shell_realm_item_set_tagged (ShellRealmItem *item, gboolean is_tagged)
{
item->tagged = is_tagged;
}
gboolean
shell_realm_item_is_tagged (ShellRealmItem *item)
{
return item->tagged;
}
static void shell_realm_item_get_property (GObject *gobject,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
ShellRealmItem *item = SHELL_REALM_ITEM (gobject);
switch (prop_id) {
case PROP_ITEM_REALM_NAME:
g_value_set_string (value, shell_realm_item_get_realm_name (item));
break;
case PROP_ITEM_DESCRIPTION:
g_value_set_string (value, shell_realm_item_get_description (item));
break;
case PROP_ITEM_NAMESPACE:
g_value_set_string (value, shell_realm_item_get_namespace (item));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
break;
}
}
static void shell_realm_item_dispose (GObject *object)
{
ShellRealmItem *item = SHELL_REALM_ITEM (object);
if (item->context) {
meta_workspace_context_remove (item->context);
item->context = NULL;
}
item->disposed = TRUE;
G_OBJECT_CLASS(shell_realm_item_parent_class)->dispose (object);
}
static void
shell_realm_item_finalize (GObject *object)
{
ShellRealmItem *item = SHELL_REALM_ITEM (object);
g_free (item->realm_name);
g_free (item->description);
g_free (item->namespace);
G_OBJECT_CLASS(shell_realm_item_parent_class)->finalize (object);
}
static void
shell_realm_item_class_init (ShellRealmItemClass *klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
gobject_class->get_property = shell_realm_item_get_property;
gobject_class->dispose = shell_realm_item_dispose;
gobject_class->finalize = shell_realm_item_finalize;
g_object_class_install_property (gobject_class,
PROP_ITEM_NAMESPACE,
g_param_spec_string ("namespace",
"Context Namespace",
"PID namespace of context",
NULL,
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
g_object_class_install_property (gobject_class,
PROP_ITEM_REALM_NAME,
g_param_spec_string ("realm-name",
"Realm Name",
"Name of realm associated with this context",
NULL,
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
g_object_class_install_property (gobject_class,
PROP_ITEM_DESCRIPTION,
g_param_spec_string ("description",
"Realm Description",
"Optional description of realm",
NULL,
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
}

35
src/shell-realm-item.h Normal file
View File

@ -0,0 +1,35 @@
#ifndef __SHELL_REALM_ITEM_H__
#define __SHELL_REALM_ITEM_H__
#include <glib-object.h>
#include <meta/window.h>
#define SHELL_TYPE_REALM_ITEM (shell_realm_item_get_type())
G_DECLARE_FINAL_TYPE (ShellRealmItem, shell_realm_item, SHELL, REALM_ITEM, GObject)
ShellRealmItem *shell_realm_item_new (const char *realm_name, const char *description, const char *namespace, guint8 status);
const char *shell_realm_item_get_realm_name (ShellRealmItem *item);
const char *shell_realm_item_get_description (ShellRealmItem *item);
const char *shell_realm_item_get_namespace (ShellRealmItem *item);
guint shell_realm_item_get_context_id (ShellRealmItem *item);
MetaWorkspace *shell_realm_item_get_active_workspace (ShellRealmItem *item);
void shell_realm_item_update (ShellRealmItem *item, const char *realm_name, const char *namespace, guint8 status);
void shell_realm_item_set_current_flag (ShellRealmItem *item, gboolean value);
void shell_realm_item_set_running_flag (ShellRealmItem *item, gboolean value);
void shell_realm_item_activate_context (ShellRealmItem *item);
void shell_realm_item_set_current (ShellRealmItem *item);
void shell_realm_item_move_window_to_context (ShellRealmItem *item, MetaWindow *window);
gboolean shell_realm_item_is_current(ShellRealmItem *item);
gboolean shell_realm_item_is_running(ShellRealmItem *item);
gboolean shell_realm_item_is_system(ShellRealmItem *item);
void shell_realm_item_set_tagged (ShellRealmItem *item, gboolean is_tagged);
gboolean shell_realm_item_is_tagged (ShellRealmItem *item);
void shell_realm_item_acquire_context (ShellRealmItem *item);
#endif //__SHELL_REALM_ITEM_H__

310
src/shell-realm-tracker.c Normal file
View File

@ -0,0 +1,310 @@
#include "shell-realm-tracker.h"
#include "shell-realms-private.h"
#define NUM_BUS_SIGNAL_IDS 5
#define REALMS_BUS_NAME "com.subgraph.realms"
#define REALMS_OBJECT_PATH "/com/subgraph/realms"
#define REALMS_MANAGER_INTERFACE "com.subgraph.realms.Manager"
struct _ShellRealmTracker {
GObject parent;
GDBusConnection *dbus;
guint realms_watch_id;
guint bus_signal_ids[NUM_BUS_SIGNAL_IDS];
gboolean destroy_in_progress;
};
G_DEFINE_TYPE (ShellRealmTracker, shell_realm_tracker, G_TYPE_OBJECT);
static void
shell_realm_tracker_init (ShellRealmTracker *tracker)
{
tracker->dbus = NULL;
tracker->realms_watch_id = 0;
tracker->destroy_in_progress = FALSE;
}
static void
shell_realm_tracker_class_init (ShellRealmTrackerClass *klass)
{
}
static void
on_realm_bus_signal(GDBusConnection *connection,
const gchar *sender_name,
const gchar *object_path,
const gchar *interface_name,
const gchar *signal_name,
GVariant *parameters,
gpointer user_data)
{
ShellRealms *realms = shell_realms_get_default();
const gchar *realm_name = NULL;
const gchar *description = NULL;
const gchar *namespace = NULL;
guint8 status = 0;
if (g_str_equal (signal_name, "RealmStarted")) {
g_variant_get (parameters, "(&s&sy)", &realm_name, &namespace, &status);
shell_realms_on_realm_started (realms, realm_name, namespace, status);
} else if (g_str_equal (signal_name, "RealmStopped")) {
g_variant_get (parameters, "(&sy)", &realm_name, &status);
shell_realms_on_realm_stopped (realms, realm_name);
} else if (g_str_equal (signal_name, "RealmRemoved")) {
g_variant_get (parameters, "(&s)", &realm_name);
shell_realms_on_realm_removed (realms, realm_name);
} else if (g_str_equal (signal_name, "RealmCurrent")) {
g_variant_get (parameters, "(&sy)", &realm_name, &status);
shell_realms_on_realm_current (realms, realm_name);
} else if (g_str_equal (signal_name, "RealmNew")) {
g_variant_get (parameters, "(&s&sy)", &realm_name, &description, status);
shell_realms_on_realm_new (realms, realm_name, description, status);
} else {
g_warning("Unexpected signal name '%s' received from realms manager DBUS", signal_name);
}
}
static void
realm_state_process_elements (ShellRealmTracker *self, GVariant *response)
{
GVariantIter *iter = NULL;
const gchar *name = NULL;
const gchar *description = NULL;
const gchar *namespace = NULL;
guchar status = 0;
ShellRealms *realms = shell_realms_get_default();
shell_realms_untag_all (realms);
g_variant_get(response, "(a(ssssy))", &iter);
// (name, desc, realmfs, namespace, status)
while (g_variant_iter_next(iter, "(&s&ss&sy)", &name, &description, NULL, &namespace, &status)) {
shell_realms_update_realm (realms, name, description, namespace, status);
}
shell_realms_remove_untagged (realms);
g_variant_iter_free(iter);
}
static void
request_realm_state_finish(GObject *object, GAsyncResult *result, gpointer data)
{
ShellRealmTracker *self = data;
GError *error = NULL;
GVariant *response = g_dbus_connection_call_finish (G_DBUS_CONNECTION(object), result, &error);
if (!response) {
if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
g_warning("MetaRealmDbus: Error calling 'List' bus method: %s", error->message);
}
g_clear_error (&error);
return;
}
if (self->destroy_in_progress) {
g_variant_unref (response);
return;
}
realm_state_process_elements(self, response);
g_variant_unref(response);
}
static void
set_realm_current_finish (GObject *object, GAsyncResult *result, gpointer data)
{
GError *error = NULL;
GVariant *response = g_dbus_connection_call_finish (G_DBUS_CONNECTION(object), result, &error);
if (!response) {
if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
g_warning("MetaRealmDbus: Error calling 'SetCurrent' bus method: %s", error->message);
}
g_clear_error (&error);
return;
}
g_variant_unref (response);
}
static void
call_dbus_method (ShellRealmTracker *self, const gchar *method, GVariant *parameters, GAsyncReadyCallback callback, gpointer user_data)
{
if (!self->dbus) {
g_warning("ShellRealmTracker: call_dbus_method(%s) called when no bus connection present", method);
return;
}
g_dbus_connection_call(self->dbus,
REALMS_BUS_NAME,
REALMS_OBJECT_PATH,
REALMS_MANAGER_INTERFACE,
method,
parameters,
NULL,
G_DBUS_CALL_FLAGS_NO_AUTO_START,
-1,
NULL,
callback,
user_data);
}
static void
request_realm_state(ShellRealmTracker *self)
{
call_dbus_method (self, "List", NULL, request_realm_state_finish, self);
}
void
shell_realm_tracker_call_set_current (ShellRealmTracker *self, const char *realm_name)
{
call_dbus_method (self, "SetCurrent", g_variant_new("(s)", realm_name), set_realm_current_finish, NULL);
}
static void
unsubscribe_signals (ShellRealmTracker *self)
{
for (int i = 0; i < NUM_BUS_SIGNAL_IDS; i++) {
if (self->bus_signal_ids[i]) {
if (self->dbus) {
g_dbus_connection_signal_unsubscribe(self->dbus, self->bus_signal_ids[i]);
}
self->bus_signal_ids[i] = 0;
}
}
}
static guint
bus_signal_subscribe (ShellRealmTracker *self, const gchar *signal_name)
{
g_assert(self->dbus);
return g_dbus_connection_signal_subscribe(self->dbus,
REALMS_BUS_NAME,
REALMS_MANAGER_INTERFACE,
signal_name,
REALMS_OBJECT_PATH,
NULL,
G_DBUS_SIGNAL_FLAGS_NONE,
on_realm_bus_signal,
self,
NULL);
}
static void
subscribe_bus_signals (ShellRealmTracker *self)
{
if (self->dbus) {
int idx = 0;
self->bus_signal_ids[idx++] = bus_signal_subscribe(self, "RealmStarted");
self->bus_signal_ids[idx++] = bus_signal_subscribe(self, "RealmStopped");
self->bus_signal_ids[idx++] = bus_signal_subscribe(self, "RealmCurrent");
self->bus_signal_ids[idx++] = bus_signal_subscribe(self, "RealmNew");
self->bus_signal_ids[idx++] = bus_signal_subscribe(self, "RealmRemoved");
g_assert(idx == NUM_BUS_SIGNAL_IDS);
}
}
static void
on_realm_manager_appeared (GDBusConnection *connection, const gchar *name, const gchar *name_owner, gpointer user_data)
{
ShellRealmTracker *self = user_data;
// Avoid processing spurious events while destroying 'self'
if (self->destroy_in_progress) {
return;
}
if (!self->dbus) {
self->dbus = g_object_ref(connection);
subscribe_bus_signals (self);
} else {
g_warning("Realm tracker already has a connection in on_realm_manager_appeared()");
}
request_realm_state (self);
}
static void
on_realm_manager_vanished (GDBusConnection *connection, const gchar *name, gpointer user_data)
{
ShellRealmTracker *self = user_data;
// Avoid processing spurious events while destroying 'self'
if (self->destroy_in_progress) {
return;
}
if (!connection) {
g_clear_object (&self->dbus);
}
unsubscribe_signals(self);
}
/**
* shell_realm_tracker_get_default:
*
* Return Value: (transfer none): The global #ShellRealmTracker singleton
*/
ShellRealmTracker *
shell_realm_tracker_get_default(void)
{
static ShellRealmTracker *instance;
if (instance == NULL) {
instance = g_object_new (SHELL_TYPE_REALM_TRACKER, NULL);
}
return instance;
}
void shell_realm_tracker_start ()
{
ShellRealmTracker *tracker = shell_realm_tracker_get_default();
if (tracker->realms_watch_id) {
g_warning ("ShellRealmTracker: shell_realm_tracker_start() called when already started");
return;
}
tracker->realms_watch_id = g_bus_watch_name(G_BUS_TYPE_SYSTEM,
REALMS_BUS_NAME,
G_BUS_NAME_WATCHER_FLAGS_NONE,
on_realm_manager_appeared,
on_realm_manager_vanished,
tracker,
g_free);
}
void
shell_realm_tracker_destroy(ShellRealmTracker *self)
{
if (self->dbus) {
unsubscribe_signals (self);
g_clear_object (&self->dbus);
}
// event handlers check this and will bail early in case there are
// any in queue. see docs for g_bus_unwatch_name()
self->destroy_in_progress = TRUE;
// frees 'self' in destroy notifier
g_bus_unwatch_name(self->realms_watch_id);
}

14
src/shell-realm-tracker.h Normal file
View File

@ -0,0 +1,14 @@
#ifndef __SHELL_REALM_TRACKER_H__
#define __SHELL_REALM_TRACKER_H__
#include <glib-object.h>
#define SHELL_TYPE_REALM_TRACKER (shell_realm_tracker_get_type ())
G_DECLARE_FINAL_TYPE (ShellRealmTracker, shell_realm_tracker,
SHELL, REALM_TRACKER, GObject)
ShellRealmTracker *shell_realm_tracker_get_default(void);
void shell_realm_tracker_call_set_current (ShellRealmTracker *self, const char *realm_name);
void shell_realm_tracker_start ();
#endif /* __SHELL_REALM_TRACKER_H__ */

View File

@ -0,0 +1,21 @@
#ifndef __SHELL_REALMS_PRIVATE_H__
#define __SHELL_REALMS_PRIVATE_H__
#include <glib-object.h>
#include "shell-realms.h"
#include "shell-realms-window-frames.h"
void shell_realms_untag_all (ShellRealms *realms);
void shell_realms_remove_untagged (ShellRealms *realms);
void shell_realms_update_realm (ShellRealms *realms,
const char *realm_name,
const char *description,
const char *namespace,
guint8 status);
void shell_realms_on_realm_started (ShellRealms *realms, const gchar *realm_name, const gchar *namespace, guint8 status);
void shell_realms_on_realm_current (ShellRealms *realms, const gchar *realm_name);
void shell_realms_on_realm_stopped (ShellRealms *realms, const gchar *realm_name);
void shell_realms_on_realm_removed (ShellRealms *realms, const gchar *realm_name);
void shell_realms_on_realm_new (ShellRealms *realms, const gchar *realm_name, const gchar *description, guint8 status);
#endif //__SHELL_REALMS_PRIVATE_H__

View File

@ -0,0 +1,386 @@
#include "shell-realms-window-frames.h"
#include "shell-realms.h"
#define CITADEL_SETTINGS_SCHEMA "com.subgraph.citadel"
#define FRAME_COLOR_LIST_KEY "frame-color-list"
#define REALM_FRAME_COLORS_KEY "realm-frame-colors"
#define REALM_FRAME_ALPHA 200
struct _ShellRealmsWindowFrames {
GObject parent;
GSettings *settings;
GHashTable *realm_frame_colors;
GList *default_colors;
GList *frame_disabled_windows;
};
G_DEFINE_TYPE (ShellRealmsWindowFrames, shell_realms_window_frames, G_TYPE_OBJECT);
enum {
REALM_FRAME_COLORS_CHANGED,
LAST_SIGNAL,
};
static guint shell_realms_window_frames_signals [LAST_SIGNAL] = { 0 };
static void
shell_realms_window_frames_process_color (ShellRealmsWindowFrames *frames, const char *entry)
{
GdkRGBA rgba;
gchar **split = g_strsplit (entry, ":", -1);
if (g_strv_length (split) != 2) {
g_warning("ShellRealmsWindowFrames: Unable to parse realm-frame-colors entry: %s", entry);
g_strfreev (split);
return;
}
if (!gdk_rgba_parse (&rgba, split[1])) {
g_warning("ShellRealmsWindowFrames: Failed to parse RGBA component of realm frame color entry: %s", entry);
} else {
g_hash_table_insert (frames->realm_frame_colors, g_strdup (split[0]), gdk_rgba_copy (&rgba));
}
g_strfreev (split);
}
static void
load_realm_frame_colors (ShellRealmsWindowFrames *frames)
{
guint n_entries, i;
char **entries;
entries = g_settings_get_strv (frames->settings, REALM_FRAME_COLORS_KEY);
n_entries = g_strv_length (entries);
for (i = 0; i < n_entries; i++) {
shell_realms_window_frames_process_color (frames, entries[i]);
}
g_strfreev (entries);
}
static void
on_realm_frame_colors_changed(GSettings *settings, const gchar *key, ShellRealmsWindowFrames *frames)
{
load_realm_frame_colors (frames);
g_signal_emit (frames, shell_realms_window_frames_signals[REALM_FRAME_COLORS_CHANGED], 0);
}
static void
load_default_colors (ShellRealmsWindowFrames *frames)
{
guint n_entries, i;
char **entries;
GdkRGBA rgba;
entries = g_settings_get_strv (frames->settings, FRAME_COLOR_LIST_KEY);
n_entries = g_strv_length (entries);
g_clear_list(&frames->default_colors, (GDestroyNotify) gdk_rgba_free);
for (i = 0; i < n_entries; i++) {
if (gdk_rgba_parse (&rgba, entries[i])) {
frames->default_colors = g_list_append (frames->default_colors, gdk_rgba_copy(&rgba));
}
}
g_strfreev (entries);
}
static void
on_frame_color_list_changed (GSettings *settings, const gchar *key, ShellRealmsWindowFrames *frames)
{
load_default_colors (frames);
}
static void
shell_realms_window_frames_init (ShellRealmsWindowFrames *frames)
{
frames->settings = g_settings_new (CITADEL_SETTINGS_SCHEMA);
frames->realm_frame_colors = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify) gdk_rgba_free);
frames->default_colors = NULL;
frames->frame_disabled_windows = NULL;
g_signal_connect(frames->settings,
"changed::" FRAME_COLOR_LIST_KEY,
G_CALLBACK(on_frame_color_list_changed),
frames);
g_signal_connect(frames->settings,
"changed::" REALM_FRAME_COLORS_KEY,
G_CALLBACK(on_realm_frame_colors_changed),
frames);
load_default_colors (frames);
load_realm_frame_colors (frames);
}
static void
shell_realms_window_frames_finalize (GObject *obj)
{
ShellRealmsWindowFrames *frames = SHELL_REALMS_WINDOW_FRAMES (obj);
g_object_unref (frames->settings);
g_hash_table_destroy (frames->realm_frame_colors);
g_list_free_full (frames->default_colors, (GDestroyNotify) gdk_rgba_free);
g_list_free (frames->frame_disabled_windows);
G_OBJECT_CLASS (shell_realms_window_frames_parent_class)->finalize (obj);
}
static void
shell_realms_window_frames_class_init (ShellRealmsWindowFramesClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->finalize = shell_realms_window_frames_finalize;
shell_realms_window_frames_signals[REALM_FRAME_COLORS_CHANGED] =
g_signal_new ("realm-frame-colors-changed",
G_TYPE_FROM_CLASS(klass),
G_SIGNAL_RUN_LAST,
0,
NULL, NULL, NULL,
G_TYPE_NONE, 0);
}
static gboolean
disabled_list_contains (ShellRealmsWindowFrames *frames, guint32 window_id)
{
return g_list_find (frames->frame_disabled_windows, GUINT_TO_POINTER(window_id)) != NULL;
}
static bool
remove_from_disabled_list (ShellRealmsWindowFrames *frames, guint32 window_id)
{
if (disabled_list_contains (frames, window_id)) {
frames->frame_disabled_windows = g_list_remove (frames->frame_disabled_windows, GUINT_TO_POINTER(window_id));
g_signal_emit (frames, shell_realms_window_frames_signals[REALM_FRAME_COLORS_CHANGED], 0);
return TRUE;
}
return FALSE;
}
static bool
add_to_disabled_list (ShellRealmsWindowFrames *frames, guint32 window_id)
{
if (!disabled_list_contains (frames, window_id)) {
frames->frame_disabled_windows = g_list_append (frames->frame_disabled_windows, GUINT_TO_POINTER(window_id));
g_signal_emit (frames, shell_realms_window_frames_signals[REALM_FRAME_COLORS_CHANGED], 0);
return TRUE;
}
return FALSE;
}
static gint
color_compare(gconstpointer c1, gconstpointer c2) {
return gdk_rgba_equal (c1, c2) ? 0 : 1;
}
static GdkRGBA *
allocate_color (ShellRealmsWindowFrames *frames)
{
guint n_colors = g_list_length (frames->default_colors);
// 1) No default colors? return a built in color
if (n_colors == 0) {
GdkRGBA rgba;
gdk_rgba_parse (&rgba, "rgb(153, 193, 241)");
return gdk_rgba_copy (&rgba);
}
// 2) No default colors? Find first color on default color list that isn't used already
GList *used_colors = g_hash_table_get_values (frames->realm_frame_colors);
for (GList *iter = frames->default_colors; iter; iter = iter->next) {
GdkRGBA *rgba = iter->data;
if (!g_list_find_custom (used_colors, rgba, color_compare)) {
return rgba;
}
}
g_list_free (used_colors);
// 3) Choose a random element of the default list
guint index = (guint) g_random_int_range(0, (gint32) n_colors);
return g_list_nth_data (frames->default_colors, index);
}
static void
shell_realms_window_frames_store_colors (ShellRealmsWindowFrames *frames)
{
GHashTableIter iter;
gpointer key, value;
GPtrArray *entries = g_ptr_array_new_with_free_func(g_free);
g_hash_table_iter_init (&iter, frames->realm_frame_colors);
while (g_hash_table_iter_next(&iter, &key, &value)) {
gchar *name = key;
GdkRGBA *rgba = value;
char *rgba_str = gdk_rgba_to_string (rgba);
gchar *entry = g_strconcat (name, ":", rgba_str, NULL);
g_ptr_array_add (entries, entry);
g_free (rgba_str);
}
g_ptr_array_sort (entries, (GCompareFunc) g_strcmp0);
g_ptr_array_add (entries, NULL);
g_settings_set_strv (frames->settings, REALM_FRAME_COLORS_KEY, (const gchar * const *) entries->pdata);
g_ptr_array_unref (entries);
}
static const char *
shell_realms_window_frames_realm_name_for_window (ShellRealmsWindowFrames *frames, ShellRealms *realms, MetaWindow *window)
{
ShellRealmItem *realm = shell_realms_realm_by_window (realms, window);
if (realm) {
return shell_realm_item_get_realm_name (realm);
} else {
return NULL;
}
}
static void
on_window_unmanaged (MetaWindow *window, ShellRealmsWindowFrames *frames)
{
g_signal_handlers_disconnect_by_func (window, G_CALLBACK (on_window_unmanaged), frames);
guint32 id = meta_window_get_stable_sequence (window);
remove_from_disabled_list (frames, id);
}
static gboolean
is_ignored_window (MetaWindow *window)
{
switch (meta_window_get_window_type (window)) {
case META_WINDOW_MENU:
case META_WINDOW_TOOLTIP:
case META_WINDOW_POPUP_MENU:
case META_WINDOW_DROPDOWN_MENU:
return TRUE;
default:
return FALSE;
}
}
/**
* shell_realms_window_frames_is_frame_enabled:
* @frames: a #ShellRealmsWindowFrames instance
* @window: a #MetaWindow
*
* Return #TRUE if frame has not been disabled for this window.
*
* Returns: #TRUE if frame has not been disabled for this window.
*/
gboolean
shell_realms_window_frames_is_frame_enabled (ShellRealmsWindowFrames *frames, MetaWindow *window)
{
guint32 id = meta_window_get_stable_sequence (window);
return !disabled_list_contains (frames, id);
}
/**
* shell_realms_window_frames_has_frame:
* @frames: a #ShellRealmsWindowFrames instance
* @window: a #MetaWindow
*
* Return #TRUE if this window needs a frame.
*
* Returns: #TRUE if a frame should be drawn for this window.
*/
gboolean
shell_realms_window_frames_has_frame (ShellRealmsWindowFrames *frames, MetaWindow *window)
{
return !is_ignored_window(window) && meta_window_is_on_foreign_workspace_context (window);
}
/**
* shell_realms_window_frames_set_frame_enabled:
* @frames: a #ShellRealmsWindowFrames instance
* @window: a #MetaWindow
* @enabled: Set to #FALSE to disable drawing frame for this window
*
*/
void
shell_realms_window_frames_set_frame_enabled (ShellRealmsWindowFrames *frames, MetaWindow *window, gboolean enabled)
{
guint32 id = meta_window_get_stable_sequence (window);
if (enabled) {
if (remove_from_disabled_list (frames, id)) {
g_signal_handlers_disconnect_by_func (window, G_CALLBACK (on_window_unmanaged), frames);
}
} else if (add_to_disabled_list (frames, id)) {
g_signal_connect_object (window, "unmanaged", G_CALLBACK(on_window_unmanaged), frames, 0);
}
}
static ClutterColor *
rgba_to_clutter_color(GdkRGBA *rgba)
{
guint8 r = (guint8) (0.5 + CLAMP(rgba->red, 0.0, 1.0) * 255.0);
guint8 g = (guint8) (0.5 + CLAMP(rgba->green, 0.0, 1.0) * 255.0);
guint8 b = (guint8) (0.5 + CLAMP(rgba->blue, 0.0, 1.0) * 255.0);
return clutter_color_new (r, g, b, REALM_FRAME_ALPHA);
}
/**
* shell_realms_window_frames_color_for_window:
* @frames: a #ShellRealmsWindowFrames instance
* @window: a #MetaWindow
*
* Returns a color to use for painting window frame.
*
* Return value: (transfer full) (nullable): The frame color or %NULL if no frame should be drawn.
*/
ClutterColor *
shell_realms_window_frames_color_for_window (ShellRealmsWindowFrames *frames, MetaWindow *window)
{
if (!shell_realms_window_frames_has_frame (frames, window)) {
return NULL;
}
ShellRealms *realms = shell_realms_get_default();
const gchar *name = shell_realms_window_frames_realm_name_for_window (frames, realms, window);
GdkRGBA *rgba = g_hash_table_lookup (frames->realm_frame_colors, name);
if (!rgba) {
rgba = allocate_color (frames);
g_hash_table_insert (frames->realm_frame_colors, g_strdup(name), rgba);
shell_realms_window_frames_store_colors (frames);
}
return rgba_to_clutter_color (rgba);
}
/**
* shell_realms_window_frames_label_for_window:
* @frames: a #ShellRealmsWindowFrames instance
* @window: a #MetaWindow
*
* Return the label text for window if the window requires a frame.
*
* Return value: (transfer none) (nullable): The label text or %NULL if no label should be displayed
*/
const gchar *
shell_realms_window_frames_label_for_window (ShellRealmsWindowFrames *frames, MetaWindow *window)
{
if (!shell_realms_window_frames_has_frame (frames, window)) {
return NULL;
}
if (meta_window_get_window_type (window) != META_WINDOW_NORMAL) {
return NULL;
}
ShellRealms *realms = shell_realms_get_default();
if (shell_realms_is_citadel_window (realms, window)) {
return "Citadel";
} else {
return shell_realms_window_frames_realm_name_for_window (frames, realms, window);
}
}

View File

@ -0,0 +1,17 @@
#ifndef __SHELL_REALMS_WINDOW_FRAMES_H__
#define __SHELL_REALMS_WINDOW_FRAMES_H__
#include <glib-object.h>
#include <clutter/clutter.h>
#include <meta/window.h>
#define SHELL_TYPE_REALMS_WINDOW_FRAMES (shell_realms_window_frames_get_type())
G_DECLARE_FINAL_TYPE (ShellRealmsWindowFrames, shell_realms_window_frames, SHELL, REALMS_WINDOW_FRAMES, GObject)
gboolean shell_realms_window_frames_has_frame (ShellRealmsWindowFrames *frames, MetaWindow *window);
gboolean shell_realms_window_frames_is_frame_enabled (ShellRealmsWindowFrames *frames, MetaWindow *window);
void shell_realms_window_frames_set_frame_enabled (ShellRealmsWindowFrames *frames, MetaWindow *window, gboolean enabled);
ClutterColor *shell_realms_window_frames_color_for_window (ShellRealmsWindowFrames *frames, MetaWindow *window);
const gchar *shell_realms_window_frames_label_for_window (ShellRealmsWindowFrames *frames, MetaWindow *window);
#endif // __SHELL_REALMS_WINDOW_FRAMES_H__

460
src/shell-realms.c Normal file
View File

@ -0,0 +1,460 @@
#include <meta/display.h>
#include <meta/meta-workspace-manager.h>
#include "shell-realm-item.h"
#include "shell-realm-tracker.h"
#include "shell-realms-private.h"
#include "shell-global.h"
struct _ShellRealms {
GObject parent;
GHashTable *realms;
GList *running_realms;
ShellRealmItem *current_realm;
ShellRealmsWindowFrames *frames;
};
G_DEFINE_TYPE (ShellRealms, shell_realms, G_TYPE_OBJECT);
enum {
REALM_CONTEXT_SWITCHED,
LAST_SIGNAL,
};
enum {
PROP_0,
PROP_CURRENT_REALM,
};
static guint shell_realms_signals [LAST_SIGNAL] = { 0 };
/**
* shell_realms_current_realm:
* @realms: A #ShellRealms instance
*
* Returns: (transfer none) (nullable): The current realm as a #ShellRealmItem
* or %NULL if no realm is current.
*/
ShellRealmItem *
shell_realms_current_realm (ShellRealms *realms)
{
return realms->current_realm;
}
/**
* shell_realms_realm_by_name:
* @realms: a #ShellRealms instance
* @realm_name: The name of a realm to look up
*
* Returns: (transfer none) (nullable): A realm #ShellRealmItem or %NULL
* if name not found
*/
ShellRealmItem *
shell_realms_realm_by_name(ShellRealms *realms, const gchar *realm_name)
{
ShellRealmItem *item = g_hash_table_lookup (realms->realms, realm_name);
if (!item) {
g_warning("ShellRealms: No realm found for name '%s'", realm_name);
}
return item;
}
/**
* shell_realms_realm_by_context_id:
* @realms: a #ShellRealms instance
* @context_id: A context id to search for.
*
* Returns: (transfer none) (nullable): The realm #ShellRealmItem for the realm
* with a workspace context id matching the specified value or %NULL if no such realm is found
*/
ShellRealmItem *
shell_realms_realm_by_context_id (ShellRealms *realms, guint context_id)
{
if (context_id == 0) {
return NULL;
}
for (GList *iter = realms->running_realms; iter; iter = iter->next) {
ShellRealmItem *item = iter->data;
if (shell_realm_item_get_context_id (item) == context_id) {
return item;
}
}
return NULL;
}
/**
* shell_realms_realm_by_window:
* @realms: a #ShellRealms instance
* @window: A window to find the corresponding realm for.
*
* Returns: (transfer none) (nullable): The realm #ShellRealmItem for the realm
* the application the window belongs to is running in or %NULL if no realm is found
*/
ShellRealmItem *
shell_realms_realm_by_window (ShellRealms *realms, MetaWindow *window)
{
const char *window_ns = meta_window_namespace (window);
if (!window_ns) {
return NULL;
}
for (GList *iter = realms->running_realms; iter; iter = iter->next) {
ShellRealmItem *item = iter->data;
if (g_strcmp0 (window_ns, shell_realm_item_get_namespace (item)) == 0) {
return item;
}
}
return NULL;
}
/**
* shell_realms_is_citadel_window:
* @realms: A #ShellRealms instance
* @window: A #MetaWindow
*
* Return #TRUE if the window belongs to an application running inside of Citadel
* rather than running in a realm.
*
* Returns: If window belongs to an application running in Citadel return #True
*/
gboolean
shell_realms_is_citadel_window (ShellRealms *realms, MetaWindow *window)
{
MetaDisplay *display = shell_global_get_display (shell_global_get());
MetaWorkspaceManager *workspace_manager = meta_display_get_workspace_manager (display);
const char *mutter_ns = meta_workspace_manager_mutter_namespace (workspace_manager);
const char *window_ns = meta_window_namespace (window);
return g_strcmp0 (mutter_ns, window_ns) == 0;
}
/**
* shell_realms_get_running_realms:
* @realms: the #ShellRealms instance
*
* Returns all running realms as a list of #ShellRealmItem
*
* Returns: (transfer none) (element-type ShellRealmItem): a list of
* #ShellRealmItem for all running realms.
*
*/
GList *
shell_realms_get_running_realms (ShellRealms *realms)
{
return realms->running_realms;
}
/**
* shell_realms_get_all_realms:
* @realms: the #ShellRealms instance
*
* Returns all realms as a list of #ShellRealmItem
*
* Returns: (transfer container) (element-type ShellRealmItem): all realms as
* a list of #ShellRealmItem
*/
GList *
shell_realms_get_all_realms (ShellRealms *realms)
{
return g_hash_table_get_values (realms->realms);
}
/**
* shell_realms_window_frames:
* @realms: the #ShellRealms instance
*
* Returns the window frames manager.
*
* Returns: (transfer none): a #ShellRealmsWindowFrames instance
*/
ShellRealmsWindowFrames *
shell_realms_window_frames (ShellRealms *realms)
{
return realms->frames;
}
static gboolean
shell_realms_is_on_running_list (ShellRealms *realms, ShellRealmItem *item)
{
return (g_list_index (realms->running_realms, item) >= 0);
}
static void
shell_realms_remove_running_realm (ShellRealms *realms, ShellRealmItem *item)
{
if (!shell_realms_is_on_running_list (realms, item)) {
return;
}
realms->running_realms = g_list_remove(realms->running_realms, item);
g_object_unref (item);
}
static void
shell_realms_update_running_list_for_item (ShellRealms *realms, ShellRealmItem *item)
{
gboolean running = shell_realm_item_is_running (item);
if (running) {
if (!shell_realms_is_on_running_list (realms, item)) {
realms->running_realms = g_list_append (realms->running_realms, g_object_ref (item));
}
// If realm is current realm, make sure it's at the front of the list
if (shell_realm_item_is_current (item) && g_list_index (realms->running_realms, item) > 0) {
realms->running_realms = g_list_remove (realms->running_realms, item);
realms->running_realms = g_list_prepend (realms->running_realms, item);
}
} else {
shell_realms_remove_running_realm (realms, item);
}
}
static void
shell_realms_set_current_item (ShellRealms *realms, ShellRealmItem *item)
{
if (realms->current_realm == item) {
return;
} else if (realms->current_realm) {
shell_realm_item_set_current_flag (realms->current_realm, FALSE);
}
shell_realm_item_set_current_flag (item, TRUE);
realms->current_realm = item;
}
/*
* If a realm already exists for 'realm_name' update it with provided information, otherwise
* create a new ShellRealmItem and add it to hash table unless it is a system realm. Returns
* the existing or newly created ShellRealmItem or returns NULL if the realm is a system realm.
*/
static ShellRealmItem *
shell_realms_add_realm_item (ShellRealms *realms,
const char *realm_name,
const char *description,
const char *namespace,
guint8 status)
{
ShellRealmItem *item = g_hash_table_lookup (realms->realms, realm_name);
if (item) {
shell_realm_item_update (item, realm_name, namespace, status);
return item;
}
item = shell_realm_item_new (realm_name, description, namespace, status);
if (shell_realm_item_is_system (item)) {
g_clear_object(&item);
return NULL;
}
g_hash_table_insert (realms->realms, g_strdup (realm_name), item);
return item;
}
void
shell_realms_update_realm (ShellRealms *realms,
const char *realm_name,
const char *description,
const char *namespace,
guint8 status)
{
ShellRealmItem *item = shell_realms_add_realm_item (realms, realm_name, description, namespace, status);
// Ignore system realms
if (!item) {
return;
}
shell_realms_update_running_list_for_item (realms, item);
shell_realm_item_set_tagged (item, TRUE);
// If realm is current, make sure it has a context. This also ensures that the
// first context requested is for the current realm.
if (shell_realm_item_is_current (item)) {
shell_realms_set_current_item (realms, item);
shell_realm_item_acquire_context (item);
}
}
// When processing list of realms returned from "List" dbus method,
//
// 1) first all the existing realms are "untagged"
// 2) As each realm on list is processed it is marked as "tagged"
// 3) After processing list, realm items that are not tagged were not in list
// returned from server so remove them.
//
void
shell_realms_untag_all (ShellRealms *realms)
{
GList *item_list = g_hash_table_get_values (realms->realms);
for (GList *iter = item_list; iter; iter = iter->next) {
ShellRealmItem *item = iter->data;
shell_realm_item_set_tagged (item, FALSE);
iter = iter->next;
}
g_list_free (item_list);
}
void
shell_realms_remove_untagged (ShellRealms *realms)
{
GHashTableIter iter;
gpointer value;
g_hash_table_iter_init (&iter, realms->realms);
while (g_hash_table_iter_next (&iter, NULL, &value)) {
ShellRealmItem *item = value;
if (!shell_realm_item_is_tagged (item)) {
shell_realms_remove_running_realm (realms, item);
g_hash_table_iter_remove (&iter);
}
}
}
// Signal handlers
void
shell_realms_on_realm_started (ShellRealms *realms, const gchar *realm_name, const gchar *namespace, guint8 status)
{
ShellRealmItem *item = shell_realms_realm_by_name (realms, realm_name);
if (item) {
shell_realm_item_update (item, realm_name, namespace, status);
if (!shell_realm_item_is_system (item)) {
shell_realms_update_running_list_for_item (realms, item);
shell_realm_item_acquire_context (item);
}
}
}
void
shell_realms_on_realm_current (ShellRealms *realms, const gchar *realm_name)
{
ShellRealmItem *item = shell_realms_realm_by_name (realms, realm_name);
if (item && realms->current_realm != item) {
shell_realms_set_current_item (realms, item);
shell_realms_update_running_list_for_item (realms, item);
shell_realm_item_activate_context (item);
g_signal_emit (realms, shell_realms_signals[REALM_CONTEXT_SWITCHED], 0);
}
}
void
shell_realms_on_realm_stopped (ShellRealms *realms, const gchar *realm_name)
{
ShellRealmItem *item = shell_realms_realm_by_name (realms, realm_name);
if (item) {
shell_realm_item_set_running_flag (item, FALSE);
shell_realms_remove_running_realm (realms, item);
}
}
void
shell_realms_on_realm_removed (ShellRealms *realms, const gchar *realm_name)
{
ShellRealmItem *item = shell_realms_realm_by_name (realms, realm_name);
if (item) {
shell_realms_remove_running_realm (realms, item);
g_hash_table_remove (realms->realms, realm_name);
}
}
void
shell_realms_on_realm_new (ShellRealms *realms, const gchar *realm_name, const gchar *description, guint8 status)
{
if (!g_hash_table_contains (realms->realms, realm_name)) {
(void) shell_realms_add_realm_item (realms, realm_name, description, NULL, status);
} else {
g_warning("ShellRealms: RealmNew signal received for realm '%s' but it already exists", realm_name);
}
}
/**
* shell_realms_get_default:
*
* Return Value: (transfer none): The global #ShellRealms singleton
*/
ShellRealms *
shell_realms_get_default(void)
{
static ShellRealms *instance;
if (instance == NULL) {
instance = g_object_new (SHELL_TYPE_REALMS, NULL);
}
return instance;
}
static void
shell_realms_init(ShellRealms *realms)
{
realms->realms = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
realms->running_realms = NULL;
realms->current_realm = NULL;
realms->frames = g_object_new (SHELL_TYPE_REALMS_WINDOW_FRAMES, NULL);
}
static void
shell_realms_finalize (GObject *obj)
{
ShellRealms *realms = SHELL_REALMS (obj);
realms->current_realm = NULL;
g_list_free_full (realms->running_realms, g_object_unref);
g_hash_table_destroy (realms->realms);
g_object_unref (realms->frames);
realms->frames = NULL;
G_OBJECT_CLASS (shell_realms_parent_class)->finalize (obj);
}
static void
shell_realms_get_property (GObject *gobject,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
ShellRealms *realms = SHELL_REALMS (gobject);
switch (prop_id) {
case PROP_CURRENT_REALM:
if (realms->current_realm) {
g_value_set_object (value, realms->current_realm);
}
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
break;
}
}
static void
shell_realms_class_init (ShellRealmsClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->get_property = shell_realms_get_property;
object_class->finalize = shell_realms_finalize;
shell_realms_signals[REALM_CONTEXT_SWITCHED] =
g_signal_new ("realm-context-switched",
G_TYPE_FROM_CLASS(klass),
G_SIGNAL_RUN_LAST,
0,
NULL, NULL, NULL,
G_TYPE_NONE, 0);
g_object_class_install_property (object_class,
PROP_CURRENT_REALM,
g_param_spec_object ("current-realm",
"Current Realm",
"The currently active realm",
SHELL_TYPE_REALM_ITEM,
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
}

26
src/shell-realms.h Normal file
View File

@ -0,0 +1,26 @@
#ifndef __SHELL_REALMS_H__
#define __SHELL_REALMS_H__
#include <glib-object.h>
#include <meta/window.h>
#include "shell-realm-item.h"
#include "shell-realms-window-frames.h"
#define SHELL_TYPE_REALMS (shell_realms_get_type())
G_DECLARE_FINAL_TYPE(ShellRealms, shell_realms, SHELL, REALMS, GObject)
ShellRealms *shell_realms_get_default(void);
ShellRealmItem *shell_realms_current_realm (ShellRealms *realms);
ShellRealmItem *shell_realms_realm_by_name(ShellRealms *realms, const gchar *realm_name);
ShellRealmItem *shell_realms_realm_by_context_id (ShellRealms *realms, guint context_id);
ShellRealmItem *shell_realms_realm_by_window (ShellRealms *realms, MetaWindow *window);
gboolean shell_realms_is_citadel_window (ShellRealms *realms, MetaWindow *window);
ShellRealmsWindowFrames *shell_realms_window_frames (ShellRealms *realms);
GList *shell_realms_get_running_realms (ShellRealms *realms);
GList *shell_realms_get_all_realms (ShellRealms *realms);
#endif //__SHELL_REALMS_H__

View File

@ -15,6 +15,7 @@
#include "shell-window-tracker-private.h"
#include "shell-app-private.h"
#include "shell-global.h"
#include "shell-realms.h"
#include "st.h"
/* This file includes modified code from
@ -129,6 +130,22 @@ check_app_id_prefix (ShellApp *app,
return g_str_has_prefix (shell_app_get_id (app), prefix);
}
static const char *
get_window_realm_name (MetaWindow *window) {
ShellRealms *realms = shell_realms_get_default();
if (shell_realms_is_citadel_window (realms, window)) {
return NULL;
}
ShellRealmItem *item = shell_realms_realm_by_window(realms, window);
if (item) {
return shell_realm_item_get_realm_name (item);
} else {
return NULL;
}
}
/*
* get_app_from_window_wmclass:
*
@ -146,6 +163,7 @@ get_app_from_window_wmclass (MetaWindow *window)
const char *wm_class;
const char *wm_instance;
const char *sandbox_id;
const char *realm_name;
g_autofree char *app_prefix = NULL;
appsys = shell_app_system_get_default ();
@ -154,6 +172,8 @@ get_app_from_window_wmclass (MetaWindow *window)
if (sandbox_id)
app_prefix = g_strdup_printf ("%s.", sandbox_id);
realm_name = get_window_realm_name (window);
/* Notes on the heuristics used here:
much of the complexity here comes from the desire to support
Chrome apps.
@ -191,23 +211,23 @@ get_app_from_window_wmclass (MetaWindow *window)
/* first try a match from WM_CLASS (instance part) to StartupWMClass */
wm_instance = meta_window_get_wm_class_instance (window);
app = shell_app_system_lookup_startup_wmclass (appsys, wm_instance);
app = shell_app_system_lookup_startup_wmclass (appsys, wm_instance, realm_name);
if (app != NULL && check_app_id_prefix (app, app_prefix))
return g_object_ref (app);
/* then try a match from WM_CLASS to StartupWMClass */
wm_class = meta_window_get_wm_class (window);
app = shell_app_system_lookup_startup_wmclass (appsys, wm_class);
app = shell_app_system_lookup_startup_wmclass (appsys, wm_class, realm_name);
if (app != NULL && check_app_id_prefix (app, app_prefix))
return g_object_ref (app);
/* then try a match from WM_CLASS (instance part) to .desktop */
app = shell_app_system_lookup_desktop_wmclass (appsys, wm_instance);
app = shell_app_system_lookup_desktop_wmclass (appsys, wm_instance, realm_name);
if (app != NULL && check_app_id_prefix (app, app_prefix))
return g_object_ref (app);
/* finally, try a match from WM_CLASS to .desktop */
app = shell_app_system_lookup_desktop_wmclass (appsys, wm_class);
app = shell_app_system_lookup_desktop_wmclass (appsys, wm_class, realm_name);
if (app != NULL && check_app_id_prefix (app, app_prefix))
return g_object_ref (app);
@ -236,7 +256,19 @@ get_app_from_id (MetaWindow *window,
appsys = shell_app_system_get_default ();
desktop_file = g_strconcat (id, ".desktop", NULL);
const char *realm_name = NULL;
ShellRealms *realms = shell_realms_get_default();
ShellRealmItem *item = shell_realms_realm_by_window (realms, window);
if (item) {
realm_name = shell_realm_item_get_realm_name (item);
}
if (realm_name) {
desktop_file = g_strconcat ("realm-", realm_name, ".", id, ".desktop", NULL);
} else {
desktop_file = g_strconcat (id, ".desktop", NULL);
}
app = shell_app_system_lookup_app (appsys, desktop_file);
if (app)
return g_object_ref (app);

View File

@ -39,6 +39,7 @@
</description>
<releases>
<release version="41.1" date="2021-11-03"/>
<release version="41.0" date="2021-09-19"/>
</releases>

View File

@ -9,7 +9,7 @@ endif
launcherconf.set('prefix', prefix)
launcherconf.set('libdir', libdir)
launcherconf.set('pkgdatadir', pkgdatadir)
launcherconf.set('gjs', gjs.path())
launcherconf.set('gjs', gjs)
configure_file(
input: prgname + '.in',

View File

@ -1,5 +1,5 @@
project('gnome-extensions-app',
version: '41.0',
version: '41.1',
meson_version: '>= 0.53.0',
license: 'GPLv2+'
)
@ -44,7 +44,7 @@ localedir = join_paths(datadir, 'locale')
metainfodir = join_paths(datadir, 'metainfo')
servicedir = join_paths(datadir, 'dbus-1', 'services')
gjs = find_program('gjs')
gjs = '/usr/bin/gjs'
appstream_util = find_program('appstream-util', required: false)
desktop_file_validate = find_program('desktop-file-validate', required: false)

View File

@ -1,5 +1,5 @@
project('gnome-extensions-tool', 'c',
version: '41.0',
version: '41.1',
meson_version: '>= 0.53.0',
license: 'GPLv2+'
)

View File

@ -1,5 +1,5 @@
project('shew', 'c',
version: '41.0',
version: '41.1',
meson_version: '>= 0.53.0',
license: 'LGPLv2+',
)