Compare commits

..

14 Commits

Author SHA1 Message Date
Florian Müllner
b02e43d84c Bump version to 45.2
Update NEWS.
2023-12-01 20:15:09 +01:00
Florian Müllner
8ed3b72a56 workspace-indicator: Update visibility on window-type changes
The visibility depends on the type, so we should listen for
changes (even if the property is unlikely to change).

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/292>
(cherry picked from commit 30a15387b5)
2023-12-01 20:03:38 +01:00
Florian Müllner
a929cf9370 workspace-indicator: Don't hide previews on other monitors
Workspace thumbnails are clipped, so there's no major benefit
of hiding the actors explicitly.

On the other hand, the check is useful on size/position changes
to avoid unnecessary relayouts.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/292>
(cherry picked from commit b5b841dd38)
2023-12-01 20:03:38 +01:00
Florian Müllner
a5343c33ec window-list: Update visibility on window-type changes
The visibility depends on the type, so we should listen for
changes (even if the property is unlikely to change).

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/292>
(cherry picked from commit 071584621e)
2023-12-01 20:03:15 +01:00
Florian Müllner
8efd73c50e window-list: Don't hide previews on other monitors
Workspace thumbnails are clipped, so there's no major benefit
of hiding the actors explicitly.

On the other hand, the check is useful on size/position changes
to avoid unnecessary relayouts.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/292>
(cherry picked from commit 5c57f44838)
2023-12-01 20:03:15 +01:00
Florian Müllner
d5f617b3e2 window-list: Move additional padding into buttons
Commit ca1c4b0f9e added additional padding, which means that the
interactive area of buttons no longer extends to the bottom of
the screen.

Address this by moving the new padding into the buttons themselves.
That restores the Fittsability of the bottom bar, without affecting
the cleaner visual appearance.

Close https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/453

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/291>
2023-12-01 20:02:51 +01:00
Florian Müllner
d1ff099200 window-list: Clean up stylesheet indent
Replaces tabs with spaces.

Part-of:
<https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/291>
2023-12-01 20:02:49 +01:00
Florian Müllner
6bbc329e7b apps-menu: Use customized layout manager to limit height
To avoid continuous height changes while browsing through categories,
we let the list of categories determine the overall height, and rely
on scrolling for the list of apps within a category.

We currently achieve this by assigning a fixed height via the
`style` property. This has been found to trigger a crash when
running headless, as we end up querying an actor's height request
before a valid resource scale is available.

Instead, use a custom layout manager, which seems more elegant anyway.

Close: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/472
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/290>
(cherry picked from commit 5652182fb3)
2023-12-01 19:48:04 +01:00
Florian Müllner
ed31f08f2f apps-menu: Remove vertical separator
Ever since gnome-shell stopped using a stippled separator in the
calendar menu, the styling required by the separator has been
missing.

There haven't been any complaints about the invisible separator,
so we can just as well drop it altogether.

Part-of:
<https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/290>
(cherry picked from commit c3cbef19ac)
2023-12-01 19:48:03 +01:00
Florian Müllner
ed60502f10 apps-menu: Use stylesheet to set width
The `style` property is useful for computed CSS declarations,
but for regular styling the stylesheet is preferable.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/290>
(cherry picked from commit 8c8f990a28)
2023-12-01 19:47:16 +01:00
Florian Müllner
0fa592a516 apps-menu: Adjust to events API changes
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/290>
(cherry picked from commit f6a6bdda99)
2023-12-01 19:47:16 +01:00
Florian Müllner
f27b239f55 Bump version to 45.1
Update NEWS.
2023-11-01 00:28:14 +01:00
Florian Müllner
7f192d0208 screenshot-window-sizer: Handle wrapping around backwards
The mod takes care of wrapping at the top, but not when
decrementing 0. Fix this by using Array.prototype.at(),
which handles negative indexes.

Close https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/467

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/284>
(cherry picked from commit dd8ee2931a)
2023-11-01 00:24:47 +01:00
Florian Müllner
eff6f6ef88 screenshot-window-sizer: Use built-in support for reversed bindings
Mutter has had explicit support for reversed bindings for a while now.
Use that, as it's more reliably than examining the modifiers manually.

Close https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/467

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/284>
(cherry picked from commit f530acbf9e)
2023-11-01 00:24:47 +01:00
136 changed files with 8057 additions and 15389 deletions

View File

@@ -1,17 +0,0 @@
# SPDX-FileCopyrightText: 2024 Florian Müllner <fmuellner@gnome.org>
# SPDX-License-Identifier: CC0-1.0
root = true
[*]
charset = utf-8
end_of_line = lf
indent_style = space
trim_trailing_whitespace = true
[*.js]
indent_size = 4
[meson.build]
indent_size = 2

7
.eslintrc.yml Normal file
View File

@@ -0,0 +1,7 @@
# SPDX-FileCopyrightText: 2019 Florian Müllner <fmuellner@gnome.org>
#
# SPDX-License-Identifier: MIT OR LGPL-2.0-or-later
extends:
- ./lint/eslintrc-gjs.yml
- ./lint/eslintrc-shell.yml

4
.gitattributes vendored
View File

@@ -1,4 +0,0 @@
# SPDX-FileCopyrightText: No rights reserved
# SPDX-License-Identifier: CC0-1.0
package-lock.json -diff

2
.gitignore vendored
View File

@@ -9,6 +9,4 @@ zip-files/
*.patch
*.sw?
.buildconfig
.eslintcache
.vscode
node_modules

View File

@@ -3,34 +3,40 @@
# SPDX-License-Identifier: GPL-2.0-or-later
include:
- project: Infrastructure/freedesktop-ci-templates
file: templates/fedora.yml
- project: Infrastructure/freedesktop-ci-templates
file: templates/ci-fairy.yml
- project: GNOME/citemplates
file: templates/default-rules.yml
- component: gitlab.gnome.org/GNOME/citemplates/release-service@master
inputs:
job-stage: deploy
dist-job-name: fedora-dist-tarball
tarball-artifact-path: "$TARBALL_ARTIFACT_PATH"
- remote: 'https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/bbe5232986c9b98eb1efe62484e07216f7d1a4df/templates/fedora.yml'
- remote: "https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/6f86b8bcb0cd5168c32779c4fea9a893c4a0c046/templates/ci-fairy.yml"
stages:
- pre-review
- pre_review
- prepare
- review
- build
- deploy
default:
image: registry.gitlab.gnome.org/gnome/gnome-shell/fedora/43:2025-09-10.1
image: registry.gitlab.gnome.org/gnome/gnome-shell/fedora/35:2022-02-18.0
# Cancel jobs if newer commits are pushed to the branch
interruptible: true
# Auto-retry jobs in case of infra failures
retry:
max: 1
when:
- 'runner_system_failure'
- 'stuck_or_timeout_failure'
- 'scheduler_failure'
- 'api_failure'
variables:
FDO_UPSTREAM_REPO: GNOME/gnome-shell-extensions
MESON_BUILD_DIR: build
TARBALL_ARTIFACT_PATH: "${MESON_BUILD_DIR}/meson-dist/${CI_PROJECT_NAME}-${CI_COMMIT_TAG}.tar.xz"
LINT_LOG: "eslint-report.xml"
.pipeline-guard:
workflow:
rules:
- if: '$CI_MERGE_REQUEST_IID'
- if: '$CI_COMMIT_TAG'
- if: '$CI_COMMIT_BRANCH'
.pipeline_guard: &pipeline_guard
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
- if: '$CI_COMMIT_TAG'
@@ -38,14 +44,22 @@ variables:
- if: '$CI_COMMIT_BRANCH =~ /^gnome-[0-9-]+$/'
- when: 'manual'
.prereview-req:
needs:
- check-commit-log
.gnome-shell-extensions.fedora:34:
variables:
FDO_DISTRIBUTION_VERSION: 34
FDO_DISTRIBUTION_TAG: '2021-08-31.0'
FDO_DISTRIBUTION_PACKAGES: >
meson git gettext sassc
check-commit-log:
.prereview_req: &prereview_req
needs:
- check_commit_log
- check-merge-request
check_commit_log:
extends:
- .fdo.ci-fairy
stage: pre-review
stage: pre_review
script:
- if [[ x"$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" != "x" ]] ;
then
@@ -53,8 +67,7 @@ check-commit-log:
else
echo "Not a merge request" ;
fi
rules:
- !reference [.pipeline-guard, rules]
<<: *pipeline_guard
artifacts:
expire_in: 1 week
paths:
@@ -62,47 +75,61 @@ check-commit-log:
reports:
junit: commit-message-junit-report.xml
check-merge-request:
extends:
- .fdo.ci-fairy
stage: pre_review
script:
- if [[ x"$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" != "x" ]] ;
then
ci-fairy check-merge-request --require-allow-collaboration --junit-xml=check-merge-request-report.xml ;
else
echo "Not a merge request" ;
fi
<<: *pipeline_guard
artifacts:
expire_in: 1 week
paths:
- check-merge-request-report.xml
reports:
junit: check-merge-request-report.xml
check-reuse:
stage: pre-review
stage: pre_review
image:
name: fsfe/reuse:latest
entrypoint: [""]
script:
- reuse lint
js-check:
build-fedora-container:
extends:
- .fdo.container-build@fedora@x86_64
- .gnome-shell-extensions.fedora:34
stage: prepare
<<: *prereview_req
js_check:
stage: review
needs:
- !reference [.prereview-req, needs]
<<: *prereview_req
script:
- gjs-check-syntax
eslint:
stage: review
needs:
- !reference [.prereview-req, needs]
variables:
LINT_LOG: "eslint-report.xml"
<<: *prereview_req
script:
- ./tools/run-eslint.sh --output-file "$LINT_LOG" --format junit --stdout
- export NODE_PATH=$(npm root -g)
- ./.gitlab-ci/run-eslint --output-file ${LINT_LOG} --format junit --stdout
artifacts:
paths:
- ${LINT_LOG}
reports:
junit: "$LINT_LOG"
potfile-js-check:
stage: review
needs:
- !reference [.prereview-req, needs]
script:
- gjs-check-potfiles
artifacts:
reports:
junit: gjs-check-potfiles.junit.xml
junit: ${LINT_LOG}
build-bundles:
stage: build
needs:
- !reference [.prereview-req, needs]
<<: *prereview_req
script:
- ./export-zips.sh
artifacts:
@@ -111,36 +138,33 @@ build-bundles:
paths:
- zip-files/
dist-bundles:
stage: deploy
needs:
- build-bundles
script:
- gnome-extensions upload --accept-tos --user "$EGO_USER" --password "$EGO_PASSWORD" zip-files/*.zip
rules:
- if: '$CI_COMMIT_TAG'
fedora-build:
extends:
- .fdo.distribution-image@fedora
- .gnome-shell-extensions.fedora:34
stage: build
needs:
- !reference [.prereview-req, needs]
- build-fedora-container
script:
- meson setup "$MESON_BUILD_DIR" --werror -Dextension_set=all -Dclassic_mode=true
- meson compile -C "$MESON_BUILD_DIR"
- meson test -C "$MESON_BUILD_DIR"
- meson install -C "$MESON_BUILD_DIR"
- meson setup build --werror -Dextension_set=all -Dclassic_mode=true
- meson compile -C build
- meson test -C build
- meson install -C build
artifacts:
paths:
- "$MESON_BUILD_DIR"
- build
fedora-dist:
extends:
- .fdo.distribution-image@fedora
- .gnome-shell-extensions.fedora:34
stage: deploy
needs:
- fedora-build
variables:
GIT_SUBMODULE_STRATEGY: normal
script:
- meson dist -C "$MESON_BUILD_DIR"
- meson dist -C build
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes:
@@ -151,9 +175,7 @@ fedora-dist-tarball:
extends: fedora-dist
artifacts:
expose_as: 'Get tarball here'
name: "${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}"
when: always
paths:
- "$TARBALL_ARTIFACT_PATH"
- build/meson-dist/$CI_PROJECT_NAME-$CI_COMMIT_TAG.tar.xz
rules:
- if: '$CI_COMMIT_TAG'

58
.gitlab-ci/run-eslint Executable file
View File

@@ -0,0 +1,58 @@
#!/usr/bin/env node
// SPDX-FileCopyrightText: 2023 Florian Müllner <fmuellner@gnome.org>
//
// SPDX-License-Identifier: GPL-2.0-or-later
const {ESLint} = require('eslint');
console.log(`Running ESLint version ${ESLint.version}...`);
const fs = require('fs');
const path = require('path');
function hasOption(...names) {
return process.argv.some(arg => names.includes(arg));
}
function getOption(...names) {
const optIndex =
process.argv.findIndex(arg => names.includes(arg)) + 1;
if (optIndex === 0)
return undefined;
return process.argv[optIndex];
}
(async function main() {
const outputOption = getOption('--output-file', '-o');
const outputPath = outputOption ? path.resolve(outputOption) : null;
const sourceDir = path.dirname(process.argv[1]);
process.chdir(path.resolve(sourceDir, '..'));
const sources = ['extensions'];
const eslint = new ESLint();
const results = await eslint.lintFiles(sources);
const formatter = await eslint.loadFormatter(getOption('--format', '-f'));
const resultText = formatter.format(results);
if (outputPath) {
fs.mkdirSync(path.dirname(outputPath), {recursive: true});
fs.writeFileSync(outputPath, resultText);
if (hasOption('--stdout')) {
const consoleFormatter = await eslint.loadFormatter();
console.log(consoleFormatter.format(results));
}
} else {
console.log(resultText);
}
process.exitCode = results.some(r => r.errorCount > 0) ? 1 : 0;
})().catch((error) => {
process.exitCode = 1;
console.error(error);
});

View File

@@ -1,72 +0,0 @@
<!--
Please read https://handbook.gnome.org/issues/reporting.html
first to ensure that you create a clear and specific issue.
-->
### Which extension
<!--
Which extension is the issue about?
See the project README for a complete list of extensions:
https://gitlab.gnome.org/GNOME/gnome-shell-extensions#extensions
Do not report issues for any other extensions here.
Report general issues about gnome-shell's extension support to
https://gitlab.gnome.org/GNOME/gnome-shell.
Report issues with the extensions.gnome.org website to
https://gitlab.gnome.org/Infrastructure/extensions-web/
-->
### Affected version
<!--
Provide at least the following information:
* Your OS and version
* Extension version
* Affected GNOME Shell version
-->
### Bug summary
<!--
Provide a short summary of the bug you encountered.
-->
### Steps to reproduce
<!--
1. Step one
2. Step two
3. ...
-->
### What happened
<!--
What did the extension do that was unexpected?
-->
### What did you expect to happen
<!--
What did you expect the extension to do?
-->
### Relevant logs, screenshots, screencasts etc.
<!--
If you have further information, such as technical documentation, logs,
screenshots or screencasts related, please provide them here.
If the bug is a crash, please obtain a stack trace with installed debug
symbols (at least for GNOME Shell and Mutter) and attach it to
this issue following the instructions on
https://handbook.gnome.org/issues/stack-traces.html.
-->
<!-- Do not remove the following line. -->
/label ~"1. Bug"

View File

@@ -1,2 +0,0 @@
SPDX-FileCopyrightText: 2024 Florian Müllner <fmuellner@gnome.org>
SPDX-License-Identifier: CC-BY-SA-4.0

View File

@@ -1,47 +0,0 @@
<!--
Please read https://handbook.gnome.org/issues/reporting.html
first to ensure that you create a clear and specific issue.
-->
### Which extension
<!--
Which extension is the issue about?
See the project README for a complete list of extensions:
https://gitlab.gnome.org/GNOME/gnome-shell-extensions#extensions
Do not report issues for any other extensions here.
Report general issues about gnome-shell's extension support to
https://gitlab.gnome.org/GNOME/gnome-shell.
Report issues with the extensions.gnome.org website to
https://gitlab.gnome.org/Infrastructure/extensions-web/
-->
### Feature summary
<!--
Describe what you would like to be able to do with the extension
that you currently cannot do.
-->
### How would you like it to work
<!--
If you can think of a way the extension might be able to do this,
let us know here.
-->
### Relevant links, screenshots, screencasts etc.
<!--
If you have further information, such as technical documentation,
code, mockups or a similar feature in another desktop environments,
please provide them here.
-->
<!-- Do not remove the following line. -->
/label ~"1. Feature"

View File

@@ -1,3 +0,0 @@
SPDX-FileCopyrightText: 2024 Florian Müllner <fmuellner@gnome.org>
SPDX-License-Identifier: CC-BY-SA-4.0

22
.reuse/dep5 Normal file
View File

@@ -0,0 +1,22 @@
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: gnome-shell-extensions
Upstream-Contact: Florian Müllner <fmuellner@gnome.org>
Source: https://gitlab.gnome.org/GNOME/gnome-shell-extensions
Files: NEWS README.md HACKING.md data/HACKING
Copyright: No rights reserved
License: CC0-1.0
Files: *.json.in *.desktop.in *.gschema.override
Copyright: Florian Müllner <fmuellner@gnome.org>
License: GPL-2.0-or-later
# managed by translation teams
Files: po/*.po
Copyright: GNOME Translation Teams <i18n@gnome.org>
License: GPL-2.0-or-later
# managed by translation teams
Files: po/LINGUAS po/POTFILES.in
Copyright: No rights reserved
License: CC0-1.0

View File

@@ -1,9 +1,3 @@
<!--
SPDX-FileCopyrightText: 2011 Giovanni Campagna <gcampagna@src.gnome.org>
SPDX-FileCopyrightText: 2017 Florian Müllner <fmuellner@gnome.org>"""
SPDX-License-Identifier: CC-BY-SA-4.0
-->
## Creating a New Extension
To create a new extension, add a subdirectory in extensions. Then create
@@ -26,6 +20,9 @@ need in gnome-shell.
Generally, we follow [GJS coding style][coding-style], which in short is:
indent 4 spaces, no tabs, space after comma, no space after function call.
The Emacs mode line for this
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
Imports should be at the top, in two groups, one for standard
imports (like imports.lang or imports.dbus) and introspection,
the other for Shell API. Within the same group, put everything

View File

@@ -1,170 +0,0 @@
Creative Commons Attribution-ShareAlike 4.0 International
Creative Commons Corporation (“Creative Commons”) is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an “as-is” basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible.
Using Creative Commons Public Licenses
Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses.
Considerations for licensors: Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC-licensed material, or material used under an exception or limitation to copyright. More considerations for licensors.
Considerations for the public: By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensors permission is not necessary for any reasonfor example, because of any applicable exception or limitation to copyrightthen that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described.
Although not required by our licenses, you are encouraged to respect those requests where reasonable. More considerations for the public.
Creative Commons Attribution-ShareAlike 4.0 International Public License
By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution-ShareAlike 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions.
Section 1 Definitions.
a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image.
b. Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License.
c. BY-SA Compatible License means a license listed at creativecommons.org/compatiblelicenses, approved by Creative Commons as essentially the equivalent of this Public License.
d. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights.
e. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements.
f. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material.
g. License Elements means the license attributes listed in the name of a Creative Commons Public License. The License Elements of this Public License are Attribution and ShareAlike.
h. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License.
i. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license.
j. Licensor means the individual(s) or entity(ies) granting rights under this Public License.
k. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them.
l. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world.
m. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning.
Section 2 Scope.
a. License grant.
1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to:
A. reproduce and Share the Licensed Material, in whole or in part; and
B. produce, reproduce, and Share Adapted Material.
2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions.
3. Term. The term of this Public License is specified in Section 6(a).
4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material.
5. Downstream recipients.
A. Offer from the Licensor Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License.
B. Additional offer from the Licensor Adapted Material. Every recipient of Adapted Material from You automatically receives an offer from the Licensor to exercise the Licensed Rights in the Adapted Material under the conditions of the Adapters License You apply.
C. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material.
6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i).
b. Other rights.
1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise.
2. Patent and trademark rights are not licensed under this Public License.
3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties.
Section 3 License Conditions.
Your exercise of the Licensed Rights is expressly made subject to the following conditions.
a. Attribution.
1. If You Share the Licensed Material (including in modified form), You must:
A. retain the following if it is supplied by the Licensor with the Licensed Material:
i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated);
ii. a copyright notice;
iii. a notice that refers to this Public License;
iv. a notice that refers to the disclaimer of warranties;
v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable;
B. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and
C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License.
2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information.
3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable.
b. ShareAlike.In addition to the conditions in Section 3(a), if You Share Adapted Material You produce, the following conditions also apply.
1. The Adapters License You apply must be a Creative Commons license with the same License Elements, this version or later, or a BY-SA Compatible License.
2. You must include the text of, or the URI or hyperlink to, the Adapter's License You apply. You may satisfy this condition in any reasonable manner based on the medium, means, and context in which You Share Adapted Material.
3. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, Adapted Material that restrict exercise of the rights granted under the Adapter's License You apply.
Section 4 Sui Generis Database Rights.
Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material:
a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database;
b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material, including for purposes of Section 3(b); and
c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database.
For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights.
Section 5 Disclaimer of Warranties and Limitation of Liability.
a. Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You.
b. To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You.
c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability.
Section 6 Term and Termination.
a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically.
b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates:
1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or
2. upon express reinstatement by the Licensor.
c. For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License.
d. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License.
e. Sections 1, 5, 6, 7, and 8 survive termination of this Public License.
Section 7 Other Terms and Conditions.
a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed.
b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License.
Section 8 Interpretation.
a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License.
b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions.
c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor.
d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority.
Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark “Creative Commons” or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses.
Creative Commons may be contacted at creativecommons.org.

264
NEWS
View File

@@ -1,258 +1,22 @@
50.alpha
========
* classic: Drop xorg sessions [Jordan; !283]
* classic: Deifne a gnome-session session [Adrian; !3960]
* Misc. bug fixes and cleanups [Florian, Jordan; !425, !429, !430, !432, !431,
!433, !434, !435, !439]
Contributors:
Florian Müllner, Jordan Petridis, Adrian Vovk
Translators:
BoF ButterflyOfFire [kab], Giannis Antypas [el],
Asier Saratsua Garmendia [eu], Hugo Carvalho [pt], twlvnn kraftwerk [bg],
Baurzhan Muftakhidinov [kk], Ibai Oihanguren Sala [eu]
49.0
45.2
====
* window-list: Adjust to gnome-shell changes [Florian; !421]
* system-monitor: Unbreak on BSD [Antoine; !356]
* Misc. bug fixes and cleanups [Florian; !422, !423]
Contributors:
Antoine Jacoutot, Florian Müllner
Translators:
Jiri Grönroos [fi], Aurimas Aurimas Černius [lt]
49.rc
=====
Translators:
Emilio Sepúlveda [ia], Dušan Kazik [sk], Daniel Rusek [cs],
Nathan Follens [nl], Piotr Drąg [pl], Balázs Úr [hu], Yosef Or Boczko [he]
49.beta
=======
* Misc. bug fixes and cleanups [Florian; !408]
Contributors:
Florian Müllner
Translators:
Anders Jonsson [sv], Makoto Sakaguchi [ja], Danial Behzadi [fa],
Jordi Mas i Hernandez [ca]
49.alpha.1
==========
* workspaces-indicator, window-list: Better expose workspace names
[Florian; !405]
* window-list: Animate transition to/from overview [Florian; !412]
* Misc. bug fixes and cleanups [Florian; !409, !411, !413]
Contributors:
Florian Müllner
Translators:
Martin [sl], Emin Tufan Çetin [tr], Yuri Chornoivan [uk], Luming Zh [zh_CN],
Yago Raña [gl], Ekaterine Papava [ka], Vasil Pupkin [be],
Álvaro Burns [pt_BR], Sergej A. [ru]
49.alpha.0
==========
* windowsNavigator: Fix handling keyboard shortcuts [Daniel; !395]
* build: Allow disabling the X11 session [Neal; !396, !400]
* Disable X11 session by default [Jordan; !399]
* Misc. bug fixes and cleanups [Florian; !398, !406]
Contributors:
Daniel Buch Hansen, Neal Gompa, Florian Müllner, Jordan Petridis
Translators:
Emilio Sepúlveda [ia]
48.1
====
Translators:
Hugo Carvalho [pt], Danial Behzadi [fa]
48.0
====
* apps-menu: Fix scrolling items into view on keynav [Victor; !391]
* Misc. bug fixes and cleanups [Florian, Stuart; !390, !392]
Contributors:
Stuart Hayhurst, Victor Kareh, Florian Müllner
48.rc
=====
* Misc. bug fixes and cleanups [Florian; !385, !388]
Contributors:
Florian Müllner
Translators:
Emilio Sepúlveda [ia], Mathews M [ml], Daniel Rusek [cs], Piotr Drąg [pl],
Anders Jonsson [sv], Ekaterine Papava [ka], Yuri Chornoivan [uk],
Aurimas Černius [lt], Luming Zh [zh_CN], Jiri Grönroos [fi]
48.beta
=======
* window-list: Fix regression in chrome tracking [Florian; !379]
* Misc. bug fixes and cleanups [Florian; !380]
Contributors:
Florian Müllner, Emilio Sepúlveda
Translators:
Rafael Fontenelle [pt_BR], Emilio Sepúlveda [ia]
48.alpha
========
* classic: Add missing top-bar indicators [Florian; !339]
* window-list: Fix window state styling [Florian; !342]
* window-list: Fix "ignore-workspace" setting getting reset [Florian; !341]
* window-list: Allow rearranging window buttons [Florian, Jakub; !338]
* window-list: Add workspaces page to preference dialog [Florian; !344]
* places-menu: Sync list of places with nautilus [Florian; !340]
* places-menu: Fix a11y labelling [Florian; #542]
* places-menu: Fix opening drives with mount operations [Florian; !361]
* window-list: Fix hiding when entering overview with gestures [Florian; !364]
* workspace-indicator: Only show previews of regular windows [Florian; !363]
* window-list: Add attention indicator [Florian; !366]
* Misc. bug fixes and cleanups [Florian, Bartłomiej; !337, !343, !345, !347,
!348, !349, !351, !352, !353, !354, !358, !362, !365, !367, !368, !370, !375]
Contributors:
Florian Müllner, Bartłomiej Piotrowski, Jakub Steiner
Translators:
Fabio Tomat [fur], Martin [sl], Jordi Mas i Hernandez [ca], Vasil Pupkin [be],
Nathan Follens [nl], Artur S0 [ru], Марко Костић [sr],
Yaron Shahrabani [he], Sabri Ünal [tr], Yi-Jyun Pan [zh_TW]
47.0
====
Translators:
twlvnn kraftwerk [bg], Alexander Shopov [bg], Fran Dieguez [gl],
Aurimas Černius [lt], Daniel [es], Andika Triwidada [id],
Andi Chandler [en_GB], Ask Hjorth Larsen [da], Aefgh Threenine [th],
Dušan Kazik [sk], Rūdolfs Mazurs [lv], Irénée THIRION [fr]
47.rc
=====
* Misc. bug fixes and cleanups [Sophie; !333]
Contributors:
Sophie Herold
Translators:
Daniel Șerbănescu [ro], Giannis Antypas [el], Ekaterine Papava [ka],
Jordi Mas i Hernandez [ca], Yuri Chornoivan [uk], Jiri Grönroos [fi],
Daniel Rusek [cs], Vasil Pupkin [be], Luming Zh [zh_CN], Brage Fuglseth [nb],
Asier Sarasua Garmendia [eu], Danial Behzadi [fa], Rafael Fontenelle [pt_BR],
Quentin PAGÈS [oc], Anders Jonsson [sv], Jürgen Benvenuti [de],
Changwoo Ryu [ko], Hugo Carvalho [pt], Piotr Drąg [pl], Sabri Ünal [tr]
47.beta
=======
* window-list: Modernize styling [Jakub; !330]
* Include "status-icons" extension [Florian; !194]
* Misc. bug fixes and cleanups [Florian; !328, !331, !327]
Contributors:
Florian Müllner, Jakub Steiner
Translators:
Sabri Ünal [tr], Chao-Hsiung Liao [zh_TW]
47.alpha
========
* Improve workspace previews in window-list and workspace-indicator
[Florian; !307, !316]
* apps-menu: Fix a11y of category labels [Florian; !319]
* window-list: Fix long-press support [Florian; !320]
* window-list: Animate transitions [Florian; !325]
* Misc. bug fixes and cleanups [Florian; !315, !321, !324]
Contributors:
Florian Müllner
Translators:
Jordi Mas i Hernandez [ca], Martin [sl], Hugo Carvalho [pt], Jose Riha [sk],
Scrambled 777 [hi], Artur S0 [ru], Милош Поповић [sr], Yosef Or Boczko [he],
Balázs Úr [hu]
46.1
====
* screenshot-window-sizer: Add flathub-recommended size [Florian; !317]
Contributors:
Florian Müllner
Translators:
Rachida SACI [kab], Matheus Polkorny [pt_BR], Fabio Tomat [fur]
46.0
====
* system-monitor: Fix net speed [Florian; !313]
* Misc. bug fixes and cleanups [Aral; !311]
Contributors:
Aral Balkan, Florian Müllner
Translators:
Anders Jonsson [sv], Piotr Drąg [pl], Balázs Úr [hu], Milo Casagrande [it],
Quentin PAGÈS [oc], Athmane MOKRAOUI [kab], Changwoo Ryu [ko],
Ask Hjorth Larsen [da]
46.rc
=====
* Fix window previews in workspace indicator [Florian; !304]
* Fix menu ornament in workspace indicator [Florian; !305]
* Misc. bug fixes and cleanups [Florian; !306, !309]
Contributors:
Florian Müllner
Translators:
Danial Behzadi [fa], Ekaterine Papava [ka], Sabri Ünal [tr], Artur S0 [ru],
Yuri Chornoivan [uk], Vasil Pupkin [be], Asier Sarasua Garmendia [eu],
Yaron Shahrabani [he], Brage Fuglseth [nb], Nathan Follens [nl],
Aurimas Černius [lt], Matej Urbančič [sl], Boyuan Yang [zh_CN],
Kukuh Syafaat [id], Fran Dieguez [gl], Andi Chandler [en_GB],
Baurzhan Muftakhidinov [kk], Rūdolfs Mazurs [lv], Guillaume Bernard [fr],
Daniel Mustieles [es], Jiri Grönroos [fi]
46.beta
=======
* apps-menu: Rename Applications to Apps [Allan; !299]
* Misc. bug fixes and cleanups [Florian; !296, !297, !300, !301, !302]
Contributors:
Allan Day, Florian Müllner
Translators:
Gabriel Brand [de], Daniel Rusek [cs], Fran Dieguez [gl],
Aefgh Threenine [th], Vasil Pupkin [be], Artur S0 [ru], Yosef Or Boczko [he],
Sabri Ünal [tr]
46.alpha
========
* workspace-indicator: Fix initial preview visibility [Florian; !280, !292]
* screenshot-window-sizer: Fix cycling between sizes backwards [Florian; !284]
* Add back overview in Classic session [Florian; !287]
* Allow running Classic session headless [Jonas; !289]
* window-list: Fix buttons not being clickable at the screen edge
[Florian; !291]
* Add system-monitor extension [Florian; !277]
* Fixed crash [Florian; !290]
* Misc. bug fixes and cleanups [Florian; !276, !275, !278, !281, !286, !288]
* window-list: Really fix initial preview visibility [Florian; !292]
* workspace-indicator: Really fix initial preview visibility [Florian; !292]
* Misc. bug fixes and cleanups [Florian; !290]
Contributors:
Jonas Ådahl, Florian Müllner
Florian Müllner
45.1
====
* workspace-indicator: Fix initial preview visibility [Florian; !280]
* screenshot-window-sizer: Fix cycling between sizes backwards [Florian; !284]
* Misc. bug fixes and cleanups [Florian; !276, !275, !278, !281]
Contributors:
Florian Müllner
Translators:
Kristjan SCHMIDT [eo], Brage Fuglseth [nb]

110
README.md
View File

@@ -1,34 +1,25 @@
<!--
SPDX-FileCopyrightText: 2011 Giovanni Campagna <gcampagna@src.gnome.org>
SPDX-FileCopyrightText: 2011 Adam Dingle <adam@yorba.org>
SPDX-FileCopyrightText: 2011 Vamsi Krishna Brahmajosyula <vamsikrishna.brahmajosyula@gmail.com>
SPDX-FileCopyrightText: 2014 Michael Catanzaro <mcatanzaro@gnome.org>
SPDX-FileCopyrightText: 2015 Florian Müllner <fmuellner@gnome.org>
SPDX-FileCopyrightText: 2019 Fabian P. Schmidt <kerel-fs@gmx.de>
SPDX-FileCopyrightText: 2024 Aral Balkan <aral@aralbalkan.com>"""
SPDX-License-Identifier: CC-BY-SA-4.0
-->
# GNOME Shell Extensions
GNOME Shell Extensions is a collection of extensions providing additional
and optional functionality to GNOME Shell.
The extensions in this package are supported by GNOME and will be updated
to reflect future API changes in GNOME Shell.
Since GNOME Shell is not API stable, extensions work only against a very
specific version of the shell, usually the same as this package (see
"configure --version"). The extensions in this package are supported by GNOME
and will be updated to reflect future API changes in GNOME Shell.
Both the most recent stable release and the previous stable release of
GNOME Shell are actively supported, as well as the current development
branch.
The GNOME wiki has more information about [GNOME Shell Extensions][project-page],
as well as some general information about [GNOME Shell][shell-page].
Please refer to the [schedule] to see when a new version will be released.
[schedule]: https://release.gnome.org/calendar
Bugs should be reported to the GNOME [bug tracking system][bug-tracker].
## Extensions
The following is a complete list of extensions that are provided by this
project.
* alternate-tab (**OBSOLETE**)
Lets you use classic Alt+Tab (window-based instead of app-based) in GNOME Shell.
This extension is obsolete since GNOME 3.30, see [this blogpost][alternatetab-post]
for further details.
* apps-menu
@@ -37,7 +28,8 @@ project.
* auto-move-windows
Lets you manage your workspaces more easily, assigning a specific workspace to
each application as soon as it creates a window.
each application as soon as it creates a window, in a manner configurable with a
GSettings key.
* drive-menu
@@ -48,11 +40,6 @@ project.
Changes application icons to always launch a new instance when activated.
* light-style
Changes the default shell style to "light", while still following the
system-wide "dark" preference.
* native-window-placement
An alternative algorithm for layouting the thumbnails in the windows overview, that
@@ -64,19 +51,11 @@ project.
* screenshot-window-sizer
Adds a shortcut for resizing the focus window to a size that is suitable for GNOME Software screenshots. Ctrl + Alt + s cycles forwards through the available sizes and Ctrl + Alt + Shift + s cycles backwards.
* status-icons
Show (XEmbed) status icons in the top bar.
* system-monitor
Shows system usage information in the top bar.
Adds a shortcut for resizing the focus window to a size that is suitable for GNOME Software screenshots
* user-theme
Loads a shell theme from `$XDG_DATA_HOME/themes/<name>/gnome-shell`.
Loads a shell theme from ~/.themes/<name>/gnome-shell.
* window-list
@@ -90,49 +69,18 @@ project.
Adds a simple workspace switcher to the top bar.
### Ex-Extensions
## Default branch
Occasionally over the years, some extensions were removed.
The following list is not complete, but limited to cases that
are notable for some reason; either the removal happened
relatively recently, or the extension used to be particularly
popular in the past.
* alternate-tab
Lets you use classic Alt+Tab (window-based instead of app-based) in GNOME Shell.
This extension is obsolete since GNOME 3.30, see [this blogpost][alternatetab-post]
for further details.
[alternatetab-post]: https://blogs.gnome.org/fmuellner/2018/10/11/the-future-of-alternatetab-and-why-you-need-not-worry/
## Reporting bugs
Bugs should be reported to the [issue tracking system][bug-tracker].
The [GNOME handbook][bug-handbook] has useful information for creating
effective issue reports.
Please note that the issue tracker is meant to be used for
actionable issues only.
For support questions, feedback on changes or general discussions,
you can use:
- the [#gnome-shell matrix room][matrix-room]
- the `Desktop` category or `extensions` and `shell` tags on [GNOME Discourse][discourse]
[bug-tracker]: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues
[bug-handbook]: https://handbook.gnome.org/issues/reporting.html
[matrix-room]: https://matrix.to/#/#gnome-shell:gnome.org
[discourse]: https://discourse.gnome.org
## Code of Conduct
All interactions with the project should follow the [Code of Conduct][conduct].
[conduct]: https://conduct.gnome.org/
The default development branch is `main`. If you still have a local
checkout under the old name, use:
```sh
git checkout master
git branch -m master main
git fetch
git branch --unset-upstream
git branch -u origin/master
git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/main
```
## License
@@ -141,4 +89,8 @@ Public License, version 2 or later. See the [COPYING file][license] for details.
Individual extensions may be licensed under different terms, see each source
file for details.
[project-page]: https://wiki.gnome.org/Projects/GnomeShell/Extensions
[shell-page]: https://wiki.gnome.org/Projects/GnomeShell
[bug-tracker]: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues
[license]: COPYING
[alternatetab-post]: https://blogs.gnome.org/fmuellner/2018/10/11/the-future-of-alternatetab-and-why-you-need-not-worry/

View File

@@ -1,48 +0,0 @@
# SPDX-FileCopyrightText: 2024 Florian Müllner <fmuellner@gnome.org>
# SPDX-License-Identifier: CC0-1.0
version = 1
SPDX-PackageName = "gnome-shell-extensions"
SPDX-PackageSupplier = "Florian Müllner <fmuellner@gnome.org>"
SPDX-PackageDownloadLocation = "https://gitlab.gnome.org/GNOME/gnome-shell-extensions"
[[annotations]]
path = "NEWS"
SPDX-FileCopyrightText = [
"2011 Giovanni Campagna <gcampagna@src.gnome.org>",
"2013 Florian Müllner <fmuellner@gnome.org>"
]
SPDX-License-Identifier = "CC-BY-SA-4.0"
[[annotations]]
path = [
"**.json.in",
"**.desktop.in",
"**.gschema.override",
"**.session",
"**.session.conf",
]
SPDX-FileCopyrightText = "Florian Müllner <fmuellner@gnome.org>"
SPDX-License-Identifier = "GPL-2.0-or-later"
[[annotations]]
# managed by translation teams
path = "po/**.po"
SPDX-FileCopyrightText = "GNOME Translation Teams <i18n@gnome.org>"
SPDX-License-Identifier = "GPL-2.0-or-later"
[[annotations]]
# managed by translation teams
path = ["po/LINGUAS", "po/POTFILES.in"]
SPDX-FileCopyrightText = "No rights reserved"
SPDX-License-Identifier = "CC0-1.0"
[[annotations]]
path = "tools/package.json"
SPDX-FileCopyrightText = "2025 Florian Müllner <fmuellner@gnome.org>"
SPDX-License-Identifier = "MIT OR LGPL-2.0-or-later"
[[annotations]]
path = "**package-lock.json"
SPDX-FileCopyrightText = "No rights reserved"
SPDX-License-Identifier = "CC0-1.0"

2
data/HACKING Normal file
View File

@@ -0,0 +1,2 @@
To update the gnome-shell-sass submodule to latest upstream commit:
git submodule update --rebase

View File

@@ -1,10 +1,11 @@
{
"parentMode": "user",
"colorScheme": "force-light",
"hasOverview": false,
"showWelcomeDialog": false,
"enabledExtensions": [@CLASSIC_EXTENSIONS@],
"panel": { "left": ["activities"],
"panel": { "left": [],
"center": [],
"right": ["screenRecording", "screenSharing", "dwellClick", "a11y", "keyboard", "dateMenu", "quickSettings"]
"right": ["a11y", "keyboard", "dateMenu", "quickSettings"]
}
}

View File

@@ -0,0 +1,8 @@
[Desktop Entry]
Name=GNOME Classic on Wayland
Comment=This session logs you into GNOME Classic
Exec=env GNOME_SHELL_SESSION_MODE=classic gnome-session
TryExec=gnome-session
Type=Application
DesktopNames=GNOME-Classic;GNOME;
X-GDM-SessionRegisters=true

View File

@@ -0,0 +1,8 @@
[Desktop Entry]
Name=GNOME Classic on Xorg
Comment=This session logs you into GNOME Classic
Exec=env GNOME_SHELL_SESSION_MODE=classic gnome-session
TryExec=gnome-session
Type=Application
DesktopNames=GNOME-Classic;GNOME;
X-GDM-SessionRegisters=true

View File

@@ -1,9 +1,8 @@
[Desktop Entry]
Name=GNOME Classic
Comment=This session logs you into GNOME Classic
Exec=gnome-session --session gnome-classic
Exec=env GNOME_SHELL_SESSION_MODE=classic gnome-session
TryExec=gnome-session
Type=Application
DesktopNames=GNOME-Classic;GNOME;
X-GDM-SessionRegisters=true
X-GDM-CanRunHeadless=true

View File

@@ -1,2 +0,0 @@
[GNOME Session]
Name=GNOME Classic

View File

@@ -1,3 +0,0 @@
[Unit]
Requires=gnome-session-services.target
Requires=org.gnome.Shell@classic.service

View File

@@ -2,20 +2,41 @@
#
# SPDX-License-Identifier: GPL-2.0-or-later
session_desktop = 'gnome-classic.desktop'
session_desktop_base = 'gnome-classic'
i18n.merge_file(
input: session_desktop + '.in',
output: session_desktop,
po_dir: '../po',
install: true,
install_dir: wlsessiondir,
type: 'desktop',
)
session_desktops = [
session_desktop_base,
session_desktop_base + '-xorg',
session_desktop_base + '-wayland',
]
foreach name: session_desktops
session_desktop = name + '.desktop'
if name.endswith('-xorg')
session_instdir = xsessiondir
elif name.endswith('-wayland')
session_instdir = wlsessiondir
else
# FIXME: The same target can not be copied into two directories.
# There is a workaround in meson/session-post-install.py until proper
# solution arises:
# https://github.com/mesonbuild/meson/issues/2416
session_instdir = xsessiondir
#session_instdir = [ xesssiondir, wlsessiondir ]
endif
i18n.merge_file(
input: session_desktop + '.in',
output: session_desktop,
po_dir: '../po',
install: true,
install_dir: session_instdir,
type: 'desktop'
)
endforeach
classic_uuids = []
foreach e : classic_extensions
classic_uuids += e + uuid_suffix
classic_uuids += e + uuid_suffix
endforeach
mode_conf = configuration_data()
@@ -26,18 +47,8 @@ configure_file(
input: mode_file + '.in',
output: mode_file,
configuration: mode_conf,
install_dir: modedir,
install_dir: modedir
)
classic_override = '00_org.gnome.shell.extensions.classic.gschema.override'
install_data(classic_override, install_dir: schemadir)
install_data(
'gnome-classic.session',
install_dir: sessiondir,
)
install_data(
'gnome-classic.session.conf',
install_dir: systemd_userunitdir / 'gnome-session@gnome-classic.target.d',
)

View File

@@ -1 +0,0 @@
tools/eslint.config.js

View File

@@ -8,16 +8,16 @@ srcdir=`dirname $0`
srcdir=`(cd $srcdir && pwd)`
builddir=`mktemp -p $srcdir -d _build.XXXXXX` || exit 1
destdir=`mktemp -p $srcdir -d _dest.XXXXXX` || exit 1
installdir=`mktemp -p $srcdir -d _install.XXXXXX` || exit 1
meson setup --prefix=/usr -Dextension_set=all $srcdir $builddir
meson install --destdir $destdir -C $builddir
meson setup --prefix=$installdir -Dextension_set=all $srcdir $builddir
meson install -C $builddir
rm -rf $srcdir/zip-files
mkdir $srcdir/zip-files
extensiondir=$destdir/usr/share/gnome-shell/extensions
schemadir=$destdir/usr/share/glib-2.0/schemas
extensiondir=$installdir/share/gnome-shell/extensions
schemadir=$installdir/share/glib-2.0/schemas
for f in $extensiondir/*; do
name=`basename ${f%%@*}`
@@ -39,9 +39,7 @@ for f in $extensiondir/*; do
fi
cp $srcdir/NEWS $srcdir/COPYING $f
sources=(NEWS COPYING $(cd $f; ls *.js *.css 2>/dev/null))
[ -d $f/icons ] && sources+=(icons)
sources=(NEWS COPYING $(cd $f; ls *.js))
[ -f $schema ] || unset schema
@@ -50,4 +48,4 @@ for f in $extensiondir/*; do
done
rm -rf $builddir
rm -rf $destdir
rm -rf $installdir

View File

@@ -5,6 +5,7 @@
//
// SPDX-License-Identifier: GPL-2.0-or-later
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
import Atk from 'gi://Atk';
import Clutter from 'gi://Clutter';
import Gio from 'gi://Gio';
@@ -44,11 +45,10 @@ class ApplicationMenuItem extends PopupMenu.PopupBaseMenuItem {
this._app = app;
this._button = button;
this._icon = this.getDragActor();
this._icon.style_class = 'icon-dropshadow';
this.add_child(this._icon);
this._iconBin = new St.Bin();
this.add_child(this._iconBin);
const appLabel = new St.Label({
let appLabel = new St.Label({
text: app.get_name(),
y_expand: true,
y_align: Clutter.ActorAlign.CENTER,
@@ -56,17 +56,20 @@ class ApplicationMenuItem extends PopupMenu.PopupBaseMenuItem {
this.add_child(appLabel);
this.label_actor = appLabel;
this._delegate = this;
const draggable = DND.makeDraggable(this);
let textureCache = St.TextureCache.get_default();
textureCache.connectObject('icon-theme-changed',
() => this._updateIcon(), this);
this._updateIcon();
const maybeStartDrag = draggable._maybeStartDrag;
this._delegate = this;
let draggable = DND.makeDraggable(this);
let maybeStartDrag = draggable._maybeStartDrag;
draggable._maybeStartDrag = event => {
if (this._dragEnabled)
return maybeStartDrag.call(draggable, event);
return false;
};
this.connect('notify::active', this._onActiveChanged.bind(this));
}
activate(event) {
@@ -78,11 +81,10 @@ class ApplicationMenuItem extends PopupMenu.PopupBaseMenuItem {
Main.overview.hide();
}
_onActiveChanged() {
if (!this.active)
return;
this._button.scrollToButton(this);
setActive(active, params) {
if (active)
this._button.scrollToButton(this);
super.setActive(active, params);
}
setDragEnabled(enabled) {
@@ -94,7 +96,13 @@ class ApplicationMenuItem extends PopupMenu.PopupBaseMenuItem {
}
getDragActorSource() {
return this._icon;
return this._iconBin;
}
_updateIcon() {
let icon = this.getDragActor();
icon.style_class = 'icon-dropshadow';
this._iconBin.set_child(icon);
}
}
@@ -117,10 +125,7 @@ class CategoryMenuItem extends PopupMenu.PopupBaseMenuItem {
else
name = _('Favorites');
const label = new St.Label({text: name});
this.add_child(label);
this.actor.label_actor = label;
this.add_child(new St.Label({text: name}));
this.connect('motion-event', this._onMotionEvent.bind(this));
this.connect('notify::active', this._onActiveChanged.bind(this));
}
@@ -132,7 +137,7 @@ class CategoryMenuItem extends PopupMenu.PopupBaseMenuItem {
}
_isNavigatingSubmenu([x, y]) {
const [posX, posY] = this.get_transformed_position();
let [posX, posY] = this.get_transformed_position();
if (this._oldX === -1) {
this._oldX = x;
@@ -140,8 +145,8 @@ class CategoryMenuItem extends PopupMenu.PopupBaseMenuItem {
return true;
}
const deltaX = Math.abs(x - this._oldX);
const deltaY = Math.abs(y - this._oldY);
let deltaX = Math.abs(x - this._oldX);
let deltaY = Math.abs(y - this._oldY);
this._oldX = x;
this._oldY = y;
@@ -171,7 +176,7 @@ class CategoryMenuItem extends PopupMenu.PopupBaseMenuItem {
// Ensure that the point P always lies below line AC so that we can
// only check for triangle ABC.
if (posY > y) {
const offset = posY - y;
let offset = posY - y;
y = posY + this.height + offset;
}
@@ -201,7 +206,7 @@ class CategoryMenuItem extends PopupMenu.PopupBaseMenuItem {
this.hover = true;
if (this._isNavigatingSubmenu(event.get_coords()))
return Clutter.EVENT_STOP;
return true;
this._oldX = -1;
this._oldY = -1;
@@ -213,7 +218,7 @@ class CategoryMenuItem extends PopupMenu.PopupBaseMenuItem {
if (targetActor instanceof St.Widget)
targetActor.sync_hover();
return Clutter.EVENT_PROPAGATE;
return false;
}
_onActiveChanged() {
@@ -250,7 +255,7 @@ class DesktopTarget extends EventEmitter {
this._desktopDestroyedId = 0;
this._windowAddedId =
global.window_group.connect('child-added',
global.window_group.connect('actor-added',
this._onWindowAdded.bind(this));
global.get_window_actors().forEach(a => {
@@ -294,15 +299,15 @@ class DesktopTarget extends EventEmitter {
}
async _markTrusted(file) {
const modeAttr = Gio.FILE_ATTRIBUTE_UNIX_MODE;
const trustedAttr = 'metadata::trusted';
const queryFlags = Gio.FileQueryInfoFlags.NONE;
const ioPriority = GLib.PRIORITY_DEFAULT;
let modeAttr = Gio.FILE_ATTRIBUTE_UNIX_MODE;
let trustedAttr = 'metadata::trusted';
let queryFlags = Gio.FileQueryInfoFlags.NONE;
let ioPriority = GLib.PRIORITY_DEFAULT;
try {
let info = await file.query_info_async(modeAttr, queryFlags, ioPriority, null);
const mode = info.get_attribute_uint32(modeAttr) | 0o100;
let mode = info.get_attribute_uint32(modeAttr) | 0o100;
info.set_attribute_uint32(modeAttr, mode);
info.set_attribute_string(trustedAttr, 'yes');
await file.set_attributes_async(info, queryFlags, ioPriority, null);
@@ -327,7 +332,7 @@ class DesktopTarget extends EventEmitter {
}
handleDragOver(source, _actor, _x, _y, _time) {
const appInfo = this._getSourceAppInfo(source);
let appInfo = this._getSourceAppInfo(source);
if (!appInfo)
return DND.DragMotionResult.CONTINUE;
@@ -335,16 +340,16 @@ class DesktopTarget extends EventEmitter {
}
acceptDrop(source, _actor, _x, _y, _time) {
const appInfo = this._getSourceAppInfo(source);
let appInfo = this._getSourceAppInfo(source);
if (!appInfo)
return false;
this.emit('app-dropped');
const desktop = GLib.get_user_special_dir(GLib.UserDirectory.DIRECTORY_DESKTOP);
let desktop = GLib.get_user_special_dir(GLib.UserDirectory.DIRECTORY_DESKTOP);
const src = Gio.File.new_for_path(appInfo.get_filename());
const dst = Gio.File.new_for_path(GLib.build_filenamev([desktop, src.get_basename()]));
let src = Gio.File.new_for_path(appInfo.get_filename());
let dst = Gio.File.new_for_path(GLib.build_filenamev([desktop, src.get_basename()]));
try {
// copy_async() isn't introspectable :-(
@@ -389,12 +394,12 @@ class ApplicationsButton extends PanelMenu.Button {
this.accessible_role = Atk.Role.LABEL;
this._label = new St.Label({
text: _('Apps'),
text: _('Applications'),
y_expand: true,
y_align: Clutter.ActorAlign.CENTER,
});
this.add_child(this._label);
this.add_actor(this._label);
this.name = 'panelApplications';
this.label_actor = this._label;
@@ -452,12 +457,12 @@ class ApplicationsButton extends PanelMenu.Button {
}
_onMenuKeyPress(actor, event) {
const symbol = event.get_key_symbol();
let symbol = event.get_key_symbol();
if (symbol === Clutter.KEY_Left || symbol === Clutter.KEY_Right) {
const direction = symbol === Clutter.KEY_Left
let direction = symbol === Clutter.KEY_Left
? Gtk.DirectionType.LEFT : Gtk.DirectionType.RIGHT;
if (this.menu.actor.navigate_focus(global.stage.key_focus, direction, false))
return Clutter.EVENT_STOP;
return true;
}
return super._onMenuKeyPress(actor, event);
}
@@ -480,15 +485,15 @@ class ApplicationsButton extends PanelMenu.Button {
}
_loadCategory(categoryId, dir) {
const iter = dir.iter();
let iter = dir.iter();
let nextType;
while ((nextType = iter.next()) !== GMenu.TreeItemType.INVALID) {
if (nextType === GMenu.TreeItemType.ENTRY) {
const entry = iter.get_entry();
let entry = iter.get_entry();
let id;
try {
id = entry.get_desktop_file_id(); // catch non-UTF8 filenames
} catch {
} catch (e) {
continue;
}
let app = appSys.lookup_app(id);
@@ -499,7 +504,7 @@ class ApplicationsButton extends PanelMenu.Button {
} else if (nextType === GMenu.TreeItemType.SEPARATOR) {
this.applicationsByCategory[categoryId].push('separator');
} else if (nextType === GMenu.TreeItemType.DIRECTORY) {
const subdir = iter.get_directory();
let subdir = iter.get_directory();
if (!subdir.get_is_nodisplay())
this._loadCategory(categoryId, subdir);
}
@@ -507,11 +512,11 @@ class ApplicationsButton extends PanelMenu.Button {
}
scrollToButton(button) {
const appsScrollBoxAdj = this.applicationsScrollBox.get_vadjustment();
const appsScrollBoxAlloc = this.applicationsScrollBox.get_allocation_box();
const currentScrollValue = appsScrollBoxAdj.get_value();
const boxHeight = appsScrollBoxAlloc.y2 - appsScrollBoxAlloc.y1;
const buttonAlloc = button.get_allocation_box();
let appsScrollBoxAdj = this.applicationsScrollBox.get_vscroll_bar().get_adjustment();
let appsScrollBoxAlloc = this.applicationsScrollBox.get_allocation_box();
let currentScrollValue = appsScrollBoxAdj.get_value();
let boxHeight = appsScrollBoxAlloc.y2 - appsScrollBoxAlloc.y1;
let buttonAlloc = button.get_allocation_box();
let newScrollValue = currentScrollValue;
if (currentScrollValue > buttonAlloc.y1 - 10)
newScrollValue = buttonAlloc.y1 - 10;
@@ -522,11 +527,11 @@ class ApplicationsButton extends PanelMenu.Button {
}
scrollToCatButton(button) {
const catsScrollBoxAdj = this.categoriesScrollBox.get_vadjustment();
const catsScrollBoxAlloc = this.categoriesScrollBox.get_allocation_box();
const currentScrollValue = catsScrollBoxAdj.get_value();
const boxHeight = catsScrollBoxAlloc.y2 - catsScrollBoxAlloc.y1;
const buttonAlloc = button.get_allocation_box();
let catsScrollBoxAdj = this.categoriesScrollBox.get_vscroll_bar().get_adjustment();
let catsScrollBoxAlloc = this.categoriesScrollBox.get_allocation_box();
let currentScrollValue = catsScrollBoxAdj.get_value();
let boxHeight = catsScrollBoxAlloc.y2 - catsScrollBoxAlloc.y1;
let buttonAlloc = button.get_allocation_box();
let newScrollValue = currentScrollValue;
if (currentScrollValue > buttonAlloc.y1 - 10)
newScrollValue = buttonAlloc.y1 - 10;
@@ -537,33 +542,39 @@ class ApplicationsButton extends PanelMenu.Button {
}
_createLayout() {
const section = new PopupMenu.PopupMenuSection();
let section = new PopupMenu.PopupMenuSection();
this.menu.addMenuItem(section);
this.mainBox = new St.BoxLayout({layoutManager: new MainLayout()});
this.leftBox = new St.BoxLayout({
orientation: Clutter.Orientation.VERTICAL,
});
this.leftBox = new St.BoxLayout({vertical: true});
this.applicationsScrollBox = new St.ScrollView({
style_class: 'apps-menu vfade',
x_expand: true,
});
this.applicationsScrollBox.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC);
let vscroll = this.applicationsScrollBox.get_vscroll_bar();
vscroll.connect('scroll-start', () => {
this.menu.passEvents = true;
});
vscroll.connect('scroll-stop', () => {
this.menu.passEvents = false;
});
this.categoriesScrollBox = new St.ScrollView({
style_class: 'vfade',
});
this.categoriesScrollBox.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC);
vscroll = this.categoriesScrollBox.get_vscroll_bar();
vscroll.connect('scroll-start', () => (this.menu.passEvents = true));
vscroll.connect('scroll-stop', () => (this.menu.passEvents = false));
this.leftBox.add_child(this.categoriesScrollBox);
this.applicationsBox = new St.BoxLayout({
orientation: Clutter.Orientation.VERTICAL,
});
this.applicationsScrollBox.set_child(this.applicationsBox);
this.categoriesBox = new St.BoxLayout({
orientation: Clutter.Orientation.VERTICAL,
});
this.categoriesScrollBox.set_child(this.categoriesBox);
this.applicationsBox = new St.BoxLayout({vertical: true});
this.applicationsScrollBox.add_actor(this.applicationsBox);
this.categoriesBox = new St.BoxLayout({vertical: true});
this.categoriesScrollBox.add_actor(this.categoriesBox);
this.mainBox.add_child(this.leftBox);
this.mainBox.add(this.leftBox);
this.mainBox.add_child(this.applicationsScrollBox);
section.actor.add_child(this.mainBox);
section.actor.add_actor(this.mainBox);
}
_display() {
@@ -573,25 +584,25 @@ class ApplicationsButton extends PanelMenu.Button {
// Load categories
this.applicationsByCategory = {};
this._tree.load_sync();
const root = this._tree.get_root_directory();
let root = this._tree.get_root_directory();
let categoryMenuItem = new CategoryMenuItem(this, null);
this.categoriesBox.add_child(categoryMenuItem);
const iter = root.iter();
this.categoriesBox.add_actor(categoryMenuItem);
let iter = root.iter();
let nextType;
while ((nextType = iter.next()) !== GMenu.TreeItemType.INVALID) {
if (nextType !== GMenu.TreeItemType.DIRECTORY)
continue;
const dir = iter.get_directory();
let dir = iter.get_directory();
if (dir.get_is_nodisplay())
continue;
const categoryId = dir.get_menu_id();
let categoryId = dir.get_menu_id();
this.applicationsByCategory[categoryId] = [];
this._loadCategory(categoryId, dir);
if (this.applicationsByCategory[categoryId].length > 0) {
categoryMenuItem = new CategoryMenuItem(this, dir);
this.categoriesBox.add_child(categoryMenuItem);
this.categoriesBox.add_actor(categoryMenuItem);
}
}
@@ -604,7 +615,7 @@ class ApplicationsButton extends PanelMenu.Button {
if (c._delegate instanceof PopupMenu.PopupSeparatorMenuItem)
c._delegate.destroy();
else
this.applicationsBox.remove_child(c);
this.applicationsBox.remove_actor(c);
});
if (dir)
@@ -615,7 +626,7 @@ class ApplicationsButton extends PanelMenu.Button {
_displayButtons(apps) {
for (let i = 0; i < apps.length; i++) {
const app = apps[i];
let app = apps[i];
let item;
if (app instanceof Shell.App)
item = this._applicationsButtons.get(app);
@@ -627,7 +638,7 @@ class ApplicationsButton extends PanelMenu.Button {
this._applicationsButtons.set(app, item);
}
if (!item.get_parent())
this.applicationsBox.add_child(item);
this.applicationsBox.add_actor(item);
}
}

View File

@@ -3,8 +3,8 @@
"uuid": "@uuid@",
"settings-schema": "@gschemaname@",
"gettext-domain": "@gettext_domain@",
"name": "Apps Menu",
"description": "Add a category-based menu for apps.\nThis extension is part of Classic Mode and is officially supported by GNOME. Please do not report bugs using the form below, use GNOME's GitLab instance instead.",
"name": "Applications Menu",
"description": "Add a category-based menu for applications.\nThis extension is part of Classic Mode and is officially supported by GNOME. Please do not report bugs using the form below, use GNOME's GitLab instance instead.",
"original-authors": [ "e2002@bk.ru", "debarshir@gnome.org" ],
"shell-version": [ "@shell_current@" ],
"url": "@url@"

View File

@@ -4,6 +4,9 @@
//
// SPDX-License-Identifier: GPL-2.0-or-later
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
// Start apps on custom workspaces
import Shell from 'gi://Shell';
import {Extension} from 'resource:///org/gnome/shell/extensions/extension.js';
@@ -28,7 +31,7 @@ class WindowMover {
this._appConfigs.clear();
this._settings.get_strv('application-list').forEach(v => {
const [appId, num] = v.split(':');
let [appId, num] = v.split(':');
this._appConfigs.set(appId, parseInt(num) - 1);
});
@@ -36,15 +39,15 @@ class WindowMover {
}
_updateAppData() {
const ids = [...this._appConfigs.keys()];
const removedApps = [...this._appData.keys()]
let ids = [...this._appConfigs.keys()];
let removedApps = [...this._appData.keys()]
.filter(a => !ids.includes(a.id));
removedApps.forEach(app => {
app.disconnectObject(this);
this._appData.delete(app);
});
const addedApps = ids
let addedApps = ids
.map(id => this._appSystem.lookup_app(id))
.filter(app => app && !this._appData.has(app));
addedApps.forEach(app => {
@@ -68,7 +71,7 @@ class WindowMover {
return;
// ensure we have the required number of workspaces
const workspaceManager = global.workspace_manager;
let workspaceManager = global.workspace_manager;
for (let i = workspaceManager.n_workspaces; i <= workspaceNum; i++) {
window.change_workspace_by_index(i - 1, false);
workspaceManager.append_new_workspace(false, 0);
@@ -78,8 +81,8 @@ class WindowMover {
}
_appWindowsChanged(app) {
const data = this._appData.get(app);
const windows = app.get_windows();
let data = this._appData.get(app);
let windows = app.get_windows();
// If get_compositor_private() returns non-NULL on a removed windows,
// the window still exists and is just moved to a different workspace
@@ -89,7 +92,7 @@ class WindowMover {
return !windows.includes(w) && w.get_compositor_private() !== null;
}));
const workspaceNum = this._appConfigs.get(app.id);
let workspaceNum = this._appConfigs.get(app.id);
windows.filter(w => !data.windows.includes(w)).forEach(window => {
this._moveWindow(window, workspaceNum);
});

View File

@@ -3,9 +3,11 @@
//
// SPDX-License-Identifier: GPL-2.0-or-later
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
// Start apps on custom workspaces
import Adw from 'gi://Adw';
import Gio from 'gi://Gio';
import GioUnix from 'gi://GioUnix';
import GLib from 'gi://GLib';
import GObject from 'gi://GObject';
import Gtk from 'gi://Gtk';
@@ -43,11 +45,11 @@ class NewItemModel extends GObject.Object {
class Rule extends GObject.Object {
static [GObject.properties] = {
'app-info': GObject.ParamSpec.object(
'app-info', null, null,
'app-info', 'app-info', 'app-info',
GObject.ParamFlags.READWRITE,
GioUnix.DesktopAppInfo),
Gio.DesktopAppInfo),
'workspace': GObject.ParamSpec.uint(
'workspace', null, null,
'workspace', 'workspace', 'workspace',
GObject.ParamFlags.READWRITE,
1, WORKSPACE_MAX, 1),
};
@@ -119,7 +121,7 @@ class RulesList extends GObject.Object {
this.#rules = [];
for (const stringRule of this.#settings.get_strv(SETTINGS_KEY)) {
const [id, workspace] = stringRule.split(':');
const appInfo = GioUnix.DesktopAppInfo.new(id);
const appInfo = Gio.DesktopAppInfo.new(id);
if (appInfo)
this.#rules.push(new Rule({appInfo, workspace}));
else
@@ -194,7 +196,7 @@ class AutoMoveSettingsWidget extends Adw.PreferencesGroup {
class WorkspaceSelector extends Gtk.Widget {
static [GObject.properties] = {
'number': GObject.ParamSpec.uint(
'number', null, null,
'number', 'number', 'number',
GObject.ParamFlags.READWRITE,
1, WORKSPACE_MAX, 1),
};

View File

@@ -39,16 +39,16 @@ class MountMenuItem extends PopupMenu.PopupBaseMenuItem {
this.mount = mount;
const ejectIcon = new St.Icon({
let ejectIcon = new St.Icon({
icon_name: 'media-eject-symbolic',
style_class: 'popup-menu-icon',
});
const ejectButton = new St.Button({
let ejectButton = new St.Button({
child: ejectIcon,
style_class: 'button',
});
ejectButton.connect('clicked', this._eject.bind(this));
this.add_child(ejectButton);
this.add(ejectButton);
this.hide();
@@ -63,7 +63,7 @@ class MountMenuItem extends PopupMenu.PopupBaseMenuItem {
if (this.mount.is_shadowed())
return false;
const volume = this.mount.get_volume();
let volume = this.mount.get_volume();
if (volume)
return volume.get_identifier('class') !== 'network';
@@ -87,7 +87,7 @@ class MountMenuItem extends PopupMenu.PopupBaseMenuItem {
}
_eject() {
const unmountArgs = [
let unmountArgs = [
Gio.MountUnmountFlags.NONE,
new ShellMountOperation.ShellMountOperation(this.mount).mountOp,
null, // Gio.Cancellable
@@ -120,13 +120,13 @@ class MountMenuItem extends PopupMenu.PopupBaseMenuItem {
_reportFailure(exception) {
// TRANSLATORS: %s is the filesystem name
const msg = _('Ejecting drive “%s” failed:').format(this.mount.get_name());
let msg = _('Ejecting drive “%s” failed:').format(this.mount.get_name());
Main.notifyError(msg, exception.message);
}
activate(event) {
const uri = this.mount.get_root().get_uri();
const context = global.create_app_launch_context(event.get_time(), -1);
let uri = this.mount.get_root().get_uri();
let context = global.create_app_launch_context(event.get_time(), -1);
Gio.AppInfo.launch_default_for_uri(uri, context);
super.activate(event);
@@ -141,7 +141,7 @@ class DriveMenu extends PanelMenu.Button {
constructor() {
super(0.5, _('Removable devices'));
const icon = new St.Icon({
let icon = new St.Icon({
icon_name: 'media-eject-symbolic',
style_class: 'system-status-icon',
});
@@ -162,8 +162,8 @@ class DriveMenu extends PanelMenu.Button {
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
this.menu.addAction(_('Open Files'), event => {
const appSystem = Shell.AppSystem.get_default();
const app = appSystem.lookup_app('org.gnome.Nautilus.desktop');
let appSystem = Shell.AppSystem.get_default();
let app = appSystem.lookup_app('org.gnome.Nautilus.desktop');
app.activate_full(-1, event.get_time());
});
@@ -178,7 +178,7 @@ class DriveMenu extends PanelMenu.Button {
}
_addMount(mount) {
const item = new MountMenuItem(mount);
let item = new MountMenuItem(mount);
this._mounts.unshift(item);
this.menu.addMenuItem(item, 0);
@@ -187,7 +187,7 @@ class DriveMenu extends PanelMenu.Button {
_removeMount(mount) {
for (let i = 0; i < this._mounts.length; i++) {
const item = this._mounts[i];
let item = this._mounts[i];
if (item.mount === mount) {
item.destroy();
this._mounts.splice(i, 1);

View File

@@ -3,7 +3,7 @@
"uuid": "@uuid@",
"settings-schema": "@gschemaname@",
"gettext-domain": "@gettext_domain@",
"name": "Launch New Instance",
"name": "Launch new instance",
"description": "Always launch a new instance when clicking in the dash or the application view.\nThis extension is part of Classic Mode and is officially supported by GNOME. Please do not report bugs using the form below, use GNOME's GitLab instance instead.",
"shell-version": [ "@shell_current@" ],
"url": "@url@"

View File

@@ -16,20 +16,18 @@ foreach e : enabled_extensions
metadata_conf.set('gschemaname', 'org.gnome.shell.extensions.' + e)
metadata_conf.set('gettext_domain', gettext_domain)
metadata_conf.set('shell_current', shell_version)
metadata_conf.set(
'url',
'https://gitlab.gnome.org/GNOME/gnome-shell-extensions',
)
metadata_conf.set('url', 'https://gitlab.gnome.org/GNOME/gnome-shell-extensions')
extension_sources = files(e + '/extension.js')
extension_data = []
subdir(e)
install_data(
extension_sources + extension_data,
install_dir: join_paths(extensiondir, uuid),
install_data (extension_sources + extension_data,
install_dir: join_paths(extensiondir, uuid)
)
endforeach
install_data(extension_schemas, install_dir: schemadir)
install_data (extension_schemas,
install_dir: schemadir
)

View File

@@ -5,6 +5,7 @@
//
// SPDX-License-Identifier: GPL-2.0-or-later
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
import Clutter from 'gi://Clutter';
import {Extension, InjectionManager} from 'resource:///org/gnome/shell/extensions/extension.js';
@@ -29,7 +30,7 @@ class Rect {
}
union(rect2) {
const dest = this.copy();
let dest = this.copy();
if (rect2.x < dest.x) {
dest.width += dest.x - rect2.x;
dest.x = rect2.x;
@@ -47,7 +48,7 @@ class Rect {
}
adjusted(dx, dy, dx2, dy2) {
const dest = this.copy();
let dest = this.copy();
dest.x += dx;
dest.y += dy;
dest.width += -dx + dx2;
@@ -94,16 +95,16 @@ class NaturalLayoutStrategy extends Workspace.LayoutStrategy {
// As we are using pseudo-random movement (See "slot") we need to make sure the list
// is always sorted the same way no matter which window is currently active.
const areaRect = new Rect(area.x, area.y, area.width, area.height);
let areaRect = new Rect(area.x, area.y, area.width, area.height);
let bounds = areaRect.copy();
const clones = layout.windows;
let clones = layout.windows;
let direction = 0;
const directions = [];
const rects = [];
let directions = [];
let rects = [];
for (let i = 0; i < clones.length; i++) {
// save rectangles into 4-dimensional arrays representing two corners of the rectangular: [left_x, top_y, right_x, bottom_y]
const rect = clones[i].boundingBox;
let rect = clones[i].boundingBox;
rects[i] = new Rect(rect.x, rect.y, rect.width, rect.height);
bounds = bounds.union(rects[i]);
@@ -120,10 +121,10 @@ class NaturalLayoutStrategy extends Workspace.LayoutStrategy {
overlap = false;
for (let i = 0; i < rects.length; i++) {
for (let j = 0; j < rects.length; j++) {
const adjustments = [-1, -1, 1, 1]
let adjustments = [-1, -1, 1, 1]
.map(v => (v *= WINDOW_PLACEMENT_NATURAL_GAPS));
const iAdjusted = rects[i].adjusted(...adjustments);
const jAdjusted = rects[j].adjusted(...adjustments);
let iAdjusted = rects[i].adjusted(...adjustments);
let jAdjusted = rects[j].adjusted(...adjustments);
if (i !== j && iAdjusted.overlap(jAdjusted)) {
loopCounter++;
overlap = true;
@@ -132,8 +133,8 @@ class NaturalLayoutStrategy extends Workspace.LayoutStrategy {
// Determine pushing direction
let iCenter = rects[i].center();
const jCenter = rects[j].center();
const diff = [jCenter[0] - iCenter[0], jCenter[1] - iCenter[1]];
let jCenter = rects[j].center();
let diff = [jCenter[0] - iCenter[0], jCenter[1] - iCenter[1]];
// Prevent dividing by zero and non-movement
if (diff[0] === 0 && diff[1] === 0)
@@ -210,7 +211,8 @@ class NaturalLayoutStrategy extends Workspace.LayoutStrategy {
} while (overlap && loopCounter < WINDOW_PLACEMENT_NATURAL_MAX_TRANSLATIONS);
// Work out scaling by getting the most top-left and most bottom-right window coords.
const scale = Math.min(
let scale;
scale = Math.min(
areaRect.width / bounds.width,
areaRect.height / bounds.height,
1.0);
@@ -227,7 +229,7 @@ class NaturalLayoutStrategy extends Workspace.LayoutStrategy {
// rescale to workspace
const slots = [];
let slots = [];
for (let i = 0; i < rects.length; i++) {
rects[i].x = rects[i].x * scale + areaRect.x;
rects[i].y = rects[i].y * scale + areaRect.y;

View File

@@ -5,6 +5,7 @@
//
// SPDX-License-Identifier: GPL-2.0-or-later
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
import Clutter from 'gi://Clutter';
import GObject from 'gi://GObject';
import St from 'gi://St';
@@ -19,17 +20,32 @@ import {PlacesManager} from './placeDisplay.js';
const N_ = x => x;
class PlaceMenuItem extends PopupMenu.PopupImageMenuItem {
const PLACE_ICON_SIZE = 16;
class PlaceMenuItem extends PopupMenu.PopupBaseMenuItem {
static {
GObject.registerClass(this);
}
constructor(info) {
super(info.name, info.icon, {
super({
style_class: 'place-menu-item',
});
this._info = info;
this._icon = new St.Icon({
gicon: info.icon,
icon_size: PLACE_ICON_SIZE,
});
this.add_child(this._icon);
this._label = new St.Label({
text: info.name,
x_expand: true,
y_align: Clutter.ActorAlign.CENTER,
});
this.add_child(this._label);
if (info.isRemovable()) {
this._ejectIcon = new St.Icon({
icon_name: 'media-eject-symbolic',
@@ -54,8 +70,8 @@ class PlaceMenuItem extends PopupMenu.PopupImageMenuItem {
}
_propertiesChanged(info) {
this.setIcon(info.icon);
this.label.text = info.name;
this._icon.gicon = info.icon;
this._label.text = info.name;
}
}
@@ -74,19 +90,19 @@ class PlacesMenu extends PanelMenu.Button {
constructor() {
super(0.5, _('Places'));
const label = new St.Label({
let label = new St.Label({
text: _('Places'),
y_expand: true,
y_align: Clutter.ActorAlign.CENTER,
});
this.add_child(label);
this.add_actor(label);
this.placesManager = new PlacesManager();
this._sections = { };
for (let i = 0; i < SECTIONS.length; i++) {
const id = SECTIONS[i];
let id = SECTIONS[i];
this._sections[id] = new PopupMenu.PopupMenuSection();
this.placesManager.connect(`${id}-updated`, () => {
this._redisplay(id);
@@ -110,7 +126,7 @@ class PlacesMenu extends PanelMenu.Button {
}
_create(id) {
const places = this.placesManager.get(id);
let places = this.placesManager.get(id);
for (let i = 0; i < places.length; i++)
this._sections[id].addMenuItem(new PlaceMenuItem(places[i]));

View File

@@ -6,6 +6,7 @@
//
// SPDX-License-Identifier: GPL-2.0-or-later
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
import Gio from 'gi://Gio';
import GLib from 'gi://GLib';
import Shell from 'gi://Shell';
@@ -23,6 +24,13 @@ Gio._promisify(Gio.File.prototype, 'mount_enclosing_volume');
const BACKGROUND_SCHEMA = 'org.gnome.desktop.background';
const Hostname1Iface = '<node> \
<interface name="org.freedesktop.hostname1"> \
<property name="PrettyHostname" type="s" access="read" /> \
</interface> \
</node>';
const Hostname1 = Gio.DBusProxy.makeProxyWrapper(Hostname1Iface);
class PlaceInfo extends EventEmitter {
constructor(...params) {
super();
@@ -53,15 +61,15 @@ class PlaceInfo extends EventEmitter {
return;
}
const source = {
get_drive: () => null,
let source = {
get_icon: () => this.icon,
};
const op = new ShellMountOperation.ShellMountOperation(source);
let op = new ShellMountOperation.ShellMountOperation(source);
try {
await this.file.mount_enclosing_volume(0, op.mountOp, null);
if (tryMount)
this._ensureMountAndLaunch(context, false).catch(logError);
this._ensureMountAndLaunch(context, false);
} catch (e) {
if (!e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.FAILED_HANDLED))
Main.notifyError(_('Failed to mount volume for “%s”').format(this.name), e.message);
@@ -72,8 +80,8 @@ class PlaceInfo extends EventEmitter {
}
launch(timestamp) {
const launchContext = global.create_app_launch_context(timestamp, -1);
this._ensureMountAndLaunch(launchContext, true).catch(logError);
let launchContext = global.create_app_launch_context(timestamp, -1);
this._ensureMountAndLaunch(launchContext, true);
}
getIcon() {
@@ -83,7 +91,7 @@ class PlaceInfo extends EventEmitter {
null,
(file, result) => {
try {
const info = file.query_info_finish(result);
let info = file.query_info_finish(result);
this.icon = info.get_symbolic_icon();
this.emit('changed');
} catch (e) {
@@ -112,7 +120,7 @@ class PlaceInfo extends EventEmitter {
_getFileName() {
try {
const info = this.file.query_info('standard::display-name', 0, null);
let info = this.file.query_info('standard::display-name', 0, null);
return info.get_display_name();
} catch (e) {
if (e instanceof Gio.IOErrorEnum)
@@ -122,20 +130,44 @@ class PlaceInfo extends EventEmitter {
}
}
class NautilusSpecialInfo extends PlaceInfo {
constructor(file, name, icon) {
super('special', file, name, icon);
class RootInfo extends PlaceInfo {
_init() {
super._init('devices', Gio.File.new_for_path('/'), _('Computer'));
const appSystem = Shell.AppSystem.get_default();
this._app = appSystem.lookup_app('org.gnome.Nautilus.desktop');
let busName = 'org.freedesktop.hostname1';
let objPath = '/org/freedesktop/hostname1';
new Hostname1(Gio.DBus.system, busName, objPath, (obj, error) => {
if (error)
return;
this._proxy = obj;
this._proxy.connectObject('g-properties-changed',
this._propertiesChanged.bind(this), this);
this._propertiesChanged(obj);
});
}
launch(timestamp) {
const launchContext = global.create_app_launch_context(timestamp, -1);
this._app.appInfo.launch([this.file], launchContext);
getIcon() {
return new Gio.ThemedIcon({name: 'drive-harddisk-symbolic'});
}
_propertiesChanged(proxy) {
// GDBusProxy will emit a g-properties-changed when hostname1 goes down
// ignore it
if (proxy.g_name_owner) {
this.name = proxy.PrettyHostname || _('Computer');
this.emit('changed');
}
}
destroy() {
this._proxy?.disconnectObject(this);
this._proxy = null;
super.destroy();
}
}
class PlaceDeviceInfo extends PlaceInfo {
_init(kind, mount) {
this._mount = mount;
@@ -151,7 +183,7 @@ class PlaceDeviceInfo extends PlaceInfo {
}
eject() {
const unmountArgs = [
let unmountArgs = [
Gio.MountUnmountFlags.NONE,
new ShellMountOperation.ShellMountOperation(this._mount).mountOp,
null, // Gio.Cancellable
@@ -183,7 +215,7 @@ class PlaceDeviceInfo extends PlaceInfo {
}
_reportFailure(exception) {
const msg = _('Ejecting drive “%s” failed:').format(this._mount.get_name());
let msg = _('Ejecting drive “%s” failed:').format(this._mount.get_name());
Main.notifyError(msg, exception.message);
}
}
@@ -203,7 +235,7 @@ class PlaceVolumeInfo extends PlaceInfo {
this._volume.mount(0, null, null, (volume, result) => {
volume.mount_finish(result);
const mount = volume.get_mount();
let mount = volume.get_mount();
this.file = mount.get_root();
super.launch(timestamp);
});
@@ -214,6 +246,14 @@ class PlaceVolumeInfo extends PlaceInfo {
}
}
const DEFAULT_DIRECTORIES = [
GLib.UserDirectory.DIRECTORY_DOCUMENTS,
GLib.UserDirectory.DIRECTORY_PICTURES,
GLib.UserDirectory.DIRECTORY_MUSIC,
GLib.UserDirectory.DIRECTORY_DOWNLOAD,
GLib.UserDirectory.DIRECTORY_VIDEOS,
];
export class PlacesManager extends EventEmitter {
constructor() {
super();
@@ -228,12 +268,6 @@ export class PlacesManager extends EventEmitter {
this._settings = new Gio.Settings({schema_id: BACKGROUND_SCHEMA});
this._settings.connectObject('changed::show-desktop-icons',
() => this._updateSpecials(), this);
this._privacySettings = new Gio.Settings({
schema_id: 'org.gnome.desktop.privacy',
});
this._privacySettings.connectObject('changed::remember-recent-files',
() => this._updateSpecials(), this);
this._updateSpecials();
/*
@@ -267,7 +301,7 @@ export class PlacesManager extends EventEmitter {
GLib.PRIORITY_DEFAULT, 100, () => {
this._bookmarkTimeoutId = 0;
this._reloadBookmarks();
return GLib.SOURCE_REMOVE;
return false;
});
});
@@ -279,9 +313,6 @@ export class PlacesManager extends EventEmitter {
this._settings?.disconnectObject(this);
this._settings = null;
this._privacySettings.disconnectObject(this);
this._privacySettings = null;
this._volumeMonitor.disconnectObject(this);
if (this._monitor)
@@ -290,92 +321,74 @@ export class PlacesManager extends EventEmitter {
GLib.source_remove(this._bookmarkTimeoutId);
}
_shouldShowRecent() {
const vfs = Gio.Vfs.get_default();
const schemes = vfs.get_supported_uri_schemes();
return this._privacySettings.get_boolean('remember-recent-files') &&
schemes.includes('recent');
}
_updateSpecials() {
this._places.special.forEach(p => p.destroy());
this._places.special = [];
const appSystem = Shell.AppSystem.get_default();
const nautilusApp = appSystem.lookup_app('org.gnome.Nautilus.desktop');
const defaultFm = Gio.AppInfo.get_default_for_type('inode/directory', true);
const showNautilusSpecials =
nautilusApp && defaultFm && nautilusApp.appInfo.equal(defaultFm);
const homeFile = Gio.File.new_for_path(GLib.get_home_dir());
let homePath = GLib.get_home_dir();
this._places.special.push(new PlaceInfo(
'special',
homeFile,
Gio.File.new_for_path(homePath),
_('Home')));
if (this._shouldShowRecent()) {
this._places.special.push(new PlaceInfo(
'special',
Gio.File.new_for_uri('recent:///'),
_('Recent')));
}
let specials = [];
let dirs = DEFAULT_DIRECTORIES.slice();
if (showNautilusSpecials) {
this._places.special.push(new NautilusSpecialInfo(
Gio.File.new_for_uri('starred:///'),
_('Starred'),
'starred-symbolic'));
}
if (this._settings.get_boolean('show-desktop-icons'))
dirs.push(GLib.UserDirectory.DIRECTORY_DESKTOP);
if (this._settings.get_boolean('show-desktop-icons')) {
const desktopPath = GLib.get_user_special_dir(
GLib.UserDirectory.DIRECTORY_DESKTOP);
const desktopFile = desktopPath
? Gio.File.new_for_path(desktopPath)
: null;
for (let i = 0; i < dirs.length; i++) {
let specialPath = GLib.get_user_special_dir(dirs[i]);
if (!specialPath || specialPath === homePath)
continue;
if (desktopFile && !desktopFile.equal(homeFile)) {
this._places.special.push(
new PlaceInfo('special', desktopFile));
let file = Gio.File.new_for_path(specialPath), info;
try {
info = new PlaceInfo('special', file);
} catch (e) {
if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND))
continue;
throw e;
}
specials.push(info);
}
if (showNautilusSpecials) {
this._places.special.push(new NautilusSpecialInfo(
Gio.File.new_for_uri('x-network-view:///'),
_('Network'),
'network-workgroup-symbolic'));
}
this._places.special.push(new PlaceInfo(
'special',
Gio.File.new_for_uri('trash:///'),
_('Trash')));
specials.sort((a, b) => GLib.utf8_collate(a.name, b.name));
this._places.special = this._places.special.concat(specials);
this.emit('special-updated');
}
_updateMounts() {
const networkMounts = [];
const networkVolumes = [];
let networkMounts = [];
let networkVolumes = [];
this._places.devices.forEach(p => p.destroy());
this._places.devices = [];
this._places.network.forEach(p => p.destroy());
this._places.network = [];
/* Add standard places */
this._places.devices.push(new RootInfo());
this._places.network.push(new PlaceInfo(
'network',
Gio.File.new_for_uri('network:///'),
_('Browse Network'),
'network-workgroup-symbolic'));
/* first go through all connected drives */
const drives = this._volumeMonitor.get_connected_drives();
let drives = this._volumeMonitor.get_connected_drives();
for (let i = 0; i < drives.length; i++) {
const volumes = drives[i].get_volumes();
let volumes = drives[i].get_volumes();
for (let j = 0; j < volumes.length; j++) {
const identifier = volumes[j].get_identifier('class');
let identifier = volumes[j].get_identifier('class');
if (identifier && identifier.includes('network')) {
networkVolumes.push(volumes[j]);
} else {
const mount = volumes[j].get_mount();
let mount = volumes[j].get_mount();
if (mount)
this._addMount('devices', mount);
}
@@ -383,23 +396,23 @@ export class PlacesManager extends EventEmitter {
}
/* add all volumes that is not associated with a drive */
const volumes = this._volumeMonitor.get_volumes();
let volumes = this._volumeMonitor.get_volumes();
for (let i = 0; i < volumes.length; i++) {
if (volumes[i].get_drive())
continue;
const identifier = volumes[i].get_identifier('class');
let identifier = volumes[i].get_identifier('class');
if (identifier && identifier.includes('network')) {
networkVolumes.push(volumes[i]);
} else {
const mount = volumes[i].get_mount();
let mount = volumes[i].get_mount();
if (mount)
this._addMount('devices', mount);
}
}
/* add mounts that have no volume (/etc/mtab mounts, ftp, sftp,...) */
const mounts = this._volumeMonitor.get_mounts();
let mounts = this._volumeMonitor.get_mounts();
for (let i = 0; i < mounts.length; i++) {
if (mounts[i].is_shadowed())
continue;
@@ -407,7 +420,7 @@ export class PlacesManager extends EventEmitter {
if (mounts[i].get_volume())
continue;
const root = mounts[i].get_default_location();
let root = mounts[i].get_default_location();
if (!root.is_native()) {
networkMounts.push(mounts[i]);
continue;
@@ -416,7 +429,7 @@ export class PlacesManager extends EventEmitter {
}
for (let i = 0; i < networkVolumes.length; i++) {
const mount = networkVolumes[i].get_mount();
let mount = networkVolumes[i].get_mount();
if (mount) {
networkMounts.push(mount);
continue;
@@ -433,7 +446,7 @@ export class PlacesManager extends EventEmitter {
}
_findBookmarksFile() {
const paths = [
let paths = [
GLib.build_filenamev([GLib.get_user_config_dir(), 'gtk-3.0', 'bookmarks']),
GLib.build_filenamev([GLib.get_home_dir(), '.gtk-bookmarks']),
];
@@ -449,19 +462,19 @@ export class PlacesManager extends EventEmitter {
_reloadBookmarks() {
this._bookmarks = [];
const content = Shell.get_file_contents_utf8_sync(this._bookmarksFile.get_path());
const lines = content.split('\n');
let content = Shell.get_file_contents_utf8_sync(this._bookmarksFile.get_path());
let lines = content.split('\n');
const bookmarks = [];
let bookmarks = [];
for (let i = 0; i < lines.length; i++) {
const line = lines[i];
const components = line.split(' ');
const [bookmark] = components;
let line = lines[i];
let components = line.split(' ');
let [bookmark] = components;
if (!bookmark)
continue;
const file = Gio.File.new_for_uri(bookmark);
let file = Gio.File.new_for_uri(bookmark);
if (file.is_native() && !file.query_exists(null))
continue;
@@ -496,12 +509,30 @@ export class PlacesManager extends EventEmitter {
}
_addMount(kind, mount) {
const devItem = new PlaceDeviceInfo(kind, mount);
let devItem;
try {
devItem = new PlaceDeviceInfo(kind, mount);
} catch (e) {
if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND))
return;
throw e;
}
this._places[kind].push(devItem);
}
_addVolume(kind, volume) {
const volItem = new PlaceVolumeInfo(kind, volume);
let volItem;
try {
volItem = new PlaceVolumeInfo(kind, volume);
} catch (e) {
if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND))
return;
throw e;
}
this._places[kind].push(volItem);
}

View File

@@ -24,7 +24,6 @@ export default class ScreenshotWindowSizerExtension extends Extension {
[624, 351],
[800, 450],
[1024, 576],
[1000, 700],
[1200, 675],
[1600, 900],
[360, 654], // Phone portrait maximized
@@ -34,7 +33,7 @@ export default class ScreenshotWindowSizerExtension extends Extension {
_flashMessage(message) {
if (!this._text) {
this._text = new St.Label({style_class: 'screenshot-sizer-message'});
Main.uiGroup.add_child(this._text);
Main.uiGroup.add_actor(this._text);
}
this._text.remove_all_transitions();
@@ -63,22 +62,21 @@ export default class ScreenshotWindowSizerExtension extends Extension {
/**
* @param {Meta.Display} display - the display
* @param {Meta.Window=} window - for per-window bindings, the window
* @param {Clutter.Event} event - the triggering event
* @param {Meta.KeyBinding} binding - the key binding
*/
_cycleScreenshotSizes(display, window, event, binding) {
_cycleScreenshotSizes(display, window, binding) {
const backwards = binding.is_reversed();
// Unmaximize first
if (window.is_maximized())
window.unmaximize();
if (window.get_maximized() !== 0)
window.unmaximize(Meta.MaximizeFlags.BOTH);
const workArea = window.get_work_area_current_monitor();
const outerRect = window.get_frame_rect();
let workArea = window.get_work_area_current_monitor();
let outerRect = window.get_frame_rect();
// Double both axes if on a hidpi display
const scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
const scaledSizes = this.SIZES.map(size => size.map(wh => wh * scaleFactor))
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
let scaledSizes = this.SIZES.map(size => size.map(wh => wh * scaleFactor))
.filter(([w, h]) => w <= workArea.width && h <= workArea.height);
// Find the nearest 16:9 size for the current window size
@@ -86,10 +84,10 @@ export default class ScreenshotWindowSizerExtension extends Extension {
let nearestError;
for (let i = 0; i < scaledSizes.length; i++) {
const [width, height] = scaledSizes[i];
let [width, height] = scaledSizes[i];
// get the best initial window size
const error = Math.abs(width - outerRect.width) + Math.abs(height - outerRect.height);
let error = Math.abs(width - outerRect.width) + Math.abs(height - outerRect.height);
if (nearestIndex === undefined || error < nearestError) {
nearestIndex = i;
nearestError = error;
@@ -97,8 +95,8 @@ export default class ScreenshotWindowSizerExtension extends Extension {
}
// get the next size up or down from ideal
const newIndex = (nearestIndex + (backwards ? -1 : 1)) % scaledSizes.length;
const [newWidth, newHeight] = scaledSizes.at(newIndex);
let newIndex = (nearestIndex + (backwards ? -1 : 1)) % scaledSizes.length;
let [newWidth, newHeight] = scaledSizes.at(newIndex);
// Push the window onscreen if it would be resized offscreen
let newX = outerRect.x;
@@ -120,7 +118,7 @@ export default class ScreenshotWindowSizerExtension extends Extension {
*/
_notifySizeChange(window) {
const {scaleFactor} = St.ThemeContext.get_for_stage(global.stage);
const newOuterRect = window.get_frame_rect();
let newOuterRect = window.get_frame_rect();
let message = '%d×%d'.format(
newOuterRect.width / scaleFactor,
newOuterRect.height / scaleFactor);
@@ -128,7 +126,7 @@ export default class ScreenshotWindowSizerExtension extends Extension {
// The new size might have been constrained by geometry hints (e.g. for
// a terminal) - in that case, include the actual ratio to the message
// we flash
const actualNumerator = 9 * newOuterRect.width / newOuterRect.height;
let actualNumerator = 9 * newOuterRect.width / newOuterRect.height;
if (Math.abs(actualNumerator - 16) > 0.01)
message += ' (%.2f:9)'.format(actualNumerator);

View File

@@ -4,7 +4,7 @@
"settings-schema": "@gschemaname@",
"gettext-domain": "@gettext_domain@",
"name": "Screenshot Window Sizer",
"description": "Resize windows for GNOME Software screenshots with Ctrl+Alt+s shortcut",
"description": "Resize windows for GNOME Software screenshots",
"shell-version": [ "@shell_current@" ],
"url": "@url@"
}

View File

@@ -1,91 +0,0 @@
// SPDX-FileCopyrightText: 2018 Adel Gadllah <adel.gadllah@gmail.com>
// SPDX-FileCopyrightText: 2018 Florian Müllner <fmuellner@gnome.org>
//
// SPDX-License-Identifier: GPL-2.0-or-later
import Clutter from 'gi://Clutter';
import Shell from 'gi://Shell';
import St from 'gi://St';
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
import {Button as PanelButton} from 'resource:///org/gnome/shell/ui/panelMenu.js';
const PANEL_ICON_SIZE = 16;
const STANDARD_TRAY_ICON_IMPLEMENTATIONS = [
'bluetooth-applet',
'gnome-sound-applet',
'nm-applet',
'gnome-power-manager',
'keyboard',
'a11y-keyboard',
'kbd-scrolllock',
'kbd-numlock',
'kbd-capslock',
'ibus-ui-gtk',
];
export default class SysTray {
constructor() {
this._icons = new Map();
this._tray = null;
}
_onTrayIconAdded(o, icon) {
const wmClass = icon.wm_class ? icon.wm_class.toLowerCase() : '';
if (STANDARD_TRAY_ICON_IMPLEMENTATIONS.includes(wmClass))
return;
const button = new PanelButton(0.5, null, true);
const scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
const iconSize = PANEL_ICON_SIZE * scaleFactor;
icon.set({
width: iconSize,
height: iconSize,
x_align: Clutter.ActorAlign.CENTER,
y_align: Clutter.ActorAlign.CENTER,
});
const iconBin = new St.Widget({
layout_manager: new Clutter.BinLayout(),
style_class: 'system-status-icon',
});
iconBin.add_child(icon);
button.add_child(iconBin);
this._icons.set(icon, button);
button.connect('button-release-event',
(actor, event) => icon.click(event));
button.connect('key-press-event',
(actor, event) => icon.click(event));
const role = `${icon}`;
Main.panel.addToStatusArea(role, button);
}
_onTrayIconRemoved(o, icon) {
const button = this._icons.get(icon);
button?.destroy();
this._icons.delete(icon);
}
enable() {
this._tray = new Shell.TrayManager();
this._tray.connect('tray-icon-added',
this._onTrayIconAdded.bind(this));
this._tray.connect('tray-icon-removed',
this._onTrayIconRemoved.bind(this));
this._tray.manage_screen(Main.panel);
}
disable() {
this._icons.forEach(button => button.destroy());
this._icons.clear();
this._tray.unmanage_screen();
this._tray = null;
}
}

View File

@@ -1,9 +0,0 @@
# SPDX-FileCopyrightText: 2018 Florian Müllner <fmuellner@gnome.org>
#
# SPDX-License-Identifier: GPL-2.0-or-later
extension_data += configure_file(
input: metadata_name + '.in',
output: metadata_name,
configuration: metadata_conf
)

View File

@@ -1,10 +0,0 @@
{
"extension-id": "@extension_id@",
"uuid": "@uuid@",
"settings-schema": "@gschemaname@",
"gettext-domain": "@gettext_domain@",
"name": "Status Icons",
"description": "Show status icons in the top bar",
"shell-version": [ "@shell_current@" ],
"url": "@url@"
}

View File

@@ -1,490 +0,0 @@
/*
* SPDX-FileCopyrightText: 2023 Florian Müllner <fmuellner@gnome.org>
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
import Clutter from 'gi://Clutter';
import Gio from 'gi://Gio';
import GLib from 'gi://GLib';
import GObject from 'gi://GObject';
import GTop from 'gi://GTop';
import Pango from 'gi://Pango';
import Shell from 'gi://Shell';
import St from 'gi://St';
import {Extension, gettext as _} from 'resource:///org/gnome/shell/extensions/extension.js';
import * as PanelMenu from 'resource:///org/gnome/shell/ui/panelMenu.js';
import * as PopupMenu from 'resource:///org/gnome/shell/ui/popupMenu.js';
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
const THRESHOLD_HIGH = 0.80;
// adapted from load-graph.cpp in gnome-system-monitor
/**
* @param {string} str
* @returns {number}
*/
function strHash(str) {
let hash = 0xcbf29ce484222325n;
for (const c of str)
hash = (hash * 0x00000100000001B3n) ^ BigInt(c.codePointAt(0));
return hash;
}
class StatSection extends St.BoxLayout {
static {
GObject.registerClass(this);
}
constructor(iconName, accessibleName) {
super({
style_class: 'system-monitor-stat-section',
accessibleName,
});
const ext = Extension.lookupByURL(import.meta.url);
const file =
ext.dir.resolve_relative_path(`icons/${iconName}.svg`);
this._icon = new St.Icon({
style_class: 'system-monitor-stat-section-icon',
gicon: new Gio.FileIcon({file}),
});
this.add_child(this._icon);
this.label = new St.Label({
style_class: 'system-monitor-stat-section-label',
y_align: Clutter.ActorAlign.CENTER,
});
this.label.clutter_text.set({
ellipsize: Pango.EllipsizeMode.NONE,
x_align: Clutter.ActorAlign.CENTER,
});
this.add_child(this.label);
this.connect('destroy', () => this._clearTimeout());
this.connect('notify::visible', () => this._sync());
this._sync();
}
_ensureTimeout() {
if (this._updateId)
return;
this._updateId = GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT, 1,
() => {
this._update();
return GLib.SOURCE_CONTINUE;
});
}
_clearTimeout() {
if (this._updateId)
GLib.source_remove(this._updateId);
delete this._updateId;
}
_sync() {
if (this.visible)
this._ensureTimeout();
else
this._clearTimeout();
if (this.visible)
this._update();
}
_update() {
}
}
class LoadStatSection extends StatSection {
static {
GObject.registerClass(this);
}
#formatter = new Intl.NumberFormat(undefined, {
style: 'percent',
});
_getLoadValue() {
}
_update() {
const load = this._getLoadValue();
this.label.text = this.#formatter.format(load);
if (load >= THRESHOLD_HIGH)
this.add_style_class_name('high-usage');
else
this.remove_style_class_name('high-usage');
}
}
class CpuSection extends LoadStatSection {
static {
GObject.registerClass(this);
}
#prevCpu = new GTop.glibtop_cpu();
constructor() {
super('processor-symbolic', _('CPU stats'));
}
_getLoadValue() {
const cpu = new GTop.glibtop_cpu();
GTop.glibtop_get_cpu(cpu);
const total = cpu.total - this.#prevCpu.total;
const user = cpu.user - this.#prevCpu.user;
const sys = cpu.sys - this.#prevCpu.sys;
const nice = cpu.nice - this.#prevCpu.nice;
this.#prevCpu = cpu;
return (user + sys + nice) / Math.max(total, 1.0);
}
}
class MemSection extends LoadStatSection {
static {
GObject.registerClass(this);
}
constructor() {
super('memory-symbolic', _('Memory stats'));
}
_getLoadValue() {
const mem = new GTop.glibtop_mem();
GTop.glibtop_get_mem(mem);
const {user, total} = mem;
return user / Math.max(total, 1.0);
}
}
class SwapSection extends LoadStatSection {
static {
GObject.registerClass(this);
}
constructor() {
super('swap-symbolic', _('Swap stats'));
}
_getLoadValue() {
const swap = new GTop.glibtop_swap();
GTop.glibtop_get_swap(swap);
const {used, total} = swap;
return used / Math.max(total, 1.0);
}
}
class NetStatSection extends StatSection {
static {
GObject.registerClass(this);
}
#formats = [{
factor: 1000,
unitFactor: 1000,
formatter: new Intl.NumberFormat(undefined, {
style: 'unit',
unit: 'kilobyte',
maximumFractionDigits: 1,
minimumFractionDigits: 1,
}),
}, {
factor: 1000 * 10,
unitFactor: 1000,
formatter: new Intl.NumberFormat(undefined, {
style: 'unit',
unit: 'kilobyte',
maximumFractionDigits: 0,
}),
}, {
factor: 1000 * 1000,
unitFactor: 1000 * 1000,
formatter: new Intl.NumberFormat(undefined, {
style: 'unit',
unit: 'megabyte',
maximumFractionDigits: 1,
minimumFractionDigits: 1,
}),
}, {
factor: 1000 * 1000 * 10,
unitFactor: 1000 * 1000,
formatter: new Intl.NumberFormat(undefined, {
style: 'unit',
unit: 'megabyte',
maximumFractionDigits: 0,
}),
}, {
factor: 1000 * 1000 * 1000,
unitFactor: 1000 * 1000 * 1000,
formatter: new Intl.NumberFormat(undefined, {
style: 'unit',
unit: 'gigabyte',
maximumFractionDigits: 1,
minimumFractionDigits: 1,
}),
}, {
factor: 1000 * 1000 * 1000 * 10,
unitFactor: 1000 * 1000 * 1000,
formatter: new Intl.NumberFormat(undefined, {
style: 'unit',
unit: 'gigabyte',
maximumFractionDigits: 0,
}),
}, {
factor: 1000 * 1000 * 1000 * 1000,
unitFactor: 1000 * 1000 * 1000 * 1000,
formatter: new Intl.NumberFormat(undefined, {
style: 'unit',
unit: 'terabyte',
maximumFractionDigits: 1,
minimumFractionDigits: 1,
}),
}, {
factor: 1000 * 1000 * 1000 * 1000 * 10,
unitFactor: 1000 * 1000 * 1000 * 1000,
formatter: new Intl.NumberFormat(undefined, {
style: 'unit',
unit: 'terabyte',
maximumFractionDigits: 0,
}),
}, {
factor: 1000 * 1000 * 1000 * 1000 * 1000,
unitFactor: 1000 * 1000 * 1000 * 1000 * 1000,
formatter: new Intl.NumberFormat(undefined, {
style: 'unit',
unit: 'petabyte',
maximumFractionDigits: 1,
minimumFractionDigits: 1,
}),
}];
#lastBytes = 0;
#lastHash = 0;
#lastTime = 0;
_getBytes(_netload) {
}
_getFormat(bytes) {
for (let i = 1; i < this.#formats.length; i++) {
if (bytes < this.#formats.at(i).factor)
return this.#formats.at(i - 1);
}
return this.#formats.at(-1);
}
_update() {
const FLAG_LOOPBACK = 1 << 4; // GTop sucks
const netlist = new GTop.glibtop_netlist();
const ifnames = GTop.glibtop_get_netlist(netlist);
let bytes = 0;
let hash = 1n;
for (const ifname of ifnames) {
const netload = new GTop.glibtop_netload();
GTop.glibtop_get_netload(netload, ifname);
if (netload.if_flags & FLAG_LOOPBACK)
continue;
bytes += this._getBytes(netload);
hash += strHash(ifname);
}
const time = GLib.get_monotonic_time();
let dbytes = 0;
// Skip calculation if new data is less than old (interface
// removed, counters reset, ...) or if it is the first time
if (bytes >= this.#lastBytes &&
hash === this.#lastHash &&
this.#lastTime !== 0) {
const dtime = (time - this.#lastTime) / GLib.USEC_PER_SEC;
dbytes = (bytes - this.#lastBytes) / dtime;
}
this.#lastBytes = bytes;
this.#lastTime = time;
this.#lastHash = hash;
const {unitFactor, formatter} = this._getFormat(dbytes);
this.label.text = formatter.format(dbytes / unitFactor);
}
}
class UploadSection extends NetStatSection {
static {
GObject.registerClass(this);
}
constructor() {
super('upload-symbolic', _('Upload stats'));
}
_getBytes(netload) {
return netload.bytes_out;
}
}
class DownloadSection extends NetStatSection {
static {
GObject.registerClass(this);
}
constructor() {
super('download-symbolic', _('Download stats'));
}
_getBytes(netload) {
return netload.bytes_in;
}
}
class Indicator extends PanelMenu.Button {
static {
GObject.registerClass(this);
}
constructor(settings) {
GTop.glibtop_init();
super(0.5, _('System stats'));
this._settings = settings;
this.connect('destroy',
() => (this._settings = null));
const box = new St.BoxLayout({
styleClass: 'system-monitor-stat-sections',
});
this.add_child(box);
this._placeholder = new St.Icon({
styleClass: 'system-status-icon system-monitor-placeholder',
});
box.add_child(this._placeholder);
this._cpuSection = new CpuSection();
this._settings.bind('show-cpu',
this._cpuSection, 'visible',
Gio.SettingsBindFlags.GET);
box.add_child(this._cpuSection);
this._memSection = new MemSection();
this._settings.bind('show-memory',
this._memSection, 'visible',
Gio.SettingsBindFlags.GET);
box.add_child(this._memSection);
this._swapSection = new SwapSection();
this._settings.bind('show-swap',
this._swapSection, 'visible',
Gio.SettingsBindFlags.GET);
box.add_child(this._swapSection);
this._ulSection = new UploadSection();
this._settings.bind('show-upload',
this._ulSection, 'visible',
Gio.SettingsBindFlags.GET);
box.add_child(this._ulSection);
this._dlSection = new DownloadSection();
this._settings.bind('show-download',
this._dlSection, 'visible',
Gio.SettingsBindFlags.GET);
box.add_child(this._dlSection);
this.menu.addMenuItem(
new PopupMenu.PopupSeparatorMenuItem(_('Show')));
this._cpuItem = this.menu.addAction(_('CPU'),
() => this._toggleSettings('show-cpu'));
this._memItem = this.menu.addAction(_('Memory'),
() => this._toggleSettings('show-memory'));
this._swapItem = this.menu.addAction(_('Swap'),
() => this._toggleSettings('show-swap'));
this._ulItem = this.menu.addAction(_('Upload'),
() => this._toggleSettings('show-upload'));
this._dlItem = this.menu.addAction(_('Download'),
() => this._toggleSettings('show-download'));
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
this._appMenuItem = this.menu.addAction(_('Open System Monitor'),
() => this._openSystemMonitor());
const appSystem = Shell.AppSystem.get_default();
appSystem.connectObject('installed-changed',
() => this._updateSystemMonitorApp(), this);
this._updateSystemMonitorApp();
this._settings.connectObject('changed',
() => this._sync(), this);
this._sync();
}
_updateSystemMonitorApp() {
const appSystem = Shell.AppSystem.get_default();
this._systemMonitorApp =
appSystem.lookup_app('org.gnome.SystemMonitor.desktop');
this._placeholder.gicon = this._systemMonitorApp?.icon ?? null;
this.visible = this._systemMonitorApp != null;
}
_openSystemMonitor() {
this._systemMonitorApp.activate();
Main.overview.hide();
}
_toggleSettings(key) {
this._settings.set_boolean(key, !this._settings.get_boolean(key));
}
_sync() {
this._cpuItem.setOrnament(this._settings.get_boolean('show-cpu')
? PopupMenu.Ornament.CHECK
: PopupMenu.Ornament.NONE);
this._memItem.setOrnament(this._settings.get_boolean('show-memory')
? PopupMenu.Ornament.CHECK
: PopupMenu.Ornament.NONE);
this._swapItem.setOrnament(this._settings.get_boolean('show-swap')
? PopupMenu.Ornament.CHECK
: PopupMenu.Ornament.NONE);
this._ulItem.setOrnament(this._settings.get_boolean('show-upload')
? PopupMenu.Ornament.CHECK
: PopupMenu.Ornament.NONE);
this._dlItem.setOrnament(this._settings.get_boolean('show-download')
? PopupMenu.Ornament.CHECK
: PopupMenu.Ornament.NONE);
this._placeholder.visible =
this._settings.list_keys().every(key => !this._settings.get_boolean(key));
}
}
export default class SystemMonitorExtension extends Extension {
enable() {
this._indicator = new Indicator(this.getSettings());
Main.panel.addToStatusArea(this.uuid, this._indicator);
}
disable() {
this._indicator.destroy();
this._indicator = null;
}
}

View File

@@ -1,46 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<filter id="a" height="100%" width="100%" x="0%" y="0%">
<feColorMatrix color-interpolation-filters="sRGB" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/>
</filter>
<mask id="b">
<g filter="url(#a)">
<path d="m -1.6 -1.6 h 19.2 v 19.2 h -19.2 z" fill-opacity="0.5"/>
</g>
</mask>
<clipPath id="c">
<path d="m 0 0 h 1600 v 1200 h -1600 z"/>
</clipPath>
<mask id="d">
<g filter="url(#a)">
<path d="m -1.6 -1.6 h 19.2 v 19.2 h -19.2 z" fill-opacity="0.7"/>
</g>
</mask>
<clipPath id="e">
<path d="m 0 0 h 1600 v 1200 h -1600 z"/>
</clipPath>
<mask id="f">
<g filter="url(#a)">
<path d="m -1.6 -1.6 h 19.2 v 19.2 h -19.2 z" fill-opacity="0.35"/>
</g>
</mask>
<clipPath id="g">
<path d="m 0 0 h 1600 v 1200 h -1600 z"/>
</clipPath>
<g mask="url(#b)">
<g clip-path="url(#c)" transform="matrix(1 0 0 1 -920 -120)">
<path d="m 550 182 c -0.351562 0.003906 -0.695312 0.101562 -1 0.28125 v 3.4375 c 0.304688 0.179688 0.648438 0.277344 1 0.28125 c 1.105469 0 2 -0.894531 2 -2 s -0.894531 -2 -2 -2 z m 0 5 c -0.339844 0 -0.679688 0.058594 -1 0.175781 v 6.824219 h 4 v -4 c 0 -1.65625 -1.34375 -3 -3 -3 z m 0 0"/>
</g>
</g>
<g mask="url(#d)">
<g clip-path="url(#e)" transform="matrix(1 0 0 1 -920 -120)">
<path d="m 569 182 v 4 c 1.105469 0 2 -0.894531 2 -2 s -0.894531 -2 -2 -2 z m 0 5 v 7 h 3 v -4 c 0 -1.65625 -1.34375 -3 -3 -3 z m 0 0"/>
</g>
</g>
<g mask="url(#f)">
<g clip-path="url(#g)" transform="matrix(1 0 0 1 -920 -120)">
<path d="m 573 182.269531 v 3.449219 c 0.613281 -0.355469 0.996094 -1.007812 1 -1.71875 c 0 -0.714844 -0.382812 -1.375 -1 -1.730469 z m 0 4.90625 v 6.824219 h 2 v -4 c 0 -1.269531 -0.800781 -2.402344 -2 -2.824219 z m 0 0"/>
</g>
</g>
<path d="m 7.984375 1 c -0.550781 0 -1 0.449219 -1 1 v 8.585938 l -2.292969 -2.292969 c -0.1875 -0.1875 -0.441406 -0.292969 -0.707031 -0.292969 s -0.519531 0.105469 -0.707031 0.292969 c -0.390625 0.390625 -0.390625 1.023437 0 1.414062 l 4 4 c 0.390625 0.390625 1.023437 0.390625 1.414062 0 l 4 -4 c 0.390625 -0.390625 0.390625 -1.023437 0 -1.414062 s -1.023437 -0.390625 -1.414062 0 l -2.292969 2.292969 v -8.585938 c 0 -0.550781 -0.445313 -1 -1 -1 z m 0 0"/>
</svg>

Before

Width:  |  Height:  |  Size: 2.5 KiB

View File

@@ -1,3 +0,0 @@
SPDX-FileCopyrightText: Icon Development Kit
SPDX-License-Identifier: CC0-1.0

View File

@@ -1,2 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" height="16px" viewBox="0 0 16 16" width="16px"><path d="m 3 2 c -1.660156 0 -3 1.339844 -3 3 v 4 c 0 1.660156 1.339844 3 3 3 h 10 c 1.660156 0 3 -1.339844 3 -3 v -4 c 0 -1.660156 -1.339844 -3 -3 -3 z m 0 2 h 10 c 0.554688 0 1 0.445312 1 1 v 4 c 0 0.554688 -0.445312 1 -1 1 h -10 c -0.554688 0 -1 -0.445312 -1 -1 v -4 c 0 -0.554688 0.445312 -1 1 -1 z m 0 0"/><path d="m 2 10 h 12 v 4 h -12 z m 0 0"/><g fill-opacity="0.501961"><path d="m 4 5 h 2 v 4 h -2 z m 0 0"/><path d="m 7 5 h 2 v 4 h -2 z m 0 0"/><path d="m 10 5 h 2 v 4 h -2 z m 0 0"/></g></svg>

Before

Width:  |  Height:  |  Size: 631 B

View File

@@ -1,3 +0,0 @@
SPDX-FileCopyrightText: Icon Development Kit
SPDX-License-Identifier: CC0-1.0

View File

@@ -1,2 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" height="16px" viewBox="0 0 16 16" width="16px"><path d="m 5 5 h 6 v 6 h -6 z m 0 0"/><path d="m 13 5 h 3 v 1 h -3 z m 0 0"/><path d="m 13 7 h 3 v 1 h -3 z m 0 0"/><path d="m 13 9 h 3 v 1 h -3 z m 0 0"/><path d="m 0 6 h 3 v 1 h -3 z m 0 0"/><path d="m 0 8 h 3 v 1 h -3 z m 0 0"/><path d="m 0 10 h 3 v 1 h -3 z m 0 0"/><path d="m 5 0 h 1 v 3 h -1 z m 0 0"/><path d="m 7 0 h 1 v 3 h -1 z m 0 0"/><path d="m 9 0 h 1 v 3 h -1 z m 0 0"/><path d="m 10 13 h 1 v 3 h -1 z m 0 0"/><path d="m 8 13 h 1 v 3 h -1 z m 0 0"/><path d="m 6 13 h 1 v 3 h -1 z m 0 0"/><path d="m 5 2 c -1.644531 0 -3 1.355469 -3 3 v 6 c 0 1.644531 1.355469 3 3 3 h 6 c 1.644531 0 3 -1.355469 3 -3 v -6 c 0 -1.644531 -1.355469 -3 -3 -3 z m 0 2 h 6 c 0.570312 0 1 0.429688 1 1 v 6 c 0 0.570312 -0.429688 1 -1 1 h -6 c -0.570312 0 -1 -0.429688 -1 -1 v -6 c 0 -0.570312 0.429688 -1 1 -1 z m 0 0"/></svg>

Before

Width:  |  Height:  |  Size: 943 B

View File

@@ -1,3 +0,0 @@
SPDX-FileCopyrightText: Icon Development Kit
SPDX-License-Identifier: CC0-1.0

View File

@@ -1,2 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" height="16px" viewBox="0 0 16 16" width="16px"><path d="m 5 7 c -0.308594 0 -0.613281 0.089844 -0.8125 0.28125 l -3.59375 3.71875 l 3.65625 3.71875 c 0.199219 0.191406 0.441406 0.28125 0.75 0.28125 h 1 v -1 c 0 -0.257812 -0.128906 -0.527344 -0.3125 -0.71875 l -1.28125 -1.28125 h 4.59375 c 0.527344 0.007812 1 -0.472656 1 -1 s -0.472656 -1.007812 -1 -1 h -4.625 l 1.21875 -1.28125 c 0.183594 -0.191406 0.40625 -0.460938 0.40625 -0.71875 v -1 z m 0 0"/><path d="m 11 9 c 0.308594 0 0.613281 -0.089844 0.8125 -0.28125 l 3.59375 -3.71875 l -3.65625 -3.71875 c -0.199219 -0.191406 -0.441406 -0.28125 -0.75 -0.28125 h -1 v 1 c 0 0.257812 0.128906 0.527344 0.3125 0.71875 l 1.28125 1.28125 h -4.59375 c -0.527344 -0.007812 -1 0.472656 -1 1 s 0.472656 1.007812 1 1 h 4.625 l -1.21875 1.28125 c -0.183594 0.191406 -0.40625 0.460938 -0.40625 0.71875 v 1 z m 0 0"/></svg>

Before

Width:  |  Height:  |  Size: 941 B

View File

@@ -1,3 +0,0 @@
SPDX-FileCopyrightText: Icon Development Kit
SPDX-License-Identifier: CC0-1.0

View File

@@ -1,46 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<filter id="a" height="100%" width="100%" x="0%" y="0%">
<feColorMatrix color-interpolation-filters="sRGB" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/>
</filter>
<mask id="b">
<g filter="url(#a)">
<path d="m -1.6 -1.6 h 19.2 v 19.2 h -19.2 z" fill-opacity="0.5"/>
</g>
</mask>
<clipPath id="c">
<path d="m 0 0 h 1600 v 1200 h -1600 z"/>
</clipPath>
<mask id="d">
<g filter="url(#a)">
<path d="m -1.6 -1.6 h 19.2 v 19.2 h -19.2 z" fill-opacity="0.7"/>
</g>
</mask>
<clipPath id="e">
<path d="m 0 0 h 1600 v 1200 h -1600 z"/>
</clipPath>
<mask id="f">
<g filter="url(#a)">
<path d="m -1.6 -1.6 h 19.2 v 19.2 h -19.2 z" fill-opacity="0.35"/>
</g>
</mask>
<clipPath id="g">
<path d="m 0 0 h 1600 v 1200 h -1600 z"/>
</clipPath>
<g mask="url(#b)">
<g clip-path="url(#c)" transform="matrix(1 0 0 1 -900 -120)">
<path d="m 550 182 c -0.351562 0.003906 -0.695312 0.101562 -1 0.28125 v 3.4375 c 0.304688 0.179688 0.648438 0.277344 1 0.28125 c 1.105469 0 2 -0.894531 2 -2 s -0.894531 -2 -2 -2 z m 0 5 c -0.339844 0 -0.679688 0.058594 -1 0.175781 v 6.824219 h 4 v -4 c 0 -1.65625 -1.34375 -3 -3 -3 z m 0 0"/>
</g>
</g>
<g mask="url(#d)">
<g clip-path="url(#e)" transform="matrix(1 0 0 1 -900 -120)">
<path d="m 569 182 v 4 c 1.105469 0 2 -0.894531 2 -2 s -0.894531 -2 -2 -2 z m 0 5 v 7 h 3 v -4 c 0 -1.65625 -1.34375 -3 -3 -3 z m 0 0"/>
</g>
</g>
<g mask="url(#f)">
<g clip-path="url(#g)" transform="matrix(1 0 0 1 -900 -120)">
<path d="m 573 182.269531 v 3.449219 c 0.613281 -0.355469 0.996094 -1.007812 1 -1.71875 c 0 -0.714844 -0.382812 -1.375 -1 -1.730469 z m 0 4.90625 v 6.824219 h 2 v -4 c 0 -1.269531 -0.800781 -2.402344 -2 -2.824219 z m 0 0"/>
</g>
</g>
<path d="m 8.015625 15 c 0.550781 0 1 -0.449219 1 -1 v -8.585938 l 2.292969 2.292969 c 0.1875 0.1875 0.441406 0.292969 0.707031 0.292969 s 0.519531 -0.105469 0.707031 -0.292969 c 0.390625 -0.390625 0.390625 -1.023437 0 -1.414062 l -4 -4 c -0.390625 -0.390625 -1.023437 -0.390625 -1.414062 0 l -4 4 c -0.390625 0.390625 -0.390625 1.023437 0 1.414062 s 1.023437 0.390625 1.414062 0 l 2.292969 -2.292969 v 8.585938 c 0 0.550781 0.445313 1 1 1 z m 0 0"/>
</svg>

Before

Width:  |  Height:  |  Size: 2.5 KiB

View File

@@ -1,3 +0,0 @@
SPDX-FileCopyrightText: Icon Development Kit
SPDX-License-Identifier: CC0-1.0

View File

@@ -1,14 +0,0 @@
# SPDX-FileCopyrightText: 2017 Florian Müllner <fmuellner@gnome.org>
#
# SPDX-License-Identifier: GPL-2.0-or-later
extension_data += configure_file(
input: metadata_name + '.in',
output: metadata_name,
configuration: metadata_conf
)
extension_data += files('stylesheet.css')
extension_schemas += files('schemas/' + metadata_conf.get('gschemaname') + '.gschema.xml')
install_subdir('icons', install_dir: join_paths(extensiondir, uuid))

View File

@@ -1,10 +0,0 @@
{
"extension-id": "@extension_id@",
"uuid": "@uuid@",
"settings-schema": "@gschemaname@",
"gettext-domain": "@gettext_domain@",
"name": "System Monitor",
"description": "Monitor system from the top bar",
"shell-version": [ "@shell_current@" ],
"url": "@url@"
}

View File

@@ -1,31 +0,0 @@
<!--
SPDX-FileCopyrightText: 2023 Florian Müllner <fmuellner@gnome.org>
SPDX-License-Identifier: GPL-2.0-or-later
-->
<schemalist gettext-domain="gnome-shell-extensions">
<schema id="org.gnome.shell.extensions.system-monitor"
path="/org/gnome/shell/extensions/system-monitor/">
<key name="show-cpu" type="b">
<default>true</default>
<summary>Show CPU usage</summary>
</key>
<key name="show-memory" type="b">
<default>true</default>
<summary>Show memory usage</summary>
</key>
<key name="show-swap" type="b">
<default>true</default>
<summary>Show swap usage</summary>
</key>
<key name="show-upload" type="b">
<default>true</default>
<summary>Show upload</summary>
</key>
<key name="show-download" type="b">
<default>true</default>
<summary>Show download</summary>
</key>
</schema>
</schemalist>

View File

@@ -1,18 +0,0 @@
/*
* SPDX-FileCopyrightText: 2023 Florian Müllner <fmuellner@gnome.org>
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
.system-monitor-stat-section {
padding: 0 6px;
}
.system-monitor-stat-section-icon {icon-size: 1.08em;}
.system-monitor-stat-section-label {
min-width: 3.0em;
font-size: 0.9em;
}
.system-monitor-placeholder {-st-icon-style: symbolic;}
.panel-button .high-usage {color: #ff7800;}

View File

@@ -5,6 +5,9 @@
//
// SPDX-License-Identifier: GPL-2.0-or-later
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
// Load shell theme from ~/.local/share/themes/name/gnome-shell
import Gio from 'gi://Gio';
import {Extension} from 'resource:///org/gnome/shell/extensions/extension.js';
@@ -33,7 +36,7 @@ export default class ThemeManager extends Extension {
_changeTheme() {
let stylesheet = null;
const themeName = this._settings.get_string(SETTINGS_KEY);
let themeName = this._settings.get_string(SETTINGS_KEY);
if (themeName) {
const stylesheetPaths = getThemeDirs()
@@ -43,7 +46,7 @@ export default class ThemeManager extends Extension {
.map(dir => `${dir}/${themeName}.css`));
stylesheet = stylesheetPaths.find(path => {
const file = Gio.file_new_for_path(path);
let file = Gio.file_new_for_path(path);
return file.query_exists(null);
});
}

View File

@@ -2,6 +2,8 @@
//
// SPDX-License-Identifier: GPL-2.0-or-later
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
// we use async/await here to not block the mainloop, not to parallelize
/* eslint-disable no-await-in-loop */

File diff suppressed because it is too large Load Diff

View File

@@ -12,33 +12,5 @@ extension_data += files(
'stylesheet-light.css'
)
transform_stylesheet = [
'sed', '-E',
'-e', 's:^\.(workspace-indicator):.window-list-\\1:',
'-e', '/^@import/d',
'@INPUT@',
]
workspaceIndicatorSources = [
configure_file(
input: '../workspace-indicator/workspaceIndicator.js',
output: '@PLAINNAME@',
copy: true,
),
configure_file(
input: '../workspace-indicator/stylesheet-dark.css',
output: 'stylesheet-workspace-switcher-dark.css',
command: transform_stylesheet,
capture: true,
),
configure_file(
input: '../workspace-indicator/stylesheet-light.css',
output: 'stylesheet-workspace-switcher-light.css',
command: transform_stylesheet,
capture: true,
),
files('../workspace-indicator/workspacePrefs.js'),
]
extension_sources += files('prefs.js') + workspaceIndicatorSources
extension_sources += files('prefs.js', 'windowPicker.js', 'workspaceIndicator.js')
extension_schemas += files(metadata_conf.get('gschemaname') + '.gschema.xml')

View File

@@ -36,9 +36,5 @@ SPDX-License-Identifier: GPL-2.0-or-later
only on the primary one.
</description>
</key>
<key name="embed-previews" type="b">
<default>true</default>
<summary>Show workspace previews in window list</summary>
</key>
</schema>
</schemalist>

View File

@@ -3,6 +3,7 @@
//
// SPDX-License-Identifier: GPL-2.0-or-later
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
import Adw from 'gi://Adw';
import Gio from 'gi://Gio';
import GLib from 'gi://GLib';
@@ -11,18 +12,13 @@ import Gtk from 'gi://Gtk';
import {ExtensionPreferences, gettext as _} from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js';
import {WorkspacesPage} from './workspacePrefs.js';
class WindowListPage extends Adw.PreferencesPage {
class WindowListPrefsWidget extends Adw.PreferencesPage {
static {
GObject.registerClass(this);
}
constructor(settings) {
super({
title: _('Window List'),
icon_name: 'focus-windows-symbolic',
});
super();
this._actionGroup = new Gio.SimpleActionGroup();
this.insert_action_group('window-list', this._actionGroup);
@@ -34,8 +30,6 @@ class WindowListPage extends Adw.PreferencesPage {
this._settings.create_action('show-on-all-monitors'));
this._actionGroup.add_action(
this._settings.create_action('display-all-workspaces'));
this._actionGroup.add_action(
this._settings.create_action('embed-previews'));
const groupingGroup = new Adw.PreferencesGroup({
title: _('Window Grouping'),
@@ -64,24 +58,34 @@ class WindowListPage extends Adw.PreferencesPage {
const miscGroup = new Adw.PreferencesGroup();
this.add(miscGroup);
let row = new Adw.SwitchRow({
title: _('Show on all monitors'),
let toggle = new Gtk.Switch({
action_name: 'window-list.show-on-all-monitors',
valign: Gtk.Align.CENTER,
});
let row = new Adw.ActionRow({
title: _('Show on all monitors'),
activatable_widget: toggle,
});
row.add_suffix(toggle);
miscGroup.add(row);
row = new Adw.SwitchRow({
title: _('Show windows from all workspaces'),
toggle = new Gtk.Switch({
action_name: 'window-list.display-all-workspaces',
valign: Gtk.Align.CENTER,
});
this._settings.bind('display-all-workspaces',
toggle, 'active', Gio.SettingsBindFlags.DEFAULT);
row = new Adw.ActionRow({
title: _('Show windows from all workspaces'),
activatable_widget: toggle,
});
row.add_suffix(toggle);
miscGroup.add(row);
}
}
export default class WindowListPrefs extends ExtensionPreferences {
fillPreferencesWindow(window) {
const settings = this.getSettings();
window.add(new WindowListPage(settings));
window.add(new WorkspacesPage(settings));
getPreferencesWidget() {
return new WindowListPrefsWidget(this.getSettings());
}
}

View File

@@ -4,12 +4,6 @@
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
@import url("stylesheet-workspace-switcher-dark.css");
.window-list-workspace-indicator.previews {
-natural-hpadding: 0 !important;
-minimum-hpadding: 0 !important;
}
.window-list {
spacing: 2px;
@@ -22,19 +16,10 @@
height: 2.45em;
}
.window-button,
.window-button-drag-actor {
.window-button {
padding: 4px, 3px;
}
.window-button-drag-actor {
background-color: #444;
border-radius: 7px;
border-width: 2px;
border-color: #fff;
box-shadow: 0 1px 2px rgba(0,0,0,0.1);
}
.window-button:first-child:ltr {
padding-left: 2px;
}
@@ -47,46 +32,43 @@
spacing: 4px;
}
.window-button > StWidget {
color: #fff;
background-color: transparent;
.window-button > StWidget,
.window-picker-toggle > StWidget {
color: #bbb;
background-color: #1d1d1d;
border-radius: 4px;
padding: 3px 6px 1px;
transition: 100ms ease;
}
.window-button > StWidget,
.window-list .placeholder {
.window-button > StWidget {
-st-natural-width: 18.75em;
max-width: 18.75em;
}
.window-list .placeholder {
border: 1px solid rgba(255,255,255,0.4);
border-radius: 7px;
margin: 4px;
}
.window-button:hover > StWidget {
.window-button:hover > StWidget,
.window-picker-toggle:hover > StWidget {
color: #fff;
background-color: #303030;
}
.window-button:active > StWidget,
.window-button:focus > StWidget {
background-color: st-lighten(#303030, 5%);
color: #fff;
background-color: #3f3f3f;
}
.window-button.focused > StWidget {
background-color: #5b5b5b;
.window-button.focused > StWidget,
.window-picker-toggle:checked > StWidget {
color: #fff;
background-color: #3f3f3f;
}
.window-button.focused:hover > StWidget {
background-color: st-lighten(#5b5b5b, 5%);
}
.window-button.focused:active > StWidget {
background-color: st-lighten(#5b5b5b, 10%);
}
.window-button.focused:active > StWidget,
.window-picker-toggle:checked:active > StWidget {
color: #fff;
background-color: #3f3f3f;
}
.window-button.minimized > StWidget {
color: #666;
@@ -103,17 +85,36 @@
height: 24px;
}
.window-button-abstract-label {
background-color: #888;
border-radius: 99px;
margin: 6px;
.window-list-workspace-indicator .status-label-bin {
background-color: rgba(200, 200, 200, 0.3);
padding: 5px;
margin: 3px;
}
.window-button-attention-indicator {
background-color: -st-accent-color;
height: 2px;
.window-list-workspace-indicator .workspaces-box {
spacing: 3px;
padding: 5px;
}
.window-button.minimized .window-button-attention-indicator {
background-color: st-transparentize(-st-accent-color, 0.4);
.window-list-workspace-indicator .workspace {
width: 52px;
border-radius: 4px;
background-color: #1e1e1e;
}
.window-list-workspace-indicator .workspace.active {
background-color: #3f3f3f;
}
.window-list-window-preview {
background-color: #bebebe;
border-radius: 1px;
}
.window-list-window-preview.active {
background-color: #d4d4d4;
}
.notification {
font-weight: normal;
}

View File

@@ -6,7 +6,6 @@
*/
@import url("stylesheet-dark.css");
@import url("stylesheet-workspace-switcher-light.css");
#panel.bottom-panel {
border-top-width: 1px;
@@ -14,53 +13,62 @@
height: 2.5em;
}
.bottom-panel .window-button > StWidget {
.bottom-panel .window-button > StWidget,
.bottom-panel .window-picker-toggle > StWidget {
color: #2e3436;
background-color: #eee;
border-radius: 3px;
padding: 3px 6px 1px;
box-shadow: none;
text-shadow: none;
border: 1px solid rgba(0,0,0,0.2);
}
.window-button > StWidget {
color: #000;
}
.window-button:hover > StWidget {
background-color: st-darken(#eee,5%);
}
.window-button:active > StWidget,
.window-button:focus > StWidget {
background-color: st-darken(#eee, 10%);
}
.window-button.focused > StWidget {
background-color: st-darken(#eee,15%);
}
.window-button.focused:hover > StWidget {
background-color: st-darken(#eee, 20%);
.bottom-panel .window-button > StWidget {
-st-natural-width: 18.7em;
max-width: 18.75em;
}
.window-button.focused:active > StWidget {
background-color: st-darken(#eee, 25%);
.bottom-panel .window-button:hover > StWidget,
.bottom-panel .window-picker-toggle:hover > StWidget {
background-color: #f9f9f9;
}
.window-button.minimized > StWidget {
color: #aaa;
background-color: #f9f9f9;
.bottom-panel .window-button:active > StWidget,
.bottom-panel .window-button:focus > StWidget {
box-shadow: inset 0 1px 3px rgba(0,0,0,0.1);
}
.bottom-panel .window-button.focused > StWidget,
.bottom-panel .window-picker-toggle:checked > StWidget {
background-color: #ccc;
box-shadow: inset 0 1px 3px rgba(0,0,0,0.1);
}
.bottom-panel .window-button.focused:hover > StWidget {
background-color: #e9e9e9;
}
.bottom-panel .window-button.minimized > StWidget {
color: #888;
box-shadow: none;
}
/* workspace switcher */
.window-list-workspace-indicator .workspace {
border: 2px solid #f6f5f4;
background-color: #ccc;
}
.window-button.minimized:active > StWidget {
color: #aaa;
background-color: #f9f9f9;
.window-list-workspace-indicator .workspace.active {
border-color: #888;
}
.window-button-drag-actor {
background-color: #ddd;
border-color: #888;
.window-list-window-preview {
background-color: #ededed;
border: 1px solid #ccc;
}
.window-list .placeholder {
border-color: rgba(0,0,0,0.5);
.window-list-window-preview.active {
background-color: #f6f5f4;
}

View File

@@ -0,0 +1,342 @@
// SPDX-FileCopyrightText: 2019 Florian Müllner <fmuellner@gnome.org>
// SPDX-FileCopyrightText: 2019 Marco Trevisan (Treviño) <mail@3v1n0.net>
//
// SPDX-License-Identifier: GPL-2.0-or-later
import Clutter from 'gi://Clutter';
import GObject from 'gi://GObject';
import Shell from 'gi://Shell';
import St from 'gi://St';
import {Extension, InjectionManager} from 'resource:///org/gnome/shell/extensions/extension.js';
import * as Layout from 'resource:///org/gnome/shell/ui/layout.js';
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
import {WorkspacesDisplay} from 'resource:///org/gnome/shell/ui/workspacesView.js';
import * as Workspace from 'resource:///org/gnome/shell/ui/workspace.js';
import {VIGNETTE_BRIGHTNESS} from 'resource:///org/gnome/shell/ui/lightbox.js';
import {
SIDE_CONTROLS_ANIMATION_TIME,
OverviewAdjustment,
ControlsState
} from 'resource:///org/gnome/shell/ui/overviewControls.js';
class MyWorkspacesDisplay extends WorkspacesDisplay {
static {
GObject.registerClass(this);
}
constructor(controls, overviewAdjustment) {
let workspaceManager = global.workspace_manager;
const workspaceAdjustment = new St.Adjustment({
value: workspaceManager.get_active_workspace_index(),
lower: 0,
page_increment: 1,
page_size: 1,
step_increment: 0,
upper: workspaceManager.n_workspaces,
});
super(controls, workspaceAdjustment, overviewAdjustment);
this._windowPicker = controls;
this._workspaceAdjustment = workspaceAdjustment;
this._workspaceAdjustment.actor = this;
workspaceManager.connectObject('notify::n-workspaces',
() => this._updateAdjustment(), this);
this.add_constraint(
new Layout.MonitorConstraint({
primary: true,
work_area: true,
}));
}
prepareToEnterOverview(...args) {
if (!this._scrollEventId) {
this._scrollEventId = this._windowPicker.connect('scroll-event',
this._onScrollEvent.bind(this));
}
super.prepareToEnterOverview(...args);
}
vfunc_hide(...args) {
if (this._scrollEventId > 0)
this._windowPicker.disconnect(this._scrollEventId);
this._scrollEventId = 0;
super.vfunc_hide(...args);
}
_updateAdjustment() {
let workspaceManager = global.workspace_manager;
this._workspaceAdjustment.set({
upper: workspaceManager.n_workspaces,
value: workspaceManager.get_active_workspace_index(),
});
}
}
export class WindowPicker extends Clutter.Actor {
static [GObject.signals] = {
'open-state-changed': {param_types: [GObject.TYPE_BOOLEAN]},
};
static {
GObject.registerClass(this);
}
constructor() {
super({reactive: true});
this._visible = false;
this._modal = false;
this._stageKeyPressId = 0;
this._adjustment = new OverviewAdjustment(this);
this._injectionManager = new InjectionManager();
this.connect('destroy', this._onDestroy.bind(this));
global.bind_property('screen-width',
this, 'width',
GObject.BindingFlags.SYNC_CREATE);
global.bind_property('screen-height',
this, 'height',
GObject.BindingFlags.SYNC_CREATE);
this._workspacesDisplay = new MyWorkspacesDisplay(this, this._adjustment);
this.add_child(this._workspacesDisplay);
Main.uiGroup.insert_child_below(this, global.window_group);
if (!Main.sessionMode.hasOverview) {
this._injectBackgroundShade();
global.display.connectObject('overlay-key', () => {
if (!this._visible)
this.open();
else
this.close();
}, this);
}
}
_injectBackgroundShade() {
const backgroundProto = Workspace.WorkspaceBackground.prototype;
this._injectionManager.overrideMethod(backgroundProto, '_updateBorderRadius',
() => {
return function () {};
});
this._injectionManager.overrideMethod(backgroundProto, 'vfunc_allocate',
() => {
/* eslint-disable no-invalid-this */
return function (box) {
this.set_allocation(box);
const themeNode = this.get_theme_node();
const contentBox = themeNode.get_content_box(box);
this._bin.allocate(contentBox);
const [contentWidth, contentHeight] = contentBox.get_size();
const monitor = Main.layoutManager.monitors[this._monitorIndex];
const xRatio = contentWidth / this._workarea.width;
const yRatio = contentHeight / this._workarea.height;
const right = area => area.x + area.width;
const bottom = area => area.y + area.height;
const offsets = {
left: xRatio * (this._workarea.x - monitor.x),
right: xRatio * (right(monitor) - right(this._workarea)),
top: yRatio * (this._workarea.y - monitor.y),
bottom: yRatio * (bottom(monitor) - bottom(this._workarea)),
};
contentBox.set_origin(-offsets.left, -offsets.top);
contentBox.set_size(
offsets.left + contentWidth + offsets.right,
offsets.top + contentHeight + offsets.bottom);
this._backgroundGroup.allocate(contentBox);
};
/* eslint-enable */
});
this._injectionManager.overrideMethod(backgroundProto, 'vfunc_parent_set',
() => {
/* eslint-disable no-invalid-this */
return function () {
setTimeout(() => {
const parent = this.get_parent();
if (!parent)
return;
parent._overviewAdjustment.connectObject('notify::value', () => {
const {value: progress} = parent._overviewAdjustment;
const brightness = 1 - (1 - VIGNETTE_BRIGHTNESS) * progress;
for (const bg of this._backgroundGroup ?? []) {
bg.content.set({
vignette: true,
brightness,
});
}
}, this);
});
};
/* eslint-enable */
});
}
get visible() {
return this._visible;
}
open() {
if (this._visible)
return;
this._visible = true;
if (!this._syncGrab())
return;
this._fakeOverviewVisible(true);
this._workspacesDisplay.prepareToEnterOverview();
Main.overview._animationInProgress = true;
this._adjustment.value = ControlsState.HIDDEN;
this._adjustment.ease(ControlsState.WINDOW_PICKER, {
duration: SIDE_CONTROLS_ANIMATION_TIME,
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
onComplete: () => (Main.overview._animationInProgress = false),
});
this._stageKeyPressId = global.stage.connect('key-press-event',
(a, event) => {
let sym = event.get_key_symbol();
if (sym === Clutter.KEY_Escape) {
this.close();
return Clutter.EVENT_STOP;
}
return Clutter.EVENT_PROPAGATE;
});
this.emit('open-state-changed', this._visible);
}
close() {
if (!this._visible)
return;
this._visible = false;
if (!this._syncGrab())
return;
this._workspacesDisplay.prepareToLeaveOverview();
Main.overview._animationInProgress = true;
this._adjustment.ease(ControlsState.HIDDEN, {
duration: SIDE_CONTROLS_ANIMATION_TIME,
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
onComplete: () => {
Main.overview._animationInProgress = false;
this._workspacesDisplay.hide();
this._fakeOverviewVisible(false);
},
});
global.stage.disconnect(this._stageKeyPressId);
this._stageKeyPressId = 0;
this.emit('open-state-changed', this._visible);
}
getWorkspacesBoxForState() {
return this.allocation;
}
_fakeOverviewVisible(visible) {
// Fake overview state for WorkspacesDisplay
Main.overview._visible = visible;
// Hide real windows
Main.layoutManager._inOverview = visible;
Main.layoutManager._updateVisibility();
}
_syncGrab() {
if (this._visible) {
if (this._modal)
return true;
const grab = Main.pushModal(global.stage, {
actionMode: Shell.ActionMode.OVERVIEW,
});
if (grab.get_seat_state() !== Clutter.GrabState.NONE) {
this._grab = grab;
this._modal = true;
} else {
Main.popModal(grab);
this.hide();
return false;
}
} else if (this._modal) {
Main.popModal(this._grab);
this._modal = false;
this._grab = null;
}
return true;
}
_onDestroy() {
this._injectionManager.clear();
if (this._stageKeyPressId)
global.stage.disconnect(this._stageKeyPressId);
this._stageKeyPressId = 0;
}
}
export class WindowPickerToggle extends St.Button {
static {
GObject.registerClass(this);
}
constructor() {
let iconBin = new St.Widget({
layout_manager: new Clutter.BinLayout(),
});
iconBin.add_child(new St.Icon({
icon_name: 'focus-windows-symbolic',
icon_size: 16,
x_expand: true,
y_expand: true,
x_align: Clutter.ActorAlign.CENTER,
y_align: Clutter.ActorAlign.CENTER,
}));
super({
style_class: 'window-picker-toggle',
child: iconBin,
visible: !Main.sessionMode.hasOverview,
toggle_mode: true,
});
const {windowPicker} = Extension.lookupByURL(import.meta.url);
this.connect('notify::checked', () => {
if (this.checked)
windowPicker.open();
else
windowPicker.close();
});
windowPicker.connect('open-state-changed', () => {
this.checked = windowPicker.visible;
});
}
}

View File

@@ -0,0 +1,427 @@
// SPDX-FileCopyrightText: 2019 Florian Müllner <fmuellner@gnome.org>
//
// SPDX-License-Identifier: GPL-2.0-or-later
import Clutter from 'gi://Clutter';
import Gio from 'gi://Gio';
import GObject from 'gi://GObject';
import Meta from 'gi://Meta';
import St from 'gi://St';
import {gettext as _} from 'resource:///org/gnome/shell/extensions/extension.js';
import * as DND from 'resource:///org/gnome/shell/ui/dnd.js';
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
import * as PanelMenu from 'resource:///org/gnome/shell/ui/panelMenu.js';
import * as PopupMenu from 'resource:///org/gnome/shell/ui/popupMenu.js';
const TOOLTIP_OFFSET = 6;
const TOOLTIP_ANIMATION_TIME = 150;
const MAX_THUMBNAILS = 6;
class WindowPreview extends St.Button {
static {
GObject.registerClass(this);
}
constructor(window) {
super({
style_class: 'window-list-window-preview',
});
this._delegate = this;
DND.makeDraggable(this, {restoreOnSuccess: true});
this._window = window;
this._window.connectObject(
'size-changed', () => this._checkRelayout(),
'position-changed', () => this._checkRelayout(),
'notify::minimized', this._updateVisible.bind(this),
'notify::window-type', this._updateVisible.bind(this),
this);
this._updateVisible();
global.display.connectObject('notify::focus-window',
this._onFocusChanged.bind(this), this);
this._onFocusChanged();
}
// needed for DND
get metaWindow() {
return this._window;
}
_onFocusChanged() {
if (global.display.focus_window === this._window)
this.add_style_class_name('active');
else
this.remove_style_class_name('active');
}
_checkRelayout() {
const monitor = Main.layoutManager.findIndexForActor(this);
const workArea = Main.layoutManager.getWorkAreaForMonitor(monitor);
if (this._window.get_frame_rect().overlap(workArea))
this.queue_relayout();
}
_updateVisible() {
this.visible = this._window.window_type !== Meta.WindowType.DESKTOP &&
this._window.showing_on_its_workspace();
}
}
class WorkspaceLayout extends Clutter.LayoutManager {
static {
GObject.registerClass(this);
}
vfunc_get_preferred_width() {
return [0, 0];
}
vfunc_get_preferred_height() {
return [0, 0];
}
vfunc_allocate(container, box) {
const monitor = Main.layoutManager.findIndexForActor(container);
const workArea = Main.layoutManager.getWorkAreaForMonitor(monitor);
const hscale = box.get_width() / workArea.width;
const vscale = box.get_height() / workArea.height;
for (const child of container) {
const childBox = new Clutter.ActorBox();
const frameRect = child.metaWindow.get_frame_rect();
childBox.set_size(
Math.round(Math.min(frameRect.width, workArea.width) * hscale),
Math.round(Math.min(frameRect.height, workArea.height) * vscale));
childBox.set_origin(
Math.round((frameRect.x - workArea.x) * hscale),
Math.round((frameRect.y - workArea.y) * vscale));
child.allocate(childBox);
}
}
}
class WorkspaceThumbnail extends St.Button {
static {
GObject.registerClass(this);
}
constructor(index) {
super({
style_class: 'workspace',
child: new Clutter.Actor({
layout_manager: new WorkspaceLayout(),
clip_to_allocation: true,
}),
});
this._tooltip = new St.Label({
style_class: 'dash-label',
visible: false,
});
Main.uiGroup.add_child(this._tooltip);
this.connect('destroy', this._onDestroy.bind(this));
this.connect('notify::hover', this._syncTooltip.bind(this));
this._index = index;
this._delegate = this; // needed for DND
this._windowPreviews = new Map();
let workspaceManager = global.workspace_manager;
this._workspace = workspaceManager.get_workspace_by_index(index);
this._workspace.connectObject(
'window-added', (ws, window) => this._addWindow(window),
'window-removed', (ws, window) => this._removeWindow(window),
this);
global.display.connectObject('restacked',
this._onRestacked.bind(this), this);
this._workspace.list_windows().forEach(w => this._addWindow(w));
this._onRestacked();
}
acceptDrop(source) {
if (!source.metaWindow)
return false;
this._moveWindow(source.metaWindow);
return true;
}
handleDragOver(source) {
if (source.metaWindow)
return DND.DragMotionResult.MOVE_DROP;
else
return DND.DragMotionResult.CONTINUE;
}
_addWindow(window) {
if (this._windowPreviews.has(window))
return;
let preview = new WindowPreview(window);
preview.connect('clicked', (a, btn) => this.emit('clicked', btn));
this._windowPreviews.set(window, preview);
this.child.add_child(preview);
}
_removeWindow(window) {
let preview = this._windowPreviews.get(window);
if (!preview)
return;
this._windowPreviews.delete(window);
preview.destroy();
}
_onRestacked() {
let lastPreview = null;
let windows = global.get_window_actors().map(a => a.meta_window);
for (let i = 0; i < windows.length; i++) {
let preview = this._windowPreviews.get(windows[i]);
if (!preview)
continue;
this.child.set_child_above_sibling(preview, lastPreview);
lastPreview = preview;
}
}
_moveWindow(window) {
let monitorIndex = Main.layoutManager.findIndexForActor(this);
if (monitorIndex !== window.get_monitor())
window.move_to_monitor(monitorIndex);
window.change_workspace_by_index(this._index, false);
}
on_clicked() {
let ws = global.workspace_manager.get_workspace_by_index(this._index);
if (ws)
ws.activate(global.get_current_time());
}
_syncTooltip() {
if (this.hover) {
this._tooltip.set({
text: Meta.prefs_get_workspace_name(this._index),
visible: true,
opacity: 0,
});
const [stageX, stageY] = this.get_transformed_position();
const thumbWidth = this.allocation.get_width();
const tipWidth = this._tooltip.width;
const tipHeight = this._tooltip.height;
const xOffset = Math.floor((thumbWidth - tipWidth) / 2);
const monitor = Main.layoutManager.findMonitorForActor(this);
const x = Math.clamp(
stageX + xOffset,
monitor.x,
monitor.x + monitor.width - tipWidth);
const y = stageY - tipHeight - TOOLTIP_OFFSET;
this._tooltip.set_position(x, y);
}
this._tooltip.ease({
opacity: this.hover ? 255 : 0,
duration: TOOLTIP_ANIMATION_TIME,
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
onComplete: () => (this._tooltip.visible = this.hover),
});
}
_onDestroy() {
this._tooltip.destroy();
}
}
export class WorkspaceIndicator extends PanelMenu.Button {
static {
GObject.registerClass(this);
}
constructor() {
super(0.5, _('Workspace Indicator'), true);
this.setMenu(new PopupMenu.PopupMenu(this, 0.0, St.Side.BOTTOM));
this.add_style_class_name('window-list-workspace-indicator');
this.remove_style_class_name('panel-button');
this.menu.actor.remove_style_class_name('panel-menu');
let container = new St.Widget({
layout_manager: new Clutter.BinLayout(),
x_expand: true,
y_expand: true,
});
this.add_actor(container);
let workspaceManager = global.workspace_manager;
this._currentWorkspace = workspaceManager.get_active_workspace_index();
this._statusLabel = new St.Label({text: this._getStatusText()});
this._statusBin = new St.Bin({
style_class: 'status-label-bin',
x_expand: true,
y_expand: true,
child: this._statusLabel,
});
container.add_actor(this._statusBin);
this._thumbnailsBox = new St.BoxLayout({
style_class: 'workspaces-box',
y_expand: true,
reactive: true,
});
this._thumbnailsBox.connect('scroll-event',
this._onScrollEvent.bind(this));
container.add_actor(this._thumbnailsBox);
this._workspacesItems = [];
workspaceManager.connectObject(
'notify::n-workspaces', this._nWorkspacesChanged.bind(this), GObject.ConnectFlags.AFTER,
'workspace-switched', this._onWorkspaceSwitched.bind(this), GObject.ConnectFlags.AFTER,
'notify::layout-rows', this._updateThumbnailVisibility.bind(this),
this);
this.connect('scroll-event', this._onScrollEvent.bind(this));
this._updateMenu();
this._updateThumbnails();
this._updateThumbnailVisibility();
this._settings = new Gio.Settings({schema_id: 'org.gnome.desktop.wm.preferences'});
this._settings.connectObject('changed::workspace-names',
() => this._updateMenuLabels(), this);
}
_updateThumbnailVisibility() {
const {workspaceManager} = global;
const vertical = workspaceManager.layout_rows === -1;
const useMenu =
vertical || workspaceManager.n_workspaces > MAX_THUMBNAILS;
this.reactive = useMenu;
this._statusBin.visible = useMenu;
this._thumbnailsBox.visible = !useMenu;
}
_onWorkspaceSwitched() {
let workspaceManager = global.workspace_manager;
this._currentWorkspace = workspaceManager.get_active_workspace_index();
this._updateMenuOrnament();
this._updateActiveThumbnail();
this._statusLabel.set_text(this._getStatusText());
}
_nWorkspacesChanged() {
this._updateMenu();
this._updateThumbnails();
this._updateThumbnailVisibility();
}
_updateMenuOrnament() {
for (let i = 0; i < this._workspacesItems.length; i++) {
this._workspacesItems[i].setOrnament(i === this._currentWorkspace
? PopupMenu.Ornament.DOT
: PopupMenu.Ornament.NONE);
}
}
_updateActiveThumbnail() {
let thumbs = this._thumbnailsBox.get_children();
for (let i = 0; i < thumbs.length; i++) {
if (i === this._currentWorkspace)
thumbs[i].add_style_class_name('active');
else
thumbs[i].remove_style_class_name('active');
}
}
_getStatusText() {
let workspaceManager = global.workspace_manager;
let current = workspaceManager.get_active_workspace_index();
let total = workspaceManager.n_workspaces;
return '%d / %d'.format(current + 1, total);
}
_updateMenuLabels() {
for (let i = 0; i < this._workspacesItems.length; i++) {
let item = this._workspacesItems[i];
let name = Meta.prefs_get_workspace_name(i);
item.label.text = name;
}
}
_updateMenu() {
let workspaceManager = global.workspace_manager;
this.menu.removeAll();
this._workspacesItems = [];
this._currentWorkspace = workspaceManager.get_active_workspace_index();
for (let i = 0; i < workspaceManager.n_workspaces; i++) {
let name = Meta.prefs_get_workspace_name(i);
let item = new PopupMenu.PopupMenuItem(name);
item.workspaceId = i;
item.connect('activate', () => {
this._activate(item.workspaceId);
});
if (i === this._currentWorkspace)
item.setOrnament(PopupMenu.Ornament.DOT);
this.menu.addMenuItem(item);
this._workspacesItems[i] = item;
}
this._statusLabel.set_text(this._getStatusText());
}
_updateThumbnails() {
let workspaceManager = global.workspace_manager;
this._thumbnailsBox.destroy_all_children();
for (let i = 0; i < workspaceManager.n_workspaces; i++) {
let thumb = new WorkspaceThumbnail(i);
this._thumbnailsBox.add_actor(thumb);
}
this._updateActiveThumbnail();
}
_activate(index) {
let workspaceManager = global.workspace_manager;
if (index >= 0 && index < workspaceManager.n_workspaces) {
let metaWorkspace = workspaceManager.get_workspace_by_index(index);
metaWorkspace.activate(global.get_current_time());
}
}
_onScrollEvent(actor, event) {
let direction = event.get_scroll_direction();
let diff = 0;
if (direction === Clutter.ScrollDirection.DOWN)
diff = 1;
else if (direction === Clutter.ScrollDirection.UP)
diff = -1;
else
return;
let newIndex = this._currentWorkspace + diff;
this._activate(newIndex);
}
}

View File

@@ -6,6 +6,7 @@
//
// SPDX-License-Identifier: GPL-2.0-or-later
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
import Clutter from 'gi://Clutter';
import Graphene from 'gi://Graphene';
import St from 'gi://St';
@@ -85,7 +86,7 @@ export default class Extension {
style_class: 'extension-windowsNavigator-window-tooltip',
visible: false,
});
this.add_child(this._tip);
this.add_actor(this._tip);
this.connect('notify::scale-x', () => {
this._tip.set_scale(1 / this.scale_x, 1 / this.scale_x);
@@ -147,7 +148,7 @@ export default class Extension {
/* eslint-disable no-invalid-this */
return function () {
const {layoutManager} = this._container;
for (const i in layoutManager._windowSlots) {
for (let i in layoutManager._windowSlots) {
if (layoutManager._windowSlots[i])
layoutManager._windowSlots[i][WINDOW_SLOT].hideTooltip();
}
@@ -173,7 +174,7 @@ export default class Extension {
this._injectionManager.overrideMethod(viewProto, '_hideTooltips', () => {
/* eslint-disable no-invalid-this */
return function () {
if (global.stage.get_key_focus() === null)
if (global.stage.get_key_focus() === global.stage)
global.stage.set_key_focus(this._prevFocusActor);
this._pickWindow = false;
for (let i = 0; i < this._workspaces.length; i++)
@@ -210,9 +211,9 @@ export default class Extension {
return function (actor, event) {
const {ControlsState} = OverviewControls;
if (this._overviewAdjustment.value !== ControlsState.WINDOW_PICKER)
return Clutter.EVENT_PROPAGATE;
return false;
const workspaceManager = global.workspace_manager;
let workspaceManager = global.workspace_manager;
if ((event.get_key_symbol() === Clutter.KEY_Alt_L ||
event.get_key_symbol() === Clutter.KEY_Alt_R) &&
@@ -222,7 +223,7 @@ export default class Extension {
this._active = workspaceManager.get_active_workspace_index();
this._pickWindow = true;
this._workspaces[workspaceManager.get_active_workspace_index()].showWindowsTooltips();
return Clutter.EVENT_STOP;
return true;
}
if ((event.get_key_symbol() === Clutter.KEY_Control_L ||
event.get_key_symbol() === Clutter.KEY_Control_R) &&
@@ -232,22 +233,22 @@ export default class Extension {
this._pickWorkspace = true;
for (let i = 0; i < this._workspaces.length; i++)
this._workspaces[i].showTooltip();
return Clutter.EVENT_STOP;
return true;
}
if (global.stage.get_key_focus() !== null)
return Clutter.EVENT_PROPAGATE;
if (global.stage.get_key_focus() !== global.stage)
return false;
// ignore shift presses, they're required to get numerals in azerty keyboards
if ((this._pickWindow || this._pickWorkspace) &&
(event.get_key_symbol() === Clutter.KEY_Shift_L ||
event.get_key_symbol() === Clutter.KEY_Shift_R))
return Clutter.EVENT_STOP;
return true;
if (this._pickWindow) {
if (this._active !== workspaceManager.get_active_workspace_index()) {
this._hideTooltips();
return Clutter.EVENT_PROPAGATE;
return false;
}
let c = event.get_key_symbol() - Clutter.KEY_KP_0;
@@ -256,17 +257,17 @@ export default class Extension {
if (c > 9 || c <= 0) {
this._hideTooltips();
log(c);
return Clutter.EVENT_PROPAGATE;
return false;
}
}
const win = this._workspaces[this._active].getWindowWithTooltip(c);
let win = this._workspaces[this._active].getWindowWithTooltip(c);
this._hideTooltips();
if (win)
Main.activateWindow(win, global.get_current_time());
return Clutter.EVENT_STOP;
return true;
}
if (this._pickWorkspace) {
let c = event.get_key_symbol() - Clutter.KEY_KP_0;
@@ -274,18 +275,18 @@ export default class Extension {
c = event.get_key_symbol() - Clutter.KEY_0;
if (c > 9 || c <= 0) {
this._hideWorkspacesTooltips();
return Clutter.EVENT_PROPAGATE;
return false;
}
}
const workspace = this._workspaces[c - 1];
let workspace = this._workspaces[c - 1];
if (workspace !== undefined)
workspace.metaWorkspace.activate(global.get_current_time());
this._hideWorkspacesTooltips();
return Clutter.EVENT_STOP;
return true;
}
return Clutter.EVENT_PROPAGATE;
return false;
};
/* eslint-enable */
});

View File

@@ -5,7 +5,7 @@
"settings-schema": "@gschemaname@",
"gettext-domain": "@gettext_domain@",
"original-author": "zaspire@rambler.ru",
"name": "Window Navigator",
"name": "windowNavigator",
"description": "Allow keyboard selection of windows and workspaces in overlay mode. <Ctrl>number selects a workspace, and <Alt>number selects a window.",
"url": "@url@"
}

View File

@@ -4,17 +4,440 @@
//
// SPDX-License-Identifier: GPL-2.0-or-later
import {Extension} from 'resource:///org/gnome/shell/extensions/extension.js';
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
import Clutter from 'gi://Clutter';
import Gio from 'gi://Gio';
import GObject from 'gi://GObject';
import Meta from 'gi://Meta';
import St from 'gi://St';
import {Extension, gettext as _} from 'resource:///org/gnome/shell/extensions/extension.js';
import * as DND from 'resource:///org/gnome/shell/ui/dnd.js';
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
import * as PanelMenu from 'resource:///org/gnome/shell/ui/panelMenu.js';
import * as PopupMenu from 'resource:///org/gnome/shell/ui/popupMenu.js';
import {WorkspaceIndicator} from './workspaceIndicator.js';
const WORKSPACE_SCHEMA = 'org.gnome.desktop.wm.preferences';
const WORKSPACE_KEY = 'workspace-names';
const TOOLTIP_OFFSET = 6;
const TOOLTIP_ANIMATION_TIME = 150;
const MAX_THUMBNAILS = 6;
class WindowPreview extends St.Button {
static {
GObject.registerClass(this);
}
constructor(window) {
super({
style_class: 'workspace-indicator-window-preview',
});
this._delegate = this;
DND.makeDraggable(this, {restoreOnSuccess: true});
this._window = window;
this._window.connectObject(
'size-changed', () => this._checkRelayout(),
'position-changed', () => this._checkRelayout(),
'notify::minimized', this._updateVisible.bind(this),
'notify::window-type', this._updateVisible.bind(this),
this);
this._updateVisible();
global.display.connectObject('notify::focus-window',
this._onFocusChanged.bind(this), this);
this._onFocusChanged();
}
// needed for DND
get metaWindow() {
return this._window;
}
_onFocusChanged() {
if (global.display.focus_window === this._window)
this.add_style_class_name('active');
else
this.remove_style_class_name('active');
}
_checkRelayout() {
const monitor = Main.layoutManager.findIndexForActor(this);
const workArea = Main.layoutManager.getWorkAreaForMonitor(monitor);
if (this._window.get_frame_rect().overlap(workArea))
this.queue_relayout();
}
_updateVisible() {
this.visible = this._window.window_type !== Meta.WindowType.DESKTOP &&
this._window.showing_on_its_workspace();
}
}
class WorkspaceLayout extends Clutter.LayoutManager {
static {
GObject.registerClass(this);
}
vfunc_get_preferred_width() {
return [0, 0];
}
vfunc_get_preferred_height() {
return [0, 0];
}
vfunc_allocate(container, box) {
const monitor = Main.layoutManager.findIndexForActor(container);
const workArea = Main.layoutManager.getWorkAreaForMonitor(monitor);
const hscale = box.get_width() / workArea.width;
const vscale = box.get_height() / workArea.height;
for (const child of container) {
const childBox = new Clutter.ActorBox();
const frameRect = child.metaWindow.get_frame_rect();
childBox.set_size(
Math.round(Math.min(frameRect.width, workArea.width) * hscale),
Math.round(Math.min(frameRect.height, workArea.height) * vscale));
childBox.set_origin(
Math.round((frameRect.x - workArea.x) * hscale),
Math.round((frameRect.y - workArea.y) * vscale));
child.allocate(childBox);
}
}
}
class WorkspaceThumbnail extends St.Button {
static {
GObject.registerClass(this);
}
constructor(index) {
super({
style_class: 'workspace',
child: new Clutter.Actor({
layout_manager: new WorkspaceLayout(),
clip_to_allocation: true,
}),
});
this._tooltip = new St.Label({
style_class: 'dash-label',
visible: false,
});
Main.uiGroup.add_child(this._tooltip);
this.connect('destroy', this._onDestroy.bind(this));
this.connect('notify::hover', this._syncTooltip.bind(this));
this._index = index;
this._delegate = this; // needed for DND
this._windowPreviews = new Map();
let workspaceManager = global.workspace_manager;
this._workspace = workspaceManager.get_workspace_by_index(index);
this._workspace.connectObject(
'window-added', (ws, window) => this._addWindow(window),
'window-removed', (ws, window) => this._removeWindow(window),
this);
global.display.connectObject('restacked',
this._onRestacked.bind(this), this);
this._workspace.list_windows().forEach(w => this._addWindow(w));
this._onRestacked();
}
acceptDrop(source) {
if (!source.metaWindow)
return false;
this._moveWindow(source.metaWindow);
return true;
}
handleDragOver(source) {
if (source.metaWindow)
return DND.DragMotionResult.MOVE_DROP;
else
return DND.DragMotionResult.CONTINUE;
}
_addWindow(window) {
if (this._windowPreviews.has(window))
return;
let preview = new WindowPreview(window);
preview.connect('clicked', (a, btn) => this.emit('clicked', btn));
this._windowPreviews.set(window, preview);
this.child.add_child(preview);
}
_removeWindow(window) {
let preview = this._windowPreviews.get(window);
if (!preview)
return;
this._windowPreviews.delete(window);
preview.destroy();
}
_onRestacked() {
let lastPreview = null;
let windows = global.get_window_actors().map(a => a.meta_window);
for (let i = 0; i < windows.length; i++) {
let preview = this._windowPreviews.get(windows[i]);
if (!preview)
continue;
this.child.set_child_above_sibling(preview, lastPreview);
lastPreview = preview;
}
}
_moveWindow(window) {
let monitorIndex = Main.layoutManager.findIndexForActor(this);
if (monitorIndex !== window.get_monitor())
window.move_to_monitor(monitorIndex);
window.change_workspace_by_index(this._index, false);
}
on_clicked() {
let ws = global.workspace_manager.get_workspace_by_index(this._index);
if (ws)
ws.activate(global.get_current_time());
}
_syncTooltip() {
if (this.hover) {
this._tooltip.set({
text: Meta.prefs_get_workspace_name(this._index),
visible: true,
opacity: 0,
});
const [stageX, stageY] = this.get_transformed_position();
const thumbWidth = this.allocation.get_width();
const thumbHeight = this.allocation.get_height();
const tipWidth = this._tooltip.width;
const xOffset = Math.floor((thumbWidth - tipWidth) / 2);
const monitor = Main.layoutManager.findMonitorForActor(this);
const x = Math.clamp(
stageX + xOffset,
monitor.x,
monitor.x + monitor.width - tipWidth);
const y = stageY + thumbHeight + TOOLTIP_OFFSET;
this._tooltip.set_position(x, y);
}
this._tooltip.ease({
opacity: this.hover ? 255 : 0,
duration: TOOLTIP_ANIMATION_TIME,
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
onComplete: () => (this._tooltip.visible = this.hover),
});
}
_onDestroy() {
this._tooltip.destroy();
}
}
class WorkspaceIndicator extends PanelMenu.Button {
static {
GObject.registerClass(this);
}
constructor() {
super(0.5, _('Workspace Indicator'));
let container = new St.Widget({
layout_manager: new Clutter.BinLayout(),
x_expand: true,
y_expand: true,
});
this.add_actor(container);
let workspaceManager = global.workspace_manager;
this._currentWorkspace = workspaceManager.get_active_workspace_index();
this._statusLabel = new St.Label({
style_class: 'panel-workspace-indicator',
y_align: Clutter.ActorAlign.CENTER,
text: this._labelText(),
});
container.add_actor(this._statusLabel);
this._thumbnailsBox = new St.BoxLayout({
style_class: 'panel-workspace-indicator-box',
y_expand: true,
reactive: true,
});
container.add_actor(this._thumbnailsBox);
this._workspacesItems = [];
this._workspaceSection = new PopupMenu.PopupMenuSection();
this.menu.addMenuItem(this._workspaceSection);
workspaceManager.connectObject(
'notify::n-workspaces', this._nWorkspacesChanged.bind(this), GObject.ConnectFlags.AFTER,
'workspace-switched', this._onWorkspaceSwitched.bind(this), GObject.ConnectFlags.AFTER,
'notify::layout-rows', this._updateThumbnailVisibility.bind(this),
this);
this.connect('scroll-event', this._onScrollEvent.bind(this));
this._thumbnailsBox.connect('scroll-event', this._onScrollEvent.bind(this));
this._createWorkspacesSection();
this._updateThumbnails();
this._updateThumbnailVisibility();
this._settings = new Gio.Settings({schema_id: WORKSPACE_SCHEMA});
this._settings.connectObject(`changed::${WORKSPACE_KEY}`,
this._updateMenuLabels.bind(this), this);
}
_onDestroy() {
Main.panel.set_offscreen_redirect(Clutter.OffscreenRedirect.ALWAYS);
super._onDestroy();
}
_updateThumbnailVisibility() {
const {workspaceManager} = global;
const vertical = workspaceManager.layout_rows === -1;
const useMenu =
vertical || workspaceManager.n_workspaces > MAX_THUMBNAILS;
this.reactive = useMenu;
this._statusLabel.visible = useMenu;
this._thumbnailsBox.visible = !useMenu;
// Disable offscreen-redirect when showing the workspace switcher
// so that clip-to-allocation works
Main.panel.set_offscreen_redirect(useMenu
? Clutter.OffscreenRedirect.ALWAYS
: Clutter.OffscreenRedirect.AUTOMATIC_FOR_OPACITY);
}
_onWorkspaceSwitched() {
this._currentWorkspace = global.workspace_manager.get_active_workspace_index();
this._updateMenuOrnament();
this._updateActiveThumbnail();
this._statusLabel.set_text(this._labelText());
}
_nWorkspacesChanged() {
this._createWorkspacesSection();
this._updateThumbnails();
this._updateThumbnailVisibility();
}
_updateMenuOrnament() {
for (let i = 0; i < this._workspacesItems.length; i++) {
this._workspacesItems[i].setOrnament(i === this._currentWorkspace
? PopupMenu.Ornament.DOT
: PopupMenu.Ornament.NONE);
}
}
_updateActiveThumbnail() {
let thumbs = this._thumbnailsBox.get_children();
for (let i = 0; i < thumbs.length; i++) {
if (i === this._currentWorkspace)
thumbs[i].add_style_class_name('active');
else
thumbs[i].remove_style_class_name('active');
}
}
_labelText(workspaceIndex) {
if (workspaceIndex === undefined) {
workspaceIndex = this._currentWorkspace;
return (workspaceIndex + 1).toString();
}
return Meta.prefs_get_workspace_name(workspaceIndex);
}
_updateMenuLabels() {
for (let i = 0; i < this._workspacesItems.length; i++)
this._workspacesItems[i].label.text = this._labelText(i);
}
_createWorkspacesSection() {
let workspaceManager = global.workspace_manager;
this._workspaceSection.removeAll();
this._workspacesItems = [];
this._currentWorkspace = workspaceManager.get_active_workspace_index();
let i = 0;
for (; i < workspaceManager.n_workspaces; i++) {
this._workspacesItems[i] = new PopupMenu.PopupMenuItem(this._labelText(i));
this._workspaceSection.addMenuItem(this._workspacesItems[i]);
this._workspacesItems[i].workspaceId = i;
this._workspacesItems[i].label_actor = this._statusLabel;
this._workspacesItems[i].connect('activate', (actor, _event) => {
this._activate(actor.workspaceId);
});
if (i === this._currentWorkspace)
this._workspacesItems[i].setOrnament(PopupMenu.Ornament.DOT);
}
this._statusLabel.set_text(this._labelText());
}
_updateThumbnails() {
let workspaceManager = global.workspace_manager;
this._thumbnailsBox.destroy_all_children();
for (let i = 0; i < workspaceManager.n_workspaces; i++) {
let thumb = new WorkspaceThumbnail(i);
this._thumbnailsBox.add_actor(thumb);
}
this._updateActiveThumbnail();
}
_activate(index) {
let workspaceManager = global.workspace_manager;
if (index >= 0 && index < workspaceManager.n_workspaces) {
let metaWorkspace = workspaceManager.get_workspace_by_index(index);
metaWorkspace.activate(global.get_current_time());
}
}
_onScrollEvent(actor, event) {
let direction = event.get_scroll_direction();
let diff = 0;
if (direction === Clutter.ScrollDirection.DOWN)
diff = 1;
else if (direction === Clutter.ScrollDirection.UP)
diff = -1;
else
return;
let newIndex = global.workspace_manager.get_active_workspace_index() + diff;
this._activate(newIndex);
}
}
export default class WorkspaceIndicatorExtension extends Extension {
enable() {
this._indicator = new WorkspaceIndicator({
settings: this.getSettings(),
});
this._indicator = new WorkspaceIndicator();
Main.panel.addToStatusArea('workspace-indicator', this._indicator);
}

View File

@@ -7,10 +7,6 @@ extension_data += configure_file(
output: metadata_name,
configuration: metadata_conf
)
extension_data += files(
'stylesheet-dark.css',
'stylesheet-light.css',
)
extension_schemas += files('schemas/' + metadata_conf.get('gschemaname') + '.gschema.xml')
extension_data += files('stylesheet.css')
extension_sources += files('prefs.js', 'workspaceIndicator.js', 'workspacePrefs.js')
extension_sources += files('prefs.js')

View File

@@ -3,12 +3,268 @@
//
// SPDX-License-Identifier: GPL-2.0-or-later
import {ExtensionPreferences} from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js';
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
import Adw from 'gi://Adw';
import Gio from 'gi://Gio';
import GLib from 'gi://GLib';
import GObject from 'gi://GObject';
import Gtk from 'gi://Gtk';
import Pango from 'gi://Pango';
import {WorkspacesPage} from './workspacePrefs.js';
import {ExtensionPreferences, gettext as _} from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js';
const N_ = e => e;
const WORKSPACE_SCHEMA = 'org.gnome.desktop.wm.preferences';
const WORKSPACE_KEY = 'workspace-names';
class NewItem extends GObject.Object {}
GObject.registerClass(NewItem);
class NewItemModel extends GObject.Object {
static [GObject.interfaces] = [Gio.ListModel];
static {
GObject.registerClass(this);
}
#item = new NewItem();
vfunc_get_item_type() {
return NewItem;
}
vfunc_get_n_items() {
return 1;
}
vfunc_get_item(_pos) {
return this.#item;
}
}
class WorkspacesList extends GObject.Object {
static [GObject.interfaces] = [Gio.ListModel];
static {
GObject.registerClass(this);
}
#settings = new Gio.Settings({schema_id: WORKSPACE_SCHEMA});
#names = this.#settings.get_strv(WORKSPACE_KEY);
#items = Gtk.StringList.new(this.#names);
#changedId;
constructor() {
super();
this.#changedId =
this.#settings.connect(`changed::${WORKSPACE_KEY}`, () => {
const removed = this.#names.length;
this.#names = this.#settings.get_strv(WORKSPACE_KEY);
this.#items.splice(0, removed, this.#names);
this.items_changed(0, removed, this.#names.length);
});
}
append() {
const name = _('Workspace %d').format(this.#names.length + 1);
this.#names.push(name);
this.#settings.block_signal_handler(this.#changedId);
this.#settings.set_strv(WORKSPACE_KEY, this.#names);
this.#settings.unblock_signal_handler(this.#changedId);
const pos = this.#items.get_n_items();
this.#items.append(name);
this.items_changed(pos, 0, 1);
}
remove(name) {
const pos = this.#names.indexOf(name);
if (pos < 0)
return;
this.#names.splice(pos, 1);
this.#settings.block_signal_handler(this.#changedId);
this.#settings.set_strv(WORKSPACE_KEY, this.#names);
this.#settings.unblock_signal_handler(this.#changedId);
this.#items.remove(pos);
this.items_changed(pos, 1, 0);
}
rename(oldName, newName) {
const pos = this.#names.indexOf(oldName);
if (pos < 0)
return;
this.#names.splice(pos, 1, newName);
this.#items.splice(pos, 1, [newName]);
this.#settings.block_signal_handler(this.#changedId);
this.#settings.set_strv(WORKSPACE_KEY, this.#names);
this.#settings.unblock_signal_handler(this.#changedId);
}
vfunc_get_item_type() {
return Gtk.StringObject;
}
vfunc_get_n_items() {
return this.#items.get_n_items();
}
vfunc_get_item(pos) {
return this.#items.get_item(pos);
}
}
class WorkspaceSettingsWidget extends Adw.PreferencesGroup {
static {
GObject.registerClass(this);
this.install_action('workspaces.add', null,
self => self._workspaces.append());
this.install_action('workspaces.remove', 's',
(self, name, param) => self._workspaces.remove(param.unpack()));
this.install_action('workspaces.rename', '(ss)',
(self, name, param) => self._workspaces.rename(...param.deepUnpack()));
}
constructor() {
super({
title: _('Workspace Names'),
});
this._workspaces = new WorkspacesList();
const store = new Gio.ListStore({item_type: Gio.ListModel});
const listModel = new Gtk.FlattenListModel({model: store});
store.append(this._workspaces);
store.append(new NewItemModel());
this._list = new Gtk.ListBox({
selection_mode: Gtk.SelectionMode.NONE,
css_classes: ['boxed-list'],
});
this._list.connect('row-activated', (l, row) => row.edit());
this.add(this._list);
this._list.bind_model(listModel, item => {
return item instanceof NewItem
? new NewWorkspaceRow()
: new WorkspaceRow(item.string);
});
}
}
class WorkspaceRow extends Adw.PreferencesRow {
static {
GObject.registerClass(this);
}
constructor(name) {
super({name});
const box = new Gtk.Box({
spacing: 12,
margin_top: 6,
margin_bottom: 6,
margin_start: 6,
margin_end: 6,
});
const label = new Gtk.Label({
hexpand: true,
xalign: 0,
max_width_chars: 25,
ellipsize: Pango.EllipsizeMode.END,
});
this.bind_property('name', label, 'label',
GObject.BindingFlags.SYNC_CREATE);
box.append(label);
const button = new Gtk.Button({
action_name: 'workspaces.remove',
icon_name: 'edit-delete-symbolic',
has_frame: false,
});
box.append(button);
this.bind_property_full('name',
button, 'action-target',
GObject.BindingFlags.SYNC_CREATE,
(bind, target) => [true, new GLib.Variant('s', target)],
null);
this._entry = new Gtk.Entry({
max_width_chars: 25,
});
const controller = new Gtk.ShortcutController();
controller.add_shortcut(new Gtk.Shortcut({
trigger: Gtk.ShortcutTrigger.parse_string('Escape'),
action: Gtk.CallbackAction.new(() => {
this._stopEdit();
return true;
}),
}));
this._entry.add_controller(controller);
this._stack = new Gtk.Stack();
this._stack.add_named(box, 'display');
this._stack.add_named(this._entry, 'edit');
this.child = this._stack;
this._entry.connect('activate', () => {
this.activate_action('workspaces.rename',
new GLib.Variant('(ss)', [this.name, this._entry.text]));
this.name = this._entry.text;
this._stopEdit();
});
this._entry.connect('notify::has-focus', () => {
if (this._entry.has_focus)
return;
this._stopEdit();
});
}
edit() {
this._entry.text = this.name;
this._entry.grab_focus();
this._stack.visible_child_name = 'edit';
}
_stopEdit() {
this.grab_focus();
this._stack.visible_child_name = 'display';
}
}
class NewWorkspaceRow extends Adw.PreferencesRow {
static {
GObject.registerClass(this);
}
constructor() {
super({
action_name: 'workspaces.add',
child: new Gtk.Image({
icon_name: 'list-add-symbolic',
pixel_size: 16,
margin_top: 12,
margin_bottom: 12,
margin_start: 12,
margin_end: 12,
}),
});
this.update_property(
[Gtk.AccessibleProperty.LABEL], [_('Add Workspace')]);
}
}
export default class WorkspaceIndicatorPrefs extends ExtensionPreferences {
getPreferencesWidget() {
return new WorkspacesPage(this.getSettings());
return new WorkspaceSettingsWidget();
}
}

View File

@@ -1,15 +0,0 @@
<!--
SPDX-FileCopyrightText: 2024 Florian Müllner <fmuellner@gnome.org>
SPDX-License-Identifier: GPL-2.0-or-later
-->
<schemalist gettext-domain="gnome-shell-extensions">
<schema id="org.gnome.shell.extensions.workspace-indicator"
path="/org/gnome/shell/extensions/workspace-indicator/">
<key name="embed-previews" type="b">
<default>true</default>
<summary>Show workspace previews in top bar</summary>
</key>
</schema>
</schemalist>

View File

@@ -1,130 +0,0 @@
/*
* SPDX-FileCopyrightText: 2011 Erick Pérez Castellanos <erick.red@gmail.com>
* SPDX-FileCopyrightText: 2019 Florian Müllner <fmuellner@gnome.org>
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
.workspace-indicator.previews:active {
background-color: none !important;
box-shadow: none !important;
}
.workspace-indicator.name-label {
box-shadow: inset 0 0 0 100px rgba(255, 255, 255, 0.17) !important;
}
.workspace-indicator.name-label:hover,
.workspace-indicator.name-label:focus {
box-shadow: inset 0 0 0 100px rgba(255, 255, 255, 0.28) !important;
}
.workspace-indicator.name-label:active {
box-shadow: inset 0 0 0 100px rgba(255, 255, 255, 0.32) !important;
}
.workspace-indicator.name-label:active:hover {
box-shadow: inset 0 0 0 100px rgba(255, 255, 255, 0.36) !important;
}
.workspace-indicator .status-label {
width: 8em;
padding: 0 8px;
}
.workspace-indicator .status-label:ltr { padding-right: 4px; }
.workspace-indicator .status-label:rtl { padding-left: 4px; }
.workspace-indicator .system-status-icon {
padding: 0 !important;
margin: 0 !important;
}
.workspace-indicator .workspaces-view.hfade {
-st-hfade-offset: 20px;
}
.workspace-indicator .workspaces-box {
spacing: 3px;
}
.workspace-indicator .workspace-box {
padding-top: 5px;
padding-bottom: 5px;
}
.workspace-indicator StButton:first-child:ltr > .workspace-box,
.workspace-indicator StButton:last-child:rtl > .workspace-box {
padding-left: 5px;
}
.workspace-indicator StButton:last-child:ltr > .workspace-box,
.workspace-indicator StButton:first-child:rtl > .workspace-box {
padding-right: 5px;
}
.workspace-indicator .workspace {
border: 1px solid transparent;
border-radius: 4px;
background-color: #3f3f3f;
}
.workspace-indicator .workspace {
width: 52px;
}
.workspace-indicator .workspace.active {
border-color: #fff;
}
.workspace-indicator-window-preview {
background-color: #bebebe;
border: 1px solid #828282;
border-radius: 1px;
}
.workspace-indicator-window-preview.active {
background-color: #d4d4d4;
}
.workspace-indicator-menu {
min-width: 17em;
}
.workspace-indicator-menu .editable-menu-item.popup-menu-item {
padding: 3px 12px;
}
.workspace-indicator-menu .editable-menu-item .icon-button {
padding: 6px;
}
.workspace-indicator-menu .editable-menu-item .icon-button.flat {
background-color: transparent;
}
.workspace-indicator-menu .editable-menu-item .icon-button.flat:hover {
background-color: st-transparentize(white, 90%);
}
.workspace-indicator-menu .editable-menu-item .icon-button.flat:active {
background-color: st-transparentize(white, 85%);
}
.workspace-indicator-menu .editable-menu-item .icon-button.flat:checked {
color: -st-accent-fg-color;
background-color: -st-accent-color;
}
.workspace-indicator-menu .editable-menu-item .icon-button.flat:checked:hover {
background-color: st-lighten(-st-accent-color, 10%);
}
.workspace-indicator-menu .editable-menu-item .icon-button.flat:checked:active {
background-color: st-lighten(-st-accent-color, 15%);
}
.workspace-indicator-menu .editable-menu-item StLabel {
padding: 0 11px;
width: 6.5em;
}
.workspace-indicator-menu .editable-menu-item StEntry {
padding: 9px 9px;
width: 6.5em;
}

View File

@@ -1,55 +0,0 @@
/*
* SPDX-FileCopyrightText: 2013 Florian Müllner <fmuellner@gnome.org>
* SPDX-FileCopyrightText: 2015 Jakub Steiner <jimmac@gmail.com>
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
@import url("stylesheet-dark.css");
.workspace-indicator.name-label {
box-shadow: inset 0 0 0 100px rgba(34, 34, 38, 0.17) !important;
}
.workspace-indicator.name-label:hover,
.workspace-indicator.name-label:focus {
box-shadow: inset 0 0 0 100px rgba(34, 34, 38, 0.28) !important;
}
.workspace-indicator.name-label:active {
box-shadow: inset 0 0 0 100px rgba(34, 34, 38, 0.32) !important;
}
.workspace-indicator.name-label:active:hover {
box-shadow: inset 0 0 0 100px rgba(34, 34, 38, 0.36) !important;
}
.workspace-indicator .workspace {
background-color: #ccc;
}
.workspace-indicator .workspace.active {
border-color: #888;
}
.workspace-indicator-window-preview {
background-color: #ededed;
border: 1px solid #ccc;
}
.workspace-indicator-window-preview.active {
background-color: #f6f5f4;
}
.workspace-indicator-menu .editable-menu-item .icon-button.flat:hover {
background-color: st-transparentize(black, 90%);
}
.workspace-indicator-menu .editable-menu-item .icon-button.flat:active {
background-color: st-transparentize(black, 85%);
}
.workspace-indicator-menu .editable-menu-item .icon-button.flat:checked:hover {
background-color: st-darken(-st-accent-color, 10%);
}
.workspace-indicator-menu .editable-menu-item .icon-button.flat:checked:active {
background-color: st-darken(-st-accent-color, 15%);
}

View File

@@ -0,0 +1,35 @@
/*
* SPDX-FileCopyrightText: 2011 Erick Pérez Castellanos <erick.red@gmail.com>
* SPDX-FileCopyrightText: 2019 Florian Müllner <fmuellner@gnome.org>
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
.panel-workspace-indicator {
padding: 0 8px;
}
.panel-workspace-indicator-box {
padding: 4px 0;
spacing: 4px;
}
.panel-workspace-indicator-box .workspace {
width: 40px;
border: 2px solid #000;
border-radius: 2px;
background-color: #595959;
}
.panel-workspace-indicator-box .workspace.active {
border-color: #fff;
}
.workspace-indicator-window-preview {
background-color: #bebebe;
border: 1px solid #828282;
}
.workspace-indicator-window-preview.active {
background-color: #d4d4d4;
}

View File

@@ -1,701 +0,0 @@
// SPDX-FileCopyrightText: 2011 Erick Pérez Castellanos <erick.red@gmail.com>
// SPDX-FileCopyrightText: 2011 Giovanni Campagna <gcampagna@src.gnome.org>
// SPDX-FileCopyrightText: 2017 Florian Müllner <fmuellner@gnome.org>
//
// SPDX-License-Identifier: GPL-2.0-or-later
import Clutter from 'gi://Clutter';
import Gio from 'gi://Gio';
import GObject from 'gi://GObject';
import Meta from 'gi://Meta';
import Shell from 'gi://Shell';
import St from 'gi://St';
import {Extension, gettext as _} from 'resource:///org/gnome/shell/extensions/extension.js';
import * as DND from 'resource:///org/gnome/shell/ui/dnd.js';
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
import * as PanelMenu from 'resource:///org/gnome/shell/ui/panelMenu.js';
import * as PopupMenu from 'resource:///org/gnome/shell/ui/popupMenu.js';
const TOOLTIP_OFFSET = 6;
const TOOLTIP_ANIMATION_TIME = 150;
const SCROLL_TIME = 100;
let baseStyleClassName = '';
class WindowPreview extends St.Button {
static {
GObject.registerClass(this);
}
constructor(window) {
super({
style_class: `${baseStyleClassName}-window-preview`,
});
this._delegate = this;
DND.makeDraggable(this, {restoreOnSuccess: true});
this._window = window;
this._window.connectObject(
'size-changed', () => this._checkRelayout(),
'position-changed', () => this._checkRelayout(),
'notify::minimized', this._updateVisible.bind(this),
'notify::skip-taskbar', this._updateVisible.bind(this),
this);
this._updateVisible();
global.display.connectObject('notify::focus-window',
this._onFocusChanged.bind(this), this);
this._onFocusChanged();
}
// needed for DND
get metaWindow() {
return this._window;
}
_onFocusChanged() {
if (global.display.focus_window === this._window)
this.add_style_class_name('active');
else
this.remove_style_class_name('active');
}
_checkRelayout() {
const monitor = Main.layoutManager.findIndexForActor(this);
const workArea = Main.layoutManager.getWorkAreaForMonitor(monitor);
if (this._window.get_frame_rect().overlap(workArea))
this.queue_relayout();
}
_updateVisible() {
this.visible = !this._window.skip_taskbar &&
this._window.showing_on_its_workspace();
}
}
class WorkspaceLayout extends Clutter.LayoutManager {
static {
GObject.registerClass(this);
}
vfunc_get_preferred_width() {
return [0, 0];
}
vfunc_get_preferred_height() {
return [0, 0];
}
vfunc_allocate(container, box) {
const monitor = Main.layoutManager.findIndexForActor(container);
const workArea = Main.layoutManager.getWorkAreaForMonitor(monitor);
const hscale = box.get_width() / workArea.width;
const vscale = box.get_height() / workArea.height;
for (const child of container) {
const childBox = new Clutter.ActorBox();
const frameRect = child.metaWindow.get_frame_rect();
childBox.set_size(
Math.round(Math.min(frameRect.width, workArea.width) * hscale),
Math.round(Math.min(frameRect.height, workArea.height) * vscale));
childBox.set_origin(
Math.round((frameRect.x - workArea.x) * hscale),
Math.round((frameRect.y - workArea.y) * vscale));
child.allocate(childBox);
}
}
}
class WorkspaceThumbnail extends St.Button {
static [GObject.properties] = {
'active': GObject.ParamSpec.boolean(
'active', null, null,
GObject.ParamFlags.READWRITE,
false),
};
static {
GObject.registerClass(this);
}
constructor(index) {
super();
const box = new St.BoxLayout({
style_class: 'workspace-box',
y_expand: true,
orientation: Clutter.Orientation.VERTICAL,
});
this.set_child(box);
this._preview = new St.Bin({
style_class: 'workspace',
child: new Clutter.Actor({
layout_manager: new WorkspaceLayout(),
clip_to_allocation: true,
x_expand: true,
y_expand: true,
}),
y_expand: true,
});
box.add_child(this._preview);
this._tooltip = new St.Label({
style_class: 'dash-label',
visible: false,
});
Main.uiGroup.add_child(this._tooltip);
this.connect('destroy', this._onDestroy.bind(this));
this.connect('notify::hover', this._syncTooltip.bind(this));
this._index = index;
this._delegate = this; // needed for DND
this._windowPreviews = new Map();
const workspaceManager = global.workspace_manager;
this._workspace = workspaceManager.get_workspace_by_index(index);
this._workspace.bind_property('active',
this, 'active',
GObject.BindingFlags.SYNC_CREATE);
this._workspace.connectObject(
'window-added', (ws, window) => this._addWindow(window),
'window-removed', (ws, window) => this._removeWindow(window),
this);
global.display.connectObject('restacked',
this._onRestacked.bind(this), this);
this._workspace.list_windows().forEach(w => this._addWindow(w));
this._onRestacked();
}
get active() {
return this._preview.has_style_class_name('active');
}
set active(active) {
if (active)
this._preview.add_style_class_name('active');
else
this._preview.remove_style_class_name('active');
this.notify('active');
}
acceptDrop(source) {
if (!source.metaWindow)
return false;
this._moveWindow(source.metaWindow);
return true;
}
handleDragOver(source) {
if (source.metaWindow)
return DND.DragMotionResult.MOVE_DROP;
else
return DND.DragMotionResult.CONTINUE;
}
_addWindow(window) {
if (this._windowPreviews.has(window))
return;
const preview = new WindowPreview(window);
preview.connect('clicked', (a, btn) => this.emit('clicked', btn));
this._windowPreviews.set(window, preview);
this._preview.child.add_child(preview);
}
_removeWindow(window) {
const preview = this._windowPreviews.get(window);
if (!preview)
return;
this._windowPreviews.delete(window);
preview.destroy();
}
_onRestacked() {
let lastPreview = null;
const windows = global.get_window_actors().map(a => a.meta_window);
for (let i = 0; i < windows.length; i++) {
const preview = this._windowPreviews.get(windows[i]);
if (!preview)
continue;
this._preview.child.set_child_above_sibling(preview, lastPreview);
lastPreview = preview;
}
}
_moveWindow(window) {
const monitorIndex = Main.layoutManager.findIndexForActor(this);
if (monitorIndex !== window.get_monitor())
window.move_to_monitor(monitorIndex);
window.change_workspace_by_index(this._index, false);
}
on_clicked() {
const ws = global.workspace_manager.get_workspace_by_index(this._index);
if (ws)
ws.activate(global.get_current_time());
}
_syncTooltip() {
if (this.hover) {
this._tooltip.set({
text: Meta.prefs_get_workspace_name(this._index),
visible: true,
opacity: 0,
});
const [stageX, stageY] = this.get_transformed_position();
const [thumbWidth, thumbHeight] = this.allocation.get_size();
const [tipWidth, tipHeight] = this._tooltip.get_size();
const xOffset = Math.floor((thumbWidth - tipWidth) / 2);
const monitor = Main.layoutManager.findMonitorForActor(this);
const x = Math.clamp(
stageX + xOffset,
monitor.x,
monitor.x + monitor.width - tipWidth);
const y = stageY - monitor.y > thumbHeight + TOOLTIP_OFFSET
? stageY - tipHeight - TOOLTIP_OFFSET // show above
: stageY + thumbHeight + TOOLTIP_OFFSET; // show below
this._tooltip.set_position(x, y);
}
this._tooltip.ease({
opacity: this.hover ? 255 : 0,
duration: TOOLTIP_ANIMATION_TIME,
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
onComplete: () => (this._tooltip.visible = this.hover),
});
}
_onDestroy() {
this._tooltip.destroy();
}
}
class WorkspacePreviews extends Clutter.Actor {
static {
GObject.registerClass(this);
}
constructor(params) {
super({
...params,
layout_manager: new Clutter.BinLayout(),
reactive: true,
y_expand: true,
});
this.connect('scroll-event',
(a, event) => Main.wm.handleWorkspaceScroll(event));
const {workspaceManager} = global;
workspaceManager.connectObject(
'notify::n-workspaces', () => this._updateThumbnails(), GObject.ConnectFlags.AFTER,
'workspace-switched', () => this._updateScrollPosition(),
this);
this.connect('notify::mapped', () => {
if (this.mapped)
this._updateScrollPosition();
});
this._thumbnailsBox = new St.BoxLayout({
style_class: 'workspaces-box',
y_expand: true,
});
this._scrollView = new St.ScrollView({
style_class: 'workspaces-view hfade',
enable_mouse_scrolling: false,
hscrollbar_policy: St.PolicyType.EXTERNAL,
vscrollbar_policy: St.PolicyType.NEVER,
y_expand: true,
child: this._thumbnailsBox,
});
this.add_child(this._scrollView);
this._updateThumbnails();
}
_updateThumbnails() {
const {nWorkspaces} = global.workspace_manager;
this._thumbnailsBox.destroy_all_children();
for (let i = 0; i < nWorkspaces; i++)
this._thumbnailsBox.add_child(new WorkspaceThumbnail(i));
if (this.mapped)
this._updateScrollPosition();
}
_updateScrollPosition() {
const adjustment = this._scrollView.hadjustment;
const {upper, pageSize} = adjustment;
let {value} = adjustment;
const activeWorkspace =
[...this._thumbnailsBox].find(a => a.active);
if (!activeWorkspace)
return;
let offset = 0;
const hfade = this._scrollView.get_effect('fade');
if (hfade)
offset = hfade.fade_margins.left;
let {x1, x2} = activeWorkspace.get_allocation_box();
let parent = activeWorkspace.get_parent();
while (parent !== this._scrollView) {
if (!parent)
throw new Error('actor not in scroll view');
const box = parent.get_allocation_box();
x1 += box.x1;
x2 += box.x1;
parent = parent.get_parent();
}
if (x1 < value + offset)
value = Math.max(0, x1 - offset);
else if (x2 > value + pageSize - offset)
value = Math.min(upper, x2 + offset - pageSize);
else
return;
adjustment.ease(value, {
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
duration: SCROLL_TIME,
});
}
}
class EditableMenuItem extends PopupMenu.PopupBaseMenuItem {
static [GObject.signals] = {
'edited': {},
};
static {
GObject.registerClass(this);
}
constructor() {
super({
style_class: 'editable-menu-item',
});
this.get_accessible()?.set_description(
_('Press %s to edit').format('e'));
const stack = new Shell.Stack({
x_expand: true,
x_align: Clutter.ActorAlign.START,
});
this.add_child(stack);
this.label = new St.Label({
y_align: Clutter.ActorAlign.CENTER,
});
stack.add_child(this.label);
this.label_actor = this.label;
this._entry = new St.Entry({
opacity: 0,
visible: false,
});
stack.add_child(this._entry);
this.label.bind_property('text',
this._entry, 'text',
GObject.BindingFlags.DEFAULT);
this._entry.clutter_text.connect('activate',
() => this._stopEditing());
this._editButton = new St.Button({
style_class: 'icon-button flat',
icon_name: 'document-edit-symbolic',
button_mask: St.ButtonMask.ONE,
toggle_mode: true,
x_align: Clutter.ActorAlign.END,
y_align: Clutter.ActorAlign.CENTER,
});
this.add_child(this._editButton);
this._editButton.connect('notify::checked', () => {
if (this._editButton.checked) {
this._editButton.icon_name = 'ornament-check-symbolic';
this._startEditing();
} else {
this._editButton.icon_name = 'document-edit-symbolic';
this._stopEditing();
}
});
this.connect('key-release-event', (o, event) => {
if (event.get_key_symbol() !== Clutter.KEY_e)
return Clutter.EVENT_PROPAGATE;
if (this._editButton.checked)
return Clutter.EVENT_PROPAGATE;
this._editButton.checked = true;
return Clutter.EVENT_STOP;
});
global.stage.connectObject('notify::key-focus', () => {
const {keyFocus} = global.stage;
if (!keyFocus || !this.contains(keyFocus))
this._stopEditing();
}, this);
}
_switchActor(from, to) {
to.visible = from.visible = true;
to.ease({
opacity: 255,
duration: 300,
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
});
from.ease({
opacity: 0,
duration: 300,
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
onComplete: () => {
from.visible = false;
},
});
}
_startEditing() {
this._switchActor(this.label, this._entry);
this._entry.clutter_text.set_selection(0, -1);
this._entry.clutter_text.grab_key_focus();
}
_stopEditing() {
if (this.label.text !== this._entry.text) {
this.label.text = this._entry.text;
this.emit('edited');
}
if (this._editButton.checked)
this._editButton.checked = false;
this._switchActor(this._entry, this.label);
this.navigate_focus(this, St.DirectionType.TAB_FORWARD, false);
}
}
class WorkspacesMenu extends PopupMenu.PopupMenu {
constructor(sourceActor) {
super(sourceActor, 0.5, St.Side.TOP);
this.actor.add_style_class_name(`${baseStyleClassName}-menu`);
this._workspacesSection = new PopupMenu.PopupMenuSection();
this.addMenuItem(this._workspacesSection);
this.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
this.addAction(_('Settings'), () => {
const extension = Extension.lookupByURL(import.meta.url);
extension.openPreferences();
});
this._desktopSettings =
new Gio.Settings({schema_id: 'org.gnome.desktop.wm.preferences'});
this._desktopSettings.connectObject('changed::workspace-names', () => {
this._updateWorkspaceLabels();
this.emit('active-name-changed');
}, this);
const {workspaceManager} = global;
workspaceManager.connectObject(
'notify::n-workspaces', () => this._updateWorkspaceItems(),
'workspace-switched', () => this._updateActiveIndicator(),
this.actor);
this._updateWorkspaceItems();
}
get activeName() {
const {workspaceManager} = global;
const active = workspaceManager.get_active_workspace_index();
return Meta.prefs_get_workspace_name(active);
}
_updateWorkspaceItems() {
const {workspaceManager} = global;
const {nWorkspaces} = workspaceManager;
const section = this._workspacesSection.actor;
while (section.get_n_children() < nWorkspaces) {
const item = new EditableMenuItem();
item.connect('activate', (o, event) => {
const index = [...section].indexOf(item);
const workspace = workspaceManager.get_workspace_by_index(index);
workspace?.activate(event.get_time());
});
item.connect('edited', () => {
const nLabels = section.get_n_children();
const oldNames = this._desktopSettings.get_strv('workspace-names');
const newNames = [...section].map(c => c.label.text);
this._desktopSettings.set_strv('workspace-names',
[...newNames, ...oldNames.slice(nLabels)]);
});
this._workspacesSection.addMenuItem(item);
}
[...section].splice(nWorkspaces).forEach(item => item.destroy());
this._updateWorkspaceLabels();
this._updateActiveIndicator();
}
_updateWorkspaceLabels() {
const items = [...this._workspacesSection.actor];
items.forEach(
(item, i) => (item.label.text = Meta.prefs_get_workspace_name(i)));
}
_updateActiveIndicator() {
const {workspaceManager} = global;
const active = workspaceManager.get_active_workspace_index();
const items = [...this._workspacesSection.actor];
items.forEach((item, i) => {
item.setOrnament(i === active
? PopupMenu.Ornament.CHECK
: PopupMenu.Ornament.NONE);
});
this.emit('active-name-changed');
}
}
export class WorkspaceIndicator extends PanelMenu.Button {
static {
GObject.registerClass(this);
}
constructor(params = {}) {
super(0.5, _('Workspace Indicator'), true);
const {
baseStyleClass = 'workspace-indicator',
settings,
} = params;
this._settings = settings;
baseStyleClassName = baseStyleClass;
this.add_style_class_name(baseStyleClassName);
this.setMenu(new WorkspacesMenu(this));
const container = new St.Widget({
layout_manager: new Clutter.BinLayout(),
x_expand: true,
y_expand: true,
});
this.add_child(container);
this._statusBox = new St.BoxLayout();
container.add_child(this._statusBox);
this._statusLabel = new St.Label({
style_class: 'status-label',
x_expand: true,
y_align: Clutter.ActorAlign.CENTER,
text: this.menu.activeName,
});
this._statusBox.add_child(this._statusLabel);
this._statusBox.add_child(new St.Icon({
icon_name: 'pan-down-symbolic',
style_class: 'system-status-icon',
}));
this.menu.connect('active-name-changed',
() => this._statusLabel.set_text(this.menu.activeName));
this._thumbnails = new WorkspacePreviews();
container.add_child(this._thumbnails);
this._thumbnails.connect('button-press-event', (a, event) => {
if (event.get_button() !== Clutter.BUTTON_SECONDARY)
return Clutter.EVENT_PROPAGATE;
this.menu.toggle();
return Clutter.EVENT_STOP;
});
this.connect('scroll-event',
(a, event) => Main.wm.handleWorkspaceScroll(event));
this._inTopBar = false;
this.connect('notify::realized', () => {
if (!this.realized)
return;
this._inTopBar = Main.panel.contains(this);
this._updateTopBarRedirect();
});
this._settings.connect('changed::embed-previews',
() => this._updateThumbnailVisibility());
this._updateThumbnailVisibility();
}
_onDestroy() {
if (this._inTopBar)
Main.panel.set_offscreen_redirect(Clutter.OffscreenRedirect.ALWAYS);
this._inTopBar = false;
super._onDestroy();
}
_updateThumbnailVisibility() {
const usePreviews = this._settings.get_boolean('embed-previews');
this.reactive = !usePreviews;
this._thumbnails.visible = usePreviews;
this._statusBox.visible = !usePreviews;
if (usePreviews) {
this.add_style_class_name('previews');
this.remove_style_class_name('name-label');
} else {
this.remove_style_class_name('previews');
this.add_style_class_name('name-label');
}
this._updateTopBarRedirect();
}
_updateTopBarRedirect() {
if (!this._inTopBar)
return;
// Disable offscreen-redirect when showing the workspace switcher
// so that clip-to-allocation works
Main.panel.set_offscreen_redirect(this._thumbnails.visible
? Clutter.OffscreenRedirect.ALWAYS
: Clutter.OffscreenRedirect.AUTOMATIC_FOR_OPACITY);
}
}

View File

@@ -1,135 +0,0 @@
// SPDX-FileCopyrightText: 2012 Giovanni Campagna <gcampagna@src.gnome.org>
// SPDX-FileCopyrightText: 2014 Florian Müllner <fmuellner@gnome.org>
//
// SPDX-License-Identifier: GPL-2.0-or-later
import Adw from 'gi://Adw';
import Gio from 'gi://Gio';
import GObject from 'gi://GObject';
import Gtk from 'gi://Gtk';
import {gettext as _} from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js';
class GeneralGroup extends Adw.PreferencesGroup {
static {
GObject.registerClass(this);
}
constructor(settings) {
super({
title: _('Indicator'),
});
const previewCheck = new Gtk.CheckButton();
const previewRow = new Adw.ActionRow({
title: _('Previews'),
activatable_widget: previewCheck,
});
previewRow.add_prefix(previewCheck);
this.add(previewRow);
const nameCheck = new Gtk.CheckButton({
group: previewCheck,
});
const nameRow = new Adw.ActionRow({
title: _('Workspace Name'),
activatable_widget: nameCheck,
});
nameRow.add_prefix(nameCheck);
this.add(nameRow);
if (settings.get_boolean('embed-previews'))
previewCheck.active = true;
else
nameCheck.active = true;
settings.bind('embed-previews',
previewCheck, 'active',
Gio.SettingsBindFlags.DEFAULT);
}
}
class BehaviorGroup extends Adw.PreferencesGroup {
static {
GObject.registerClass(this);
}
constructor() {
super({
title: _('Behavior'),
});
const dynamicCheck = new Gtk.CheckButton();
const dynamicRow = new Adw.ActionRow({
title: _('Dynamic'),
subtitle: _('Automatically removes empty workspaces.'),
activatable_widget: dynamicCheck,
});
dynamicRow.add_prefix(dynamicCheck);
this.add(dynamicRow);
const fixedCheck = new Gtk.CheckButton({
group: dynamicCheck,
});
const fixedRow = new Adw.ActionRow({
title: _('Fixed Number'),
subtitle: _('Specify a number of permanent workspaces.'),
activatable_widget: fixedCheck,
});
fixedRow.add_prefix(fixedCheck);
this.add(fixedRow);
const adjustment = new Gtk.Adjustment({
lower: 1,
step_increment: 1,
value: 4,
upper: 36, // hard limit in mutter
});
const numRow = new Adw.SpinRow({
title: _('Number of Workspaces'),
adjustment,
});
this.add(numRow);
const mutterSettings = new Gio.Settings({
schema_id: 'org.gnome.mutter',
});
if (mutterSettings.get_boolean('dynamic-workspaces'))
dynamicCheck.active = true;
else
fixedCheck.active = true;
mutterSettings.bind('dynamic-workspaces',
dynamicCheck, 'active',
Gio.SettingsBindFlags.DEFAULT);
const desktopSettings = new Gio.Settings({
schema_id: 'org.gnome.desktop.wm.preferences',
});
desktopSettings.bind('num-workspaces',
numRow, 'value',
Gio.SettingsBindFlags.DEFAULT);
fixedCheck.bind_property('active',
numRow, 'sensitive',
GObject.BindingFlags.SYNC_CREATE);
}
}
export class WorkspacesPage extends Adw.PreferencesPage {
static {
GObject.registerClass(this);
}
constructor(settings) {
super({
title: _('Workspaces'),
icon_name: 'view-grid-symbolic',
});
this.add(new GeneralGroup(settings));
this.add(new BehaviorGroup());
}
}

View File

@@ -32,4 +32,10 @@ and will be picked automatically at next login.
<gnome:userid>fmuellner</gnome:userid>
</foaf:Person>
</maintainer>
<maintainer>
<foaf:Person>
<foaf:name>Marge Bot</foaf:name>
<gnome:userid>marge-bot</gnome:userid>
</foaf:Person>
</maintainer>
</Project>

273
lint/eslintrc-gjs.yml Normal file
View File

@@ -0,0 +1,273 @@
---
# SPDX-License-Identifier: MIT OR LGPL-2.0-or-later
# SPDX-FileCopyrightText: 2018 Claudio André <claudioandre.br@gmail.com>
env:
es2021: true
extends: 'eslint:recommended'
plugins:
- jsdoc
rules:
array-bracket-newline:
- error
- consistent
array-bracket-spacing:
- error
- never
array-callback-return: error
arrow-parens:
- error
- as-needed
arrow-spacing: error
block-scoped-var: error
block-spacing: error
brace-style: error
# Waiting for this to have matured a bit in eslint
# camelcase:
# - error
# - properties: never
# allow: [^vfunc_, ^on_, _instance_init]
comma-dangle:
- error
- arrays: always-multiline
objects: always-multiline
functions: never
comma-spacing:
- error
- before: false
after: true
comma-style:
- error
- last
computed-property-spacing: error
curly:
- error
- multi-or-nest
- consistent
dot-location:
- error
- property
eol-last: error
eqeqeq: error
func-call-spacing: error
func-name-matching: error
func-style:
- error
- declaration
- allowArrowFunctions: true
indent:
- error
- 4
- ignoredNodes:
# Allow not indenting the body of GObject.registerClass, since in the
# future it's intended to be a decorator
- 'CallExpression[callee.object.name=GObject][callee.property.name=registerClass] > ClassExpression:first-child'
# Allow dedenting chained member expressions
MemberExpression: 'off'
jsdoc/check-alignment: error
jsdoc/check-param-names: error
jsdoc/check-tag-names: error
jsdoc/check-types: error
jsdoc/implements-on-classes: error
jsdoc/tag-lines:
- error
- any
- startLines: 1
jsdoc/require-jsdoc: error
jsdoc/require-param: error
jsdoc/require-param-description: error
jsdoc/require-param-name: error
jsdoc/require-param-type: error
key-spacing:
- error
- beforeColon: false
afterColon: true
keyword-spacing:
- error
- before: true
after: true
linebreak-style:
- error
- unix
lines-between-class-members:
- error
- always
- exceptAfterSingleLine: true
max-nested-callbacks: error
max-statements-per-line: error
new-parens: error
no-array-constructor: error
no-await-in-loop: error
no-caller: error
no-constant-condition:
- error
- checkLoops: false
no-div-regex: error
no-empty:
- error
- allowEmptyCatch: true
no-extra-bind: error
no-extra-parens:
- error
- all
- conditionalAssign: false
nestedBinaryExpressions: false
returnAssign: false
no-implicit-coercion:
- error
- allow:
- '!!'
no-invalid-this: error
no-iterator: error
no-label-var: error
no-lonely-if: error
no-loop-func: error
no-nested-ternary: error
no-new-object: error
no-new-wrappers: error
no-octal-escape: error
no-proto: error
no-prototype-builtins: 'off'
no-restricted-globals: [error, window]
no-restricted-properties:
- error
- object: imports
property: format
message: Use template strings
- object: pkg
property: initFormat
message: Use template strings
- object: Lang
property: copyProperties
message: Use Object.assign()
- object: Lang
property: bind
message: Use arrow notation or Function.prototype.bind()
- object: Lang
property: Class
message: Use ES6 classes
no-restricted-syntax:
- error
- selector: >-
MethodDefinition[key.name="_init"] >
FunctionExpression[params.length=1] >
BlockStatement[body.length=1]
CallExpression[arguments.length=1][callee.object.type="Super"][callee.property.name="_init"] >
Identifier:first-child
message: _init() that only calls super._init() is unnecessary
- selector: >-
MethodDefinition[key.name="_init"] >
FunctionExpression[params.length=0] >
BlockStatement[body.length=1]
CallExpression[arguments.length=0][callee.object.type="Super"][callee.property.name="_init"]
message: _init() that only calls super._init() is unnecessary
- selector: BinaryExpression[operator="instanceof"][right.name="Array"]
message: Use Array.isArray()
no-return-assign: error
no-return-await: error
no-self-compare: error
no-shadow: error
no-shadow-restricted-names: error
no-spaced-func: error
no-tabs: error
no-template-curly-in-string: error
no-throw-literal: error
no-trailing-spaces: error
no-undef-init: error
no-unneeded-ternary: error
no-unused-expressions: error
no-unused-vars:
- error
# Vars use a suffix _ instead of a prefix because of file-scope private vars
- varsIgnorePattern: (^unused|_$)
argsIgnorePattern: ^(unused|_)
no-useless-call: error
no-useless-computed-key: error
no-useless-concat: error
no-useless-constructor: error
no-useless-rename: error
no-useless-return: error
no-whitespace-before-property: error
no-with: error
nonblock-statement-body-position:
- error
- below
object-curly-newline:
- error
- consistent: true
multiline: true
object-curly-spacing: error
object-shorthand: error
operator-assignment: error
operator-linebreak: error
padded-blocks:
- error
- never
# These may be a bit controversial, we can try them out and enable them later
# prefer-const: error
# prefer-destructuring: error
prefer-numeric-literals: error
prefer-promise-reject-errors: error
prefer-rest-params: error
prefer-spread: error
prefer-template: error
quotes:
- error
- single
- avoidEscape: true
require-await: error
rest-spread-spacing: error
semi:
- error
- always
semi-spacing:
- error
- before: false
after: true
semi-style: error
space-before-blocks: error
space-before-function-paren:
- error
- named: never
# for `function ()` and `async () =>`, preserve space around keywords
anonymous: always
asyncArrow: always
space-in-parens: error
space-infix-ops:
- error
- int32Hint: false
space-unary-ops: error
spaced-comment: error
switch-colon-spacing: error
symbol-description: error
template-curly-spacing: error
template-tag-spacing: error
unicode-bom: error
wrap-iife:
- error
- inside
yield-star-spacing: error
yoda: error
settings:
jsdoc:
mode: typescript
globals:
ARGV: readonly
Debugger: readonly
GIRepositoryGType: readonly
globalThis: readonly
imports: readonly
Intl: readonly
log: readonly
logError: readonly
print: readonly
printerr: readonly
window: readonly
TextEncoder: readonly
TextDecoder: readonly
console: readonly
setTimeout: readonly
setInterval: readonly
clearTimeout: readonly
clearInterval: readonly
parserOptions:
ecmaVersion: 2022

24
lint/eslintrc-shell.yml Normal file
View File

@@ -0,0 +1,24 @@
# SPDX-FileCopyrightText: 2019 Florian Müllner <fmuellner@gnome.org>
#
# SPDX-License-Identifier: MIT OR LGPL-2.0-or-later
rules:
camelcase:
- error
- properties: never
allow: [^vfunc_, ^on_]
consistent-return: error
eqeqeq:
- error
- smart
prefer-arrow-callback: error
jsdoc/require-param-description: off
jsdoc/require-jsdoc:
- error
- exemptEmptyFunctions: true
publicOnly:
esm: true
globals:
global: readonly
parserOptions:
sourceType: module

View File

@@ -2,11 +2,10 @@
#
# SPDX-License-Identifier: GPL-2.0-or-later
project(
'gnome-shell-extensions',
version: '50.alpha',
meson_version: '>= 1.1.0',
license: 'GPL-2.0-or-later',
project('gnome-shell-extensions',
version: '45.2',
meson_version: '>= 0.58.0',
license: 'GPL2+'
)
gettext_domain = meson.project_name()
@@ -23,15 +22,9 @@ modedir = join_paths(shelldir, 'modes')
schemadir = join_paths(datadir, 'glib-2.0', 'schemas')
sessiondir = join_paths(datadir, 'gnome-session', 'sessions')
xsessiondir = join_paths(datadir, 'xsessions')
wlsessiondir = join_paths(datadir, 'wayland-sessions')
systemd_dep = dependency('systemd', required: false)
systemd_userunitdir = systemd_dep.get_variable(
pkgconfig: 'systemduserunitdir',
pkgconfig_define: ['prefix', get_option('prefix')],
default_value: get_option('prefix') / 'lib' / 'systemd' / 'user',
)
ver_arr = meson.project_version().split('.')
shell_version = ver_arr[0]
@@ -41,7 +34,7 @@ classic_extensions = [
'apps-menu',
'places-menu',
'launch-new-instance',
'window-list',
'window-list'
]
default_extensions = classic_extensions
@@ -49,14 +42,16 @@ default_extensions += [
'drive-menu',
'light-style',
'screenshot-window-sizer',
'status-icons',
'system-monitor',
'windowsNavigator',
'workspace-indicator',
'workspace-indicator'
]
all_extensions = default_extensions
all_extensions += ['auto-move-windows', 'native-window-placement', 'user-theme']
all_extensions += [
'auto-move-windows',
'native-window-placement',
'user-theme'
]
enabled_extensions = get_option('enable_extensions')
@@ -75,10 +70,11 @@ endif
classic_mode_enabled = get_option('classic_mode')
if classic_mode_enabled
# Sanity check: Make sure all classic extensions are enabled
# Sanity check: Make sure all classic extensions are enabled
foreach e : classic_extensions
if not enabled_extensions.contains(e)
error(f'Classic mode is enabled, but the required extension @e@ is not')
error('Classic mode is enabled, ' +
'but the required extension @0@ is not.'.format(e))
endif
endforeach
endif
@@ -86,24 +82,32 @@ endif
# Sanity check: Make sure enabled extensions are valid
foreach e : enabled_extensions
if not all_extensions.contains(e)
error(f'Invalid extension @e@.')
error('Invalid extension @0@.'.format(e))
endif
endforeach
if classic_mode_enabled
subdir('data')
meson.add_install_script(
'meson/session-post-install.py',
join_paths(get_option('prefix'), datadir)
)
endif
subdir('extensions')
subdir('po')
gnome.post_install(glib_compile_schemas: true)
gnome.post_install(
glib_compile_schemas: true,
)
meson.add_dist_script('build-aux/check-version.py', meson.project_version(), 'NEWS')
meson.add_dist_script('meson/check-version.py',
meson.project_version(),
'NEWS')
summary_options = {
'extensions': enabled_extensions,
'classic_mode': get_option('classic_mode'),
'extensions': enabled_extensions,
'classic_mode': get_option('classic_mode'),
}
summary_dirs = {

View File

@@ -6,8 +6,7 @@
import os, sys
from pathlib import Path
from xml.etree.ElementTree import ElementTree
import argparse
import argparse, subprocess
def check_version(version, file, type='news'):
if type == 'news':
@@ -17,11 +16,8 @@ def check_version(version, file, type='news'):
if not ok:
raise Exception("{} does not start with {}".format(file, version))
elif type == 'metainfo':
query = './releases/release[@version="{}"]'.format(version)
ok = ElementTree(file=file).find(query) is not None
print("{}: {}".format(file, "OK" if ok else "FAILED"))
if not ok:
raise Exception("{} does not contain release {}".format(file, version))
subprocess.run(['appstream-util', 'validate-version', file, version],
check=True)
else:
raise Exception('Not implemented')

24
meson/session-post-install.py Executable file
View File

@@ -0,0 +1,24 @@
#!/usr/bin/env python3
# SPDX-FileCopyrightText: 2021 Neal Gompa <ngompa@fedoraproject.org>
#
# SPDX-License-Identifier: GPL-2.0-or-later
import os
import shutil
import sys
if os.environ.get('DESTDIR'):
install_root = os.environ.get('DESTDIR') + os.path.abspath(sys.argv[1])
else:
install_root = sys.argv[1]
# FIXME: Meson is unable to copy a generated target file:
# https://groups.google.com/forum/#!topic/mesonbuild/3iIoYPrN4P0
dst_dir = os.path.join(install_root, 'wayland-sessions')
if not os.path.exists(dst_dir):
os.makedirs(dst_dir)
src = os.path.join(install_root, 'xsessions', 'gnome-classic.desktop')
dst = os.path.join(dst_dir, 'gnome-classic.desktop')
shutil.copyfile(src, dst)

View File

@@ -29,7 +29,6 @@ he
hi
hr
hu
ia
id
is
it

View File

@@ -1,4 +1,6 @@
data/gnome-classic.desktop.in
data/gnome-classic-wayland.desktop.in
data/gnome-classic-xorg.desktop.in
extensions/apps-menu/extension.js
extensions/auto-move-windows/extension.js
extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml
@@ -9,13 +11,11 @@ extensions/native-window-placement/org.gnome.shell.extensions.native-window-plac
extensions/places-menu/extension.js
extensions/places-menu/placeDisplay.js
extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml
extensions/system-monitor/extension.js
extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml
extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml
extensions/window-list/extension.js
extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml
extensions/window-list/prefs.js
extensions/window-list/workspaceIndicator.js
extensions/windowsNavigator/extension.js
extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml
extensions/workspace-indicator/workspaceIndicator.js
extensions/workspace-indicator/workspacePrefs.js
extensions/workspace-indicator/extension.js
extensions/workspace-indicator/prefs.js

289
po/be.po
View File

@@ -8,17 +8,17 @@ msgstr ""
"Project-Id-Version: gnome-shell-extensions master\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
"issues\n"
"POT-Creation-Date: 2025-06-18 23:32+0000\n"
"PO-Revision-Date: 2025-06-21 15:51+0300\n"
"Last-Translator: Yuras Shumovich <shumovichy@gmail.com>\n"
"POT-Creation-Date: 2022-07-10 12:54+0000\n"
"PO-Revision-Date: 2022-10-19 15:20+0300\n"
"Last-Translator: Launchpad translators\n"
"Language-Team: Belarusian <i18n-bel-gnome@googlegroups.com>\n"
"Language: be\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.5\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"
#: data/gnome-classic.desktop.in:3
msgid "GNOME Classic"
@@ -41,15 +41,15 @@ msgstr "Класічны GNOME на Xorg"
msgid "Favorites"
msgstr "Абраныя"
#: extensions/apps-menu/extension.js:392
msgid "Apps"
#: extensions/apps-menu/extension.js:379
msgid "Applications"
msgstr "Праграмы"
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:12
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6
msgid "Application and workspace list"
msgstr "Праграма і спіс працоўных прастор"
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:13
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:7
msgid ""
"A list of strings, each containing an application id (desktop file name), "
"followed by a colon and the workspace number"
@@ -57,230 +57,151 @@ msgstr ""
"Спіс радкоў, кожны з якіх змяшчае ідэнтыфікатар праграмы (імя файла *."
"desktop), затым двукроп'е і нумар працоўнай прасторы"
#: extensions/auto-move-windows/prefs.js:156
#: extensions/auto-move-windows/prefs.js:152
msgid "Workspace Rules"
msgstr "Правілы для працоўнай прасторы"
#: extensions/auto-move-windows/prefs.js:311
#: extensions/auto-move-windows/prefs.js:306
msgid "Add Rule"
msgstr "Дадаць правіла"
#. TRANSLATORS: %s is the filesystem name
#: extensions/drive-menu/extension.js:123
#: extensions/places-menu/placeDisplay.js:186
#: extensions/drive-menu/extension.js:126
#: extensions/places-menu/placeDisplay.js:210
#, javascript-format
msgid "Ejecting drive “%s” failed:"
msgstr "Не ўдалося выняць дыск «%s»:"
#: extensions/drive-menu/extension.js:142
#: extensions/drive-menu/extension.js:145
msgid "Removable devices"
msgstr "Здымныя прылады"
#: extensions/drive-menu/extension.js:164
#: extensions/drive-menu/extension.js:167
msgid "Open Files"
msgstr "Адкрыць файлы"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
msgid "Use more screen for windows"
msgstr "Выкарыстоўваць большую плошчу экрана для вокнаў"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:6
msgid ""
"Try to use more screen for placing window thumbnails by adapting to screen "
"aspect ratio, and consolidating them further to reduce the bounding box. "
"This setting applies only with the natural placement strategy."
msgstr ""
"Спрабаваць выкарыстаць большую плошчу экрана для размяшчэння мініяцюр праз "
"змяненне суадносін бакоў экрана, ушчыльняючы іх, каб зменшыць памеры "
"змяненне суадносін бакоў экрана, ўшчыльняючы іх, каб зменшыць памеры "
"абмежавальнай рамкі. Гэты параметр ужываецца толькі з натуральным "
"размяшчэннем мініяцюр."
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:17
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
msgid "Place window captions on top"
msgstr "Размяшчаць подпіс акна зверху"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:18
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
msgid ""
"If true, place window captions on top the respective thumbnail, overriding "
"shell default of placing it at the bottom. Changing this setting requires "
"restarting the shell to have any effect."
msgstr ""
"Калі выбрана, подпіс акна будзе над мініяцюрай, а не пад ёй (як "
"Калі выбрана, подпіс акна будзе над мініяцюрай, а не пад ей (як "
"перадвызначана). Каб змена налады ўступіла ў сілу, трэба перазапусціць "
"абалонку."
#: extensions/places-menu/extension.js:75
#: extensions/places-menu/extension.js:78
#: extensions/places-menu/extension.js:94
#: extensions/places-menu/extension.js:97
msgid "Places"
msgstr "Месцы"
#: extensions/places-menu/placeDisplay.js:52
#: extensions/places-menu/placeDisplay.js:49
#, javascript-format
msgid "Failed to launch “%s”"
msgstr "Не ўдалося запусціць «%s»"
#: extensions/places-menu/placeDisplay.js:67
#: extensions/places-menu/placeDisplay.js:64
#, javascript-format
msgid "Failed to mount volume for “%s”"
msgstr "Не ўдалося прымацаваць том для «%s»."
#: extensions/places-menu/placeDisplay.js:315
#: extensions/places-menu/placeDisplay.js:125
#: extensions/places-menu/placeDisplay.js:148
msgid "Computer"
msgstr "Камп'ютар"
#: extensions/places-menu/placeDisplay.js:336
msgid "Home"
msgstr "Хатняя папка"
#: extensions/places-menu/placeDisplay.js:321
msgid "Recent"
msgstr "Нядаўнія"
#: extensions/places-menu/placeDisplay.js:381
msgid "Browse Network"
msgstr "Агляд сеткі"
#: extensions/places-menu/placeDisplay.js:327
msgid "Starred"
msgstr "Абраныя"
#: extensions/places-menu/placeDisplay.js:347
msgid "Network"
msgstr "Сетка"
#: extensions/places-menu/placeDisplay.js:354
msgid "Trash"
msgstr "Сметніца"
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:14
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7
msgid "Cycle Screenshot Sizes"
msgstr "Паслядоўнасць змены памераў для здымка экрана"
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:18
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
msgid "Cycle Screenshot Sizes Backward"
msgstr "Адваротная паслядоўнасць змены памераў для здымка экрана"
#: extensions/system-monitor/extension.js:135
msgid "CPU stats"
msgstr "Статыстыка выкарыстання працэсара"
#: extensions/system-monitor/extension.js:159
msgid "Memory stats"
msgstr "Статыстыка выкарыстання памяці"
#: extensions/system-monitor/extension.js:177
msgid "Swap stats"
msgstr "Статыстыка выкарыстання своп"
#: extensions/system-monitor/extension.js:336
msgid "Upload stats"
msgstr "Статыстыка адпраўлення даных"
#: extensions/system-monitor/extension.js:350
msgid "Download stats"
msgstr "Статыстыка атрымання даных"
#: extensions/system-monitor/extension.js:364
msgid "System stats"
msgstr "Статыстыка сістэмы"
#: extensions/system-monitor/extension.js:412
msgid "Show"
msgstr "Паказваць"
#: extensions/system-monitor/extension.js:414
msgid "CPU"
msgstr "Працэсар"
#: extensions/system-monitor/extension.js:416
msgid "Memory"
msgstr "Памяць"
#: extensions/system-monitor/extension.js:418
msgid "Swap"
msgstr "Своп"
#: extensions/system-monitor/extension.js:420
msgid "Upload"
msgstr "Атрыманне"
#: extensions/system-monitor/extension.js:422
msgid "Download"
msgstr "Адпраўленне"
#: extensions/system-monitor/extension.js:427
msgid "Open System Monitor"
msgstr "Адкрыць сістэмны манітор"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:12
msgid "Show CPU usage"
msgstr "Паказваць выкарыстанне працэсара"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:16
msgid "Show memory usage"
msgstr "Паказваць выкарыстанне памяці"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:20
msgid "Show swap usage"
msgstr "Паказваць выкарыстанне своп"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:24
msgid "Show upload"
msgstr "Паказваць атрыманне даных"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:28
msgid "Show download"
msgstr "Паказваць адпраўленне даных"
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:11
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5
msgid "Theme name"
msgstr "Назва тэмы"
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:12
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr "Назва тэмы, што загрузіцца з ~/.themes/name/gnome-shell"
#: extensions/window-list/extension.js:98
#: extensions/window-list/extension.js:72
msgid "Close"
msgstr "Закрыць"
#: extensions/window-list/extension.js:125
#: extensions/window-list/extension.js:92
msgid "Unminimize"
msgstr "Скасаваць згортванне"
#: extensions/window-list/extension.js:125
#: extensions/window-list/extension.js:92
msgid "Minimize"
msgstr "Згарнуць"
#: extensions/window-list/extension.js:130
#: extensions/window-list/extension.js:99
msgid "Unmaximize"
msgstr "Скасаваць разгортванне"
#: extensions/window-list/extension.js:130
#: extensions/window-list/extension.js:99
msgid "Maximize"
msgstr "Разгарнуць"
#: extensions/window-list/extension.js:720
#: extensions/window-list/extension.js:483
msgid "Minimize all"
msgstr "Згарнуць усе"
#: extensions/window-list/extension.js:726
#: extensions/window-list/extension.js:489
msgid "Unminimize all"
msgstr "Скасаваць згортванне для ўсіх"
#: extensions/window-list/extension.js:732
#: extensions/window-list/extension.js:495
msgid "Maximize all"
msgstr "Разгарнуць усе"
#: extensions/window-list/extension.js:740
#: extensions/window-list/extension.js:503
msgid "Unmaximize all"
msgstr "Скасаваць разгортванне для ўсіх"
#: extensions/window-list/extension.js:748
#: extensions/window-list/extension.js:511
msgid "Close all"
msgstr "Закрыць усе"
#: extensions/window-list/extension.js:1000 extensions/window-list/prefs.js:23
#: extensions/window-list/extension.js:795
msgid "Window List"
msgstr "Спіс вокнаў"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:18
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12
msgid "When to group windows"
msgstr "Умовы групавання вокнаў"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:19
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
msgid ""
"Decides when to group windows from the same application on the window list. "
"Possible values are “never”, “auto” and “always”."
@@ -288,125 +209,63 @@ msgstr ""
"Вызначае калі групаваць вокны адной праграмы ў спісе вокнаў. Магчымыя "
"значэнні: «never» (ніколі), «auto» (аўтаматычна), «always» (заўсёды)."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26
#: extensions/window-list/prefs.js:74
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
#: extensions/window-list/prefs.js:79
msgid "Show windows from all workspaces"
msgstr "Паказваць вокны з усіх працоўных прастор"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
msgid "Whether to show windows from all workspaces or only the current one."
msgstr "Паказваць вокны з усіх працоўных прастор ці толькі з бягучай."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:33
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
msgid "Show the window list on all monitors"
msgstr "Паказваць спіс вокнаў на ўсіх маніторах"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:34
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:28
msgid ""
"Whether to show the window list on all connected monitors or only on the "
"primary one."
msgstr ""
"Паказваць спіс вокнаў на ўсіх падлучаных маніторах ці толькі на асноўным."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:41
msgid "Show workspace previews in window list"
msgstr "Паказваць папярэдні прагляд працоўных прастор у спісе акон"
#: extensions/window-list/prefs.js:41
#: extensions/window-list/prefs.js:35
msgid "Window Grouping"
msgstr "Групаванне вокнаў"
#: extensions/window-list/prefs.js:46
#: extensions/window-list/prefs.js:40
msgid "Never group windows"
msgstr "Ніколі не групаваць вокны"
#: extensions/window-list/prefs.js:47
#: extensions/window-list/prefs.js:41
msgid "Group windows when space is limited"
msgstr "Групаваць вокны калі не хапае месца"
#: extensions/window-list/prefs.js:48
#: extensions/window-list/prefs.js:42
msgid "Always group windows"
msgstr "Заўсёды групаваць вокны"
#: extensions/window-list/prefs.js:68
#: extensions/window-list/prefs.js:66
msgid "Show on all monitors"
msgstr "Паказваць на ўсіх маніторах"
#: extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml:12
msgid "Show workspace previews in top bar"
msgstr "Паказваць папярэдні прагляд працоўных прастор у верхняй панэлі"
#: extensions/workspace-indicator/workspaceIndicator.js:404
#, javascript-format
msgid "Press %s to edit"
msgstr "Націсніце %s, каб змяніць"
#: extensions/workspace-indicator/workspaceIndicator.js:512
msgid "Settings"
msgstr "Налады"
#: extensions/workspace-indicator/workspaceIndicator.js:592
#: extensions/window-list/workspaceIndicator.js:261
#: extensions/workspace-indicator/extension.js:266
msgid "Workspace Indicator"
msgstr "Індыкатар працоўнай прасторы"
#: extensions/workspace-indicator/workspacePrefs.js:20
msgid "Indicator"
msgstr "Індыкатар"
#: extensions/workspace-indicator/workspacePrefs.js:25
msgid "Previews"
msgstr "Перадпрагляд"
#: extensions/workspace-indicator/workspacePrefs.js:35
msgid "Workspace Name"
msgstr "Назва працоўнай прасторы"
#: extensions/workspace-indicator/workspacePrefs.js:59
msgid "Behavior"
msgstr "Паводзіны"
#: extensions/workspace-indicator/workspacePrefs.js:64
msgid "Dynamic"
msgstr "Дынамічная"
#: extensions/workspace-indicator/workspacePrefs.js:65
msgid "Automatically removes empty workspaces."
msgstr "Пустыя працоўныя прасторы выдаляюцца аўтаматычна."
#: extensions/workspace-indicator/workspacePrefs.js:75
msgid "Fixed Number"
msgstr "Фіксаваная колькасць'"
#: extensions/workspace-indicator/workspacePrefs.js:76
msgid "Specify a number of permanent workspaces."
msgstr "Вызначыце колькасць пастаянных працоўных прастор."
#: extensions/workspace-indicator/workspacePrefs.js:89
msgid "Number of Workspaces"
msgstr "Колькасць працоўных прастор"
#: extensions/workspace-indicator/workspacePrefs.js:128
msgid "Workspaces"
msgstr "Працоўныя прасторы"
#: extensions/workspace-indicator/prefs.js:62
#, javascript-format
#~ msgid "Workspace %d"
#~ msgstr "Працоўная прастора %d"
msgid "Workspace %d"
msgstr "Працоўная прастора %d"
#~ msgid "Add Workspace"
#~ msgstr "Дадаць працоўную прастору"
#: extensions/workspace-indicator/prefs.js:129
msgid "Workspace Names"
msgstr "Назвы працоўных прастор"
#~ msgid "Remove"
#~ msgstr "Выдаліць"
#~ msgid "Computer"
#~ msgstr "Камп'ютар"
#~ msgid "Show workspace previews"
#~ msgstr "Паказваць папярэдні прагляд працоўных прастор"
#~ msgid "Applications"
#~ msgstr "Праграмы"
#: extensions/workspace-indicator/prefs.js:255
msgid "Add Workspace"
msgstr "Дадаць працоўную прастору"
#~ msgid "Attach modal dialog to the parent window"
#~ msgstr "Прымацаваць мадальны дыялог да бацькоўскага акна"
@@ -469,7 +328,7 @@ msgstr "Працоўныя прасторы"
#~ "If not empty, it contains the text that will be shown when clicking on "
#~ "the panel."
#~ msgstr ""
#~ "Калі не пуста, змяшчае тэкст, які будзе паказвацца пры націсканні на "
#~ "Калі не пуста, ўтрымлівае тэкст, які будзе паказвацца пры націсканні на "
#~ "панэль."
#~ msgid "Message"

348
po/bg.po
View File

@@ -1,410 +1,272 @@
# Bulgarian translation for gnome-shell-extensions po-file.
# Copyright (C) 2014, 2015, 2017 Free Software Foundation, Inc.
# Copyright (C) 2021, 2022 Alexander Shopov <ash@kambanaria.org>.
# Copyright (C) 2024 twlvnn kraftwerk <kraft_werk@tutanota.com>.
# This file is distributed under the same license as the gnome-shell-extensions package.
# Ivaylo Valkov <ivaylo@e-valkov.org>, 2014.
# Alexander Shopov <ash@kambanaria.org>, 2014, 2015, 2021, 2022.
# Lyubomir Vasilev <lyubomirv@abv.bg>, 2017.
# twlvnn kraftwerk <kraft_werk@tutanota.com>, 2024.
# @pacu23, 2025
#
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell-extensions main\n"
"Project-Id-Version: gnome-shell-extensions master\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
"issues\n"
"POT-Creation-Date: 2025-11-05 13:44+0000\n"
"PO-Revision-Date: 2026-01-01 18:41+0200\n"
"Last-Translator: @pacu23\n"
"Language-Team: Bulgarian <dict@ludost.net>\n"
"POT-Creation-Date: 2022-02-12 20:25+0000\n"
"PO-Revision-Date: 2022-02-13 11:40+0100\n"
"Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
"Language-Team: Bulgarian <dict@fsa-bg.org>\n"
"Language: bg\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: Poedit 3.8\n"
#: data/gnome-classic.desktop.in:2
#: data/gnome-classic.desktop.in:3
msgid "GNOME Classic"
msgstr "Класически GNOME"
#: data/gnome-classic.desktop.in:3 data/gnome-classic-wayland.desktop.in:3
#: data/gnome-classic-xorg.desktop.in:3
#: data/gnome-classic.desktop.in:4 data/gnome-classic-wayland.desktop.in:4
#: data/gnome-classic-xorg.desktop.in:4
msgid "This session logs you into GNOME Classic"
msgstr "Тази сесия влизa в Класически GNOME"
msgstr "Работната среда изглежда като класическия GNOME (2.x)"
#: data/gnome-classic-wayland.desktop.in:2
#: data/gnome-classic-wayland.desktop.in:3
msgid "GNOME Classic on Wayland"
msgstr "Класически GNOME в Wayland"
#: data/gnome-classic-xorg.desktop.in:2
#: data/gnome-classic-xorg.desktop.in:3
msgid "GNOME Classic on Xorg"
msgstr "Класически GNOME в Xorg"
#: extensions/apps-menu/extension.js:118
#: extensions/apps-menu/extension.js:112
msgid "Favorites"
msgstr "Любими"
#: extensions/apps-menu/extension.js:392
msgid "Apps"
#: extensions/apps-menu/extension.js:370
msgid "Applications"
msgstr "Програми"
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:12
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6
msgid "Application and workspace list"
msgstr "Списък с програмите и работните пространства"
msgstr "Списък с програмите и работните плотове"
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:13
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:7
msgid ""
"A list of strings, each containing an application id (desktop file name), "
"followed by a colon and the workspace number"
msgstr ""
"Списък от низове, всеки съдържащ идентификатор на програма (име на desktop "
"файла), последван от двоеточие и номер на работното пространство"
"Списък от низове. Всеки съдържа идентификатор на програма (име на файл „."
"desktop“), следван от знака „:“ и номер на работен плот"
#: extensions/auto-move-windows/prefs.js:157
#: extensions/auto-move-windows/prefs.js:19
msgid "Workspace Rules"
msgstr "Правила за работните пространства"
msgstr "Правила за работните плотове"
#: extensions/auto-move-windows/prefs.js:312
#: extensions/auto-move-windows/prefs.js:245
msgid "Add Rule"
msgstr "Добавяне на правило"
#. TRANSLATORS: %s is the filesystem name
#: extensions/drive-menu/extension.js:123
#: extensions/places-menu/placeDisplay.js:186
#: extensions/places-menu/placeDisplay.js:210
#, javascript-format
msgid "Ejecting drive “%s” failed:"
msgstr "Неуспешно изваждане на устройството „%s\":"
msgstr "Неуспешно изваждане на устройство „%s:"
#: extensions/drive-menu/extension.js:142
#: extensions/drive-menu/extension.js:139
msgid "Removable devices"
msgstr "Преносими устройства"
msgstr "Преносими медии"
#: extensions/drive-menu/extension.js:164
#: extensions/drive-menu/extension.js:161
msgid "Open Files"
msgstr "Отвори „Файлове"
msgstr "Отваряне на файлове"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
msgid "Use more screen for windows"
msgstr "Повече пространство на екрана за прозорците"
msgstr "Повече пространство за прозорците"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:6
msgid ""
"Try to use more screen for placing window thumbnails by adapting to screen "
"aspect ratio, and consolidating them further to reduce the bounding box. "
"This setting applies only with the natural placement strategy."
msgstr ""
"Опитва се да използва повече от екрана за разполагането на миниатюри на "
"прозорци, като се адаптира към съотношението на страните на екрана и "
"уплътнява подредбата, за да намали ограничителната рамка. Тази настройка се "
"прилага само за метода на естествено разполагане."
"Използване на по-голяма част от екрана за поставянето на мини изображения "
"чрез промяна на съотношението на страните и допълнително обединяване за "
"смаляване на обхващащия ги правоъгълник. Тази настройка се прилага само при "
"естествената стратегия за поставяне на прозорците."
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:17
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
msgid "Place window captions on top"
msgstr "Заглавия на прозорците отгоре"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:18
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
msgid ""
"If true, place window captions on top the respective thumbnail, overriding "
"shell default of placing it at the bottom. Changing this setting requires "
"restarting the shell to have any effect."
msgstr ""
"Ако е включено, заглавията на прозорците ще се поставят над съответната "
"миниатюра, вместо по подразбиране в долната ѝ част. За да влезе в сила, тази "
"промяна изисква рестартиране на обвивката на GNOME."
"Ако е истина, заглавията на прозорците се поставят над мини изображенията "
"им, а не както е стандартно — отдолу. За прилагане на промяната на "
"настройката трябва да рестартирате обвивката на GNOME."
#: extensions/places-menu/extension.js:75
#: extensions/places-menu/extension.js:78
#: extensions/places-menu/extension.js:88
#: extensions/places-menu/extension.js:91
msgid "Places"
msgstr "Места"
#: extensions/places-menu/placeDisplay.js:52
#: extensions/places-menu/placeDisplay.js:49
#, javascript-format
msgid "Failed to launch “%s”"
msgstr "Неуспешно стартиране на „%s“"
#: extensions/places-menu/placeDisplay.js:67
#: extensions/places-menu/placeDisplay.js:64
#, javascript-format
msgid "Failed to mount volume for “%s”"
msgstr "Неуспешно монтиране на тома „%s“"
#: extensions/places-menu/placeDisplay.js:315
#: extensions/places-menu/placeDisplay.js:125
#: extensions/places-menu/placeDisplay.js:148
msgid "Computer"
msgstr "Компютър"
#: extensions/places-menu/placeDisplay.js:336
msgid "Home"
msgstr "Домашна папка"
#: extensions/places-menu/placeDisplay.js:321
msgid "Recent"
msgstr "Скорошни"
#: extensions/places-menu/placeDisplay.js:327
msgid "Starred"
msgstr "Отбелязани"
#: extensions/places-menu/placeDisplay.js:347
msgid "Network"
#: extensions/places-menu/placeDisplay.js:381
msgid "Browse Network"
msgstr "Мрежа"
#: extensions/places-menu/placeDisplay.js:354
msgid "Trash"
msgstr "Кошче"
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:14
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7
msgid "Cycle Screenshot Sizes"
msgstr "Превключване между размерите на екранната снимка"
msgstr "Смяна на размерите на снимката на екрана"
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:18
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
msgid "Cycle Screenshot Sizes Backward"
msgstr "Обратно превключване на размерите на екранната снимка"
msgstr "Смяна на размерите на снимката на екрана наобратно"
#: extensions/system-monitor/extension.js:135
msgid "CPU stats"
msgstr "Статистика на процесора"
#: extensions/system-monitor/extension.js:159
msgid "Memory stats"
msgstr "Статистика на паметта"
#: extensions/system-monitor/extension.js:177
msgid "Swap stats"
msgstr "Статистика на виртуалната памет"
#: extensions/system-monitor/extension.js:336
msgid "Upload stats"
msgstr "Статистика за качването"
#: extensions/system-monitor/extension.js:350
msgid "Download stats"
msgstr "Статистика за изтеглянето"
#: extensions/system-monitor/extension.js:365
msgid "System stats"
msgstr "Системна статистика"
#: extensions/system-monitor/extension.js:413
msgid "Show"
msgstr "Показване"
#: extensions/system-monitor/extension.js:415
msgid "CPU"
msgstr "Процесор"
#: extensions/system-monitor/extension.js:417
msgid "Memory"
msgstr "Памет"
#: extensions/system-monitor/extension.js:419
msgid "Swap"
msgstr "Виртуалната памет"
#: extensions/system-monitor/extension.js:421
msgid "Upload"
msgstr "Качване"
#: extensions/system-monitor/extension.js:423
msgid "Download"
msgstr "Изтегляне"
#: extensions/system-monitor/extension.js:428
msgid "Open System Monitor"
msgstr "Отваряне на „Наблюдение на системата“"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:12
msgid "Show CPU usage"
msgstr "Показване на използването на процесора"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:16
msgid "Show memory usage"
msgstr "Показване на използването на паметта"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:20
msgid "Show swap usage"
msgstr "Показване на използването на виртуалната памет"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:24
msgid "Show upload"
msgstr "Показване на качването"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:28
msgid "Show download"
msgstr "Показване на изтеглянето"
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:11
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5
msgid "Theme name"
msgstr "Име на темата"
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:12
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr "Името на темата, която да се зареди от „~/.themes/name/gnome-shell“"
msgstr ""
"Името на темата, която да бъде заредена от „~/.themes/name/gnome-shell“"
#: extensions/window-list/extension.js:98
#: extensions/window-list/extension.js:72
msgid "Close"
msgstr "Затваряне"
#: extensions/window-list/extension.js:125
#: extensions/window-list/extension.js:92
msgid "Unminimize"
msgstr "Деминимизиране"
#: extensions/window-list/extension.js:125
#: extensions/window-list/extension.js:92
msgid "Minimize"
msgstr "Минимизиране"
#: extensions/window-list/extension.js:130
#: extensions/window-list/extension.js:99
msgid "Unmaximize"
msgstr "Демаксимизиране"
#: extensions/window-list/extension.js:130
#: extensions/window-list/extension.js:99
msgid "Maximize"
msgstr "Максимизиране"
#: extensions/window-list/extension.js:720
#: extensions/window-list/extension.js:434
msgid "Minimize all"
msgstr "Минимизиране на всички"
#: extensions/window-list/extension.js:726
#: extensions/window-list/extension.js:440
msgid "Unminimize all"
msgstr "Деминимизиране на всички"
#: extensions/window-list/extension.js:732
#: extensions/window-list/extension.js:446
msgid "Maximize all"
msgstr "Максимизиране на всички"
#: extensions/window-list/extension.js:740
#: extensions/window-list/extension.js:454
msgid "Unmaximize all"
msgstr "Демаксимизиране на всички"
#: extensions/window-list/extension.js:748
#: extensions/window-list/extension.js:462
msgid "Close all"
msgstr "Затваряне на всички"
#: extensions/window-list/extension.js:1000 extensions/window-list/prefs.js:23
#: extensions/window-list/extension.js:741
msgid "Window List"
msgstr "Списък на прозорците"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:18
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12
msgid "When to group windows"
msgstr "Кога да се групират прозорците"
msgstr "Кога прозорците да се групират"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:19
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
msgid ""
"Decides when to group windows from the same application on the window list. "
"Possible values are “never”, “auto” and “always”."
msgstr ""
"Кога да се групират прозорци от едно и също приложение в списъка с прозорци. "
"Възможните стойности са „никога, „автоматично и „винаги“."
"Кога прозорците на една програма да се групират в списъка с прозорците. "
"Възможните стойности саnever“ (никога), „auto“ (автоматично) и "
"„always“ (винаги)."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26
#: extensions/window-list/prefs.js:74
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
#: extensions/window-list/prefs.js:76
msgid "Show windows from all workspaces"
msgstr "Показване на прозорците от всички работни пространства"
msgstr "Да се показват прозорците от всички работни плотове"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
msgid "Whether to show windows from all workspaces or only the current one."
msgstr ""
"Дали да се показват прозорците от всички работни пространства или само от "
"текущото."
"Дали да се показват прозорците от всички работни плотове или само от текущия."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:33
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
msgid "Show the window list on all monitors"
msgstr "Показване на списъка с прозорци на всички монитори"
msgstr "Извеждане на списъка с прозорци на всички монитори"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:34
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:28
msgid ""
"Whether to show the window list on all connected monitors or only on the "
"primary one."
msgstr ""
"Дали да се показва списъкът с прозорци на всички свързани монитори или само "
"на основния."
"Дали списъкът с прозорци да се извежда на всички монитори или само на "
"основния"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:41
msgid "Show workspace previews in window list"
msgstr "Показване на прегледа на работните пространства"
#: extensions/window-list/prefs.js:41
#: extensions/window-list/prefs.js:32
msgid "Window Grouping"
msgstr "Групиране на прозорци"
#: extensions/window-list/prefs.js:46
#: extensions/window-list/prefs.js:37
msgid "Never group windows"
msgstr "Никога да не се групират"
#: extensions/window-list/prefs.js:47
#: extensions/window-list/prefs.js:38
msgid "Group windows when space is limited"
msgstr "Групиране при ограничено място"
#: extensions/window-list/prefs.js:48
#: extensions/window-list/prefs.js:39
msgid "Always group windows"
msgstr "Винаги да се групират"
#: extensions/window-list/prefs.js:68
#: extensions/window-list/prefs.js:63
msgid "Show on all monitors"
msgstr "На всички монитори"
#: extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml:12
msgid "Show workspace previews in top bar"
msgstr "Визуализиране на работните пространства в горната лента"
#: extensions/workspace-indicator/workspaceIndicator.js:404
#, javascript-format
msgid "Press %s to edit"
msgstr "Натиснете %s за редактирате"
#: extensions/workspace-indicator/workspaceIndicator.js:518
msgid "Settings"
msgstr "Настройки"
#: extensions/workspace-indicator/workspaceIndicator.js:598
#: extensions/window-list/workspaceIndicator.js:249
#: extensions/workspace-indicator/extension.js:254
msgid "Workspace Indicator"
msgstr "Индикатор на работните пространства"
msgstr "Индикатор на работните плотове"
#: extensions/workspace-indicator/workspacePrefs.js:20
msgid "Indicator"
msgstr "Индикатор"
#: extensions/workspace-indicator/prefs.js:18
msgid "Workspace Names"
msgstr "Имена на работните плотове"
#: extensions/workspace-indicator/workspacePrefs.js:25
msgid "Previews"
msgstr "Прегледи"
#: extensions/workspace-indicator/prefs.js:39
#, javascript-format
msgid "Workspace %d"
msgstr "Работен плот %d"
#: extensions/workspace-indicator/workspacePrefs.js:35
msgid "Workspace Name"
msgstr "Име на работното пространство"
#: extensions/workspace-indicator/workspacePrefs.js:59
msgid "Behavior"
msgstr "Поведение"
#: extensions/workspace-indicator/workspacePrefs.js:64
msgid "Dynamic"
msgstr "Динамично"
#: extensions/workspace-indicator/workspacePrefs.js:65
msgid "Automatically removes empty workspaces."
msgstr "Автоматично премахва празните работни пространства."
#: extensions/workspace-indicator/workspacePrefs.js:75
msgid "Fixed Number"
msgstr "Фиксиран брой"
#: extensions/workspace-indicator/workspacePrefs.js:76
msgid "Specify a number of permanent workspaces."
msgstr "Посочете брой постоянни работни пространства."
#: extensions/workspace-indicator/workspacePrefs.js:89
msgid "Number of Workspaces"
msgstr "Брой работни пространства"
#: extensions/workspace-indicator/workspacePrefs.js:128
msgid "Workspaces"
msgstr "Работни пространства"
#~ msgid "Computer"
#~ msgstr "Компютър"
#~ msgid "Show workspace previews"
#~ msgstr "Визуализиране на работните пространства"
#~ msgid "Show Previews In Top Bar"
#~ msgstr "Визуализиране в горната лента"
#~ msgid "Applications"
#~ msgstr "Програми"
#: extensions/workspace-indicator/prefs.js:184
msgid "Add Workspace"
msgstr "Добавяне на работен плот"

281
po/ca.po
View File

@@ -9,8 +9,8 @@ msgstr ""
"Project-Id-Version: gnome-shell-extensions\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
"issues\n"
"POT-Creation-Date: 2025-06-18 23:32+0000\n"
"PO-Revision-Date: 2025-06-29 09:56+0200\n"
"POT-Creation-Date: 2021-11-06 14:08+0000\n"
"PO-Revision-Date: 2017-07-08 13:29+0100\n"
"Last-Translator: Jordi Mas <jmas@softcatala.org>\n"
"Language-Team: Catalan <tradgnome@softcatala.org>\n"
"Language: ca\n"
@@ -18,8 +18,6 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-DamnedLies-Scope: partial\n"
"X-Generator: Poedit 3.2.2\n"
#: data/gnome-classic.desktop.in:3
msgid "GNOME Classic"
@@ -38,19 +36,19 @@ msgstr "GNOME clàssic amb Wayland"
msgid "GNOME Classic on Xorg"
msgstr "GNOME clàssic amb Xorg"
#: extensions/apps-menu/extension.js:118
#: extensions/apps-menu/extension.js:112
msgid "Favorites"
msgstr "Preferides"
#: extensions/apps-menu/extension.js:392
msgid "Apps"
#: extensions/apps-menu/extension.js:366
msgid "Applications"
msgstr "Aplicacions"
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:12
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6
msgid "Application and workspace list"
msgstr "Aplicació i llista d'espais de treball"
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:13
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:7
msgid ""
"A list of strings, each containing an application id (desktop file name), "
"followed by a colon and the workspace number"
@@ -59,34 +57,34 @@ msgstr ""
"d'aplicació (nom del fitxer de l'escriptori), seguit de dos punts i el "
"número de l'espai de treball"
#: extensions/auto-move-windows/prefs.js:156
#: extensions/auto-move-windows/prefs.js:34
msgid "Workspace Rules"
msgstr "Regles dels espais de treball"
#: extensions/auto-move-windows/prefs.js:311
#: extensions/auto-move-windows/prefs.js:236
msgid "Add Rule"
msgstr "Afegeix una regla"
#. TRANSLATORS: %s is the filesystem name
#: extensions/drive-menu/extension.js:123
#: extensions/places-menu/placeDisplay.js:186
#: extensions/drive-menu/extension.js:133
#: extensions/places-menu/placeDisplay.js:233
#, javascript-format
msgid "Ejecting drive “%s” failed:"
msgstr "Ha fallat l'expulsió de la unitat «%s»:"
#: extensions/drive-menu/extension.js:142
#: extensions/drive-menu/extension.js:149
msgid "Removable devices"
msgstr "Dispositius extraïbles"
#: extensions/drive-menu/extension.js:164
#: extensions/drive-menu/extension.js:171
msgid "Open Files"
msgstr "Obre els fitxers"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
msgid "Use more screen for windows"
msgstr "Utilitza més pantalla per les finestres"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:6
msgid ""
"Try to use more screen for placing window thumbnails by adapting to screen "
"aspect ratio, and consolidating them further to reduce the bounding box. "
@@ -98,11 +96,11 @@ msgstr ""
"de configuració només s'aplica a l'estratègia de posicionament de finestres "
"natural."
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:17
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
msgid "Place window captions on top"
msgstr "Posiciona els títols de les finestres al damunt"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:18
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
msgid ""
"If true, place window captions on top the respective thumbnail, overriding "
"shell default of placing it at the bottom. Changing this setting requires "
@@ -113,178 +111,99 @@ msgstr ""
"posicionar-lo a baix. Cal reiniciar el Shell per tal que aquest canvi tingui "
"efecte."
#: extensions/places-menu/extension.js:75
#: extensions/places-menu/extension.js:78
#: extensions/places-menu/extension.js:88
#: extensions/places-menu/extension.js:91
msgid "Places"
msgstr "Llocs"
#: extensions/places-menu/placeDisplay.js:52
#: extensions/places-menu/placeDisplay.js:46
#, javascript-format
msgid "Failed to launch “%s”"
msgstr "No s'ha pogut iniciar «%s»"
#: extensions/places-menu/placeDisplay.js:67
#: extensions/places-menu/placeDisplay.js:61
#, javascript-format
msgid "Failed to mount volume for “%s”"
msgstr "No s'ha pogut muntar el volum «%s»"
#: extensions/places-menu/placeDisplay.js:315
#: extensions/places-menu/placeDisplay.js:148
#: extensions/places-menu/placeDisplay.js:171
msgid "Computer"
msgstr "Ordinador"
#: extensions/places-menu/placeDisplay.js:359
msgid "Home"
msgstr "Inici"
#: extensions/places-menu/placeDisplay.js:321
msgid "Recent"
msgstr "Recent"
#: extensions/places-menu/placeDisplay.js:404
msgid "Browse Network"
msgstr "Navega per la xarxa"
#: extensions/places-menu/placeDisplay.js:327
msgid "Starred"
msgstr "Destacat"
#: extensions/places-menu/placeDisplay.js:347
msgid "Network"
msgstr "Xarxa"
#: extensions/places-menu/placeDisplay.js:354
msgid "Trash"
msgstr "Paperera"
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:14
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7
msgid "Cycle Screenshot Sizes"
msgstr "Mostra cíclicament mides de captura de pantalla"
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:18
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
msgid "Cycle Screenshot Sizes Backward"
msgstr "Mostra cíclicament cap enrere mides de captura de pantalla"
#: extensions/system-monitor/extension.js:135
msgid "CPU stats"
msgstr "Estadístiques de processador"
#: extensions/system-monitor/extension.js:159
msgid "Memory stats"
msgstr "Estadístiques de memòria"
#: extensions/system-monitor/extension.js:177
msgid "Swap stats"
msgstr "Estadístiques del «swap»"
#: extensions/system-monitor/extension.js:336
msgid "Upload stats"
msgstr "Estadístiques de pujada"
#: extensions/system-monitor/extension.js:350
msgid "Download stats"
msgstr "Estadístiques de descàrrega"
#: extensions/system-monitor/extension.js:364
msgid "System stats"
msgstr "Estadístiques del sistema"
#: extensions/system-monitor/extension.js:412
msgid "Show"
msgstr "Mostra"
#: extensions/system-monitor/extension.js:414
msgid "CPU"
msgstr "Processador"
#: extensions/system-monitor/extension.js:416
msgid "Memory"
msgstr "Memòria"
#: extensions/system-monitor/extension.js:418
msgid "Swap"
msgstr "Espai d'intercanvi"
#: extensions/system-monitor/extension.js:420
msgid "Upload"
msgstr "Pujades"
#: extensions/system-monitor/extension.js:422
msgid "Download"
msgstr "Descàrregues"
#: extensions/system-monitor/extension.js:427
msgid "Open System Monitor"
msgstr "Obre el Monitor del sistema"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:12
msgid "Show CPU usage"
msgstr "Mostra l'ús de CPU"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:16
msgid "Show memory usage"
msgstr "Mostra l'ús de memòria"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:20
msgid "Show swap usage"
msgstr "Mostra l'ús de l'espai d'intercanvi"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:24
msgid "Show upload"
msgstr "Mostra les pujades"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:28
msgid "Show download"
msgstr "Mostra les descàrregues"
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:11
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5
msgid "Theme name"
msgstr "Nom del tema"
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:12
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr "El nom del tema que es carregarà des de ~/.themes/name/gnome-shell"
#: extensions/window-list/extension.js:98
#: extensions/window-list/extension.js:72
msgid "Close"
msgstr "Tanca"
#: extensions/window-list/extension.js:125
#: extensions/window-list/extension.js:92
msgid "Unminimize"
msgstr "Desminimitza"
#: extensions/window-list/extension.js:125
#: extensions/window-list/extension.js:92
msgid "Minimize"
msgstr "Minimitza"
#: extensions/window-list/extension.js:130
#: extensions/window-list/extension.js:99
msgid "Unmaximize"
msgstr "Desmaximitza"
#: extensions/window-list/extension.js:130
#: extensions/window-list/extension.js:99
msgid "Maximize"
msgstr "Maximitza"
#: extensions/window-list/extension.js:720
#: extensions/window-list/extension.js:434
msgid "Minimize all"
msgstr "Minimitza-ho tot"
#: extensions/window-list/extension.js:726
#: extensions/window-list/extension.js:440
msgid "Unminimize all"
msgstr "Desminimitza-ho tot"
#: extensions/window-list/extension.js:732
#: extensions/window-list/extension.js:446
msgid "Maximize all"
msgstr "Maximitza-ho tot"
#: extensions/window-list/extension.js:740
#: extensions/window-list/extension.js:454
msgid "Unmaximize all"
msgstr "Desmaximitza-ho tot"
#: extensions/window-list/extension.js:748
#: extensions/window-list/extension.js:462
msgid "Close all"
msgstr "Tanca-ho tot"
#: extensions/window-list/extension.js:1000 extensions/window-list/prefs.js:23
#: extensions/window-list/extension.js:741
msgid "Window List"
msgstr "Llista de finestres"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:18
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12
msgid "When to group windows"
msgstr "Quan s'han d'agrupar les finestres"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:19
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
msgid ""
"Decides when to group windows from the same application on the window list. "
"Possible values are “never”, “auto” and “always”."
@@ -293,22 +212,22 @@ msgstr ""
"llista de finestres. Els valors possibles són: «never» (mai), "
"«auto» (automàticament) i «always» (sempre)."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26
#: extensions/window-list/prefs.js:74
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
#: extensions/window-list/prefs.js:86
msgid "Show windows from all workspaces"
msgstr "Mostra les finestres de tots els espais de treball"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
msgid "Whether to show windows from all workspaces or only the current one."
msgstr ""
"Si es mostren les finestres de tots els espais de treballs o només de "
"l'actual."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:33
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
msgid "Show the window list on all monitors"
msgstr "Mostra la llista de finestres a tots els monitors"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:34
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:28
msgid ""
"Whether to show the window list on all connected monitors or only on the "
"primary one."
@@ -316,104 +235,40 @@ msgstr ""
"Si es mostra la llista de finestres en tots els monitors connectats o només "
"al primari."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:41
msgid "Show workspace previews in window list"
msgstr ""
"Mostra les previsualitzacions dels espais de treball a la llista de finestres"
#: extensions/window-list/prefs.js:41
#: extensions/window-list/prefs.js:39
msgid "Window Grouping"
msgstr "Agrupació de finestres"
#: extensions/window-list/prefs.js:46
#: extensions/window-list/prefs.js:63
msgid "Never group windows"
msgstr "Mai agrupis les finestres"
#: extensions/window-list/prefs.js:47
#: extensions/window-list/prefs.js:64
msgid "Group windows when space is limited"
msgstr "Agrupa les finestres quan l'espai estigui limitat"
#: extensions/window-list/prefs.js:48
#: extensions/window-list/prefs.js:65
msgid "Always group windows"
msgstr "Agrupa les finestres sempre"
#: extensions/window-list/prefs.js:68
#: extensions/window-list/prefs.js:81
msgid "Show on all monitors"
msgstr "Mostra a tots els monitors"
#: extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml:12
msgid "Show workspace previews in top bar"
msgstr ""
"Mostra les previsualitzacions dels espais de treball a la barra superior"
#: extensions/workspace-indicator/workspaceIndicator.js:404
#, javascript-format
msgid "Press %s to edit"
msgstr "Premeu %s per editar"
#: extensions/workspace-indicator/workspaceIndicator.js:512
msgid "Settings"
msgstr "Paràmetres"
#: extensions/workspace-indicator/workspaceIndicator.js:592
#: extensions/window-list/workspaceIndicator.js:249
#: extensions/workspace-indicator/extension.js:254
msgid "Workspace Indicator"
msgstr "Indicador de l'espai de treball"
#: extensions/workspace-indicator/workspacePrefs.js:20
msgid "Indicator"
msgstr "Indicador"
#: extensions/workspace-indicator/workspacePrefs.js:25
msgid "Previews"
msgstr "Previsualitzacions"
#: extensions/workspace-indicator/workspacePrefs.js:35
msgid "Workspace Name"
msgstr "Nom de l'espai de treball"
#: extensions/workspace-indicator/workspacePrefs.js:59
msgid "Behavior"
msgstr "Comportament"
#: extensions/workspace-indicator/workspacePrefs.js:64
msgid "Dynamic"
msgstr "Dinàmica"
#: extensions/workspace-indicator/workspacePrefs.js:65
msgid "Automatically removes empty workspaces."
msgstr "Suprimeix automàticament els espais de treball buits."
#: extensions/workspace-indicator/workspacePrefs.js:75
msgid "Fixed Number"
msgstr "Nombre fix"
#: extensions/workspace-indicator/workspacePrefs.js:76
msgid "Specify a number of permanent workspaces."
msgstr "Especifiqueu un nombre d'espais de treball permanents."
#: extensions/workspace-indicator/workspacePrefs.js:89
msgid "Number of Workspaces"
msgstr "Nombre d'espais de treball"
#: extensions/workspace-indicator/workspacePrefs.js:128
msgid "Workspaces"
msgstr "Espais de treball"
#: extensions/workspace-indicator/prefs.js:33
msgid "Workspace Names"
msgstr "Noms dels espais de treball"
#: extensions/workspace-indicator/prefs.js:66
#, javascript-format
#~ msgid "Workspace %d"
#~ msgstr "Espai de treball %d"
msgid "Workspace %d"
msgstr "Espai de treball %d"
#~ msgid "Add Workspace"
#~ msgstr "Afegeix un espai de treball"
#~ msgid "Remove"
#~ msgstr "Suprimeix"
#~ msgid "Computer"
#~ msgstr "Ordinador"
#~ msgid "Show workspace previews"
#~ msgstr "Mostra les previsualitzacions dels espais de treball"
#~ msgid "Applications"
#~ msgstr "Aplicacions"
#: extensions/workspace-indicator/prefs.js:207
msgid "Add Workspace"
msgstr "Afegeix un espai de treball"

292
po/cs.po
View File

@@ -3,54 +3,53 @@
# This file is distributed under the same license as the gnome-shell-extensions package.
# Petr Kovar <pknbe@volny.cz>, 2013.
# Marek Černocký <marek@manet.cz>, 2011, 2012, 2013, 2014, 2015, 2017, 2019, 2020, 2022.
# Vojtěch Perník <translations@pervoj.cz>, 2024.
#
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell-extensions\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
"issues\n"
"POT-Creation-Date: 2025-08-14 10:26+0000\n"
"PO-Revision-Date: 2025-08-18 23:54+0200\n"
"Last-Translator: Daniel Rusek <mail@asciiwolf.com>\n"
"POT-Creation-Date: 2021-11-06 14:08+0000\n"
"PO-Revision-Date: 2022-02-16 09:58+0100\n"
"Last-Translator: Marek Černocký <marek@manet.cz>\n"
"Language-Team: Czech <gnome-cs-list@gnome.org>\n"
"Language: cs\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==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Generator: Poedit 3.6\n"
"X-Generator: Gtranslator 2.91.6\n"
#: data/gnome-classic.desktop.in:2
#: data/gnome-classic.desktop.in:3
msgid "GNOME Classic"
msgstr "GNOME klasik"
#: data/gnome-classic.desktop.in:3 data/gnome-classic-wayland.desktop.in:3
#: data/gnome-classic-xorg.desktop.in:3
#: data/gnome-classic.desktop.in:4 data/gnome-classic-wayland.desktop.in:4
#: data/gnome-classic-xorg.desktop.in:4
msgid "This session logs you into GNOME Classic"
msgstr "Toto sezení vás přihlásí do GNOME klasik"
#: data/gnome-classic-wayland.desktop.in:2
#: data/gnome-classic-wayland.desktop.in:3
msgid "GNOME Classic on Wayland"
msgstr "GNOME klasik na Waylandu"
#: data/gnome-classic-xorg.desktop.in:2
#: data/gnome-classic-xorg.desktop.in:3
msgid "GNOME Classic on Xorg"
msgstr "GNOME klasik na Xorg"
#: extensions/apps-menu/extension.js:118
#: extensions/apps-menu/extension.js:112
msgid "Favorites"
msgstr "Oblíbené"
#: extensions/apps-menu/extension.js:392
msgid "Apps"
#: extensions/apps-menu/extension.js:366
msgid "Applications"
msgstr "Aplikace"
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:12
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6
msgid "Application and workspace list"
msgstr "Seznam aplikací a pracovních ploch"
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:13
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:7
msgid ""
"A list of strings, each containing an application id (desktop file name), "
"followed by a colon and the workspace number"
@@ -58,34 +57,34 @@ msgstr ""
"Seznam řetězců, z nichž každý obsahuje ID aplikace (název souboru pracovní "
"plochy), následovaný dvojtečkou a číslem pracovní plochy"
#: extensions/auto-move-windows/prefs.js:156
#: extensions/auto-move-windows/prefs.js:34
msgid "Workspace Rules"
msgstr "Pravidla pracovních ploch"
#: extensions/auto-move-windows/prefs.js:311
#: extensions/auto-move-windows/prefs.js:236
msgid "Add Rule"
msgstr "Přidat pravidlo"
#. TRANSLATORS: %s is the filesystem name
#: extensions/drive-menu/extension.js:123
#: extensions/places-menu/placeDisplay.js:186
#: extensions/drive-menu/extension.js:133
#: extensions/places-menu/placeDisplay.js:233
#, javascript-format
msgid "Ejecting drive “%s” failed:"
msgstr "Vysunutí disku „%s“ selhalo:"
#: extensions/drive-menu/extension.js:142
#: extensions/drive-menu/extension.js:149
msgid "Removable devices"
msgstr "Výměnná zařízení"
#: extensions/drive-menu/extension.js:164
#: extensions/drive-menu/extension.js:171
msgid "Open Files"
msgstr "Otevřít soubory"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
msgid "Use more screen for windows"
msgstr "Použít větší část obrazovky pro okna"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:6
msgid ""
"Try to use more screen for placing window thumbnails by adapting to screen "
"aspect ratio, and consolidating them further to reduce the bounding box. "
@@ -95,11 +94,11 @@ msgstr ""
"využít větší část obrazovky pro umístění náhledů oken. Toto nastavení se "
"použije pouze dohromady se strategií umisťování „natural“."
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:17
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
msgid "Place window captions on top"
msgstr "Umístit název okna nahoru"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:18
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
msgid ""
"If true, place window captions on top the respective thumbnail, overriding "
"shell default of placing it at the bottom. Changing this setting requires "
@@ -109,178 +108,99 @@ msgstr ""
"přepíše výchozí chování shellu, který jej umisťuje dolů. Změna tohoto "
"nastavení vyžaduje restart shellu, aby se projevila."
#: extensions/places-menu/extension.js:75
#: extensions/places-menu/extension.js:78
#: extensions/places-menu/extension.js:88
#: extensions/places-menu/extension.js:91
msgid "Places"
msgstr "Místa"
#: extensions/places-menu/placeDisplay.js:52
#: extensions/places-menu/placeDisplay.js:46
#, javascript-format
msgid "Failed to launch “%s”"
msgstr "Selhalo spuštění „%s“"
#: extensions/places-menu/placeDisplay.js:67
#: extensions/places-menu/placeDisplay.js:61
#, javascript-format
msgid "Failed to mount volume for “%s”"
msgstr "Selhalo připojení svazku pro „%s“"
#: extensions/places-menu/placeDisplay.js:315
#: extensions/places-menu/placeDisplay.js:148
#: extensions/places-menu/placeDisplay.js:171
msgid "Computer"
msgstr "Počítač"
#: extensions/places-menu/placeDisplay.js:359
msgid "Home"
msgstr "Domů"
#: extensions/places-menu/placeDisplay.js:321
msgid "Recent"
msgstr "Nedávné"
#: extensions/places-menu/placeDisplay.js:404
msgid "Browse Network"
msgstr "Procházet síť"
#: extensions/places-menu/placeDisplay.js:327
msgid "Starred"
msgstr "Oblíbené"
#: extensions/places-menu/placeDisplay.js:347
msgid "Network"
msgstr "Síť"
#: extensions/places-menu/placeDisplay.js:354
msgid "Trash"
msgstr "Koš"
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:14
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7
msgid "Cycle Screenshot Sizes"
msgstr "Mění velikost pro snímky obrazovky"
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:18
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
msgid "Cycle Screenshot Sizes Backward"
msgstr "Mění pozpátku velikost pro snímky obrazovky"
#: extensions/system-monitor/extension.js:135
msgid "CPU stats"
msgstr "Statistiky CPU"
#: extensions/system-monitor/extension.js:159
msgid "Memory stats"
msgstr "Statistiky paměti"
#: extensions/system-monitor/extension.js:177
msgid "Swap stats"
msgstr "Statistiky odkládacího prostoru"
#: extensions/system-monitor/extension.js:336
msgid "Upload stats"
msgstr "Statistiky nahrávání"
#: extensions/system-monitor/extension.js:350
msgid "Download stats"
msgstr "Statistiky stahování"
#: extensions/system-monitor/extension.js:364
msgid "System stats"
msgstr "Statistiky systému"
#: extensions/system-monitor/extension.js:412
msgid "Show"
msgstr "Zobrazit"
#: extensions/system-monitor/extension.js:414
msgid "CPU"
msgstr "CPU"
#: extensions/system-monitor/extension.js:416
msgid "Memory"
msgstr "Paměť"
#: extensions/system-monitor/extension.js:418
msgid "Swap"
msgstr "Odkládací prostor"
#: extensions/system-monitor/extension.js:420
msgid "Upload"
msgstr "Nahrávání"
#: extensions/system-monitor/extension.js:422
msgid "Download"
msgstr "Stahování"
#: extensions/system-monitor/extension.js:427
msgid "Open System Monitor"
msgstr "Otevřít Sledování systému"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:12
msgid "Show CPU usage"
msgstr "Zobrazit využití CPU"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:16
msgid "Show memory usage"
msgstr "Zobrazit využití paměti"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:20
msgid "Show swap usage"
msgstr "Zobrazit využití odkládacího prostoru"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:24
msgid "Show upload"
msgstr "Zobrazit nahrávání"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:28
msgid "Show download"
msgstr "Zobrazit stahování"
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:11
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5
msgid "Theme name"
msgstr "Název motivu"
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:12
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr "Název motivu, který se má načíst z ~/.themes/name/gnome-shell"
#: extensions/window-list/extension.js:98
#: extensions/window-list/extension.js:72
msgid "Close"
msgstr "Zavřít"
#: extensions/window-list/extension.js:125
#: extensions/window-list/extension.js:92
msgid "Unminimize"
msgstr "Zrušit minimalizaci"
#: extensions/window-list/extension.js:125
#: extensions/window-list/extension.js:92
msgid "Minimize"
msgstr "Minimalizovat"
#: extensions/window-list/extension.js:130
#: extensions/window-list/extension.js:99
msgid "Unmaximize"
msgstr "Zrušit maximalizaci"
#: extensions/window-list/extension.js:130
#: extensions/window-list/extension.js:99
msgid "Maximize"
msgstr "Maximalizovat"
#: extensions/window-list/extension.js:720
#: extensions/window-list/extension.js:434
msgid "Minimize all"
msgstr "Minimalizovat všechna"
#: extensions/window-list/extension.js:726
#: extensions/window-list/extension.js:440
msgid "Unminimize all"
msgstr "Zrušit minimalizaci všech"
#: extensions/window-list/extension.js:732
#: extensions/window-list/extension.js:446
msgid "Maximize all"
msgstr "Maximalizovat všechna"
#: extensions/window-list/extension.js:740
#: extensions/window-list/extension.js:454
msgid "Unmaximize all"
msgstr "Zrušit maximalizaci všech"
#: extensions/window-list/extension.js:748
#: extensions/window-list/extension.js:462
msgid "Close all"
msgstr "Zavřít všechna"
#: extensions/window-list/extension.js:1000 extensions/window-list/prefs.js:23
#: extensions/window-list/extension.js:741
msgid "Window List"
msgstr "Seznam oken"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:18
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12
msgid "When to group windows"
msgstr "Kdy seskupovat okna"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:19
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
msgid ""
"Decides when to group windows from the same application on the window list. "
"Possible values are “never”, “auto” and “always”."
@@ -288,20 +208,20 @@ msgstr ""
"Rozhoduje, kdy se mají v seznamu oken seskupovat okna stejné aplikace. Možné "
"hodnoty jsou „never“ (nikdy), „auto“ (automaticky) a „always“ (vždy)."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26
#: extensions/window-list/prefs.js:74
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
#: extensions/window-list/prefs.js:86
msgid "Show windows from all workspaces"
msgstr "Zobrazovat okna ze všech pracovních ploch"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
msgid "Whether to show windows from all workspaces or only the current one."
msgstr "Zda zobrazovat okna ze všech pracovních ploch nebo jen z aktuální."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:33
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
msgid "Show the window list on all monitors"
msgstr "Zobrazovat seznam oken na všech monitorech"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:34
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:28
msgid ""
"Whether to show the window list on all connected monitors or only on the "
"primary one."
@@ -309,102 +229,40 @@ msgstr ""
"Zda zobrazovat seznam oken na všech připojených monitorech nebo jen na "
"hlavním."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:41
msgid "Show workspace previews in window list"
msgstr "Zobrazit náhledy pracovních ploch v seznamu oken"
#: extensions/window-list/prefs.js:41
#: extensions/window-list/prefs.js:39
msgid "Window Grouping"
msgstr "Seskupování oken"
#: extensions/window-list/prefs.js:46
#: extensions/window-list/prefs.js:63
msgid "Never group windows"
msgstr "Nikdy neseskupovat okna"
#: extensions/window-list/prefs.js:47
#: extensions/window-list/prefs.js:64
msgid "Group windows when space is limited"
msgstr "Seskupovat okna při nedostatku místa"
#: extensions/window-list/prefs.js:48
#: extensions/window-list/prefs.js:65
msgid "Always group windows"
msgstr "Vždy seskupovat okna"
#: extensions/window-list/prefs.js:68
#: extensions/window-list/prefs.js:81
msgid "Show on all monitors"
msgstr "Zobrazovat na všech monitorech"
#: extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml:12
msgid "Show workspace previews in top bar"
msgstr "Zobrazit náhledy pracovních ploch v horním panelu"
#: extensions/workspace-indicator/workspaceIndicator.js:404
#, javascript-format
msgid "Press %s to edit"
msgstr "Stiskněte %s pro úpravu"
#: extensions/workspace-indicator/workspaceIndicator.js:512
msgid "Settings"
msgstr "Nastavení"
#: extensions/workspace-indicator/workspaceIndicator.js:592
#: extensions/window-list/workspaceIndicator.js:249
#: extensions/workspace-indicator/extension.js:254
msgid "Workspace Indicator"
msgstr "Ukazatel pracovní plochy"
#: extensions/workspace-indicator/workspacePrefs.js:20
msgid "Indicator"
msgstr "Ukazatel"
#: extensions/workspace-indicator/workspacePrefs.js:25
msgid "Previews"
msgstr "Náhledy"
#: extensions/workspace-indicator/workspacePrefs.js:35
msgid "Workspace Name"
msgstr "Název pracovní plochy"
#: extensions/workspace-indicator/workspacePrefs.js:59
msgid "Behavior"
msgstr "Chování"
#: extensions/workspace-indicator/workspacePrefs.js:64
msgid "Dynamic"
msgstr "Dynamické"
#: extensions/workspace-indicator/workspacePrefs.js:65
msgid "Automatically removes empty workspaces."
msgstr "Bude automaticky odebírat prázdné pracovní plochy."
#: extensions/workspace-indicator/workspacePrefs.js:75
msgid "Fixed Number"
msgstr "Neměnný počet"
#: extensions/workspace-indicator/workspacePrefs.js:76
msgid "Specify a number of permanent workspaces."
msgstr "Určit počet trvalých pracovních ploch."
#: extensions/workspace-indicator/workspacePrefs.js:89
msgid "Number of Workspaces"
msgstr "Počet pracovních ploch"
#: extensions/workspace-indicator/workspacePrefs.js:128
msgid "Workspaces"
msgstr "Pracovní plochy"
#: extensions/workspace-indicator/prefs.js:33
msgid "Workspace Names"
msgstr "Názvy pracovních ploch"
#: extensions/workspace-indicator/prefs.js:66
#, javascript-format
#~ msgid "Workspace %d"
#~ msgstr "Pracovní plocha %d"
msgid "Workspace %d"
msgstr "Pracovní plocha %d"
#~ msgid "Add Workspace"
#~ msgstr "Přidat pracovní plochu"
#~ msgid "Remove"
#~ msgstr "Odstranit"
#~ msgid "Computer"
#~ msgstr "Počítač"
#~ msgid "Show workspace previews"
#~ msgstr "Zobrazit náhledy pracovních ploch"
#~ msgid "Applications"
#~ msgstr "Aplikace"
#: extensions/workspace-indicator/prefs.js:207
msgid "Add Workspace"
msgstr "Přidat pracovní plochu"

214
po/da.po
View File

@@ -1,9 +1,9 @@
# Danish translation for gnome-shell-extensions.
# Copyright (C) 2011-2017, 2024 gnome-shell-extensions's COPYRIGHT HOLDER
# Copyright (C) 2011-2017 gnome-shell-extensions's COPYRIGHT HOLDER
# This file is distributed under the same license as the gnome-shell-extensions package.
#
# Kris Thomsen <mail@kristhomsen.dk>, 2011-2014.
# Ask Hjorth Larsen <asklarsen@gmail.com>, 2015, 2017, 2024.
# Ask Hjorth Larsen <asklarsen@gmail.com>, 2015, 2017.
# Joe Hansen <joedalton2@yahoo.dk>, 2017.
#
msgid ""
@@ -11,9 +11,9 @@ msgstr ""
"Project-Id-Version: gnome-shell-extensions master\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
"issues\n"
"POT-Creation-Date: 2024-04-29 15:27+0000\n"
"PO-Revision-Date: 2024-09-07 23:22+0200\n"
"Last-Translator: Ask Hjorth Larsen <asklarsen@gmail.com>\n"
"POT-Creation-Date: 2021-11-06 14:08+0000\n"
"PO-Revision-Date: 2022-02-27 13:21+0100\n"
"Last-Translator: Alan Mortensen <alanmortensen.am@gmail.com>\n"
"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
"Language: da\n"
"MIME-Version: 1.0\n"
@@ -39,19 +39,19 @@ msgstr "GNOME Classic på Wayland"
msgid "GNOME Classic on Xorg"
msgstr "GNOME Classic på Xorg"
#: extensions/apps-menu/extension.js:126
#: extensions/apps-menu/extension.js:112
msgid "Favorites"
msgstr "Favoritter"
#: extensions/apps-menu/extension.js:400
msgid "Apps"
#: extensions/apps-menu/extension.js:366
msgid "Applications"
msgstr "Programmer"
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:12
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6
msgid "Application and workspace list"
msgstr "Liste over programmer og arbejdsområder"
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:13
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:7
msgid ""
"A list of strings, each containing an application id (desktop file name), "
"followed by a colon and the workspace number"
@@ -59,34 +59,34 @@ msgstr ""
"En liste over strenge, som hver indeholder et program-id "
"(skrivebordsfilnavn), efterfulgt af et kolon og arbejdsområdets nummer"
#: extensions/auto-move-windows/prefs.js:159
#: extensions/auto-move-windows/prefs.js:34
msgid "Workspace Rules"
msgstr "Regler for arbejdsområde"
#: extensions/auto-move-windows/prefs.js:314
#: extensions/auto-move-windows/prefs.js:236
msgid "Add Rule"
msgstr "Tilføj regel"
#. TRANSLATORS: %s is the filesystem name
#: extensions/drive-menu/extension.js:123
#: extensions/places-menu/placeDisplay.js:218
#: extensions/drive-menu/extension.js:133
#: extensions/places-menu/placeDisplay.js:233
#, javascript-format
msgid "Ejecting drive “%s” failed:"
msgstr "Udskubning af drevet “%s” mislykkedes:"
#: extensions/drive-menu/extension.js:142
#: extensions/drive-menu/extension.js:149
msgid "Removable devices"
msgstr "Flytbare enheder"
#: extensions/drive-menu/extension.js:164
#: extensions/drive-menu/extension.js:171
msgid "Open Files"
msgstr "Åbn filer"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
msgid "Use more screen for windows"
msgstr "Brug mere skærmplads til vinduer"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:6
msgid ""
"Try to use more screen for placing window thumbnails by adapting to screen "
"aspect ratio, and consolidating them further to reduce the bounding box. "
@@ -97,11 +97,11 @@ msgstr ""
"yderligere for at reducere den omkransende boks.Denne indstilling gælder kun "
"med den naturlige placeringsstrategi."
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:17
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
msgid "Place window captions on top"
msgstr "Placér vinduestitler i toppen"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:18
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
msgid ""
"If true, place window captions on top the respective thumbnail, overriding "
"shell default of placing it at the bottom. Changing this setting requires "
@@ -112,119 +112,47 @@ msgstr ""
"Ændring af denne indstilling kræver at shell'en genstartes for at træde i "
"kraft."
#: extensions/places-menu/extension.js:88
#: extensions/places-menu/extension.js:91
#: extensions/places-menu/extension.js:94
msgid "Places"
msgstr "Steder"
#: extensions/places-menu/placeDisplay.js:60
#: extensions/places-menu/placeDisplay.js:46
#, javascript-format
msgid "Failed to launch “%s”"
msgstr "Kunne ikke åbne “%s”"
#: extensions/places-menu/placeDisplay.js:75
#: extensions/places-menu/placeDisplay.js:61
#, javascript-format
msgid "Failed to mount volume for “%s”"
msgstr "Kunne ikke montere diskenhed for “%s”"
#: extensions/places-menu/placeDisplay.js:135
#: extensions/places-menu/placeDisplay.js:158
#: extensions/places-menu/placeDisplay.js:148
#: extensions/places-menu/placeDisplay.js:171
msgid "Computer"
msgstr "Computer"
#: extensions/places-menu/placeDisplay.js:333
#: extensions/places-menu/placeDisplay.js:359
msgid "Home"
msgstr "Hjem"
#: extensions/places-menu/placeDisplay.js:378
#: extensions/places-menu/placeDisplay.js:404
msgid "Browse Network"
msgstr "Gennemse netværk"
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:14
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7
msgid "Cycle Screenshot Sizes"
msgstr "Gennemgå størrelser af skærmbillede"
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:18
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
msgid "Cycle Screenshot Sizes Backward"
msgstr "Gennemgå størrelser af skærmbillede baglæns"
#: extensions/system-monitor/extension.js:135
msgid "CPU stats"
msgstr "CPU-statistik"
#: extensions/system-monitor/extension.js:159
msgid "Memory stats"
msgstr "Hukommelsesstatistik"
#: extensions/system-monitor/extension.js:177
msgid "Swap stats"
msgstr "Swapstatistik"
#: extensions/system-monitor/extension.js:336
msgid "Upload stats"
msgstr "Uploadstatistik"
#: extensions/system-monitor/extension.js:350
msgid "Download stats"
msgstr "Downloadstatistik"
#: extensions/system-monitor/extension.js:364
msgid "System stats"
msgstr "Systemstatistik"
#: extensions/system-monitor/extension.js:412
msgid "Show"
msgstr "Vis"
#: extensions/system-monitor/extension.js:414
msgid "CPU"
msgstr "CPU"
#: extensions/system-monitor/extension.js:416
msgid "Memory"
msgstr "Hukommelse"
#: extensions/system-monitor/extension.js:418
msgid "Swap"
msgstr "Swap"
#: extensions/system-monitor/extension.js:420
msgid "Upload"
msgstr "Upload"
#: extensions/system-monitor/extension.js:422
msgid "Download"
msgstr "Download"
#: extensions/system-monitor/extension.js:427
msgid "Open System Monitor"
msgstr "Åbn Systemovervågning"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:12
msgid "Show CPU usage"
msgstr "Vis CPU-forbrug"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:16
msgid "Show memory usage"
msgstr "Vis hukommelsesforbrug"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:20
msgid "Show swap usage"
msgstr "Vis swapforbrug"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:24
msgid "Show upload"
msgstr "Vis upload"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:28
msgid "Show download"
msgstr "Vis download"
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:11
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5
msgid "Theme name"
msgstr "Temanavn"
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:12
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr "Navnet på temaet, som indlæses fra ~/.themes/name/gnome-shell"
@@ -232,51 +160,51 @@ msgstr "Navnet på temaet, som indlæses fra ~/.themes/name/gnome-shell"
msgid "Close"
msgstr "Luk"
#: extensions/window-list/extension.js:99
#: extensions/window-list/extension.js:92
msgid "Unminimize"
msgstr "Afminimér"
#: extensions/window-list/extension.js:99
#: extensions/window-list/extension.js:92
msgid "Minimize"
msgstr "Minimér"
#: extensions/window-list/extension.js:106
#: extensions/window-list/extension.js:99
msgid "Unmaximize"
msgstr "Afmaksimér"
#: extensions/window-list/extension.js:106
#: extensions/window-list/extension.js:99
msgid "Maximize"
msgstr "Maksimér"
#: extensions/window-list/extension.js:471
#: extensions/window-list/extension.js:434
msgid "Minimize all"
msgstr "Minimér"
#: extensions/window-list/extension.js:477
#: extensions/window-list/extension.js:440
msgid "Unminimize all"
msgstr "Afminimér alle"
#: extensions/window-list/extension.js:483
#: extensions/window-list/extension.js:446
msgid "Maximize all"
msgstr "Maksimér alle"
#: extensions/window-list/extension.js:491
#: extensions/window-list/extension.js:454
msgid "Unmaximize all"
msgstr "Afmaksimér alle"
#: extensions/window-list/extension.js:499
#: extensions/window-list/extension.js:462
msgid "Close all"
msgstr "Luk alle"
#: extensions/window-list/extension.js:778
#: extensions/window-list/extension.js:741
msgid "Window List"
msgstr "Vinduesliste"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:18
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12
msgid "When to group windows"
msgstr "Hvornår vinduer skal grupperes"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:19
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
msgid ""
"Decides when to group windows from the same application on the window list. "
"Possible values are “never”, “auto” and “always”."
@@ -284,21 +212,21 @@ msgstr ""
"Afgør hvornår vinduer fra samme program skal grupperes i vindueslisten. "
"Mulige værdier er “never” (aldrig), “auto” (automatisk) og “always” (altid)."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26
#: extensions/window-list/prefs.js:79
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
#: extensions/window-list/prefs.js:86
msgid "Show windows from all workspaces"
msgstr "Vis vinduer fra alle arbejdsområder"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
msgid "Whether to show windows from all workspaces or only the current one."
msgstr ""
"Om der skal vises vinduer fra alle arbejdsområder eller kun det nuværende."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:33
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
msgid "Show the window list on all monitors"
msgstr "Vis vindueslisten på alle skærme"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:34
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:28
msgid ""
"Whether to show the window list on all connected monitors or only on the "
"primary one."
@@ -306,62 +234,44 @@ msgstr ""
"Om vindueslisten skal vise på alle tilsluttede skærme, eller kun på den "
"primære."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:41
msgid "Show workspace previews in window list"
msgstr "Forhåndsvis arbejdsområder i vinduesliste"
#: extensions/window-list/prefs.js:35
#: extensions/window-list/prefs.js:39
msgid "Window Grouping"
msgstr "Vinduesgruppering"
#: extensions/window-list/prefs.js:40
#: extensions/window-list/prefs.js:63
msgid "Never group windows"
msgstr "Gruppér aldrig vinduer"
#: extensions/window-list/prefs.js:41
#: extensions/window-list/prefs.js:64
msgid "Group windows when space is limited"
msgstr "Gruppér vinduer når pladsen er begrænset"
#: extensions/window-list/prefs.js:42
#: extensions/window-list/prefs.js:65
msgid "Always group windows"
msgstr "Gruppér altid vinduer"
#: extensions/window-list/prefs.js:66
#: extensions/window-list/prefs.js:81
msgid "Show on all monitors"
msgstr "Vis på alle skærme"
#: extensions/window-list/prefs.js:92
msgid "Show workspace previews"
msgstr "Forhåndsvis arbejdsområder"
#: extensions/window-list/workspaceIndicator.js:249
#: extensions/workspace-indicator/extension.js:254
msgid "Workspace Indicator"
msgstr "Arbejdsområdeindikator"
#: extensions/workspace-indicator/prefs.js:30
msgid "Show Previews In Top Bar"
msgstr "Inkludér forhåndsvisninger i topbjælken"
#: extensions/workspace-indicator/prefs.js:33
msgid "Workspace Names"
msgstr "Navne på arbejdsområder"
#: extensions/workspace-indicator/prefs.js:88
#: extensions/workspace-indicator/prefs.js:66
#, javascript-format
msgid "Workspace %d"
msgstr "Arbejdsområde %d"
#: extensions/workspace-indicator/prefs.js:155
msgid "Workspace Names"
msgstr "Navne på arbejdsområder"
#: extensions/workspace-indicator/prefs.js:281
#: extensions/workspace-indicator/prefs.js:207
msgid "Add Workspace"
msgstr "Tilføj arbejdsområde"
#: extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml:12
msgid "Show workspace previews in top bar"
msgstr "Inkludér forhåndsvisninger af arbejdsområder i topbjælken"
#: extensions/workspace-indicator/workspaceIndicator.js:430
msgid "Workspace Indicator"
msgstr "Arbejdsområdeindikator"
#~ msgid "Applications"
#~ msgstr "Programmer"
#~ msgid "Application"
#~ msgstr "Program"

279
po/de.po
View File

@@ -8,24 +8,22 @@
# Paul Seyfert <pseyfert@mathphys.fsk.uni-heidelberg.de>, 2017.
# Tim Sabsch <tim@sabsch.com>, 2019-2020.
# Philipp Kiemle <philipp.kiemle@gmail.com>, 2022.
# Gabriel Brand <gabr.brand@gmail.com>, 2024.
# Jürgen Benvenuti <gastornis@posteo.org>, 2024.
#
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell-extensions main\n"
"Project-Id-Version: gnome-shell-extensions master\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
"issues\n"
"POT-Creation-Date: 2024-04-29 15:27+0000\n"
"PO-Revision-Date: 2024-08-29 10:01+0200\n"
"Last-Translator: Jürgen Benvenuti <gastornis@posteo.org>\n"
"POT-Creation-Date: 2022-03-07 15:35+0000\n"
"PO-Revision-Date: 2022-03-10 22:26+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"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 3.4.4\n"
"X-Generator: Poedit 3.0.1\n"
#: data/gnome-classic.desktop.in:3
msgid "GNOME Classic"
@@ -44,19 +42,19 @@ msgstr "GNOME Classic unter Wayland"
msgid "GNOME Classic on Xorg"
msgstr "GNOME Classic unter Xorg"
#: extensions/apps-menu/extension.js:126
#: extensions/apps-menu/extension.js:118
msgid "Favorites"
msgstr "Favoriten"
#: extensions/apps-menu/extension.js:400
msgid "Apps"
#: extensions/apps-menu/extension.js:379
msgid "Applications"
msgstr "Anwendungen"
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:12
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6
msgid "Application and workspace list"
msgstr "Anwendungs- und Arbeitsflächenliste"
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:13
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:7
msgid ""
"A list of strings, each containing an application id (desktop file name), "
"followed by a colon and the workspace number"
@@ -65,34 +63,34 @@ msgstr ""
"Datei) enthält, gefolgt von einem Doppelpunkt und der Nummer der "
"Arbeitsfläche"
#: extensions/auto-move-windows/prefs.js:159
#: extensions/auto-move-windows/prefs.js:152
msgid "Workspace Rules"
msgstr "Arbeitsfläche-Regeln"
#: extensions/auto-move-windows/prefs.js:314
#: extensions/auto-move-windows/prefs.js:306
msgid "Add Rule"
msgstr "Regel hinzufügen"
#. TRANSLATORS: %s is the filesystem name
#: extensions/drive-menu/extension.js:123
#: extensions/places-menu/placeDisplay.js:218
#: extensions/drive-menu/extension.js:126
#: extensions/places-menu/placeDisplay.js:210
#, javascript-format
msgid "Ejecting drive “%s” failed:"
msgstr "Auswerfen von Laufwerk »%s« schlug fehl:"
#: extensions/drive-menu/extension.js:142
#: extensions/drive-menu/extension.js:145
msgid "Removable devices"
msgstr "Wechseldatenträger"
#: extensions/drive-menu/extension.js:164
#: extensions/drive-menu/extension.js:167
msgid "Open Files"
msgstr "Dateien öffnen"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
msgid "Use more screen for windows"
msgstr "Mehr Bildschirmbereich für Fenster verwenden"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:6
msgid ""
"Try to use more screen for placing window thumbnails by adapting to screen "
"aspect ratio, and consolidating them further to reduce the bounding box. "
@@ -104,11 +102,11 @@ msgstr ""
"verkleinern. Diese Einstellung betrifft nur den natürlichen "
"Platzierungsalgorithmus."
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:17
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
msgid "Place window captions on top"
msgstr "Fensterbeschriftungen oben platzieren"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:18
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
msgid ""
"If true, place window captions on top the respective thumbnail, overriding "
"shell default of placing it at the bottom. Changing this setting requires "
@@ -118,119 +116,47 @@ msgstr ""
"Vorschaubild platziert und damit die Voreinstellung der Shell übergangen. "
"Eine Änderungseinstellung tritt erst mit einem Neustart der Shell in Kraft."
#: extensions/places-menu/extension.js:91
#: extensions/places-menu/extension.js:94
#: extensions/places-menu/extension.js:97
msgid "Places"
msgstr "Orte"
#: extensions/places-menu/placeDisplay.js:60
#: extensions/places-menu/placeDisplay.js:49
#, javascript-format
msgid "Failed to launch “%s”"
msgstr "Starten von »%s« fehlgeschlagen"
#: extensions/places-menu/placeDisplay.js:75
#: extensions/places-menu/placeDisplay.js:64
#, javascript-format
msgid "Failed to mount volume for “%s”"
msgstr "Datenträger für »%s« konnte nicht eingebunden werden"
#: extensions/places-menu/placeDisplay.js:135
#: extensions/places-menu/placeDisplay.js:158
#: extensions/places-menu/placeDisplay.js:125
#: extensions/places-menu/placeDisplay.js:148
msgid "Computer"
msgstr "Rechner"
#: extensions/places-menu/placeDisplay.js:333
#: extensions/places-menu/placeDisplay.js:336
msgid "Home"
msgstr "Persönlicher Ordner"
#: extensions/places-menu/placeDisplay.js:378
#: extensions/places-menu/placeDisplay.js:381
msgid "Browse Network"
msgstr "Netzwerk durchsuchen"
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:14
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7
msgid "Cycle Screenshot Sizes"
msgstr "Bildschirmfotogrößen nacheinander anzeigen"
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:18
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
msgid "Cycle Screenshot Sizes Backward"
msgstr "Bildschirmfotogrößen in umgekehrter Reihenfolge anzeigen"
#: extensions/system-monitor/extension.js:135
msgid "CPU stats"
msgstr "CPU-Statistiken"
#: extensions/system-monitor/extension.js:159
msgid "Memory stats"
msgstr "Speicherstatistiken"
#: extensions/system-monitor/extension.js:177
msgid "Swap stats"
msgstr "Auslagerungsspeicherstatistiken"
#: extensions/system-monitor/extension.js:336
msgid "Upload stats"
msgstr "Upload-Statistiken"
#: extensions/system-monitor/extension.js:350
msgid "Download stats"
msgstr "Download-Statistiken"
#: extensions/system-monitor/extension.js:364
msgid "System stats"
msgstr "Systemstatistiken"
#: extensions/system-monitor/extension.js:412
msgid "Show"
msgstr "Anzeigen"
#: extensions/system-monitor/extension.js:414
msgid "CPU"
msgstr "CPU"
#: extensions/system-monitor/extension.js:416
msgid "Memory"
msgstr "Speicher"
#: extensions/system-monitor/extension.js:418
msgid "Swap"
msgstr "Auslagerungsspeicher"
#: extensions/system-monitor/extension.js:420
msgid "Upload"
msgstr "Upload"
#: extensions/system-monitor/extension.js:422
msgid "Download"
msgstr "Download"
#: extensions/system-monitor/extension.js:427
msgid "Open System Monitor"
msgstr "Systemüberwachung öffnen"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:12
msgid "Show CPU usage"
msgstr "CPU-Nutzung anzeigen"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:16
msgid "Show memory usage"
msgstr "Speichernutzung anzeigen"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:20
msgid "Show swap usage"
msgstr "Auslagerungsspeichernutzung anzeigen"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:24
msgid "Show upload"
msgstr "Upload anzeigen"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:28
msgid "Show download"
msgstr "Download anzeigen"
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:11
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5
msgid "Theme name"
msgstr "Themenname"
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:12
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr ""
"Der Name des Themas, welches aus ~/.themes/name/gnome-shell geladen werden "
@@ -240,51 +166,51 @@ msgstr ""
msgid "Close"
msgstr "Schließen"
#: extensions/window-list/extension.js:99
#: extensions/window-list/extension.js:92
msgid "Unminimize"
msgstr "Minimieren rückgängig"
#: extensions/window-list/extension.js:99
#: extensions/window-list/extension.js:92
msgid "Minimize"
msgstr "Minimieren"
#: extensions/window-list/extension.js:106
#: extensions/window-list/extension.js:99
msgid "Unmaximize"
msgstr "Maximieren rückgängig"
#: extensions/window-list/extension.js:106
#: extensions/window-list/extension.js:99
msgid "Maximize"
msgstr "Maximieren"
#: extensions/window-list/extension.js:471
#: extensions/window-list/extension.js:441
msgid "Minimize all"
msgstr "Alle minimieren"
#: extensions/window-list/extension.js:477
#: extensions/window-list/extension.js:447
msgid "Unminimize all"
msgstr "Alle minimieren rückgängig"
#: extensions/window-list/extension.js:483
#: extensions/window-list/extension.js:453
msgid "Maximize all"
msgstr "Alle maximieren"
#: extensions/window-list/extension.js:491
#: extensions/window-list/extension.js:461
msgid "Unmaximize all"
msgstr "Alle maximieren rückgängig"
#: extensions/window-list/extension.js:499
#: extensions/window-list/extension.js:469
msgid "Close all"
msgstr "Alle schließen"
#: extensions/window-list/extension.js:778
#: extensions/window-list/extension.js:753
msgid "Window List"
msgstr "Fensterliste"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:18
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12
msgid "When to group windows"
msgstr "Legt fest, wann Fenster gruppiert werden"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:19
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
msgid ""
"Decides when to group windows from the same application on the window list. "
"Possible values are “never”, “auto” and “always”."
@@ -293,22 +219,22 @@ msgstr ""
"werden sollen. Mögliche Werte sind »never« (nie), »auto« (automatisch) und "
"»always« (immer)."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
#: extensions/window-list/prefs.js:79
msgid "Show windows from all workspaces"
msgstr "Fenster von allen Arbeitsflächen anzeigen"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
msgid "Whether to show windows from all workspaces or only the current one."
msgstr ""
"Legt fest, ob Fenster von allen oder nur der aktuellen Arbeitsflächen "
"angezeigt werden."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:33
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
msgid "Show the window list on all monitors"
msgstr "Die Fensterliste auf allen Bildschirmen anzeigen"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:34
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:28
msgid ""
"Whether to show the window list on all connected monitors or only on the "
"primary one."
@@ -316,10 +242,6 @@ msgstr ""
"Legt fest, ob die Fensterliste auf allen angeschlossenen Bildschirmen "
"angezeigt wird oder nur auf dem Primären."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:41
msgid "Show workspace previews in window list"
msgstr "Arbeitsflächenvorschauen in der Fensterliste anzeigen"
#: extensions/window-list/prefs.js:35
msgid "Window Grouping"
msgstr "Fenstergruppierung"
@@ -340,34 +262,105 @@ msgstr "Fenster immer gruppieren"
msgid "Show on all monitors"
msgstr "Auf allen Bildschirmen anzeigen"
#: extensions/window-list/prefs.js:92
msgid "Show workspace previews"
msgstr "Arbeitsflächenvorschauen anzeigen"
#: extensions/window-list/workspaceIndicator.js:261
#: extensions/workspace-indicator/extension.js:266
msgid "Workspace Indicator"
msgstr "Arbeitsflächenindikator"
#: extensions/workspace-indicator/prefs.js:30
msgid "Show Previews In Top Bar"
msgstr "Vorschauen in der oberen Leiste anzeigen"
#: extensions/workspace-indicator/prefs.js:88
#: extensions/workspace-indicator/prefs.js:62
#, javascript-format
msgid "Workspace %d"
msgstr "Arbeitsfläche %d"
#: extensions/workspace-indicator/prefs.js:155
#: extensions/workspace-indicator/prefs.js:129
msgid "Workspace Names"
msgstr "Namen der Arbeitsflächen"
#: extensions/workspace-indicator/prefs.js:281
#: extensions/workspace-indicator/prefs.js:255
msgid "Add Workspace"
msgstr "Arbeitsfläche hinzufügen"
#: extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml:12
msgid "Show workspace previews in top bar"
msgstr "Arbeitsflächenvorschauen in der oberen Leiste anzeigen"
#~ msgid "Application"
#~ msgstr "Anwendung"
#: extensions/workspace-indicator/workspaceIndicator.js:430
msgid "Workspace Indicator"
msgstr "Arbeitsflächenindikator"
#~ msgid "Create new matching rule"
#~ msgstr "Neue Übereinstimmungsregel erstellen"
#~ msgid "Applications"
#~ msgstr "Anwendungen"
#~ msgid "Add"
#~ msgstr "Hinzufügen"
#~ msgid "Name"
#~ msgstr "Name"
#~ msgid "Attach modal dialog to the parent window"
#~ msgstr "Einen modalen Dialog an das übergeordnete Fenster anhängen"
#~ 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 ausgeführt wird."
#~ msgid "Arrangement of buttons on the titlebar"
#~ msgstr "Anordnung von Knöpfen auf der Titelleiste"
#~ msgid ""
#~ "This key overrides the key in org.gnome.desktop.wm.preferences when "
#~ "running GNOME Shell."
#~ msgstr ""
#~ "Dieser Schlüssel überschreibt den Schlüssel in »org.gnome.desktop.wm."
#~ "preferences«, wenn die GNOME-Shell ausgeführt wird."
# identisch zum Schüssel in »gnome-shell«
#~ msgid "Enable edge tiling when dropping windows on screen edges"
#~ msgstr ""
#~ "Größenanpassung aktivieren, wenn ein Fenster an die Bildschirmkante "
#~ "verschoben wird"
#~ msgid "Workspaces only on primary monitor"
#~ msgstr "Arbeitsflächen nur auf dem Primärmonitor"
#~ 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."
#~ msgid "Thumbnail only"
#~ msgstr "Nur Vorschaubild"
#~ msgid "Application icon only"
#~ msgstr "Nur Anwendungssymbol"
#~ msgid "Thumbnail and application icon"
#~ msgstr "Vorschaubild und Anwendungssymbol"
#~ msgid "Present windows as"
#~ msgstr "Fenster darstellen als"
#~ msgid "Activities Overview"
#~ msgstr "Aktivitäten-Übersicht"
#~ msgid "Hello, world!"
#~ msgstr "Hallo Welt!"
#~ msgid "Alternative greeting text."
#~ msgstr "Alternativer Begrüßungstext."
#~ msgid ""
#~ "If not empty, it contains the text that will be shown when clicking on "
#~ "the panel."
#~ msgstr ""
#~ "Falls nicht leer, ist dies der Text, der beim Anklicken des Panels "
#~ "angezeigt wird."
#~ msgid "Message"
#~ msgstr "Nachricht"
#~ msgid ""
#~ "Example aims to show how to build well behaved extensions for the Shell "
#~ "and as such it has little functionality on its own.\n"
#~ "Nevertheless its possible to customize the greeting message."
#~ msgstr ""
#~ "Das Beispiel soll zeigen, wie sich korrekt verhaltende Erweiterungen für "
#~ "die Shell erstellt werden. Es enthält grundlegende Funktionalität.\n"
#~ "Es ist möglich, die Begrüßungsnachricht zu ändern."

249
po/el.po
View File

@@ -12,16 +12,16 @@ msgstr ""
"Project-Id-Version: gnome-shell-extensions master\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
"issues\n"
"POT-Creation-Date: 2024-10-16 14:41+0000\n"
"PO-Revision-Date: 2024-08-12 23:29+0300\n"
"Last-Translator: Giannis Antypas <gianni.antypas@gmail.com>\n"
"POT-Creation-Date: 2023-02-18 15:10+0000\n"
"PO-Revision-Date: 2023-08-01 23:41+0300\n"
"Last-Translator: Efstathios Iosifidis <eiosifidis@gnome.org>\n"
"Language-Team: Greek, Modern (1453-) <gnome-el-list@gnome.org>\n"
"Language: el\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: Poedit 3.4.4\n"
"X-Generator: Poedit 3.3.2\n"
"X-Project-Style: gnome\n"
#: data/gnome-classic.desktop.in:3
@@ -31,7 +31,7 @@ msgstr "GNOME Classic"
#: data/gnome-classic.desktop.in:4 data/gnome-classic-wayland.desktop.in:4
#: data/gnome-classic-xorg.desktop.in:4
msgid "This session logs you into GNOME Classic"
msgstr "Αυτή η συνεδρία σάς συνδέει στο GNOME Classic"
msgstr "Αυτή η συνεδρία σας συνδέει στο GNOME Classic"
#: data/gnome-classic-wayland.desktop.in:3
msgid "GNOME Classic on Wayland"
@@ -41,19 +41,19 @@ msgstr "GNOME Classic σε Wayland"
msgid "GNOME Classic on Xorg"
msgstr "GNOME Classic σε Xorg"
#: extensions/apps-menu/extension.js:126
#: extensions/apps-menu/extension.js:118
msgid "Favorites"
msgstr "Αγαπημένα"
#: extensions/apps-menu/extension.js:400
msgid "Apps"
#: extensions/apps-menu/extension.js:380
msgid "Applications"
msgstr "Εφαρμογές"
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:12
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6
msgid "Application and workspace list"
msgstr "Λίστα εφαρμογών και χώρου εργασίας"
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:13
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:7
msgid ""
"A list of strings, each containing an application id (desktop file name), "
"followed by a colon and the workspace number"
@@ -62,34 +62,34 @@ msgstr ""
"(όνομα αρχείου επιφάνειας εργασίας), ακολουθούμενη από άνω-κάτω τελεία και "
"τον αριθμό του χώρου εργασίας"
#: extensions/auto-move-windows/prefs.js:159
#: extensions/auto-move-windows/prefs.js:152
msgid "Workspace Rules"
msgstr "Κανόνες χώρων εργασίας"
#: extensions/auto-move-windows/prefs.js:314
#: extensions/auto-move-windows/prefs.js:306
msgid "Add Rule"
msgstr "Προσθήκη κανόνα"
#. TRANSLATORS: %s is the filesystem name
#: extensions/drive-menu/extension.js:123
#: extensions/places-menu/placeDisplay.js:187
#: extensions/drive-menu/extension.js:126
#: extensions/places-menu/placeDisplay.js:212
#, javascript-format
msgid "Ejecting drive “%s” failed:"
msgstr "Αποτυχία εξαγωγής του δίσκου «%s»:"
#: extensions/drive-menu/extension.js:142
#: extensions/drive-menu/extension.js:145
msgid "Removable devices"
msgstr "Αφαιρούμενες συσκευές"
#: extensions/drive-menu/extension.js:164
#: extensions/drive-menu/extension.js:167
msgid "Open Files"
msgstr "Άνοιγμα αρχείων"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
msgid "Use more screen for windows"
msgstr "Χρησιμοποιήστε περισσότερη οθόνη για τα παράθυρα"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:6
msgid ""
"Try to use more screen for placing window thumbnails by adapting to screen "
"aspect ratio, and consolidating them further to reduce the bounding box. "
@@ -100,11 +100,11 @@ msgstr ""
"εδραιώνοντας τους περαιτέρω για να μειώσετε το πλαίσιο οριοθέτησης. Αυτή η "
"ρύθμιση ισχύει μόνο με την στρατηγική φυσικής τοποθέτησης."
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:17
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
msgid "Place window captions on top"
msgstr "Τοποθέτηση τίτλων παράθυρου στην κορυφή"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:18
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
msgid ""
"If true, place window captions on top the respective thumbnail, overriding "
"shell default of placing it at the bottom. Changing this setting requires "
@@ -115,179 +115,100 @@ msgstr ""
"στο κάτω μέρος. Η αλλαγή αυτής της ρύθμισης απαιτεί επανεκκίνηση του "
"κελύφους για να υπάρξει κάποιο αποτέλεσμα."
#: extensions/places-menu/extension.js:91
#: extensions/places-menu/extension.js:94
#: extensions/places-menu/extension.js:97
msgid "Places"
msgstr "Τοποθεσίες"
#: extensions/places-menu/placeDisplay.js:53
#: extensions/places-menu/placeDisplay.js:52
#, javascript-format
msgid "Failed to launch “%s”"
msgstr "Αποτυχία εκκίνησης «%s»"
#: extensions/places-menu/placeDisplay.js:68
#: extensions/places-menu/placeDisplay.js:67
#, javascript-format
msgid "Failed to mount volume for “%s”"
msgstr "Αποτυχία προσάρτησης τόμου για «%s»"
#: extensions/places-menu/placeDisplay.js:316
#: extensions/places-menu/placeDisplay.js:127
#: extensions/places-menu/placeDisplay.js:150
msgid "Computer"
msgstr "Υπολογιστής"
#: extensions/places-menu/placeDisplay.js:340
msgid "Home"
msgstr "Προσωπικός φάκελος"
#: extensions/places-menu/placeDisplay.js:322
msgid "Recent"
msgstr "Πρόσφατα"
#: extensions/places-menu/placeDisplay.js:385
msgid "Browse Network"
msgstr "Περιήγηση δικτύου"
#: extensions/places-menu/placeDisplay.js:328
msgid "Starred"
msgstr "Επισημάνθηκαν"
#: extensions/places-menu/placeDisplay.js:348
msgid "Network"
msgstr "Δίκτυο"
#: extensions/places-menu/placeDisplay.js:355
msgid "Trash"
msgstr "Απορρίμματα"
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:14
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7
msgid "Cycle Screenshot Sizes"
msgstr "Περιδιάβαση τα μεγέθη των στιγμιοτύπων"
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:18
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
msgid "Cycle Screenshot Sizes Backward"
msgstr "Μεγέθη κυκλικών στιγμιοτύπων προς τα πίσω"
#: extensions/system-monitor/extension.js:135
msgid "CPU stats"
msgstr "Στατιστικά CPU"
#: extensions/system-monitor/extension.js:159
msgid "Memory stats"
msgstr "Στατιστικά μνήμης"
#: extensions/system-monitor/extension.js:177
msgid "Swap stats"
msgstr "Στατιστικά swap"
#: extensions/system-monitor/extension.js:336
msgid "Upload stats"
msgstr "Στατιστικά μεταφόρτωσης"
#: extensions/system-monitor/extension.js:350
msgid "Download stats"
msgstr "Στατιστικά λήψης"
#: extensions/system-monitor/extension.js:364
msgid "System stats"
msgstr "Στατιστικά συστήματος"
#: extensions/system-monitor/extension.js:412
msgid "Show"
msgstr "Εμφάνιση"
#: extensions/system-monitor/extension.js:414
msgid "CPU"
msgstr "CPU"
#: extensions/system-monitor/extension.js:416
msgid "Memory"
msgstr "Μνήμη"
#: extensions/system-monitor/extension.js:418
msgid "Swap"
msgstr "Swap"
#: extensions/system-monitor/extension.js:420
msgid "Upload"
msgstr "Μεταφόρτωση"
#: extensions/system-monitor/extension.js:422
msgid "Download"
msgstr "Λήψη"
#: extensions/system-monitor/extension.js:427
msgid "Open System Monitor"
msgstr "Άνοιγμα επόπτη συστήματος"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:12
msgid "Show CPU usage"
msgstr "Εμφάνιση χρήσης CPU"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:16
msgid "Show memory usage"
msgstr "Εμφάνιση χρήσης μνήμης"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:20
msgid "Show swap usage"
msgstr "Εμφάνιση χρήσης swap"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:24
msgid "Show upload"
msgstr "Εμφάνιση μεταφόρτωσης"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:28
msgid "Show download"
msgstr "Εμφάνιση λήψης"
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:11
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5
msgid "Theme name"
msgstr "Όνομα θέματος"
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:12
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr ""
"Το όνομα του θέματος που θα φορτωθεί από το ~ /.themes/name/gnome-shell"
#: extensions/window-list/extension.js:92
#: extensions/window-list/extension.js:72
msgid "Close"
msgstr "Κλείσιμο"
#: extensions/window-list/extension.js:119
#: extensions/window-list/extension.js:92
msgid "Unminimize"
msgstr "Αποελαχιστοποίηση"
#: extensions/window-list/extension.js:119
#: extensions/window-list/extension.js:92
msgid "Minimize"
msgstr "Ελαχιστοποίηση"
#: extensions/window-list/extension.js:126
#: extensions/window-list/extension.js:99
msgid "Unmaximize"
msgstr "Απομεγιστοποίηση"
#: extensions/window-list/extension.js:126
#: extensions/window-list/extension.js:99
msgid "Maximize"
msgstr "Μεγιστοποίηση"
#: extensions/window-list/extension.js:641
#: extensions/window-list/extension.js:483
msgid "Minimize all"
msgstr "Ελαχιστοποίηση όλων"
#: extensions/window-list/extension.js:647
#: extensions/window-list/extension.js:489
msgid "Unminimize all"
msgstr "Αποελαχιστοποίηση όλων"
#: extensions/window-list/extension.js:653
#: extensions/window-list/extension.js:495
msgid "Maximize all"
msgstr "Μεγιστοποίηση όλων"
#: extensions/window-list/extension.js:661
#: extensions/window-list/extension.js:503
msgid "Unmaximize all"
msgstr "Απομεγιστοποίηση όλων"
#: extensions/window-list/extension.js:669
#: extensions/window-list/extension.js:511
msgid "Close all"
msgstr "Κλείσιμο όλων"
#: extensions/window-list/extension.js:911 extensions/window-list/prefs.js:24
#: extensions/window-list/extension.js:795
msgid "Window List"
msgstr "Λίστα παραθύρου"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:18
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12
msgid "When to group windows"
msgstr "Πότε θα ομαδοποιούνται τα παράθυρα"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:19
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
msgid ""
"Decides when to group windows from the same application on the window list. "
"Possible values are “never”, “auto” and “always”."
@@ -296,21 +217,21 @@ msgstr ""
"παραθύρου. Δυνατές τιμές είναι «never» (ποτέ), «auto» (αυτόματα) και "
"«always» (πάντα)."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26
#: extensions/window-list/prefs.js:75
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
#: extensions/window-list/prefs.js:79
msgid "Show windows from all workspaces"
msgstr "Εμφάνιση των παραθύρων από όλους τους χώρους εργασίας"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
msgid "Whether to show windows from all workspaces or only the current one."
msgstr ""
"Αν θα εμφανίζονται παράθυρα όλων των χώρων εργασίας ή μόνο του τρέχοντα."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:33
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
msgid "Show the window list on all monitors"
msgstr "Να εμφανίζεται ο κατάλογος παραθύρων σε όλες τις οθόνες"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:34
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:28
msgid ""
"Whether to show the window list on all connected monitors or only on the "
"primary one."
@@ -318,73 +239,44 @@ msgstr ""
"Αν θα εμφανίζεται ο κατάλογος παραθύρων όλων των συνδεμένων οθονών ή μόνο "
"της κύριας οθόνης."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:41
msgid "Show workspace previews in window list"
msgstr "Εμφάνιση προεπισκοπήσεων χώρου εργασίας στη λίστα παραθύρου"
#: extensions/window-list/prefs.js:42
#: extensions/window-list/prefs.js:35
msgid "Window Grouping"
msgstr "Ομαδοποίηση παραθύρου"
#: extensions/window-list/prefs.js:47
#: extensions/window-list/prefs.js:40
msgid "Never group windows"
msgstr "Να μη γίνεται ποτέ ομαδοποίηση παραθύρων"
#: extensions/window-list/prefs.js:48
#: extensions/window-list/prefs.js:41
msgid "Group windows when space is limited"
msgstr "Ομαδοποίηση παραθύρων όταν ο χώρος είναι περιορισμένος"
#: extensions/window-list/prefs.js:49
#: extensions/window-list/prefs.js:42
msgid "Always group windows"
msgstr "Να γίνεται πάντα ομαδοποίηση παραθύρων"
#: extensions/window-list/prefs.js:69
#: extensions/window-list/prefs.js:66
msgid "Show on all monitors"
msgstr "Να εμφανίζεται σε όλες τις οθόνες"
#: extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml:12
msgid "Show workspace previews in top bar"
msgstr "Εμφάνιση προεπισκοπήσεων χώρου εργασίας στην επάνω μπάρα"
#: extensions/workspace-indicator/workspaceIndicator.js:430
#: extensions/window-list/workspaceIndicator.js:261
#: extensions/workspace-indicator/extension.js:266
msgid "Workspace Indicator"
msgstr "Δείκτης χώρου εργασίας"
#: extensions/workspace-indicator/workspacePrefs.js:29
msgid "Show Previews"
msgstr "Εμφάνιση προεπισκοπήσεων"
#: extensions/workspace-indicator/workspacePrefs.js:87
#: extensions/workspace-indicator/prefs.js:62
#, javascript-format
msgid "Workspace %d"
msgstr "Χώρος εργασίας %d"
#: extensions/workspace-indicator/workspacePrefs.js:154
#: extensions/workspace-indicator/prefs.js:129
msgid "Workspace Names"
msgstr "Ονόματα χώρων εργασίας"
#: extensions/workspace-indicator/workspacePrefs.js:171
#: extensions/workspace-indicator/prefs.js:255
msgid "Add Workspace"
msgstr "Προσθήκη χώρου εργασίας"
#: extensions/workspace-indicator/workspacePrefs.js:196
msgid "Remove"
msgstr "Αφαίρεση"
#: extensions/workspace-indicator/workspacePrefs.js:226
#| msgid "Workspace %d"
msgid "Workspaces"
msgstr "Χώροι εργασίας"
#~ msgid "Computer"
#~ msgstr "Υπολογιστής"
#~ msgid "Browse Network"
#~ msgstr "Περιήγηση δικτύου"
#~ msgid "Applications"
#~ msgstr "Εφαρμογές"
#~ msgid "Application"
#~ msgstr "Εφαρμογή"
@@ -470,6 +362,12 @@ msgstr "Χώροι εργασίας"
#~ "λειτουργικότητα από μόνο του.\n"
#~ "Παρ' όλα αυτά είναι δυνατό να προσαρμόσετε το μήνυμα χαιρετισμού."
#~ msgid "CPU"
#~ msgstr "CPU"
#~ msgid "Memory"
#~ msgstr "Μνήμη"
#~ msgid "GNOME Shell Classic"
#~ msgstr "GNOME Shell Classic"
@@ -520,8 +418,8 @@ msgstr "Χώροι εργασίας"
#~ msgid ""
#~ "Configures how the windows are shown in the switcher. Valid possibilities "
#~ "are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-only' "
#~ "(shows only the application icon) or 'both'."
#~ "are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
#~ "only' (shows only the application icon) or 'both'."
#~ msgstr ""
#~ "Διαμορφώνει πως τα παράθυρα θα εμφανίζονται στν εναλλαγή των παραθύρων. "
#~ "Έγκυρες ρυθμίσεις είναι 'thumbnail-only' (εμφανίζει μια μικρογραφία του "
@@ -603,6 +501,9 @@ msgstr "Χώροι εργασίας"
#~ msgid "Bookmarks"
#~ msgstr "Σελιδοδείκτες"
#~ msgid "Network"
#~ msgstr "Δίκτυο"
#~ msgid "File System"
#~ msgstr "Σύστημα αρχείων"

View File

@@ -5,23 +5,22 @@
# Chris Leonard <cjlhomeaddress@gmail.com>, 2012.
# Philip Withnall <philip@tecnocode.co.uk>, 2014.
# Zander Brown <zbrown@gnome.org>, 2019-2020.
# Andi Chandler <andi@gowling.com>, 2024.
#
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell-extensions\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
"issues\n"
"POT-Creation-Date: 2024-04-29 15:27+0000\n"
"PO-Revision-Date: 2024-08-13 20:40+0100\n"
"Last-Translator: Andi Chandler <andi@gowling.com>\n"
"POT-Creation-Date: 2023-08-05 15:59+0000\n"
"PO-Revision-Date: 2023-09-06 12:13+0100\n"
"Last-Translator: Bruce Cowan <bruce@bcowan.me.uk>\n"
"Language-Team: English - United Kingdom <en_GB@li.org>\n"
"Language: en_GB\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: Poedit 3.4.2\n"
"X-Generator: Poedit 3.3.1\n"
"X-Project-Style: gnome\n"
#: data/gnome-classic.desktop.in:3
@@ -34,26 +33,28 @@ msgid "This session logs you into GNOME Classic"
msgstr "This session logs you into GNOME Classic"
#: data/gnome-classic-wayland.desktop.in:3
#| msgid "GNOME Classic"
msgid "GNOME Classic on Wayland"
msgstr "GNOME Classic on Wayland"
#: data/gnome-classic-xorg.desktop.in:3
#| msgid "GNOME Classic"
msgid "GNOME Classic on Xorg"
msgstr "GNOME Classic on Xorg"
#: extensions/apps-menu/extension.js:126
#: extensions/apps-menu/extension.js:118
msgid "Favorites"
msgstr "Favourites"
#: extensions/apps-menu/extension.js:400
msgid "Apps"
msgstr "Apps"
#: extensions/apps-menu/extension.js:380
msgid "Applications"
msgstr "Applications"
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:12
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6
msgid "Application and workspace list"
msgstr "Application and workspace list"
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:13
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:7
msgid ""
"A list of strings, each containing an application id (desktop file name), "
"followed by a colon and the workspace number"
@@ -61,34 +62,34 @@ msgstr ""
"A list of strings, each containing an application id (desktop file name), "
"followed by a colon and the workspace number"
#: extensions/auto-move-windows/prefs.js:159
#: extensions/auto-move-windows/prefs.js:152
msgid "Workspace Rules"
msgstr "Workspace Rules"
#: extensions/auto-move-windows/prefs.js:314
#: extensions/auto-move-windows/prefs.js:306
msgid "Add Rule"
msgstr "Add Rule"
#. TRANSLATORS: %s is the filesystem name
#: extensions/drive-menu/extension.js:123
#: extensions/places-menu/placeDisplay.js:218
#: extensions/drive-menu/extension.js:126
#: extensions/places-menu/placeDisplay.js:212
#, javascript-format
msgid "Ejecting drive “%s” failed:"
msgstr "Ejecting drive “%s” failed:"
#: extensions/drive-menu/extension.js:142
#: extensions/drive-menu/extension.js:145
msgid "Removable devices"
msgstr "Removable devices"
#: extensions/drive-menu/extension.js:164
#: extensions/drive-menu/extension.js:167
msgid "Open Files"
msgstr "Open Files"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
msgid "Use more screen for windows"
msgstr "Use more screen for windows"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:6
msgid ""
"Try to use more screen for placing window thumbnails by adapting to screen "
"aspect ratio, and consolidating them further to reduce the bounding box. "
@@ -98,11 +99,11 @@ msgstr ""
"aspect ratio, and consolidating them further to reduce the bounding box. "
"This setting applies only with the natural placement strategy."
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:17
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
msgid "Place window captions on top"
msgstr "Place window captions on top"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:18
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
msgid ""
"If true, place window captions on top the respective thumbnail, overriding "
"shell default of placing it at the bottom. Changing this setting requires "
@@ -112,119 +113,47 @@ msgstr ""
"shell default of placing it at the bottom. Changing this setting requires "
"restarting the shell to have any effect."
#: extensions/places-menu/extension.js:91
#: extensions/places-menu/extension.js:94
#: extensions/places-menu/extension.js:97
msgid "Places"
msgstr "Places"
#: extensions/places-menu/placeDisplay.js:60
#: extensions/places-menu/placeDisplay.js:52
#, javascript-format
msgid "Failed to launch “%s”"
msgstr "Failed to launch “%s”"
#: extensions/places-menu/placeDisplay.js:75
#: extensions/places-menu/placeDisplay.js:67
#, javascript-format
msgid "Failed to mount volume for “%s”"
msgstr "Failed to mount volume for “%s”"
#: extensions/places-menu/placeDisplay.js:135
#: extensions/places-menu/placeDisplay.js:158
#: extensions/places-menu/placeDisplay.js:127
#: extensions/places-menu/placeDisplay.js:150
msgid "Computer"
msgstr "Computer"
#: extensions/places-menu/placeDisplay.js:333
#: extensions/places-menu/placeDisplay.js:340
msgid "Home"
msgstr "Home"
#: extensions/places-menu/placeDisplay.js:378
#: extensions/places-menu/placeDisplay.js:385
msgid "Browse Network"
msgstr "Browse Network"
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:14
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7
msgid "Cycle Screenshot Sizes"
msgstr "Cycle Screenshot Sizes"
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:18
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
msgid "Cycle Screenshot Sizes Backward"
msgstr "Cycle Screenshot Sizes Backward"
#: extensions/system-monitor/extension.js:135
msgid "CPU stats"
msgstr "CPU stats"
#: extensions/system-monitor/extension.js:159
msgid "Memory stats"
msgstr "Memory stats"
#: extensions/system-monitor/extension.js:177
msgid "Swap stats"
msgstr "Swap stats"
#: extensions/system-monitor/extension.js:336
msgid "Upload stats"
msgstr "Upload stats"
#: extensions/system-monitor/extension.js:350
msgid "Download stats"
msgstr "Download stats"
#: extensions/system-monitor/extension.js:364
msgid "System stats"
msgstr "System stats"
#: extensions/system-monitor/extension.js:412
msgid "Show"
msgstr "Show"
#: extensions/system-monitor/extension.js:414
msgid "CPU"
msgstr "CPU"
#: extensions/system-monitor/extension.js:416
msgid "Memory"
msgstr "Memory"
#: extensions/system-monitor/extension.js:418
msgid "Swap"
msgstr "Swap"
#: extensions/system-monitor/extension.js:420
msgid "Upload"
msgstr "Upload"
#: extensions/system-monitor/extension.js:422
msgid "Download"
msgstr "Download"
#: extensions/system-monitor/extension.js:427
msgid "Open System Monitor"
msgstr "Open System Monitor"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:12
msgid "Show CPU usage"
msgstr "Show CPU usage"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:16
msgid "Show memory usage"
msgstr "Show memory usage"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:20
msgid "Show swap usage"
msgstr "Show swap usage"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:24
msgid "Show upload"
msgstr "Show upload"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:28
msgid "Show download"
msgstr "Show download"
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:11
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5
msgid "Theme name"
msgstr "Theme name"
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:12
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
@@ -232,51 +161,51 @@ msgstr "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgid "Close"
msgstr "Close"
#: extensions/window-list/extension.js:99
#: extensions/window-list/extension.js:92
msgid "Unminimize"
msgstr "Unminimise"
#: extensions/window-list/extension.js:99
#: extensions/window-list/extension.js:92
msgid "Minimize"
msgstr "Minimise"
#: extensions/window-list/extension.js:106
#: extensions/window-list/extension.js:99
msgid "Unmaximize"
msgstr "Unmaximise"
#: extensions/window-list/extension.js:106
#: extensions/window-list/extension.js:99
msgid "Maximize"
msgstr "Maximise"
#: extensions/window-list/extension.js:471
#: extensions/window-list/extension.js:483
msgid "Minimize all"
msgstr "Minimise all"
#: extensions/window-list/extension.js:477
#: extensions/window-list/extension.js:489
msgid "Unminimize all"
msgstr "Unminimise all"
#: extensions/window-list/extension.js:483
#: extensions/window-list/extension.js:495
msgid "Maximize all"
msgstr "Maximise all"
#: extensions/window-list/extension.js:491
#: extensions/window-list/extension.js:503
msgid "Unmaximize all"
msgstr "Unmaximise all"
#: extensions/window-list/extension.js:499
#: extensions/window-list/extension.js:511
msgid "Close all"
msgstr "Close all"
#: extensions/window-list/extension.js:778
#: extensions/window-list/extension.js:795
msgid "Window List"
msgstr "Window List"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:18
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12
msgid "When to group windows"
msgstr "When to group windows"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:19
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
msgid ""
"Decides when to group windows from the same application on the window list. "
"Possible values are “never”, “auto” and “always”."
@@ -284,20 +213,20 @@ msgstr ""
"Decides when to group windows from the same application on the window list. "
"Possible values are “never”, “auto” and “always”."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
#: extensions/window-list/prefs.js:79
msgid "Show windows from all workspaces"
msgstr "Show windows from all workspaces"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
msgid "Whether to show windows from all workspaces or only the current one."
msgstr "Whether to show windows from all workspaces or only the current one."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:33
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
msgid "Show the window list on all monitors"
msgstr "Show the window list on all monitors"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:34
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:28
msgid ""
"Whether to show the window list on all connected monitors or only on the "
"primary one."
@@ -305,10 +234,6 @@ msgstr ""
"Whether to show the window list on all connected monitors or only on the "
"primary one."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:41
msgid "Show workspace previews in window list"
msgstr "Show workspace previews in window list"
#: extensions/window-list/prefs.js:35
msgid "Window Grouping"
msgstr "Window Grouping"
@@ -329,38 +254,24 @@ msgstr "Always group windows"
msgid "Show on all monitors"
msgstr "Show on all monitors"
#: extensions/window-list/prefs.js:92
msgid "Show workspace previews"
msgstr "Show workspace previews"
#: extensions/window-list/workspaceIndicator.js:261
#: extensions/workspace-indicator/extension.js:266
msgid "Workspace Indicator"
msgstr "Workspace Indicator"
#: extensions/workspace-indicator/prefs.js:30
msgid "Show Previews In Top Bar"
msgstr "Show Previews In Top Bar"
#: extensions/workspace-indicator/prefs.js:88
#: extensions/workspace-indicator/prefs.js:62
#, javascript-format
msgid "Workspace %d"
msgstr "Workspace %d"
#: extensions/workspace-indicator/prefs.js:155
#: extensions/workspace-indicator/prefs.js:129
msgid "Workspace Names"
msgstr "Workspace Names"
#: extensions/workspace-indicator/prefs.js:281
#: extensions/workspace-indicator/prefs.js:255
msgid "Add Workspace"
msgstr "Add Workspace"
#: extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml:12
msgid "Show workspace previews in top bar"
msgstr "Show workspace previews in top bar"
#: extensions/workspace-indicator/workspaceIndicator.js:430
msgid "Workspace Indicator"
msgstr "Workspace Indicator"
#~ msgid "Applications"
#~ msgstr "Applications"
#~ msgid "Application"
#~ msgstr "Application"
@@ -450,6 +361,12 @@ msgstr "Workspace Indicator"
#~ msgid "Window management and application launching"
#~ msgstr "Window management and application launching"
#~ msgid "CPU"
#~ msgstr "CPU"
#~ msgid "Memory"
#~ msgstr "Memory"
#~ msgid "The application icon mode."
#~ msgstr "The application icon mode."

225
po/es.po
View File

@@ -4,24 +4,23 @@
# Jorge González <jorgegonz@svn.gnome.org>, 2011.
# Nicolás Satragno <nsatragno@gmail.com>, 2011.
#
# Daniel Mustieles <daniel.mustieles@gmail.com>, 2011-2024.
# Daniel Mustieles García <daniel.mustieles@gmail.com>, 2024.
# Daniel Mustieles <daniel.mustieles@gmail.com>, 2011-2021.
#
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell-extensions master\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
"issues\n"
"POT-Creation-Date: 2024-04-29 15:27+0000\n"
"PO-Revision-Date: 2024-09-03 11:21+0200\n"
"Last-Translator: Daniel Mustieles García <daniel.mustieles@gmail.com>\n"
"POT-Creation-Date: 2021-11-06 14:08+0000\n"
"PO-Revision-Date: 2021-11-26 17:58+0100\n"
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
"Language-Team: Spanish - Spain <gnome-es-list@gnome.org>\n"
"Language: es_ES\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 46.1\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Gtranslator 41.0\n"
#: data/gnome-classic.desktop.in:3
msgid "GNOME Classic"
@@ -33,26 +32,28 @@ msgid "This session logs you into GNOME Classic"
msgstr "Esta sesión inicia GNOME clásico"
#: data/gnome-classic-wayland.desktop.in:3
#| msgid "GNOME Classic"
msgid "GNOME Classic on Wayland"
msgstr "GNOME clásico en Wayland"
#: data/gnome-classic-xorg.desktop.in:3
#| msgid "GNOME Classic"
msgid "GNOME Classic on Xorg"
msgstr "GNOME clásicoen Xorg"
#: extensions/apps-menu/extension.js:126
#: extensions/apps-menu/extension.js:112
msgid "Favorites"
msgstr "Favoritos"
#: extensions/apps-menu/extension.js:400
msgid "Apps"
#: extensions/apps-menu/extension.js:366
msgid "Applications"
msgstr "Aplicaciones"
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:12
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6
msgid "Application and workspace list"
msgstr "Lista de aplicaciones y áreas de trabajo"
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:13
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:7
msgid ""
"A list of strings, each containing an application id (desktop file name), "
"followed by a colon and the workspace number"
@@ -60,34 +61,34 @@ msgstr ""
"Una lista de cadenas, conteniendo cada una un ID de aplicación (nombre de "
"archivo de escritorio), seguido de dos puntos y el número del área de trabajo"
#: extensions/auto-move-windows/prefs.js:159
#: extensions/auto-move-windows/prefs.js:34
msgid "Workspace Rules"
msgstr "Reglas de las áreas de trabajo"
#: extensions/auto-move-windows/prefs.js:314
#: extensions/auto-move-windows/prefs.js:236
msgid "Add Rule"
msgstr "Añadir regla"
#. TRANSLATORS: %s is the filesystem name
#: extensions/drive-menu/extension.js:123
#: extensions/places-menu/placeDisplay.js:218
#: extensions/drive-menu/extension.js:133
#: extensions/places-menu/placeDisplay.js:233
#, javascript-format
msgid "Ejecting drive “%s” failed:"
msgstr "Falló al expulsar el dispositivo «%s»:"
#: extensions/drive-menu/extension.js:142
#: extensions/drive-menu/extension.js:149
msgid "Removable devices"
msgstr "Dispositivos extraíbles"
#: extensions/drive-menu/extension.js:164
#: extensions/drive-menu/extension.js:171
msgid "Open Files"
msgstr "Abrir archivos"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
msgid "Use more screen for windows"
msgstr "Usar más pantalla para las ventanas"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:6
msgid ""
"Try to use more screen for placing window thumbnails by adapting to screen "
"aspect ratio, and consolidating them further to reduce the bounding box. "
@@ -97,11 +98,11 @@ msgstr ""
"forma de la pantalla, y consolidarlas aún más para reducir el área ocupada. "
"Esta opción sólo se aplica a la estrategia de posicionamiento «natural»."
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:17
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
msgid "Place window captions on top"
msgstr "Situar los títulos de ventanas arriba"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:18
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
msgid ""
"If true, place window captions on top the respective thumbnail, overriding "
"shell default of placing it at the bottom. Changing this setting requires "
@@ -112,119 +113,47 @@ msgstr ""
"los sitúa por debajo. Cambiar esta configuración requiere reiniciar la shell "
"para que tenga efecto."
#: extensions/places-menu/extension.js:88
#: extensions/places-menu/extension.js:91
#: extensions/places-menu/extension.js:94
msgid "Places"
msgstr "Lugares"
#: extensions/places-menu/placeDisplay.js:60
#: extensions/places-menu/placeDisplay.js:46
#, javascript-format
msgid "Failed to launch “%s”"
msgstr "Falló al lanzar «%s»"
#: extensions/places-menu/placeDisplay.js:75
#: extensions/places-menu/placeDisplay.js:61
#, javascript-format
msgid "Failed to mount volume for “%s”"
msgstr "Falló al montar el volumen para «%s»"
#: extensions/places-menu/placeDisplay.js:135
#: extensions/places-menu/placeDisplay.js:158
#: extensions/places-menu/placeDisplay.js:148
#: extensions/places-menu/placeDisplay.js:171
msgid "Computer"
msgstr "Equipo"
#: extensions/places-menu/placeDisplay.js:333
#: extensions/places-menu/placeDisplay.js:359
msgid "Home"
msgstr "Carpeta personal"
#: extensions/places-menu/placeDisplay.js:378
#: extensions/places-menu/placeDisplay.js:404
msgid "Browse Network"
msgstr "Examinar la red"
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:14
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7
msgid "Cycle Screenshot Sizes"
msgstr "Tamaños de capturas de pantalla cíclicos"
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:18
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
msgid "Cycle Screenshot Sizes Backward"
msgstr "Tamaños de capturas de pantalla cíclicos"
#: extensions/system-monitor/extension.js:135
msgid "CPU stats"
msgstr "Estadísticas de la CPU"
#: extensions/system-monitor/extension.js:159
msgid "Memory stats"
msgstr "Estadísticas de la memoria"
#: extensions/system-monitor/extension.js:177
msgid "Swap stats"
msgstr "Estadísticas del área de intercambio"
#: extensions/system-monitor/extension.js:336
msgid "Upload stats"
msgstr "Actualizar estadísticas"
#: extensions/system-monitor/extension.js:350
msgid "Download stats"
msgstr "Descargar estadísticas"
#: extensions/system-monitor/extension.js:364
msgid "System stats"
msgstr "Estadísticas del sistema"
#: extensions/system-monitor/extension.js:412
msgid "Show"
msgstr "Mostrar"
#: extensions/system-monitor/extension.js:414
msgid "CPU"
msgstr "CPU"
#: extensions/system-monitor/extension.js:416
msgid "Memory"
msgstr "Memoria"
#: extensions/system-monitor/extension.js:418
msgid "Swap"
msgstr "Área de intercambio"
#: extensions/system-monitor/extension.js:420
msgid "Upload"
msgstr "Subir"
#: extensions/system-monitor/extension.js:422
msgid "Download"
msgstr "Descargar"
#: extensions/system-monitor/extension.js:427
msgid "Open System Monitor"
msgstr "Abrir el monitor del sistema"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:12
msgid "Show CPU usage"
msgstr "Mostrar el uso de CPU"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:16
msgid "Show memory usage"
msgstr "Mostrar el uso de memoria"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:20
msgid "Show swap usage"
msgstr "Mostrar el uso del área de intercambio"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:24
msgid "Show upload"
msgstr "Mostrar subida"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:28
msgid "Show download"
msgstr "Mostrar descarga"
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:11
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5
msgid "Theme name"
msgstr "Nombre del tema"
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:12
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr "El nombre del tema, que se carga desde ~/.themes/nombre/gnome-shell"
@@ -232,51 +161,51 @@ msgstr "El nombre del tema, que se carga desde ~/.themes/nombre/gnome-shell"
msgid "Close"
msgstr "Cerrar"
#: extensions/window-list/extension.js:99
#: extensions/window-list/extension.js:92
msgid "Unminimize"
msgstr "Desminimizar"
#: extensions/window-list/extension.js:99
#: extensions/window-list/extension.js:92
msgid "Minimize"
msgstr "Minimizar"
#: extensions/window-list/extension.js:106
#: extensions/window-list/extension.js:99
msgid "Unmaximize"
msgstr "Desmaximizar"
#: extensions/window-list/extension.js:106
#: extensions/window-list/extension.js:99
msgid "Maximize"
msgstr "Maximizar"
#: extensions/window-list/extension.js:471
#: extensions/window-list/extension.js:434
msgid "Minimize all"
msgstr "Minimizar todo"
#: extensions/window-list/extension.js:477
#: extensions/window-list/extension.js:440
msgid "Unminimize all"
msgstr "Desminimizar todo"
#: extensions/window-list/extension.js:483
#: extensions/window-list/extension.js:446
msgid "Maximize all"
msgstr "Maximizar todo"
#: extensions/window-list/extension.js:491
#: extensions/window-list/extension.js:454
msgid "Unmaximize all"
msgstr "Desmaximizar todo"
#: extensions/window-list/extension.js:499
#: extensions/window-list/extension.js:462
msgid "Close all"
msgstr "Cerrar todo"
#: extensions/window-list/extension.js:778
#: extensions/window-list/extension.js:741
msgid "Window List"
msgstr "Lista de ventanas"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:18
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12
msgid "When to group windows"
msgstr "Cuándo agrupar las ventanas"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:19
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
msgid ""
"Decides when to group windows from the same application on the window list. "
"Possible values are “never”, “auto” and “always”."
@@ -284,22 +213,22 @@ msgstr ""
"Decide cuándo agrupar ventanas para la misma aplicación en la lista de "
"ventanas. Los valores posibles son «never», «auto» y «always»."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26
#: extensions/window-list/prefs.js:79
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
#: extensions/window-list/prefs.js:86
msgid "Show windows from all workspaces"
msgstr "Mostrar ventanas de todas las áreas de trabajo"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
msgid "Whether to show windows from all workspaces or only the current one."
msgstr ""
"Indica si se deben mostrar ventanas de todas las áreas de trabajo o sólo de "
"la actual."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:33
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
msgid "Show the window list on all monitors"
msgstr "Mostrar la lista de ventanas en todas las pantallas"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:34
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:28
msgid ""
"Whether to show the window list on all connected monitors or only on the "
"primary one."
@@ -307,62 +236,44 @@ msgstr ""
"Indica si se debe mostrar la lista de ventanas en todas las pantallas "
"conectadas o sólo en la primaria."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:41
msgid "Show workspace previews in window list"
msgstr "Mostrar vistas previas de las áreas de trabajo en la lista de ventanas"
#: extensions/window-list/prefs.js:35
#: extensions/window-list/prefs.js:39
msgid "Window Grouping"
msgstr "Agrupación de ventanas"
#: extensions/window-list/prefs.js:40
#: extensions/window-list/prefs.js:63
msgid "Never group windows"
msgstr "Nunca agrupar las ventanas"
#: extensions/window-list/prefs.js:41
#: extensions/window-list/prefs.js:64
msgid "Group windows when space is limited"
msgstr "Agrupar las ventanas cuando el espacio esté limitado"
#: extensions/window-list/prefs.js:42
#: extensions/window-list/prefs.js:65
msgid "Always group windows"
msgstr "Siempre agrupar las ventanas"
#: extensions/window-list/prefs.js:66
#: extensions/window-list/prefs.js:81
msgid "Show on all monitors"
msgstr "Mostrar en todas las pantallas"
#: extensions/window-list/prefs.js:92
msgid "Show workspace previews"
msgstr "Mostrar vistas previas de las áreas de trabajo"
#: extensions/window-list/workspaceIndicator.js:249
#: extensions/workspace-indicator/extension.js:254
msgid "Workspace Indicator"
msgstr "Indicador de área de trabajo"
#: extensions/workspace-indicator/prefs.js:30
msgid "Show Previews In Top Bar"
msgstr "Mostrar vistas previas en la barra superior"
#: extensions/workspace-indicator/prefs.js:33
msgid "Workspace Names"
msgstr "Nombres de los áreas de trabajo"
#: extensions/workspace-indicator/prefs.js:88
#: extensions/workspace-indicator/prefs.js:66
#, javascript-format
msgid "Workspace %d"
msgstr "Área de trabajo %d"
#: extensions/workspace-indicator/prefs.js:155
msgid "Workspace Names"
msgstr "Nombres de los áreas de trabajo"
#: extensions/workspace-indicator/prefs.js:281
#: extensions/workspace-indicator/prefs.js:207
msgid "Add Workspace"
msgstr "Añadir área de trabajo"
#: extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml:12
msgid "Show workspace previews in top bar"
msgstr "Mostrar áreas de trabajo en la barra superior"
#: extensions/workspace-indicator/workspaceIndicator.js:430
msgid "Workspace Indicator"
msgstr "Indicador de área de trabajo"
#~ msgid "Applications"
#~ msgstr "Aplicaciones"
#~ msgid "Application"
#~ msgstr "Aplicación"
@@ -450,6 +361,12 @@ msgstr "Indicador de área de trabajo"
#~ "solo.\n"
#~ "Sin embargo, es posible personalizar el mensaje de bienvenida."
#~ msgid "CPU"
#~ msgstr "CPU"
#~ msgid "Memory"
#~ msgstr "Memoria"
#~ msgid "GNOME Shell Classic"
#~ msgstr "GNOME Shell clásico"

346
po/eu.po
View File

@@ -5,415 +5,256 @@
# assar <asiersar@yahoo.com>, 2011.
# Iñaki Larrañaga Murgoitio <dooteo@zundan.com>, 2011, 2013, 2015, 2017.
# Edurne Labaka <elabaka@uzei.com>, 2015.
# Asier Sarasua Garmendia <asiersarasua@ni.eus>, 2019, 2020, 2021, 2024.
# Ibai Oihanguren Sala <ibaios@disroot.org>, 2026.
# Asier Sarasua Garmendia <asiersarasua@ni.eus>, 2019, 2020, 2021.
#
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell-extensions master\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
"issues\n"
"POT-Creation-Date: 2025-11-05 13:44+0000\n"
"PO-Revision-Date: 2026-01-11 20:54+0100\n"
"Last-Translator: Ibai Oihanguren Sala <ibaios@disroot.org>\n"
"Language-Team: Basque\n"
msgstr "Project-Id-Version: gnome-shell-extensions master\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues\n"
"POT-Creation-Date: 2021-11-06 14:08+0000\n"
"PO-Revision-Date: 2021-12-25 00:42+0200\n"
"Last-Translator: Asier Sarasua Garmendia <asiersarasua@ni.eus>\n"
"Language-Team: Basque <librezale@librezale.eus>\n"
"Language: eu\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-Project-Style: gnome\n"
"X-DL-VCS-Web: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/\n"
"X-DL-Lang: eu\n"
"X-DL-Module: gnome-shell-extensions\n"
"X-DL-Branch: main\n"
"X-DL-Domain: po\n"
"X-DL-State: None\n"
"X-Generator: Gtranslator 49.0\n"
#: data/gnome-classic.desktop.in:2
#: data/gnome-classic.desktop.in:3
msgid "GNOME Classic"
msgstr "GNOME Klasikoa"
#: data/gnome-classic.desktop.in:3 data/gnome-classic-wayland.desktop.in:3
#: data/gnome-classic-xorg.desktop.in:3
#: data/gnome-classic.desktop.in:4 data/gnome-classic-wayland.desktop.in:4
#: data/gnome-classic-xorg.desktop.in:4
msgid "This session logs you into GNOME Classic"
msgstr "Saio honek GNOME Klasikoa hasten du"
#: data/gnome-classic-wayland.desktop.in:2
#: data/gnome-classic-wayland.desktop.in:3
msgid "GNOME Classic on Wayland"
msgstr "GNOME klasikoa Wayland gainean"
#: data/gnome-classic-xorg.desktop.in:2
#: data/gnome-classic-xorg.desktop.in:3
msgid "GNOME Classic on Xorg"
msgstr "GNOME klasikoa Xorg gainean"
#: extensions/apps-menu/extension.js:118
#: extensions/apps-menu/extension.js:112
msgid "Favorites"
msgstr "Gogokoak"
#: extensions/apps-menu/extension.js:392
msgid "Apps"
#: extensions/apps-menu/extension.js:366
msgid "Applications"
msgstr "Aplikazioak"
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:12
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6
msgid "Application and workspace list"
msgstr "Aplikazioen eta laneko areen zerrenda"
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:13
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:7
msgid ""
"A list of strings, each containing an application id (desktop file name), "
"followed by a colon and the workspace number"
msgstr ""
"Kateen zerrenda bat, bakoitzak aplikazio-ID bat duena (mahaigainaren "
"fitxategi-izena) eta jarraian bi puntu eta laneko arearen zenbakia dituena"
msgstr "Kateen zerrenda bat, bakoitzak aplikazio-ID bat duena (mahaigainaren fitxategi-izena) eta jarraian bi puntu eta laneko arearen zenbakia dituena"
#: extensions/auto-move-windows/prefs.js:157
#: extensions/auto-move-windows/prefs.js:34
msgid "Workspace Rules"
msgstr "Laneko areen arauak"
#: extensions/auto-move-windows/prefs.js:312
#: extensions/auto-move-windows/prefs.js:236
msgid "Add Rule"
msgstr "Gehitu araua"
#. TRANSLATORS: %s is the filesystem name
#: extensions/drive-menu/extension.js:123
#: extensions/places-menu/placeDisplay.js:186
#: extensions/drive-menu/extension.js:133
#: extensions/places-menu/placeDisplay.js:233
#, javascript-format
msgid "Ejecting drive “%s” failed:"
msgstr "Huts egin du “%s“ unitatea egoztean:"
#: extensions/drive-menu/extension.js:142
#: extensions/drive-menu/extension.js:149
msgid "Removable devices"
msgstr "Gailu aldagarriak"
#: extensions/drive-menu/extension.js:164
#: extensions/drive-menu/extension.js:171
msgid "Open Files"
msgstr "Ireki fitxategiak"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
msgid "Use more screen for windows"
msgstr "Erabili pantaila gehiago leihoentzako"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:6
msgid ""
"Try to use more screen for placing window thumbnails by adapting to screen "
"aspect ratio, and consolidating them further to reduce the bounding box. "
"This setting applies only with the natural placement strategy."
msgstr ""
"Saiatu pantaila gehiago erabiltzen leihoen koadro txikiak kokatzeko "
"pantailaren aspektu-erlaziora egokituz, eta haiek taldekatu muga-koadroa "
"txikiagotzeko. Ezarpen hau kokapen naturalaren estrategiarekin soilik "
"aplikatzen da."
msgstr "Saiatu pantaila gehiago erabiltzen leihoen koadro txikiak kokatzeko pantailaren aspektu-erlaziora egokituz, eta haiek taldekatu muga-koadroa txikiagotzeko. Ezarpen hau kokapen naturalaren estrategiarekin soilik aplikatzen da."
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:17
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
msgid "Place window captions on top"
msgstr "Jarri leihoaren epigrafea gainean"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:18
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
msgid ""
"If true, place window captions on top the respective thumbnail, overriding "
"shell default of placing it at the bottom. Changing this setting requires "
"restarting the shell to have any effect."
msgstr ""
"TRUE (egia) bada, leihoen epigrafeak dagokien koadro txikien gainean jarriko "
"ditu, Shell-aren lehenespena (behean jartzearena) gainidatziz. Ezarpen hau "
"aldatzeko eta aplikatzeko Shell berrabiarazi behar da."
msgstr "TRUE (egia) bada, leihoen epigrafeak dagokien koadro txikien gainean jarriko ditu, Shell-aren lehenespena (behean jartzearena) gainidatziz. Ezarpen hau aldatzeko eta aplikatzeko Shell berrabiarazi behar da."
#: extensions/places-menu/extension.js:75
#: extensions/places-menu/extension.js:78
#: extensions/places-menu/extension.js:88
#: extensions/places-menu/extension.js:91
msgid "Places"
msgstr "Lekuak"
#: extensions/places-menu/placeDisplay.js:52
#: extensions/places-menu/placeDisplay.js:46
#, javascript-format
msgid "Failed to launch “%s”"
msgstr "Huts egin du '%s' abiarazteak"
msgstr "Huts egin du '%s' abiaraztean"
#: extensions/places-menu/placeDisplay.js:67
#: extensions/places-menu/placeDisplay.js:61
#, javascript-format
msgid "Failed to mount volume for “%s”"
msgstr "Huts egin du “%s“(r)en bolumena muntatzean"
#: extensions/places-menu/placeDisplay.js:315
#: extensions/places-menu/placeDisplay.js:148
#: extensions/places-menu/placeDisplay.js:171
msgid "Computer"
msgstr "Ordenagailua"
#: extensions/places-menu/placeDisplay.js:359
msgid "Home"
msgstr "Karpeta nagusia"
#: extensions/places-menu/placeDisplay.js:321
msgid "Recent"
msgstr "Azken aldikoa"
#: extensions/places-menu/placeDisplay.js:404
msgid "Browse Network"
msgstr "Arakatu sarea"
#: extensions/places-menu/placeDisplay.js:327
msgid "Starred"
msgstr "Izardunak"
#: extensions/places-menu/placeDisplay.js:347
msgid "Network"
msgstr "Sarea"
#: extensions/places-menu/placeDisplay.js:354
msgid "Trash"
msgstr "Zakarrontzia"
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:14
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7
msgid "Cycle Screenshot Sizes"
msgstr "Pantaila-argazkien tamainak begiztan"
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:18
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
msgid "Cycle Screenshot Sizes Backward"
msgstr "Pantaila-argazkien tamainak atzerantz begiztan"
#: extensions/system-monitor/extension.js:135
msgid "CPU stats"
msgstr "PUZ estatistikak"
#: extensions/system-monitor/extension.js:159
msgid "Memory stats"
msgstr "Memoriaren estatistikak"
#: extensions/system-monitor/extension.js:177
msgid "Swap stats"
msgstr "Trukatze-espazioaren estatistikak"
#: extensions/system-monitor/extension.js:336
msgid "Upload stats"
msgstr "Kargaren estatistikak"
#: extensions/system-monitor/extension.js:350
msgid "Download stats"
msgstr "Deskargaren estatistikak"
#: extensions/system-monitor/extension.js:365
msgid "System stats"
msgstr "Sistemaren estatistikak"
#: extensions/system-monitor/extension.js:413
msgid "Show"
msgstr "Erakutsi"
#: extensions/system-monitor/extension.js:415
msgid "CPU"
msgstr "PUZa"
#: extensions/system-monitor/extension.js:417
msgid "Memory"
msgstr "Memoria"
#: extensions/system-monitor/extension.js:419
msgid "Swap"
msgstr "Trukatze-espazioa"
#: extensions/system-monitor/extension.js:421
msgid "Upload"
msgstr "Kargatu"
#: extensions/system-monitor/extension.js:423
msgid "Download"
msgstr "Deskargatu"
#: extensions/system-monitor/extension.js:428
msgid "Open System Monitor"
msgstr "Ireki sistema-monitorea"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:12
msgid "Show CPU usage"
msgstr "Erakutsi PUZ erabilera"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:16
msgid "Show memory usage"
msgstr "Erakutsi memoriaren erabilera"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:20
msgid "Show swap usage"
msgstr "Erakutsi trukatze-espazioaren erabilera"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:24
msgid "Show upload"
msgstr "Erakutsi karga"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:28
msgid "Show download"
msgstr "Erakutsi deskarga"
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:11
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5
msgid "Theme name"
msgstr "Gaiaren izena"
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:12
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr "Gaiaren izena, ~/.themes/izena/gnome-shell direktoriotik kargatzeko"
#: extensions/window-list/extension.js:98
#: extensions/window-list/extension.js:72
msgid "Close"
msgstr "Itxi"
#: extensions/window-list/extension.js:125
#: extensions/window-list/extension.js:92
msgid "Unminimize"
msgstr "Leheneratu"
#: extensions/window-list/extension.js:125
#: extensions/window-list/extension.js:92
msgid "Minimize"
msgstr "Minimizatu"
#: extensions/window-list/extension.js:130
#: extensions/window-list/extension.js:99
msgid "Unmaximize"
msgstr "Desmaximizatu"
#: extensions/window-list/extension.js:130
#: extensions/window-list/extension.js:99
msgid "Maximize"
msgstr "Maximizatu"
#: extensions/window-list/extension.js:720
#: extensions/window-list/extension.js:434
msgid "Minimize all"
msgstr "Minimizatu denak"
#: extensions/window-list/extension.js:726
#: extensions/window-list/extension.js:440
msgid "Unminimize all"
msgstr "Leheneratu denak"
#: extensions/window-list/extension.js:732
#: extensions/window-list/extension.js:446
msgid "Maximize all"
msgstr "Maximizatu denak"
#: extensions/window-list/extension.js:740
#: extensions/window-list/extension.js:454
msgid "Unmaximize all"
msgstr "Desmaximizatu denak"
#: extensions/window-list/extension.js:748
#: extensions/window-list/extension.js:462
msgid "Close all"
msgstr "Itxi denak"
#: extensions/window-list/extension.js:1000 extensions/window-list/prefs.js:23
#: extensions/window-list/extension.js:741
msgid "Window List"
msgstr "Leiho-zerrenda"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:18
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12
msgid "When to group windows"
msgstr "Noiz elkartu leihoak"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:19
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
msgid ""
"Decides when to group windows from the same application on the window list. "
"Possible values are “never”, “auto” and “always”."
msgstr ""
"Aplikazio bereko leihoak leihoen zerrendan noiz elkartuko diren erabakitzen "
"du. Balio erabilgarriak: “never“ (inoiz ere ez), “auto“ (automatikoa) eta "
"“always“ (beti)."
msgstr "Aplikazio bereko leihoak leihoen zerrendan noiz elkartuko diren erabakitzen du. Balio erabilgarriak: “never“ (inoiz ere ez), “auto“ (automatikoa) eta “always“ (beti)."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26
#: extensions/window-list/prefs.js:74
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
#: extensions/window-list/prefs.js:86
msgid "Show windows from all workspaces"
msgstr "Erakutsi laneko area guztietako leihoak"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
msgid "Whether to show windows from all workspaces or only the current one."
msgstr ""
"Laneko area guztietako leihoak edo uneko areakoak soilik erakutsiko diren."
msgstr "Laneko area guztietako leihoak edo uneko areakoak soilik erakutsiko diren."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:33
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
msgid "Show the window list on all monitors"
msgstr "Erakutsi leihoen zerrenda pantaila guztietan"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:34
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:28
msgid ""
"Whether to show the window list on all connected monitors or only on the "
"primary one."
msgstr ""
"Leihoen zerrenda konektatutako pantaila guztietan edo soilik pantaila "
"nagusian erakutsiko den."
msgstr "Leihoen zerrenda konektatutako pantaila guztietan edo soilik pantaila nagusian erakutsiko den."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:41
msgid "Show workspace previews in window list"
msgstr "Erakutsi laneko areen aurrebistak leihoen zerrendan"
#: extensions/window-list/prefs.js:41
#: extensions/window-list/prefs.js:39
msgid "Window Grouping"
msgstr "Leihoak elkartzea"
msgstr "Leiho-elkartzea"
#: extensions/window-list/prefs.js:46
#: extensions/window-list/prefs.js:63
msgid "Never group windows"
msgstr "Ez elkartu leihoak inoiz"
msgstr "Leihoak inoiz ez elkartu"
#: extensions/window-list/prefs.js:47
#: extensions/window-list/prefs.js:64
msgid "Group windows when space is limited"
msgstr "Elkartu leihoak lekua mugatuta dagoenean"
#: extensions/window-list/prefs.js:48
#: extensions/window-list/prefs.js:65
msgid "Always group windows"
msgstr "Elkartu beti leihoak"
#: extensions/window-list/prefs.js:68
#: extensions/window-list/prefs.js:81
msgid "Show on all monitors"
msgstr "Erakutsi pantaila guztietan"
#: extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml:12
msgid "Show workspace previews in top bar"
msgstr "Erakutsi laneko areen aurrebistak goiko barran"
#: extensions/workspace-indicator/workspaceIndicator.js:404
#, javascript-format
msgid "Press %s to edit"
msgstr "Sakatu %s editatzeko"
#: extensions/workspace-indicator/workspaceIndicator.js:518
msgid "Settings"
msgstr "Ezarpenak"
#: extensions/workspace-indicator/workspaceIndicator.js:598
#: extensions/window-list/workspaceIndicator.js:249
#: extensions/workspace-indicator/extension.js:254
msgid "Workspace Indicator"
msgstr "Laneko arearen adierazlea"
msgstr "Lan arearen adierazlea"
#: extensions/workspace-indicator/workspacePrefs.js:20
msgid "Indicator"
msgstr "Adierazlea"
#: extensions/workspace-indicator/prefs.js:33
msgid "Workspace Names"
msgstr "Laneko areen izenak"
#: extensions/workspace-indicator/workspacePrefs.js:25
msgid "Previews"
msgstr "Aurrebistak"
#: extensions/workspace-indicator/prefs.js:66
#, javascript-format
msgid "Workspace %d"
msgstr "%d. laneko area"
#: extensions/workspace-indicator/workspacePrefs.js:35
msgid "Workspace Name"
msgstr "Laneko arearen izena"
#: extensions/workspace-indicator/workspacePrefs.js:59
msgid "Behavior"
msgstr "Portaera"
#: extensions/workspace-indicator/workspacePrefs.js:64
msgid "Dynamic"
msgstr "Dinamikoa"
#: extensions/workspace-indicator/workspacePrefs.js:65
msgid "Automatically removes empty workspaces."
msgstr "Automatikoki kentzen ditu laneko area hutsak."
#: extensions/workspace-indicator/workspacePrefs.js:75
msgid "Fixed Number"
msgstr "Kopuru finkoa"
#: extensions/workspace-indicator/workspacePrefs.js:76
msgid "Specify a number of permanent workspaces."
msgstr "Zehaztu laneko area iraunkorren kopurua."
#: extensions/workspace-indicator/workspacePrefs.js:89
msgid "Number of Workspaces"
msgstr "Laneko area kopurua"
#: extensions/workspace-indicator/workspacePrefs.js:128
msgid "Workspaces"
msgstr "Laneko areak"
#~ msgid "Computer"
#~ msgstr "Ordenagailua"
#~ msgid "Show workspace previews"
#~ msgstr "Erakutsi laneko areen aurrebistak"
#~ msgid "Show Previews In Top Bar"
#~ msgstr "Erakutsi aurrebistak goiko barran"
#~ msgid "Applications"
#~ msgstr "Aplikazioak"
#: extensions/workspace-indicator/prefs.js:207
msgid "Add Workspace"
msgstr "Gehitu laneko area"
#~ msgid "Application"
#~ msgstr "Aplikazioa"
@@ -498,6 +339,12 @@ msgstr "Laneko areak"
#~ "baxukoa da.\n"
#~ "Hala ere, ongi etorriko mezua pertsonalizatzeko aukera dago."
#~ msgid "CPU"
#~ msgstr "PUZ"
#~ msgid "Memory"
#~ msgstr "Memoria"
#~ msgid "GNOME Shell Classic"
#~ msgstr "GNOME Shell Klasikoa"
@@ -507,6 +354,9 @@ msgstr "Laneko areak"
#~ msgid "Online Accounts"
#~ msgstr "Nire kontua"
#~ msgid "System Settings"
#~ msgstr "Sistemaren konfigurazioa"
#~ msgid "Lock Screen"
#~ msgstr "Blokeatu pantaila"

300
po/fa.po
View File

@@ -2,25 +2,24 @@
# Copyright (C) 2011 Iranian Free Software Users Group (IFSUG.org) translation team.
# This file is distributed under the same license as the gnome-shell-extensions package.
# Arash Mousavi <mousavi.arash@gmail.com>, 2011-2017.
# Danial Behzadi <dani.behzi@ubuntu.com>, 2018-2025.
# Danial Behzadi <dani.behzi@ubuntu.com>, 2018-2020.
#
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell-extensions gnome-3-0\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
"issues\n"
"POT-Creation-Date: 2025-07-01 22:52+0000\n"
"PO-Revision-Date: 2025-07-29 14:01+0330\n"
"Last-Translator: Danial Behzadi <dani.behzi@ubuntu.com>\n"
"POT-Creation-Date: 2021-11-06 14:08+0000\n"
"PO-Revision-Date: 2021-11-10 16:24+0330\n"
"Last-Translator: MohammadSaleh Kamyab <mskf1383@protonmail.com>\n"
"Language-Team: Persian <>\n"
"Language: fa\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Poedit 3.6\n"
"X-DamnedLies-Scope: partial\n"
"X-Poedit-SourceCharset: utf-8\n"
"X-Generator: Poedit 2.4.2\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: data/gnome-classic.desktop.in:3
msgid "GNOME Classic"
@@ -29,7 +28,7 @@ msgstr "گنوم کلاسیک"
#: data/gnome-classic.desktop.in:4 data/gnome-classic-wayland.desktop.in:4
#: data/gnome-classic-xorg.desktop.in:4
msgid "This session logs you into GNOME Classic"
msgstr "این نشست به گنوم کلاسیک واردتان می‌کند"
msgstr "این نشست شما را به گنوم کلاسیک وارد می‌کند"
#: data/gnome-classic-wayland.desktop.in:3
msgid "GNOME Classic on Wayland"
@@ -39,19 +38,19 @@ msgstr "گنوم کلاسیک روی وی‌لند"
msgid "GNOME Classic on Xorg"
msgstr "گنوم کلاسیک روی زورگ"
#: extensions/apps-menu/extension.js:118
#: extensions/apps-menu/extension.js:112
msgid "Favorites"
msgstr "برگزیده‌ها"
#: extensions/apps-menu/extension.js:392
msgid "Apps"
msgstr "کارهها"
#: extensions/apps-menu/extension.js:366
msgid "Applications"
msgstr "برنامهها"
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:12
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6
msgid "Application and workspace list"
msgstr "فهرست برنامه و فضای‌کاری"
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:13
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:7
msgid ""
"A list of strings, each containing an application id (desktop file name), "
"followed by a colon and the workspace number"
@@ -59,34 +58,34 @@ msgstr ""
"فهرستی از رشته‌ها، هرکدام حاوی شناسه‌ی یک برنامه (نام پرونده رومیزی)، در ادامه‌ی یک "
"ویرگول و شماره‌ی فضای کاری"
#: extensions/auto-move-windows/prefs.js:156
#: extensions/auto-move-windows/prefs.js:34
msgid "Workspace Rules"
msgstr "قواعد فضای کاری"
#: extensions/auto-move-windows/prefs.js:311
#: extensions/auto-move-windows/prefs.js:236
msgid "Add Rule"
msgstr "افزودن قاعده"
#. TRANSLATORS: %s is the filesystem name
#: extensions/drive-menu/extension.js:123
#: extensions/places-menu/placeDisplay.js:186
#: extensions/drive-menu/extension.js:133
#: extensions/places-menu/placeDisplay.js:233
#, javascript-format
msgid "Ejecting drive “%s” failed:"
msgstr "بیرون دادن دیسک‌گردان «%s» شکست خورد:"
#: extensions/drive-menu/extension.js:142
#: extensions/drive-menu/extension.js:149
msgid "Removable devices"
msgstr "دستگاه‌های جداشدنی"
#: extensions/drive-menu/extension.js:164
#: extensions/drive-menu/extension.js:171
msgid "Open Files"
msgstr "گشودن پرونده‌ها"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
msgid "Use more screen for windows"
msgstr "استفاده از صفحه بیشتر برای پنجره"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:6
msgid ""
"Try to use more screen for placing window thumbnails by adapting to screen "
"aspect ratio, and consolidating them further to reduce the bounding box. This "
@@ -96,11 +95,11 @@ msgstr ""
"aspect ratio, and consolidating them further to reduce the bounding box. This "
"setting applies only with the natural placement strategy."
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:17
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
msgid "Place window captions on top"
msgstr "قراردادن عنوان پنجره در بالا"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:18
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
msgid ""
"If true, place window captions on top the respective thumbnail, overriding shell "
"default of placing it at the bottom. Changing this setting requires restarting "
@@ -110,177 +109,98 @@ msgstr ""
"شل در پایین را تغییر می‌دهد. تغییر این گزینه، نیاز به راه‌اندازی مجدد شل دارد تا "
"تاثیر بگذارد."
#: extensions/places-menu/extension.js:75 extensions/places-menu/extension.js:78
#: extensions/places-menu/extension.js:88 extensions/places-menu/extension.js:91
msgid "Places"
msgstr "مکان‌ها"
#: extensions/places-menu/placeDisplay.js:52
#: extensions/places-menu/placeDisplay.js:46
#, javascript-format
msgid "Failed to launch “%s”"
msgstr "شکست در اجرای «%s»"
#: extensions/places-menu/placeDisplay.js:67
#: extensions/places-menu/placeDisplay.js:61
#, javascript-format
msgid "Failed to mount volume for “%s”"
msgstr "شکست در سوار کردن حجم برای «%s»"
#: extensions/places-menu/placeDisplay.js:315
#: extensions/places-menu/placeDisplay.js:148
#: extensions/places-menu/placeDisplay.js:171
msgid "Computer"
msgstr "رایانه"
#: extensions/places-menu/placeDisplay.js:359
msgid "Home"
msgstr "خانه"
#: extensions/places-menu/placeDisplay.js:321
msgid "Recent"
msgstr "اخیر"
#: extensions/places-menu/placeDisplay.js:404
msgid "Browse Network"
msgstr "مرور شبکه"
#: extensions/places-menu/placeDisplay.js:327
msgid "Starred"
msgstr "ستاره دار"
#: extensions/places-menu/placeDisplay.js:347
msgid "Network"
msgstr "شبکه"
#: extensions/places-menu/placeDisplay.js:354
msgid "Trash"
msgstr "زباله‌دان"
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:14
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7
msgid "Cycle Screenshot Sizes"
msgstr "تغییر اندازه تصاویر صفحه‌نمایش"
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:18
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
msgid "Cycle Screenshot Sizes Backward"
msgstr "حرکت برعکس بین اندازه تصاویر صفحه‌نمایش"
#: extensions/system-monitor/extension.js:135
msgid "CPU stats"
msgstr "آمار پردازنده"
#: extensions/system-monitor/extension.js:159
msgid "Memory stats"
msgstr "آمار حافظه"
#: extensions/system-monitor/extension.js:177
msgid "Swap stats"
msgstr "آمار مبادله"
#: extensions/system-monitor/extension.js:336
msgid "Upload stats"
msgstr "آمار بارگذاری"
#: extensions/system-monitor/extension.js:350
msgid "Download stats"
msgstr "آمار بارگیری"
#: extensions/system-monitor/extension.js:364
msgid "System stats"
msgstr "آمار سامانه"
#: extensions/system-monitor/extension.js:412
msgid "Show"
msgstr "نمایش"
#: extensions/system-monitor/extension.js:414
msgid "CPU"
msgstr "سی‌پی‌یو"
#: extensions/system-monitor/extension.js:416
msgid "Memory"
msgstr "حافظه"
#: extensions/system-monitor/extension.js:418
msgid "Swap"
msgstr "مبادله"
#: extensions/system-monitor/extension.js:420
msgid "Upload"
msgstr "بارگذاری"
#: extensions/system-monitor/extension.js:422
msgid "Download"
msgstr "بارگیری"
#: extensions/system-monitor/extension.js:427
msgid "Open System Monitor"
msgstr "گشودن پایشگر سامانه"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:12
msgid "Show CPU usage"
msgstr "نمایش استفادهٔ پردازنده"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:16
msgid "Show memory usage"
msgstr "نمایش استفادهٔ حافظه"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:20
msgid "Show swap usage"
msgstr "نمایش استفادهٔ مبادله"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:24
msgid "Show upload"
msgstr "نمایش بارگذاری"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:28
msgid "Show download"
msgstr "نمایش بارگیری"
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:11
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5
msgid "Theme name"
msgstr "نام تم"
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:12
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr "نام تم، جهت بارگیری از شاخه themes/name/gnome-shell./~"
#: extensions/window-list/extension.js:98
#: extensions/window-list/extension.js:72
msgid "Close"
msgstr "خروج"
#: extensions/window-list/extension.js:125
#: extensions/window-list/extension.js:92
msgid "Unminimize"
msgstr "ناکمینه"
#: extensions/window-list/extension.js:125
#: extensions/window-list/extension.js:92
msgid "Minimize"
msgstr "کمینه"
#: extensions/window-list/extension.js:130
#: extensions/window-list/extension.js:99
msgid "Unmaximize"
msgstr "نابیشینه"
#: extensions/window-list/extension.js:130
#: extensions/window-list/extension.js:99
msgid "Maximize"
msgstr "بیشنه"
#: extensions/window-list/extension.js:720
#: extensions/window-list/extension.js:434
msgid "Minimize all"
msgstr "کمینهٔ همه"
#: extensions/window-list/extension.js:726
#: extensions/window-list/extension.js:440
msgid "Unminimize all"
msgstr "ناکمینهٔ همه"
#: extensions/window-list/extension.js:732
#: extensions/window-list/extension.js:446
msgid "Maximize all"
msgstr "بیشینهٔ همه"
#: extensions/window-list/extension.js:740
#: extensions/window-list/extension.js:454
msgid "Unmaximize all"
msgstr "نابیشینهٔ همه"
#: extensions/window-list/extension.js:748
#: extensions/window-list/extension.js:462
msgid "Close all"
msgstr "بستن همه"
#: extensions/window-list/extension.js:1000 extensions/window-list/prefs.js:23
#: extensions/window-list/extension.js:741
msgid "Window List"
msgstr "فهرست پنجره"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:18
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12
msgid "When to group windows"
msgstr "زمان گروه کردن پنجره‌ها"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:19
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
msgid ""
"Decides when to group windows from the same application on the window list. "
"Possible values are “never”, “auto” and “always”."
@@ -288,20 +208,20 @@ msgstr ""
"تصمیم می‌گیرد چه زمانی پنجره‌های یک برنامه در فهرست پنجره‌ها گروه شوند. مقدارهای "
"ممکن عبارتند از «never»، «auto» و «always»."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26
#: extensions/window-list/prefs.js:74
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
#: extensions/window-list/prefs.js:86
msgid "Show windows from all workspaces"
msgstr "نمایش پنجره‌ها از تمام فضاهای کاری"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
msgid "Whether to show windows from all workspaces or only the current one."
msgstr "این که پنجره‌ها از تمام فضاهای کاری نمایش داده شود یا فقط فضای کاری فعلی."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:33
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
msgid "Show the window list on all monitors"
msgstr "نمایش فهرست پنجره‌ها در تمام نمایشگرها"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:34
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:28
msgid ""
"Whether to show the window list on all connected monitors or only on the primary "
"one."
@@ -309,109 +229,50 @@ msgstr ""
"اینکه آیا فهرست پنجره‌ها در تمام نمایشگرهای متصل نمایش داده شود یا فقط در نمایشگر "
"اصلی."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:41
msgid "Show workspace previews in window list"
msgstr "پیش‌نمایش فضاهای کاری در سیاههٔ پنجره‌ها"
#: extensions/window-list/prefs.js:41
#: extensions/window-list/prefs.js:39
msgid "Window Grouping"
msgstr "گروه‌سازی پنجره‌ها"
#: extensions/window-list/prefs.js:46
#: extensions/window-list/prefs.js:63
msgid "Never group windows"
msgstr "هیچ‌گاه پنجره‌ها گروه نشوند"
#: extensions/window-list/prefs.js:47
#: extensions/window-list/prefs.js:64
msgid "Group windows when space is limited"
msgstr "پنجره‌ها زمانی که فضا محدود است گروه شوند"
#: extensions/window-list/prefs.js:48
#: extensions/window-list/prefs.js:65
msgid "Always group windows"
msgstr "همیشه پنجره‌ها گروه شوند"
#: extensions/window-list/prefs.js:68
#: extensions/window-list/prefs.js:81
msgid "Show on all monitors"
msgstr "نمایش در تمام نمایشگرها"
#: extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml:12
msgid "Show workspace previews in top bar"
msgstr "پیش‌نمایش فضاهای کاری در نوار بالایی"
#: extensions/workspace-indicator/workspaceIndicator.js:404
#, javascript-format
msgid "Press %s to edit"
msgstr "زدن %s برای ویرایش"
#: extensions/workspace-indicator/workspaceIndicator.js:512
msgid "Settings"
msgstr "تنظیمات"
#: extensions/workspace-indicator/workspaceIndicator.js:592
#: extensions/window-list/workspaceIndicator.js:249
#: extensions/workspace-indicator/extension.js:254
msgid "Workspace Indicator"
msgstr "نشانگر فضای‌کاری"
#: extensions/workspace-indicator/workspacePrefs.js:20
msgid "Indicator"
msgstr "نشانگر"
#: extensions/workspace-indicator/workspacePrefs.js:25
msgid "Previews"
msgstr "پیش‌نمایش‌ها"
#: extensions/workspace-indicator/workspacePrefs.js:35
msgid "Workspace Name"
msgstr "نام فضای کاری"
#: extensions/workspace-indicator/workspacePrefs.js:59
msgid "Behavior"
msgstr "رفتار"
#: extensions/workspace-indicator/workspacePrefs.js:64
msgid "Dynamic"
msgstr "پویا"
#: extensions/workspace-indicator/workspacePrefs.js:65
msgid "Automatically removes empty workspaces."
msgstr "برداشتن خودکار فضاهای کاری خالی."
#: extensions/workspace-indicator/workspacePrefs.js:75
msgid "Fixed Number"
msgstr "تعداد ثابت"
#: extensions/workspace-indicator/workspacePrefs.js:76
msgid "Specify a number of permanent workspaces."
msgstr "تعیین تعدادی فضای کاری ثابت."
#: extensions/workspace-indicator/workspacePrefs.js:89
msgid "Number of Workspaces"
msgstr "شمار فضاهای کاری"
#: extensions/workspace-indicator/workspacePrefs.js:128
msgid "Workspaces"
msgstr "فضاهای کاری"
#: extensions/workspace-indicator/prefs.js:33
msgid "Workspace Names"
msgstr "نام‌های فضای کاری"
#: extensions/workspace-indicator/prefs.js:66
#, javascript-format
#~ msgid "Workspace %d"
#~ msgstr "فضای کاری %Id"
msgid "Workspace %d"
msgstr "فضای کاری %Id"
#~ msgid "Add Workspace"
#~ msgstr "افزودن فضای‌کاری"
#~ msgid "Remove"
#~ msgstr "برداشتن"
#~ msgid "Computer"
#~ msgstr "رایانه"
#~ msgid "Show workspace previews"
#~ msgstr "پیش‌نمایش فضاهای کاری"
#~ msgid "Applications"
#~ msgstr "برنامه‌ها"
#: extensions/workspace-indicator/prefs.js:207
msgid "Add Workspace"
msgstr "افزودن فضای‌کاری"
#~ msgid "Application"
#~ msgstr "برنامه"
#~ msgid "Workspace"
#~ msgstr "فضای‌کاری"
#~ msgid "Create new matching rule"
#~ msgstr "افزودن یک قاعده‌ی منطبق جدید"
@@ -495,6 +356,12 @@ msgstr "فضاهای کاری"
#~ msgid "Window management and application launching"
#~ msgstr "مدیریت پنجره‌ها و اجرا کننده برنامه‌ها"
#~ msgid "CPU"
#~ msgstr "سی‌پی‌یو"
#~ msgid "Memory"
#~ msgstr "حافظه"
#~ msgid "The alt tab behaviour."
#~ msgstr "رفتار alt tab."
@@ -593,6 +460,9 @@ msgstr "فضاهای کاری"
#~ msgid "My Account"
#~ msgstr "حساب من"
#~ msgid "System Settings"
#~ msgstr "تنظیمات سیستم"
#~ msgid "Lock Screen"
#~ msgstr "قفل‌کردن صفحه‌نمایش"

306
po/fi.po
View File

@@ -12,49 +12,49 @@ msgstr ""
"Project-Id-Version: gnome-shell-extensions\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
"issues\n"
"POT-Creation-Date: 2025-09-11 02:26+0000\n"
"PO-Revision-Date: 2025-09-11 19:54+0300\n"
"Last-Translator: Jiri Grönroos <jiri.gronroos+l10n@iki.fi>\n"
"POT-Creation-Date: 2021-11-06 14:08+0000\n"
"PO-Revision-Date: 2022-02-27 18:54+0200\n"
"Last-Translator: JR-Fi <starman@starman.fi>\n"
"Language-Team: suomi <lokalisointi-lista@googlegroups.com>\n"
"Language: fi\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: Poedit 3.7\n"
"X-Generator: Poedit 3.0.1\n"
"X-Project-Style: gnome\n"
"X-POT-Import-Date: 2012-03-05 15:06:12+0000\n"
#: data/gnome-classic.desktop.in:2
#: data/gnome-classic.desktop.in:3
msgid "GNOME Classic"
msgstr "Perinteinen Gnome"
#: data/gnome-classic.desktop.in:3 data/gnome-classic-wayland.desktop.in:3
#: data/gnome-classic-xorg.desktop.in:3
#: data/gnome-classic.desktop.in:4 data/gnome-classic-wayland.desktop.in:4
#: data/gnome-classic-xorg.desktop.in:4
msgid "This session logs you into GNOME Classic"
msgstr "Tämä istunto kirjaa sinut perinteiseen Gnomeen"
#: data/gnome-classic-wayland.desktop.in:2
#: data/gnome-classic-wayland.desktop.in:3
msgid "GNOME Classic on Wayland"
msgstr "Perinteinen Gnome Waylandia käyttäen"
#: data/gnome-classic-xorg.desktop.in:2
#: data/gnome-classic-xorg.desktop.in:3
msgid "GNOME Classic on Xorg"
msgstr "Perinteinen Gnome Xorgia käyttäen"
#: extensions/apps-menu/extension.js:118
#: extensions/apps-menu/extension.js:112
msgid "Favorites"
msgstr "Suosikit"
#: extensions/apps-menu/extension.js:392
msgid "Apps"
#: extensions/apps-menu/extension.js:366
msgid "Applications"
msgstr "Sovellukset"
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:12
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6
msgid "Application and workspace list"
msgstr "Sovellus- ja työtilaluettelo"
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:13
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:7
msgid ""
"A list of strings, each containing an application id (desktop file name), "
"followed by a colon and the workspace number"
@@ -62,34 +62,34 @@ msgstr ""
"Lista merkkijonoja, jossa jokainen on ohjelman tunnus (työpöydän "
"tiedostonimi), jota seuraa kaksoispiste ja työtilan numero"
#: extensions/auto-move-windows/prefs.js:156
#: extensions/auto-move-windows/prefs.js:34
msgid "Workspace Rules"
msgstr "Työtilojen säännöt"
#: extensions/auto-move-windows/prefs.js:311
#: extensions/auto-move-windows/prefs.js:236
msgid "Add Rule"
msgstr "Lisää sääntö"
#. TRANSLATORS: %s is the filesystem name
#: extensions/drive-menu/extension.js:123
#: extensions/places-menu/placeDisplay.js:186
#: extensions/drive-menu/extension.js:133
#: extensions/places-menu/placeDisplay.js:233
#, javascript-format
msgid "Ejecting drive “%s” failed:"
msgstr "Aseman “%s” irrottaminen epäonnistui:"
#: extensions/drive-menu/extension.js:142
#: extensions/drive-menu/extension.js:149
msgid "Removable devices"
msgstr "Erilliset tallennusvälineet"
#: extensions/drive-menu/extension.js:164
#: extensions/drive-menu/extension.js:171
msgid "Open Files"
msgstr "Avaa tiedostonhallinta"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
msgid "Use more screen for windows"
msgstr "Käytä enemmän tilaa ikkunoille"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:6
msgid ""
"Try to use more screen for placing window thumbnails by adapting to screen "
"aspect ratio, and consolidating them further to reduce the bounding box. "
@@ -99,11 +99,11 @@ msgstr ""
"huomioiden näyttösuhteen ja lähentämällä niitä vähentämällä rajaavaa "
"laatikkoa. Tämä asetus toimii vain luonnollisen asettelutavan kanssa."
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:17
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
msgid "Place window captions on top"
msgstr "Aseta ikkunoiden otsikkoteksti ylös"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:18
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
msgid ""
"If true, place window captions on top the respective thumbnail, overriding "
"shell default of placing it at the bottom. Changing this setting requires "
@@ -113,179 +113,100 @@ msgstr ""
"Tämä syrjäyttää oletusasetuksen, eli otsikkotekstin asettamisen pienoiskuvan "
"alle. Tämän asetuksen muutos vaatii Gnomen uudelleenkäynnistyksen."
#: extensions/places-menu/extension.js:75
#: extensions/places-menu/extension.js:78
#: extensions/places-menu/extension.js:88
#: extensions/places-menu/extension.js:91
msgid "Places"
msgstr "Sijainnit"
#: extensions/places-menu/placeDisplay.js:52
#: extensions/places-menu/placeDisplay.js:46
#, javascript-format
msgid "Failed to launch “%s”"
msgstr "Kohteen “%s” käynnistys epäonnistui"
#: extensions/places-menu/placeDisplay.js:67
#: extensions/places-menu/placeDisplay.js:61
#, javascript-format
msgid "Failed to mount volume for “%s”"
msgstr "Taltion “%s” liittäminen epäonnistui"
#: extensions/places-menu/placeDisplay.js:315
#: extensions/places-menu/placeDisplay.js:148
#: extensions/places-menu/placeDisplay.js:171
msgid "Computer"
msgstr "Tietokone"
#: extensions/places-menu/placeDisplay.js:359
msgid "Home"
msgstr "Koti"
#: extensions/places-menu/placeDisplay.js:321
msgid "Recent"
msgstr "Viimeisimmät"
#: extensions/places-menu/placeDisplay.js:327
msgid "Starred"
msgstr "Tähdelliset"
#: extensions/places-menu/placeDisplay.js:347
msgid "Network"
msgstr "Verkko"
#: extensions/places-menu/placeDisplay.js:354
msgid "Trash"
msgstr "Roskakori"
#: extensions/places-menu/placeDisplay.js:404
msgid "Browse Network"
msgstr "Selaa verkkoa"
# Konteksti muutui hieman, kun tälle ilmaantui pari, jossa suunta on taaksepäin
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:14
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7
msgid "Cycle Screenshot Sizes"
msgstr "Vaihda kuvakaappausten kokojen välillä"
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:18
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
msgid "Cycle Screenshot Sizes Backward"
msgstr "Vaihda kuvakaappausten kokojen välillä taaksepäin"
#: extensions/system-monitor/extension.js:135
msgid "CPU stats"
msgstr "Suorittimen tilastot"
#: extensions/system-monitor/extension.js:159
msgid "Memory stats"
msgstr "Muistin tilastot"
#: extensions/system-monitor/extension.js:177
msgid "Swap stats"
msgstr "Swap-tilastot"
#: extensions/system-monitor/extension.js:336
msgid "Upload stats"
msgstr "Lähetystilastot"
#: extensions/system-monitor/extension.js:350
msgid "Download stats"
msgstr "Lataustilastot"
#: extensions/system-monitor/extension.js:364
msgid "System stats"
msgstr "Järjestelmän tilastot"
#: extensions/system-monitor/extension.js:412
msgid "Show"
msgstr "Näytä"
#: extensions/system-monitor/extension.js:414
msgid "CPU"
msgstr "Suoritin"
#: extensions/system-monitor/extension.js:416
msgid "Memory"
msgstr "Muisti"
#: extensions/system-monitor/extension.js:418
msgid "Swap"
msgstr "Swap"
#: extensions/system-monitor/extension.js:420
msgid "Upload"
msgstr "Lähetys"
#: extensions/system-monitor/extension.js:422
msgid "Download"
msgstr "Lataus"
#: extensions/system-monitor/extension.js:427
msgid "Open System Monitor"
msgstr "Avaa järjestelmän valvonta"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:12
msgid "Show CPU usage"
msgstr "Näytä suorittimen käyttö"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:16
msgid "Show memory usage"
msgstr "Näytä muistin käyttö"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:20
msgid "Show swap usage"
msgstr "Näytä swap-käyttö"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:24
msgid "Show upload"
msgstr "Näytä lähetys"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:28
msgid "Show download"
msgstr "Näytä lataus"
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:11
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5
msgid "Theme name"
msgstr "Teeman nimi"
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:12
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr "Teeman nimi, ladataan sijainnista ~/.themes/name/gnome-shell"
#: extensions/window-list/extension.js:98
#: extensions/window-list/extension.js:72
msgid "Close"
msgstr "Sulje"
#: extensions/window-list/extension.js:125
#: extensions/window-list/extension.js:92
msgid "Unminimize"
msgstr "Palauta pienennys"
#: extensions/window-list/extension.js:125
#: extensions/window-list/extension.js:92
msgid "Minimize"
msgstr "Pienennä"
#: extensions/window-list/extension.js:130
#: extensions/window-list/extension.js:99
msgid "Unmaximize"
msgstr "Palauta suurennus"
#: extensions/window-list/extension.js:130
#: extensions/window-list/extension.js:99
msgid "Maximize"
msgstr "Suurenna"
#: extensions/window-list/extension.js:720
#: extensions/window-list/extension.js:434
msgid "Minimize all"
msgstr "Pienennä kaikki"
#: extensions/window-list/extension.js:726
#: extensions/window-list/extension.js:440
msgid "Unminimize all"
msgstr "Palauta kaikkien koko"
#: extensions/window-list/extension.js:732
#: extensions/window-list/extension.js:446
msgid "Maximize all"
msgstr "Suurenna kaikki"
#: extensions/window-list/extension.js:740
#: extensions/window-list/extension.js:454
msgid "Unmaximize all"
msgstr "Palauta kaikkien koko"
#: extensions/window-list/extension.js:748
#: extensions/window-list/extension.js:462
msgid "Close all"
msgstr "Sulje kaikki"
#: extensions/window-list/extension.js:1000 extensions/window-list/prefs.js:23
#: extensions/window-list/extension.js:741
msgid "Window List"
msgstr "Ikkunaluettelo"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:18
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12
msgid "When to group windows"
msgstr "Milloin ikkunat ryhmitetään"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:19
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
msgid ""
"Decides when to group windows from the same application on the window list. "
"Possible values are “never”, “auto” and “always”."
@@ -293,22 +214,22 @@ msgstr ""
"Päättää milloin saman sovelluksen ikkunat ryhmitellään ikkunaluettelossa. "
"Mahdolliset arvot ovat “never”, “auto” ja “always”."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26
#: extensions/window-list/prefs.js:74
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
#: extensions/window-list/prefs.js:86
msgid "Show windows from all workspaces"
msgstr "Näytä ikkunat kaikista työtiloista"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
msgid "Whether to show windows from all workspaces or only the current one."
msgstr ""
"Näytetäänkö ikkunat kaikista työtiloista vai ainoastaan nykyisestä "
"työtilasta."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:33
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
msgid "Show the window list on all monitors"
msgstr "Näytä ikkunaluettelo kaikilla näytöillä"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:34
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:28
msgid ""
"Whether to show the window list on all connected monitors or only on the "
"primary one."
@@ -316,108 +237,43 @@ msgstr ""
"Näytetäänkö ikkunaluettelo kaikilla liitetyillä näytöillä vai ainoastaan "
"ensisijaisella näytöllä."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:41
msgid "Show workspace previews in window list"
msgstr "Näytä työtilojen esikatselu ikkunaluettelossa"
#: extensions/window-list/prefs.js:41
#: extensions/window-list/prefs.js:39
msgid "Window Grouping"
msgstr "Ikkunoiden ryhmitys"
#: extensions/window-list/prefs.js:46
#: extensions/window-list/prefs.js:63
msgid "Never group windows"
msgstr "Älä ryhmitä ikkunoita koskaan"
#: extensions/window-list/prefs.js:47
#: extensions/window-list/prefs.js:64
msgid "Group windows when space is limited"
msgstr "Ryhmitä ikkunat tilan ollessa rajallinen"
#: extensions/window-list/prefs.js:48
#: extensions/window-list/prefs.js:65
msgid "Always group windows"
msgstr "Ryhmitä ikkunat aina"
#: extensions/window-list/prefs.js:68
#: extensions/window-list/prefs.js:81
msgid "Show on all monitors"
msgstr "Näytä kaikilla näytöillä"
#: extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml:12
msgid "Show workspace previews in top bar"
msgstr "Näytä työtilojen esikatselut yläpalkissa"
#: extensions/workspace-indicator/workspaceIndicator.js:404
#, javascript-format
msgid "Press %s to edit"
msgstr "Paina %s muokataksesi"
#: extensions/workspace-indicator/workspaceIndicator.js:518
msgid "Settings"
msgstr "Asetukset"
#: extensions/workspace-indicator/workspaceIndicator.js:598
#: extensions/window-list/workspaceIndicator.js:249
#: extensions/workspace-indicator/extension.js:254
msgid "Workspace Indicator"
msgstr "Työtilan ilmaisin"
#: extensions/workspace-indicator/workspacePrefs.js:20
msgid "Indicator"
msgstr "Ilmaisin"
#: extensions/workspace-indicator/workspacePrefs.js:25
msgid "Previews"
msgstr "Esikatselut"
#: extensions/workspace-indicator/workspacePrefs.js:35
msgid "Workspace Name"
msgstr "Työtilan nimi"
#: extensions/workspace-indicator/workspacePrefs.js:59
msgid "Behavior"
msgstr "Toiminta"
#: extensions/workspace-indicator/workspacePrefs.js:64
msgid "Dynamic"
msgstr "Muuttuva"
#: extensions/workspace-indicator/workspacePrefs.js:65
msgid "Automatically removes empty workspaces."
msgstr "Poista automaattisesti tyhjät työtilat."
#: extensions/workspace-indicator/workspacePrefs.js:75
msgid "Fixed Number"
msgstr "Muuttumaton määrä"
#: extensions/workspace-indicator/workspacePrefs.js:76
msgid "Specify a number of permanent workspaces."
msgstr "Määritä pysyvien työtilojen määrä."
#: extensions/workspace-indicator/workspacePrefs.js:89
msgid "Number of Workspaces"
msgstr "Työtilojen määrä"
#: extensions/workspace-indicator/workspacePrefs.js:128
msgid "Workspaces"
msgstr "Työtilat"
#: extensions/workspace-indicator/prefs.js:33
msgid "Workspace Names"
msgstr "Työtilojen nimet"
#: extensions/workspace-indicator/prefs.js:66
#, javascript-format
#~ msgid "Workspace %d"
#~ msgstr "Työtila %d"
msgid "Workspace %d"
msgstr "Työtila %d"
#~ msgid "Add Workspace"
#~ msgstr "Lisää työtila"
#~ msgid "Remove"
#~ msgstr "Poista"
#~ msgid "Computer"
#~ msgstr "Tietokone"
#~ msgid "Browse Network"
#~ msgstr "Selaa verkkoa"
#~ msgid "Show workspace previews"
#~ msgstr "Näytä työtilojen esikatselut"
#~ msgid "Applications"
#~ msgstr "Sovellukset"
#: extensions/workspace-indicator/prefs.js:207
msgid "Add Workspace"
msgstr "Lisää työtila"
#~ msgid "Application"
#~ msgstr "Sovellus"
@@ -474,6 +330,12 @@ msgstr "Työtilat"
#~ msgid "Message"
#~ msgstr "Viesti"
#~ msgid "CPU"
#~ msgstr "Suoritin"
#~ msgid "Memory"
#~ msgstr "Muisti"
#~ msgid "GNOME Shell Classic"
#~ msgstr "Gnome Shell - perinteinen"
@@ -504,6 +366,9 @@ msgstr "Työtilat"
#~ msgid "Display"
#~ msgstr "Näyttö"
#~ msgid "Display Settings"
#~ msgstr "Näytön asetukset"
#~ msgid "Drag here to add favorites"
#~ msgstr "Raahaa tähän lisätäksesi suosikkeihin"
@@ -561,6 +426,9 @@ msgstr "Työtilat"
#~ msgid "Bookmarks"
#~ msgstr "Kirjanmerkit"
#~ msgid "Network"
#~ msgstr "Verkko"
#~ msgid "File System"
#~ msgstr "Tiedostojärjestelmä"

214
po/fr.po
View File

@@ -10,16 +10,16 @@ msgstr ""
"Project-Id-Version: gnome-shell-extensions master\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
"issues\n"
"POT-Creation-Date: 2024-04-29 15:27+0000\n"
"PO-Revision-Date: 2024-08-29 17:42+0200\n"
"Last-Translator: Irénée Thirion <irenee.thirion@e.email>\n"
"POT-Creation-Date: 2021-11-06 14:08+0000\n"
"PO-Revision-Date: 2022-03-01 21:04+0100\n"
"Last-Translator: Charles Monzat <charles.monzat@free.fr>\n"
"Language-Team: GNOME French Team <gnomefr@traduc.org>\n"
"Language: fr\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: Poedit 3.4.4\n"
"X-Generator: Gtranslator 40.0\n"
#: data/gnome-classic.desktop.in:3
msgid "GNOME Classic"
@@ -31,26 +31,28 @@ msgid "This session logs you into GNOME Classic"
msgstr "Cette session vous connecte à GNOME Classique"
#: data/gnome-classic-wayland.desktop.in:3
#| msgid "GNOME Classic"
msgid "GNOME Classic on Wayland"
msgstr "GNOME Classique sur Wayland"
#: data/gnome-classic-xorg.desktop.in:3
#| msgid "GNOME Classic"
msgid "GNOME Classic on Xorg"
msgstr "GNOME Classique sur Xorg"
#: extensions/apps-menu/extension.js:126
#: extensions/apps-menu/extension.js:112
msgid "Favorites"
msgstr "Favoris"
#: extensions/apps-menu/extension.js:400
msgid "Apps"
#: extensions/apps-menu/extension.js:366
msgid "Applications"
msgstr "Applications"
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:12
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6
msgid "Application and workspace list"
msgstr "Liste dapplications et despaces de travail"
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:13
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:7
msgid ""
"A list of strings, each containing an application id (desktop file name), "
"followed by a colon and the workspace number"
@@ -59,34 +61,34 @@ msgstr ""
"dapplication (nom de fichier desktop), suivi par un deux-points et le "
"numéro de lespace de travail"
#: extensions/auto-move-windows/prefs.js:159
#: extensions/auto-move-windows/prefs.js:34
msgid "Workspace Rules"
msgstr "Règles des espaces de travail"
#: extensions/auto-move-windows/prefs.js:314
#: extensions/auto-move-windows/prefs.js:236
msgid "Add Rule"
msgstr "Ajouter une règle"
#. TRANSLATORS: %s is the filesystem name
#: extensions/drive-menu/extension.js:123
#: extensions/places-menu/placeDisplay.js:218
#: extensions/drive-menu/extension.js:133
#: extensions/places-menu/placeDisplay.js:233
#, javascript-format
msgid "Ejecting drive “%s” failed:"
msgstr "Léjection du disque « %s » a échoué :"
#: extensions/drive-menu/extension.js:142
#: extensions/drive-menu/extension.js:149
msgid "Removable devices"
msgstr "Périphériques amovibles"
#: extensions/drive-menu/extension.js:164
#: extensions/drive-menu/extension.js:171
msgid "Open Files"
msgstr "Ouvrir Fichiers"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
msgid "Use more screen for windows"
msgstr "Utiliser plus décran pour les fenêtres"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:6
msgid ""
"Try to use more screen for placing window thumbnails by adapting to screen "
"aspect ratio, and consolidating them further to reduce the bounding box. "
@@ -97,11 +99,11 @@ msgstr ""
"pour réduire la zone englobante. Ce paramètre ne sapplique quen utilisant "
"la stratégie de placement « natural »."
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:17
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
msgid "Place window captions on top"
msgstr "Placer les titres des fenêtres au-dessus"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:18
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
msgid ""
"If true, place window captions on top the respective thumbnail, overriding "
"shell default of placing it at the bottom. Changing this setting requires "
@@ -112,119 +114,47 @@ msgstr ""
"dessous. Pour que ce paramètre soit pris en compte, il faut redémarrer le "
"Shell."
#: extensions/places-menu/extension.js:88
#: extensions/places-menu/extension.js:91
#: extensions/places-menu/extension.js:94
msgid "Places"
msgstr "Emplacements"
#: extensions/places-menu/placeDisplay.js:60
#: extensions/places-menu/placeDisplay.js:46
#, javascript-format
msgid "Failed to launch “%s”"
msgstr "Impossible de lancer « %s »"
#: extensions/places-menu/placeDisplay.js:75
#: extensions/places-menu/placeDisplay.js:61
#, javascript-format
msgid "Failed to mount volume for “%s”"
msgstr "Impossible de monter le volume « %s »"
#: extensions/places-menu/placeDisplay.js:135
#: extensions/places-menu/placeDisplay.js:158
#: extensions/places-menu/placeDisplay.js:148
#: extensions/places-menu/placeDisplay.js:171
msgid "Computer"
msgstr "Ordinateur"
#: extensions/places-menu/placeDisplay.js:333
#: extensions/places-menu/placeDisplay.js:359
msgid "Home"
msgstr "Dossier personnel"
#: extensions/places-menu/placeDisplay.js:378
#: extensions/places-menu/placeDisplay.js:404
msgid "Browse Network"
msgstr "Parcourir le réseau"
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:14
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7
msgid "Cycle Screenshot Sizes"
msgstr "Passer à la taille de capture suivante"
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:18
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
msgid "Cycle Screenshot Sizes Backward"
msgstr "Passer à la taille de capture précédente"
#: extensions/system-monitor/extension.js:135
msgid "CPU stats"
msgstr "Statistiques du CPU"
#: extensions/system-monitor/extension.js:159
msgid "Memory stats"
msgstr "Statistiques de la mémoire"
#: extensions/system-monitor/extension.js:177
msgid "Swap stats"
msgstr "Statistiques de lespace déchange"
#: extensions/system-monitor/extension.js:336
msgid "Upload stats"
msgstr "Statistiques de téléversement"
#: extensions/system-monitor/extension.js:350
msgid "Download stats"
msgstr "Statistiques de téléchargement"
#: extensions/system-monitor/extension.js:364
msgid "System stats"
msgstr "Statistiques du système"
#: extensions/system-monitor/extension.js:412
msgid "Show"
msgstr "Afficher"
#: extensions/system-monitor/extension.js:414
msgid "CPU"
msgstr "CPU"
#: extensions/system-monitor/extension.js:416
msgid "Memory"
msgstr "Mémoire"
#: extensions/system-monitor/extension.js:418
msgid "Swap"
msgstr "Espace déchange"
#: extensions/system-monitor/extension.js:420
msgid "Upload"
msgstr "Téléversement"
#: extensions/system-monitor/extension.js:422
msgid "Download"
msgstr "Téléchargement"
#: extensions/system-monitor/extension.js:427
msgid "Open System Monitor"
msgstr "Ouvrir Moniteur système"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:12
msgid "Show CPU usage"
msgstr "Afficher lutilisation du CPU"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:16
msgid "Show memory usage"
msgstr "Afficher lutilisation de la mémoire"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:20
msgid "Show swap usage"
msgstr "Afficher lutilisation de lespace déchange"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:24
msgid "Show upload"
msgstr "Afficher le téléversement"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:28
msgid "Show download"
msgstr "Afficher le téléchargement"
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:11
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5
msgid "Theme name"
msgstr "Nom du thème"
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:12
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr "Le nom du thème, à charger à partir de ~/.themes/name/gnome-shell"
@@ -232,51 +162,51 @@ msgstr "Le nom du thème, à charger à partir de ~/.themes/name/gnome-shell"
msgid "Close"
msgstr "Fermer"
#: extensions/window-list/extension.js:99
#: extensions/window-list/extension.js:92
msgid "Unminimize"
msgstr "Restaurer"
#: extensions/window-list/extension.js:99
#: extensions/window-list/extension.js:92
msgid "Minimize"
msgstr "Réduire"
#: extensions/window-list/extension.js:106
#: extensions/window-list/extension.js:99
msgid "Unmaximize"
msgstr "Restaurer"
#: extensions/window-list/extension.js:106
#: extensions/window-list/extension.js:99
msgid "Maximize"
msgstr "Maximiser"
#: extensions/window-list/extension.js:471
#: extensions/window-list/extension.js:434
msgid "Minimize all"
msgstr "Tout réduire"
#: extensions/window-list/extension.js:477
#: extensions/window-list/extension.js:440
msgid "Unminimize all"
msgstr "Tout restaurer"
#: extensions/window-list/extension.js:483
#: extensions/window-list/extension.js:446
msgid "Maximize all"
msgstr "Tout maximiser"
#: extensions/window-list/extension.js:491
#: extensions/window-list/extension.js:454
msgid "Unmaximize all"
msgstr "Tout restaurer"
#: extensions/window-list/extension.js:499
#: extensions/window-list/extension.js:462
msgid "Close all"
msgstr "Tout fermer"
#: extensions/window-list/extension.js:778
#: extensions/window-list/extension.js:741
msgid "Window List"
msgstr "Liste de fenêtres"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:18
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12
msgid "When to group windows"
msgstr "Quand regrouper les fenêtres"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:19
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
msgid ""
"Decides when to group windows from the same application on the window list. "
"Possible values are “never”, “auto” and “always”."
@@ -285,22 +215,22 @@ msgstr ""
"fenêtres. Les valeurs possibles sont « never » (jamais), « auto » et "
 always » (toujours)."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26
#: extensions/window-list/prefs.js:79
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
#: extensions/window-list/prefs.js:86
msgid "Show windows from all workspaces"
msgstr "Afficher les fenêtres de tous les espaces de travail"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
msgid "Whether to show windows from all workspaces or only the current one."
msgstr ""
"Indique sil faut afficher les fenêtres de tous les espaces de travail ou "
"seulement de lespace actuel."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:33
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
msgid "Show the window list on all monitors"
msgstr "Afficher la liste des fenêtres sur tous les écrans"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:34
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:28
msgid ""
"Whether to show the window list on all connected monitors or only on the "
"primary one."
@@ -308,61 +238,43 @@ msgstr ""
"Indique sil faut afficher la liste des fenêtres sur tous les écrans "
"connectés ou seulement lécran principal."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:41
msgid "Show workspace previews in window list"
msgstr "Afficher les aperçus des espaces de travail dans la liste des fenêtres"
#: extensions/window-list/prefs.js:35
#: extensions/window-list/prefs.js:39
msgid "Window Grouping"
msgstr "Regroupement de fenêtres"
#: extensions/window-list/prefs.js:40
#: extensions/window-list/prefs.js:63
msgid "Never group windows"
msgstr "Ne jamais regrouper les fenêtres"
#: extensions/window-list/prefs.js:41
#: extensions/window-list/prefs.js:64
msgid "Group windows when space is limited"
msgstr "Regrouper les fenêtres quand lespace est limité"
#: extensions/window-list/prefs.js:42
#: extensions/window-list/prefs.js:65
msgid "Always group windows"
msgstr "Toujours regrouper les fenêtres"
#: extensions/window-list/prefs.js:66
#: extensions/window-list/prefs.js:81
msgid "Show on all monitors"
msgstr "Afficher sur tous les écrans"
#: extensions/window-list/prefs.js:92
msgid "Show workspace previews"
msgstr "Afficher les aperçus des espaces de travail"
#: extensions/window-list/workspaceIndicator.js:249
#: extensions/workspace-indicator/extension.js:254
msgid "Workspace Indicator"
msgstr "Indicateur despace de travail"
#: extensions/workspace-indicator/prefs.js:30
msgid "Show Previews In Top Bar"
msgstr "Afficher les aperçus dans la barre supérieure"
#: extensions/workspace-indicator/prefs.js:33
msgid "Workspace Names"
msgstr "Noms des espaces de travail"
#: extensions/workspace-indicator/prefs.js:88
#: extensions/workspace-indicator/prefs.js:66
#, javascript-format
msgid "Workspace %d"
msgstr "Espace de travail %d"
#: extensions/workspace-indicator/prefs.js:155
msgid "Workspace Names"
msgstr "Noms des espaces de travail"
#: extensions/workspace-indicator/prefs.js:281
#: extensions/workspace-indicator/prefs.js:207
msgid "Add Workspace"
msgstr "Ajouter un espace de travail"
#: extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml:12
msgid "Show workspace previews in top bar"
msgstr "Afficher les aperçus des espaces de travail dans la barre supérieure"
#: extensions/workspace-indicator/workspaceIndicator.js:430
msgid "Workspace Indicator"
msgstr "Indicateur despace de travail"
#~ msgid "Applications"
#~ msgstr "Applications"
#~ msgid "Create new matching rule"
#~ msgstr "Créer une nouvelle règle de concordance"

281
po/fur.po
View File

@@ -6,17 +6,17 @@
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell-extensions master\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues\n"
"POT-Creation-Date: 2024-10-19 02:53+0000\n"
"PO-Revision-Date: 2024-10-20 20:04+0000\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
"issues\n"
"POT-Creation-Date: 2021-11-06 14:08+0000\n"
"PO-Revision-Date: 2021-11-07 17:51+0100\n"
"Last-Translator: Fabio Tomat <f.t.public@gmail.com>\n"
"Language-Team: Friulian <f.t.public@gmail.com>\n"
"Language-Team: Friulian <fur@li.org>\n"
"Language: fur\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Editor: HaiPO 2.1 beta\n"
"X-Generator: Poedit 3.4.2\n"
"X-Generator: Poedit 3.0\n"
#: data/gnome-classic.desktop.in:3
msgid "GNOME Classic"
@@ -35,69 +35,69 @@ msgstr "GNOME Classic su Wayland"
msgid "GNOME Classic on Xorg"
msgstr "GNOME Classic su Xorg"
#: extensions/apps-menu/extension.js:126
#: extensions/apps-menu/extension.js:112
msgid "Favorites"
msgstr "Preferîts"
#: extensions/apps-menu/extension.js:400
msgid "Apps"
#: extensions/apps-menu/extension.js:366
msgid "Applications"
msgstr "Aplicazions"
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:12
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6
msgid "Application and workspace list"
msgstr "Liste aplicazions e spazi di lavôr"
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:13
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:7
msgid ""
"A list of strings, each containing an application id (desktop file name), "
"followed by a colon and the workspace number"
msgstr ""
"Une liste di stringhis, ogniune e ten il ID di une aplicazion (non dal file "
".desktop), cun daûr doi ponts e il numar dal spazi di lavôr"
"Une liste di stringhis, ogniune e ten il ID di une aplicazion (non dal file ."
"desktop), cun daûr doi ponts e il numar dal spazi di lavôr"
#: extensions/auto-move-windows/prefs.js:159
#: extensions/auto-move-windows/prefs.js:34
msgid "Workspace Rules"
msgstr "Regulis dai spazis di lavôr"
#: extensions/auto-move-windows/prefs.js:314
#: extensions/auto-move-windows/prefs.js:236
msgid "Add Rule"
msgstr "Zonte regule"
#. TRANSLATORS: %s is the filesystem name
#: extensions/drive-menu/extension.js:123
#: extensions/places-menu/placeDisplay.js:187
#: extensions/drive-menu/extension.js:133
#: extensions/places-menu/placeDisplay.js:233
#, javascript-format
msgid "Ejecting drive “%s” failed:"
msgstr "No si è rivâts a parâ fûr la unitât “%s”»:"
#: extensions/drive-menu/extension.js:142
#: extensions/drive-menu/extension.js:149
msgid "Removable devices"
msgstr "Dispositîfs estraibii"
#: extensions/drive-menu/extension.js:164
#: extensions/drive-menu/extension.js:171
msgid "Open Files"
msgstr "Vierç i files"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
msgid "Use more screen for windows"
msgstr "Dopre plui schermi pai barcons"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:6
msgid ""
"Try to use more screen for placing window thumbnails by adapting to screen "
"aspect ratio, and consolidating them further to reduce the bounding box. "
"This setting applies only with the natural placement strategy."
msgstr ""
"Cîr di doprâ plui schermi par plaçâ lis miniaturis dai barcons, adatant il "
"rapuart di aspiet dal visôr e consolidant ancjemo di plui lis miniaturis par"
" ridusi il spazi complessîf. Cheste impostazion si apliche dome se "
"rapuart di aspiet dal visôr e consolidant ancjemo di plui lis miniaturis par "
"ridusi il spazi complessîf. Cheste impostazion si apliche dome se "
"l'algoritmi di plaçament al è naturâl."
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:17
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
msgid "Place window captions on top"
msgstr "Met il titul dal barcon parsore"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:18
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
msgid ""
"If true, place window captions on top the respective thumbnail, overriding "
"shell default of placing it at the bottom. Changing this setting requires "
@@ -107,178 +107,99 @@ msgstr ""
"sorpassant il compuartament predefinît de shell, che lis place in bas. "
"Cambiant cheste impostazion si scugne tornâ a inviâ la shell."
#: extensions/places-menu/extension.js:88
#: extensions/places-menu/extension.js:91
#: extensions/places-menu/extension.js:94
msgid "Places"
msgstr "Puescj"
#: extensions/places-menu/placeDisplay.js:53
#: extensions/places-menu/placeDisplay.js:46
#, javascript-format
msgid "Failed to launch “%s”"
msgstr "No si è rivâts a inviâ “%s”"
#: extensions/places-menu/placeDisplay.js:68
#: extensions/places-menu/placeDisplay.js:61
#, javascript-format
msgid "Failed to mount volume for “%s”"
msgstr "No si è rivâts a montâ il volum par “%s”"
#: extensions/places-menu/placeDisplay.js:316
#: extensions/places-menu/placeDisplay.js:148
#: extensions/places-menu/placeDisplay.js:171
msgid "Computer"
msgstr "Computer"
#: extensions/places-menu/placeDisplay.js:359
msgid "Home"
msgstr "Home"
#: extensions/places-menu/placeDisplay.js:322
msgid "Recent"
msgstr "Resint"
#: extensions/places-menu/placeDisplay.js:404
msgid "Browse Network"
msgstr "Esplore rêt"
#: extensions/places-menu/placeDisplay.js:328
msgid "Starred"
msgstr "Preferît"
#: extensions/places-menu/placeDisplay.js:348
msgid "Network"
msgstr "Rêt"
#: extensions/places-menu/placeDisplay.js:355
msgid "Trash"
msgstr "Scovacere"
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:14
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7
msgid "Cycle Screenshot Sizes"
msgstr "Dimensions videadis catuardis ciclichis"
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:18
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
msgid "Cycle Screenshot Sizes Backward"
msgstr "Dimensions videadis caturadis ciclichis indaûr"
#: extensions/system-monitor/extension.js:135
msgid "CPU stats"
msgstr "Statistichis CPU"
#: extensions/system-monitor/extension.js:159
msgid "Memory stats"
msgstr "Statistichis memorie"
#: extensions/system-monitor/extension.js:177
msgid "Swap stats"
msgstr "Statistichis memorie di scambi"
#: extensions/system-monitor/extension.js:336
msgid "Upload stats"
msgstr "Statistichis cjariament in rêt"
#: extensions/system-monitor/extension.js:350
msgid "Download stats"
msgstr "Statistichis discjariaments"
#: extensions/system-monitor/extension.js:364
msgid "System stats"
msgstr "Statistichis di sisteme"
#: extensions/system-monitor/extension.js:412
msgid "Show"
msgstr "Mostre"
#: extensions/system-monitor/extension.js:414
msgid "CPU"
msgstr "CPU"
#: extensions/system-monitor/extension.js:416
msgid "Memory"
msgstr "Memorie"
#: extensions/system-monitor/extension.js:418
msgid "Swap"
msgstr "Memorie di scambi"
#: extensions/system-monitor/extension.js:420
msgid "Upload"
msgstr "Cjariaments in rêt"
#: extensions/system-monitor/extension.js:422
msgid "Download"
msgstr "Discjariaments"
#: extensions/system-monitor/extension.js:427
msgid "Open System Monitor"
msgstr "Vierç monitor di sisteme"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:12
msgid "Show CPU usage"
msgstr "Mostre utilizazion CPU"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:16
msgid "Show memory usage"
msgstr "Mostre utilizazion de memorie"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:20
msgid "Show swap usage"
msgstr "Mostre ûs memorie di scambi"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:24
msgid "Show upload"
msgstr "Mostre cjariaments in rêt"
#: extensions/system-monitor/schemas/org.gnome.shell.extensions.system-monitor.gschema.xml:28
msgid "Show download"
msgstr "Mostre discjariaments"
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:11
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5
msgid "Theme name"
msgstr "Non dal teme"
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:12
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr "Il non dal teme, che si cjame da ~/.themes/name/gnome-shell"
#: extensions/window-list/extension.js:92
#: extensions/window-list/extension.js:72
msgid "Close"
msgstr "Siere"
#: extensions/window-list/extension.js:119
#: extensions/window-list/extension.js:92
msgid "Unminimize"
msgstr "Gjave minimizazion"
#: extensions/window-list/extension.js:119
#: extensions/window-list/extension.js:92
msgid "Minimize"
msgstr "Minimize"
#: extensions/window-list/extension.js:126
#: extensions/window-list/extension.js:99
msgid "Unmaximize"
msgstr "Gjave massimizazion"
#: extensions/window-list/extension.js:126
#: extensions/window-list/extension.js:99
msgid "Maximize"
msgstr "Massimize"
#: extensions/window-list/extension.js:641
#: extensions/window-list/extension.js:434
msgid "Minimize all"
msgstr "Minimize ducj"
#: extensions/window-list/extension.js:647
#: extensions/window-list/extension.js:440
msgid "Unminimize all"
msgstr "Gjave a ducj la minimizazion"
#: extensions/window-list/extension.js:653
#: extensions/window-list/extension.js:446
msgid "Maximize all"
msgstr "Massimize ducj"
#: extensions/window-list/extension.js:661
#: extensions/window-list/extension.js:454
msgid "Unmaximize all"
msgstr "Gjave a ducj la massimizazion"
#: extensions/window-list/extension.js:669
#: extensions/window-list/extension.js:462
msgid "Close all"
msgstr "Siere ducj"
#: extensions/window-list/extension.js:911 extensions/window-list/prefs.js:24
#: extensions/window-list/extension.js:741
msgid "Window List"
msgstr "Liste barcons"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:18
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12
msgid "When to group windows"
msgstr "Cuant meti in grup i barcons"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:19
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
msgid ""
"Decides when to group windows from the same application on the window list. "
"Possible values are “never”, “auto” and “always”."
@@ -286,21 +207,21 @@ msgstr ""
"Al decît cuant meti dongje i barcons de stesse aplicazion su la liste dai "
"barcons. I valôrs pussibii a son “never”, “auto” e “always”."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26
#: extensions/window-list/prefs.js:75
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
#: extensions/window-list/prefs.js:86
msgid "Show windows from all workspaces"
msgstr "Mostre i barcons di ducj i spazis di lavôr"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
msgid "Whether to show windows from all workspaces or only the current one."
msgstr ""
"Indiche se mostrâ i barcons di ducj i spazis di lavôr o nome di chel atuâl."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:33
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
msgid "Show the window list on all monitors"
msgstr "Mostre la liste dai barcons su ducj i visôrs"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:34
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:28
msgid ""
"Whether to show the window list on all connected monitors or only on the "
"primary one."
@@ -308,72 +229,44 @@ msgstr ""
"Indiche se mostrâ la liste dai barcons su ducj i visôrs tacâts o nome sul "
"chel principâl."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:41
msgid "Show workspace previews in window list"
msgstr "Mostre lis anteprimis dai spazis di lavôr te liste dai barcons"
#: extensions/window-list/prefs.js:42
#: extensions/window-list/prefs.js:39
msgid "Window Grouping"
msgstr "Intropament di barcons"
#: extensions/window-list/prefs.js:47
#: extensions/window-list/prefs.js:63
msgid "Never group windows"
msgstr "No sta meti mai in grup i barcons"
#: extensions/window-list/prefs.js:48
#: extensions/window-list/prefs.js:64
msgid "Group windows when space is limited"
msgstr "Met dongje i barcons cuant che il spazi al è limitât"
#: extensions/window-list/prefs.js:49
#: extensions/window-list/prefs.js:65
msgid "Always group windows"
msgstr "Met simpri in grup i barcons"
#: extensions/window-list/prefs.js:69
#: extensions/window-list/prefs.js:81
msgid "Show on all monitors"
msgstr "Mostre su ducj i visôrs"
#: extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml:12
msgid "Show workspace previews in top bar"
msgstr "Mostre anteprimis dai spazis di lavôr te sbare superiôr"
#: extensions/workspace-indicator/workspaceIndicator.js:430
#: extensions/window-list/workspaceIndicator.js:249
#: extensions/workspace-indicator/extension.js:254
msgid "Workspace Indicator"
msgstr "Indicadôr spazi di lavôr"
#: extensions/workspace-indicator/workspacePrefs.js:29
msgid "Show Previews"
msgstr "Mostre anteprimis"
#: extensions/workspace-indicator/prefs.js:33
msgid "Workspace Names"
msgstr "Nons dai spazis di lavôr"
#: extensions/workspace-indicator/workspacePrefs.js:87
#: extensions/workspace-indicator/prefs.js:66
#, javascript-format
msgid "Workspace %d"
msgstr "Spazi di lavôr %d"
#: extensions/workspace-indicator/workspacePrefs.js:154
msgid "Workspace Names"
msgstr "Nons dai spazis di lavôr"
#: extensions/workspace-indicator/workspacePrefs.js:171
#: extensions/workspace-indicator/prefs.js:207
msgid "Add Workspace"
msgstr "Zonte spazi di lavôr"
#: extensions/workspace-indicator/workspacePrefs.js:196
msgid "Remove"
msgstr "Gjave"
#: extensions/workspace-indicator/workspacePrefs.js:226
msgid "Workspaces"
msgstr "Spazis di lavôr"
#~ msgid "Computer"
#~ msgstr "Computer"
#~ msgid "Show workspace previews"
#~ msgstr "Mostre anteprimis dai spazis di lavôr"
#~ msgid "Applications"
#~ msgstr "Aplicazions"
#~ msgid "Application"
#~ msgstr "Aplicazion"
@@ -399,24 +292,24 @@ msgstr "Spazis di lavôr"
#~ msgstr "Disposizion dai botons te sbare dal titul"
#~ msgid ""
#~ "This key overrides the key in org.gnome.desktop.wm.preferences when running "
#~ "GNOME Shell."
#~ "This key overrides the key in org.gnome.desktop.wm.preferences when "
#~ "running GNOME Shell."
#~ msgstr ""
#~ "Cheste clâf a sorplante chê in org.gnome.desktop.wm.preferences cuant che al"
#~ " è in esecuzion GNOME Shell."
#~ "Cheste clâf a sorplante chê in org.gnome.desktop.wm.preferences cuant che "
#~ "al è in esecuzion GNOME Shell."
#~ msgid "Enable edge tiling when dropping windows on screen edges"
#~ msgstr ""
#~ "Abilite la tasseladure sul ôr cuant che i balcons a vegnin molâts sul ôr dal"
#~ " visôr"
#~ "Abilite la tasseladure sul ôr cuant che i balcons a vegnin molâts sul ôr "
#~ "dal visôr"
#~ msgid "Workspaces only on primary monitor"
#~ msgstr "Spazis di lavôr dome sul visôr principâl"
#~ msgid "Delay focus changes in mouse mode until the pointer stops moving"
#~ msgstr ""
#~ "Tarde la mude dal focus te modalitât mouse fintremai che il pontadôr no si "
#~ "ferme"
#~ "Tarde la mude dal focus te modalitât mouse fintremai che il pontadôr no "
#~ "si ferme"
#~ msgid "Thumbnail only"
#~ msgstr "Dome miniaturis"
@@ -440,8 +333,8 @@ msgstr "Spazis di lavôr"
#~ msgstr "Test di benvignût alternatîf"
#~ msgid ""
#~ "If not empty, it contains the text that will be shown when clicking on the "
#~ "panel."
#~ "If not empty, it contains the text that will be shown when clicking on "
#~ "the panel."
#~ msgstr ""
#~ "Se no vueit, al ten il test che al vegnarà mostrât scliçant sul panel."
@@ -449,12 +342,20 @@ msgstr "Spazis di lavôr"
#~ msgstr "Messaç"
#~ msgid ""
#~ "Example aims to show how to build well behaved extensions for the Shell and as such it has little functionality on its own.\n"
#~ "Example aims to show how to build well behaved extensions for the Shell "
#~ "and as such it has little functionality on its own.\n"
#~ "Nevertheless its possible to customize the greeting message."
#~ msgstr ""
#~ "Example al ponte a mostrâ cemût imbastî estensions de Shell che si compuartedin ben e par chest no 'ndi à tantis funzions.\n"
#~ "Example al ponte a mostrâ cemût imbastî estensions de Shell che si "
#~ "compuartedin ben e par chest no 'ndi à tantis funzions.\n"
#~ "Ad ogni mût al è pussibil personalizâ il messaç di benvignût."
#~ msgid "CPU"
#~ msgstr "CPU"
#~ msgid "Memory"
#~ msgstr "Memorie"
#~ msgid "GNOME Shell Classic"
#~ msgstr "GNOME Shell Classic"

Some files were not shown because too many files have changed in this diff Show More