citadel #1

Closed
isa wants to merge 29 commits from citadel into citadel-45.0
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+',
)