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
68 changed files with 5801 additions and 2707 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

@ -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

@ -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

@ -116,27 +116,37 @@ var ExtensionsService = class extends ServiceImplementation {
if (this._handleError(invocation, error))
return;
if (this._prefsDialog) {
this._handleError(invocation,
new Error('Already showing a prefs dialog'));
return;
}
const [serialized] = res;
const extension = ExtensionUtils.deserializeExtension(serialized);
const window = new ExtensionPrefsDialog(extension);
window.connect('realize', () => {
this._prefsDialog = new ExtensionPrefsDialog(extension);
this._prefsDialog.connect('realize', () => {
let externalWindow = null;
if (parentWindow)
externalWindow = Shew.ExternalWindow.new_from_handle(parentWindow);
if (externalWindow)
externalWindow.set_parent_of(window.get_surface());
externalWindow.set_parent_of(this._prefsDialog.get_surface());
});
if (options.modal)
window.modal = options.modal.get_boolean();
this._prefsDialog.modal = options.modal.get_boolean();
window.connect('destroy', () => this.release());
this._prefsDialog.connect('close-request', () => {
delete this._prefsDialog;
this.release();
return false;
});
this.hold();
window.show();
this._prefsDialog.show();
invocation.return_value(null);
});

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

@ -111,6 +111,8 @@ class InputMethod extends Clutter.InputMethod {
return;
let preedit = text.get_text();
if (preedit === '')
preedit = null;
if (visible)
this.set_preedit_text(preedit, pos, mode);
@ -165,7 +167,7 @@ class InputMethod extends Clutter.InputMethod {
if (this._context)
this._context.focus_out();
if (this._preeditStr) {
if (this._preeditStr && this._preeditVisible) {
// Unset any preedit text
this.set_preedit_text(null, 0, this._preeditCommitMode);
this._preeditStr = null;
@ -184,11 +186,7 @@ class InputMethod extends Clutter.InputMethod {
this._emitRequestSurrounding();
}
if (this._preeditStr !== null) {
// Unset any preedit text
this.set_preedit_text(null, 0, Clutter.PreeditResetMode.CLEAR);
this._preeditStr = null;
}
this._preeditStr = null;
}
vfunc_set_cursor_location(rect) {

View File

@ -201,20 +201,23 @@ function _easeActor(actor, params) {
actor.set(params);
actor.restore_easing_state();
let transition = animatedProps.map(p => actor.get_transition(p))
.find(t => t !== null);
const transitions = animatedProps
.map(p => actor.get_transition(p))
.filter(t => t !== null);
transitions.forEach(t => t.set({ repeatCount, autoReverse }));
const [transition] = transitions;
if (transition && transition.delay)
transition.connect('started', () => prepare());
else
prepare();
if (transition) {
transition.set({ repeatCount, autoReverse });
if (transition)
transition.connect('stopped', (t, finished) => callback(finished));
} else {
else
callback(true);
}
}
function _easeActorProperty(actor, propName, target, params) {

View File

@ -974,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;
@ -987,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

@ -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;
@ -264,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

@ -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

@ -71,7 +71,7 @@ const _modes = {
'user': {
hasOverview: true,
showCalendarEvents: true,
showCalendarEvents: false,
showWelcomeDialog: true,
allowSettings: true,
allowExtensions: true,

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

@ -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

@ -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;
@ -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+'
)
@ -19,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'
@ -72,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')
@ -81,7 +81,6 @@ gi_dep = dependency('gobject-introspection-1.0', version: gi_req)
gio_dep = dependency('gio-2.0', version: gio_req)
gio_unix_dep = dependency('gio-unix-2.0', version: gio_req)
gjs_dep = dependency('gjs-1.0', version: gjs_req)
gmodule_dep = dependency('gmodule-2.0')
gtk_dep = dependency('gtk+-3.0', version: gtk_req)
libxml_dep = dependency('libxml-2.0')
clutter_dep = dependency(clutter_pc, version: mutter_req)
@ -140,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')

273
po/de.po
View File

@ -24,9 +24,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-08-25 14:56+0000\n"
"PO-Revision-Date: 2021-08-29 19:32+0200\n"
"Last-Translator: Tim Sabsch <tim@sabsch.com>\n"
"POT-Creation-Date: 2021-11-03 17:53+0000\n"
"PO-Revision-Date: 2021-11-03 21:32+0100\n"
"Last-Translator: Christian Kirbach <christian.kirbach@gmail.com>\n"
"Language-Team: Deutsch <gnome-de@gnome.org>\n"
"Language: de\n"
"MIME-Version: 1.0\n"
@ -270,23 +270,11 @@ msgstr ""
"noch nicht existieren. Diese riesige Zahl kann dazu verwendet werden, diesen "
"Dialog praktisch zu deaktivieren."
#: data/org.gnome.shell.gschema.xml.in:109
msgid "Enable introspection API"
msgstr "Introspection-API aktivieren"
#: 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 ""
"Aktiviert eine D_Bus-API, die Einblicke in den Anwendungsstatus der Shell "
"gewährt."
#: data/org.gnome.shell.gschema.xml.in:141
#: data/org.gnome.shell.gschema.xml.in:133
msgid "Layout of the app picker"
msgstr "Ausrichtung der Anwendungsauswahl"
#: 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 "
@ -299,110 +287,110 @@ msgstr ""
"Aktuell werden die folgenden Werte innerhalb von »data« gespeichert: • "
"»position«: Die Position des Anwendungssymbols auf der Seite"
#: data/org.gnome.shell.gschema.xml.in:157
#: data/org.gnome.shell.gschema.xml.in:149
msgid "Keybinding to open the application menu"
msgstr "Tastenkombination zum Öffnen des Anwendungsmenüs"
#: data/org.gnome.shell.gschema.xml.in:158
#: data/org.gnome.shell.gschema.xml.in:150
msgid "Keybinding to open the application menu."
msgstr "Tastenkombination zum Öffnen des Anwendungsmenüs."
#: 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 "Tastenkürzel, um zwischen Übersichts-Modi zu wechseln"
#: 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 ""
"Tastenkürzel, um zwischen Sitzung, Fensterwähler und Anwendungsraster zu "
"wechseln"
#: 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 ""
"Tastenkürzel, um zwischen Anwendungsraster, Fensterwähler und Sitzung zu "
"wechseln"
#: 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 "Tastenkombination zum Öffnen der »Anwendungen anzeigen«-Ansicht"
#: 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 ""
"Tastenkombination zum Öffnen der »Anwendungen anzeigen«-Ansicht der "
"Aktivitätenübersicht."
#: data/org.gnome.shell.gschema.xml.in:186
#: data/org.gnome.shell.gschema.xml.in:178
msgid "Keybinding to open the overview"
msgstr "Tastenkombination zum Öffnen der Übersicht"
#: data/org.gnome.shell.gschema.xml.in:187
#: data/org.gnome.shell.gschema.xml.in:179
msgid "Keybinding to open the Activities Overview."
msgstr "Tastenkombination zum Öffnen der »Aktivitäten«-Übersicht."
#: 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 ""
"Tastenkombination zum Umschalten der Sichtbarkeit der Benachrichtigungsliste"
#: 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 ""
"Tastenkombination zum Umschalten der Sichtbarkeit der Benachrichtigungsliste."
#: data/org.gnome.shell.gschema.xml.in:200
#: data/org.gnome.shell.gschema.xml.in:192
msgid "Keybinding to focus the active notification"
msgstr "Tastenkombination zur Ausrichtung auf die aktiven Benachrichtigungen"
#: data/org.gnome.shell.gschema.xml.in:201
#: data/org.gnome.shell.gschema.xml.in:193
msgid "Keybinding to focus the active notification."
msgstr "Tastenkombination zur Ausrichtung auf die aktiven Benachrichtigungen."
#: data/org.gnome.shell.gschema.xml.in:207
#: data/org.gnome.shell.gschema.xml.in:199
msgid "Switch to application 1"
msgstr "Zu Anwendung 1 wechseln"
#: data/org.gnome.shell.gschema.xml.in:211
#: data/org.gnome.shell.gschema.xml.in:203
msgid "Switch to application 2"
msgstr "Zu Anwendung 2 wechseln"
#: data/org.gnome.shell.gschema.xml.in:215
#: data/org.gnome.shell.gschema.xml.in:207
msgid "Switch to application 3"
msgstr "Zu Anwendung 3 wechseln"
#: data/org.gnome.shell.gschema.xml.in:219
#: data/org.gnome.shell.gschema.xml.in:211
msgid "Switch to application 4"
msgstr "Zu Anwendung 4 wechseln"
#: data/org.gnome.shell.gschema.xml.in:223
#: data/org.gnome.shell.gschema.xml.in:215
msgid "Switch to application 5"
msgstr "Zu Anwendung 5 wechseln"
#: data/org.gnome.shell.gschema.xml.in:227
#: data/org.gnome.shell.gschema.xml.in:219
msgid "Switch to application 6"
msgstr "Zu Anwendung 6 wechseln"
#: data/org.gnome.shell.gschema.xml.in:231
#: data/org.gnome.shell.gschema.xml.in:223
msgid "Switch to application 7"
msgstr "Zu Anwendung 7 wechseln"
#: data/org.gnome.shell.gschema.xml.in:235
#: data/org.gnome.shell.gschema.xml.in:227
msgid "Switch to application 8"
msgstr "Zu Anwendung 8 wechseln"
#: data/org.gnome.shell.gschema.xml.in:239
#: data/org.gnome.shell.gschema.xml.in:231
msgid "Switch to application 9"
msgstr "Zu Anwendung 9 wechseln"
#: 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 "Fensterwechsler auf aktuelle Arbeitsfläche einschränken."
#: 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."
@ -411,11 +399,11 @@ msgstr ""
"Fenster auf der aktuellen Arbeitsfläche haben. Andernfalls sind alle "
"Anwendungen enthalten."
#: data/org.gnome.shell.gschema.xml.in:266
#: data/org.gnome.shell.gschema.xml.in:258
msgid "The application icon mode."
msgstr "Der Modus der Anwendungssymbole."
#: 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-"
@ -425,7 +413,7 @@ msgstr ""
"sind »thumbnail-only« (Vorschaubilder der Fenster werden angezeigt), »app-"
"icon-only« (Nur das Anwendungssymbol wird angezeigt) oder »both« (beides)."
#: 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."
@ -433,60 +421,60 @@ msgstr ""
"Legt fest, ob Fenster der aktuellen Arbeitsfläche im Fensterwechsler "
"aufgeführt werden. Andernfalls sind alle Fenster enthalten."
#: data/org.gnome.shell.gschema.xml.in:286
#: data/org.gnome.shell.gschema.xml.in:278
msgid "Locations"
msgstr "Orte"
#: 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 "Die von den Weltuhren anzuzeigenden Orte"
#: data/org.gnome.shell.gschema.xml.in:297
#: data/org.gnome.shell.gschema.xml.in:289
msgid "Automatic location"
msgstr "Automatischer Ort"
#: 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 "Legt fest, ob der aktuelle Ort automatisch bestimmt werden soll"
#: data/org.gnome.shell.gschema.xml.in:305
#: data/org.gnome.shell.gschema.xml.in:297
msgid "Location"
msgstr "Ort"
#: 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 "Der Ort, für den ein Wetterbericht angezeigt werden soll"
#: 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 "Modalen Dialog an übergeordnetes Fenster binden"
#: 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 ""
"Dieser Schlüssel überschreibt den Schlüssel in org.gnome.mutter, wenn die "
"GNOME-Shell läuft."
#: 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 ""
"Größenanpassung einschalten, wenn ein Fenster an die Bildschirmkante "
"verschoben wird"
#: data/org.gnome.shell.gschema.xml.in:335
#: data/org.gnome.shell.gschema.xml.in:327
msgid "Workspaces are managed dynamically"
msgstr "Arbeitsflächen dynamisch verwalten"
#: data/org.gnome.shell.gschema.xml.in:343
#: data/org.gnome.shell.gschema.xml.in:335
msgid "Workspaces only on primary monitor"
msgstr "Arbeitsflächen nur auf dem primären Bildschirm"
#: 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 ""
"Fokuswechsel im Mausmodus verzögern, bis sich der Zeiger nicht mehr bewegt"
@ -523,18 +511,18 @@ msgid "Visit extension homepage"
msgstr "Internetseite der Erweiterung besuchen"
#: 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 "Abbrechen"
#. 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 "Passwort"
@ -557,8 +545,8 @@ msgstr "(z.B. Benutzer oder %s)"
#. TTLS and PEAP are actually much more complicated, but this complication
#. is not visible here since we only care about phase2 authentication
#. (and don't even care of which one)
#: js/gdm/loginDialog.js: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 "Benutzername"
@ -663,65 +651,65 @@ msgctxt "search-result"
msgid "Lock Screen Rotation"
msgstr "Bildschirmdrehung sperren"
#: js/misc/util.js:120
#: js/misc/util.js:121
msgid "Command not found"
msgstr "Befehl nicht gefunden"
#. 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 "Befehl konnte nicht verarbeitet werden:"
#: js/misc/util.js:164
#: js/misc/util.js:165
#, javascript-format
msgid "Execution of “%s” failed:"
msgstr "Ausführung von »%s« ist gescheitert:"
#: js/misc/util.js:181
#: js/misc/util.js:182
msgid "Just now"
msgstr "Gerade eben"
#: js/misc/util.js:183
#: js/misc/util.js:184
#, javascript-format
msgid "%d minute ago"
msgid_plural "%d minutes ago"
msgstr[0] "vor %d Minute"
msgstr[1] "vor %d Minuten"
#: js/misc/util.js:187
#: js/misc/util.js:188
#, javascript-format
msgid "%d hour ago"
msgid_plural "%d hours ago"
msgstr[0] "vor %d Stunde"
msgstr[1] "vor %d Stunden"
#: js/misc/util.js:191 js/ui/dateMenu.js:162
#: js/misc/util.js:192 js/ui/dateMenu.js:162
msgid "Yesterday"
msgstr "Gestern"
#: js/misc/util.js:193
#: js/misc/util.js:194
#, javascript-format
msgid "%d day ago"
msgid_plural "%d days ago"
msgstr[0] "vor %d Tag"
msgstr[1] "vor %d Tagen"
#: js/misc/util.js:197
#: js/misc/util.js:198
#, javascript-format
msgid "%d week ago"
msgid_plural "%d weeks ago"
msgstr[0] "vor %d Woche"
msgstr[1] "vor %d Wochen"
#: js/misc/util.js:201
#: js/misc/util.js:202
#, javascript-format
msgid "%d month ago"
msgid_plural "%d months ago"
msgstr[0] "vor %d Monat"
msgstr[1] "vor %d Monaten"
#: js/misc/util.js:204
#: js/misc/util.js:205
#, javascript-format
msgid "%d year ago"
msgid_plural "%d years ago"
@ -729,20 +717,20 @@ msgstr[0] "vor %d Jahr"
msgstr[1] "vor %d Jahren"
#. 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 "Gestern, %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"
@ -750,7 +738,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 "%e. %B, %H%M"
@ -758,7 +746,7 @@ msgstr "%e. %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 "%e. %B %Y, %H:%M"
@ -766,20 +754,20 @@ msgstr "%e. %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 "Gestern, %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"
@ -787,7 +775,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 "%e. %B, %l%M %p"
@ -795,7 +783,7 @@ msgstr "%e. %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 "%e. %B %Y, %l:%M %p"
@ -1054,40 +1042,40 @@ msgstr ""
msgid "Open with %s"
msgstr "Öffnen mit %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 ""
"Alternativ können Sie sich verbinden, indem Sie den »WPS«-Knopf an Ihrem "
"Router drücken."
#: 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 "Verbinden"
#: js/ui/components/networkAgent.js:216
#: js/ui/components/networkAgent.js:215
msgid "Key"
msgstr "Schlüssel"
#: 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 "Passwort für geheimen Schlüssel"
#: js/ui/components/networkAgent.js:275
#: js/ui/components/networkAgent.js:274
msgid "Identity"
msgstr "Identität"
#: js/ui/components/networkAgent.js:289
#: js/ui/components/networkAgent.js:288
msgid "Service"
msgstr "Dienst"
#: 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 "Anmeldung erforderlich"
#: 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 "
@ -1096,31 +1084,31 @@ msgstr ""
"Passwörter oder Schlüssel sind erforderlich, um auf das Drahtlosnetzwerk "
"»%s« zuzugreifen."
#: 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 "Kabelgebundene 802.1X-Anmeldung"
#: js/ui/components/networkAgent.js:325
#: js/ui/components/networkAgent.js:324
msgid "Network name"
msgstr "Netzwerkname"
#: 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-Anmeldung"
#: 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-Code ist erforderlich"
#: 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 "Für das mobile Breitbandgerät wird ein PIN-Code benötigt"
#: 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
@ -1413,24 +1401,24 @@ msgstr "%s (Entfernt)"
msgid "%s (console)"
msgstr "%s (Konsole)"
#: js/ui/extensionDownloader.js:234
#: js/ui/extensionDownloader.js:232
msgid "Install"
msgstr "Installieren"
#: js/ui/extensionDownloader.js:240
#: js/ui/extensionDownloader.js:238
msgid "Install Extension"
msgstr "Erweiterung installieren"
#: js/ui/extensionDownloader.js:241
#: js/ui/extensionDownloader.js:239
#, javascript-format
msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "»%s« von extensions.gnome.org herunterladen und installieren?"
#: js/ui/extensionSystem.js:253
#: js/ui/extensionSystem.js:252
msgid "Extension Updates Available"
msgstr "Aktualisierungen für Erweiterungen verfügbar"
#: js/ui/extensionSystem.js:254
#: js/ui/extensionSystem.js:253
msgid "Extension updates are ready to be installed."
msgstr "Aktualisierungen für Erweiterungen stehen bereit zur Installation."
@ -1527,7 +1515,7 @@ msgstr "Ausschalten"
msgid "Leave Off"
msgstr "Ausgeschaltet lassen"
#: js/ui/keyboard.js:227
#: js/ui/keyboard.js:226
msgid "Region & Language Settings"
msgstr "Regions- und Spracheinstellungen"
@ -1580,11 +1568,11 @@ msgstr "Quelle zeigen"
msgid "Web Page"
msgstr "Webseite"
#: js/ui/main.js:294
#: js/ui/main.js:290
msgid "Logged in as a privileged user"
msgstr "Als privilegierter Benutzer angemeldet"
#: 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."
@ -1593,11 +1581,11 @@ msgstr ""
"Sicherheitsgründen unterlassen werden. Falls möglich, melden Sie sich bitte "
"als normaler Benutzer an."
#: js/ui/main.js:344
#: js/ui/main.js:340
msgid "Screen Lock disabled"
msgstr "Bildschirmsperre deaktiviert"
#: js/ui/main.js:345
#: js/ui/main.js:341
msgid "Screen Locking requires the GNOME display manager."
msgstr "Die Sperrung des Bildschirms erfordert den GNOME Display-Manager."
@ -1635,47 +1623,47 @@ msgstr "Rückgängig"
msgid "Overview"
msgstr "Übersicht"
#: js/ui/padOsd.js:96
#: js/ui/padOsd.js:95
msgid "New shortcut…"
msgstr "Neue Tastenkombination …"
#: js/ui/padOsd.js:143
#: js/ui/padOsd.js:142
msgid "Application defined"
msgstr "Anwendung festgelegt"
#: js/ui/padOsd.js:144
#: js/ui/padOsd.js:143
msgid "Show on-screen help"
msgstr "Bildschirmhilfe anzeigen"
#: js/ui/padOsd.js:145
#: js/ui/padOsd.js:144
msgid "Switch monitor"
msgstr "Bildschirm wechseln"
#: js/ui/padOsd.js:146
#: js/ui/padOsd.js:145
msgid "Assign keystroke"
msgstr "Tastenkombination zuweisen"
#: js/ui/padOsd.js:212
#: js/ui/padOsd.js:211
msgid "Done"
msgstr "Erledigt"
#: js/ui/padOsd.js:718
#: js/ui/padOsd.js:716
msgid "Edit…"
msgstr "Bearbeiten …"
#: js/ui/padOsd.js:760 js/ui/padOsd.js:877
#: js/ui/padOsd.js:758 js/ui/padOsd.js:875
msgid "None"
msgstr "Keine"
#: js/ui/padOsd.js:831
#: js/ui/padOsd.js:829
msgid "Press a button to configure"
msgstr "Klicken Sie auf einen Knopf zum Einrichten"
#: js/ui/padOsd.js:832
#: js/ui/padOsd.js:830
msgid "Press Esc to exit"
msgstr "Drücken Sie Esc zum Abbrechen"
#: js/ui/padOsd.js:835
#: js/ui/padOsd.js:833
msgid "Press any key to exit"
msgstr "Drücken Sie eine beliebige Taste zum Beenden"
@ -1685,12 +1673,12 @@ msgstr "Drücken Sie eine beliebige Taste zum Beenden"
msgid "Activities"
msgstr "Aktivitäten"
#: js/ui/panel.js:542
#: js/ui/panel.js:556
msgctxt "System menu in the top bar"
msgid "System"
msgstr "System"
#: js/ui/panel.js:658
#: js/ui/panel.js:674
msgid "Top Bar"
msgstr "Obere Leiste"
@ -1729,7 +1717,7 @@ msgstr "Sperrung fehlgeschlagen"
msgid "Lock was blocked by an application"
msgstr "Sperrung wurde von einer Anwendung blockiert"
#: js/ui/screenshot.js:141
#: js/ui/screenshot.js:155
msgid "Screenshot taken"
msgstr "Bildschirmfoto aufgenommen"
@ -2802,6 +2790,7 @@ msgstr "Es werden eine UUID, ein Name und eine Beschreibung benötigt"
#: 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 "Fehler beim Verbinden zur GNOME Shell\n"
@ -2818,7 +2807,7 @@ msgstr "Eine Erweiterung deaktivieren"
#: 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"
@ -2827,7 +2816,7 @@ msgstr "Keine UUID angegeben"
#: 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"
@ -2957,7 +2946,14 @@ msgstr "Mehr als ein Quellordner angegeben"
msgid "Extension “%s” doesn't have preferences\n"
msgstr "Erweiterung »%s« hat keine Einstellungen\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 ""
"Das Öffnen der Einstellungen für die Erweiterung »%s« ist fehlgeschlagen: "
"%s\n"
#: subprojects/extensions-tool/src/command-prefs.c:87
msgid "Opens extension preferences"
msgstr "Öffnet die Erweiterungseinstellungen"
@ -2982,10 +2978,6 @@ msgstr "Eine Erweiterung deinstallieren"
msgid "Do not print error messages"
msgstr "Keine Fehlermeldungen ausgeben"
#: subprojects/extensions-tool/src/main.c:146
msgid "Failed to connect to GNOME Shell"
msgstr "Fehler beim Verbinden zur GNOME Shell"
#: subprojects/extensions-tool/src/main.c:244
msgid "Path"
msgstr "Pfad"
@ -3116,6 +3108,19 @@ msgstr[1] "%u Eingänge"
msgid "System Sounds"
msgstr "Systemklänge"
#~ msgid "Enable introspection API"
#~ msgstr "Introspection-API aktivieren"
#~ msgid ""
#~ "Enables a D-Bus API that allows to introspect the application state of "
#~ "the shell."
#~ msgstr ""
#~ "Aktiviert eine D_Bus-API, die Einblicke in den Anwendungsstatus der Shell "
#~ "gewährt."
#~ msgid "Failed to connect to GNOME Shell"
#~ msgstr "Fehler beim Verbinden zur GNOME Shell"
#~ msgid "Minimize"
#~ msgstr "Minimieren"

990
po/fa.po

File diff suppressed because it is too large Load Diff

275
po/id.po
View File

@ -11,8 +11,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-17 23:56+0000\n"
"PO-Revision-Date: 2021-08-22 11:44+0700\n"
"POT-Creation-Date: 2021-11-03 01:20+0000\n"
"PO-Revision-Date: 2021-11-03 17:00+0700\n"
"Last-Translator: Kukuh Syafaat <kukuhsyafaat@gnome.org>\n"
"Language-Team: Indonesian <gnome-l10n-id@googlegroups.com>\n"
"Language: id\n"
@ -257,23 +257,11 @@ msgstr ""
"sejumlah besar akan mewakili versi yang belum ada. Jumlah besar ini dapat "
"digunakan untuk secara efektif menonaktifkan dialog."
#: data/org.gnome.shell.gschema.xml.in:109
msgid "Enable introspection API"
msgstr "Aktifkan API introspeksi"
#: 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 ""
"Aktifkan API D-Bus yang memungkinkan untuk mengintrospeksi status aplikasi "
"shell."
#: data/org.gnome.shell.gschema.xml.in:141
#: data/org.gnome.shell.gschema.xml.in:133
msgid "Layout of the app picker"
msgstr "Tata letak pemilih aplikasi"
#: 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 "
@ -285,108 +273,108 @@ msgstr ""
"berisi pasangan “application id” → 'data'. Saat ini, nilai berikut disimpan "
"sebagai 'data': • \"position\": posisi ikon aplikasi di halaman"
#: data/org.gnome.shell.gschema.xml.in:157
#: data/org.gnome.shell.gschema.xml.in:149
msgid "Keybinding to open the application menu"
msgstr "Kombinasi tombol untuk membuka menu aplikasi"
#: data/org.gnome.shell.gschema.xml.in:158
#: data/org.gnome.shell.gschema.xml.in:150
msgid "Keybinding to open the application menu."
msgstr "Kombinasi tombol untuk membuka menu aplikasi."
#: 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 "Kombinasi tombol untuk beralih antara status ringkasan"
#: 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 ""
"Kombinasi tombol untuk beralih antara sesi, pemilih jendela, dan kisi "
"aplikasi"
#: 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 ""
"Kombinasi tombol untuk beralih antara kisi aplikasi, pemilih jendela, dan "
"sesi"
#: 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 "Kombinasi tombol untuk membuka tilikan \"Tampilkan Aplikasi\""
#: 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 ""
"Kombinasi tombol untuk membuka tilikan Ringkasan Aktivitas \"Tampilkan "
"Aplikasi\"."
#: data/org.gnome.shell.gschema.xml.in:186
#: data/org.gnome.shell.gschema.xml.in:178
msgid "Keybinding to open the overview"
msgstr "Kombinasi tombol untuk membuka ringkasan"
#: data/org.gnome.shell.gschema.xml.in:187
#: data/org.gnome.shell.gschema.xml.in:179
msgid "Keybinding to open the Activities Overview."
msgstr "Kombinasi tombol untuk membuka Ringkasan Aktivitas."
#: 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 "Kombinasi tombol untuk kenampakan daftar pemberitahuan"
#: 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 "Kombinasi tombol untuk kenampakan daftar pemberitahuan."
#: data/org.gnome.shell.gschema.xml.in:200
#: data/org.gnome.shell.gschema.xml.in:192
msgid "Keybinding to focus the active notification"
msgstr "Kombinasi tombol untuk fokus pada pemberitahuan yang aktif"
#: data/org.gnome.shell.gschema.xml.in:201
#: data/org.gnome.shell.gschema.xml.in:193
msgid "Keybinding to focus the active notification."
msgstr "Kombinasi tombol untuk fokus pada pemberitahuan yang aktif."
#: data/org.gnome.shell.gschema.xml.in:207
#: data/org.gnome.shell.gschema.xml.in:199
msgid "Switch to application 1"
msgstr "Beralih ke aplikasi 1"
#: data/org.gnome.shell.gschema.xml.in:211
#: data/org.gnome.shell.gschema.xml.in:203
msgid "Switch to application 2"
msgstr "Beralih ke aplikasi 2"
#: data/org.gnome.shell.gschema.xml.in:215
#: data/org.gnome.shell.gschema.xml.in:207
msgid "Switch to application 3"
msgstr "Beralih ke aplikasi 3"
#: data/org.gnome.shell.gschema.xml.in:219
#: data/org.gnome.shell.gschema.xml.in:211
msgid "Switch to application 4"
msgstr "Beralih ke aplikasi 4"
#: data/org.gnome.shell.gschema.xml.in:223
#: data/org.gnome.shell.gschema.xml.in:215
msgid "Switch to application 5"
msgstr "Beralih ke aplikasi 5"
#: data/org.gnome.shell.gschema.xml.in:227
#: data/org.gnome.shell.gschema.xml.in:219
msgid "Switch to application 6"
msgstr "Beralih ke aplikasi 6"
#: data/org.gnome.shell.gschema.xml.in:231
#: data/org.gnome.shell.gschema.xml.in:223
msgid "Switch to application 7"
msgstr "Beralih ke aplikasi 7"
#: data/org.gnome.shell.gschema.xml.in:235
#: data/org.gnome.shell.gschema.xml.in:227
msgid "Switch to application 8"
msgstr "Beralih ke aplikasi 8"
#: data/org.gnome.shell.gschema.xml.in:239
#: data/org.gnome.shell.gschema.xml.in:231
msgid "Switch to application 9"
msgstr "Beralih ke aplikasi 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 "Batasi pengalih ke ruang kerja saat ini."
#: 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."
@ -394,11 +382,11 @@ msgstr ""
"Bila berisi true, hanya aplikasi yang punya jendela pada ruang kerja saat "
"ini ditampilkan pada penukar. Bila tidak, semua aplikasi disertakan."
#: data/org.gnome.shell.gschema.xml.in:266
#: data/org.gnome.shell.gschema.xml.in:258
msgid "The application icon mode."
msgstr "Mode ikon aplikasi."
#: 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-"
@ -408,7 +396,7 @@ msgstr ""
"adalah \"thumbnail-only\" (menampilkan gambar mini dari jendela), \"app-icon-"
"only\" (hanya menampilkan ikon aplikasi), atau \"both\" (keduanya)."
#: 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."
@ -416,59 +404,59 @@ msgstr ""
"Bila berisi true, hanya jendela dari ruang kerja saat ini ditampilkan pada "
"penukar. Bila tidak, semua jendela disertakan."
#: data/org.gnome.shell.gschema.xml.in:286
#: data/org.gnome.shell.gschema.xml.in:278
msgid "Locations"
msgstr "Lokasi"
#: 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 "Lokasi untuk ditampilkan di jam dunia"
#: data/org.gnome.shell.gschema.xml.in:297
#: data/org.gnome.shell.gschema.xml.in:289
msgid "Automatic location"
msgstr "Lokasi otomatis"
#: 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 "Apakah akan mengambil lokasi saat ini atau tidak"
#: data/org.gnome.shell.gschema.xml.in:305
#: data/org.gnome.shell.gschema.xml.in:297
msgid "Location"
msgstr "Lokasi"
#: 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 "Lokasi yang menunjukkan perkiraan"
#: 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 "Mencantolkan dialog modal ke jendela induk"
#: 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 ""
"Kunci ini menimpa kunci dalam org.gnome.mutter ketika menjalankan 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 ""
"Memfungsikan pengubinan tepi ketika menjatuhkan jendela pada tepi layar"
#: data/org.gnome.shell.gschema.xml.in:335
#: data/org.gnome.shell.gschema.xml.in:327
msgid "Workspaces are managed dynamically"
msgstr "Ruang kerja dikelola secara dinamis"
#: data/org.gnome.shell.gschema.xml.in:343
#: data/org.gnome.shell.gschema.xml.in:335
msgid "Workspaces only on primary monitor"
msgstr "Ruang kerja hanya pada monitor primer"
#: 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 ""
"Tunda perubahan fokus dalam mode tetikus sampai penunjuk berhenti bergerak"
@ -505,18 +493,18 @@ msgid "Visit extension homepage"
msgstr "Kunjungi halaman web ekstensi"
#: 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 "Batal"
#. 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 "Kata Sandi"
@ -539,8 +527,8 @@ msgstr "(cth., pengguna dari %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 "Nama pengguna"
@ -645,65 +633,65 @@ msgctxt "search-result"
msgid "Lock Screen Rotation"
msgstr "Kunci Rotasi Layar"
#: js/misc/util.js:120
#: js/misc/util.js:121
msgid "Command not found"
msgstr "Perintah tidak ditemukan"
#. 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 "Tak dapat mengurai perintah:"
#: js/misc/util.js:164
#: js/misc/util.js:165
#, javascript-format
msgid "Execution of “%s” failed:"
msgstr "Eksekusi \"%s\" gagal:"
#: js/misc/util.js:181
#: js/misc/util.js:182
msgid "Just now"
msgstr "Baru saja"
#: js/misc/util.js:183
#: js/misc/util.js:184
#, javascript-format
msgid "%d minute ago"
msgid_plural "%d minutes ago"
msgstr[0] "%d menit yang lalu"
msgstr[1] "%d menit yang lalu"
#: js/misc/util.js:187
#: js/misc/util.js:188
#, javascript-format
msgid "%d hour ago"
msgid_plural "%d hours ago"
msgstr[0] "%d jam yang lalu"
msgstr[1] "%d jam yang lalu"
#: js/misc/util.js:191 js/ui/dateMenu.js:162
#: js/misc/util.js:192 js/ui/dateMenu.js:162
msgid "Yesterday"
msgstr "Kemarin"
#: js/misc/util.js:193
#: js/misc/util.js:194
#, javascript-format
msgid "%d day ago"
msgid_plural "%d days ago"
msgstr[0] "%d hari yang lalu"
msgstr[1] "%d hari yang lalu"
#: js/misc/util.js:197
#: js/misc/util.js:198
#, javascript-format
msgid "%d week ago"
msgid_plural "%d weeks ago"
msgstr[0] "%d minggu yang lalu"
msgstr[1] "%d minggu yang lalu"
#: js/misc/util.js:201
#: js/misc/util.js:202
#, javascript-format
msgid "%d month ago"
msgid_plural "%d months ago"
msgstr[0] "%d bulan yang lalu"
msgstr[1] "%d bulan yang lalu"
#: js/misc/util.js:204
#: js/misc/util.js:205
#, javascript-format
msgid "%d year ago"
msgid_plural "%d years ago"
@ -711,20 +699,20 @@ msgstr[0] "%d tahun yang lalu"
msgstr[1] "%d tahun yang lalu"
#. 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 "Kemarin, %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"
@ -732,7 +720,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"
@ -740,7 +728,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"
@ -748,20 +736,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 "%H%M"
#. 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 "Kemarin, %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"
@ -769,7 +757,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"
@ -777,17 +765,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 "Log Masuk Area Bersinyal (hotspot)"
#: 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."
@ -1033,40 +1021,40 @@ msgstr "Versi udisks yang dipasang tidak mendukung pengaturan PIM"
msgid "Open with %s"
msgstr "Buka dengan %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 ""
"Sebagai alternatif Anda dapat terhubung dengan menekan tombol \"WPS\" pada "
"router Anda."
#: 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 "Sambung"
#: js/ui/components/networkAgent.js:216
#: js/ui/components/networkAgent.js:215
msgid "Key"
msgstr "Kunci"
#: 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 "Kata sandi kunci privat"
#: js/ui/components/networkAgent.js:275
#: js/ui/components/networkAgent.js:274
msgid "Identity"
msgstr "Identitas"
#: js/ui/components/networkAgent.js:289
#: js/ui/components/networkAgent.js:288
msgid "Service"
msgstr "Layanan"
#: 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 "Diperlukan autentikasi"
#: 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 "
@ -1075,31 +1063,31 @@ msgstr ""
"Kata sandi atau kunci enkripsi diperlukan untuk mengakses jaringan nirkabel "
"\"%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 "Autentikasi 802.1X kabel"
#: js/ui/components/networkAgent.js:325
#: js/ui/components/networkAgent.js:324
msgid "Network name"
msgstr "Nama jaringan"
#: 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 "Autentikasi 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 "Perlu kode 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 "Kode PIN diperlukan untuk perangkat data seluler"
#: 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
@ -1390,24 +1378,24 @@ msgstr "%s (jarak jauh)"
msgid "%s (console)"
msgstr "%s (konsol)"
#: js/ui/extensionDownloader.js:194
#: js/ui/extensionDownloader.js:232
msgid "Install"
msgstr "Pasang"
#: js/ui/extensionDownloader.js:200
#: js/ui/extensionDownloader.js:238
msgid "Install Extension"
msgstr "Pasang Ekstensi"
#: js/ui/extensionDownloader.js:201
#: js/ui/extensionDownloader.js:239
#, javascript-format
msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "Unduh dan pasang \"%s\" dari extensions.gnome.org?"
#: js/ui/extensionSystem.js:253
#: js/ui/extensionSystem.js:252
msgid "Extension Updates Available"
msgstr "Pemutakhiran Ekstensi Tersedia"
#: js/ui/extensionSystem.js:254
#: js/ui/extensionSystem.js:253
msgid "Extension updates are ready to be installed."
msgstr "Pemutakhiran ekstensi siap dipasang."
@ -1502,7 +1490,7 @@ msgstr "Matikan"
msgid "Leave Off"
msgstr "Biarkan Mati"
#: js/ui/keyboard.js:227
#: js/ui/keyboard.js:226
msgid "Region & Language Settings"
msgstr "Pengaturan Wilayah & Bahasa"
@ -1555,11 +1543,11 @@ msgstr "Tilik Sumber"
msgid "Web Page"
msgstr "Halaman Web"
#: js/ui/main.js:294
#: js/ui/main.js:290
msgid "Logged in as a privileged user"
msgstr "Masuk sebagai pengguna istimewa"
#: 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."
@ -1567,15 +1555,15 @@ msgstr ""
"Menjalankan sesi sebagai pengguna istimewa harus dihindari untuk alasan "
"keamanan. Jika memungkinkan, Anda harus masuk sebagai pengguna biasa."
#: js/ui/main.js:344
#: js/ui/main.js:340
msgid "Screen Lock disabled"
msgstr "Kunci Layar dinonaktifkan"
#: js/ui/main.js:345
#: js/ui/main.js:341
msgid "Screen Locking requires the GNOME display manager."
msgstr "Penguncian Layar memerlukan manajer tampilan GNOME."
#: js/ui/messageTray.js:1440
#: js/ui/messageTray.js:1443
msgid "System Information"
msgstr "Informasi Sistem"
@ -1609,47 +1597,47 @@ msgstr "Batal"
msgid "Overview"
msgstr "Gambaran"
#: js/ui/padOsd.js:96
#: js/ui/padOsd.js:95
msgid "New shortcut…"
msgstr "Pintasan baru…"
#: js/ui/padOsd.js:143
#: js/ui/padOsd.js:142
msgid "Application defined"
msgstr "Aplikasi yang didefinisikan"
#: js/ui/padOsd.js:144
#: js/ui/padOsd.js:143
msgid "Show on-screen help"
msgstr "Tampilkan bantuan di layar"
#: js/ui/padOsd.js:145
#: js/ui/padOsd.js:144
msgid "Switch monitor"
msgstr "Ganti monitor"
#: js/ui/padOsd.js:146
#: js/ui/padOsd.js:145
msgid "Assign keystroke"
msgstr "Tetapkan keystroke"
#: js/ui/padOsd.js:212
#: js/ui/padOsd.js:211
msgid "Done"
msgstr "Selesai"
#: js/ui/padOsd.js:718
#: js/ui/padOsd.js:716
msgid "Edit…"
msgstr "Sunting…"
#: js/ui/padOsd.js:760 js/ui/padOsd.js:877
#: js/ui/padOsd.js:758 js/ui/padOsd.js:875
msgid "None"
msgstr "Nihil"
#: js/ui/padOsd.js:831
#: js/ui/padOsd.js:829
msgid "Press a button to configure"
msgstr "Tekan tombol untuk mengkonfigurasi"
#: js/ui/padOsd.js:832
#: js/ui/padOsd.js:830
msgid "Press Esc to exit"
msgstr "Tekan Esc untuk keluar"
#: js/ui/padOsd.js:835
#: js/ui/padOsd.js:833
msgid "Press any key to exit"
msgstr "Tekan tombol apa saja untuk keluar"
@ -1659,12 +1647,12 @@ msgstr "Tekan tombol apa saja untuk keluar"
msgid "Activities"
msgstr "Aktivitas"
#: 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 "Bar Atas"
@ -1703,7 +1691,7 @@ msgstr "Tak bisa mengunci"
msgid "Lock was blocked by an application"
msgstr "Kunci diblokir oleh suatu aplikasi"
#: js/ui/screenshot.js:141
#: js/ui/screenshot.js:155
msgid "Screenshot taken"
msgstr "Cuplikan layar telah diambil"
@ -2766,6 +2754,7 @@ msgstr "Diperlukan UUID, nama, dan deskripsi"
#: 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 "Gagal terhubung ke GNOME Shell\n"
@ -2782,7 +2771,7 @@ msgstr "Nonaktifkan ekstensi"
#: 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"
@ -2791,7 +2780,7 @@ msgstr "Tidak ada UUID yang diberikan"
#: 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"
@ -2921,7 +2910,12 @@ msgstr "Lebih dari satu direktori sumber ditentukan"
msgid "Extension “%s” doesn't have preferences\n"
msgstr "Ekstensi \"%s\" tidak memiliki preferensi\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 "Gagal membuka preferensi untuk ekstensi \"%s\": %s\n"
#: subprojects/extensions-tool/src/command-prefs.c:87
msgid "Opens extension preferences"
msgstr "Buka preferensi ekstensi"
@ -2946,10 +2940,6 @@ msgstr "Hapus ekstensi"
msgid "Do not print error messages"
msgstr "Jangan cetak pesan kesalahan"
#: subprojects/extensions-tool/src/main.c:146
msgid "Failed to connect to GNOME Shell"
msgstr "Gagal terhubung ke GNOME Shell"
#: subprojects/extensions-tool/src/main.c:244
msgid "Path"
msgstr "Path"
@ -3080,6 +3070,19 @@ msgstr[1] "%u Masukan"
msgid "System Sounds"
msgstr "Suara Sistem"
#~ msgid "Enable introspection API"
#~ msgstr "Aktifkan API introspeksi"
#~ msgid ""
#~ "Enables a D-Bus API that allows to introspect the application state of "
#~ "the shell."
#~ msgstr ""
#~ "Aktifkan API D-Bus yang memungkinkan untuk mengintrospeksi status "
#~ "aplikasi shell."
#~ msgid "Failed to connect to GNOME Shell"
#~ msgstr "Gagal terhubung ke GNOME Shell"
#~ msgid "Minimize"
#~ msgstr "Minimalkan"

1080
po/kab.po

File diff suppressed because it is too large Load Diff

621
po/lv.po

File diff suppressed because it is too large Load Diff

279
po/pt.po
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-08-17 23:56+0000\n"
"PO-Revision-Date: 2021-08-18 12:11+0100\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"
@ -265,23 +265,11 @@ msgstr ""
"possível, e um número enorme representará versões que ainda não existem. "
"Este número enorme pode ser usado para efetivamente desativar a janela."
#: data/org.gnome.shell.gschema.xml.in:109
msgid "Enable introspection API"
msgstr "Ativar API de introspecção"
#: 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 ""
"Ativa uma API de D-Bus que permite a introspeção do estado de aplicação da "
"\"Shell\"."
#: data/org.gnome.shell.gschema.xml.in:141
#: data/org.gnome.shell.gschema.xml.in:133
msgid "Layout of the app picker"
msgstr "Esquema do seletor de aplicações"
#: 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 "
@ -294,109 +282,109 @@ msgstr ""
"valores são armazenados como “dados”: • “posição”: a posição do ícone da "
"aplicação na página"
#: data/org.gnome.shell.gschema.xml.in:157
#: data/org.gnome.shell.gschema.xml.in:149
msgid "Keybinding to open the application menu"
msgstr "Atalho de teclado para abrir o menu de aplicações"
#: data/org.gnome.shell.gschema.xml.in:158
#: data/org.gnome.shell.gschema.xml.in:150
msgid "Keybinding to open the application menu."
msgstr "Atalho de teclado para abrir o menu de aplicações."
#: 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 "Atalho de teclado para mudar de estado de visão geral"
#: 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 ""
"Atalho de teclado para mudar de sessão, seletor de janela e grelha de "
"aplicaçã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 ""
"Atalho de teclado para mudar a grelha de aplicação, seletor de janela e "
"sessão"
#: 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 "Atalho de teclado para abrir a vista \"Mostrar aplicações\""
#: 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 ""
"Atalho de teclado para abrir a vista \"Mostrar aplicações\" da Vista geral "
"de atividades."
#: data/org.gnome.shell.gschema.xml.in:186
#: data/org.gnome.shell.gschema.xml.in:178
msgid "Keybinding to open the overview"
msgstr "Atalho de teclado para abrir a vista geral"
#: data/org.gnome.shell.gschema.xml.in:187
#: data/org.gnome.shell.gschema.xml.in:179
msgid "Keybinding to open the Activities Overview."
msgstr "Atalho de teclado para abrir a Vista geral de atividades."
#: 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 "Atalho de teclado para mostrar/ocultar a lista de notificação"
#: 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 ""
"Atalho de teclado para alternar a visibilidade da lista de notificação."
#: data/org.gnome.shell.gschema.xml.in:200
#: data/org.gnome.shell.gschema.xml.in:192
msgid "Keybinding to focus the active notification"
msgstr "Atalho de teclado para focar a notificação ativa"
#: data/org.gnome.shell.gschema.xml.in:201
#: data/org.gnome.shell.gschema.xml.in:193
msgid "Keybinding to focus the active notification."
msgstr "Atalho de teclado para focar a notificação ativa."
#: data/org.gnome.shell.gschema.xml.in:207
#: data/org.gnome.shell.gschema.xml.in:199
msgid "Switch to application 1"
msgstr "Mudar para a aplicação 1"
#: data/org.gnome.shell.gschema.xml.in:211
#: data/org.gnome.shell.gschema.xml.in:203
msgid "Switch to application 2"
msgstr "Mudar para a aplicação 2"
#: data/org.gnome.shell.gschema.xml.in:215
#: data/org.gnome.shell.gschema.xml.in:207
msgid "Switch to application 3"
msgstr "Mudar para a aplicação 3"
#: data/org.gnome.shell.gschema.xml.in:219
#: data/org.gnome.shell.gschema.xml.in:211
msgid "Switch to application 4"
msgstr "Mudar para a aplicação 4"
#: data/org.gnome.shell.gschema.xml.in:223
#: data/org.gnome.shell.gschema.xml.in:215
msgid "Switch to application 5"
msgstr "Mudar para a aplicação 5"
#: data/org.gnome.shell.gschema.xml.in:227
#: data/org.gnome.shell.gschema.xml.in:219
msgid "Switch to application 6"
msgstr "Mudar para a aplicação 6"
#: data/org.gnome.shell.gschema.xml.in:231
#: data/org.gnome.shell.gschema.xml.in:223
msgid "Switch to application 7"
msgstr "Mudar para a aplicação 7"
#: data/org.gnome.shell.gschema.xml.in:235
#: data/org.gnome.shell.gschema.xml.in:227
msgid "Switch to application 8"
msgstr "Mudar para a aplicação 8"
#: data/org.gnome.shell.gschema.xml.in:239
#: data/org.gnome.shell.gschema.xml.in:231
msgid "Switch to application 9"
msgstr "Mudar para a aplicação 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 "Limitar a comutação à área de trabalho atual."
#: 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."
@ -405,11 +393,11 @@ msgstr ""
"mostradas para troca. Senão, são incluídas todas as aplicações com janelas "
"abertas."
#: data/org.gnome.shell.gschema.xml.in:266
#: data/org.gnome.shell.gschema.xml.in:258
msgid "The application icon mode."
msgstr "O modo do ícone da aplicação."
#: 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-"
@ -419,7 +407,7 @@ msgstr ""
"\" (mostra uma miniatura da janela), \"apenas-ícone-aplicação\" (mostra só o "
"ícone da aplicação) ou \"ambas\"."
#: 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."
@ -427,57 +415,57 @@ msgstr ""
"Se verdadeiro, só janelas da área de trabalho atual são apresentadas para "
"troca. Senão, são incluídas todas as aplicações com janelas abertas."
#: data/org.gnome.shell.gschema.xml.in:286
#: data/org.gnome.shell.gschema.xml.in:278
msgid "Locations"
msgstr "Localizações"
#: 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 "As localizações a mostrar nos relógios mundiais"
#: data/org.gnome.shell.gschema.xml.in:297
#: data/org.gnome.shell.gschema.xml.in:289
msgid "Automatic location"
msgstr "Localização automática"
#: 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 "Se deve ser obtida a localização atual ou não"
#: data/org.gnome.shell.gschema.xml.in:305
#: data/org.gnome.shell.gschema.xml.in:297
msgid "Location"
msgstr "Localização"
#: 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 "A localização para a qual deve ser mostrada uma previsão"
#: 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 "Anexar diálogo modal à janela principal"
#: 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 ""
"Esta chave ignora a chave em org.gnome.mutter ao executar a interface 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 "Ativar prender nas margens ao largar janelas junto às margens do ecrã"
#: data/org.gnome.shell.gschema.xml.in:335
#: data/org.gnome.shell.gschema.xml.in:327
msgid "Workspaces are managed dynamically"
msgstr "As áreas de trabalho são geridas dinamicamente"
#: data/org.gnome.shell.gschema.xml.in:343
#: data/org.gnome.shell.gschema.xml.in:335
msgid "Workspaces only on primary monitor"
msgstr "Áreas de trabalho só no monitor principal"
#: 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 ""
"Atrasar alterações de foco no modo de rato até que o ponteiro pare de se "
@ -514,18 +502,18 @@ msgid "Visit extension homepage"
msgstr "Visitar o sítio web da extensão"
#: 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 "Cancelar"
#. 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 "Palavra-passe"
@ -548,8 +536,8 @@ msgstr "(por ex., utilizador 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: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 "Utilizador"
@ -654,65 +642,65 @@ msgctxt "search-result"
msgid "Lock Screen Rotation"
msgstr "Bloquear rotação de ecrã"
#: js/misc/util.js:120
#: js/misc/util.js:121
msgid "Command not found"
msgstr "Comando não encontrado"
#. 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 "Impossível analisar o comando:"
#: js/misc/util.js:164
#: js/misc/util.js:165
#, javascript-format
msgid "Execution of “%s” failed:"
msgstr "Falha ao executar “%s”:"
#: js/misc/util.js:181
#: js/misc/util.js:182
msgid "Just now"
msgstr "Agora mesmo"
#: js/misc/util.js:183
#: js/misc/util.js:184
#, javascript-format
msgid "%d minute ago"
msgid_plural "%d minutes ago"
msgstr[0] "há %d minuto atrás"
msgstr[1] "há %d minutos atrás"
#: js/misc/util.js:187
#: js/misc/util.js:188
#, javascript-format
msgid "%d hour ago"
msgid_plural "%d hours ago"
msgstr[0] "há %d hora atrás"
msgstr[1] "há %d horas atrás"
#: js/misc/util.js:191 js/ui/dateMenu.js:162
#: js/misc/util.js:192 js/ui/dateMenu.js:162
msgid "Yesterday"
msgstr "Ontem"
#: js/misc/util.js:193
#: js/misc/util.js:194
#, javascript-format
msgid "%d day ago"
msgid_plural "%d days ago"
msgstr[0] "há %d dia atrás"
msgstr[1] "há %d dias atrás"
#: js/misc/util.js:197
#: js/misc/util.js:198
#, javascript-format
msgid "%d week ago"
msgid_plural "%d weeks ago"
msgstr[0] "há %d semana atrás"
msgstr[1] "há %d semanas atrás"
#: js/misc/util.js:201
#: js/misc/util.js:202
#, javascript-format
msgid "%d month ago"
msgid_plural "%d months ago"
msgstr[0] "há %d mês atrás"
msgstr[1] "há %d meses atrás"
#: js/misc/util.js:204
#: js/misc/util.js:205
#, javascript-format
msgid "%d year ago"
msgid_plural "%d years ago"
@ -720,20 +708,20 @@ msgstr[0] "há %d ano atrás"
msgstr[1] "há %d anos atrás"
#. 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 "Ontem às %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"
@ -741,7 +729,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 de %B, %H%M"
@ -749,7 +737,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:261
#: js/misc/util.js:262
#, no-c-format
msgid "%B %-d %Y, %H%M"
msgstr "%d de %B de %Y, %H%M"
@ -757,20 +745,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: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 "Ontem às %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"
@ -778,7 +766,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 de %B, %l%M %p"
@ -786,17 +774,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:290
#: js/misc/util.js:291
#, 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:42
#: js/portalHelper/main.js:49
msgid "Hotspot Login"
msgstr "Acesso por ponto wi-fi público"
#: 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."
@ -1041,39 +1029,39 @@ msgstr "A versão do udisks instalada não suporta a configuração do PIM"
msgid "Open with %s"
msgstr "Abrir com %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 ""
"Alternativamente, pode ligar premindo o botão “WPS” no encaminhador (router)."
#: 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 "Ligar"
#: js/ui/components/networkAgent.js:216
#: js/ui/components/networkAgent.js:215
msgid "Key"
msgstr "Chave"
#: 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 "Palavra-passe da chave privada"
#: js/ui/components/networkAgent.js:275
#: js/ui/components/networkAgent.js:274
msgid "Identity"
msgstr "Identidade"
#: js/ui/components/networkAgent.js:289
#: js/ui/components/networkAgent.js:288
msgid "Service"
msgstr "Serviço"
#: 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 "Autenticação necessária"
#: 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 "
@ -1082,31 +1070,31 @@ msgstr ""
"São necessárias palavras-passe ou chaves de encriptação para aceder à rede "
"sem fios “%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 "Autenticação para 802.1X por cabo"
#: js/ui/components/networkAgent.js:325
#: js/ui/components/networkAgent.js:324
msgid "Network name"
msgstr "Nome da rede"
#: 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 "Autenticação 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 "Necessário código 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 "É necessário o código PIN para o dispositivo de banda larga móvel"
#: 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
@ -1397,24 +1385,24 @@ msgstr "%s (remoto)"
msgid "%s (console)"
msgstr "%s (consola)"
#: js/ui/extensionDownloader.js:194
#: js/ui/extensionDownloader.js:232
msgid "Install"
msgstr "Instalar"
#: js/ui/extensionDownloader.js:200
#: js/ui/extensionDownloader.js:238
msgid "Install Extension"
msgstr "Instalar extensão"
#: js/ui/extensionDownloader.js:201
#: js/ui/extensionDownloader.js:239
#, javascript-format
msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "Transferir e instalar \"%s\" a partir de extensions.gnome.org?"
#: js/ui/extensionSystem.js:253
#: js/ui/extensionSystem.js:252
msgid "Extension Updates Available"
msgstr "Há atualizações de extensões disponíveis"
#: js/ui/extensionSystem.js:254
#: 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."
@ -1510,7 +1498,7 @@ msgstr "Desligar"
msgid "Leave Off"
msgstr "Deixar desativado"
#: js/ui/keyboard.js:227
#: js/ui/keyboard.js:226
msgid "Region & Language Settings"
msgstr "Definições de Região e Idioma"
@ -1563,11 +1551,11 @@ msgstr "Ver fonte"
msgid "Web Page"
msgstr "Página Web"
#: js/ui/main.js:294
#: js/ui/main.js:290
msgid "Logged in as a privileged user"
msgstr "Em sessão como utilizador privilegiado"
#: 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."
@ -1575,15 +1563,15 @@ 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:344
#: js/ui/main.js:340
msgid "Screen Lock disabled"
msgstr "Bloqueio de ecrã desligado"
#: js/ui/main.js:345
#: 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."
#: js/ui/messageTray.js:1440
#: js/ui/messageTray.js:1443
msgid "System Information"
msgstr "Informação do sistema"
@ -1617,47 +1605,47 @@ msgstr "Desfazer"
msgid "Overview"
msgstr "Visão geral"
#: js/ui/padOsd.js:96
#: js/ui/padOsd.js:95
msgid "New shortcut…"
msgstr "Novo atalho…"
#: js/ui/padOsd.js:143
#: js/ui/padOsd.js:142
msgid "Application defined"
msgstr "Aplicação definida"
#: js/ui/padOsd.js:144
#: js/ui/padOsd.js:143
msgid "Show on-screen help"
msgstr "Mostrar ajuda no ecrã"
#: js/ui/padOsd.js:145
#: js/ui/padOsd.js:144
msgid "Switch monitor"
msgstr "Mudar de monitor"
#: js/ui/padOsd.js:146
#: js/ui/padOsd.js:145
msgid "Assign keystroke"
msgstr "Atribuir atalho"
#: js/ui/padOsd.js:212
#: js/ui/padOsd.js:211
msgid "Done"
msgstr "Concluído"
#: js/ui/padOsd.js:718
#: js/ui/padOsd.js:716
msgid "Edit…"
msgstr "Editar…"
#: js/ui/padOsd.js:760 js/ui/padOsd.js:877
#: js/ui/padOsd.js:758 js/ui/padOsd.js:875
msgid "None"
msgstr "Nenhum"
#: js/ui/padOsd.js:831
#: js/ui/padOsd.js:829
msgid "Press a button to configure"
msgstr "Premir um botão para configurar"
#: js/ui/padOsd.js:832
#: js/ui/padOsd.js:830
msgid "Press Esc to exit"
msgstr "Premir Esc para sair"
#: js/ui/padOsd.js:835
#: js/ui/padOsd.js:833
msgid "Press any key to exit"
msgstr "Premir qualquer tecla para sair"
@ -1667,12 +1655,12 @@ msgstr "Premir qualquer tecla para sair"
msgid "Activities"
msgstr "Atividades"
#: js/ui/panel.js:542
#: js/ui/panel.js:556
msgctxt "System menu in the top bar"
msgid "System"
msgstr "Sistema"
#: js/ui/panel.js:658
#: js/ui/panel.js:674
msgid "Top Bar"
msgstr "Barra superior"
@ -1711,7 +1699,7 @@ msgstr "Impossível bloquear"
msgid "Lock was blocked by an application"
msgstr "Uma aplicação impediu o bloqueio"
#: js/ui/screenshot.js:141
#: js/ui/screenshot.js:155
msgid "Screenshot taken"
msgstr "Captura de ecrã tirada"
@ -2779,6 +2767,7 @@ msgstr "São necessários o UUID, o nome e a descrição"
#: 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 "Ligar à Interface GNOME falhou\n"
@ -2795,7 +2784,7 @@ msgstr "Desativar uma extensão"
#: 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"
@ -2804,7 +2793,7 @@ msgstr "Nenhum UUID fornecido"
#: 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"
@ -2930,14 +2919,19 @@ 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
msgid "Extension “%s” doesn't have preferences\n"
msgstr "A extensão “%s” não tem preferências\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 "Falha ao abrir prefs para extensão \"%s\": %s\n"
#: subprojects/extensions-tool/src/command-prefs.c:87
msgid "Opens extension preferences"
msgstr "Abre as preferências da extensão"
@ -2962,10 +2956,6 @@ msgstr "Desinstalar uma extensão"
msgid "Do not print error messages"
msgstr "Não mostrar mensagens de erro"
#: subprojects/extensions-tool/src/main.c:146
msgid "Failed to connect to GNOME Shell"
msgstr "Ligar à Interface GNOME falhou"
#: subprojects/extensions-tool/src/main.c:244
msgid "Path"
msgstr "Caminho"
@ -3094,7 +3084,20 @@ 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"
#~ msgid ""
#~ "Enables a D-Bus API that allows to introspect the application state of "
#~ "the shell."
#~ msgstr ""
#~ "Ativa uma API de D-Bus que permite a introspeção do estado de aplicação "
#~ "da \"Shell\"."
#~ msgid "Failed to connect to GNOME Shell"
#~ msgstr "Ligar à Interface GNOME falhou"
#~ msgid "Minimize"
#~ msgstr "Minimizar"

View File

@ -24,16 +24,16 @@ 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-18 10:26-0300\n"
"POT-Creation-Date: 2021-11-02 21:05+0000\n"
"PO-Revision-Date: 2021-11-02 22:18-0300\n"
"Last-Translator: Rafael Fontenelle <rafaelff@gnome.org>\n"
"Language-Team: Brazilian Portuguese <gnome-pt_br-list@gnome.org>\n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
"X-Generator: Gtranslator 40.0\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Poedit 3.0\n"
"X-Project-Style: gnome\n"
#: data/50-gnome-shell-launchers.xml:6
@ -274,23 +274,11 @@ msgstr ""
"existem. Este grande número pode ser usado para desativar efetivamente o "
"diálogo."
#: data/org.gnome.shell.gschema.xml.in:109
msgid "Enable introspection API"
msgstr "Habilitar API de introspecção"
#: 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 ""
"Habilita uma API de D-Bus que permite introspectar o estado do aplicativo do "
"shell."
#: data/org.gnome.shell.gschema.xml.in:141
#: data/org.gnome.shell.gschema.xml.in:133
msgid "Layout of the app picker"
msgstr "Layout do seletor de aplicativo"
#: 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 "
@ -303,109 +291,109 @@ msgstr ""
"são armazenados como “dados”: • “posição”: a posição do ícone do aplicativo "
"na página"
#: data/org.gnome.shell.gschema.xml.in:157
#: data/org.gnome.shell.gschema.xml.in:149
msgid "Keybinding to open the application menu"
msgstr "Atalho de teclado para abrir um menu de aplicativo"
#: data/org.gnome.shell.gschema.xml.in:158
#: data/org.gnome.shell.gschema.xml.in:150
msgid "Keybinding to open the application menu."
msgstr "Atalho de teclado para abrir um menu de aplicativo."
#: 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 "Atalho de teclado para alternar entre estados de panorama"
#: 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 ""
"Atalho de teclado para alternar entre sessão, seletor de janelas e a grade "
"de aplicativos"
#: 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 ""
"Atalho de teclado para alternar entre grade de aplicativos, seletor de "
"janelas e a sessão"
#: 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 "Atalho de teclado para abrir a visualização “Mostrar aplicativos”"
#: 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 ""
"Atalho de teclado para abrir a visualização “Mostrar aplicativos” do "
"panorama de atividades."
#: data/org.gnome.shell.gschema.xml.in:186
#: data/org.gnome.shell.gschema.xml.in:178
msgid "Keybinding to open the overview"
msgstr "Atalho de teclado para abrir o panorama"
#: data/org.gnome.shell.gschema.xml.in:187
#: data/org.gnome.shell.gschema.xml.in:179
msgid "Keybinding to open the Activities Overview."
msgstr "Atalho de teclado para abrir o panorama de atividades."
#: 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 "Atalho de teclado para alternar a visibilidade da lista de notificação"
#: 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 ""
"Atalho de teclado para alternar a visibilidade da lista de notificação."
#: data/org.gnome.shell.gschema.xml.in:200
#: data/org.gnome.shell.gschema.xml.in:192
msgid "Keybinding to focus the active notification"
msgstr "Atalho de teclado para ativar a notificação ativa"
#: data/org.gnome.shell.gschema.xml.in:201
#: data/org.gnome.shell.gschema.xml.in:193
msgid "Keybinding to focus the active notification."
msgstr "Atalho de teclado para ativar a notificação ativa."
#: data/org.gnome.shell.gschema.xml.in:207
#: data/org.gnome.shell.gschema.xml.in:199
msgid "Switch to application 1"
msgstr "Alternar para o aplicativo 1"
#: data/org.gnome.shell.gschema.xml.in:211
#: data/org.gnome.shell.gschema.xml.in:203
msgid "Switch to application 2"
msgstr "Alternar para o aplicativo 2"
#: data/org.gnome.shell.gschema.xml.in:215
#: data/org.gnome.shell.gschema.xml.in:207
msgid "Switch to application 3"
msgstr "Alternar para o aplicativo 3"
#: data/org.gnome.shell.gschema.xml.in:219
#: data/org.gnome.shell.gschema.xml.in:211
msgid "Switch to application 4"
msgstr "Alternar para o aplicativo 4"
#: data/org.gnome.shell.gschema.xml.in:223
#: data/org.gnome.shell.gschema.xml.in:215
msgid "Switch to application 5"
msgstr "Alternar para o aplicativo 5"
#: data/org.gnome.shell.gschema.xml.in:227
#: data/org.gnome.shell.gschema.xml.in:219
msgid "Switch to application 6"
msgstr "Alternar para o aplicativo 6"
#: data/org.gnome.shell.gschema.xml.in:231
#: data/org.gnome.shell.gschema.xml.in:223
msgid "Switch to application 7"
msgstr "Alternar para o aplicativo 7"
#: data/org.gnome.shell.gschema.xml.in:235
#: data/org.gnome.shell.gschema.xml.in:227
msgid "Switch to application 8"
msgstr "Alternar para o aplicativo 8"
#: data/org.gnome.shell.gschema.xml.in:239
#: data/org.gnome.shell.gschema.xml.in:231
msgid "Switch to application 9"
msgstr "Alternar para o aplicativo 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 "Limitar o alternador ao espaço de trabalho atual."
#: 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."
@ -414,11 +402,11 @@ msgstr ""
"janelas no espaço de trabalho atual. Caso contrário, todos os aplicativos "
"serão incluídos."
#: data/org.gnome.shell.gschema.xml.in:266
#: data/org.gnome.shell.gschema.xml.in:258
msgid "The application icon mode."
msgstr "O modo ícone do aplicativo."
#: 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-"
@ -428,7 +416,7 @@ msgstr ""
"válidas são “thumbnail-only” (mostra uma miniatura da janela), “app-icon-"
"only” (mostra apenas o ícone do aplicativo) ou “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."
@ -436,58 +424,58 @@ msgstr ""
"Se verdadeiro, o alternador mostrará somente as janelas do espaço de "
"trabalho atual. Caso contrário, todos as janelas serão incluídas."
#: data/org.gnome.shell.gschema.xml.in:286
#: data/org.gnome.shell.gschema.xml.in:278
msgid "Locations"
msgstr "Localizações"
#: 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 "As localizações para mostrar nos relógios mundiais"
#: data/org.gnome.shell.gschema.xml.in:297
#: data/org.gnome.shell.gschema.xml.in:289
msgid "Automatic location"
msgstr "Localização automática"
#: 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 "Se deve-se obter a localização atual ou não"
#: data/org.gnome.shell.gschema.xml.in:305
#: data/org.gnome.shell.gschema.xml.in:297
msgid "Location"
msgstr "Localização"
#: 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 "A localização para a qual deve-se mostrar uma previsão do tempo"
#: 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 "Anexar diálogo modal à janela pai"
#: 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 ""
"Esta chave sobrescreve a chave em org.gnome.mutter ao executar o 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 ""
"Habilitar contorno ladrilhado ao arrastar janelas sobre as bordas da tela"
#: data/org.gnome.shell.gschema.xml.in:335
#: data/org.gnome.shell.gschema.xml.in:327
msgid "Workspaces are managed dynamically"
msgstr "Espaços de trabalho são gerenciados dinamicamente"
#: data/org.gnome.shell.gschema.xml.in:343
#: data/org.gnome.shell.gschema.xml.in:335
msgid "Workspaces only on primary monitor"
msgstr "Espaços de trabalho apenas no monitor primário"
#: 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 "Atrasar foco altera o modo do mouse até o ponteiro parar de mover"
@ -523,18 +511,18 @@ msgid "Visit extension homepage"
msgstr "Visita a página web da extensão"
#: 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 "Cancelar"
#. 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 "Senha"
@ -557,8 +545,8 @@ msgstr "(ex.: usuário 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: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 "Nome de usuário"
@ -663,65 +651,65 @@ msgctxt "search-result"
msgid "Lock Screen Rotation"
msgstr "Bloquear rotação de tela"
#: js/misc/util.js:120
#: js/misc/util.js:121
msgid "Command not found"
msgstr "Comando não encontrado"
#. 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 "Não foi possível analisar comando:"
#: js/misc/util.js:164
#: js/misc/util.js:165
#, javascript-format
msgid "Execution of “%s” failed:"
msgstr "A execução de “%s” falhou:"
#: js/misc/util.js:181
#: js/misc/util.js:182
msgid "Just now"
msgstr "Agora mesmo"
#: js/misc/util.js:183
#: js/misc/util.js:184
#, javascript-format
msgid "%d minute ago"
msgid_plural "%d minutes ago"
msgstr[0] "%d minuto atrás"
msgstr[1] "%d minutos atrás"
#: js/misc/util.js:187
#: js/misc/util.js:188
#, javascript-format
msgid "%d hour ago"
msgid_plural "%d hours ago"
msgstr[0] "%d hora atrás"
msgstr[1] "%d horas atrás"
#: js/misc/util.js:191 js/ui/dateMenu.js:162
#: js/misc/util.js:192 js/ui/dateMenu.js:162
msgid "Yesterday"
msgstr "Ontem"
#: js/misc/util.js:193
#: js/misc/util.js:194
#, javascript-format
msgid "%d day ago"
msgid_plural "%d days ago"
msgstr[0] "%d dia atrás"
msgstr[1] "%d dias atrás"
#: js/misc/util.js:197
#: js/misc/util.js:198
#, javascript-format
msgid "%d week ago"
msgid_plural "%d weeks ago"
msgstr[0] "%d semana atrás"
msgstr[1] "%d semanas atrás"
#: js/misc/util.js:201
#: js/misc/util.js:202
#, javascript-format
msgid "%d month ago"
msgid_plural "%d months ago"
msgstr[0] "%d mês atrás"
msgstr[1] "%d meses atrás"
#: js/misc/util.js:204
#: js/misc/util.js:205
#, javascript-format
msgid "%d year ago"
msgid_plural "%d years ago"
@ -729,20 +717,20 @@ msgstr[0] "%d ano atrás"
msgstr[1] "%d anos atrás"
#. 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 "Ontem, %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"
@ -750,7 +738,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 de %B, %H%M"
@ -758,7 +746,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:261
#: js/misc/util.js:262
#, no-c-format
msgid "%B %-d %Y, %H%M"
msgstr "%-d de %B de %Y, %H%M"
@ -766,20 +754,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: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 "Ontem, %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"
@ -787,7 +775,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 de %B, %l%M %p"
@ -795,17 +783,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:290
#: js/misc/util.js:291
#, 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:42
#: js/portalHelper/main.js:49
msgid "Hotspot Login"
msgstr "Autenticação de ponto de acesso"
#: 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."
@ -1051,40 +1039,40 @@ msgstr "A versão do udisks instalado não possui suporte à configuração do P
msgid "Open with %s"
msgstr "Abrir com %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 ""
"Alternativamente, você pode conectar pressionando o botão “WPS” em seu "
"roteador."
#: 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 "Conectar"
#: js/ui/components/networkAgent.js:216
#: js/ui/components/networkAgent.js:215
msgid "Key"
msgstr "Chave"
#: 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 "Senha da chave privada"
#: js/ui/components/networkAgent.js:275
#: js/ui/components/networkAgent.js:274
msgid "Identity"
msgstr "Identidade"
#: js/ui/components/networkAgent.js:289
#: js/ui/components/networkAgent.js:288
msgid "Service"
msgstr "Serviço"
#: 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 "Autenticação necessária"
#: 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 "
@ -1093,31 +1081,31 @@ msgstr ""
"Senhas ou chaves criptografadas são necessárias para acessar a rede sem fio "
"“%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 "Autenticação 802.1X cabeada"
#: js/ui/components/networkAgent.js:325
#: js/ui/components/networkAgent.js:324
msgid "Network name"
msgstr "Nome da rede"
#: 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 "Autenticação 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 "Código PIN requisitado"
#: 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 "O código PIN é necessário para o dispositivo móvel de banda larga"
#: 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
@ -1408,24 +1396,24 @@ msgstr "%s (remoto)"
msgid "%s (console)"
msgstr "%s (console)"
#: js/ui/extensionDownloader.js:194
#: js/ui/extensionDownloader.js:232
msgid "Install"
msgstr "Instalar"
#: js/ui/extensionDownloader.js:200
#: js/ui/extensionDownloader.js:238
msgid "Install Extension"
msgstr "Instalar extensão"
#: js/ui/extensionDownloader.js:201
#: js/ui/extensionDownloader.js:239
#, javascript-format
msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "Baixar e instalar “%s” de extensions.gnome.org?"
#: js/ui/extensionSystem.js:253
#: js/ui/extensionSystem.js:252
msgid "Extension Updates Available"
msgstr "Atualizações de extensões disponíveis"
#: js/ui/extensionSystem.js:254
#: js/ui/extensionSystem.js:253
msgid "Extension updates are ready to be installed."
msgstr "Atualizações de extensões estão prontas para serem instaladas."
@ -1522,7 +1510,7 @@ msgstr "Desligar"
msgid "Leave Off"
msgstr "Deixar desativado"
#: js/ui/keyboard.js:227
#: js/ui/keyboard.js:226
msgid "Region & Language Settings"
msgstr "Configurações regionais e de idioma"
@ -1575,11 +1563,11 @@ msgstr "Ver fonte"
msgid "Web Page"
msgstr "Página web"
#: js/ui/main.js:294
#: js/ui/main.js:290
msgid "Logged in as a privileged user"
msgstr "Sessão aberta como um usuário privilegiado"
#: 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."
@ -1587,15 +1575,15 @@ msgstr ""
"Usar uma sessão como um usuário privilegiado deve ser evitado por motivos de "
"segurança. Se possível, você deve abrir uma sessão como um usuário normal."
#: js/ui/main.js:344
#: js/ui/main.js:340
msgid "Screen Lock disabled"
msgstr "Bloqueio de tela desabilitado"
#: js/ui/main.js:345
#: js/ui/main.js:341
msgid "Screen Locking requires the GNOME display manager."
msgstr "O bloqueio de tela requer o gerenciador de exibição do GNOME."
#: js/ui/messageTray.js:1440
#: js/ui/messageTray.js:1443
msgid "System Information"
msgstr "Informações do sistema"
@ -1629,47 +1617,47 @@ msgstr "Desfazer"
msgid "Overview"
msgstr "Panorama"
#: js/ui/padOsd.js:96
#: js/ui/padOsd.js:95
msgid "New shortcut…"
msgstr "Novo atalho…"
#: js/ui/padOsd.js:143
#: js/ui/padOsd.js:142
msgid "Application defined"
msgstr "Aplicativo definido"
#: js/ui/padOsd.js:144
#: js/ui/padOsd.js:143
msgid "Show on-screen help"
msgstr "Mostrar ajuda na tela"
#: js/ui/padOsd.js:145
#: js/ui/padOsd.js:144
msgid "Switch monitor"
msgstr "Trocar monitor"
#: js/ui/padOsd.js:146
#: js/ui/padOsd.js:145
msgid "Assign keystroke"
msgstr "Atribuir atalho"
#: js/ui/padOsd.js:212
#: js/ui/padOsd.js:211
msgid "Done"
msgstr "Concluído"
#: js/ui/padOsd.js:718
#: js/ui/padOsd.js:716
msgid "Edit…"
msgstr "Editar…"
#: js/ui/padOsd.js:760 js/ui/padOsd.js:877
#: js/ui/padOsd.js:758 js/ui/padOsd.js:875
msgid "None"
msgstr "Nenhum"
#: js/ui/padOsd.js:831
#: js/ui/padOsd.js:829
msgid "Press a button to configure"
msgstr "Pressione um botão para configurar"
#: js/ui/padOsd.js:832
#: js/ui/padOsd.js:830
msgid "Press Esc to exit"
msgstr "Pressione Esc para sair"
#: js/ui/padOsd.js:835
#: js/ui/padOsd.js:833
msgid "Press any key to exit"
msgstr "Pressione qualquer tecla para sair"
@ -1679,12 +1667,12 @@ msgstr "Pressione qualquer tecla para sair"
msgid "Activities"
msgstr "Atividades"
#: js/ui/panel.js:542
#: js/ui/panel.js:556
msgctxt "System menu in the top bar"
msgid "System"
msgstr "Sistema"
#: js/ui/panel.js:658
#: js/ui/panel.js:674
msgid "Top Bar"
msgstr "Barra superior"
@ -1723,7 +1711,7 @@ msgstr "Não foi possível bloquear"
msgid "Lock was blocked by an application"
msgstr "O bloqueio foi impedido por um aplicativo"
#: js/ui/screenshot.js:141
#: js/ui/screenshot.js:155
msgid "Screenshot taken"
msgstr "Captura de tela obtida"
@ -2426,13 +2414,10 @@ 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"
@ -2786,6 +2771,7 @@ msgstr "UUID, nome e descrição são necessários"
#: 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 "Falha ao conectar ao GNOME Shell\n"
@ -2802,7 +2788,7 @@ msgstr "Desabilita uma extensão"
#: 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"
@ -2811,7 +2797,7 @@ msgstr "Nenhuma UUID dado"
#: 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"
@ -2941,7 +2927,12 @@ msgstr "Mais de um diretório fonte especificado"
msgid "Extension “%s” doesn't have preferences\n"
msgstr "A extensão “%s” não tem preferências\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 "Falha ao abrir as preferências para a extensão “%s”: %s\n"
#: subprojects/extensions-tool/src/command-prefs.c:87
msgid "Opens extension preferences"
msgstr "Abre as preferências da extensão"
@ -2966,10 +2957,6 @@ msgstr "Desinstala uma extensão"
msgid "Do not print error messages"
msgstr "Não exibir mensagens de erro"
#: subprojects/extensions-tool/src/main.c:146
msgid "Failed to connect to GNOME Shell"
msgstr "Falha ao conectar ao GNOME Shell"
#: subprojects/extensions-tool/src/main.c:244
msgid "Path"
msgstr "Caminho"
@ -3100,6 +3087,19 @@ msgstr[1] "%u entradas"
msgid "System Sounds"
msgstr "Sons do sistema"
#~ msgid "Enable introspection API"
#~ msgstr "Habilitar API de introspecção"
#~ msgid ""
#~ "Enables a D-Bus API that allows to introspect the application state of "
#~ "the shell."
#~ msgstr ""
#~ "Habilita uma API de D-Bus que permite introspectar o estado do aplicativo "
#~ "do shell."
#~ msgid "Failed to connect to GNOME Shell"
#~ msgstr "Falha ao conectar ao GNOME Shell"
#~ msgid "Minimize"
#~ msgstr "Minimizar"

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 "Батарея"

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"

277
po/sv.po
View File

@ -12,9 +12,9 @@ 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-18 12:41+0200\n"
"Last-Translator: Luna Jernberg <droidbittin@gmail.com>\n"
"POT-Creation-Date: 2021-11-02 16:54+0000\n"
"PO-Revision-Date: 2021-11-02 22:03+0100\n"
"Last-Translator: Anders Jonsson <anders.jonsson@norsjovallen.se>\n"
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
"Language: sv\n"
"MIME-Version: 1.0\n"
@ -254,23 +254,11 @@ msgstr ""
"ett enormt tal kommer motsvara versioner som inte finns ännu. Detta enorma "
"tal kan användas för att inaktivera dialogrutan."
#: data/org.gnome.shell.gschema.xml.in:109
msgid "Enable introspection API"
msgstr "Aktivera introspektions-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 ""
"Aktiverar ett D-Bus-API som tillåter introspektion av programtillståndet för "
"skalet."
#: data/org.gnome.shell.gschema.xml.in:141
#: data/org.gnome.shell.gschema.xml.in:133
msgid "Layout of the app picker"
msgstr "Layout för programväljaren"
#: 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 "
@ -282,104 +270,104 @@ msgstr ""
"”program-ID” → ”data”. För närvarande lagras följande värde som ”data”: • "
"”position”: positionen för programikonen på sidan"
#: data/org.gnome.shell.gschema.xml.in:157
#: data/org.gnome.shell.gschema.xml.in:149
msgid "Keybinding to open the application menu"
msgstr "Snabbtangent för att öppna programmenyn"
#: data/org.gnome.shell.gschema.xml.in:158
#: data/org.gnome.shell.gschema.xml.in:150
msgid "Keybinding to open the application menu."
msgstr "Snabbtangent för att öppna programmenyn."
#: 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 "Snabbtangent för att växla mellan översiktstillstånd"
#: 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 ""
"Snabbtangent för att växla mellan session, fönsterväljare och programrutnät"
#: 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 ""
"Snabbtangent för att växla mellan programrutnät, fönsterväljare och session"
#: 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 "Snabbtangent för att öppna ”Visa program”-vyn"
#: 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 "Snabbtangent för att öppna ”Visa program”-vyn i översiktsvyn."
#: data/org.gnome.shell.gschema.xml.in:186
#: data/org.gnome.shell.gschema.xml.in:178
msgid "Keybinding to open the overview"
msgstr "Snabbtangent för att öppna översiktsvyn"
#: data/org.gnome.shell.gschema.xml.in:187
#: data/org.gnome.shell.gschema.xml.in:179
msgid "Keybinding to open the Activities Overview."
msgstr "Snabbtangent för att öppna översiktsvyn."
#: 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 "Snabbtangent för att växla synligheten för aviseringslistan"
#: 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 "Snabbtangent för att växla synligheten för aviseringslistan."
#: data/org.gnome.shell.gschema.xml.in:200
#: data/org.gnome.shell.gschema.xml.in:192
msgid "Keybinding to focus the active notification"
msgstr "Snabbtangent för att fokusera på den aktiva aviseringen"
#: data/org.gnome.shell.gschema.xml.in:201
#: data/org.gnome.shell.gschema.xml.in:193
msgid "Keybinding to focus the active notification."
msgstr "Snabbtangent för att fokusera på den aktiva aviseringen."
#: data/org.gnome.shell.gschema.xml.in:207
#: data/org.gnome.shell.gschema.xml.in:199
msgid "Switch to application 1"
msgstr "Växla till program 1"
#: data/org.gnome.shell.gschema.xml.in:211
#: data/org.gnome.shell.gschema.xml.in:203
msgid "Switch to application 2"
msgstr "Växla till program 2"
#: data/org.gnome.shell.gschema.xml.in:215
#: data/org.gnome.shell.gschema.xml.in:207
msgid "Switch to application 3"
msgstr "Växla till program 3"
#: data/org.gnome.shell.gschema.xml.in:219
#: data/org.gnome.shell.gschema.xml.in:211
msgid "Switch to application 4"
msgstr "Växla till program 4"
#: data/org.gnome.shell.gschema.xml.in:223
#: data/org.gnome.shell.gschema.xml.in:215
msgid "Switch to application 5"
msgstr "Växla till program 5"
#: data/org.gnome.shell.gschema.xml.in:227
#: data/org.gnome.shell.gschema.xml.in:219
msgid "Switch to application 6"
msgstr "Växla till program 6"
#: data/org.gnome.shell.gschema.xml.in:231
#: data/org.gnome.shell.gschema.xml.in:223
msgid "Switch to application 7"
msgstr "Växla till program 7"
#: data/org.gnome.shell.gschema.xml.in:235
#: data/org.gnome.shell.gschema.xml.in:227
msgid "Switch to application 8"
msgstr "Växla till program 8"
#: data/org.gnome.shell.gschema.xml.in:239
#: data/org.gnome.shell.gschema.xml.in:231
msgid "Switch to application 9"
msgstr "Växla till 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 "Begränsa väljare till aktuell arbetsyta."
#: 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."
@ -387,11 +375,11 @@ msgstr ""
"Om satt till true (sant), visas endast program som har fönster på den "
"aktuella arbetsytan i väljaren. I annat fall inkluderas alla program."
#: data/org.gnome.shell.gschema.xml.in:266
#: data/org.gnome.shell.gschema.xml.in:258
msgid "The application icon mode."
msgstr "Programikonsläget."
#: 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-"
@ -401,7 +389,7 @@ msgstr ""
"only” (visar en miniatyrbild av fönstret), ”app-icon-only” (visar endast "
"programikonen) eller ”both” (visar båda)."
#: 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."
@ -409,57 +397,57 @@ msgstr ""
"Om satt till \"true\", visas endast fönster från den aktuella arbetsytan i "
"väljaren. I annat fall inkluderas alla fönster."
#: data/org.gnome.shell.gschema.xml.in:286
#: data/org.gnome.shell.gschema.xml.in:278
msgid "Locations"
msgstr "Platser"
#: 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 "Platserna att visa i världsklockor"
#: data/org.gnome.shell.gschema.xml.in:297
#: data/org.gnome.shell.gschema.xml.in:289
msgid "Automatic location"
msgstr "Automatisk plats"
#: 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 "Huruvida den aktuella platsen ska hämtas eller ej"
#: data/org.gnome.shell.gschema.xml.in:305
#: data/org.gnome.shell.gschema.xml.in:297
msgid "Location"
msgstr "Plats"
#: 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 "Platsen för vilken en väderprognos ska visas"
#: 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 "Fäst modal dialog till föräldrafönstret"
#: 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 ""
"Denna nyckel åsidosätter nyckeln i org.gnome.mutter när GNOME-skalet körs."
#: 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 "Slå på kantdockning när fönster släpps på skärmkanter"
#: data/org.gnome.shell.gschema.xml.in:335
#: data/org.gnome.shell.gschema.xml.in:327
msgid "Workspaces are managed dynamically"
msgstr "Arbetsytor hanteras dynamiskt"
#: data/org.gnome.shell.gschema.xml.in:343
#: data/org.gnome.shell.gschema.xml.in:335
msgid "Workspaces only on primary monitor"
msgstr "Arbetsytor endast på primär skärm"
#: 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 "Fördröj fokusändringar i musläge tills pekare slutar röra sig"
@ -495,18 +483,18 @@ msgid "Visit extension homepage"
msgstr "Besök webbsida för tillägg"
#: 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 "Avbryt"
#. 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 "Lösenord"
@ -529,8 +517,8 @@ msgstr "(till exempel användare eller %s)"
#. TTLS and PEAP are actually much more complicated, but this complication
#. is not visible here since we only care about phase2 authentication
#. (and don't even care of which one)
#: js/gdm/loginDialog.js: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 "Användarnamn"
@ -637,65 +625,65 @@ msgctxt "search-result"
msgid "Lock Screen Rotation"
msgstr "Lås skärmrotation"
#: js/misc/util.js:120
#: js/misc/util.js:121
msgid "Command not found"
msgstr "Kommandot hittades inte"
#. 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 "Kunde inte tolka kommando:"
#: js/misc/util.js:164
#: js/misc/util.js:165
#, javascript-format
msgid "Execution of “%s” failed:"
msgstr "Körning av ”%s” misslyckades:"
#: js/misc/util.js:181
#: js/misc/util.js:182
msgid "Just now"
msgstr "Just nu"
#: js/misc/util.js:183
#: js/misc/util.js:184
#, javascript-format
msgid "%d minute ago"
msgid_plural "%d minutes ago"
msgstr[0] "%d minut sedan"
msgstr[1] "%d minuter sedan"
#: js/misc/util.js:187
#: js/misc/util.js:188
#, javascript-format
msgid "%d hour ago"
msgid_plural "%d hours ago"
msgstr[0] "%d timme sedan"
msgstr[1] "%d timmar sedan"
#: js/misc/util.js:191 js/ui/dateMenu.js:162
#: js/misc/util.js:192 js/ui/dateMenu.js:162
msgid "Yesterday"
msgstr "Igår"
#: js/misc/util.js:193
#: js/misc/util.js:194
#, javascript-format
msgid "%d day ago"
msgid_plural "%d days ago"
msgstr[0] "%d dag sedan"
msgstr[1] "%d dagar sedan"
#: js/misc/util.js:197
#: js/misc/util.js:198
#, javascript-format
msgid "%d week ago"
msgid_plural "%d weeks ago"
msgstr[0] "%d vecka sedan"
msgstr[1] "%d veckor sedan"
#: js/misc/util.js:201
#: js/misc/util.js:202
#, javascript-format
msgid "%d month ago"
msgid_plural "%d months ago"
msgstr[0] "%d månad sedan"
msgstr[1] "%d månader sedan"
#: js/misc/util.js:204
#: js/misc/util.js:205
#, javascript-format
msgid "%d year ago"
msgid_plural "%d years ago"
@ -703,20 +691,20 @@ msgstr[0] "%d år sedan"
msgstr[1] "%d år sedan"
#. 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 "Igår, %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"
@ -724,7 +712,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"
@ -732,7 +720,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"
@ -740,20 +728,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 "Igår, %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, %I%M%p"
@ -761,7 +749,7 @@ msgstr "%A, %I%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"
@ -769,17 +757,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 "Surfzonsinloggning"
#: 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."
@ -1025,39 +1013,39 @@ msgstr "Den installerade udisks-versionen stöder inte PIM-inställningen"
msgid "Open with %s"
msgstr "Öppna med %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 ""
"Alternativt kan du ansluta genom att trycka på ”WPS”-knappen på din router."
#: 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 "Anslut"
#: js/ui/components/networkAgent.js:216
#: js/ui/components/networkAgent.js:215
msgid "Key"
msgstr "Nyckel"
#: 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 "Lösenord för privat nyckel"
#: js/ui/components/networkAgent.js:275
#: js/ui/components/networkAgent.js:274
msgid "Identity"
msgstr "Identitet"
#: js/ui/components/networkAgent.js:289
#: js/ui/components/networkAgent.js:288
msgid "Service"
msgstr "Tjänst"
#: 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 "Autentisering krävs"
#: 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 "
@ -1066,31 +1054,31 @@ msgstr ""
"Lösenord eller krypteringsnycklar krävs för att komma åt det trådlösa "
"nätverket ”%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 "Trådbunden 802.1X-autentisering"
#: js/ui/components/networkAgent.js:325
#: js/ui/components/networkAgent.js:324
msgid "Network name"
msgstr "Nätverksnamn"
#: 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-autentisering"
#: 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-kod krävs"
#: 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-koden krävs för den mobila bredbandsenheten"
#: 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
@ -1382,24 +1370,24 @@ msgstr "%s (fjärransluten)"
msgid "%s (console)"
msgstr "%s (konsol)"
#: js/ui/extensionDownloader.js:194
#: js/ui/extensionDownloader.js:232
msgid "Install"
msgstr "Installera"
#: js/ui/extensionDownloader.js:200
#: js/ui/extensionDownloader.js:238
msgid "Install Extension"
msgstr "Installera tillägg"
#: js/ui/extensionDownloader.js:201
#: js/ui/extensionDownloader.js:239
#, javascript-format
msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "Hämta och installera ”%s” från extensions.gnome.org?"
#: js/ui/extensionSystem.js:253
#: js/ui/extensionSystem.js:252
msgid "Extension Updates Available"
msgstr "Uppdateringar för tillägg finns tillgängliga"
#: js/ui/extensionSystem.js:254
#: js/ui/extensionSystem.js:253
msgid "Extension updates are ready to be installed."
msgstr "Uppdateringar för tillägg är redo att installeras."
@ -1495,7 +1483,7 @@ msgstr "Stäng av"
msgid "Leave Off"
msgstr "Lämna avstängd"
#: js/ui/keyboard.js:227
#: js/ui/keyboard.js:226
msgid "Region & Language Settings"
msgstr "Re­gion- & språkinställningar"
@ -1548,11 +1536,11 @@ msgstr "Visa källa"
msgid "Web Page"
msgstr "Webbsida"
#: js/ui/main.js:294
#: js/ui/main.js:290
msgid "Logged in as a privileged user"
msgstr "Inloggad som en privilegierad användare"
#: 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."
@ -1560,15 +1548,15 @@ msgstr ""
"Att köra en session som en privilegierad användare bör undvikas av "
"säkerhetsskäl. Om möjligt bör du logga in som en normal användare."
#: js/ui/main.js:344
#: js/ui/main.js:340
msgid "Screen Lock disabled"
msgstr "Skärmlås inaktiverat"
#: js/ui/main.js:345
#: js/ui/main.js:341
msgid "Screen Locking requires the GNOME display manager."
msgstr "Skärmlås kräver GNOME:s displayhanterare."
#: js/ui/messageTray.js:1440
#: js/ui/messageTray.js:1443
msgid "System Information"
msgstr "Systeminformation"
@ -1602,47 +1590,47 @@ msgstr "Ångra"
msgid "Overview"
msgstr "Översikt"
#: js/ui/padOsd.js:96
#: js/ui/padOsd.js:95
msgid "New shortcut…"
msgstr "Nytt kortkommando…"
#: js/ui/padOsd.js:143
#: js/ui/padOsd.js:142
msgid "Application defined"
msgstr "Programdefinierad"
#: js/ui/padOsd.js:144
#: js/ui/padOsd.js:143
msgid "Show on-screen help"
msgstr "Visa hjälp på skärmen"
#: js/ui/padOsd.js:145
#: js/ui/padOsd.js:144
msgid "Switch monitor"
msgstr "Växla skärm"
#: js/ui/padOsd.js:146
#: js/ui/padOsd.js:145
msgid "Assign keystroke"
msgstr "Tilldela tangenttryckning"
#: js/ui/padOsd.js:212
#: js/ui/padOsd.js:211
msgid "Done"
msgstr "Färdig"
#: js/ui/padOsd.js:718
#: js/ui/padOsd.js:716
msgid "Edit…"
msgstr "Redigera…"
#: js/ui/padOsd.js:760 js/ui/padOsd.js:877
#: js/ui/padOsd.js:758 js/ui/padOsd.js:875
msgid "None"
msgstr "Ingen"
#: js/ui/padOsd.js:831
#: js/ui/padOsd.js:829
msgid "Press a button to configure"
msgstr "Tryck på en knapp för att konfigurera"
#: js/ui/padOsd.js:832
#: js/ui/padOsd.js:830
msgid "Press Esc to exit"
msgstr "Tryck Esc för att avsluta"
#: js/ui/padOsd.js:835
#: js/ui/padOsd.js:833
msgid "Press any key to exit"
msgstr "Tryck på valfri tangent för att avsluta"
@ -1652,12 +1640,12 @@ msgstr "Tryck på valfri tangent för att avsluta"
msgid "Activities"
msgstr "Aktiviteter"
#: js/ui/panel.js:542
#: js/ui/panel.js:556
msgctxt "System menu in the top bar"
msgid "System"
msgstr "System"
#: js/ui/panel.js:658
#: js/ui/panel.js:674
msgid "Top Bar"
msgstr "Systemrad"
@ -1696,7 +1684,7 @@ msgstr "Kunde inte låsa"
msgid "Lock was blocked by an application"
msgstr "Låsning hindrades av ett program"
#: js/ui/screenshot.js:141
#: js/ui/screenshot.js:155
msgid "Screenshot taken"
msgstr "Skärmbild tagen"
@ -2753,6 +2741,7 @@ msgstr "UUID, namn och beskrivning krävs"
#: 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 "Misslyckades med att ansluta till GNOME-skalet\n"
@ -2769,7 +2758,7 @@ msgstr "Inaktivera ett tillägg"
#: 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"
@ -2778,7 +2767,7 @@ msgstr "Inget UUID angivet"
#: 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"
@ -2908,7 +2897,12 @@ msgstr "Mer än en källkatalog angiven"
msgid "Extension “%s” doesn't have preferences\n"
msgstr "Tillägget ”%s” har inga inställningar\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 "Misslyckades med att öppna inställningar för tillägget ”%s”: %s\n"
#: subprojects/extensions-tool/src/command-prefs.c:87
msgid "Opens extension preferences"
msgstr "Öppnar inställningar för tillägg"
@ -2933,10 +2927,6 @@ msgstr "Avinstallera ett tillägg"
msgid "Do not print error messages"
msgstr "Skriv inte ut felmeddelanden"
#: subprojects/extensions-tool/src/main.c:146
msgid "Failed to connect to GNOME Shell"
msgstr "Misslyckades med att ansluta till GNOME-skalet"
#: subprojects/extensions-tool/src/main.c:244
msgid "Path"
msgstr "Sökväg"
@ -3067,6 +3057,19 @@ msgstr[1] "%u ingångar"
msgid "System Sounds"
msgstr "Systemljud"
#~ msgid "Enable introspection API"
#~ msgstr "Aktivera introspektions-API"
#~ msgid ""
#~ "Enables a D-Bus API that allows to introspect the application state of "
#~ "the shell."
#~ msgstr ""
#~ "Aktiverar ett D-Bus-API som tillåter introspektion av programtillståndet "
#~ "för skalet."
#~ msgid "Failed to connect to GNOME Shell"
#~ msgstr "Misslyckades med att ansluta till GNOME-skalet"
#~ msgid "Minimize"
#~ msgstr "Minimera"

275
po/uk.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-08-17 23:56+0000\n"
"PO-Revision-Date: 2021-08-18 09:35+0300\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"
@ -253,21 +253,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 для самоаналізу стану оболонки."
#: 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 "
@ -280,106 +270,106 @@ msgstr ""
"поточній версії як 'дані' може бути збережено такі значення: • “позиція”: "
"позиція піктограми програми на сторінці"
#: 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."
@ -387,11 +377,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-"
@ -401,7 +391,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."
@ -409,57 +399,57 @@ 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 "Затримувати зміни фокусу миші, поки вказівник не перестане рухатись"
@ -494,18 +484,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 "Пароль"
@ -528,8 +518,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 "Користувач"
@ -636,26 +626,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"
@ -664,7 +654,7 @@ msgstr[1] "%d хвилини тому"
msgstr[2] "%d хвилин тому"
msgstr[3] "%d хвилина тому"
#: js/misc/util.js:187
#: js/misc/util.js:188
#, javascript-format
msgid "%d hour ago"
msgid_plural "%d hours ago"
@ -673,11 +663,11 @@ msgstr[1] "%d години тому"
msgstr[2] "%d годин тому"
msgstr[3] "%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"
@ -686,7 +676,7 @@ msgstr[1] "%d дні тому"
msgstr[2] "%d днів тому"
msgstr[3] "%d день тому"
#: js/misc/util.js:197
#: js/misc/util.js:198
#, javascript-format
msgid "%d week ago"
msgid_plural "%d weeks ago"
@ -695,7 +685,7 @@ msgstr[1] "%d тижні тому"
msgstr[2] "%d тижнів тому"
msgstr[3] "%d тиждень тому"
#: js/misc/util.js:201
#: js/misc/util.js:202
#, javascript-format
msgid "%d month ago"
msgid_plural "%d months ago"
@ -704,7 +694,7 @@ msgstr[1] "%d місяці тому"
msgstr[2] "%d місяців тому"
msgstr[3] "%d місяць тому"
#: js/misc/util.js:204
#: js/misc/util.js:205
#, javascript-format
msgid "%d year ago"
msgid_plural "%d years ago"
@ -714,20 +704,20 @@ msgstr[2] "%d років тому"
msgstr[3] "%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"
@ -735,7 +725,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"
@ -743,7 +733,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"
@ -751,20 +741,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"
@ -772,7 +762,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"
@ -780,17 +770,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."
@ -1034,70 +1024,70 @@ 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 "
"“%s”."
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 "Дротова аутентифікація 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 "Пін-код"
#: 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
@ -1399,24 +1389,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 "Приготовано до встановлення оновлення розширень."
@ -1510,7 +1500,7 @@ msgstr "Вимкнути"
msgid "Leave Off"
msgstr "Покинути"
#: js/ui/keyboard.js:227
#: js/ui/keyboard.js:226
msgid "Region & Language Settings"
msgstr "Параметри регіону та мови"
@ -1563,11 +1553,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."
@ -1575,15 +1565,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."
#: js/ui/messageTray.js:1440
#: js/ui/messageTray.js:1443
msgid "System Information"
msgstr "Інформація про систему"
@ -1617,47 +1607,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 "Натисніть будь-яку клавішу, щоб вийти"
@ -1667,12 +1657,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 "Верхня панель"
@ -1711,7 +1701,7 @@ msgstr "Неможливо заблокувати"
msgid "Lock was blocked by an application"
msgstr "Блокування заборонено програмою"
#: js/ui/screenshot.js:141
#: js/ui/screenshot.js:155
msgid "Screenshot taken"
msgstr "Знімок зроблено"
@ -2420,13 +2410,10 @@ msgid "%d × %d"
msgstr "%d × %d"
#: js/ui/windowMenu.js:27
#| msgid "Hide Text"
msgid "Hide"
msgstr "Приховати"
#: js/ui/windowMenu.js:34
#| msgctxt "search-result"
#| msgid "Restart"
msgid "Restore"
msgstr "Відновити"
@ -2783,6 +2770,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"
@ -2799,7 +2787,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"
@ -2808,7 +2796,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"
@ -2938,7 +2926,13 @@ 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 "Відкриває параметри розширення"
@ -2963,10 +2957,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 "Шлях"
@ -3101,6 +3091,17 @@ msgstr[3] "%u вхід"
msgid "System Sounds"
msgstr "Системні звуки"
#~ msgid "Enable introspection API"
#~ msgstr "Увімкнути API для самоаналізу"
#~ msgid ""
#~ "Enables a D-Bus API that allows to introspect the application state of "
#~ "the shell."
#~ msgstr "Вмикає D-Bus API для самоаналізу стану оболонки."
#~ msgid "Failed to connect to GNOME Shell"
#~ msgstr "Не вдалося з'єднатися із GNOME Shell"
#~ msgid "Minimize"
#~ msgstr "Згорнути"

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

@ -1126,7 +1126,7 @@ _shell_app_add_window (ShellApp *app,
app->running_state->interesting_windows++;
shell_app_sync_running_state (app);
if (app->started_on_workspace >= 0)
if (app->started_on_workspace >= 0 && !meta_window_is_on_all_workspaces (window))
meta_window_change_workspace_by_index (window, app->started_on_workspace, FALSE);
app->started_on_workspace = -1;

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

@ -180,7 +180,7 @@ st_cflags = [
libst = shared_library('st-1.0',
sources: st_gir_sources + st_nogir_sources + croco_sources,
c_args: st_cflags,
dependencies: [clutter_dep, gmodule_dep, gtk_dep, mutter_dep, libxml_dep, m_dep],
dependencies: [clutter_dep, gtk_dep, mutter_dep, libxml_dep, m_dep],
build_rpath: mutter_typelibdir,
install_rpath: mutter_typelibdir,
install_dir: pkglibdir,

View File

@ -80,22 +80,8 @@ adjustment_value_notify_cb (StAdjustment *adjustment,
GParamSpec *pspec,
StViewport *viewport)
{
static gboolean invalidate_paint_volume_valid = FALSE;
static void (* invalidate_paint_volume) (ClutterActor *) = NULL;
clutter_actor_invalidate_transform (CLUTTER_ACTOR (viewport));
if (!invalidate_paint_volume_valid)
{
g_module_symbol (g_module_open (NULL, G_MODULE_BIND_LAZY),
"clutter_actor_invalidate_paint_volume",
(gpointer *)&invalidate_paint_volume);
invalidate_paint_volume_valid = TRUE;
}
if (invalidate_paint_volume)
invalidate_paint_volume (CLUTTER_ACTOR (viewport));
clutter_actor_invalidate_paint_volume (CLUTTER_ACTOR (viewport));
clutter_actor_queue_relayout (CLUTTER_ACTOR (viewport));
}

View File

@ -1732,19 +1732,7 @@ st_widget_recompute_style (StWidget *widget,
if (!paint_equal)
{
static gboolean invalidate_paint_volume_valid = FALSE;
static void (* invalidate_paint_volume) (ClutterActor *) = NULL;
if (!invalidate_paint_volume_valid)
{
g_module_symbol (g_module_open (NULL, G_MODULE_BIND_LAZY),
"clutter_actor_invalidate_paint_volume",
(gpointer *)&invalidate_paint_volume);
invalidate_paint_volume_valid = TRUE;
}
if (invalidate_paint_volume)
invalidate_paint_volume (CLUTTER_ACTOR (widget));
clutter_actor_invalidate_paint_volume (CLUTTER_ACTOR (widget));
next_paint_state (widget);

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

@ -56,6 +56,14 @@ launch_extension_prefs (const char *uuid)
NULL,
&error);
if (error)
{
g_dbus_error_strip_remote_error (error);
g_printerr (_("Failed to open prefs for extension “%s”: %s\n"),
uuid, error->message);
return FALSE;
}
return TRUE;
}

View File

@ -143,7 +143,7 @@ get_extension_property (GDBusProxy *proxy,
&error);
if (response == NULL)
{
g_printerr (_("Failed to connect to GNOME Shell"));
g_printerr (_("Failed to connect to GNOME Shell\n"));
return NULL;
}

View File

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