Compare commits
409 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6cadcd0674 | ||
|
|
1b2bf601e1 | ||
|
|
2466e352a5 | ||
|
|
7c455cb548 | ||
|
|
8f3baad61e | ||
|
|
59bb24ce2d | ||
|
|
fe11a0d8b9 | ||
|
|
467487c0cf | ||
|
|
43198efbc2 | ||
|
|
69c52fc031 | ||
|
|
2df8fc4fb2 | ||
|
|
bfa3e52c6e | ||
|
|
377467876d | ||
|
|
d80ae21740 | ||
|
|
30347ea701 | ||
|
|
14e847102f | ||
|
|
c0df345bea | ||
|
|
9ae6d55e0d | ||
|
|
a8b5705274 | ||
|
|
93eac46b1d | ||
|
|
57b7f526df | ||
|
|
ef285ea96b | ||
|
|
f6ed0ef74b | ||
|
|
40068b2359 | ||
|
|
4f7b9de4a2 | ||
|
|
9ce153437c | ||
|
|
0bfbd6738e | ||
|
|
437c61ac13 | ||
|
|
027e8c1674 | ||
|
|
d03a2a49f1 | ||
|
|
595a73e171 | ||
|
|
229d39701a | ||
|
|
e9153db954 | ||
|
|
6d45688dc7 | ||
|
|
327bcbae42 | ||
|
|
a3dce37094 | ||
|
|
ecc0932ba4 | ||
|
|
82f99d904d | ||
|
|
b02872eca0 | ||
|
|
8e74914d33 | ||
|
|
497a1546ee | ||
|
|
1143b893e2 | ||
|
|
d426ff10f8 | ||
|
|
77d6867141 | ||
|
|
eeb86824f0 | ||
|
|
b433b00344 | ||
|
|
96031ee1e7 | ||
|
|
f4bf96cbbc | ||
|
|
7d41858bab | ||
|
|
f1e0058e67 | ||
|
|
c03a76bb77 | ||
|
|
ed3db834b3 | ||
|
|
b8baead85b | ||
|
|
9fd7f7a939 | ||
|
|
7466de0f20 | ||
|
|
6f7dabe3f0 | ||
|
|
0f4121ee71 | ||
|
|
8797f13694 | ||
|
|
9e11ec9940 | ||
|
|
3a76b9eec4 | ||
|
|
5a84fe0051 | ||
|
|
01f7a6e32c | ||
|
|
a3d27dd674 | ||
|
|
0081bd0d99 | ||
|
|
c59d6cdad8 | ||
|
|
7d48bcc845 | ||
|
|
76514e8b23 | ||
|
|
1899d502a9 | ||
|
|
762903618d | ||
|
|
b5ac041c1a | ||
|
|
83d7ae031b | ||
|
|
17b37ff577 | ||
|
|
ee2c76de1d | ||
|
|
01d8d4871e | ||
|
|
1186b2a7a0 | ||
|
|
2840a6b364 | ||
|
|
990e340366 | ||
|
|
c9678e89d2 | ||
|
|
53ba3ce620 | ||
|
|
301017904b | ||
|
|
0ad959de1e | ||
|
|
a3ff3c79b2 | ||
|
|
8819ed01c8 | ||
|
|
59e6aefd5e | ||
|
|
7c6c4f0ef9 | ||
|
|
2552c92fe1 | ||
|
|
d6b605e801 | ||
|
|
b0b0f527be | ||
|
|
30f4beb3e1 | ||
|
|
b05eb4eb6d | ||
|
|
e06b1e8236 | ||
|
|
76e4dbae3f | ||
|
|
1d2155b446 | ||
|
|
f68d61eeca | ||
|
|
63e6fec602 | ||
|
|
27d463f572 | ||
|
|
f4e044b4fe | ||
|
|
3b4e241b26 | ||
|
|
019c935647 | ||
|
|
29d11e5879 | ||
|
|
662fe8e144 | ||
|
|
8bf1132bec | ||
|
|
c989fa165c | ||
|
|
881d5aae59 | ||
|
|
d9ff138f9e | ||
|
|
fcf8892bf7 | ||
|
|
082b585ae6 | ||
|
|
898f7b0d6f | ||
|
|
fecd26851f | ||
|
|
8a7d2fd86d | ||
|
|
f1f05b58b9 | ||
|
|
c9838125a1 | ||
|
|
af35772b72 | ||
|
|
61b5bdb4e9 | ||
|
|
aa5df48c45 | ||
|
|
3929dd86bc | ||
|
|
b1b16bcfe1 | ||
|
|
e2b1503acd | ||
|
|
01f7df1e8a | ||
|
|
b7de680805 | ||
|
|
4e50e9f8dc | ||
|
|
459d654b23 | ||
|
|
5a3812e5d6 | ||
|
|
83c41bad30 | ||
|
|
2a45d8c145 | ||
|
|
0f69d7663b | ||
|
|
5d8d3601b4 | ||
|
|
ea77b557e5 | ||
|
|
9f48149346 | ||
|
|
0d1b279a64 | ||
|
|
b30871d105 | ||
|
|
77a11fd9cd | ||
|
|
981e8e42e2 | ||
|
|
4a841dfd49 | ||
|
|
8957f488dc | ||
|
|
e0b68a319e | ||
|
|
3f1aa9f221 | ||
|
|
d9ee5fdf55 | ||
|
|
568826e489 | ||
|
|
fde934fed7 | ||
|
|
2cbab10188 | ||
|
|
a8168d47fa | ||
|
|
ad707e643d | ||
|
|
1218aee87f | ||
|
|
e31d7828e9 | ||
|
|
265935e14b | ||
|
|
b903618050 | ||
|
|
720933b08e | ||
|
|
85ee8829bf | ||
|
|
6df4905286 | ||
|
|
253ddb8642 | ||
|
|
0ca156a2b6 | ||
|
|
7fc2bbb896 | ||
|
|
eb4a17c2c8 | ||
|
|
15ffbf147f | ||
|
|
3201a1f8ac | ||
|
|
3f631c7398 | ||
|
|
84fc1b671f | ||
|
|
e41da8fcae | ||
|
|
6cfdd9db38 | ||
|
|
f12badc7aa | ||
|
|
6e5cef8761 | ||
|
|
0cb409f1c2 | ||
|
|
2c922a6d3a | ||
|
|
1088435120 | ||
|
|
de6b9bf473 | ||
|
|
62e95e4b28 | ||
|
|
c8b54bdf25 | ||
|
|
46a4fa0976 | ||
|
|
97d64614af | ||
|
|
8f75ccae34 | ||
|
|
a81f4f4885 | ||
|
|
8a62e491a8 | ||
|
|
8da874355c | ||
|
|
f0e7358de4 | ||
|
|
c4e344f1d7 | ||
|
|
411da924a7 | ||
|
|
60f30c5bbe | ||
|
|
1506a730c5 | ||
|
|
527ce99851 | ||
|
|
51ce4981c8 | ||
|
|
63ea38a16d | ||
|
|
3bc06bb78f | ||
|
|
832cf0fc84 | ||
|
|
fc265fbe59 | ||
|
|
1459e3d6f9 | ||
|
|
e6bc9fc2fc | ||
|
|
2b4db8095e | ||
|
|
fa3f9bcaee | ||
|
|
3f660ee973 | ||
|
|
f87a25e913 | ||
|
|
228811b873 | ||
|
|
9b34ac1eea | ||
|
|
a725361fc9 | ||
|
|
3461a0523c | ||
|
|
911387bc49 | ||
|
|
93a75dccd7 | ||
|
|
763d66b827 | ||
|
|
3c325c1562 | ||
|
|
dba3de2a8e | ||
|
|
f1671bc206 | ||
|
|
824c2a5cee | ||
|
|
548d7659e1 | ||
|
|
0162644041 | ||
|
|
062a3d21ab | ||
|
|
a5a92026ac | ||
|
|
28fd210f28 | ||
|
|
b14f040386 | ||
|
|
81aade6659 | ||
|
|
9d7d52c1de | ||
|
|
3830985fa9 | ||
|
|
d43abe0869 | ||
|
|
860c56f83e | ||
|
|
2716cb0b98 | ||
|
|
6048971663 | ||
|
|
04cab9954b | ||
|
|
cbb622a099 | ||
|
|
f3b505867f | ||
|
|
7bee509ecd | ||
|
|
b6ac158139 | ||
|
|
9af1a79434 | ||
|
|
fa9e2dc71c | ||
|
|
e94f10ac16 | ||
|
|
0319c6e8cb | ||
|
|
fe1ae49dbe | ||
|
|
353598e6d8 | ||
|
|
36266e5a5a | ||
|
|
f7a371c0bf | ||
|
|
018815d9e9 | ||
|
|
82fd82b30c | ||
|
|
26f5e23faa | ||
|
|
0989cb3836 | ||
|
|
c55df7c239 | ||
|
|
9a840c437c | ||
|
|
f33a833f7c | ||
|
|
7c284b6bdc | ||
|
|
6af5cbe4e0 | ||
|
|
5d6c2a3008 | ||
|
|
7ffe7b9aec | ||
|
|
2e912861f1 | ||
|
|
f8ac973802 | ||
|
|
5bb15ae1cf | ||
|
|
34f379f6c7 | ||
|
|
14d6920dd3 | ||
|
|
3d1c253369 | ||
|
|
b5dd68d6f2 | ||
|
|
93c2c408be | ||
|
|
c2c57c8e29 | ||
|
|
9432ae260b | ||
|
|
69f3132f4c | ||
|
|
4ccffbb27d | ||
|
|
8a9aa6a818 | ||
|
|
017c6470b9 | ||
|
|
1e25fc1b5a | ||
|
|
e28215f38f | ||
|
|
8d06bc8b64 | ||
|
|
9e475cb279 | ||
|
|
cbbb2d2869 | ||
|
|
c72b8b2122 | ||
|
|
c302db7545 | ||
|
|
0554a8e97d | ||
|
|
039c66e7b7 | ||
|
|
7eb00e350e | ||
|
|
f76f9e8220 | ||
|
|
17c963b63f | ||
|
|
5d45a697ce | ||
|
|
ef729f2d66 | ||
|
|
1394e82bd0 | ||
|
|
9e61aaf08c | ||
|
|
6ac76140a5 | ||
|
|
8c014a6b1d | ||
|
|
2fe844f412 | ||
|
|
8185b43d54 | ||
|
|
59ab3f834d | ||
|
|
8b6835c3d6 | ||
|
|
bb5bb70ac5 | ||
|
|
da90d365ec | ||
|
|
02ff72b2f0 | ||
|
|
9c7a086870 | ||
|
|
24ba03fe96 | ||
|
|
69d8d1a335 | ||
|
|
d495a2eed8 | ||
|
|
6b3990457e | ||
|
|
099cff0b95 | ||
|
|
fac7fedfd3 | ||
|
|
6ed1b56526 | ||
|
|
a2ffb1238f | ||
|
|
b55e7a4dc8 | ||
|
|
0c42f162d3 | ||
|
|
01a37c8f26 | ||
|
|
5e88c7d891 | ||
|
|
af23a8491c | ||
|
|
32a454f917 | ||
|
|
63ff5b2ac1 | ||
|
|
a9fff9861b | ||
|
|
89a3daf9fe | ||
|
|
078a5a01ae | ||
|
|
9c8c3495b6 | ||
|
|
25e854dde8 | ||
|
|
64060ef4c5 | ||
|
|
9c97f01bc2 | ||
|
|
8693a8a74c | ||
|
|
47c12c6279 | ||
|
|
e96015b9ea | ||
|
|
d3debab713 | ||
|
|
00045b7396 | ||
|
|
19877302a6 | ||
|
|
56a74abb8a | ||
|
|
78c3957f64 | ||
|
|
38e267ae64 | ||
|
|
59899a211d | ||
|
|
d3348761c3 | ||
|
|
79a01c62bc | ||
|
|
e65c561e6f | ||
|
|
6d36da1ce6 | ||
|
|
cd9341adf1 | ||
|
|
13842a012b | ||
|
|
f4f7d2dffb | ||
|
|
87a5fc42b8 | ||
|
|
f1456002d4 | ||
|
|
30266011bf | ||
|
|
5a76dedb50 | ||
|
|
dc8ab6cf77 | ||
|
|
b97efdb584 | ||
|
|
a91e6aad87 | ||
|
|
6f03ca0434 | ||
|
|
7a01e3e103 | ||
|
|
e539a65709 | ||
|
|
2402c1bef5 | ||
|
|
1fd238b31d | ||
|
|
21a65c1558 | ||
|
|
f42d1f7ca9 | ||
|
|
b77ecb2380 | ||
|
|
4fc80e0ef3 | ||
|
|
df61f9aadf | ||
|
|
7862bfd2aa | ||
|
|
f6c74e93b7 | ||
|
|
81880982b2 | ||
|
|
f53984670c | ||
|
|
537530707e | ||
|
|
e069f391c7 | ||
|
|
b00f5c4604 | ||
|
|
a326fa737e | ||
|
|
fcd5618321 | ||
|
|
55e085894a | ||
|
|
801ba69f54 | ||
|
|
abdd839073 | ||
|
|
24a5c5fd4e | ||
|
|
6d49de36a8 | ||
|
|
ef3c74db8a | ||
|
|
419b7fad10 | ||
|
|
ad43f16a9a | ||
|
|
db8b779859 | ||
|
|
67a91f9a1d | ||
|
|
ec95dcd330 | ||
|
|
b71ddd1b00 | ||
|
|
d6ffd7859e | ||
|
|
ded50f8b01 | ||
|
|
06066be0a8 | ||
|
|
fb52f89cc5 | ||
|
|
86761952c3 | ||
|
|
edc916533a | ||
|
|
6a7e99eb81 | ||
|
|
8ca1d5f3ee | ||
|
|
a3068dc145 | ||
|
|
3e9d648078 | ||
|
|
3e398b9a2f | ||
|
|
3fb756687b | ||
|
|
93fb1a6496 | ||
|
|
dfa328a769 | ||
|
|
90b59b6753 | ||
|
|
121c9d891b | ||
|
|
e6a8046d33 | ||
|
|
3cd964e60d | ||
|
|
fa8866d627 | ||
|
|
bf3cb76766 | ||
|
|
25d02d17d2 | ||
|
|
ffcbf03c9c | ||
|
|
1d7f37f420 | ||
|
|
30a15387b5 | ||
|
|
b5b841dd38 | ||
|
|
5f2b199627 | ||
|
|
071584621e | ||
|
|
5c57f44838 | ||
|
|
93741e9e1c | ||
|
|
836f81f2e2 | ||
|
|
574638328e | ||
|
|
e0750db1bd | ||
|
|
5652182fb3 | ||
|
|
c3cbef19ac | ||
|
|
8c8f990a28 | ||
|
|
f6a6bdda99 | ||
|
|
0d5d06fdd7 | ||
|
|
d10b98c4fc | ||
|
|
8b7cfff558 | ||
|
|
25a75e1b0e | ||
|
|
91a1b8245b | ||
|
|
4abde90e82 | ||
|
|
dd8ee2931a | ||
|
|
f530acbf9e | ||
|
|
7d296d2fd2 | ||
|
|
fb858ed0e4 | ||
|
|
f576f1b1b6 | ||
|
|
b9d2a445b2 | ||
|
|
092b268823 | ||
|
|
b64cb0f195 | ||
|
|
2510bb3625 | ||
|
|
4fbd878208 | ||
|
|
e8840da00c |
17
.editorconfig
Normal file
17
.editorconfig
Normal file
@@ -0,0 +1,17 @@
|
||||
# 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
|
||||
@@ -1,7 +0,0 @@
|
||||
# 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
Normal file
4
.gitattributes
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
# SPDX-FileCopyrightText: No rights reserved
|
||||
# SPDX-License-Identifier: CC0-1.0
|
||||
|
||||
package-lock.json -diff
|
||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -9,4 +9,6 @@ zip-files/
|
||||
*.patch
|
||||
*.sw?
|
||||
.buildconfig
|
||||
.eslintcache
|
||||
.vscode
|
||||
node_modules
|
||||
|
||||
148
.gitlab-ci.yml
148
.gitlab-ci.yml
@@ -3,40 +3,34 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
include:
|
||||
- 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"
|
||||
- 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"
|
||||
|
||||
stages:
|
||||
- pre_review
|
||||
- pre-review
|
||||
- prepare
|
||||
- review
|
||||
- build
|
||||
- deploy
|
||||
|
||||
default:
|
||||
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'
|
||||
image: registry.gitlab.gnome.org/gnome/gnome-shell/fedora/43:2025-09-10.1
|
||||
|
||||
variables:
|
||||
FDO_UPSTREAM_REPO: GNOME/gnome-shell-extensions
|
||||
LINT_LOG: "eslint-report.xml"
|
||||
MESON_BUILD_DIR: build
|
||||
TARBALL_ARTIFACT_PATH: "${MESON_BUILD_DIR}/meson-dist/${CI_PROJECT_NAME}-${CI_COMMIT_TAG}.tar.xz"
|
||||
|
||||
workflow:
|
||||
rules:
|
||||
- if: '$CI_MERGE_REQUEST_IID'
|
||||
- if: '$CI_COMMIT_TAG'
|
||||
- if: '$CI_COMMIT_BRANCH'
|
||||
|
||||
.pipeline_guard: &pipeline_guard
|
||||
.pipeline-guard:
|
||||
rules:
|
||||
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
|
||||
- if: '$CI_COMMIT_TAG'
|
||||
@@ -44,22 +38,14 @@ workflow:
|
||||
- if: '$CI_COMMIT_BRANCH =~ /^gnome-[0-9-]+$/'
|
||||
- when: 'manual'
|
||||
|
||||
.gnome-shell-extensions.fedora:34:
|
||||
variables:
|
||||
FDO_DISTRIBUTION_VERSION: 34
|
||||
FDO_DISTRIBUTION_TAG: '2021-08-31.0'
|
||||
FDO_DISTRIBUTION_PACKAGES: >
|
||||
meson git gettext sassc
|
||||
|
||||
.prereview_req: &prereview_req
|
||||
.prereview-req:
|
||||
needs:
|
||||
- check_commit_log
|
||||
- check-merge-request
|
||||
- check-commit-log
|
||||
|
||||
check_commit_log:
|
||||
check-commit-log:
|
||||
extends:
|
||||
- .fdo.ci-fairy
|
||||
stage: pre_review
|
||||
stage: pre-review
|
||||
script:
|
||||
- if [[ x"$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" != "x" ]] ;
|
||||
then
|
||||
@@ -67,7 +53,8 @@ check_commit_log:
|
||||
else
|
||||
echo "Not a merge request" ;
|
||||
fi
|
||||
<<: *pipeline_guard
|
||||
rules:
|
||||
- !reference [.pipeline-guard, rules]
|
||||
artifacts:
|
||||
expire_in: 1 week
|
||||
paths:
|
||||
@@ -75,61 +62,47 @@ 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
|
||||
|
||||
build-fedora-container:
|
||||
extends:
|
||||
- .fdo.container-build@fedora@x86_64
|
||||
- .gnome-shell-extensions.fedora:34
|
||||
stage: prepare
|
||||
<<: *prereview_req
|
||||
|
||||
js_check:
|
||||
js-check:
|
||||
stage: review
|
||||
<<: *prereview_req
|
||||
needs:
|
||||
- !reference [.prereview-req, needs]
|
||||
script:
|
||||
- gjs-check-syntax
|
||||
|
||||
eslint:
|
||||
stage: review
|
||||
<<: *prereview_req
|
||||
needs:
|
||||
- !reference [.prereview-req, needs]
|
||||
variables:
|
||||
LINT_LOG: "eslint-report.xml"
|
||||
script:
|
||||
- export NODE_PATH=$(npm root -g)
|
||||
- ./.gitlab-ci/run-eslint --output-file ${LINT_LOG} --format junit --stdout
|
||||
- ./tools/run-eslint.sh --output-file "$LINT_LOG" --format junit --stdout
|
||||
artifacts:
|
||||
paths:
|
||||
- ${LINT_LOG}
|
||||
reports:
|
||||
junit: ${LINT_LOG}
|
||||
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
|
||||
|
||||
build-bundles:
|
||||
stage: build
|
||||
<<: *prereview_req
|
||||
needs:
|
||||
- !reference [.prereview-req, needs]
|
||||
script:
|
||||
- ./export-zips.sh
|
||||
artifacts:
|
||||
@@ -138,33 +111,36 @@ 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:
|
||||
- build-fedora-container
|
||||
- !reference [.prereview-req, needs]
|
||||
script:
|
||||
- meson setup build --werror -Dextension_set=all -Dclassic_mode=true
|
||||
- meson compile -C build
|
||||
- meson test -C build
|
||||
- meson install -C build
|
||||
- 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"
|
||||
artifacts:
|
||||
paths:
|
||||
- build
|
||||
- "$MESON_BUILD_DIR"
|
||||
|
||||
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 build
|
||||
- meson dist -C "$MESON_BUILD_DIR"
|
||||
rules:
|
||||
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
|
||||
changes:
|
||||
@@ -175,7 +151,9 @@ fedora-dist-tarball:
|
||||
extends: fedora-dist
|
||||
artifacts:
|
||||
expose_as: 'Get tarball here'
|
||||
name: "${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}"
|
||||
when: always
|
||||
paths:
|
||||
- build/meson-dist/$CI_PROJECT_NAME-$CI_COMMIT_TAG.tar.xz
|
||||
- "$TARBALL_ARTIFACT_PATH"
|
||||
rules:
|
||||
- if: '$CI_COMMIT_TAG'
|
||||
|
||||
@@ -1,58 +0,0 @@
|
||||
#!/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);
|
||||
});
|
||||
72
.gitlab/issue_templates/Default.md
Normal file
72
.gitlab/issue_templates/Default.md
Normal file
@@ -0,0 +1,72 @@
|
||||
<!--
|
||||
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"
|
||||
2
.gitlab/issue_templates/Default.md.license
Normal file
2
.gitlab/issue_templates/Default.md.license
Normal file
@@ -0,0 +1,2 @@
|
||||
SPDX-FileCopyrightText: 2024 Florian Müllner <fmuellner@gnome.org>
|
||||
SPDX-License-Identifier: CC-BY-SA-4.0
|
||||
47
.gitlab/issue_templates/Feature.md
Normal file
47
.gitlab/issue_templates/Feature.md
Normal file
@@ -0,0 +1,47 @@
|
||||
<!--
|
||||
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"
|
||||
3
.gitlab/issue_templates/Feature.md.license
Normal file
3
.gitlab/issue_templates/Feature.md.license
Normal file
@@ -0,0 +1,3 @@
|
||||
SPDX-FileCopyrightText: 2024 Florian Müllner <fmuellner@gnome.org>
|
||||
SPDX-License-Identifier: CC-BY-SA-4.0
|
||||
|
||||
22
.reuse/dep5
22
.reuse/dep5
@@ -1,22 +0,0 @@
|
||||
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
|
||||
@@ -1,3 +1,9 @@
|
||||
<!--
|
||||
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
|
||||
@@ -20,9 +26,6 @@ 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
|
||||
|
||||
170
LICENSES/CC-BY-SA-4.0.txt
Normal file
170
LICENSES/CC-BY-SA-4.0.txt
Normal file
@@ -0,0 +1,170 @@
|
||||
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 licensor’s permission is not necessary for any reason–for example, because of any applicable exception or limitation to copyright–then 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 Adapter’s 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 Adapter’s 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.
|
||||
259
NEWS
259
NEWS
@@ -1,3 +1,262 @@
|
||||
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
|
||||
====
|
||||
* 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]
|
||||
|
||||
Contributors:
|
||||
Jonas Ådahl, Florian Müllner
|
||||
|
||||
Translators:
|
||||
Kristjan SCHMIDT [eo], Brage Fuglseth [nb]
|
||||
|
||||
45.0
|
||||
====
|
||||
|
||||
|
||||
110
README.md
110
README.md
@@ -1,25 +1,34 @@
|
||||
<!--
|
||||
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.
|
||||
|
||||
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.
|
||||
The extensions in this package are supported by GNOME and will be updated
|
||||
to reflect future API changes in GNOME Shell.
|
||||
|
||||
The GNOME wiki has more information about [GNOME Shell Extensions][project-page],
|
||||
as well as some general information about [GNOME Shell][shell-page].
|
||||
Both the most recent stable release and the previous stable release of
|
||||
GNOME Shell are actively supported, as well as the current development
|
||||
branch.
|
||||
|
||||
Bugs should be reported to the GNOME [bug tracking system][bug-tracker].
|
||||
Please refer to the [schedule] to see when a new version will be released.
|
||||
|
||||
[schedule]: https://release.gnome.org/calendar
|
||||
|
||||
## Extensions
|
||||
|
||||
* 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.
|
||||
The following is a complete list of extensions that are provided by this
|
||||
project.
|
||||
|
||||
* apps-menu
|
||||
|
||||
@@ -28,8 +37,7 @@ Bugs should be reported to the GNOME [bug tracking system][bug-tracker].
|
||||
* auto-move-windows
|
||||
|
||||
Lets you manage your workspaces more easily, assigning a specific workspace to
|
||||
each application as soon as it creates a window, in a manner configurable with a
|
||||
GSettings key.
|
||||
each application as soon as it creates a window.
|
||||
|
||||
* drive-menu
|
||||
|
||||
@@ -40,6 +48,11 @@ GSettings key.
|
||||
|
||||
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
|
||||
@@ -51,11 +64,19 @@ GSettings key.
|
||||
|
||||
* screenshot-window-sizer
|
||||
|
||||
Adds a shortcut for resizing the focus window to a size that is suitable for GNOME Software screenshots
|
||||
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.
|
||||
|
||||
* user-theme
|
||||
|
||||
Loads a shell theme from ~/.themes/<name>/gnome-shell.
|
||||
Loads a shell theme from `$XDG_DATA_HOME/themes/<name>/gnome-shell`.
|
||||
|
||||
* window-list
|
||||
|
||||
@@ -69,18 +90,49 @@ GSettings key.
|
||||
|
||||
Adds a simple workspace switcher to the top bar.
|
||||
|
||||
## Default branch
|
||||
### Ex-Extensions
|
||||
|
||||
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
|
||||
```
|
||||
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/
|
||||
|
||||
## License
|
||||
|
||||
@@ -89,8 +141,4 @@ 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/
|
||||
|
||||
48
REUSE.toml
Normal file
48
REUSE.toml
Normal file
@@ -0,0 +1,48 @@
|
||||
# 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"
|
||||
@@ -6,7 +6,8 @@
|
||||
|
||||
import os, sys
|
||||
from pathlib import Path
|
||||
import argparse, subprocess
|
||||
from xml.etree.ElementTree import ElementTree
|
||||
import argparse
|
||||
|
||||
def check_version(version, file, type='news'):
|
||||
if type == 'news':
|
||||
@@ -16,8 +17,11 @@ def check_version(version, file, type='news'):
|
||||
if not ok:
|
||||
raise Exception("{} does not start with {}".format(file, version))
|
||||
elif type == 'metainfo':
|
||||
subprocess.run(['appstream-util', 'validate-version', file, version],
|
||||
check=True)
|
||||
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))
|
||||
else:
|
||||
raise Exception('Not implemented')
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
To update the gnome-shell-sass submodule to latest upstream commit:
|
||||
git submodule update --rebase
|
||||
@@ -1,11 +1,10 @@
|
||||
{
|
||||
"parentMode": "user",
|
||||
"colorScheme": "force-light",
|
||||
"hasOverview": false,
|
||||
"showWelcomeDialog": false,
|
||||
"enabledExtensions": [@CLASSIC_EXTENSIONS@],
|
||||
"panel": { "left": [],
|
||||
"panel": { "left": ["activities"],
|
||||
"center": [],
|
||||
"right": ["a11y", "keyboard", "dateMenu", "quickSettings"]
|
||||
"right": ["screenRecording", "screenSharing", "dwellClick", "a11y", "keyboard", "dateMenu", "quickSettings"]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
[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
|
||||
@@ -1,8 +0,0 @@
|
||||
[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
|
||||
@@ -1,8 +1,9 @@
|
||||
[Desktop Entry]
|
||||
Name=GNOME Classic
|
||||
Comment=This session logs you into GNOME Classic
|
||||
Exec=env GNOME_SHELL_SESSION_MODE=classic gnome-session
|
||||
Exec=gnome-session --session gnome-classic
|
||||
TryExec=gnome-session
|
||||
Type=Application
|
||||
DesktopNames=GNOME-Classic;GNOME;
|
||||
X-GDM-SessionRegisters=true
|
||||
X-GDM-CanRunHeadless=true
|
||||
|
||||
2
data/gnome-classic.session
Normal file
2
data/gnome-classic.session
Normal file
@@ -0,0 +1,2 @@
|
||||
[GNOME Session]
|
||||
Name=GNOME Classic
|
||||
3
data/gnome-classic.session.conf
Normal file
3
data/gnome-classic.session.conf
Normal file
@@ -0,0 +1,3 @@
|
||||
[Unit]
|
||||
Requires=gnome-session-services.target
|
||||
Requires=org.gnome.Shell@classic.service
|
||||
@@ -2,41 +2,20 @@
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
session_desktop_base = 'gnome-classic'
|
||||
session_desktop = 'gnome-classic.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
|
||||
i18n.merge_file(
|
||||
input: session_desktop + '.in',
|
||||
output: session_desktop,
|
||||
po_dir: '../po',
|
||||
install: true,
|
||||
install_dir: wlsessiondir,
|
||||
type: 'desktop',
|
||||
)
|
||||
|
||||
classic_uuids = []
|
||||
foreach e : classic_extensions
|
||||
classic_uuids += e + uuid_suffix
|
||||
classic_uuids += e + uuid_suffix
|
||||
endforeach
|
||||
|
||||
mode_conf = configuration_data()
|
||||
@@ -47,8 +26,18 @@ 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',
|
||||
)
|
||||
1
eslint.config.js
Symbolic link
1
eslint.config.js
Symbolic link
@@ -0,0 +1 @@
|
||||
tools/eslint.config.js
|
||||
@@ -8,16 +8,16 @@ srcdir=`dirname $0`
|
||||
srcdir=`(cd $srcdir && pwd)`
|
||||
|
||||
builddir=`mktemp -p $srcdir -d _build.XXXXXX` || exit 1
|
||||
installdir=`mktemp -p $srcdir -d _install.XXXXXX` || exit 1
|
||||
destdir=`mktemp -p $srcdir -d _dest.XXXXXX` || exit 1
|
||||
|
||||
meson setup --prefix=$installdir -Dextension_set=all $srcdir $builddir
|
||||
meson install -C $builddir
|
||||
meson setup --prefix=/usr -Dextension_set=all $srcdir $builddir
|
||||
meson install --destdir $destdir -C $builddir
|
||||
|
||||
rm -rf $srcdir/zip-files
|
||||
mkdir $srcdir/zip-files
|
||||
|
||||
extensiondir=$installdir/share/gnome-shell/extensions
|
||||
schemadir=$installdir/share/glib-2.0/schemas
|
||||
extensiondir=$destdir/usr/share/gnome-shell/extensions
|
||||
schemadir=$destdir/usr/share/glib-2.0/schemas
|
||||
|
||||
for f in $extensiondir/*; do
|
||||
name=`basename ${f%%@*}`
|
||||
@@ -39,7 +39,9 @@ for f in $extensiondir/*; do
|
||||
fi
|
||||
|
||||
cp $srcdir/NEWS $srcdir/COPYING $f
|
||||
sources=(NEWS COPYING $(cd $f; ls *.js))
|
||||
sources=(NEWS COPYING $(cd $f; ls *.js *.css 2>/dev/null))
|
||||
|
||||
[ -d $f/icons ] && sources+=(icons)
|
||||
|
||||
[ -f $schema ] || unset schema
|
||||
|
||||
@@ -48,4 +50,4 @@ for f in $extensiondir/*; do
|
||||
done
|
||||
|
||||
rm -rf $builddir
|
||||
rm -rf $installdir
|
||||
rm -rf $destdir
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
//
|
||||
// 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';
|
||||
@@ -45,10 +44,11 @@ class ApplicationMenuItem extends PopupMenu.PopupBaseMenuItem {
|
||||
this._app = app;
|
||||
this._button = button;
|
||||
|
||||
this._iconBin = new St.Bin();
|
||||
this.add_child(this._iconBin);
|
||||
this._icon = this.getDragActor();
|
||||
this._icon.style_class = 'icon-dropshadow';
|
||||
this.add_child(this._icon);
|
||||
|
||||
let appLabel = new St.Label({
|
||||
const appLabel = new St.Label({
|
||||
text: app.get_name(),
|
||||
y_expand: true,
|
||||
y_align: Clutter.ActorAlign.CENTER,
|
||||
@@ -56,20 +56,17 @@ class ApplicationMenuItem extends PopupMenu.PopupBaseMenuItem {
|
||||
this.add_child(appLabel);
|
||||
this.label_actor = appLabel;
|
||||
|
||||
let textureCache = St.TextureCache.get_default();
|
||||
textureCache.connectObject('icon-theme-changed',
|
||||
() => this._updateIcon(), this);
|
||||
this._updateIcon();
|
||||
|
||||
this._delegate = this;
|
||||
let draggable = DND.makeDraggable(this);
|
||||
const draggable = DND.makeDraggable(this);
|
||||
|
||||
let maybeStartDrag = draggable._maybeStartDrag;
|
||||
const 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) {
|
||||
@@ -81,10 +78,11 @@ class ApplicationMenuItem extends PopupMenu.PopupBaseMenuItem {
|
||||
Main.overview.hide();
|
||||
}
|
||||
|
||||
setActive(active, params) {
|
||||
if (active)
|
||||
this._button.scrollToButton(this);
|
||||
super.setActive(active, params);
|
||||
_onActiveChanged() {
|
||||
if (!this.active)
|
||||
return;
|
||||
|
||||
this._button.scrollToButton(this);
|
||||
}
|
||||
|
||||
setDragEnabled(enabled) {
|
||||
@@ -96,13 +94,7 @@ class ApplicationMenuItem extends PopupMenu.PopupBaseMenuItem {
|
||||
}
|
||||
|
||||
getDragActorSource() {
|
||||
return this._iconBin;
|
||||
}
|
||||
|
||||
_updateIcon() {
|
||||
let icon = this.getDragActor();
|
||||
icon.style_class = 'icon-dropshadow';
|
||||
this._iconBin.set_child(icon);
|
||||
return this._icon;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -125,7 +117,10 @@ class CategoryMenuItem extends PopupMenu.PopupBaseMenuItem {
|
||||
else
|
||||
name = _('Favorites');
|
||||
|
||||
this.add_child(new St.Label({text: name}));
|
||||
const label = new St.Label({text: name});
|
||||
this.add_child(label);
|
||||
this.actor.label_actor = label;
|
||||
|
||||
this.connect('motion-event', this._onMotionEvent.bind(this));
|
||||
this.connect('notify::active', this._onActiveChanged.bind(this));
|
||||
}
|
||||
@@ -137,7 +132,7 @@ class CategoryMenuItem extends PopupMenu.PopupBaseMenuItem {
|
||||
}
|
||||
|
||||
_isNavigatingSubmenu([x, y]) {
|
||||
let [posX, posY] = this.get_transformed_position();
|
||||
const [posX, posY] = this.get_transformed_position();
|
||||
|
||||
if (this._oldX === -1) {
|
||||
this._oldX = x;
|
||||
@@ -145,8 +140,8 @@ class CategoryMenuItem extends PopupMenu.PopupBaseMenuItem {
|
||||
return true;
|
||||
}
|
||||
|
||||
let deltaX = Math.abs(x - this._oldX);
|
||||
let deltaY = Math.abs(y - this._oldY);
|
||||
const deltaX = Math.abs(x - this._oldX);
|
||||
const deltaY = Math.abs(y - this._oldY);
|
||||
|
||||
this._oldX = x;
|
||||
this._oldY = y;
|
||||
@@ -176,7 +171,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) {
|
||||
let offset = posY - y;
|
||||
const offset = posY - y;
|
||||
y = posY + this.height + offset;
|
||||
}
|
||||
|
||||
@@ -206,7 +201,7 @@ class CategoryMenuItem extends PopupMenu.PopupBaseMenuItem {
|
||||
this.hover = true;
|
||||
|
||||
if (this._isNavigatingSubmenu(event.get_coords()))
|
||||
return true;
|
||||
return Clutter.EVENT_STOP;
|
||||
|
||||
this._oldX = -1;
|
||||
this._oldY = -1;
|
||||
@@ -214,11 +209,11 @@ class CategoryMenuItem extends PopupMenu.PopupBaseMenuItem {
|
||||
this._grab?.dismiss();
|
||||
delete this._grab;
|
||||
|
||||
let source = event.get_source();
|
||||
if (source instanceof St.Widget)
|
||||
source.sync_hover();
|
||||
const targetActor = global.stage.get_event_actor(event);
|
||||
if (targetActor instanceof St.Widget)
|
||||
targetActor.sync_hover();
|
||||
|
||||
return false;
|
||||
return Clutter.EVENT_PROPAGATE;
|
||||
}
|
||||
|
||||
_onActiveChanged() {
|
||||
@@ -255,7 +250,7 @@ class DesktopTarget extends EventEmitter {
|
||||
this._desktopDestroyedId = 0;
|
||||
|
||||
this._windowAddedId =
|
||||
global.window_group.connect('actor-added',
|
||||
global.window_group.connect('child-added',
|
||||
this._onWindowAdded.bind(this));
|
||||
|
||||
global.get_window_actors().forEach(a => {
|
||||
@@ -299,15 +294,15 @@ class DesktopTarget extends EventEmitter {
|
||||
}
|
||||
|
||||
async _markTrusted(file) {
|
||||
let modeAttr = Gio.FILE_ATTRIBUTE_UNIX_MODE;
|
||||
let trustedAttr = 'metadata::trusted';
|
||||
let queryFlags = Gio.FileQueryInfoFlags.NONE;
|
||||
let ioPriority = GLib.PRIORITY_DEFAULT;
|
||||
const modeAttr = Gio.FILE_ATTRIBUTE_UNIX_MODE;
|
||||
const trustedAttr = 'metadata::trusted';
|
||||
const queryFlags = Gio.FileQueryInfoFlags.NONE;
|
||||
const ioPriority = GLib.PRIORITY_DEFAULT;
|
||||
|
||||
try {
|
||||
let info = await file.query_info_async(modeAttr, queryFlags, ioPriority, null);
|
||||
|
||||
let mode = info.get_attribute_uint32(modeAttr) | 0o100;
|
||||
const 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);
|
||||
@@ -332,7 +327,7 @@ class DesktopTarget extends EventEmitter {
|
||||
}
|
||||
|
||||
handleDragOver(source, _actor, _x, _y, _time) {
|
||||
let appInfo = this._getSourceAppInfo(source);
|
||||
const appInfo = this._getSourceAppInfo(source);
|
||||
if (!appInfo)
|
||||
return DND.DragMotionResult.CONTINUE;
|
||||
|
||||
@@ -340,16 +335,16 @@ class DesktopTarget extends EventEmitter {
|
||||
}
|
||||
|
||||
acceptDrop(source, _actor, _x, _y, _time) {
|
||||
let appInfo = this._getSourceAppInfo(source);
|
||||
const appInfo = this._getSourceAppInfo(source);
|
||||
if (!appInfo)
|
||||
return false;
|
||||
|
||||
this.emit('app-dropped');
|
||||
|
||||
let desktop = GLib.get_user_special_dir(GLib.UserDirectory.DIRECTORY_DESKTOP);
|
||||
const desktop = GLib.get_user_special_dir(GLib.UserDirectory.DIRECTORY_DESKTOP);
|
||||
|
||||
let src = Gio.File.new_for_path(appInfo.get_filename());
|
||||
let dst = Gio.File.new_for_path(GLib.build_filenamev([desktop, src.get_basename()]));
|
||||
const src = Gio.File.new_for_path(appInfo.get_filename());
|
||||
const dst = Gio.File.new_for_path(GLib.build_filenamev([desktop, src.get_basename()]));
|
||||
|
||||
try {
|
||||
// copy_async() isn't introspectable :-(
|
||||
@@ -363,6 +358,20 @@ class DesktopTarget extends EventEmitter {
|
||||
}
|
||||
}
|
||||
|
||||
class MainLayout extends Clutter.BoxLayout {
|
||||
static {
|
||||
GObject.registerClass(this);
|
||||
}
|
||||
|
||||
vfunc_get_preferred_height(container, forWidth) {
|
||||
const [mainChild] = container;
|
||||
const [minHeight, natHeight] =
|
||||
mainChild.get_preferred_height(forWidth);
|
||||
|
||||
return [minHeight, natHeight + MENU_HEIGHT_OFFSET];
|
||||
}
|
||||
}
|
||||
|
||||
class ApplicationsButton extends PanelMenu.Button {
|
||||
static {
|
||||
GObject.registerClass(this);
|
||||
@@ -380,12 +389,12 @@ class ApplicationsButton extends PanelMenu.Button {
|
||||
this.accessible_role = Atk.Role.LABEL;
|
||||
|
||||
this._label = new St.Label({
|
||||
text: _('Applications'),
|
||||
text: _('Apps'),
|
||||
y_expand: true,
|
||||
y_align: Clutter.ActorAlign.CENTER,
|
||||
});
|
||||
|
||||
this.add_actor(this._label);
|
||||
this.add_child(this._label);
|
||||
this.name = 'panelApplications';
|
||||
this.label_actor = this._label;
|
||||
|
||||
@@ -432,15 +441,6 @@ class ApplicationsButton extends PanelMenu.Button {
|
||||
}
|
||||
}
|
||||
|
||||
_createVertSeparator() {
|
||||
let separator = new St.DrawingArea({
|
||||
style_class: 'calendar-vertical-separator',
|
||||
pseudo_class: 'highlighted',
|
||||
});
|
||||
separator.connect('repaint', this._onVertSepRepaint.bind(this));
|
||||
return separator;
|
||||
}
|
||||
|
||||
_onDestroy() {
|
||||
super._onDestroy();
|
||||
|
||||
@@ -452,31 +452,16 @@ class ApplicationsButton extends PanelMenu.Button {
|
||||
}
|
||||
|
||||
_onMenuKeyPress(actor, event) {
|
||||
let symbol = event.get_key_symbol();
|
||||
const symbol = event.get_key_symbol();
|
||||
if (symbol === Clutter.KEY_Left || symbol === Clutter.KEY_Right) {
|
||||
let direction = symbol === Clutter.KEY_Left
|
||||
const direction = symbol === Clutter.KEY_Left
|
||||
? Gtk.DirectionType.LEFT : Gtk.DirectionType.RIGHT;
|
||||
if (this.menu.actor.navigate_focus(global.stage.key_focus, direction, false))
|
||||
return true;
|
||||
return Clutter.EVENT_STOP;
|
||||
}
|
||||
return super._onMenuKeyPress(actor, event);
|
||||
}
|
||||
|
||||
_onVertSepRepaint(area) {
|
||||
let cr = area.get_context();
|
||||
let themeNode = area.get_theme_node();
|
||||
let [width, height] = area.get_surface_size();
|
||||
let stippleColor = themeNode.get_color('-stipple-color');
|
||||
let stippleWidth = themeNode.get_length('-stipple-width');
|
||||
let x = Math.floor(width / 2) + 0.5;
|
||||
cr.moveTo(x, 0);
|
||||
cr.lineTo(x, height);
|
||||
Clutter.cairo_set_source_color(cr, stippleColor);
|
||||
cr.setDash([1, 3], 1); // Hard-code for now
|
||||
cr.setLineWidth(stippleWidth);
|
||||
cr.stroke();
|
||||
}
|
||||
|
||||
_onOpenStateChanged(menu, open) {
|
||||
if (open) {
|
||||
if (this.reloadFlag) {
|
||||
@@ -495,15 +480,15 @@ class ApplicationsButton extends PanelMenu.Button {
|
||||
}
|
||||
|
||||
_loadCategory(categoryId, dir) {
|
||||
let iter = dir.iter();
|
||||
const iter = dir.iter();
|
||||
let nextType;
|
||||
while ((nextType = iter.next()) !== GMenu.TreeItemType.INVALID) {
|
||||
if (nextType === GMenu.TreeItemType.ENTRY) {
|
||||
let entry = iter.get_entry();
|
||||
const entry = iter.get_entry();
|
||||
let id;
|
||||
try {
|
||||
id = entry.get_desktop_file_id(); // catch non-UTF8 filenames
|
||||
} catch (e) {
|
||||
} catch {
|
||||
continue;
|
||||
}
|
||||
let app = appSys.lookup_app(id);
|
||||
@@ -514,7 +499,7 @@ class ApplicationsButton extends PanelMenu.Button {
|
||||
} else if (nextType === GMenu.TreeItemType.SEPARATOR) {
|
||||
this.applicationsByCategory[categoryId].push('separator');
|
||||
} else if (nextType === GMenu.TreeItemType.DIRECTORY) {
|
||||
let subdir = iter.get_directory();
|
||||
const subdir = iter.get_directory();
|
||||
if (!subdir.get_is_nodisplay())
|
||||
this._loadCategory(categoryId, subdir);
|
||||
}
|
||||
@@ -522,11 +507,11 @@ class ApplicationsButton extends PanelMenu.Button {
|
||||
}
|
||||
|
||||
scrollToButton(button) {
|
||||
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();
|
||||
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 newScrollValue = currentScrollValue;
|
||||
if (currentScrollValue > buttonAlloc.y1 - 10)
|
||||
newScrollValue = buttonAlloc.y1 - 10;
|
||||
@@ -537,11 +522,11 @@ class ApplicationsButton extends PanelMenu.Button {
|
||||
}
|
||||
|
||||
scrollToCatButton(button) {
|
||||
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();
|
||||
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 newScrollValue = currentScrollValue;
|
||||
if (currentScrollValue > buttonAlloc.y1 - 10)
|
||||
newScrollValue = buttonAlloc.y1 - 10;
|
||||
@@ -552,80 +537,66 @@ class ApplicationsButton extends PanelMenu.Button {
|
||||
}
|
||||
|
||||
_createLayout() {
|
||||
let section = new PopupMenu.PopupMenuSection();
|
||||
const section = new PopupMenu.PopupMenuSection();
|
||||
this.menu.addMenuItem(section);
|
||||
this.mainBox = new St.BoxLayout({vertical: false});
|
||||
this.leftBox = new St.BoxLayout({vertical: true});
|
||||
this.mainBox = new St.BoxLayout({layoutManager: new MainLayout()});
|
||||
this.leftBox = new St.BoxLayout({
|
||||
orientation: Clutter.Orientation.VERTICAL,
|
||||
});
|
||||
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({vertical: true});
|
||||
this.applicationsScrollBox.add_actor(this.applicationsBox);
|
||||
this.categoriesBox = new St.BoxLayout({vertical: true});
|
||||
this.categoriesScrollBox.add_actor(this.categoriesBox);
|
||||
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.mainBox.add(this.leftBox);
|
||||
this.mainBox.add_child(this._createVertSeparator());
|
||||
this.mainBox.add_child(this.leftBox);
|
||||
this.mainBox.add_child(this.applicationsScrollBox);
|
||||
section.actor.add_actor(this.mainBox);
|
||||
section.actor.add_child(this.mainBox);
|
||||
}
|
||||
|
||||
_display() {
|
||||
this._applicationsButtons.clear();
|
||||
this.mainBox.style = 'width: 35em;';
|
||||
this.mainBox.hide();
|
||||
|
||||
// Load categories
|
||||
this.applicationsByCategory = {};
|
||||
this._tree.load_sync();
|
||||
let root = this._tree.get_root_directory();
|
||||
const root = this._tree.get_root_directory();
|
||||
let categoryMenuItem = new CategoryMenuItem(this, null);
|
||||
this.categoriesBox.add_actor(categoryMenuItem);
|
||||
let iter = root.iter();
|
||||
this.categoriesBox.add_child(categoryMenuItem);
|
||||
const iter = root.iter();
|
||||
let nextType;
|
||||
while ((nextType = iter.next()) !== GMenu.TreeItemType.INVALID) {
|
||||
if (nextType !== GMenu.TreeItemType.DIRECTORY)
|
||||
continue;
|
||||
|
||||
let dir = iter.get_directory();
|
||||
const dir = iter.get_directory();
|
||||
if (dir.get_is_nodisplay())
|
||||
continue;
|
||||
|
||||
let categoryId = dir.get_menu_id();
|
||||
const 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_actor(categoryMenuItem);
|
||||
this.categoriesBox.add_child(categoryMenuItem);
|
||||
}
|
||||
}
|
||||
|
||||
// Load applications
|
||||
this._displayButtons(this._listApplications(null));
|
||||
|
||||
let themeContext = St.ThemeContext.get_for_stage(global.stage);
|
||||
let scaleFactor = themeContext.scale_factor;
|
||||
let categoriesHeight = this.categoriesBox.height / scaleFactor;
|
||||
let height = Math.round(categoriesHeight) + MENU_HEIGHT_OFFSET;
|
||||
this.mainBox.style += `height: ${height}px`;
|
||||
}
|
||||
|
||||
selectCategory(dir) {
|
||||
@@ -633,7 +604,7 @@ class ApplicationsButton extends PanelMenu.Button {
|
||||
if (c._delegate instanceof PopupMenu.PopupSeparatorMenuItem)
|
||||
c._delegate.destroy();
|
||||
else
|
||||
this.applicationsBox.remove_actor(c);
|
||||
this.applicationsBox.remove_child(c);
|
||||
});
|
||||
|
||||
if (dir)
|
||||
@@ -644,7 +615,7 @@ class ApplicationsButton extends PanelMenu.Button {
|
||||
|
||||
_displayButtons(apps) {
|
||||
for (let i = 0; i < apps.length; i++) {
|
||||
let app = apps[i];
|
||||
const app = apps[i];
|
||||
let item;
|
||||
if (app instanceof Shell.App)
|
||||
item = this._applicationsButtons.get(app);
|
||||
@@ -656,7 +627,7 @@ class ApplicationsButton extends PanelMenu.Button {
|
||||
this._applicationsButtons.set(app, item);
|
||||
}
|
||||
if (!item.get_parent())
|
||||
this.applicationsBox.add_actor(item);
|
||||
this.applicationsBox.add_child(item);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
"uuid": "@uuid@",
|
||||
"settings-schema": "@gschemaname@",
|
||||
"gettext-domain": "@gettext_domain@",
|
||||
"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.",
|
||||
"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.",
|
||||
"original-authors": [ "e2002@bk.ru", "debarshir@gnome.org" ],
|
||||
"shell-version": [ "@shell_current@" ],
|
||||
"url": "@url@"
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
* SPDX-License-Identifier: GPL-2.0-or-later
|
||||
*/
|
||||
|
||||
.apps-menu {width: 26em;}
|
||||
|
||||
.apps-menu:ltr {
|
||||
padding-right: 3px;
|
||||
}
|
||||
|
||||
@@ -4,9 +4,6 @@
|
||||
//
|
||||
// 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';
|
||||
@@ -22,7 +19,8 @@ class WindowMover {
|
||||
this._appSystem.connectObject('installed-changed',
|
||||
() => this._updateAppData(), this);
|
||||
|
||||
this._settings.connect('changed', this._updateAppConfigs.bind(this));
|
||||
this._settings.connectObject('changed',
|
||||
this._updateAppConfigs.bind(this), this);
|
||||
this._updateAppConfigs();
|
||||
}
|
||||
|
||||
@@ -30,7 +28,7 @@ class WindowMover {
|
||||
this._appConfigs.clear();
|
||||
|
||||
this._settings.get_strv('application-list').forEach(v => {
|
||||
let [appId, num] = v.split(':');
|
||||
const [appId, num] = v.split(':');
|
||||
this._appConfigs.set(appId, parseInt(num) - 1);
|
||||
});
|
||||
|
||||
@@ -38,15 +36,15 @@ class WindowMover {
|
||||
}
|
||||
|
||||
_updateAppData() {
|
||||
let ids = [...this._appConfigs.keys()];
|
||||
let removedApps = [...this._appData.keys()]
|
||||
const ids = [...this._appConfigs.keys()];
|
||||
const removedApps = [...this._appData.keys()]
|
||||
.filter(a => !ids.includes(a.id));
|
||||
removedApps.forEach(app => {
|
||||
app.disconnectObject(this);
|
||||
this._appData.delete(app);
|
||||
});
|
||||
|
||||
let addedApps = ids
|
||||
const addedApps = ids
|
||||
.map(id => this._appSystem.lookup_app(id))
|
||||
.filter(app => app && !this._appData.has(app));
|
||||
addedApps.forEach(app => {
|
||||
@@ -58,11 +56,8 @@ class WindowMover {
|
||||
|
||||
destroy() {
|
||||
this._appSystem.disconnectObject(this);
|
||||
|
||||
if (this._settings) {
|
||||
this._settings.run_dispose();
|
||||
this._settings = null;
|
||||
}
|
||||
this._settings.disconnectObject(this);
|
||||
this._settings = null;
|
||||
|
||||
this._appConfigs.clear();
|
||||
this._updateAppData();
|
||||
@@ -73,7 +68,7 @@ class WindowMover {
|
||||
return;
|
||||
|
||||
// ensure we have the required number of workspaces
|
||||
let workspaceManager = global.workspace_manager;
|
||||
const 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);
|
||||
@@ -83,8 +78,8 @@ class WindowMover {
|
||||
}
|
||||
|
||||
_appWindowsChanged(app) {
|
||||
let data = this._appData.get(app);
|
||||
let windows = app.get_windows();
|
||||
const data = this._appData.get(app);
|
||||
const 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
|
||||
@@ -94,7 +89,7 @@ class WindowMover {
|
||||
return !windows.includes(w) && w.get_compositor_private() !== null;
|
||||
}));
|
||||
|
||||
let workspaceNum = this._appConfigs.get(app.id);
|
||||
const workspaceNum = this._appConfigs.get(app.id);
|
||||
windows.filter(w => !data.windows.includes(w)).forEach(window => {
|
||||
this._moveWindow(window, workspaceNum);
|
||||
});
|
||||
|
||||
@@ -3,11 +3,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 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';
|
||||
@@ -45,11 +43,11 @@ class NewItemModel extends GObject.Object {
|
||||
class Rule extends GObject.Object {
|
||||
static [GObject.properties] = {
|
||||
'app-info': GObject.ParamSpec.object(
|
||||
'app-info', 'app-info', 'app-info',
|
||||
'app-info', null, null,
|
||||
GObject.ParamFlags.READWRITE,
|
||||
Gio.DesktopAppInfo),
|
||||
GioUnix.DesktopAppInfo),
|
||||
'workspace': GObject.ParamSpec.uint(
|
||||
'workspace', 'workspace', 'workspace',
|
||||
'workspace', null, null,
|
||||
GObject.ParamFlags.READWRITE,
|
||||
1, WORKSPACE_MAX, 1),
|
||||
};
|
||||
@@ -121,7 +119,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 = Gio.DesktopAppInfo.new(id);
|
||||
const appInfo = GioUnix.DesktopAppInfo.new(id);
|
||||
if (appInfo)
|
||||
this.#rules.push(new Rule({appInfo, workspace}));
|
||||
else
|
||||
@@ -196,7 +194,7 @@ class AutoMoveSettingsWidget extends Adw.PreferencesGroup {
|
||||
class WorkspaceSelector extends Gtk.Widget {
|
||||
static [GObject.properties] = {
|
||||
'number': GObject.ParamSpec.uint(
|
||||
'number', 'number', 'number',
|
||||
'number', null, null,
|
||||
GObject.ParamFlags.READWRITE,
|
||||
1, WORKSPACE_MAX, 1),
|
||||
};
|
||||
|
||||
@@ -39,18 +39,16 @@ class MountMenuItem extends PopupMenu.PopupBaseMenuItem {
|
||||
|
||||
this.mount = mount;
|
||||
|
||||
this.connect('destroy', this._onDestroy.bind(this));
|
||||
|
||||
let ejectIcon = new St.Icon({
|
||||
const ejectIcon = new St.Icon({
|
||||
icon_name: 'media-eject-symbolic',
|
||||
style_class: 'popup-menu-icon',
|
||||
});
|
||||
let ejectButton = new St.Button({
|
||||
const ejectButton = new St.Button({
|
||||
child: ejectIcon,
|
||||
style_class: 'button',
|
||||
});
|
||||
ejectButton.connect('clicked', this._eject.bind(this));
|
||||
this.add(ejectButton);
|
||||
this.add_child(ejectButton);
|
||||
|
||||
this.hide();
|
||||
|
||||
@@ -65,7 +63,7 @@ class MountMenuItem extends PopupMenu.PopupBaseMenuItem {
|
||||
if (this.mount.is_shadowed())
|
||||
return false;
|
||||
|
||||
let volume = this.mount.get_volume();
|
||||
const volume = this.mount.get_volume();
|
||||
|
||||
if (volume)
|
||||
return volume.get_identifier('class') !== 'network';
|
||||
@@ -89,7 +87,7 @@ class MountMenuItem extends PopupMenu.PopupBaseMenuItem {
|
||||
}
|
||||
|
||||
_eject() {
|
||||
let unmountArgs = [
|
||||
const unmountArgs = [
|
||||
Gio.MountUnmountFlags.NONE,
|
||||
new ShellMountOperation.ShellMountOperation(this.mount).mountOp,
|
||||
null, // Gio.Cancellable
|
||||
@@ -122,13 +120,13 @@ class MountMenuItem extends PopupMenu.PopupBaseMenuItem {
|
||||
|
||||
_reportFailure(exception) {
|
||||
// TRANSLATORS: %s is the filesystem name
|
||||
let msg = _('Ejecting drive “%s” failed:').format(this.mount.get_name());
|
||||
const msg = _('Ejecting drive “%s” failed:').format(this.mount.get_name());
|
||||
Main.notifyError(msg, exception.message);
|
||||
}
|
||||
|
||||
activate(event) {
|
||||
let uri = this.mount.get_root().get_uri();
|
||||
let context = global.create_app_launch_context(event.get_time(), -1);
|
||||
const uri = this.mount.get_root().get_uri();
|
||||
const context = global.create_app_launch_context(event.get_time(), -1);
|
||||
Gio.AppInfo.launch_default_for_uri(uri, context);
|
||||
|
||||
super.activate(event);
|
||||
@@ -143,7 +141,7 @@ class DriveMenu extends PanelMenu.Button {
|
||||
constructor() {
|
||||
super(0.5, _('Removable devices'));
|
||||
|
||||
let icon = new St.Icon({
|
||||
const icon = new St.Icon({
|
||||
icon_name: 'media-eject-symbolic',
|
||||
style_class: 'system-status-icon',
|
||||
});
|
||||
@@ -164,8 +162,8 @@ class DriveMenu extends PanelMenu.Button {
|
||||
|
||||
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||
this.menu.addAction(_('Open Files'), event => {
|
||||
let appSystem = Shell.AppSystem.get_default();
|
||||
let app = appSystem.lookup_app('org.gnome.Nautilus.desktop');
|
||||
const appSystem = Shell.AppSystem.get_default();
|
||||
const app = appSystem.lookup_app('org.gnome.Nautilus.desktop');
|
||||
app.activate_full(-1, event.get_time());
|
||||
});
|
||||
|
||||
@@ -180,7 +178,7 @@ class DriveMenu extends PanelMenu.Button {
|
||||
}
|
||||
|
||||
_addMount(mount) {
|
||||
let item = new MountMenuItem(mount);
|
||||
const item = new MountMenuItem(mount);
|
||||
this._mounts.unshift(item);
|
||||
this.menu.addMenuItem(item, 0);
|
||||
|
||||
@@ -189,7 +187,7 @@ class DriveMenu extends PanelMenu.Button {
|
||||
|
||||
_removeMount(mount) {
|
||||
for (let i = 0; i < this._mounts.length; i++) {
|
||||
let item = this._mounts[i];
|
||||
const item = this._mounts[i];
|
||||
if (item.mount === mount) {
|
||||
item.destroy();
|
||||
this._mounts.splice(i, 1);
|
||||
|
||||
@@ -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@"
|
||||
|
||||
@@ -16,18 +16,20 @@ 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)
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
//
|
||||
// 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';
|
||||
@@ -30,7 +29,7 @@ class Rect {
|
||||
}
|
||||
|
||||
union(rect2) {
|
||||
let dest = this.copy();
|
||||
const dest = this.copy();
|
||||
if (rect2.x < dest.x) {
|
||||
dest.width += dest.x - rect2.x;
|
||||
dest.x = rect2.x;
|
||||
@@ -48,7 +47,7 @@ class Rect {
|
||||
}
|
||||
|
||||
adjusted(dx, dy, dx2, dy2) {
|
||||
let dest = this.copy();
|
||||
const dest = this.copy();
|
||||
dest.x += dx;
|
||||
dest.y += dy;
|
||||
dest.width += -dx + dx2;
|
||||
@@ -95,16 +94,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.
|
||||
|
||||
let areaRect = new Rect(area.x, area.y, area.width, area.height);
|
||||
const areaRect = new Rect(area.x, area.y, area.width, area.height);
|
||||
let bounds = areaRect.copy();
|
||||
let clones = layout.windows;
|
||||
const clones = layout.windows;
|
||||
|
||||
let direction = 0;
|
||||
let directions = [];
|
||||
let rects = [];
|
||||
const directions = [];
|
||||
const 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]
|
||||
let rect = clones[i].boundingBox;
|
||||
const rect = clones[i].boundingBox;
|
||||
rects[i] = new Rect(rect.x, rect.y, rect.width, rect.height);
|
||||
bounds = bounds.union(rects[i]);
|
||||
|
||||
@@ -121,10 +120,10 @@ class NaturalLayoutStrategy extends Workspace.LayoutStrategy {
|
||||
overlap = false;
|
||||
for (let i = 0; i < rects.length; i++) {
|
||||
for (let j = 0; j < rects.length; j++) {
|
||||
let adjustments = [-1, -1, 1, 1]
|
||||
const adjustments = [-1, -1, 1, 1]
|
||||
.map(v => (v *= WINDOW_PLACEMENT_NATURAL_GAPS));
|
||||
let iAdjusted = rects[i].adjusted(...adjustments);
|
||||
let jAdjusted = rects[j].adjusted(...adjustments);
|
||||
const iAdjusted = rects[i].adjusted(...adjustments);
|
||||
const jAdjusted = rects[j].adjusted(...adjustments);
|
||||
if (i !== j && iAdjusted.overlap(jAdjusted)) {
|
||||
loopCounter++;
|
||||
overlap = true;
|
||||
@@ -133,8 +132,8 @@ class NaturalLayoutStrategy extends Workspace.LayoutStrategy {
|
||||
|
||||
// Determine pushing direction
|
||||
let iCenter = rects[i].center();
|
||||
let jCenter = rects[j].center();
|
||||
let diff = [jCenter[0] - iCenter[0], jCenter[1] - iCenter[1]];
|
||||
const jCenter = rects[j].center();
|
||||
const diff = [jCenter[0] - iCenter[0], jCenter[1] - iCenter[1]];
|
||||
|
||||
// Prevent dividing by zero and non-movement
|
||||
if (diff[0] === 0 && diff[1] === 0)
|
||||
@@ -211,8 +210,7 @@ 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.
|
||||
let scale;
|
||||
scale = Math.min(
|
||||
const scale = Math.min(
|
||||
areaRect.width / bounds.width,
|
||||
areaRect.height / bounds.height,
|
||||
1.0);
|
||||
@@ -229,7 +227,7 @@ class NaturalLayoutStrategy extends Workspace.LayoutStrategy {
|
||||
|
||||
|
||||
// rescale to workspace
|
||||
let slots = [];
|
||||
const 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;
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
//
|
||||
// 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';
|
||||
@@ -20,32 +19,17 @@ import {PlacesManager} from './placeDisplay.js';
|
||||
|
||||
const N_ = x => x;
|
||||
|
||||
const PLACE_ICON_SIZE = 16;
|
||||
|
||||
class PlaceMenuItem extends PopupMenu.PopupBaseMenuItem {
|
||||
class PlaceMenuItem extends PopupMenu.PopupImageMenuItem {
|
||||
static {
|
||||
GObject.registerClass(this);
|
||||
}
|
||||
|
||||
constructor(info) {
|
||||
super({
|
||||
super(info.name, info.icon, {
|
||||
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',
|
||||
@@ -70,8 +54,8 @@ class PlaceMenuItem extends PopupMenu.PopupBaseMenuItem {
|
||||
}
|
||||
|
||||
_propertiesChanged(info) {
|
||||
this._icon.gicon = info.icon;
|
||||
this._label.text = info.name;
|
||||
this.setIcon(info.icon);
|
||||
this.label.text = info.name;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -90,19 +74,19 @@ class PlacesMenu extends PanelMenu.Button {
|
||||
constructor() {
|
||||
super(0.5, _('Places'));
|
||||
|
||||
let label = new St.Label({
|
||||
const label = new St.Label({
|
||||
text: _('Places'),
|
||||
y_expand: true,
|
||||
y_align: Clutter.ActorAlign.CENTER,
|
||||
});
|
||||
this.add_actor(label);
|
||||
this.add_child(label);
|
||||
|
||||
this.placesManager = new PlacesManager();
|
||||
|
||||
this._sections = { };
|
||||
|
||||
for (let i = 0; i < SECTIONS.length; i++) {
|
||||
let id = SECTIONS[i];
|
||||
const id = SECTIONS[i];
|
||||
this._sections[id] = new PopupMenu.PopupMenuSection();
|
||||
this.placesManager.connect(`${id}-updated`, () => {
|
||||
this._redisplay(id);
|
||||
@@ -126,7 +110,7 @@ class PlacesMenu extends PanelMenu.Button {
|
||||
}
|
||||
|
||||
_create(id) {
|
||||
let places = this.placesManager.get(id);
|
||||
const places = this.placesManager.get(id);
|
||||
|
||||
for (let i = 0; i < places.length; i++)
|
||||
this._sections[id].addMenuItem(new PlaceMenuItem(places[i]));
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
//
|
||||
// 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';
|
||||
@@ -24,13 +23,6 @@ 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();
|
||||
@@ -61,15 +53,15 @@ class PlaceInfo extends EventEmitter {
|
||||
return;
|
||||
}
|
||||
|
||||
let source = {
|
||||
get_icon: () => this.icon,
|
||||
const source = {
|
||||
get_drive: () => null,
|
||||
};
|
||||
let op = new ShellMountOperation.ShellMountOperation(source);
|
||||
const op = new ShellMountOperation.ShellMountOperation(source);
|
||||
try {
|
||||
await this.file.mount_enclosing_volume(0, op.mountOp, null);
|
||||
|
||||
if (tryMount)
|
||||
this._ensureMountAndLaunch(context, false);
|
||||
this._ensureMountAndLaunch(context, false).catch(logError);
|
||||
} catch (e) {
|
||||
if (!e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.FAILED_HANDLED))
|
||||
Main.notifyError(_('Failed to mount volume for “%s”').format(this.name), e.message);
|
||||
@@ -80,8 +72,8 @@ class PlaceInfo extends EventEmitter {
|
||||
}
|
||||
|
||||
launch(timestamp) {
|
||||
let launchContext = global.create_app_launch_context(timestamp, -1);
|
||||
this._ensureMountAndLaunch(launchContext, true);
|
||||
const launchContext = global.create_app_launch_context(timestamp, -1);
|
||||
this._ensureMountAndLaunch(launchContext, true).catch(logError);
|
||||
}
|
||||
|
||||
getIcon() {
|
||||
@@ -91,7 +83,7 @@ class PlaceInfo extends EventEmitter {
|
||||
null,
|
||||
(file, result) => {
|
||||
try {
|
||||
let info = file.query_info_finish(result);
|
||||
const info = file.query_info_finish(result);
|
||||
this.icon = info.get_symbolic_icon();
|
||||
this.emit('changed');
|
||||
} catch (e) {
|
||||
@@ -120,7 +112,7 @@ class PlaceInfo extends EventEmitter {
|
||||
|
||||
_getFileName() {
|
||||
try {
|
||||
let info = this.file.query_info('standard::display-name', 0, null);
|
||||
const info = this.file.query_info('standard::display-name', 0, null);
|
||||
return info.get_display_name();
|
||||
} catch (e) {
|
||||
if (e instanceof Gio.IOErrorEnum)
|
||||
@@ -130,46 +122,20 @@ class PlaceInfo extends EventEmitter {
|
||||
}
|
||||
}
|
||||
|
||||
class RootInfo extends PlaceInfo {
|
||||
_init() {
|
||||
super._init('devices', Gio.File.new_for_path('/'), _('Computer'));
|
||||
class NautilusSpecialInfo extends PlaceInfo {
|
||||
constructor(file, name, icon) {
|
||||
super('special', file, name, icon);
|
||||
|
||||
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.connect('g-properties-changed',
|
||||
this._propertiesChanged.bind(this));
|
||||
this._propertiesChanged(obj);
|
||||
});
|
||||
const appSystem = Shell.AppSystem.get_default();
|
||||
this._app = appSystem.lookup_app('org.gnome.Nautilus.desktop');
|
||||
}
|
||||
|
||||
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() {
|
||||
if (this._proxy) {
|
||||
this._proxy.run_dispose();
|
||||
this._proxy = null;
|
||||
}
|
||||
super.destroy();
|
||||
launch(timestamp) {
|
||||
const launchContext = global.create_app_launch_context(timestamp, -1);
|
||||
this._app.appInfo.launch([this.file], launchContext);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class PlaceDeviceInfo extends PlaceInfo {
|
||||
_init(kind, mount) {
|
||||
this._mount = mount;
|
||||
@@ -185,7 +151,7 @@ class PlaceDeviceInfo extends PlaceInfo {
|
||||
}
|
||||
|
||||
eject() {
|
||||
let unmountArgs = [
|
||||
const unmountArgs = [
|
||||
Gio.MountUnmountFlags.NONE,
|
||||
new ShellMountOperation.ShellMountOperation(this._mount).mountOp,
|
||||
null, // Gio.Cancellable
|
||||
@@ -217,7 +183,7 @@ class PlaceDeviceInfo extends PlaceInfo {
|
||||
}
|
||||
|
||||
_reportFailure(exception) {
|
||||
let msg = _('Ejecting drive “%s” failed:').format(this._mount.get_name());
|
||||
const msg = _('Ejecting drive “%s” failed:').format(this._mount.get_name());
|
||||
Main.notifyError(msg, exception.message);
|
||||
}
|
||||
}
|
||||
@@ -237,7 +203,7 @@ class PlaceVolumeInfo extends PlaceInfo {
|
||||
this._volume.mount(0, null, null, (volume, result) => {
|
||||
volume.mount_finish(result);
|
||||
|
||||
let mount = volume.get_mount();
|
||||
const mount = volume.get_mount();
|
||||
this.file = mount.get_root();
|
||||
super.launch(timestamp);
|
||||
});
|
||||
@@ -248,14 +214,6 @@ 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();
|
||||
@@ -270,6 +228,12 @@ 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();
|
||||
|
||||
/*
|
||||
@@ -303,7 +267,7 @@ export class PlacesManager extends EventEmitter {
|
||||
GLib.PRIORITY_DEFAULT, 100, () => {
|
||||
this._bookmarkTimeoutId = 0;
|
||||
this._reloadBookmarks();
|
||||
return false;
|
||||
return GLib.SOURCE_REMOVE;
|
||||
});
|
||||
});
|
||||
|
||||
@@ -315,6 +279,9 @@ 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)
|
||||
@@ -323,74 +290,92 @@ 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 = [];
|
||||
|
||||
let homePath = GLib.get_home_dir();
|
||||
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());
|
||||
|
||||
this._places.special.push(new PlaceInfo(
|
||||
'special',
|
||||
Gio.File.new_for_path(homePath),
|
||||
homeFile,
|
||||
_('Home')));
|
||||
|
||||
let specials = [];
|
||||
let dirs = DEFAULT_DIRECTORIES.slice();
|
||||
|
||||
if (this._settings.get_boolean('show-desktop-icons'))
|
||||
dirs.push(GLib.UserDirectory.DIRECTORY_DESKTOP);
|
||||
|
||||
for (let i = 0; i < dirs.length; i++) {
|
||||
let specialPath = GLib.get_user_special_dir(dirs[i]);
|
||||
if (!specialPath || specialPath === homePath)
|
||||
continue;
|
||||
|
||||
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 (this._shouldShowRecent()) {
|
||||
this._places.special.push(new PlaceInfo(
|
||||
'special',
|
||||
Gio.File.new_for_uri('recent:///'),
|
||||
_('Recent')));
|
||||
}
|
||||
|
||||
specials.sort((a, b) => GLib.utf8_collate(a.name, b.name));
|
||||
this._places.special = this._places.special.concat(specials);
|
||||
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')) {
|
||||
const desktopPath = GLib.get_user_special_dir(
|
||||
GLib.UserDirectory.DIRECTORY_DESKTOP);
|
||||
const desktopFile = desktopPath
|
||||
? Gio.File.new_for_path(desktopPath)
|
||||
: null;
|
||||
|
||||
if (desktopFile && !desktopFile.equal(homeFile)) {
|
||||
this._places.special.push(
|
||||
new PlaceInfo('special', desktopFile));
|
||||
}
|
||||
}
|
||||
|
||||
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')));
|
||||
|
||||
this.emit('special-updated');
|
||||
}
|
||||
|
||||
_updateMounts() {
|
||||
let networkMounts = [];
|
||||
let networkVolumes = [];
|
||||
const networkMounts = [];
|
||||
const 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 */
|
||||
let drives = this._volumeMonitor.get_connected_drives();
|
||||
const drives = this._volumeMonitor.get_connected_drives();
|
||||
for (let i = 0; i < drives.length; i++) {
|
||||
let volumes = drives[i].get_volumes();
|
||||
const volumes = drives[i].get_volumes();
|
||||
|
||||
for (let j = 0; j < volumes.length; j++) {
|
||||
let identifier = volumes[j].get_identifier('class');
|
||||
const identifier = volumes[j].get_identifier('class');
|
||||
if (identifier && identifier.includes('network')) {
|
||||
networkVolumes.push(volumes[j]);
|
||||
} else {
|
||||
let mount = volumes[j].get_mount();
|
||||
const mount = volumes[j].get_mount();
|
||||
if (mount)
|
||||
this._addMount('devices', mount);
|
||||
}
|
||||
@@ -398,23 +383,23 @@ export class PlacesManager extends EventEmitter {
|
||||
}
|
||||
|
||||
/* add all volumes that is not associated with a drive */
|
||||
let volumes = this._volumeMonitor.get_volumes();
|
||||
const volumes = this._volumeMonitor.get_volumes();
|
||||
for (let i = 0; i < volumes.length; i++) {
|
||||
if (volumes[i].get_drive())
|
||||
continue;
|
||||
|
||||
let identifier = volumes[i].get_identifier('class');
|
||||
const identifier = volumes[i].get_identifier('class');
|
||||
if (identifier && identifier.includes('network')) {
|
||||
networkVolumes.push(volumes[i]);
|
||||
} else {
|
||||
let mount = volumes[i].get_mount();
|
||||
const mount = volumes[i].get_mount();
|
||||
if (mount)
|
||||
this._addMount('devices', mount);
|
||||
}
|
||||
}
|
||||
|
||||
/* add mounts that have no volume (/etc/mtab mounts, ftp, sftp,...) */
|
||||
let mounts = this._volumeMonitor.get_mounts();
|
||||
const mounts = this._volumeMonitor.get_mounts();
|
||||
for (let i = 0; i < mounts.length; i++) {
|
||||
if (mounts[i].is_shadowed())
|
||||
continue;
|
||||
@@ -422,7 +407,7 @@ export class PlacesManager extends EventEmitter {
|
||||
if (mounts[i].get_volume())
|
||||
continue;
|
||||
|
||||
let root = mounts[i].get_default_location();
|
||||
const root = mounts[i].get_default_location();
|
||||
if (!root.is_native()) {
|
||||
networkMounts.push(mounts[i]);
|
||||
continue;
|
||||
@@ -431,7 +416,7 @@ export class PlacesManager extends EventEmitter {
|
||||
}
|
||||
|
||||
for (let i = 0; i < networkVolumes.length; i++) {
|
||||
let mount = networkVolumes[i].get_mount();
|
||||
const mount = networkVolumes[i].get_mount();
|
||||
if (mount) {
|
||||
networkMounts.push(mount);
|
||||
continue;
|
||||
@@ -448,7 +433,7 @@ export class PlacesManager extends EventEmitter {
|
||||
}
|
||||
|
||||
_findBookmarksFile() {
|
||||
let paths = [
|
||||
const paths = [
|
||||
GLib.build_filenamev([GLib.get_user_config_dir(), 'gtk-3.0', 'bookmarks']),
|
||||
GLib.build_filenamev([GLib.get_home_dir(), '.gtk-bookmarks']),
|
||||
];
|
||||
@@ -464,19 +449,19 @@ export class PlacesManager extends EventEmitter {
|
||||
_reloadBookmarks() {
|
||||
this._bookmarks = [];
|
||||
|
||||
let content = Shell.get_file_contents_utf8_sync(this._bookmarksFile.get_path());
|
||||
let lines = content.split('\n');
|
||||
const content = Shell.get_file_contents_utf8_sync(this._bookmarksFile.get_path());
|
||||
const lines = content.split('\n');
|
||||
|
||||
let bookmarks = [];
|
||||
const bookmarks = [];
|
||||
for (let i = 0; i < lines.length; i++) {
|
||||
let line = lines[i];
|
||||
let components = line.split(' ');
|
||||
let [bookmark] = components;
|
||||
const line = lines[i];
|
||||
const components = line.split(' ');
|
||||
const [bookmark] = components;
|
||||
|
||||
if (!bookmark)
|
||||
continue;
|
||||
|
||||
let file = Gio.File.new_for_uri(bookmark);
|
||||
const file = Gio.File.new_for_uri(bookmark);
|
||||
if (file.is_native() && !file.query_exists(null))
|
||||
continue;
|
||||
|
||||
@@ -511,30 +496,12 @@ export class PlacesManager extends EventEmitter {
|
||||
}
|
||||
|
||||
_addMount(kind, mount) {
|
||||
let devItem;
|
||||
|
||||
try {
|
||||
devItem = new PlaceDeviceInfo(kind, mount);
|
||||
} catch (e) {
|
||||
if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND))
|
||||
return;
|
||||
throw e;
|
||||
}
|
||||
|
||||
const devItem = new PlaceDeviceInfo(kind, mount);
|
||||
this._places[kind].push(devItem);
|
||||
}
|
||||
|
||||
_addVolume(kind, volume) {
|
||||
let volItem;
|
||||
|
||||
try {
|
||||
volItem = new PlaceVolumeInfo(kind, volume);
|
||||
} catch (e) {
|
||||
if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND))
|
||||
return;
|
||||
throw e;
|
||||
}
|
||||
|
||||
const volItem = new PlaceVolumeInfo(kind, volume);
|
||||
this._places[kind].push(volItem);
|
||||
}
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@ export default class ScreenshotWindowSizerExtension extends Extension {
|
||||
[624, 351],
|
||||
[800, 450],
|
||||
[1024, 576],
|
||||
[1000, 700],
|
||||
[1200, 675],
|
||||
[1600, 900],
|
||||
[360, 654], // Phone portrait maximized
|
||||
@@ -33,7 +34,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_actor(this._text);
|
||||
Main.uiGroup.add_child(this._text);
|
||||
}
|
||||
|
||||
this._text.remove_all_transitions();
|
||||
@@ -62,24 +63,22 @@ 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, binding) {
|
||||
// Probably this isn't useful with 5 sizes, but you can decrease instead
|
||||
// of increase by holding down shift.
|
||||
let modifiers = binding.get_modifiers();
|
||||
let backwards = (modifiers & Meta.VirtualModifier.SHIFT_MASK) !== 0;
|
||||
_cycleScreenshotSizes(display, window, event, binding) {
|
||||
const backwards = binding.is_reversed();
|
||||
|
||||
// Unmaximize first
|
||||
if (window.get_maximized() !== 0)
|
||||
window.unmaximize(Meta.MaximizeFlags.BOTH);
|
||||
if (window.is_maximized())
|
||||
window.unmaximize();
|
||||
|
||||
let workArea = window.get_work_area_current_monitor();
|
||||
let outerRect = window.get_frame_rect();
|
||||
const workArea = window.get_work_area_current_monitor();
|
||||
const outerRect = window.get_frame_rect();
|
||||
|
||||
// Double both axes if on a hidpi display
|
||||
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
|
||||
let scaledSizes = this.SIZES.map(size => size.map(wh => wh * scaleFactor))
|
||||
const scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
|
||||
const 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
|
||||
@@ -87,10 +86,10 @@ export default class ScreenshotWindowSizerExtension extends Extension {
|
||||
let nearestError;
|
||||
|
||||
for (let i = 0; i < scaledSizes.length; i++) {
|
||||
let [width, height] = scaledSizes[i];
|
||||
const [width, height] = scaledSizes[i];
|
||||
|
||||
// get the best initial window size
|
||||
let error = Math.abs(width - outerRect.width) + Math.abs(height - outerRect.height);
|
||||
const error = Math.abs(width - outerRect.width) + Math.abs(height - outerRect.height);
|
||||
if (nearestIndex === undefined || error < nearestError) {
|
||||
nearestIndex = i;
|
||||
nearestError = error;
|
||||
@@ -98,8 +97,8 @@ export default class ScreenshotWindowSizerExtension extends Extension {
|
||||
}
|
||||
|
||||
// get the next size up or down from ideal
|
||||
let newIndex = (nearestIndex + (backwards ? -1 : 1)) % scaledSizes.length;
|
||||
let [newWidth, newHeight] = scaledSizes[newIndex];
|
||||
const newIndex = (nearestIndex + (backwards ? -1 : 1)) % scaledSizes.length;
|
||||
const [newWidth, newHeight] = scaledSizes.at(newIndex);
|
||||
|
||||
// Push the window onscreen if it would be resized offscreen
|
||||
let newX = outerRect.x;
|
||||
@@ -121,7 +120,7 @@ export default class ScreenshotWindowSizerExtension extends Extension {
|
||||
*/
|
||||
_notifySizeChange(window) {
|
||||
const {scaleFactor} = St.ThemeContext.get_for_stage(global.stage);
|
||||
let newOuterRect = window.get_frame_rect();
|
||||
const newOuterRect = window.get_frame_rect();
|
||||
let message = '%d×%d'.format(
|
||||
newOuterRect.width / scaleFactor,
|
||||
newOuterRect.height / scaleFactor);
|
||||
@@ -129,7 +128,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
|
||||
let actualNumerator = 9 * newOuterRect.width / newOuterRect.height;
|
||||
const actualNumerator = 9 * newOuterRect.width / newOuterRect.height;
|
||||
if (Math.abs(actualNumerator - 16) > 0.01)
|
||||
message += ' (%.2f:9)'.format(actualNumerator);
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"settings-schema": "@gschemaname@",
|
||||
"gettext-domain": "@gettext_domain@",
|
||||
"name": "Screenshot Window Sizer",
|
||||
"description": "Resize windows for GNOME Software screenshots",
|
||||
"description": "Resize windows for GNOME Software screenshots with Ctrl+Alt+s shortcut",
|
||||
"shell-version": [ "@shell_current@" ],
|
||||
"url": "@url@"
|
||||
}
|
||||
|
||||
91
extensions/status-icons/extension.js
Normal file
91
extensions/status-icons/extension.js
Normal file
@@ -0,0 +1,91 @@
|
||||
// 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;
|
||||
}
|
||||
}
|
||||
9
extensions/status-icons/meson.build
Normal file
9
extensions/status-icons/meson.build
Normal file
@@ -0,0 +1,9 @@
|
||||
# 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
|
||||
)
|
||||
10
extensions/status-icons/metadata.json.in
Normal file
10
extensions/status-icons/metadata.json.in
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"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@"
|
||||
}
|
||||
490
extensions/system-monitor/extension.js
Normal file
490
extensions/system-monitor/extension.js
Normal file
@@ -0,0 +1,490 @@
|
||||
/*
|
||||
* 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;
|
||||
}
|
||||
}
|
||||
46
extensions/system-monitor/icons/download-symbolic.svg
Normal file
46
extensions/system-monitor/icons/download-symbolic.svg
Normal file
@@ -0,0 +1,46 @@
|
||||
<?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>
|
||||
|
After Width: | Height: | Size: 2.5 KiB |
@@ -0,0 +1,3 @@
|
||||
SPDX-FileCopyrightText: Icon Development Kit
|
||||
|
||||
SPDX-License-Identifier: CC0-1.0
|
||||
2
extensions/system-monitor/icons/memory-symbolic.svg
Normal file
2
extensions/system-monitor/icons/memory-symbolic.svg
Normal file
@@ -0,0 +1,2 @@
|
||||
<?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>
|
||||
|
After Width: | Height: | Size: 631 B |
@@ -0,0 +1,3 @@
|
||||
SPDX-FileCopyrightText: Icon Development Kit
|
||||
|
||||
SPDX-License-Identifier: CC0-1.0
|
||||
2
extensions/system-monitor/icons/processor-symbolic.svg
Normal file
2
extensions/system-monitor/icons/processor-symbolic.svg
Normal file
@@ -0,0 +1,2 @@
|
||||
<?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>
|
||||
|
After Width: | Height: | Size: 943 B |
@@ -0,0 +1,3 @@
|
||||
SPDX-FileCopyrightText: Icon Development Kit
|
||||
|
||||
SPDX-License-Identifier: CC0-1.0
|
||||
2
extensions/system-monitor/icons/swap-symbolic.svg
Normal file
2
extensions/system-monitor/icons/swap-symbolic.svg
Normal file
@@ -0,0 +1,2 @@
|
||||
<?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>
|
||||
|
After Width: | Height: | Size: 941 B |
@@ -0,0 +1,3 @@
|
||||
SPDX-FileCopyrightText: Icon Development Kit
|
||||
|
||||
SPDX-License-Identifier: CC0-1.0
|
||||
46
extensions/system-monitor/icons/upload-symbolic.svg
Normal file
46
extensions/system-monitor/icons/upload-symbolic.svg
Normal file
@@ -0,0 +1,46 @@
|
||||
<?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>
|
||||
|
After Width: | Height: | Size: 2.5 KiB |
@@ -0,0 +1,3 @@
|
||||
SPDX-FileCopyrightText: Icon Development Kit
|
||||
|
||||
SPDX-License-Identifier: CC0-1.0
|
||||
14
extensions/system-monitor/meson.build
Normal file
14
extensions/system-monitor/meson.build
Normal file
@@ -0,0 +1,14 @@
|
||||
# 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))
|
||||
10
extensions/system-monitor/metadata.json.in
Normal file
10
extensions/system-monitor/metadata.json.in
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"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@"
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
<!--
|
||||
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>
|
||||
18
extensions/system-monitor/stylesheet.css
Normal file
18
extensions/system-monitor/stylesheet.css
Normal file
@@ -0,0 +1,18 @@
|
||||
/*
|
||||
* 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;}
|
||||
@@ -5,9 +5,6 @@
|
||||
//
|
||||
// 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';
|
||||
@@ -21,12 +18,13 @@ const SETTINGS_KEY = 'name';
|
||||
export default class ThemeManager extends Extension {
|
||||
enable() {
|
||||
this._settings = this.getSettings();
|
||||
this._settings.connect(`changed::${SETTINGS_KEY}`, this._changeTheme.bind(this));
|
||||
this._settings.connectObject(`changed::${SETTINGS_KEY}`,
|
||||
this._changeTheme.bind(this), this);
|
||||
this._changeTheme();
|
||||
}
|
||||
|
||||
disable() {
|
||||
this._settings?.run_dispose();
|
||||
this._settings?.disconnectObject();
|
||||
this._settings = null;
|
||||
|
||||
Main.setThemeStylesheet(null);
|
||||
@@ -35,7 +33,7 @@ export default class ThemeManager extends Extension {
|
||||
|
||||
_changeTheme() {
|
||||
let stylesheet = null;
|
||||
let themeName = this._settings.get_string(SETTINGS_KEY);
|
||||
const themeName = this._settings.get_string(SETTINGS_KEY);
|
||||
|
||||
if (themeName) {
|
||||
const stylesheetPaths = getThemeDirs()
|
||||
@@ -45,7 +43,7 @@ export default class ThemeManager extends Extension {
|
||||
.map(dir => `${dir}/${themeName}.css`));
|
||||
|
||||
stylesheet = stylesheetPaths.find(path => {
|
||||
let file = Gio.file_new_for_path(path);
|
||||
const file = Gio.file_new_for_path(path);
|
||||
return file.query_exists(null);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -2,8 +2,6 @@
|
||||
//
|
||||
// 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 */
|
||||
|
||||
@@ -36,7 +34,7 @@ class UserThemePrefsWidget extends Adw.PreferencesGroup {
|
||||
this._actionGroup.add_action(
|
||||
this._settings.create_action('name'));
|
||||
|
||||
this.connect('destroy', () => this._settings.run_dispose());
|
||||
this.connect('destroy', () => (this._settings = null));
|
||||
|
||||
this._rows = new Map();
|
||||
this._addTheme(''); // default
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -12,5 +12,33 @@ extension_data += files(
|
||||
'stylesheet-light.css'
|
||||
)
|
||||
|
||||
extension_sources += files('prefs.js', 'windowPicker.js', 'workspaceIndicator.js')
|
||||
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_schemas += files(metadata_conf.get('gschemaname') + '.gschema.xml')
|
||||
|
||||
@@ -36,5 +36,9 @@ 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>
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
//
|
||||
// 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';
|
||||
@@ -12,13 +11,18 @@ import Gtk from 'gi://Gtk';
|
||||
|
||||
import {ExtensionPreferences, gettext as _} from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js';
|
||||
|
||||
class WindowListPrefsWidget extends Adw.PreferencesPage {
|
||||
import {WorkspacesPage} from './workspacePrefs.js';
|
||||
|
||||
class WindowListPage extends Adw.PreferencesPage {
|
||||
static {
|
||||
GObject.registerClass(this);
|
||||
}
|
||||
|
||||
constructor(settings) {
|
||||
super();
|
||||
super({
|
||||
title: _('Window List'),
|
||||
icon_name: 'focus-windows-symbolic',
|
||||
});
|
||||
|
||||
this._actionGroup = new Gio.SimpleActionGroup();
|
||||
this.insert_action_group('window-list', this._actionGroup);
|
||||
@@ -30,6 +34,8 @@ class WindowListPrefsWidget 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'),
|
||||
@@ -58,34 +64,24 @@ class WindowListPrefsWidget extends Adw.PreferencesPage {
|
||||
const miscGroup = new Adw.PreferencesGroup();
|
||||
this.add(miscGroup);
|
||||
|
||||
let toggle = new Gtk.Switch({
|
||||
action_name: 'window-list.show-on-all-monitors',
|
||||
valign: Gtk.Align.CENTER,
|
||||
});
|
||||
let row = new Adw.ActionRow({
|
||||
let row = new Adw.SwitchRow({
|
||||
title: _('Show on all monitors'),
|
||||
activatable_widget: toggle,
|
||||
action_name: 'window-list.show-on-all-monitors',
|
||||
});
|
||||
row.add_suffix(toggle);
|
||||
miscGroup.add(row);
|
||||
|
||||
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({
|
||||
row = new Adw.SwitchRow({
|
||||
title: _('Show windows from all workspaces'),
|
||||
activatable_widget: toggle,
|
||||
action_name: 'window-list.display-all-workspaces',
|
||||
});
|
||||
row.add_suffix(toggle);
|
||||
miscGroup.add(row);
|
||||
}
|
||||
}
|
||||
|
||||
export default class WindowListPrefs extends ExtensionPreferences {
|
||||
getPreferencesWidget() {
|
||||
return new WindowListPrefsWidget(this.getSettings());
|
||||
fillPreferencesWindow(window) {
|
||||
const settings = this.getSettings();
|
||||
window.add(new WindowListPage(settings));
|
||||
window.add(new WorkspacesPage(settings));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,117 +4,116 @@
|
||||
*
|
||||
* 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;
|
||||
font-size: 10pt;
|
||||
spacing: 2px;
|
||||
font-size: 10pt;
|
||||
}
|
||||
|
||||
.bottom-panel {
|
||||
background-color: #000000;
|
||||
border-top-width: 0px;
|
||||
padding: 2px;
|
||||
background-color: #000000;
|
||||
border-top-width: 0px;
|
||||
height: 2.45em;
|
||||
}
|
||||
|
||||
.window-button {
|
||||
padding: 2px, 1px;
|
||||
.window-button,
|
||||
.window-button-drag-actor {
|
||||
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;
|
||||
padding-left: 2px;
|
||||
}
|
||||
|
||||
.window-button:last-child:rtl {
|
||||
padding-right: 2px;
|
||||
padding-right: 2px;
|
||||
}
|
||||
|
||||
.window-button-box {
|
||||
spacing: 4px;
|
||||
}
|
||||
|
||||
.window-button > StWidget,
|
||||
.window-picker-toggle > StWidget {
|
||||
color: #bbb;
|
||||
background-color: #1d1d1d;
|
||||
border-radius: 4px;
|
||||
padding: 3px 6px 1px;
|
||||
transition: 100ms ease;
|
||||
spacing: 4px;
|
||||
}
|
||||
|
||||
.window-button > StWidget {
|
||||
-st-natural-width: 18.75em;
|
||||
max-width: 18.75em;
|
||||
color: #fff;
|
||||
background-color: transparent;
|
||||
border-radius: 4px;
|
||||
padding: 3px 6px 1px;
|
||||
transition: 100ms ease;
|
||||
}
|
||||
|
||||
.window-button:hover > StWidget,
|
||||
.window-picker-toggle:hover > StWidget {
|
||||
color: #fff;
|
||||
background-color: #303030;
|
||||
.window-button > StWidget,
|
||||
.window-list .placeholder {
|
||||
-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 {
|
||||
background-color: #303030;
|
||||
}
|
||||
|
||||
.window-button:active > StWidget,
|
||||
.window-button:focus > StWidget {
|
||||
color: #fff;
|
||||
background-color: #3f3f3f;
|
||||
background-color: st-lighten(#303030, 5%);
|
||||
}
|
||||
|
||||
.window-button.focused > StWidget,
|
||||
.window-picker-toggle:checked > StWidget {
|
||||
color: #fff;
|
||||
background-color: #3f3f3f;
|
||||
.window-button.focused > StWidget {
|
||||
background-color: #5b5b5b;
|
||||
}
|
||||
|
||||
.window-button.focused:active > StWidget,
|
||||
.window-picker-toggle:checked:active > 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.minimized > StWidget {
|
||||
color: #666;
|
||||
background-color: #161616;
|
||||
color: #666;
|
||||
background-color: #161616;
|
||||
}
|
||||
|
||||
.window-button.minimized:active > StWidget {
|
||||
color: #666;
|
||||
background-color: #161616;
|
||||
color: #666;
|
||||
background-color: #161616;
|
||||
}
|
||||
|
||||
.window-button-icon {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
}
|
||||
|
||||
.window-list-workspace-indicator .status-label-bin {
|
||||
background-color: rgba(200, 200, 200, 0.3);
|
||||
padding: 0 3px;
|
||||
margin: 3px;
|
||||
.window-button-abstract-label {
|
||||
background-color: #888;
|
||||
border-radius: 99px;
|
||||
margin: 6px;
|
||||
}
|
||||
|
||||
.window-list-workspace-indicator .workspaces-box {
|
||||
spacing: 3px;
|
||||
padding: 3px;
|
||||
.window-button-attention-indicator {
|
||||
background-color: -st-accent-color;
|
||||
height: 2px;
|
||||
}
|
||||
|
||||
.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;
|
||||
.window-button.minimized .window-button-attention-indicator {
|
||||
background-color: st-transparentize(-st-accent-color, 0.4);
|
||||
}
|
||||
|
||||
@@ -6,70 +6,61 @@
|
||||
*/
|
||||
|
||||
@import url("stylesheet-dark.css");
|
||||
@import url("stylesheet-workspace-switcher-light.css");
|
||||
|
||||
#panel.bottom-panel {
|
||||
border-top-width: 1px;
|
||||
border-bottom-width: 0px;
|
||||
height: 2.25em ;
|
||||
padding: 2px;
|
||||
height: 2.5em;
|
||||
}
|
||||
|
||||
.bottom-panel .window-button > StWidget,
|
||||
.bottom-panel .window-picker-toggle > StWidget {
|
||||
color: #2e3436;
|
||||
background-color: #eee;
|
||||
.bottom-panel .window-button > StWidget {
|
||||
border-radius: 3px;
|
||||
padding: 3px 6px 1px;
|
||||
box-shadow: none;
|
||||
text-shadow: none;
|
||||
border: 1px solid rgba(0,0,0,0.2);
|
||||
}
|
||||
|
||||
.bottom-panel .window-button > StWidget {
|
||||
-st-natural-width: 18.7em;
|
||||
max-width: 18.75em;
|
||||
}
|
||||
|
||||
.bottom-panel .window-button:hover > StWidget,
|
||||
.bottom-panel .window-picker-toggle:hover > StWidget {
|
||||
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 > StWidget {
|
||||
color: #000;
|
||||
}
|
||||
|
||||
.window-list-workspace-indicator .workspace.active {
|
||||
border-color: #888;
|
||||
.window-button:hover > StWidget {
|
||||
background-color: st-darken(#eee,5%);
|
||||
}
|
||||
|
||||
.window-list-window-preview {
|
||||
background-color: #ededed;
|
||||
border: 1px solid #ccc;
|
||||
.window-button:active > StWidget,
|
||||
.window-button:focus > StWidget {
|
||||
background-color: st-darken(#eee, 10%);
|
||||
}
|
||||
|
||||
.window-list-window-preview.active {
|
||||
background-color: #f6f5f4;
|
||||
.window-button.focused > StWidget {
|
||||
background-color: st-darken(#eee,15%);
|
||||
}
|
||||
|
||||
.window-button.focused:hover > StWidget {
|
||||
background-color: st-darken(#eee, 20%);
|
||||
}
|
||||
|
||||
.window-button.focused:active > StWidget {
|
||||
background-color: st-darken(#eee, 25%);
|
||||
}
|
||||
|
||||
.window-button.minimized > StWidget {
|
||||
color: #aaa;
|
||||
background-color: #f9f9f9;
|
||||
}
|
||||
|
||||
.window-button.minimized:active > StWidget {
|
||||
color: #aaa;
|
||||
background-color: #f9f9f9;
|
||||
}
|
||||
|
||||
.window-button-drag-actor {
|
||||
background-color: #ddd;
|
||||
border-color: #888;
|
||||
}
|
||||
|
||||
.window-list .placeholder {
|
||||
border-color: rgba(0,0,0,0.5);
|
||||
}
|
||||
|
||||
@@ -1,342 +0,0 @@
|
||||
// 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;
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -1,424 +0,0 @@
|
||||
// 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.queue_relayout(),
|
||||
'position-changed', () => {
|
||||
this._updateVisible();
|
||||
this.queue_relayout();
|
||||
},
|
||||
'notify::minimized', this._updateVisible.bind(this),
|
||||
this);
|
||||
|
||||
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');
|
||||
}
|
||||
|
||||
_updateVisible() {
|
||||
const monitor = Main.layoutManager.findIndexForActor(this);
|
||||
const workArea = Main.layoutManager.getWorkAreaForMonitor(monitor);
|
||||
this.visible = this._window.get_frame_rect().overlap(workArea) &&
|
||||
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);
|
||||
}
|
||||
}
|
||||
@@ -6,7 +6,6 @@
|
||||
//
|
||||
// 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';
|
||||
@@ -86,7 +85,7 @@ export default class Extension {
|
||||
style_class: 'extension-windowsNavigator-window-tooltip',
|
||||
visible: false,
|
||||
});
|
||||
this.add_actor(this._tip);
|
||||
this.add_child(this._tip);
|
||||
|
||||
this.connect('notify::scale-x', () => {
|
||||
this._tip.set_scale(1 / this.scale_x, 1 / this.scale_x);
|
||||
@@ -148,7 +147,7 @@ export default class Extension {
|
||||
/* eslint-disable no-invalid-this */
|
||||
return function () {
|
||||
const {layoutManager} = this._container;
|
||||
for (let i in layoutManager._windowSlots) {
|
||||
for (const i in layoutManager._windowSlots) {
|
||||
if (layoutManager._windowSlots[i])
|
||||
layoutManager._windowSlots[i][WINDOW_SLOT].hideTooltip();
|
||||
}
|
||||
@@ -174,7 +173,7 @@ export default class Extension {
|
||||
this._injectionManager.overrideMethod(viewProto, '_hideTooltips', () => {
|
||||
/* eslint-disable no-invalid-this */
|
||||
return function () {
|
||||
if (global.stage.get_key_focus() === global.stage)
|
||||
if (global.stage.get_key_focus() === null)
|
||||
global.stage.set_key_focus(this._prevFocusActor);
|
||||
this._pickWindow = false;
|
||||
for (let i = 0; i < this._workspaces.length; i++)
|
||||
@@ -211,9 +210,9 @@ export default class Extension {
|
||||
return function (actor, event) {
|
||||
const {ControlsState} = OverviewControls;
|
||||
if (this._overviewAdjustment.value !== ControlsState.WINDOW_PICKER)
|
||||
return false;
|
||||
return Clutter.EVENT_PROPAGATE;
|
||||
|
||||
let workspaceManager = global.workspace_manager;
|
||||
const workspaceManager = global.workspace_manager;
|
||||
|
||||
if ((event.get_key_symbol() === Clutter.KEY_Alt_L ||
|
||||
event.get_key_symbol() === Clutter.KEY_Alt_R) &&
|
||||
@@ -223,7 +222,7 @@ export default class Extension {
|
||||
this._active = workspaceManager.get_active_workspace_index();
|
||||
this._pickWindow = true;
|
||||
this._workspaces[workspaceManager.get_active_workspace_index()].showWindowsTooltips();
|
||||
return true;
|
||||
return Clutter.EVENT_STOP;
|
||||
}
|
||||
if ((event.get_key_symbol() === Clutter.KEY_Control_L ||
|
||||
event.get_key_symbol() === Clutter.KEY_Control_R) &&
|
||||
@@ -233,22 +232,22 @@ export default class Extension {
|
||||
this._pickWorkspace = true;
|
||||
for (let i = 0; i < this._workspaces.length; i++)
|
||||
this._workspaces[i].showTooltip();
|
||||
return true;
|
||||
return Clutter.EVENT_STOP;
|
||||
}
|
||||
|
||||
if (global.stage.get_key_focus() !== global.stage)
|
||||
return false;
|
||||
if (global.stage.get_key_focus() !== null)
|
||||
return Clutter.EVENT_PROPAGATE;
|
||||
|
||||
// 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 true;
|
||||
return Clutter.EVENT_STOP;
|
||||
|
||||
if (this._pickWindow) {
|
||||
if (this._active !== workspaceManager.get_active_workspace_index()) {
|
||||
this._hideTooltips();
|
||||
return false;
|
||||
return Clutter.EVENT_PROPAGATE;
|
||||
}
|
||||
|
||||
let c = event.get_key_symbol() - Clutter.KEY_KP_0;
|
||||
@@ -257,17 +256,17 @@ export default class Extension {
|
||||
if (c > 9 || c <= 0) {
|
||||
this._hideTooltips();
|
||||
log(c);
|
||||
return false;
|
||||
return Clutter.EVENT_PROPAGATE;
|
||||
}
|
||||
}
|
||||
|
||||
let win = this._workspaces[this._active].getWindowWithTooltip(c);
|
||||
const win = this._workspaces[this._active].getWindowWithTooltip(c);
|
||||
this._hideTooltips();
|
||||
|
||||
if (win)
|
||||
Main.activateWindow(win, global.get_current_time());
|
||||
|
||||
return true;
|
||||
return Clutter.EVENT_STOP;
|
||||
}
|
||||
if (this._pickWorkspace) {
|
||||
let c = event.get_key_symbol() - Clutter.KEY_KP_0;
|
||||
@@ -275,18 +274,18 @@ export default class Extension {
|
||||
c = event.get_key_symbol() - Clutter.KEY_0;
|
||||
if (c > 9 || c <= 0) {
|
||||
this._hideWorkspacesTooltips();
|
||||
return false;
|
||||
return Clutter.EVENT_PROPAGATE;
|
||||
}
|
||||
}
|
||||
|
||||
let workspace = this._workspaces[c - 1];
|
||||
const workspace = this._workspaces[c - 1];
|
||||
if (workspace !== undefined)
|
||||
workspace.metaWorkspace.activate(global.get_current_time());
|
||||
|
||||
this._hideWorkspacesTooltips();
|
||||
return true;
|
||||
return Clutter.EVENT_STOP;
|
||||
}
|
||||
return false;
|
||||
return Clutter.EVENT_PROPAGATE;
|
||||
};
|
||||
/* eslint-enable */
|
||||
});
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
"settings-schema": "@gschemaname@",
|
||||
"gettext-domain": "@gettext_domain@",
|
||||
"original-author": "zaspire@rambler.ru",
|
||||
"name": "windowNavigator",
|
||||
"name": "Window Navigator",
|
||||
"description": "Allow keyboard selection of windows and workspaces in overlay mode. <Ctrl>number selects a workspace, and <Alt>number selects a window.",
|
||||
"url": "@url@"
|
||||
}
|
||||
|
||||
@@ -4,437 +4,17 @@
|
||||
//
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
// -*- 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} from 'resource:///org/gnome/shell/extensions/extension.js';
|
||||
|
||||
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 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.queue_relayout(),
|
||||
'position-changed', () => {
|
||||
this._updateVisible();
|
||||
this.queue_relayout();
|
||||
},
|
||||
'notify::minimized', this._updateVisible.bind(this),
|
||||
this);
|
||||
|
||||
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');
|
||||
}
|
||||
|
||||
_updateVisible() {
|
||||
const monitor = Main.layoutManager.findIndexForActor(this);
|
||||
const workArea = Main.layoutManager.getWorkAreaForMonitor(monitor);
|
||||
this.visible = this._window.get_frame_rect().overlap(workArea) &&
|
||||
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);
|
||||
}
|
||||
}
|
||||
import {WorkspaceIndicator} from './workspaceIndicator.js';
|
||||
|
||||
export default class WorkspaceIndicatorExtension extends Extension {
|
||||
enable() {
|
||||
this._indicator = new WorkspaceIndicator();
|
||||
this._indicator = new WorkspaceIndicator({
|
||||
settings: this.getSettings(),
|
||||
});
|
||||
Main.panel.addToStatusArea('workspace-indicator', this._indicator);
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,10 @@ extension_data += configure_file(
|
||||
output: metadata_name,
|
||||
configuration: metadata_conf
|
||||
)
|
||||
extension_data += files('stylesheet.css')
|
||||
extension_data += files(
|
||||
'stylesheet-dark.css',
|
||||
'stylesheet-light.css',
|
||||
)
|
||||
extension_schemas += files('schemas/' + metadata_conf.get('gschemaname') + '.gschema.xml')
|
||||
|
||||
extension_sources += files('prefs.js')
|
||||
extension_sources += files('prefs.js', 'workspaceIndicator.js', 'workspacePrefs.js')
|
||||
|
||||
@@ -3,268 +3,12 @@
|
||||
//
|
||||
// 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';
|
||||
import GObject from 'gi://GObject';
|
||||
import Gtk from 'gi://Gtk';
|
||||
import Pango from 'gi://Pango';
|
||||
import {ExtensionPreferences} from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.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')]);
|
||||
}
|
||||
}
|
||||
import {WorkspacesPage} from './workspacePrefs.js';
|
||||
|
||||
export default class WorkspaceIndicatorPrefs extends ExtensionPreferences {
|
||||
getPreferencesWidget() {
|
||||
return new WorkspaceSettingsWidget();
|
||||
return new WorkspacesPage(this.getSettings());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
<!--
|
||||
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>
|
||||
130
extensions/workspace-indicator/stylesheet-dark.css
Normal file
130
extensions/workspace-indicator/stylesheet-dark.css
Normal file
@@ -0,0 +1,130 @@
|
||||
/*
|
||||
* 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;
|
||||
}
|
||||
55
extensions/workspace-indicator/stylesheet-light.css
Normal file
55
extensions/workspace-indicator/stylesheet-light.css
Normal file
@@ -0,0 +1,55 @@
|
||||
/*
|
||||
* 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%);
|
||||
}
|
||||
@@ -1,35 +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
|
||||
*/
|
||||
|
||||
.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;
|
||||
}
|
||||
701
extensions/workspace-indicator/workspaceIndicator.js
Normal file
701
extensions/workspace-indicator/workspaceIndicator.js
Normal file
@@ -0,0 +1,701 @@
|
||||
// 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);
|
||||
}
|
||||
}
|
||||
135
extensions/workspace-indicator/workspacePrefs.js
Normal file
135
extensions/workspace-indicator/workspacePrefs.js
Normal file
@@ -0,0 +1,135 @@
|
||||
// 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());
|
||||
}
|
||||
}
|
||||
@@ -18,7 +18,6 @@ Most extensions can be installed by configuring --prefix=$HOME/.local,
|
||||
and will be picked automatically at next login.
|
||||
</description>
|
||||
<homepage rdf:resource="https://wiki.gnome.org/Projects/GnomeShell/Extensions" />
|
||||
<mailing-list rdf:resource="http://mail.gnome.org/mailman/listinfo/gnome-shell-list" />
|
||||
<support-forum rdf:resource="https://discourse.gnome.org/tag/shell" />
|
||||
<download-page rdf:resource="https://download.gnome.org/sources/gnome-shell-extensions/" />
|
||||
<bug-database rdf:resource="https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues" />
|
||||
@@ -33,10 +32,4 @@ 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>
|
||||
|
||||
@@ -1,273 +0,0 @@
|
||||
---
|
||||
# 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
|
||||
@@ -1,18 +0,0 @@
|
||||
# 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
|
||||
globals:
|
||||
global: readonly
|
||||
parserOptions:
|
||||
sourceType: module
|
||||
52
meson.build
52
meson.build
@@ -2,10 +2,11 @@
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
project('gnome-shell-extensions',
|
||||
version: '45.0',
|
||||
meson_version: '>= 0.58.0',
|
||||
license: 'GPL2+'
|
||||
project(
|
||||
'gnome-shell-extensions',
|
||||
version: '50.alpha',
|
||||
meson_version: '>= 1.1.0',
|
||||
license: 'GPL-2.0-or-later',
|
||||
)
|
||||
|
||||
gettext_domain = meson.project_name()
|
||||
@@ -22,9 +23,15 @@ 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]
|
||||
|
||||
@@ -34,7 +41,7 @@ classic_extensions = [
|
||||
'apps-menu',
|
||||
'places-menu',
|
||||
'launch-new-instance',
|
||||
'window-list'
|
||||
'window-list',
|
||||
]
|
||||
|
||||
default_extensions = classic_extensions
|
||||
@@ -42,16 +49,14 @@ 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')
|
||||
|
||||
@@ -70,11 +75,10 @@ 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('Classic mode is enabled, ' +
|
||||
'but the required extension @0@ is not.'.format(e))
|
||||
error(f'Classic mode is enabled, but the required extension @e@ is not')
|
||||
endif
|
||||
endforeach
|
||||
endif
|
||||
@@ -82,32 +86,24 @@ endif
|
||||
# Sanity check: Make sure enabled extensions are valid
|
||||
foreach e : enabled_extensions
|
||||
if not all_extensions.contains(e)
|
||||
error('Invalid extension @0@.'.format(e))
|
||||
error(f'Invalid extension @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('meson/check-version.py',
|
||||
meson.project_version(),
|
||||
'NEWS')
|
||||
meson.add_dist_script('build-aux/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 = {
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
#!/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)
|
||||
@@ -29,6 +29,7 @@ he
|
||||
hi
|
||||
hr
|
||||
hu
|
||||
ia
|
||||
id
|
||||
is
|
||||
it
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
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
|
||||
@@ -11,11 +9,13 @@ 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/extension.js
|
||||
extensions/workspace-indicator/prefs.js
|
||||
extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml
|
||||
extensions/workspace-indicator/workspaceIndicator.js
|
||||
extensions/workspace-indicator/workspacePrefs.js
|
||||
|
||||
289
po/be.po
289
po/be.po
@@ -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: 2022-07-10 12:54+0000\n"
|
||||
"PO-Revision-Date: 2022-10-19 15:20+0300\n"
|
||||
"Last-Translator: Launchpad translators\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"
|
||||
"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.0\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"
|
||||
|
||||
#: data/gnome-classic.desktop.in:3
|
||||
msgid "GNOME Classic"
|
||||
@@ -41,15 +41,15 @@ msgstr "Класічны GNOME на Xorg"
|
||||
msgid "Favorites"
|
||||
msgstr "Абраныя"
|
||||
|
||||
#: extensions/apps-menu/extension.js:379
|
||||
msgid "Applications"
|
||||
#: extensions/apps-menu/extension.js:392
|
||||
msgid "Apps"
|
||||
msgstr "Праграмы"
|
||||
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:12
|
||||
msgid "Application and workspace list"
|
||||
msgstr "Праграма і спіс працоўных прастор"
|
||||
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:7
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:13
|
||||
msgid ""
|
||||
"A list of strings, each containing an application id (desktop file name), "
|
||||
"followed by a colon and the workspace number"
|
||||
@@ -57,151 +57,230 @@ msgstr ""
|
||||
"Спіс радкоў, кожны з якіх змяшчае ідэнтыфікатар праграмы (імя файла *."
|
||||
"desktop), затым двукроп'е і нумар працоўнай прасторы"
|
||||
|
||||
#: extensions/auto-move-windows/prefs.js:152
|
||||
#: extensions/auto-move-windows/prefs.js:156
|
||||
msgid "Workspace Rules"
|
||||
msgstr "Правілы для працоўнай прасторы"
|
||||
|
||||
#: extensions/auto-move-windows/prefs.js:306
|
||||
#: extensions/auto-move-windows/prefs.js:311
|
||||
msgid "Add Rule"
|
||||
msgstr "Дадаць правіла"
|
||||
|
||||
#. TRANSLATORS: %s is the filesystem name
|
||||
#: extensions/drive-menu/extension.js:126
|
||||
#: extensions/places-menu/placeDisplay.js:210
|
||||
#: extensions/drive-menu/extension.js:123
|
||||
#: extensions/places-menu/placeDisplay.js:186
|
||||
#, javascript-format
|
||||
msgid "Ejecting drive “%s” failed:"
|
||||
msgstr "Не ўдалося выняць дыск «%s»:"
|
||||
|
||||
#: extensions/drive-menu/extension.js:145
|
||||
#: extensions/drive-menu/extension.js:142
|
||||
msgid "Removable devices"
|
||||
msgstr "Здымныя прылады"
|
||||
|
||||
#: extensions/drive-menu/extension.js:167
|
||||
#: extensions/drive-menu/extension.js:164
|
||||
msgid "Open Files"
|
||||
msgstr "Адкрыць файлы"
|
||||
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
|
||||
msgid "Use more screen for windows"
|
||||
msgstr "Выкарыстоўваць большую плошчу экрана для вокнаў"
|
||||
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:6
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
|
||||
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:11
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:17
|
||||
msgid "Place window captions on top"
|
||||
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:18
|
||||
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:94
|
||||
#: extensions/places-menu/extension.js:97
|
||||
#: extensions/places-menu/extension.js:75
|
||||
#: extensions/places-menu/extension.js:78
|
||||
msgid "Places"
|
||||
msgstr "Месцы"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:49
|
||||
#: extensions/places-menu/placeDisplay.js:52
|
||||
#, javascript-format
|
||||
msgid "Failed to launch “%s”"
|
||||
msgstr "Не ўдалося запусціць «%s»"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:64
|
||||
#: extensions/places-menu/placeDisplay.js:67
|
||||
#, javascript-format
|
||||
msgid "Failed to mount volume for “%s”"
|
||||
msgstr "Не ўдалося прымацаваць том для «%s»."
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:125
|
||||
#: extensions/places-menu/placeDisplay.js:148
|
||||
msgid "Computer"
|
||||
msgstr "Камп'ютар"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:336
|
||||
#: extensions/places-menu/placeDisplay.js:315
|
||||
msgid "Home"
|
||||
msgstr "Хатняя папка"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:381
|
||||
msgid "Browse Network"
|
||||
msgstr "Агляд сеткі"
|
||||
#: extensions/places-menu/placeDisplay.js:321
|
||||
msgid "Recent"
|
||||
msgstr "Нядаўнія"
|
||||
|
||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7
|
||||
#: 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
|
||||
msgid "Cycle Screenshot Sizes"
|
||||
msgstr "Паслядоўнасць змены памераў для здымка экрана"
|
||||
|
||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
|
||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:18
|
||||
msgid "Cycle Screenshot Sizes Backward"
|
||||
msgstr "Адваротная паслядоўнасць змены памераў для здымка экрана"
|
||||
|
||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5
|
||||
#: 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
|
||||
msgid "Theme name"
|
||||
msgstr "Назва тэмы"
|
||||
|
||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6
|
||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:12
|
||||
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
|
||||
msgstr "Назва тэмы, што загрузіцца з ~/.themes/name/gnome-shell"
|
||||
|
||||
#: extensions/window-list/extension.js:72
|
||||
#: extensions/window-list/extension.js:98
|
||||
msgid "Close"
|
||||
msgstr "Закрыць"
|
||||
|
||||
#: extensions/window-list/extension.js:92
|
||||
#: extensions/window-list/extension.js:125
|
||||
msgid "Unminimize"
|
||||
msgstr "Скасаваць згортванне"
|
||||
|
||||
#: extensions/window-list/extension.js:92
|
||||
#: extensions/window-list/extension.js:125
|
||||
msgid "Minimize"
|
||||
msgstr "Згарнуць"
|
||||
|
||||
#: extensions/window-list/extension.js:99
|
||||
#: extensions/window-list/extension.js:130
|
||||
msgid "Unmaximize"
|
||||
msgstr "Скасаваць разгортванне"
|
||||
|
||||
#: extensions/window-list/extension.js:99
|
||||
#: extensions/window-list/extension.js:130
|
||||
msgid "Maximize"
|
||||
msgstr "Разгарнуць"
|
||||
|
||||
#: extensions/window-list/extension.js:483
|
||||
#: extensions/window-list/extension.js:720
|
||||
msgid "Minimize all"
|
||||
msgstr "Згарнуць усе"
|
||||
|
||||
#: extensions/window-list/extension.js:489
|
||||
#: extensions/window-list/extension.js:726
|
||||
msgid "Unminimize all"
|
||||
msgstr "Скасаваць згортванне для ўсіх"
|
||||
|
||||
#: extensions/window-list/extension.js:495
|
||||
#: extensions/window-list/extension.js:732
|
||||
msgid "Maximize all"
|
||||
msgstr "Разгарнуць усе"
|
||||
|
||||
#: extensions/window-list/extension.js:503
|
||||
#: extensions/window-list/extension.js:740
|
||||
msgid "Unmaximize all"
|
||||
msgstr "Скасаваць разгортванне для ўсіх"
|
||||
|
||||
#: extensions/window-list/extension.js:511
|
||||
#: extensions/window-list/extension.js:748
|
||||
msgid "Close all"
|
||||
msgstr "Закрыць усе"
|
||||
|
||||
#: extensions/window-list/extension.js:795
|
||||
#: extensions/window-list/extension.js:1000 extensions/window-list/prefs.js:23
|
||||
msgid "Window List"
|
||||
msgstr "Спіс вокнаў"
|
||||
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:18
|
||||
msgid "When to group windows"
|
||||
msgstr "Умовы групавання вокнаў"
|
||||
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:19
|
||||
msgid ""
|
||||
"Decides when to group windows from the same application on the window list. "
|
||||
"Possible values are “never”, “auto” and “always”."
|
||||
@@ -209,63 +288,125 @@ msgstr ""
|
||||
"Вызначае калі групаваць вокны адной праграмы ў спісе вокнаў. Магчымыя "
|
||||
"значэнні: «never» (ніколі), «auto» (аўтаматычна), «always» (заўсёды)."
|
||||
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
|
||||
#: extensions/window-list/prefs.js:79
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26
|
||||
#: extensions/window-list/prefs.js:74
|
||||
msgid "Show windows from all workspaces"
|
||||
msgstr "Паказваць вокны з усіх працоўных прастор"
|
||||
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
|
||||
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:27
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:33
|
||||
msgid "Show the window list on all monitors"
|
||||
msgstr "Паказваць спіс вокнаў на ўсіх маніторах"
|
||||
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:28
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:34
|
||||
msgid ""
|
||||
"Whether to show the window list on all connected monitors or only on the "
|
||||
"primary one."
|
||||
msgstr ""
|
||||
"Паказваць спіс вокнаў на ўсіх падлучаных маніторах ці толькі на асноўным."
|
||||
|
||||
#: extensions/window-list/prefs.js:35
|
||||
#: 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
|
||||
msgid "Window Grouping"
|
||||
msgstr "Групаванне вокнаў"
|
||||
|
||||
#: extensions/window-list/prefs.js:40
|
||||
#: extensions/window-list/prefs.js:46
|
||||
msgid "Never group windows"
|
||||
msgstr "Ніколі не групаваць вокны"
|
||||
|
||||
#: extensions/window-list/prefs.js:41
|
||||
#: extensions/window-list/prefs.js:47
|
||||
msgid "Group windows when space is limited"
|
||||
msgstr "Групаваць вокны калі не хапае месца"
|
||||
|
||||
#: extensions/window-list/prefs.js:42
|
||||
#: extensions/window-list/prefs.js:48
|
||||
msgid "Always group windows"
|
||||
msgstr "Заўсёды групаваць вокны"
|
||||
|
||||
#: extensions/window-list/prefs.js:66
|
||||
#: extensions/window-list/prefs.js:68
|
||||
msgid "Show on all monitors"
|
||||
msgstr "Паказваць на ўсіх маніторах"
|
||||
|
||||
#: extensions/window-list/workspaceIndicator.js:261
|
||||
#: extensions/workspace-indicator/extension.js:266
|
||||
#: 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
|
||||
msgid "Workspace Indicator"
|
||||
msgstr "Індыкатар працоўнай прасторы"
|
||||
|
||||
#: extensions/workspace-indicator/prefs.js:62
|
||||
#: 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 "Працоўныя прасторы"
|
||||
|
||||
#, javascript-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Працоўная прастора %d"
|
||||
#~ msgid "Workspace %d"
|
||||
#~ msgstr "Працоўная прастора %d"
|
||||
|
||||
#: extensions/workspace-indicator/prefs.js:129
|
||||
msgid "Workspace Names"
|
||||
msgstr "Назвы працоўных прастор"
|
||||
#~ msgid "Add Workspace"
|
||||
#~ msgstr "Дадаць працоўную прастору"
|
||||
|
||||
#: extensions/workspace-indicator/prefs.js:255
|
||||
msgid "Add Workspace"
|
||||
msgstr "Дадаць працоўную прастору"
|
||||
#~ msgid "Remove"
|
||||
#~ msgstr "Выдаліць"
|
||||
|
||||
#~ msgid "Computer"
|
||||
#~ msgstr "Камп'ютар"
|
||||
|
||||
#~ msgid "Show workspace previews"
|
||||
#~ msgstr "Паказваць папярэдні прагляд працоўных прастор"
|
||||
|
||||
#~ msgid "Applications"
|
||||
#~ msgstr "Праграмы"
|
||||
|
||||
#~ msgid "Attach modal dialog to the parent window"
|
||||
#~ msgstr "Прымацаваць мадальны дыялог да бацькоўскага акна"
|
||||
@@ -328,7 +469,7 @@ msgstr "Дадаць працоўную прастору"
|
||||
#~ "If not empty, it contains the text that will be shown when clicking on "
|
||||
#~ "the panel."
|
||||
#~ msgstr ""
|
||||
#~ "Калі не пуста, ўтрымлівае тэкст, які будзе паказвацца пры націсканні на "
|
||||
#~ "Калі не пуста, змяшчае тэкст, які будзе паказвацца пры націсканні на "
|
||||
#~ "панэль."
|
||||
|
||||
#~ msgid "Message"
|
||||
|
||||
356
po/bg.po
356
po/bg.po
@@ -1,272 +1,410 @@
|
||||
# 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 master\n"
|
||||
"Project-Id-Version: gnome-shell-extensions main\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
|
||||
"issues\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"
|
||||
"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"
|
||||
"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:3
|
||||
#: data/gnome-classic.desktop.in:2
|
||||
msgid "GNOME Classic"
|
||||
msgstr "Класически GNOME"
|
||||
|
||||
#: data/gnome-classic.desktop.in:4 data/gnome-classic-wayland.desktop.in:4
|
||||
#: data/gnome-classic-xorg.desktop.in:4
|
||||
#: data/gnome-classic.desktop.in:3 data/gnome-classic-wayland.desktop.in:3
|
||||
#: data/gnome-classic-xorg.desktop.in:3
|
||||
msgid "This session logs you into GNOME Classic"
|
||||
msgstr "Работната среда изглежда като класическия GNOME (2.x)"
|
||||
msgstr "Тази сесия влизa в Класически GNOME"
|
||||
|
||||
#: data/gnome-classic-wayland.desktop.in:3
|
||||
#: data/gnome-classic-wayland.desktop.in:2
|
||||
msgid "GNOME Classic on Wayland"
|
||||
msgstr "Класически GNOME в Wayland"
|
||||
|
||||
#: data/gnome-classic-xorg.desktop.in:3
|
||||
#: data/gnome-classic-xorg.desktop.in:2
|
||||
msgid "GNOME Classic on Xorg"
|
||||
msgstr "Класически GNOME в Xorg"
|
||||
|
||||
#: extensions/apps-menu/extension.js:112
|
||||
#: extensions/apps-menu/extension.js:118
|
||||
msgid "Favorites"
|
||||
msgstr "Любими"
|
||||
|
||||
#: extensions/apps-menu/extension.js:370
|
||||
msgid "Applications"
|
||||
#: extensions/apps-menu/extension.js:392
|
||||
msgid "Apps"
|
||||
msgstr "Програми"
|
||||
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:12
|
||||
msgid "Application and workspace list"
|
||||
msgstr "Списък с програмите и работните плотове"
|
||||
msgstr "Списък с програмите и работните пространства"
|
||||
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:7
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:13
|
||||
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:19
|
||||
#: extensions/auto-move-windows/prefs.js:157
|
||||
msgid "Workspace Rules"
|
||||
msgstr "Правила за работните плотове"
|
||||
msgstr "Правила за работните пространства"
|
||||
|
||||
#: extensions/auto-move-windows/prefs.js:245
|
||||
#: extensions/auto-move-windows/prefs.js:312
|
||||
msgid "Add Rule"
|
||||
msgstr "Добавяне на правило"
|
||||
|
||||
#. TRANSLATORS: %s is the filesystem name
|
||||
#: extensions/drive-menu/extension.js:123
|
||||
#: extensions/places-menu/placeDisplay.js:210
|
||||
#: extensions/places-menu/placeDisplay.js:186
|
||||
#, javascript-format
|
||||
msgid "Ejecting drive “%s” failed:"
|
||||
msgstr "Неуспешно изваждане на устройство „%s“:"
|
||||
msgstr "Неуспешно изваждане на устройството „%s\":"
|
||||
|
||||
#: extensions/drive-menu/extension.js:139
|
||||
#: extensions/drive-menu/extension.js:142
|
||||
msgid "Removable devices"
|
||||
msgstr "Преносими медии"
|
||||
msgstr "Преносими устройства"
|
||||
|
||||
#: extensions/drive-menu/extension.js:161
|
||||
#: extensions/drive-menu/extension.js:164
|
||||
msgid "Open Files"
|
||||
msgstr "Отваряне на файлове"
|
||||
msgstr "Отвори „Файлове“"
|
||||
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
|
||||
msgid "Use more screen for windows"
|
||||
msgstr "Повече пространство за прозорците"
|
||||
msgstr "Повече пространство на екрана за прозорците"
|
||||
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:6
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
|
||||
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:11
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:17
|
||||
msgid "Place window captions on top"
|
||||
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:18
|
||||
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:88
|
||||
#: extensions/places-menu/extension.js:91
|
||||
#: extensions/places-menu/extension.js:75
|
||||
#: extensions/places-menu/extension.js:78
|
||||
msgid "Places"
|
||||
msgstr "Места"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:49
|
||||
#: extensions/places-menu/placeDisplay.js:52
|
||||
#, javascript-format
|
||||
msgid "Failed to launch “%s”"
|
||||
msgstr "Неуспешно стартиране на „%s“"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:64
|
||||
#: extensions/places-menu/placeDisplay.js:67
|
||||
#, javascript-format
|
||||
msgid "Failed to mount volume for “%s”"
|
||||
msgstr "Неуспешно монтиране на тома „%s“"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:125
|
||||
#: extensions/places-menu/placeDisplay.js:148
|
||||
msgid "Computer"
|
||||
msgstr "Компютър"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:336
|
||||
#: extensions/places-menu/placeDisplay.js:315
|
||||
msgid "Home"
|
||||
msgstr "Домашна папка"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:381
|
||||
msgid "Browse Network"
|
||||
#: 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"
|
||||
msgstr "Мрежа"
|
||||
|
||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7
|
||||
#: extensions/places-menu/placeDisplay.js:354
|
||||
msgid "Trash"
|
||||
msgstr "Кошче"
|
||||
|
||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:14
|
||||
msgid "Cycle Screenshot Sizes"
|
||||
msgstr "Смяна на размерите на снимката на екрана"
|
||||
msgstr "Превключване между размерите на екранната снимка"
|
||||
|
||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
|
||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:18
|
||||
msgid "Cycle Screenshot Sizes Backward"
|
||||
msgstr "Смяна на размерите на снимката на екрана наобратно"
|
||||
msgstr "Обратно превключване на размерите на екранната снимка"
|
||||
|
||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5
|
||||
#: 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
|
||||
msgid "Theme name"
|
||||
msgstr "Име на темата"
|
||||
|
||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6
|
||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:12
|
||||
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:72
|
||||
#: extensions/window-list/extension.js:98
|
||||
msgid "Close"
|
||||
msgstr "Затваряне"
|
||||
|
||||
#: extensions/window-list/extension.js:92
|
||||
#: extensions/window-list/extension.js:125
|
||||
msgid "Unminimize"
|
||||
msgstr "Деминимизиране"
|
||||
|
||||
#: extensions/window-list/extension.js:92
|
||||
#: extensions/window-list/extension.js:125
|
||||
msgid "Minimize"
|
||||
msgstr "Минимизиране"
|
||||
|
||||
#: extensions/window-list/extension.js:99
|
||||
#: extensions/window-list/extension.js:130
|
||||
msgid "Unmaximize"
|
||||
msgstr "Демаксимизиране"
|
||||
|
||||
#: extensions/window-list/extension.js:99
|
||||
#: extensions/window-list/extension.js:130
|
||||
msgid "Maximize"
|
||||
msgstr "Максимизиране"
|
||||
|
||||
#: extensions/window-list/extension.js:434
|
||||
#: extensions/window-list/extension.js:720
|
||||
msgid "Minimize all"
|
||||
msgstr "Минимизиране на всички"
|
||||
|
||||
#: extensions/window-list/extension.js:440
|
||||
#: extensions/window-list/extension.js:726
|
||||
msgid "Unminimize all"
|
||||
msgstr "Деминимизиране на всички"
|
||||
|
||||
#: extensions/window-list/extension.js:446
|
||||
#: extensions/window-list/extension.js:732
|
||||
msgid "Maximize all"
|
||||
msgstr "Максимизиране на всички"
|
||||
|
||||
#: extensions/window-list/extension.js:454
|
||||
#: extensions/window-list/extension.js:740
|
||||
msgid "Unmaximize all"
|
||||
msgstr "Демаксимизиране на всички"
|
||||
|
||||
#: extensions/window-list/extension.js:462
|
||||
#: extensions/window-list/extension.js:748
|
||||
msgid "Close all"
|
||||
msgstr "Затваряне на всички"
|
||||
|
||||
#: extensions/window-list/extension.js:741
|
||||
#: extensions/window-list/extension.js:1000 extensions/window-list/prefs.js:23
|
||||
msgid "Window List"
|
||||
msgstr "Списък на прозорците"
|
||||
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:18
|
||||
msgid "When to group windows"
|
||||
msgstr "Кога прозорците да се групират"
|
||||
msgstr "Кога да се групират прозорците"
|
||||
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:19
|
||||
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:20
|
||||
#: extensions/window-list/prefs.js:76
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26
|
||||
#: extensions/window-list/prefs.js:74
|
||||
msgid "Show windows from all workspaces"
|
||||
msgstr "Да се показват прозорците от всички работни плотове"
|
||||
|
||||
#: 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 ""
|
||||
"Дали да се показват прозорците от всички работни плотове или само от текущия."
|
||||
msgstr "Показване на прозорците от всички работни пространства"
|
||||
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
|
||||
msgid "Show the window list on all monitors"
|
||||
msgstr "Извеждане на списъка с прозорци на всички монитори"
|
||||
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:28
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:33
|
||||
msgid "Show the window list on all monitors"
|
||||
msgstr "Показване на списъка с прозорци на всички монитори"
|
||||
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:34
|
||||
msgid ""
|
||||
"Whether to show the window list on all connected monitors or only on the "
|
||||
"primary one."
|
||||
msgstr ""
|
||||
"Дали списъкът с прозорци да се извежда на всички монитори или само на "
|
||||
"основния"
|
||||
"Дали да се показва списъкът с прозорци на всички свързани монитори или само "
|
||||
"на основния."
|
||||
|
||||
#: extensions/window-list/prefs.js:32
|
||||
#: 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
|
||||
msgid "Window Grouping"
|
||||
msgstr "Групиране на прозорци"
|
||||
|
||||
#: extensions/window-list/prefs.js:37
|
||||
#: extensions/window-list/prefs.js:46
|
||||
msgid "Never group windows"
|
||||
msgstr "Никога да не се групират"
|
||||
|
||||
#: extensions/window-list/prefs.js:38
|
||||
#: extensions/window-list/prefs.js:47
|
||||
msgid "Group windows when space is limited"
|
||||
msgstr "Групиране при ограничено място"
|
||||
|
||||
#: extensions/window-list/prefs.js:39
|
||||
#: extensions/window-list/prefs.js:48
|
||||
msgid "Always group windows"
|
||||
msgstr "Винаги да се групират"
|
||||
|
||||
#: extensions/window-list/prefs.js:63
|
||||
#: extensions/window-list/prefs.js:68
|
||||
msgid "Show on all monitors"
|
||||
msgstr "На всички монитори"
|
||||
|
||||
#: extensions/window-list/workspaceIndicator.js:249
|
||||
#: extensions/workspace-indicator/extension.js:254
|
||||
msgid "Workspace Indicator"
|
||||
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/prefs.js:18
|
||||
msgid "Workspace Names"
|
||||
msgstr "Имена на работните плотове"
|
||||
|
||||
#: extensions/workspace-indicator/prefs.js:39
|
||||
#: extensions/workspace-indicator/workspaceIndicator.js:404
|
||||
#, javascript-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Работен плот %d"
|
||||
msgid "Press %s to edit"
|
||||
msgstr "Натиснете %s за редактирате"
|
||||
|
||||
#: extensions/workspace-indicator/prefs.js:184
|
||||
msgid "Add Workspace"
|
||||
msgstr "Добавяне на работен плот"
|
||||
#: extensions/workspace-indicator/workspaceIndicator.js:518
|
||||
msgid "Settings"
|
||||
msgstr "Настройки"
|
||||
|
||||
#: extensions/workspace-indicator/workspaceIndicator.js:598
|
||||
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 "Работни пространства"
|
||||
|
||||
#~ msgid "Computer"
|
||||
#~ msgstr "Компютър"
|
||||
|
||||
#~ msgid "Show workspace previews"
|
||||
#~ msgstr "Визуализиране на работните пространства"
|
||||
|
||||
#~ msgid "Show Previews In Top Bar"
|
||||
#~ msgstr "Визуализиране в горната лента"
|
||||
|
||||
#~ msgid "Applications"
|
||||
#~ msgstr "Програми"
|
||||
|
||||
281
po/ca.po
281
po/ca.po
@@ -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: 2021-11-06 14:08+0000\n"
|
||||
"PO-Revision-Date: 2017-07-08 13:29+0100\n"
|
||||
"POT-Creation-Date: 2025-06-18 23:32+0000\n"
|
||||
"PO-Revision-Date: 2025-06-29 09:56+0200\n"
|
||||
"Last-Translator: Jordi Mas <jmas@softcatala.org>\n"
|
||||
"Language-Team: Catalan <tradgnome@softcatala.org>\n"
|
||||
"Language: ca\n"
|
||||
@@ -18,6 +18,8 @@ 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"
|
||||
@@ -36,19 +38,19 @@ msgstr "GNOME clàssic amb Wayland"
|
||||
msgid "GNOME Classic on Xorg"
|
||||
msgstr "GNOME clàssic amb Xorg"
|
||||
|
||||
#: extensions/apps-menu/extension.js:112
|
||||
#: extensions/apps-menu/extension.js:118
|
||||
msgid "Favorites"
|
||||
msgstr "Preferides"
|
||||
|
||||
#: extensions/apps-menu/extension.js:366
|
||||
msgid "Applications"
|
||||
#: extensions/apps-menu/extension.js:392
|
||||
msgid "Apps"
|
||||
msgstr "Aplicacions"
|
||||
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:12
|
||||
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:7
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:13
|
||||
msgid ""
|
||||
"A list of strings, each containing an application id (desktop file name), "
|
||||
"followed by a colon and the workspace number"
|
||||
@@ -57,34 +59,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:34
|
||||
#: extensions/auto-move-windows/prefs.js:156
|
||||
msgid "Workspace Rules"
|
||||
msgstr "Regles dels espais de treball"
|
||||
|
||||
#: extensions/auto-move-windows/prefs.js:236
|
||||
#: extensions/auto-move-windows/prefs.js:311
|
||||
msgid "Add Rule"
|
||||
msgstr "Afegeix una regla"
|
||||
|
||||
#. TRANSLATORS: %s is the filesystem name
|
||||
#: extensions/drive-menu/extension.js:133
|
||||
#: extensions/places-menu/placeDisplay.js:233
|
||||
#: extensions/drive-menu/extension.js:123
|
||||
#: extensions/places-menu/placeDisplay.js:186
|
||||
#, javascript-format
|
||||
msgid "Ejecting drive “%s” failed:"
|
||||
msgstr "Ha fallat l'expulsió de la unitat «%s»:"
|
||||
|
||||
#: extensions/drive-menu/extension.js:149
|
||||
#: extensions/drive-menu/extension.js:142
|
||||
msgid "Removable devices"
|
||||
msgstr "Dispositius extraïbles"
|
||||
|
||||
#: extensions/drive-menu/extension.js:171
|
||||
#: extensions/drive-menu/extension.js:164
|
||||
msgid "Open Files"
|
||||
msgstr "Obre els fitxers"
|
||||
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
|
||||
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:6
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
|
||||
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. "
|
||||
@@ -96,11 +98,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:11
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:17
|
||||
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:12
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:18
|
||||
msgid ""
|
||||
"If true, place window captions on top the respective thumbnail, overriding "
|
||||
"shell default of placing it at the bottom. Changing this setting requires "
|
||||
@@ -111,99 +113,178 @@ msgstr ""
|
||||
"posicionar-lo a baix. Cal reiniciar el Shell per tal que aquest canvi tingui "
|
||||
"efecte."
|
||||
|
||||
#: extensions/places-menu/extension.js:88
|
||||
#: extensions/places-menu/extension.js:91
|
||||
#: extensions/places-menu/extension.js:75
|
||||
#: extensions/places-menu/extension.js:78
|
||||
msgid "Places"
|
||||
msgstr "Llocs"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:46
|
||||
#: extensions/places-menu/placeDisplay.js:52
|
||||
#, javascript-format
|
||||
msgid "Failed to launch “%s”"
|
||||
msgstr "No s'ha pogut iniciar «%s»"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:61
|
||||
#: extensions/places-menu/placeDisplay.js:67
|
||||
#, javascript-format
|
||||
msgid "Failed to mount volume for “%s”"
|
||||
msgstr "No s'ha pogut muntar el volum «%s»"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:148
|
||||
#: extensions/places-menu/placeDisplay.js:171
|
||||
msgid "Computer"
|
||||
msgstr "Ordinador"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:359
|
||||
#: extensions/places-menu/placeDisplay.js:315
|
||||
msgid "Home"
|
||||
msgstr "Inici"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:404
|
||||
msgid "Browse Network"
|
||||
msgstr "Navega per la xarxa"
|
||||
#: extensions/places-menu/placeDisplay.js:321
|
||||
msgid "Recent"
|
||||
msgstr "Recent"
|
||||
|
||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7
|
||||
#: 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
|
||||
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:11
|
||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:18
|
||||
msgid "Cycle Screenshot Sizes Backward"
|
||||
msgstr "Mostra cíclicament cap enrere mides de captura de pantalla"
|
||||
|
||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5
|
||||
#: 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
|
||||
msgid "Theme name"
|
||||
msgstr "Nom del tema"
|
||||
|
||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6
|
||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:12
|
||||
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:72
|
||||
#: extensions/window-list/extension.js:98
|
||||
msgid "Close"
|
||||
msgstr "Tanca"
|
||||
|
||||
#: extensions/window-list/extension.js:92
|
||||
#: extensions/window-list/extension.js:125
|
||||
msgid "Unminimize"
|
||||
msgstr "Desminimitza"
|
||||
|
||||
#: extensions/window-list/extension.js:92
|
||||
#: extensions/window-list/extension.js:125
|
||||
msgid "Minimize"
|
||||
msgstr "Minimitza"
|
||||
|
||||
#: extensions/window-list/extension.js:99
|
||||
#: extensions/window-list/extension.js:130
|
||||
msgid "Unmaximize"
|
||||
msgstr "Desmaximitza"
|
||||
|
||||
#: extensions/window-list/extension.js:99
|
||||
#: extensions/window-list/extension.js:130
|
||||
msgid "Maximize"
|
||||
msgstr "Maximitza"
|
||||
|
||||
#: extensions/window-list/extension.js:434
|
||||
#: extensions/window-list/extension.js:720
|
||||
msgid "Minimize all"
|
||||
msgstr "Minimitza-ho tot"
|
||||
|
||||
#: extensions/window-list/extension.js:440
|
||||
#: extensions/window-list/extension.js:726
|
||||
msgid "Unminimize all"
|
||||
msgstr "Desminimitza-ho tot"
|
||||
|
||||
#: extensions/window-list/extension.js:446
|
||||
#: extensions/window-list/extension.js:732
|
||||
msgid "Maximize all"
|
||||
msgstr "Maximitza-ho tot"
|
||||
|
||||
#: extensions/window-list/extension.js:454
|
||||
#: extensions/window-list/extension.js:740
|
||||
msgid "Unmaximize all"
|
||||
msgstr "Desmaximitza-ho tot"
|
||||
|
||||
#: extensions/window-list/extension.js:462
|
||||
#: extensions/window-list/extension.js:748
|
||||
msgid "Close all"
|
||||
msgstr "Tanca-ho tot"
|
||||
|
||||
#: extensions/window-list/extension.js:741
|
||||
#: extensions/window-list/extension.js:1000 extensions/window-list/prefs.js:23
|
||||
msgid "Window List"
|
||||
msgstr "Llista de finestres"
|
||||
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:18
|
||||
msgid "When to group windows"
|
||||
msgstr "Quan s'han d'agrupar les finestres"
|
||||
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:19
|
||||
msgid ""
|
||||
"Decides when to group windows from the same application on the window list. "
|
||||
"Possible values are “never”, “auto” and “always”."
|
||||
@@ -212,22 +293,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:20
|
||||
#: extensions/window-list/prefs.js:86
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26
|
||||
#: extensions/window-list/prefs.js:74
|
||||
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:21
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
|
||||
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:27
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:33
|
||||
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:28
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:34
|
||||
msgid ""
|
||||
"Whether to show the window list on all connected monitors or only on the "
|
||||
"primary one."
|
||||
@@ -235,40 +316,104 @@ msgstr ""
|
||||
"Si es mostra la llista de finestres en tots els monitors connectats o només "
|
||||
"al primari."
|
||||
|
||||
#: extensions/window-list/prefs.js:39
|
||||
#: 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
|
||||
msgid "Window Grouping"
|
||||
msgstr "Agrupació de finestres"
|
||||
|
||||
#: extensions/window-list/prefs.js:63
|
||||
#: extensions/window-list/prefs.js:46
|
||||
msgid "Never group windows"
|
||||
msgstr "Mai agrupis les finestres"
|
||||
|
||||
#: extensions/window-list/prefs.js:64
|
||||
#: extensions/window-list/prefs.js:47
|
||||
msgid "Group windows when space is limited"
|
||||
msgstr "Agrupa les finestres quan l'espai estigui limitat"
|
||||
|
||||
#: extensions/window-list/prefs.js:65
|
||||
#: extensions/window-list/prefs.js:48
|
||||
msgid "Always group windows"
|
||||
msgstr "Agrupa les finestres sempre"
|
||||
|
||||
#: extensions/window-list/prefs.js:81
|
||||
#: extensions/window-list/prefs.js:68
|
||||
msgid "Show on all monitors"
|
||||
msgstr "Mostra a tots els monitors"
|
||||
|
||||
#: extensions/window-list/workspaceIndicator.js:249
|
||||
#: extensions/workspace-indicator/extension.js:254
|
||||
#: 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
|
||||
msgid "Workspace Indicator"
|
||||
msgstr "Indicador de l'espai de treball"
|
||||
|
||||
#: extensions/workspace-indicator/prefs.js:33
|
||||
msgid "Workspace Names"
|
||||
msgstr "Noms dels espais 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:66
|
||||
#, javascript-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Espai de treball %d"
|
||||
#~ msgid "Workspace %d"
|
||||
#~ msgstr "Espai de treball %d"
|
||||
|
||||
#: extensions/workspace-indicator/prefs.js:207
|
||||
msgid "Add Workspace"
|
||||
msgstr "Afegeix un espai de treball"
|
||||
#~ 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"
|
||||
|
||||
292
po/cs.po
292
po/cs.po
@@ -3,53 +3,54 @@
|
||||
# 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: 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"
|
||||
"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"
|
||||
"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: Gtranslator 2.91.6\n"
|
||||
"X-Generator: Poedit 3.6\n"
|
||||
|
||||
#: data/gnome-classic.desktop.in:3
|
||||
#: data/gnome-classic.desktop.in:2
|
||||
msgid "GNOME Classic"
|
||||
msgstr "GNOME klasik"
|
||||
|
||||
#: data/gnome-classic.desktop.in:4 data/gnome-classic-wayland.desktop.in:4
|
||||
#: data/gnome-classic-xorg.desktop.in:4
|
||||
#: data/gnome-classic.desktop.in:3 data/gnome-classic-wayland.desktop.in:3
|
||||
#: data/gnome-classic-xorg.desktop.in:3
|
||||
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:3
|
||||
#: data/gnome-classic-wayland.desktop.in:2
|
||||
msgid "GNOME Classic on Wayland"
|
||||
msgstr "GNOME klasik na Waylandu"
|
||||
|
||||
#: data/gnome-classic-xorg.desktop.in:3
|
||||
#: data/gnome-classic-xorg.desktop.in:2
|
||||
msgid "GNOME Classic on Xorg"
|
||||
msgstr "GNOME klasik na Xorg"
|
||||
|
||||
#: extensions/apps-menu/extension.js:112
|
||||
#: extensions/apps-menu/extension.js:118
|
||||
msgid "Favorites"
|
||||
msgstr "Oblíbené"
|
||||
|
||||
#: extensions/apps-menu/extension.js:366
|
||||
msgid "Applications"
|
||||
#: extensions/apps-menu/extension.js:392
|
||||
msgid "Apps"
|
||||
msgstr "Aplikace"
|
||||
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:12
|
||||
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:7
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:13
|
||||
msgid ""
|
||||
"A list of strings, each containing an application id (desktop file name), "
|
||||
"followed by a colon and the workspace number"
|
||||
@@ -57,34 +58,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:34
|
||||
#: extensions/auto-move-windows/prefs.js:156
|
||||
msgid "Workspace Rules"
|
||||
msgstr "Pravidla pracovních ploch"
|
||||
|
||||
#: extensions/auto-move-windows/prefs.js:236
|
||||
#: extensions/auto-move-windows/prefs.js:311
|
||||
msgid "Add Rule"
|
||||
msgstr "Přidat pravidlo"
|
||||
|
||||
#. TRANSLATORS: %s is the filesystem name
|
||||
#: extensions/drive-menu/extension.js:133
|
||||
#: extensions/places-menu/placeDisplay.js:233
|
||||
#: extensions/drive-menu/extension.js:123
|
||||
#: extensions/places-menu/placeDisplay.js:186
|
||||
#, javascript-format
|
||||
msgid "Ejecting drive “%s” failed:"
|
||||
msgstr "Vysunutí disku „%s“ selhalo:"
|
||||
|
||||
#: extensions/drive-menu/extension.js:149
|
||||
#: extensions/drive-menu/extension.js:142
|
||||
msgid "Removable devices"
|
||||
msgstr "Výměnná zařízení"
|
||||
|
||||
#: extensions/drive-menu/extension.js:171
|
||||
#: extensions/drive-menu/extension.js:164
|
||||
msgid "Open Files"
|
||||
msgstr "Otevřít soubory"
|
||||
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
|
||||
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:6
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
|
||||
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. "
|
||||
@@ -94,11 +95,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:11
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:17
|
||||
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:12
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:18
|
||||
msgid ""
|
||||
"If true, place window captions on top the respective thumbnail, overriding "
|
||||
"shell default of placing it at the bottom. Changing this setting requires "
|
||||
@@ -108,99 +109,178 @@ 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:88
|
||||
#: extensions/places-menu/extension.js:91
|
||||
#: extensions/places-menu/extension.js:75
|
||||
#: extensions/places-menu/extension.js:78
|
||||
msgid "Places"
|
||||
msgstr "Místa"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:46
|
||||
#: extensions/places-menu/placeDisplay.js:52
|
||||
#, javascript-format
|
||||
msgid "Failed to launch “%s”"
|
||||
msgstr "Selhalo spuštění „%s“"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:61
|
||||
#: extensions/places-menu/placeDisplay.js:67
|
||||
#, javascript-format
|
||||
msgid "Failed to mount volume for “%s”"
|
||||
msgstr "Selhalo připojení svazku pro „%s“"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:148
|
||||
#: extensions/places-menu/placeDisplay.js:171
|
||||
msgid "Computer"
|
||||
msgstr "Počítač"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:359
|
||||
#: extensions/places-menu/placeDisplay.js:315
|
||||
msgid "Home"
|
||||
msgstr "Domů"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:404
|
||||
msgid "Browse Network"
|
||||
msgstr "Procházet síť"
|
||||
#: extensions/places-menu/placeDisplay.js:321
|
||||
msgid "Recent"
|
||||
msgstr "Nedávné"
|
||||
|
||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7
|
||||
#: 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
|
||||
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:11
|
||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:18
|
||||
msgid "Cycle Screenshot Sizes Backward"
|
||||
msgstr "Mění pozpátku velikost pro snímky obrazovky"
|
||||
|
||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5
|
||||
#: 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
|
||||
msgid "Theme name"
|
||||
msgstr "Název motivu"
|
||||
|
||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6
|
||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:12
|
||||
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:72
|
||||
#: extensions/window-list/extension.js:98
|
||||
msgid "Close"
|
||||
msgstr "Zavřít"
|
||||
|
||||
#: extensions/window-list/extension.js:92
|
||||
#: extensions/window-list/extension.js:125
|
||||
msgid "Unminimize"
|
||||
msgstr "Zrušit minimalizaci"
|
||||
|
||||
#: extensions/window-list/extension.js:92
|
||||
#: extensions/window-list/extension.js:125
|
||||
msgid "Minimize"
|
||||
msgstr "Minimalizovat"
|
||||
|
||||
#: extensions/window-list/extension.js:99
|
||||
#: extensions/window-list/extension.js:130
|
||||
msgid "Unmaximize"
|
||||
msgstr "Zrušit maximalizaci"
|
||||
|
||||
#: extensions/window-list/extension.js:99
|
||||
#: extensions/window-list/extension.js:130
|
||||
msgid "Maximize"
|
||||
msgstr "Maximalizovat"
|
||||
|
||||
#: extensions/window-list/extension.js:434
|
||||
#: extensions/window-list/extension.js:720
|
||||
msgid "Minimize all"
|
||||
msgstr "Minimalizovat všechna"
|
||||
|
||||
#: extensions/window-list/extension.js:440
|
||||
#: extensions/window-list/extension.js:726
|
||||
msgid "Unminimize all"
|
||||
msgstr "Zrušit minimalizaci všech"
|
||||
|
||||
#: extensions/window-list/extension.js:446
|
||||
#: extensions/window-list/extension.js:732
|
||||
msgid "Maximize all"
|
||||
msgstr "Maximalizovat všechna"
|
||||
|
||||
#: extensions/window-list/extension.js:454
|
||||
#: extensions/window-list/extension.js:740
|
||||
msgid "Unmaximize all"
|
||||
msgstr "Zrušit maximalizaci všech"
|
||||
|
||||
#: extensions/window-list/extension.js:462
|
||||
#: extensions/window-list/extension.js:748
|
||||
msgid "Close all"
|
||||
msgstr "Zavřít všechna"
|
||||
|
||||
#: extensions/window-list/extension.js:741
|
||||
#: extensions/window-list/extension.js:1000 extensions/window-list/prefs.js:23
|
||||
msgid "Window List"
|
||||
msgstr "Seznam oken"
|
||||
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:18
|
||||
msgid "When to group windows"
|
||||
msgstr "Kdy seskupovat okna"
|
||||
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:19
|
||||
msgid ""
|
||||
"Decides when to group windows from the same application on the window list. "
|
||||
"Possible values are “never”, “auto” and “always”."
|
||||
@@ -208,20 +288,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:20
|
||||
#: extensions/window-list/prefs.js:86
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26
|
||||
#: extensions/window-list/prefs.js:74
|
||||
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:21
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
|
||||
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:27
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:33
|
||||
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:28
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:34
|
||||
msgid ""
|
||||
"Whether to show the window list on all connected monitors or only on the "
|
||||
"primary one."
|
||||
@@ -229,40 +309,102 @@ msgstr ""
|
||||
"Zda zobrazovat seznam oken na všech připojených monitorech nebo jen na "
|
||||
"hlavním."
|
||||
|
||||
#: extensions/window-list/prefs.js:39
|
||||
#: 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
|
||||
msgid "Window Grouping"
|
||||
msgstr "Seskupování oken"
|
||||
|
||||
#: extensions/window-list/prefs.js:63
|
||||
#: extensions/window-list/prefs.js:46
|
||||
msgid "Never group windows"
|
||||
msgstr "Nikdy neseskupovat okna"
|
||||
|
||||
#: extensions/window-list/prefs.js:64
|
||||
#: extensions/window-list/prefs.js:47
|
||||
msgid "Group windows when space is limited"
|
||||
msgstr "Seskupovat okna při nedostatku místa"
|
||||
|
||||
#: extensions/window-list/prefs.js:65
|
||||
#: extensions/window-list/prefs.js:48
|
||||
msgid "Always group windows"
|
||||
msgstr "Vždy seskupovat okna"
|
||||
|
||||
#: extensions/window-list/prefs.js:81
|
||||
#: extensions/window-list/prefs.js:68
|
||||
msgid "Show on all monitors"
|
||||
msgstr "Zobrazovat na všech monitorech"
|
||||
|
||||
#: extensions/window-list/workspaceIndicator.js:249
|
||||
#: extensions/workspace-indicator/extension.js:254
|
||||
#: 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
|
||||
msgid "Workspace Indicator"
|
||||
msgstr "Ukazatel pracovní plochy"
|
||||
|
||||
#: extensions/workspace-indicator/prefs.js:33
|
||||
msgid "Workspace Names"
|
||||
msgstr "Názvy pracovních ploch"
|
||||
#: 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:66
|
||||
#, javascript-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Pracovní plocha %d"
|
||||
#~ msgid "Workspace %d"
|
||||
#~ msgstr "Pracovní plocha %d"
|
||||
|
||||
#: extensions/workspace-indicator/prefs.js:207
|
||||
msgid "Add Workspace"
|
||||
msgstr "Přidat pracovní plochu"
|
||||
#~ 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"
|
||||
|
||||
214
po/da.po
214
po/da.po
@@ -1,9 +1,9 @@
|
||||
# Danish translation for gnome-shell-extensions.
|
||||
# Copyright (C) 2011-2017 gnome-shell-extensions's COPYRIGHT HOLDER
|
||||
# Copyright (C) 2011-2017, 2024 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.
|
||||
# Ask Hjorth Larsen <asklarsen@gmail.com>, 2015, 2017, 2024.
|
||||
# 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: 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"
|
||||
"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"
|
||||
"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:112
|
||||
#: extensions/apps-menu/extension.js:126
|
||||
msgid "Favorites"
|
||||
msgstr "Favoritter"
|
||||
|
||||
#: extensions/apps-menu/extension.js:366
|
||||
msgid "Applications"
|
||||
#: extensions/apps-menu/extension.js:400
|
||||
msgid "Apps"
|
||||
msgstr "Programmer"
|
||||
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:12
|
||||
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:7
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:13
|
||||
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:34
|
||||
#: extensions/auto-move-windows/prefs.js:159
|
||||
msgid "Workspace Rules"
|
||||
msgstr "Regler for arbejdsområde"
|
||||
|
||||
#: extensions/auto-move-windows/prefs.js:236
|
||||
#: extensions/auto-move-windows/prefs.js:314
|
||||
msgid "Add Rule"
|
||||
msgstr "Tilføj regel"
|
||||
|
||||
#. TRANSLATORS: %s is the filesystem name
|
||||
#: extensions/drive-menu/extension.js:133
|
||||
#: extensions/places-menu/placeDisplay.js:233
|
||||
#: extensions/drive-menu/extension.js:123
|
||||
#: extensions/places-menu/placeDisplay.js:218
|
||||
#, javascript-format
|
||||
msgid "Ejecting drive “%s” failed:"
|
||||
msgstr "Udskubning af drevet “%s” mislykkedes:"
|
||||
|
||||
#: extensions/drive-menu/extension.js:149
|
||||
#: extensions/drive-menu/extension.js:142
|
||||
msgid "Removable devices"
|
||||
msgstr "Flytbare enheder"
|
||||
|
||||
#: extensions/drive-menu/extension.js:171
|
||||
#: extensions/drive-menu/extension.js:164
|
||||
msgid "Open Files"
|
||||
msgstr "Åbn filer"
|
||||
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
|
||||
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:6
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
|
||||
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:11
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:17
|
||||
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:12
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:18
|
||||
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,47 +112,119 @@ 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:46
|
||||
#: extensions/places-menu/placeDisplay.js:60
|
||||
#, javascript-format
|
||||
msgid "Failed to launch “%s”"
|
||||
msgstr "Kunne ikke åbne “%s”"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:61
|
||||
#: extensions/places-menu/placeDisplay.js:75
|
||||
#, javascript-format
|
||||
msgid "Failed to mount volume for “%s”"
|
||||
msgstr "Kunne ikke montere diskenhed for “%s”"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:148
|
||||
#: extensions/places-menu/placeDisplay.js:171
|
||||
#: extensions/places-menu/placeDisplay.js:135
|
||||
#: extensions/places-menu/placeDisplay.js:158
|
||||
msgid "Computer"
|
||||
msgstr "Computer"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:359
|
||||
#: extensions/places-menu/placeDisplay.js:333
|
||||
msgid "Home"
|
||||
msgstr "Hjem"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:404
|
||||
#: extensions/places-menu/placeDisplay.js:378
|
||||
msgid "Browse Network"
|
||||
msgstr "Gennemse netværk"
|
||||
|
||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7
|
||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:14
|
||||
msgid "Cycle Screenshot Sizes"
|
||||
msgstr "Gennemgå størrelser af skærmbillede"
|
||||
|
||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
|
||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:18
|
||||
msgid "Cycle Screenshot Sizes Backward"
|
||||
msgstr "Gennemgå størrelser af skærmbillede baglæns"
|
||||
|
||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5
|
||||
#: 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
|
||||
msgid "Theme name"
|
||||
msgstr "Temanavn"
|
||||
|
||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6
|
||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:12
|
||||
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"
|
||||
|
||||
@@ -160,51 +232,51 @@ msgstr "Navnet på temaet, som indlæses fra ~/.themes/name/gnome-shell"
|
||||
msgid "Close"
|
||||
msgstr "Luk"
|
||||
|
||||
#: extensions/window-list/extension.js:92
|
||||
#: extensions/window-list/extension.js:99
|
||||
msgid "Unminimize"
|
||||
msgstr "Afminimér"
|
||||
|
||||
#: extensions/window-list/extension.js:92
|
||||
#: extensions/window-list/extension.js:99
|
||||
msgid "Minimize"
|
||||
msgstr "Minimér"
|
||||
|
||||
#: extensions/window-list/extension.js:99
|
||||
#: extensions/window-list/extension.js:106
|
||||
msgid "Unmaximize"
|
||||
msgstr "Afmaksimér"
|
||||
|
||||
#: extensions/window-list/extension.js:99
|
||||
#: extensions/window-list/extension.js:106
|
||||
msgid "Maximize"
|
||||
msgstr "Maksimér"
|
||||
|
||||
#: extensions/window-list/extension.js:434
|
||||
#: extensions/window-list/extension.js:471
|
||||
msgid "Minimize all"
|
||||
msgstr "Minimér"
|
||||
|
||||
#: extensions/window-list/extension.js:440
|
||||
#: extensions/window-list/extension.js:477
|
||||
msgid "Unminimize all"
|
||||
msgstr "Afminimér alle"
|
||||
|
||||
#: extensions/window-list/extension.js:446
|
||||
#: extensions/window-list/extension.js:483
|
||||
msgid "Maximize all"
|
||||
msgstr "Maksimér alle"
|
||||
|
||||
#: extensions/window-list/extension.js:454
|
||||
#: extensions/window-list/extension.js:491
|
||||
msgid "Unmaximize all"
|
||||
msgstr "Afmaksimér alle"
|
||||
|
||||
#: extensions/window-list/extension.js:462
|
||||
#: extensions/window-list/extension.js:499
|
||||
msgid "Close all"
|
||||
msgstr "Luk alle"
|
||||
|
||||
#: extensions/window-list/extension.js:741
|
||||
#: extensions/window-list/extension.js:778
|
||||
msgid "Window List"
|
||||
msgstr "Vinduesliste"
|
||||
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:18
|
||||
msgid "When to group windows"
|
||||
msgstr "Hvornår vinduer skal grupperes"
|
||||
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:19
|
||||
msgid ""
|
||||
"Decides when to group windows from the same application on the window list. "
|
||||
"Possible values are “never”, “auto” and “always”."
|
||||
@@ -212,21 +284,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:20
|
||||
#: extensions/window-list/prefs.js:86
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26
|
||||
#: extensions/window-list/prefs.js:79
|
||||
msgid "Show windows from all workspaces"
|
||||
msgstr "Vis vinduer fra alle arbejdsområder"
|
||||
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
|
||||
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:27
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:33
|
||||
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:28
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:34
|
||||
msgid ""
|
||||
"Whether to show the window list on all connected monitors or only on the "
|
||||
"primary one."
|
||||
@@ -234,44 +306,62 @@ msgstr ""
|
||||
"Om vindueslisten skal vise på alle tilsluttede skærme, eller kun på den "
|
||||
"primære."
|
||||
|
||||
#: extensions/window-list/prefs.js:39
|
||||
#: 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
|
||||
msgid "Window Grouping"
|
||||
msgstr "Vinduesgruppering"
|
||||
|
||||
#: extensions/window-list/prefs.js:63
|
||||
#: extensions/window-list/prefs.js:40
|
||||
msgid "Never group windows"
|
||||
msgstr "Gruppér aldrig vinduer"
|
||||
|
||||
#: extensions/window-list/prefs.js:64
|
||||
#: extensions/window-list/prefs.js:41
|
||||
msgid "Group windows when space is limited"
|
||||
msgstr "Gruppér vinduer når pladsen er begrænset"
|
||||
|
||||
#: extensions/window-list/prefs.js:65
|
||||
#: extensions/window-list/prefs.js:42
|
||||
msgid "Always group windows"
|
||||
msgstr "Gruppér altid vinduer"
|
||||
|
||||
#: extensions/window-list/prefs.js:81
|
||||
#: extensions/window-list/prefs.js:66
|
||||
msgid "Show on all monitors"
|
||||
msgstr "Vis på alle skærme"
|
||||
|
||||
#: extensions/window-list/workspaceIndicator.js:249
|
||||
#: extensions/workspace-indicator/extension.js:254
|
||||
msgid "Workspace Indicator"
|
||||
msgstr "Arbejdsområdeindikator"
|
||||
#: extensions/window-list/prefs.js:92
|
||||
msgid "Show workspace previews"
|
||||
msgstr "Forhåndsvis arbejdsområder"
|
||||
|
||||
#: extensions/workspace-indicator/prefs.js:33
|
||||
msgid "Workspace Names"
|
||||
msgstr "Navne på arbejdsområder"
|
||||
#: 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:66
|
||||
#: extensions/workspace-indicator/prefs.js:88
|
||||
#, javascript-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Arbejdsområde %d"
|
||||
|
||||
#: extensions/workspace-indicator/prefs.js:207
|
||||
#: extensions/workspace-indicator/prefs.js:155
|
||||
msgid "Workspace Names"
|
||||
msgstr "Navne på arbejdsområder"
|
||||
|
||||
#: extensions/workspace-indicator/prefs.js:281
|
||||
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
279
po/de.po
@@ -8,22 +8,24 @@
|
||||
# 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 master\n"
|
||||
"Project-Id-Version: gnome-shell-extensions main\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
|
||||
"issues\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"
|
||||
"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"
|
||||
"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.0.1\n"
|
||||
"X-Generator: Poedit 3.4.4\n"
|
||||
|
||||
#: data/gnome-classic.desktop.in:3
|
||||
msgid "GNOME Classic"
|
||||
@@ -42,19 +44,19 @@ msgstr "GNOME Classic unter Wayland"
|
||||
msgid "GNOME Classic on Xorg"
|
||||
msgstr "GNOME Classic unter Xorg"
|
||||
|
||||
#: extensions/apps-menu/extension.js:118
|
||||
#: extensions/apps-menu/extension.js:126
|
||||
msgid "Favorites"
|
||||
msgstr "Favoriten"
|
||||
|
||||
#: extensions/apps-menu/extension.js:379
|
||||
msgid "Applications"
|
||||
#: extensions/apps-menu/extension.js:400
|
||||
msgid "Apps"
|
||||
msgstr "Anwendungen"
|
||||
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:12
|
||||
msgid "Application and workspace list"
|
||||
msgstr "Anwendungs- und Arbeitsflächenliste"
|
||||
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:7
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:13
|
||||
msgid ""
|
||||
"A list of strings, each containing an application id (desktop file name), "
|
||||
"followed by a colon and the workspace number"
|
||||
@@ -63,34 +65,34 @@ msgstr ""
|
||||
"Datei) enthält, gefolgt von einem Doppelpunkt und der Nummer der "
|
||||
"Arbeitsfläche"
|
||||
|
||||
#: extensions/auto-move-windows/prefs.js:152
|
||||
#: extensions/auto-move-windows/prefs.js:159
|
||||
msgid "Workspace Rules"
|
||||
msgstr "Arbeitsfläche-Regeln"
|
||||
|
||||
#: extensions/auto-move-windows/prefs.js:306
|
||||
#: extensions/auto-move-windows/prefs.js:314
|
||||
msgid "Add Rule"
|
||||
msgstr "Regel hinzufügen"
|
||||
|
||||
#. TRANSLATORS: %s is the filesystem name
|
||||
#: extensions/drive-menu/extension.js:126
|
||||
#: extensions/places-menu/placeDisplay.js:210
|
||||
#: extensions/drive-menu/extension.js:123
|
||||
#: extensions/places-menu/placeDisplay.js:218
|
||||
#, javascript-format
|
||||
msgid "Ejecting drive “%s” failed:"
|
||||
msgstr "Auswerfen von Laufwerk »%s« schlug fehl:"
|
||||
|
||||
#: extensions/drive-menu/extension.js:145
|
||||
#: extensions/drive-menu/extension.js:142
|
||||
msgid "Removable devices"
|
||||
msgstr "Wechseldatenträger"
|
||||
|
||||
#: extensions/drive-menu/extension.js:167
|
||||
#: extensions/drive-menu/extension.js:164
|
||||
msgid "Open Files"
|
||||
msgstr "Dateien öffnen"
|
||||
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
|
||||
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:6
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
|
||||
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. "
|
||||
@@ -102,11 +104,11 @@ msgstr ""
|
||||
"verkleinern. Diese Einstellung betrifft nur den natürlichen "
|
||||
"Platzierungsalgorithmus."
|
||||
|
||||
#: 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:17
|
||||
msgid "Place window captions on top"
|
||||
msgstr "Fensterbeschriftungen oben platzieren"
|
||||
|
||||
#: 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:18
|
||||
msgid ""
|
||||
"If true, place window captions on top the respective thumbnail, overriding "
|
||||
"shell default of placing it at the bottom. Changing this setting requires "
|
||||
@@ -116,47 +118,119 @@ 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:49
|
||||
#: extensions/places-menu/placeDisplay.js:60
|
||||
#, javascript-format
|
||||
msgid "Failed to launch “%s”"
|
||||
msgstr "Starten von »%s« fehlgeschlagen"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:64
|
||||
#: extensions/places-menu/placeDisplay.js:75
|
||||
#, javascript-format
|
||||
msgid "Failed to mount volume for “%s”"
|
||||
msgstr "Datenträger für »%s« konnte nicht eingebunden werden"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:125
|
||||
#: extensions/places-menu/placeDisplay.js:148
|
||||
#: extensions/places-menu/placeDisplay.js:135
|
||||
#: extensions/places-menu/placeDisplay.js:158
|
||||
msgid "Computer"
|
||||
msgstr "Rechner"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:336
|
||||
#: extensions/places-menu/placeDisplay.js:333
|
||||
msgid "Home"
|
||||
msgstr "Persönlicher Ordner"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:381
|
||||
#: extensions/places-menu/placeDisplay.js:378
|
||||
msgid "Browse Network"
|
||||
msgstr "Netzwerk durchsuchen"
|
||||
|
||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7
|
||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:14
|
||||
msgid "Cycle Screenshot Sizes"
|
||||
msgstr "Bildschirmfotogrößen nacheinander anzeigen"
|
||||
|
||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
|
||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:18
|
||||
msgid "Cycle Screenshot Sizes Backward"
|
||||
msgstr "Bildschirmfotogrößen in umgekehrter Reihenfolge anzeigen"
|
||||
|
||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5
|
||||
#: 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
|
||||
msgid "Theme name"
|
||||
msgstr "Themenname"
|
||||
|
||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6
|
||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:12
|
||||
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 "
|
||||
@@ -166,51 +240,51 @@ msgstr ""
|
||||
msgid "Close"
|
||||
msgstr "Schließen"
|
||||
|
||||
#: extensions/window-list/extension.js:92
|
||||
#: extensions/window-list/extension.js:99
|
||||
msgid "Unminimize"
|
||||
msgstr "Minimieren rückgängig"
|
||||
|
||||
#: extensions/window-list/extension.js:92
|
||||
#: extensions/window-list/extension.js:99
|
||||
msgid "Minimize"
|
||||
msgstr "Minimieren"
|
||||
|
||||
#: extensions/window-list/extension.js:99
|
||||
#: extensions/window-list/extension.js:106
|
||||
msgid "Unmaximize"
|
||||
msgstr "Maximieren rückgängig"
|
||||
|
||||
#: extensions/window-list/extension.js:99
|
||||
#: extensions/window-list/extension.js:106
|
||||
msgid "Maximize"
|
||||
msgstr "Maximieren"
|
||||
|
||||
#: extensions/window-list/extension.js:441
|
||||
#: extensions/window-list/extension.js:471
|
||||
msgid "Minimize all"
|
||||
msgstr "Alle minimieren"
|
||||
|
||||
#: extensions/window-list/extension.js:447
|
||||
#: extensions/window-list/extension.js:477
|
||||
msgid "Unminimize all"
|
||||
msgstr "Alle minimieren rückgängig"
|
||||
|
||||
#: extensions/window-list/extension.js:453
|
||||
#: extensions/window-list/extension.js:483
|
||||
msgid "Maximize all"
|
||||
msgstr "Alle maximieren"
|
||||
|
||||
#: extensions/window-list/extension.js:461
|
||||
#: extensions/window-list/extension.js:491
|
||||
msgid "Unmaximize all"
|
||||
msgstr "Alle maximieren rückgängig"
|
||||
|
||||
#: extensions/window-list/extension.js:469
|
||||
#: extensions/window-list/extension.js:499
|
||||
msgid "Close all"
|
||||
msgstr "Alle schließen"
|
||||
|
||||
#: extensions/window-list/extension.js:753
|
||||
#: extensions/window-list/extension.js:778
|
||||
msgid "Window List"
|
||||
msgstr "Fensterliste"
|
||||
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:18
|
||||
msgid "When to group windows"
|
||||
msgstr "Legt fest, wann Fenster gruppiert werden"
|
||||
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:19
|
||||
msgid ""
|
||||
"Decides when to group windows from the same application on the window list. "
|
||||
"Possible values are “never”, “auto” and “always”."
|
||||
@@ -219,22 +293,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:20
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26
|
||||
#: 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:21
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
|
||||
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:27
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:33
|
||||
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:28
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:34
|
||||
msgid ""
|
||||
"Whether to show the window list on all connected monitors or only on the "
|
||||
"primary one."
|
||||
@@ -242,6 +316,10 @@ 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"
|
||||
@@ -262,105 +340,34 @@ msgstr "Fenster immer gruppieren"
|
||||
msgid "Show on all monitors"
|
||||
msgstr "Auf allen Bildschirmen anzeigen"
|
||||
|
||||
#: extensions/window-list/workspaceIndicator.js:261
|
||||
#: extensions/workspace-indicator/extension.js:266
|
||||
msgid "Workspace Indicator"
|
||||
msgstr "Arbeitsflächenindikator"
|
||||
#: extensions/window-list/prefs.js:92
|
||||
msgid "Show workspace previews"
|
||||
msgstr "Arbeitsflächenvorschauen anzeigen"
|
||||
|
||||
#: extensions/workspace-indicator/prefs.js:62
|
||||
#: 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
|
||||
#, javascript-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Arbeitsfläche %d"
|
||||
|
||||
#: extensions/workspace-indicator/prefs.js:129
|
||||
#: extensions/workspace-indicator/prefs.js:155
|
||||
msgid "Workspace Names"
|
||||
msgstr "Namen der Arbeitsflächen"
|
||||
|
||||
#: extensions/workspace-indicator/prefs.js:255
|
||||
#: extensions/workspace-indicator/prefs.js:281
|
||||
msgid "Add Workspace"
|
||||
msgstr "Arbeitsfläche hinzufügen"
|
||||
|
||||
#~ msgid "Application"
|
||||
#~ msgstr "Anwendung"
|
||||
#: 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 "Create new matching rule"
|
||||
#~ msgstr "Neue Übereinstimmungsregel erstellen"
|
||||
#: extensions/workspace-indicator/workspaceIndicator.js:430
|
||||
msgid "Workspace Indicator"
|
||||
msgstr "Arbeitsflächenindikator"
|
||||
|
||||
#~ 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 it’s 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."
|
||||
#~ msgid "Applications"
|
||||
#~ msgstr "Anwendungen"
|
||||
|
||||
249
po/el.po
249
po/el.po
@@ -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: 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"
|
||||
"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"
|
||||
"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.3.2\n"
|
||||
"X-Generator: Poedit 3.4.4\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:118
|
||||
#: extensions/apps-menu/extension.js:126
|
||||
msgid "Favorites"
|
||||
msgstr "Αγαπημένα"
|
||||
|
||||
#: extensions/apps-menu/extension.js:380
|
||||
msgid "Applications"
|
||||
#: extensions/apps-menu/extension.js:400
|
||||
msgid "Apps"
|
||||
msgstr "Εφαρμογές"
|
||||
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:12
|
||||
msgid "Application and workspace list"
|
||||
msgstr "Λίστα εφαρμογών και χώρου εργασίας"
|
||||
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:7
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:13
|
||||
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:152
|
||||
#: extensions/auto-move-windows/prefs.js:159
|
||||
msgid "Workspace Rules"
|
||||
msgstr "Κανόνες χώρων εργασίας"
|
||||
|
||||
#: extensions/auto-move-windows/prefs.js:306
|
||||
#: extensions/auto-move-windows/prefs.js:314
|
||||
msgid "Add Rule"
|
||||
msgstr "Προσθήκη κανόνα"
|
||||
|
||||
#. TRANSLATORS: %s is the filesystem name
|
||||
#: extensions/drive-menu/extension.js:126
|
||||
#: extensions/places-menu/placeDisplay.js:212
|
||||
#: extensions/drive-menu/extension.js:123
|
||||
#: extensions/places-menu/placeDisplay.js:187
|
||||
#, javascript-format
|
||||
msgid "Ejecting drive “%s” failed:"
|
||||
msgstr "Αποτυχία εξαγωγής του δίσκου «%s»:"
|
||||
|
||||
#: extensions/drive-menu/extension.js:145
|
||||
#: extensions/drive-menu/extension.js:142
|
||||
msgid "Removable devices"
|
||||
msgstr "Αφαιρούμενες συσκευές"
|
||||
|
||||
#: extensions/drive-menu/extension.js:167
|
||||
#: extensions/drive-menu/extension.js:164
|
||||
msgid "Open Files"
|
||||
msgstr "Άνοιγμα αρχείων"
|
||||
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
|
||||
msgid "Use more screen for windows"
|
||||
msgstr "Χρησιμοποιήστε περισσότερη οθόνη για τα παράθυρα"
|
||||
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:6
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
|
||||
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:11
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:17
|
||||
msgid "Place window captions on top"
|
||||
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:18
|
||||
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,100 +115,179 @@ 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:52
|
||||
#: extensions/places-menu/placeDisplay.js:53
|
||||
#, javascript-format
|
||||
msgid "Failed to launch “%s”"
|
||||
msgstr "Αποτυχία εκκίνησης «%s»"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:67
|
||||
#: extensions/places-menu/placeDisplay.js:68
|
||||
#, javascript-format
|
||||
msgid "Failed to mount volume for “%s”"
|
||||
msgstr "Αποτυχία προσάρτησης τόμου για «%s»"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:127
|
||||
#: extensions/places-menu/placeDisplay.js:150
|
||||
msgid "Computer"
|
||||
msgstr "Υπολογιστής"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:340
|
||||
#: extensions/places-menu/placeDisplay.js:316
|
||||
msgid "Home"
|
||||
msgstr "Προσωπικός φάκελος"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:385
|
||||
msgid "Browse Network"
|
||||
msgstr "Περιήγηση δικτύου"
|
||||
#: extensions/places-menu/placeDisplay.js:322
|
||||
msgid "Recent"
|
||||
msgstr "Πρόσφατα"
|
||||
|
||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7
|
||||
#: 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
|
||||
msgid "Cycle Screenshot Sizes"
|
||||
msgstr "Περιδιάβαση τα μεγέθη των στιγμιοτύπων"
|
||||
|
||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
|
||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:18
|
||||
msgid "Cycle Screenshot Sizes Backward"
|
||||
msgstr "Μεγέθη κυκλικών στιγμιοτύπων προς τα πίσω"
|
||||
|
||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5
|
||||
#: 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
|
||||
msgid "Theme name"
|
||||
msgstr "Όνομα θέματος"
|
||||
|
||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6
|
||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:12
|
||||
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
|
||||
msgstr ""
|
||||
"Το όνομα του θέματος που θα φορτωθεί από το ~ /.themes/name/gnome-shell"
|
||||
|
||||
#: extensions/window-list/extension.js:72
|
||||
#: extensions/window-list/extension.js:92
|
||||
msgid "Close"
|
||||
msgstr "Κλείσιμο"
|
||||
|
||||
#: extensions/window-list/extension.js:92
|
||||
#: extensions/window-list/extension.js:119
|
||||
msgid "Unminimize"
|
||||
msgstr "Αποελαχιστοποίηση"
|
||||
|
||||
#: extensions/window-list/extension.js:92
|
||||
#: extensions/window-list/extension.js:119
|
||||
msgid "Minimize"
|
||||
msgstr "Ελαχιστοποίηση"
|
||||
|
||||
#: extensions/window-list/extension.js:99
|
||||
#: extensions/window-list/extension.js:126
|
||||
msgid "Unmaximize"
|
||||
msgstr "Απομεγιστοποίηση"
|
||||
|
||||
#: extensions/window-list/extension.js:99
|
||||
#: extensions/window-list/extension.js:126
|
||||
msgid "Maximize"
|
||||
msgstr "Μεγιστοποίηση"
|
||||
|
||||
#: extensions/window-list/extension.js:483
|
||||
#: extensions/window-list/extension.js:641
|
||||
msgid "Minimize all"
|
||||
msgstr "Ελαχιστοποίηση όλων"
|
||||
|
||||
#: extensions/window-list/extension.js:489
|
||||
#: extensions/window-list/extension.js:647
|
||||
msgid "Unminimize all"
|
||||
msgstr "Αποελαχιστοποίηση όλων"
|
||||
|
||||
#: extensions/window-list/extension.js:495
|
||||
#: extensions/window-list/extension.js:653
|
||||
msgid "Maximize all"
|
||||
msgstr "Μεγιστοποίηση όλων"
|
||||
|
||||
#: extensions/window-list/extension.js:503
|
||||
#: extensions/window-list/extension.js:661
|
||||
msgid "Unmaximize all"
|
||||
msgstr "Απομεγιστοποίηση όλων"
|
||||
|
||||
#: extensions/window-list/extension.js:511
|
||||
#: extensions/window-list/extension.js:669
|
||||
msgid "Close all"
|
||||
msgstr "Κλείσιμο όλων"
|
||||
|
||||
#: extensions/window-list/extension.js:795
|
||||
#: extensions/window-list/extension.js:911 extensions/window-list/prefs.js:24
|
||||
msgid "Window List"
|
||||
msgstr "Λίστα παραθύρου"
|
||||
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:18
|
||||
msgid "When to group windows"
|
||||
msgstr "Πότε θα ομαδοποιούνται τα παράθυρα"
|
||||
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:19
|
||||
msgid ""
|
||||
"Decides when to group windows from the same application on the window list. "
|
||||
"Possible values are “never”, “auto” and “always”."
|
||||
@@ -217,21 +296,21 @@ msgstr ""
|
||||
"παραθύρου. Δυνατές τιμές είναι «never» (ποτέ), «auto» (αυτόματα) και "
|
||||
"«always» (πάντα)."
|
||||
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
|
||||
#: extensions/window-list/prefs.js:79
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26
|
||||
#: extensions/window-list/prefs.js:75
|
||||
msgid "Show windows from all workspaces"
|
||||
msgstr "Εμφάνιση των παραθύρων από όλους τους χώρους εργασίας"
|
||||
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
|
||||
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:27
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:33
|
||||
msgid "Show the window list on all monitors"
|
||||
msgstr "Να εμφανίζεται ο κατάλογος παραθύρων σε όλες τις οθόνες"
|
||||
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:28
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:34
|
||||
msgid ""
|
||||
"Whether to show the window list on all connected monitors or only on the "
|
||||
"primary one."
|
||||
@@ -239,44 +318,73 @@ msgstr ""
|
||||
"Αν θα εμφανίζεται ο κατάλογος παραθύρων όλων των συνδεμένων οθονών ή μόνο "
|
||||
"της κύριας οθόνης."
|
||||
|
||||
#: extensions/window-list/prefs.js:35
|
||||
#: 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
|
||||
msgid "Window Grouping"
|
||||
msgstr "Ομαδοποίηση παραθύρου"
|
||||
|
||||
#: extensions/window-list/prefs.js:40
|
||||
#: extensions/window-list/prefs.js:47
|
||||
msgid "Never group windows"
|
||||
msgstr "Να μη γίνεται ποτέ ομαδοποίηση παραθύρων"
|
||||
|
||||
#: extensions/window-list/prefs.js:41
|
||||
#: extensions/window-list/prefs.js:48
|
||||
msgid "Group windows when space is limited"
|
||||
msgstr "Ομαδοποίηση παραθύρων όταν ο χώρος είναι περιορισμένος"
|
||||
|
||||
#: extensions/window-list/prefs.js:42
|
||||
#: extensions/window-list/prefs.js:49
|
||||
msgid "Always group windows"
|
||||
msgstr "Να γίνεται πάντα ομαδοποίηση παραθύρων"
|
||||
|
||||
#: extensions/window-list/prefs.js:66
|
||||
#: extensions/window-list/prefs.js:69
|
||||
msgid "Show on all monitors"
|
||||
msgstr "Να εμφανίζεται σε όλες τις οθόνες"
|
||||
|
||||
#: extensions/window-list/workspaceIndicator.js:261
|
||||
#: extensions/workspace-indicator/extension.js:266
|
||||
#: 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
|
||||
msgid "Workspace Indicator"
|
||||
msgstr "Δείκτης χώρου εργασίας"
|
||||
|
||||
#: extensions/workspace-indicator/prefs.js:62
|
||||
#: extensions/workspace-indicator/workspacePrefs.js:29
|
||||
msgid "Show Previews"
|
||||
msgstr "Εμφάνιση προεπισκοπήσεων"
|
||||
|
||||
#: extensions/workspace-indicator/workspacePrefs.js:87
|
||||
#, javascript-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Χώρος εργασίας %d"
|
||||
|
||||
#: extensions/workspace-indicator/prefs.js:129
|
||||
#: extensions/workspace-indicator/workspacePrefs.js:154
|
||||
msgid "Workspace Names"
|
||||
msgstr "Ονόματα χώρων εργασίας"
|
||||
|
||||
#: extensions/workspace-indicator/prefs.js:255
|
||||
#: extensions/workspace-indicator/workspacePrefs.js:171
|
||||
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 "Εφαρμογή"
|
||||
|
||||
@@ -362,12 +470,6 @@ msgstr "Προσθήκη χώρου εργασίας"
|
||||
#~ "λειτουργικότητα από μόνο του.\n"
|
||||
#~ "Παρ' όλα αυτά είναι δυνατό να προσαρμόσετε το μήνυμα χαιρετισμού."
|
||||
|
||||
#~ msgid "CPU"
|
||||
#~ msgstr "CPU"
|
||||
|
||||
#~ msgid "Memory"
|
||||
#~ msgstr "Μνήμη"
|
||||
|
||||
#~ msgid "GNOME Shell Classic"
|
||||
#~ msgstr "GNOME Shell Classic"
|
||||
|
||||
@@ -418,8 +520,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' (εμφανίζει μια μικρογραφία του "
|
||||
@@ -501,9 +603,6 @@ msgstr "Προσθήκη χώρου εργασίας"
|
||||
#~ msgid "Bookmarks"
|
||||
#~ msgstr "Σελιδοδείκτες"
|
||||
|
||||
#~ msgid "Network"
|
||||
#~ msgstr "Δίκτυο"
|
||||
|
||||
#~ msgid "File System"
|
||||
#~ msgstr "Σύστημα αρχείων"
|
||||
|
||||
|
||||
207
po/en_GB.po
207
po/en_GB.po
@@ -5,22 +5,23 @@
|
||||
# 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: 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"
|
||||
"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"
|
||||
"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.3.1\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
"X-Project-Style: gnome\n"
|
||||
|
||||
#: data/gnome-classic.desktop.in:3
|
||||
@@ -33,28 +34,26 @@ 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:118
|
||||
#: extensions/apps-menu/extension.js:126
|
||||
msgid "Favorites"
|
||||
msgstr "Favourites"
|
||||
|
||||
#: extensions/apps-menu/extension.js:380
|
||||
msgid "Applications"
|
||||
msgstr "Applications"
|
||||
#: extensions/apps-menu/extension.js:400
|
||||
msgid "Apps"
|
||||
msgstr "Apps"
|
||||
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:12
|
||||
msgid "Application and workspace list"
|
||||
msgstr "Application and workspace list"
|
||||
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:7
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:13
|
||||
msgid ""
|
||||
"A list of strings, each containing an application id (desktop file name), "
|
||||
"followed by a colon and the workspace number"
|
||||
@@ -62,34 +61,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:152
|
||||
#: extensions/auto-move-windows/prefs.js:159
|
||||
msgid "Workspace Rules"
|
||||
msgstr "Workspace Rules"
|
||||
|
||||
#: extensions/auto-move-windows/prefs.js:306
|
||||
#: extensions/auto-move-windows/prefs.js:314
|
||||
msgid "Add Rule"
|
||||
msgstr "Add Rule"
|
||||
|
||||
#. TRANSLATORS: %s is the filesystem name
|
||||
#: extensions/drive-menu/extension.js:126
|
||||
#: extensions/places-menu/placeDisplay.js:212
|
||||
#: extensions/drive-menu/extension.js:123
|
||||
#: extensions/places-menu/placeDisplay.js:218
|
||||
#, javascript-format
|
||||
msgid "Ejecting drive “%s” failed:"
|
||||
msgstr "Ejecting drive “%s” failed:"
|
||||
|
||||
#: extensions/drive-menu/extension.js:145
|
||||
#: extensions/drive-menu/extension.js:142
|
||||
msgid "Removable devices"
|
||||
msgstr "Removable devices"
|
||||
|
||||
#: extensions/drive-menu/extension.js:167
|
||||
#: extensions/drive-menu/extension.js:164
|
||||
msgid "Open Files"
|
||||
msgstr "Open Files"
|
||||
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
|
||||
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:6
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
|
||||
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 +98,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:11
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:17
|
||||
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:12
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:18
|
||||
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,47 +112,119 @@ 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:52
|
||||
#: extensions/places-menu/placeDisplay.js:60
|
||||
#, javascript-format
|
||||
msgid "Failed to launch “%s”"
|
||||
msgstr "Failed to launch “%s”"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:67
|
||||
#: extensions/places-menu/placeDisplay.js:75
|
||||
#, javascript-format
|
||||
msgid "Failed to mount volume for “%s”"
|
||||
msgstr "Failed to mount volume for “%s”"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:127
|
||||
#: extensions/places-menu/placeDisplay.js:150
|
||||
#: extensions/places-menu/placeDisplay.js:135
|
||||
#: extensions/places-menu/placeDisplay.js:158
|
||||
msgid "Computer"
|
||||
msgstr "Computer"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:340
|
||||
#: extensions/places-menu/placeDisplay.js:333
|
||||
msgid "Home"
|
||||
msgstr "Home"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:385
|
||||
#: extensions/places-menu/placeDisplay.js:378
|
||||
msgid "Browse Network"
|
||||
msgstr "Browse Network"
|
||||
|
||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7
|
||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:14
|
||||
msgid "Cycle Screenshot Sizes"
|
||||
msgstr "Cycle Screenshot Sizes"
|
||||
|
||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
|
||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:18
|
||||
msgid "Cycle Screenshot Sizes Backward"
|
||||
msgstr "Cycle Screenshot Sizes Backward"
|
||||
|
||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5
|
||||
#: 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
|
||||
msgid "Theme name"
|
||||
msgstr "Theme name"
|
||||
|
||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6
|
||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:12
|
||||
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"
|
||||
|
||||
@@ -161,51 +232,51 @@ msgstr "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
|
||||
msgid "Close"
|
||||
msgstr "Close"
|
||||
|
||||
#: extensions/window-list/extension.js:92
|
||||
#: extensions/window-list/extension.js:99
|
||||
msgid "Unminimize"
|
||||
msgstr "Unminimise"
|
||||
|
||||
#: extensions/window-list/extension.js:92
|
||||
#: extensions/window-list/extension.js:99
|
||||
msgid "Minimize"
|
||||
msgstr "Minimise"
|
||||
|
||||
#: extensions/window-list/extension.js:99
|
||||
#: extensions/window-list/extension.js:106
|
||||
msgid "Unmaximize"
|
||||
msgstr "Unmaximise"
|
||||
|
||||
#: extensions/window-list/extension.js:99
|
||||
#: extensions/window-list/extension.js:106
|
||||
msgid "Maximize"
|
||||
msgstr "Maximise"
|
||||
|
||||
#: extensions/window-list/extension.js:483
|
||||
#: extensions/window-list/extension.js:471
|
||||
msgid "Minimize all"
|
||||
msgstr "Minimise all"
|
||||
|
||||
#: extensions/window-list/extension.js:489
|
||||
#: extensions/window-list/extension.js:477
|
||||
msgid "Unminimize all"
|
||||
msgstr "Unminimise all"
|
||||
|
||||
#: extensions/window-list/extension.js:495
|
||||
#: extensions/window-list/extension.js:483
|
||||
msgid "Maximize all"
|
||||
msgstr "Maximise all"
|
||||
|
||||
#: extensions/window-list/extension.js:503
|
||||
#: extensions/window-list/extension.js:491
|
||||
msgid "Unmaximize all"
|
||||
msgstr "Unmaximise all"
|
||||
|
||||
#: extensions/window-list/extension.js:511
|
||||
#: extensions/window-list/extension.js:499
|
||||
msgid "Close all"
|
||||
msgstr "Close all"
|
||||
|
||||
#: extensions/window-list/extension.js:795
|
||||
#: extensions/window-list/extension.js:778
|
||||
msgid "Window List"
|
||||
msgstr "Window List"
|
||||
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:18
|
||||
msgid "When to group windows"
|
||||
msgstr "When to group windows"
|
||||
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:19
|
||||
msgid ""
|
||||
"Decides when to group windows from the same application on the window list. "
|
||||
"Possible values are “never”, “auto” and “always”."
|
||||
@@ -213,20 +284,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:20
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26
|
||||
#: 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:21
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
|
||||
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:27
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:33
|
||||
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:28
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:34
|
||||
msgid ""
|
||||
"Whether to show the window list on all connected monitors or only on the "
|
||||
"primary one."
|
||||
@@ -234,6 +305,10 @@ 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"
|
||||
@@ -254,24 +329,38 @@ msgstr "Always group windows"
|
||||
msgid "Show on all monitors"
|
||||
msgstr "Show on all monitors"
|
||||
|
||||
#: extensions/window-list/workspaceIndicator.js:261
|
||||
#: extensions/workspace-indicator/extension.js:266
|
||||
msgid "Workspace Indicator"
|
||||
msgstr "Workspace Indicator"
|
||||
#: extensions/window-list/prefs.js:92
|
||||
msgid "Show workspace previews"
|
||||
msgstr "Show workspace previews"
|
||||
|
||||
#: extensions/workspace-indicator/prefs.js:62
|
||||
#: extensions/workspace-indicator/prefs.js:30
|
||||
msgid "Show Previews In Top Bar"
|
||||
msgstr "Show Previews In Top Bar"
|
||||
|
||||
#: extensions/workspace-indicator/prefs.js:88
|
||||
#, javascript-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Workspace %d"
|
||||
|
||||
#: extensions/workspace-indicator/prefs.js:129
|
||||
#: extensions/workspace-indicator/prefs.js:155
|
||||
msgid "Workspace Names"
|
||||
msgstr "Workspace Names"
|
||||
|
||||
#: extensions/workspace-indicator/prefs.js:255
|
||||
#: extensions/workspace-indicator/prefs.js:281
|
||||
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"
|
||||
|
||||
@@ -361,12 +450,6 @@ msgstr "Add Workspace"
|
||||
#~ 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."
|
||||
|
||||
|
||||
103
po/eo.po
103
po/eo.po
@@ -3,39 +3,48 @@
|
||||
# This file is distributed under the same license as the gnome-shell-extensions package.
|
||||
# Ryan LORTIE <desrt@desrt.ca>, 2013.
|
||||
# Daniel PUENTES <blatberk@openmailbox.org>, 2015.
|
||||
# Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>, 2011-2019.
|
||||
# Carmen Bianca BAKKER <carmen@carmenbianca.eu>, 2021.
|
||||
# Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>, 2011-2023.
|
||||
#
|
||||
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: 2021-03-27 20:14+0000\n"
|
||||
"PO-Revision-Date: 2021-03-29 17:24+0200\n"
|
||||
"Last-Translator: Carmen Bianca BAKKER <carmen@carmenbianca.eu>\n"
|
||||
"POT-Creation-Date: 2023-08-05 15:58+0000\n"
|
||||
"PO-Revision-Date: 2023-09-27 22:47+0200\n"
|
||||
"Last-Translator: Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>\n"
|
||||
"Language-Team: Esperanto <gnome-eo-list@gnome.org>\n"
|
||||
"Language: eo\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 3.38.0\n"
|
||||
"X-Generator: Gtranslator 42.0\n"
|
||||
"X-Project-Style: gnome\n"
|
||||
|
||||
#: data/gnome-classic.desktop.in:3
|
||||
msgid "GNOME Classic"
|
||||
msgstr "GNOME-klasika"
|
||||
|
||||
#: data/gnome-classic.desktop.in:4
|
||||
#: 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 "Ĉi tiu seanco ensalutas vin GNOME-klasiken"
|
||||
|
||||
#: extensions/apps-menu/extension.js:113
|
||||
#: data/gnome-classic-wayland.desktop.in:3
|
||||
msgid "GNOME Classic on Wayland"
|
||||
msgstr "GNOME-klasika je Vajlando"
|
||||
|
||||
#: data/gnome-classic-xorg.desktop.in:3
|
||||
msgid "GNOME Classic on Xorg"
|
||||
msgstr "GNOME-klasika je Xorg"
|
||||
|
||||
#: extensions/apps-menu/extension.js:121
|
||||
msgid "Favorites"
|
||||
msgstr "Plej ŝatataj"
|
||||
|
||||
#: extensions/apps-menu/extension.js:367
|
||||
#: extensions/apps-menu/extension.js:378
|
||||
msgid "Applications"
|
||||
msgstr "Aplikaĵoj"
|
||||
|
||||
@@ -51,26 +60,26 @@ msgstr ""
|
||||
"Listo de ĉenoj, ĉiu enhavas aplikaĵan identigilon ('desktop' dosiernomo), "
|
||||
"sevkita per dupunkto kaj la laborspaca numero"
|
||||
|
||||
#: extensions/auto-move-windows/prefs.js:35
|
||||
#: extensions/auto-move-windows/prefs.js:155
|
||||
msgid "Workspace Rules"
|
||||
msgstr "Laborspacaj reguloj"
|
||||
|
||||
#: extensions/auto-move-windows/prefs.js:237
|
||||
#: extensions/auto-move-windows/prefs.js:309
|
||||
msgid "Add Rule"
|
||||
msgstr "Aldoni regulon"
|
||||
|
||||
#. TRANSLATORS: %s is the filesystem name
|
||||
#: extensions/drive-menu/extension.js:112
|
||||
#: extensions/places-menu/placeDisplay.js:233
|
||||
#: extensions/drive-menu/extension.js:122
|
||||
#: extensions/places-menu/placeDisplay.js:213
|
||||
#, javascript-format
|
||||
msgid "Ejecting drive “%s” failed:"
|
||||
msgstr "Elĵeto de volumo “%s” malsukcesis:"
|
||||
|
||||
#: extensions/drive-menu/extension.js:128
|
||||
#: extensions/drive-menu/extension.js:141
|
||||
msgid "Removable devices"
|
||||
msgstr "Demeteblaj aparatoj"
|
||||
|
||||
#: extensions/drive-menu/extension.js:152
|
||||
#: extensions/drive-menu/extension.js:163
|
||||
msgid "Open Files"
|
||||
msgstr "Malfermi dosierojn"
|
||||
|
||||
@@ -102,31 +111,31 @@ msgstr ""
|
||||
"estas meti ĝin malsupre). Si vi ŝanĝas ĉi agordon tiam vi devas restartigi "
|
||||
"la ŝelon."
|
||||
|
||||
#: extensions/places-menu/extension.js:89
|
||||
#: extensions/places-menu/extension.js:92
|
||||
#: extensions/places-menu/extension.js:85
|
||||
#: extensions/places-menu/extension.js:88
|
||||
msgid "Places"
|
||||
msgstr "Lokoj"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:46
|
||||
#: extensions/places-menu/placeDisplay.js:53
|
||||
#, javascript-format
|
||||
msgid "Failed to launch “%s”"
|
||||
msgstr "Malsukcesis lanĉi “%s”"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:61
|
||||
#: extensions/places-menu/placeDisplay.js:68
|
||||
#, javascript-format
|
||||
msgid "Failed to mount volume for “%s”"
|
||||
msgstr "Ne eblis munti datumportilon por “%s”"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:148
|
||||
#: extensions/places-menu/placeDisplay.js:171
|
||||
#: extensions/places-menu/placeDisplay.js:128
|
||||
#: extensions/places-menu/placeDisplay.js:151
|
||||
msgid "Computer"
|
||||
msgstr "Komputilo"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:359
|
||||
#: extensions/places-menu/placeDisplay.js:328
|
||||
msgid "Home"
|
||||
msgstr "Domo"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:404
|
||||
#: extensions/places-menu/placeDisplay.js:373
|
||||
msgid "Browse Network"
|
||||
msgstr "Foliumi reton"
|
||||
|
||||
@@ -146,47 +155,47 @@ msgstr "Etosnomo"
|
||||
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
|
||||
msgstr "La nomo de la etoso, malfermigi de ~/.themes/name/gnome-shell"
|
||||
|
||||
#: extensions/window-list/extension.js:98
|
||||
#: extensions/window-list/extension.js:71
|
||||
msgid "Close"
|
||||
msgstr "Fermi"
|
||||
|
||||
#: extensions/window-list/extension.js:118
|
||||
#: extensions/window-list/extension.js:98
|
||||
msgid "Unminimize"
|
||||
msgstr "Malminimumigi"
|
||||
|
||||
#: extensions/window-list/extension.js:118
|
||||
#: extensions/window-list/extension.js:98
|
||||
msgid "Minimize"
|
||||
msgstr "Minimumigi"
|
||||
|
||||
#: extensions/window-list/extension.js:125
|
||||
#: extensions/window-list/extension.js:105
|
||||
msgid "Unmaximize"
|
||||
msgstr "Malmaksimumigi"
|
||||
|
||||
#: extensions/window-list/extension.js:125
|
||||
#: extensions/window-list/extension.js:105
|
||||
msgid "Maximize"
|
||||
msgstr "Maksimumigi"
|
||||
|
||||
#: extensions/window-list/extension.js:432
|
||||
#: extensions/window-list/extension.js:468
|
||||
msgid "Minimize all"
|
||||
msgstr "Minimumigi ĉiujn"
|
||||
|
||||
#: extensions/window-list/extension.js:438
|
||||
#: extensions/window-list/extension.js:474
|
||||
msgid "Unminimize all"
|
||||
msgstr "Malminimumigi ĉiujn"
|
||||
|
||||
#: extensions/window-list/extension.js:444
|
||||
#: extensions/window-list/extension.js:480
|
||||
msgid "Maximize all"
|
||||
msgstr "Maksimumigi ĉiujn"
|
||||
|
||||
#: extensions/window-list/extension.js:452
|
||||
#: extensions/window-list/extension.js:488
|
||||
msgid "Unmaximize all"
|
||||
msgstr "Malmaksimumigi ĉiujn"
|
||||
|
||||
#: extensions/window-list/extension.js:460
|
||||
#: extensions/window-list/extension.js:496
|
||||
msgid "Close all"
|
||||
msgstr "Fermi ĉiujn"
|
||||
|
||||
#: extensions/window-list/extension.js:737
|
||||
#: extensions/window-list/extension.js:776
|
||||
msgid "Window List"
|
||||
msgstr "Fenestra listo"
|
||||
|
||||
@@ -203,7 +212,7 @@ msgstr ""
|
||||
"Validaj valoroj estas “neniam”, “aŭtomate” kaj ĉiam”."
|
||||
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
|
||||
#: extensions/window-list/prefs.js:100
|
||||
#: extensions/window-list/prefs.js:76
|
||||
msgid "Show windows from all workspaces"
|
||||
msgstr "Montri la fenestrojn de ĉiuj laborspacoj"
|
||||
|
||||
@@ -222,41 +231,41 @@ msgid ""
|
||||
msgstr ""
|
||||
"Ĉu montri la fenestroliston en ĉiuj konektitaj ekranoj aŭ nur en la ĉefa."
|
||||
|
||||
#: extensions/window-list/prefs.js:29
|
||||
#: extensions/window-list/prefs.js:32
|
||||
msgid "Window Grouping"
|
||||
msgstr "Fenestra grupigo"
|
||||
|
||||
#: extensions/window-list/prefs.js:58
|
||||
#: extensions/window-list/prefs.js:37
|
||||
msgid "Never group windows"
|
||||
msgstr "Neniam grupigi fenestrojn"
|
||||
|
||||
#: extensions/window-list/prefs.js:59
|
||||
#: extensions/window-list/prefs.js:38
|
||||
msgid "Group windows when space is limited"
|
||||
msgstr "Grupigi fenestrojn kiam spaco limitas"
|
||||
|
||||
#: extensions/window-list/prefs.js:60
|
||||
#: extensions/window-list/prefs.js:39
|
||||
msgid "Always group windows"
|
||||
msgstr "Ĉiam grupigi fenestrojn"
|
||||
|
||||
#: extensions/window-list/prefs.js:94
|
||||
#: extensions/window-list/prefs.js:63
|
||||
msgid "Show on all monitors"
|
||||
msgstr "Montri en ĉiuj ekranoj"
|
||||
|
||||
#: extensions/window-list/workspaceIndicator.js:249
|
||||
#: extensions/workspace-indicator/extension.js:255
|
||||
#: extensions/window-list/workspaceIndicator.js:248
|
||||
#: extensions/workspace-indicator/extension.js:252
|
||||
msgid "Workspace Indicator"
|
||||
msgstr "Laborspaco Indikilo"
|
||||
|
||||
#: extensions/workspace-indicator/prefs.js:34
|
||||
msgid "Workspace Names"
|
||||
msgstr "Laborspacaj nomoj"
|
||||
|
||||
#: extensions/workspace-indicator/prefs.js:67
|
||||
#: extensions/workspace-indicator/prefs.js:65
|
||||
#, javascript-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Laborspaco %d"
|
||||
|
||||
#: extensions/workspace-indicator/prefs.js:208
|
||||
#: extensions/workspace-indicator/prefs.js:132
|
||||
msgid "Workspace Names"
|
||||
msgstr "Laborspacaj nomoj"
|
||||
|
||||
#: extensions/workspace-indicator/prefs.js:258
|
||||
msgid "Add Workspace"
|
||||
msgstr "Aldoni laborspacon"
|
||||
|
||||
|
||||
225
po/es.po
225
po/es.po
@@ -4,23 +4,24 @@
|
||||
# Jorge González <jorgegonz@svn.gnome.org>, 2011.
|
||||
# Nicolás Satragno <nsatragno@gmail.com>, 2011.
|
||||
#
|
||||
# Daniel Mustieles <daniel.mustieles@gmail.com>, 2011-2021.
|
||||
# Daniel Mustieles <daniel.mustieles@gmail.com>, 2011-2024.
|
||||
# Daniel Mustieles García <daniel.mustieles@gmail.com>, 2024.
|
||||
#
|
||||
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: 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"
|
||||
"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"
|
||||
"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 41.0\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||
"X-Generator: Gtranslator 46.1\n"
|
||||
|
||||
#: data/gnome-classic.desktop.in:3
|
||||
msgid "GNOME Classic"
|
||||
@@ -32,28 +33,26 @@ 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:112
|
||||
#: extensions/apps-menu/extension.js:126
|
||||
msgid "Favorites"
|
||||
msgstr "Favoritos"
|
||||
|
||||
#: extensions/apps-menu/extension.js:366
|
||||
msgid "Applications"
|
||||
#: extensions/apps-menu/extension.js:400
|
||||
msgid "Apps"
|
||||
msgstr "Aplicaciones"
|
||||
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:12
|
||||
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:7
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:13
|
||||
msgid ""
|
||||
"A list of strings, each containing an application id (desktop file name), "
|
||||
"followed by a colon and the workspace number"
|
||||
@@ -61,34 +60,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:34
|
||||
#: extensions/auto-move-windows/prefs.js:159
|
||||
msgid "Workspace Rules"
|
||||
msgstr "Reglas de las áreas de trabajo"
|
||||
|
||||
#: extensions/auto-move-windows/prefs.js:236
|
||||
#: extensions/auto-move-windows/prefs.js:314
|
||||
msgid "Add Rule"
|
||||
msgstr "Añadir regla"
|
||||
|
||||
#. TRANSLATORS: %s is the filesystem name
|
||||
#: extensions/drive-menu/extension.js:133
|
||||
#: extensions/places-menu/placeDisplay.js:233
|
||||
#: extensions/drive-menu/extension.js:123
|
||||
#: extensions/places-menu/placeDisplay.js:218
|
||||
#, javascript-format
|
||||
msgid "Ejecting drive “%s” failed:"
|
||||
msgstr "Falló al expulsar el dispositivo «%s»:"
|
||||
|
||||
#: extensions/drive-menu/extension.js:149
|
||||
#: extensions/drive-menu/extension.js:142
|
||||
msgid "Removable devices"
|
||||
msgstr "Dispositivos extraíbles"
|
||||
|
||||
#: extensions/drive-menu/extension.js:171
|
||||
#: extensions/drive-menu/extension.js:164
|
||||
msgid "Open Files"
|
||||
msgstr "Abrir archivos"
|
||||
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
|
||||
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:6
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
|
||||
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 +97,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:11
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:17
|
||||
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:12
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:18
|
||||
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,47 +112,119 @@ 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:46
|
||||
#: extensions/places-menu/placeDisplay.js:60
|
||||
#, javascript-format
|
||||
msgid "Failed to launch “%s”"
|
||||
msgstr "Falló al lanzar «%s»"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:61
|
||||
#: extensions/places-menu/placeDisplay.js:75
|
||||
#, javascript-format
|
||||
msgid "Failed to mount volume for “%s”"
|
||||
msgstr "Falló al montar el volumen para «%s»"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:148
|
||||
#: extensions/places-menu/placeDisplay.js:171
|
||||
#: extensions/places-menu/placeDisplay.js:135
|
||||
#: extensions/places-menu/placeDisplay.js:158
|
||||
msgid "Computer"
|
||||
msgstr "Equipo"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:359
|
||||
#: extensions/places-menu/placeDisplay.js:333
|
||||
msgid "Home"
|
||||
msgstr "Carpeta personal"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:404
|
||||
#: extensions/places-menu/placeDisplay.js:378
|
||||
msgid "Browse Network"
|
||||
msgstr "Examinar la red"
|
||||
|
||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7
|
||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:14
|
||||
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:11
|
||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:18
|
||||
msgid "Cycle Screenshot Sizes Backward"
|
||||
msgstr "Tamaños de capturas de pantalla cíclicos"
|
||||
|
||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5
|
||||
#: 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
|
||||
msgid "Theme name"
|
||||
msgstr "Nombre del tema"
|
||||
|
||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6
|
||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:12
|
||||
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"
|
||||
|
||||
@@ -161,51 +232,51 @@ msgstr "El nombre del tema, que se carga desde ~/.themes/nombre/gnome-shell"
|
||||
msgid "Close"
|
||||
msgstr "Cerrar"
|
||||
|
||||
#: extensions/window-list/extension.js:92
|
||||
#: extensions/window-list/extension.js:99
|
||||
msgid "Unminimize"
|
||||
msgstr "Desminimizar"
|
||||
|
||||
#: extensions/window-list/extension.js:92
|
||||
#: extensions/window-list/extension.js:99
|
||||
msgid "Minimize"
|
||||
msgstr "Minimizar"
|
||||
|
||||
#: extensions/window-list/extension.js:99
|
||||
#: extensions/window-list/extension.js:106
|
||||
msgid "Unmaximize"
|
||||
msgstr "Desmaximizar"
|
||||
|
||||
#: extensions/window-list/extension.js:99
|
||||
#: extensions/window-list/extension.js:106
|
||||
msgid "Maximize"
|
||||
msgstr "Maximizar"
|
||||
|
||||
#: extensions/window-list/extension.js:434
|
||||
#: extensions/window-list/extension.js:471
|
||||
msgid "Minimize all"
|
||||
msgstr "Minimizar todo"
|
||||
|
||||
#: extensions/window-list/extension.js:440
|
||||
#: extensions/window-list/extension.js:477
|
||||
msgid "Unminimize all"
|
||||
msgstr "Desminimizar todo"
|
||||
|
||||
#: extensions/window-list/extension.js:446
|
||||
#: extensions/window-list/extension.js:483
|
||||
msgid "Maximize all"
|
||||
msgstr "Maximizar todo"
|
||||
|
||||
#: extensions/window-list/extension.js:454
|
||||
#: extensions/window-list/extension.js:491
|
||||
msgid "Unmaximize all"
|
||||
msgstr "Desmaximizar todo"
|
||||
|
||||
#: extensions/window-list/extension.js:462
|
||||
#: extensions/window-list/extension.js:499
|
||||
msgid "Close all"
|
||||
msgstr "Cerrar todo"
|
||||
|
||||
#: extensions/window-list/extension.js:741
|
||||
#: extensions/window-list/extension.js:778
|
||||
msgid "Window List"
|
||||
msgstr "Lista de ventanas"
|
||||
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:18
|
||||
msgid "When to group windows"
|
||||
msgstr "Cuándo agrupar las ventanas"
|
||||
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:19
|
||||
msgid ""
|
||||
"Decides when to group windows from the same application on the window list. "
|
||||
"Possible values are “never”, “auto” and “always”."
|
||||
@@ -213,22 +284,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:20
|
||||
#: extensions/window-list/prefs.js:86
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26
|
||||
#: extensions/window-list/prefs.js:79
|
||||
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:21
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
|
||||
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:27
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:33
|
||||
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:28
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:34
|
||||
msgid ""
|
||||
"Whether to show the window list on all connected monitors or only on the "
|
||||
"primary one."
|
||||
@@ -236,44 +307,62 @@ msgstr ""
|
||||
"Indica si se debe mostrar la lista de ventanas en todas las pantallas "
|
||||
"conectadas o sólo en la primaria."
|
||||
|
||||
#: extensions/window-list/prefs.js:39
|
||||
#: 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
|
||||
msgid "Window Grouping"
|
||||
msgstr "Agrupación de ventanas"
|
||||
|
||||
#: extensions/window-list/prefs.js:63
|
||||
#: extensions/window-list/prefs.js:40
|
||||
msgid "Never group windows"
|
||||
msgstr "Nunca agrupar las ventanas"
|
||||
|
||||
#: extensions/window-list/prefs.js:64
|
||||
#: extensions/window-list/prefs.js:41
|
||||
msgid "Group windows when space is limited"
|
||||
msgstr "Agrupar las ventanas cuando el espacio esté limitado"
|
||||
|
||||
#: extensions/window-list/prefs.js:65
|
||||
#: extensions/window-list/prefs.js:42
|
||||
msgid "Always group windows"
|
||||
msgstr "Siempre agrupar las ventanas"
|
||||
|
||||
#: extensions/window-list/prefs.js:81
|
||||
#: extensions/window-list/prefs.js:66
|
||||
msgid "Show on all monitors"
|
||||
msgstr "Mostrar en todas las pantallas"
|
||||
|
||||
#: extensions/window-list/workspaceIndicator.js:249
|
||||
#: extensions/workspace-indicator/extension.js:254
|
||||
msgid "Workspace Indicator"
|
||||
msgstr "Indicador de área de trabajo"
|
||||
#: extensions/window-list/prefs.js:92
|
||||
msgid "Show workspace previews"
|
||||
msgstr "Mostrar vistas previas de las áreas de trabajo"
|
||||
|
||||
#: extensions/workspace-indicator/prefs.js:33
|
||||
msgid "Workspace Names"
|
||||
msgstr "Nombres de los áreas 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:66
|
||||
#: extensions/workspace-indicator/prefs.js:88
|
||||
#, javascript-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Área de trabajo %d"
|
||||
|
||||
#: extensions/workspace-indicator/prefs.js:207
|
||||
#: extensions/workspace-indicator/prefs.js:155
|
||||
msgid "Workspace Names"
|
||||
msgstr "Nombres de los áreas de trabajo"
|
||||
|
||||
#: extensions/workspace-indicator/prefs.js:281
|
||||
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"
|
||||
|
||||
@@ -361,12 +450,6 @@ msgstr "Añadir á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"
|
||||
|
||||
|
||||
350
po/eu.po
350
po/eu.po
@@ -5,256 +5,415 @@
|
||||
# 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.
|
||||
# Asier Sarasua Garmendia <asiersarasua@ni.eus>, 2019, 2020, 2021, 2024.
|
||||
# Ibai Oihanguren Sala <ibaios@disroot.org>, 2026.
|
||||
#
|
||||
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: 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"
|
||||
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"
|
||||
"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:3
|
||||
#: data/gnome-classic.desktop.in:2
|
||||
msgid "GNOME Classic"
|
||||
msgstr "GNOME Klasikoa"
|
||||
|
||||
#: data/gnome-classic.desktop.in:4 data/gnome-classic-wayland.desktop.in:4
|
||||
#: data/gnome-classic-xorg.desktop.in:4
|
||||
#: data/gnome-classic.desktop.in:3 data/gnome-classic-wayland.desktop.in:3
|
||||
#: data/gnome-classic-xorg.desktop.in:3
|
||||
msgid "This session logs you into GNOME Classic"
|
||||
msgstr "Saio honek GNOME Klasikoa hasten du"
|
||||
|
||||
#: data/gnome-classic-wayland.desktop.in:3
|
||||
#: data/gnome-classic-wayland.desktop.in:2
|
||||
msgid "GNOME Classic on Wayland"
|
||||
msgstr "GNOME klasikoa Wayland gainean"
|
||||
|
||||
#: data/gnome-classic-xorg.desktop.in:3
|
||||
#: data/gnome-classic-xorg.desktop.in:2
|
||||
msgid "GNOME Classic on Xorg"
|
||||
msgstr "GNOME klasikoa Xorg gainean"
|
||||
|
||||
#: extensions/apps-menu/extension.js:112
|
||||
#: extensions/apps-menu/extension.js:118
|
||||
msgid "Favorites"
|
||||
msgstr "Gogokoak"
|
||||
|
||||
#: extensions/apps-menu/extension.js:366
|
||||
msgid "Applications"
|
||||
#: extensions/apps-menu/extension.js:392
|
||||
msgid "Apps"
|
||||
msgstr "Aplikazioak"
|
||||
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:12
|
||||
msgid "Application and workspace list"
|
||||
msgstr "Aplikazioen eta laneko areen zerrenda"
|
||||
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:7
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:13
|
||||
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:34
|
||||
#: extensions/auto-move-windows/prefs.js:157
|
||||
msgid "Workspace Rules"
|
||||
msgstr "Laneko areen arauak"
|
||||
|
||||
#: extensions/auto-move-windows/prefs.js:236
|
||||
#: extensions/auto-move-windows/prefs.js:312
|
||||
msgid "Add Rule"
|
||||
msgstr "Gehitu araua"
|
||||
|
||||
#. TRANSLATORS: %s is the filesystem name
|
||||
#: extensions/drive-menu/extension.js:133
|
||||
#: extensions/places-menu/placeDisplay.js:233
|
||||
#: extensions/drive-menu/extension.js:123
|
||||
#: extensions/places-menu/placeDisplay.js:186
|
||||
#, javascript-format
|
||||
msgid "Ejecting drive “%s” failed:"
|
||||
msgstr "Huts egin du “%s“ unitatea egoztean:"
|
||||
|
||||
#: extensions/drive-menu/extension.js:149
|
||||
#: extensions/drive-menu/extension.js:142
|
||||
msgid "Removable devices"
|
||||
msgstr "Gailu aldagarriak"
|
||||
|
||||
#: extensions/drive-menu/extension.js:171
|
||||
#: extensions/drive-menu/extension.js:164
|
||||
msgid "Open Files"
|
||||
msgstr "Ireki fitxategiak"
|
||||
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
|
||||
msgid "Use more screen for windows"
|
||||
msgstr "Erabili pantaila gehiago leihoentzako"
|
||||
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:6
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
|
||||
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:11
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:17
|
||||
msgid "Place window captions on top"
|
||||
msgstr "Jarri leihoaren epigrafea gainean"
|
||||
|
||||
#: 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:18
|
||||
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:88
|
||||
#: extensions/places-menu/extension.js:91
|
||||
#: extensions/places-menu/extension.js:75
|
||||
#: extensions/places-menu/extension.js:78
|
||||
msgid "Places"
|
||||
msgstr "Lekuak"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:46
|
||||
#: extensions/places-menu/placeDisplay.js:52
|
||||
#, javascript-format
|
||||
msgid "Failed to launch “%s”"
|
||||
msgstr "Huts egin du '%s' abiaraztean"
|
||||
msgstr "Huts egin du '%s' abiarazteak"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:61
|
||||
#: extensions/places-menu/placeDisplay.js:67
|
||||
#, javascript-format
|
||||
msgid "Failed to mount volume for “%s”"
|
||||
msgstr "Huts egin du “%s“(r)en bolumena muntatzean"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:148
|
||||
#: extensions/places-menu/placeDisplay.js:171
|
||||
msgid "Computer"
|
||||
msgstr "Ordenagailua"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:359
|
||||
#: extensions/places-menu/placeDisplay.js:315
|
||||
msgid "Home"
|
||||
msgstr "Karpeta nagusia"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:404
|
||||
msgid "Browse Network"
|
||||
msgstr "Arakatu sarea"
|
||||
#: extensions/places-menu/placeDisplay.js:321
|
||||
msgid "Recent"
|
||||
msgstr "Azken aldikoa"
|
||||
|
||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7
|
||||
#: 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
|
||||
msgid "Cycle Screenshot Sizes"
|
||||
msgstr "Pantaila-argazkien tamainak begiztan"
|
||||
|
||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
|
||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:18
|
||||
msgid "Cycle Screenshot Sizes Backward"
|
||||
msgstr "Pantaila-argazkien tamainak atzerantz begiztan"
|
||||
|
||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5
|
||||
#: 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
|
||||
msgid "Theme name"
|
||||
msgstr "Gaiaren izena"
|
||||
|
||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6
|
||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:12
|
||||
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:72
|
||||
#: extensions/window-list/extension.js:98
|
||||
msgid "Close"
|
||||
msgstr "Itxi"
|
||||
|
||||
#: extensions/window-list/extension.js:92
|
||||
#: extensions/window-list/extension.js:125
|
||||
msgid "Unminimize"
|
||||
msgstr "Leheneratu"
|
||||
|
||||
#: extensions/window-list/extension.js:92
|
||||
#: extensions/window-list/extension.js:125
|
||||
msgid "Minimize"
|
||||
msgstr "Minimizatu"
|
||||
|
||||
#: extensions/window-list/extension.js:99
|
||||
#: extensions/window-list/extension.js:130
|
||||
msgid "Unmaximize"
|
||||
msgstr "Desmaximizatu"
|
||||
|
||||
#: extensions/window-list/extension.js:99
|
||||
#: extensions/window-list/extension.js:130
|
||||
msgid "Maximize"
|
||||
msgstr "Maximizatu"
|
||||
|
||||
#: extensions/window-list/extension.js:434
|
||||
#: extensions/window-list/extension.js:720
|
||||
msgid "Minimize all"
|
||||
msgstr "Minimizatu denak"
|
||||
|
||||
#: extensions/window-list/extension.js:440
|
||||
#: extensions/window-list/extension.js:726
|
||||
msgid "Unminimize all"
|
||||
msgstr "Leheneratu denak"
|
||||
|
||||
#: extensions/window-list/extension.js:446
|
||||
#: extensions/window-list/extension.js:732
|
||||
msgid "Maximize all"
|
||||
msgstr "Maximizatu denak"
|
||||
|
||||
#: extensions/window-list/extension.js:454
|
||||
#: extensions/window-list/extension.js:740
|
||||
msgid "Unmaximize all"
|
||||
msgstr "Desmaximizatu denak"
|
||||
|
||||
#: extensions/window-list/extension.js:462
|
||||
#: extensions/window-list/extension.js:748
|
||||
msgid "Close all"
|
||||
msgstr "Itxi denak"
|
||||
|
||||
#: extensions/window-list/extension.js:741
|
||||
#: extensions/window-list/extension.js:1000 extensions/window-list/prefs.js:23
|
||||
msgid "Window List"
|
||||
msgstr "Leiho-zerrenda"
|
||||
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:18
|
||||
msgid "When to group windows"
|
||||
msgstr "Noiz elkartu leihoak"
|
||||
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:19
|
||||
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:20
|
||||
#: extensions/window-list/prefs.js:86
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26
|
||||
#: extensions/window-list/prefs.js:74
|
||||
msgid "Show windows from all workspaces"
|
||||
msgstr "Erakutsi laneko area guztietako leihoak"
|
||||
|
||||
#: 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."
|
||||
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
|
||||
msgid "Whether to show windows from all workspaces or only the current one."
|
||||
msgstr ""
|
||||
"Laneko area guztietako leihoak edo uneko areakoak soilik erakutsiko diren."
|
||||
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:33
|
||||
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:28
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:34
|
||||
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/prefs.js:39
|
||||
#: 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
|
||||
msgid "Window Grouping"
|
||||
msgstr "Leiho-elkartzea"
|
||||
msgstr "Leihoak elkartzea"
|
||||
|
||||
#: extensions/window-list/prefs.js:63
|
||||
#: extensions/window-list/prefs.js:46
|
||||
msgid "Never group windows"
|
||||
msgstr "Leihoak inoiz ez elkartu"
|
||||
msgstr "Ez elkartu leihoak inoiz"
|
||||
|
||||
#: extensions/window-list/prefs.js:64
|
||||
#: extensions/window-list/prefs.js:47
|
||||
msgid "Group windows when space is limited"
|
||||
msgstr "Elkartu leihoak lekua mugatuta dagoenean"
|
||||
|
||||
#: extensions/window-list/prefs.js:65
|
||||
#: extensions/window-list/prefs.js:48
|
||||
msgid "Always group windows"
|
||||
msgstr "Elkartu beti leihoak"
|
||||
|
||||
#: extensions/window-list/prefs.js:81
|
||||
#: extensions/window-list/prefs.js:68
|
||||
msgid "Show on all monitors"
|
||||
msgstr "Erakutsi pantaila guztietan"
|
||||
|
||||
#: extensions/window-list/workspaceIndicator.js:249
|
||||
#: extensions/workspace-indicator/extension.js:254
|
||||
msgid "Workspace Indicator"
|
||||
msgstr "Lan arearen adierazlea"
|
||||
#: 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/prefs.js:33
|
||||
msgid "Workspace Names"
|
||||
msgstr "Laneko areen izenak"
|
||||
|
||||
#: extensions/workspace-indicator/prefs.js:66
|
||||
#: extensions/workspace-indicator/workspaceIndicator.js:404
|
||||
#, javascript-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "%d. laneko area"
|
||||
msgid "Press %s to edit"
|
||||
msgstr "Sakatu %s editatzeko"
|
||||
|
||||
#: extensions/workspace-indicator/prefs.js:207
|
||||
msgid "Add Workspace"
|
||||
msgstr "Gehitu laneko area"
|
||||
#: extensions/workspace-indicator/workspaceIndicator.js:518
|
||||
msgid "Settings"
|
||||
msgstr "Ezarpenak"
|
||||
|
||||
#: extensions/workspace-indicator/workspaceIndicator.js:598
|
||||
msgid "Workspace Indicator"
|
||||
msgstr "Laneko arearen adierazlea"
|
||||
|
||||
#: extensions/workspace-indicator/workspacePrefs.js:20
|
||||
msgid "Indicator"
|
||||
msgstr "Adierazlea"
|
||||
|
||||
#: extensions/workspace-indicator/workspacePrefs.js:25
|
||||
msgid "Previews"
|
||||
msgstr "Aurrebistak"
|
||||
|
||||
#: 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"
|
||||
|
||||
#~ msgid "Application"
|
||||
#~ msgstr "Aplikazioa"
|
||||
@@ -339,12 +498,6 @@ msgstr "Gehitu laneko area"
|
||||
#~ "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"
|
||||
|
||||
@@ -354,9 +507,6 @@ msgstr "Gehitu laneko area"
|
||||
#~ msgid "Online Accounts"
|
||||
#~ msgstr "Nire kontua"
|
||||
|
||||
#~ msgid "System Settings"
|
||||
#~ msgstr "Sistemaren konfigurazioa"
|
||||
|
||||
#~ msgid "Lock Screen"
|
||||
#~ msgstr "Blokeatu pantaila"
|
||||
|
||||
|
||||
300
po/fa.po
300
po/fa.po
@@ -2,24 +2,25 @@
|
||||
# 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-2020.
|
||||
# Danial Behzadi <dani.behzi@ubuntu.com>, 2018-2025.
|
||||
#
|
||||
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: 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"
|
||||
"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"
|
||||
"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"
|
||||
"X-Poedit-SourceCharset: utf-8\n"
|
||||
"X-Generator: Poedit 2.4.2\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"
|
||||
|
||||
#: data/gnome-classic.desktop.in:3
|
||||
msgid "GNOME Classic"
|
||||
@@ -28,7 +29,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"
|
||||
@@ -38,19 +39,19 @@ msgstr "گنوم کلاسیک روی ویلند"
|
||||
msgid "GNOME Classic on Xorg"
|
||||
msgstr "گنوم کلاسیک روی زورگ"
|
||||
|
||||
#: extensions/apps-menu/extension.js:112
|
||||
#: extensions/apps-menu/extension.js:118
|
||||
msgid "Favorites"
|
||||
msgstr "برگزیدهها"
|
||||
|
||||
#: extensions/apps-menu/extension.js:366
|
||||
msgid "Applications"
|
||||
msgstr "برنامهها"
|
||||
#: extensions/apps-menu/extension.js:392
|
||||
msgid "Apps"
|
||||
msgstr "کارهها"
|
||||
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:12
|
||||
msgid "Application and workspace list"
|
||||
msgstr "فهرست برنامه و فضایکاری"
|
||||
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:7
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:13
|
||||
msgid ""
|
||||
"A list of strings, each containing an application id (desktop file name), "
|
||||
"followed by a colon and the workspace number"
|
||||
@@ -58,34 +59,34 @@ msgstr ""
|
||||
"فهرستی از رشتهها، هرکدام حاوی شناسهی یک برنامه (نام پرونده رومیزی)، در ادامهی یک "
|
||||
"ویرگول و شمارهی فضای کاری"
|
||||
|
||||
#: extensions/auto-move-windows/prefs.js:34
|
||||
#: extensions/auto-move-windows/prefs.js:156
|
||||
msgid "Workspace Rules"
|
||||
msgstr "قواعد فضای کاری"
|
||||
|
||||
#: extensions/auto-move-windows/prefs.js:236
|
||||
#: extensions/auto-move-windows/prefs.js:311
|
||||
msgid "Add Rule"
|
||||
msgstr "افزودن قاعده"
|
||||
|
||||
#. TRANSLATORS: %s is the filesystem name
|
||||
#: extensions/drive-menu/extension.js:133
|
||||
#: extensions/places-menu/placeDisplay.js:233
|
||||
#: extensions/drive-menu/extension.js:123
|
||||
#: extensions/places-menu/placeDisplay.js:186
|
||||
#, javascript-format
|
||||
msgid "Ejecting drive “%s” failed:"
|
||||
msgstr "بیرون دادن دیسکگردان «%s» شکست خورد:"
|
||||
|
||||
#: extensions/drive-menu/extension.js:149
|
||||
#: extensions/drive-menu/extension.js:142
|
||||
msgid "Removable devices"
|
||||
msgstr "دستگاههای جداشدنی"
|
||||
|
||||
#: extensions/drive-menu/extension.js:171
|
||||
#: extensions/drive-menu/extension.js:164
|
||||
msgid "Open Files"
|
||||
msgstr "گشودن پروندهها"
|
||||
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
|
||||
msgid "Use more screen for windows"
|
||||
msgstr "استفاده از صفحه بیشتر برای پنجره"
|
||||
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:6
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
|
||||
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 "
|
||||
@@ -95,11 +96,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:11
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:17
|
||||
msgid "Place window captions on top"
|
||||
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:18
|
||||
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 "
|
||||
@@ -109,98 +110,177 @@ msgstr ""
|
||||
"شل در پایین را تغییر میدهد. تغییر این گزینه، نیاز به راهاندازی مجدد شل دارد تا "
|
||||
"تاثیر بگذارد."
|
||||
|
||||
#: extensions/places-menu/extension.js:88 extensions/places-menu/extension.js:91
|
||||
#: extensions/places-menu/extension.js:75 extensions/places-menu/extension.js:78
|
||||
msgid "Places"
|
||||
msgstr "مکانها"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:46
|
||||
#: extensions/places-menu/placeDisplay.js:52
|
||||
#, javascript-format
|
||||
msgid "Failed to launch “%s”"
|
||||
msgstr "شکست در اجرای «%s»"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:61
|
||||
#: extensions/places-menu/placeDisplay.js:67
|
||||
#, javascript-format
|
||||
msgid "Failed to mount volume for “%s”"
|
||||
msgstr "شکست در سوار کردن حجم برای «%s»"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:148
|
||||
#: extensions/places-menu/placeDisplay.js:171
|
||||
msgid "Computer"
|
||||
msgstr "رایانه"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:359
|
||||
#: extensions/places-menu/placeDisplay.js:315
|
||||
msgid "Home"
|
||||
msgstr "خانه"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:404
|
||||
msgid "Browse Network"
|
||||
msgstr "مرور شبکه"
|
||||
#: extensions/places-menu/placeDisplay.js:321
|
||||
msgid "Recent"
|
||||
msgstr "اخیر"
|
||||
|
||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7
|
||||
#: 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
|
||||
msgid "Cycle Screenshot Sizes"
|
||||
msgstr "تغییر اندازه تصاویر صفحهنمایش"
|
||||
|
||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
|
||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:18
|
||||
msgid "Cycle Screenshot Sizes Backward"
|
||||
msgstr "حرکت برعکس بین اندازه تصاویر صفحهنمایش"
|
||||
|
||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5
|
||||
#: 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
|
||||
msgid "Theme name"
|
||||
msgstr "نام تم"
|
||||
|
||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6
|
||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:12
|
||||
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
|
||||
msgstr "نام تم، جهت بارگیری از شاخه themes/name/gnome-shell./~"
|
||||
|
||||
#: extensions/window-list/extension.js:72
|
||||
#: extensions/window-list/extension.js:98
|
||||
msgid "Close"
|
||||
msgstr "خروج"
|
||||
|
||||
#: extensions/window-list/extension.js:92
|
||||
#: extensions/window-list/extension.js:125
|
||||
msgid "Unminimize"
|
||||
msgstr "ناکمینه"
|
||||
|
||||
#: extensions/window-list/extension.js:92
|
||||
#: extensions/window-list/extension.js:125
|
||||
msgid "Minimize"
|
||||
msgstr "کمینه"
|
||||
|
||||
#: extensions/window-list/extension.js:99
|
||||
#: extensions/window-list/extension.js:130
|
||||
msgid "Unmaximize"
|
||||
msgstr "نابیشینه"
|
||||
|
||||
#: extensions/window-list/extension.js:99
|
||||
#: extensions/window-list/extension.js:130
|
||||
msgid "Maximize"
|
||||
msgstr "بیشنه"
|
||||
|
||||
#: extensions/window-list/extension.js:434
|
||||
#: extensions/window-list/extension.js:720
|
||||
msgid "Minimize all"
|
||||
msgstr "کمینهٔ همه"
|
||||
|
||||
#: extensions/window-list/extension.js:440
|
||||
#: extensions/window-list/extension.js:726
|
||||
msgid "Unminimize all"
|
||||
msgstr "ناکمینهٔ همه"
|
||||
|
||||
#: extensions/window-list/extension.js:446
|
||||
#: extensions/window-list/extension.js:732
|
||||
msgid "Maximize all"
|
||||
msgstr "بیشینهٔ همه"
|
||||
|
||||
#: extensions/window-list/extension.js:454
|
||||
#: extensions/window-list/extension.js:740
|
||||
msgid "Unmaximize all"
|
||||
msgstr "نابیشینهٔ همه"
|
||||
|
||||
#: extensions/window-list/extension.js:462
|
||||
#: extensions/window-list/extension.js:748
|
||||
msgid "Close all"
|
||||
msgstr "بستن همه"
|
||||
|
||||
#: extensions/window-list/extension.js:741
|
||||
#: extensions/window-list/extension.js:1000 extensions/window-list/prefs.js:23
|
||||
msgid "Window List"
|
||||
msgstr "فهرست پنجره"
|
||||
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:18
|
||||
msgid "When to group windows"
|
||||
msgstr "زمان گروه کردن پنجرهها"
|
||||
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:19
|
||||
msgid ""
|
||||
"Decides when to group windows from the same application on the window list. "
|
||||
"Possible values are “never”, “auto” and “always”."
|
||||
@@ -208,20 +288,20 @@ msgstr ""
|
||||
"تصمیم میگیرد چه زمانی پنجرههای یک برنامه در فهرست پنجرهها گروه شوند. مقدارهای "
|
||||
"ممکن عبارتند از «never»، «auto» و «always»."
|
||||
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
|
||||
#: extensions/window-list/prefs.js:86
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26
|
||||
#: extensions/window-list/prefs.js:74
|
||||
msgid "Show windows from all workspaces"
|
||||
msgstr "نمایش پنجرهها از تمام فضاهای کاری"
|
||||
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
|
||||
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:27
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:33
|
||||
msgid "Show the window list on all monitors"
|
||||
msgstr "نمایش فهرست پنجرهها در تمام نمایشگرها"
|
||||
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:28
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:34
|
||||
msgid ""
|
||||
"Whether to show the window list on all connected monitors or only on the primary "
|
||||
"one."
|
||||
@@ -229,50 +309,109 @@ msgstr ""
|
||||
"اینکه آیا فهرست پنجرهها در تمام نمایشگرهای متصل نمایش داده شود یا فقط در نمایشگر "
|
||||
"اصلی."
|
||||
|
||||
#: extensions/window-list/prefs.js:39
|
||||
#: 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
|
||||
msgid "Window Grouping"
|
||||
msgstr "گروهسازی پنجرهها"
|
||||
|
||||
#: extensions/window-list/prefs.js:63
|
||||
#: extensions/window-list/prefs.js:46
|
||||
msgid "Never group windows"
|
||||
msgstr "هیچگاه پنجرهها گروه نشوند"
|
||||
|
||||
#: extensions/window-list/prefs.js:64
|
||||
#: extensions/window-list/prefs.js:47
|
||||
msgid "Group windows when space is limited"
|
||||
msgstr "پنجرهها زمانی که فضا محدود است گروه شوند"
|
||||
|
||||
#: extensions/window-list/prefs.js:65
|
||||
#: extensions/window-list/prefs.js:48
|
||||
msgid "Always group windows"
|
||||
msgstr "همیشه پنجرهها گروه شوند"
|
||||
|
||||
#: extensions/window-list/prefs.js:81
|
||||
#: extensions/window-list/prefs.js:68
|
||||
msgid "Show on all monitors"
|
||||
msgstr "نمایش در تمام نمایشگرها"
|
||||
|
||||
#: extensions/window-list/workspaceIndicator.js:249
|
||||
#: extensions/workspace-indicator/extension.js:254
|
||||
#: 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
|
||||
msgid "Workspace Indicator"
|
||||
msgstr "نشانگر فضایکاری"
|
||||
|
||||
#: extensions/workspace-indicator/prefs.js:33
|
||||
msgid "Workspace Names"
|
||||
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:66
|
||||
#, javascript-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "فضای کاری %Id"
|
||||
#~ msgid "Workspace %d"
|
||||
#~ msgstr "فضای کاری %Id"
|
||||
|
||||
#: extensions/workspace-indicator/prefs.js:207
|
||||
msgid "Add Workspace"
|
||||
msgstr "افزودن فضایکاری"
|
||||
#~ msgid "Add Workspace"
|
||||
#~ msgstr "افزودن فضایکاری"
|
||||
|
||||
#~ msgid "Remove"
|
||||
#~ msgstr "برداشتن"
|
||||
|
||||
#~ msgid "Computer"
|
||||
#~ msgstr "رایانه"
|
||||
|
||||
#~ msgid "Show workspace previews"
|
||||
#~ msgstr "پیشنمایش فضاهای کاری"
|
||||
|
||||
#~ msgid "Applications"
|
||||
#~ msgstr "برنامهها"
|
||||
|
||||
#~ msgid "Application"
|
||||
#~ msgstr "برنامه"
|
||||
|
||||
#~ msgid "Workspace"
|
||||
#~ msgstr "فضایکاری"
|
||||
|
||||
#~ msgid "Create new matching rule"
|
||||
#~ msgstr "افزودن یک قاعدهی منطبق جدید"
|
||||
|
||||
@@ -356,12 +495,6 @@ msgstr "افزودن فضایکاری"
|
||||
#~ msgid "Window management and application launching"
|
||||
#~ msgstr "مدیریت پنجرهها و اجرا کننده برنامهها"
|
||||
|
||||
#~ msgid "CPU"
|
||||
#~ msgstr "سیپییو"
|
||||
|
||||
#~ msgid "Memory"
|
||||
#~ msgstr "حافظه"
|
||||
|
||||
#~ msgid "The alt tab behaviour."
|
||||
#~ msgstr "رفتار alt tab."
|
||||
|
||||
@@ -460,9 +593,6 @@ msgstr "افزودن فضایکاری"
|
||||
#~ msgid "My Account"
|
||||
#~ msgstr "حساب من"
|
||||
|
||||
#~ msgid "System Settings"
|
||||
#~ msgstr "تنظیمات سیستم"
|
||||
|
||||
#~ msgid "Lock Screen"
|
||||
#~ msgstr "قفلکردن صفحهنمایش"
|
||||
|
||||
|
||||
306
po/fi.po
306
po/fi.po
@@ -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: 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"
|
||||
"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"
|
||||
"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.0.1\n"
|
||||
"X-Generator: Poedit 3.7\n"
|
||||
"X-Project-Style: gnome\n"
|
||||
"X-POT-Import-Date: 2012-03-05 15:06:12+0000\n"
|
||||
|
||||
#: data/gnome-classic.desktop.in:3
|
||||
#: data/gnome-classic.desktop.in:2
|
||||
msgid "GNOME Classic"
|
||||
msgstr "Perinteinen Gnome"
|
||||
|
||||
#: data/gnome-classic.desktop.in:4 data/gnome-classic-wayland.desktop.in:4
|
||||
#: data/gnome-classic-xorg.desktop.in:4
|
||||
#: data/gnome-classic.desktop.in:3 data/gnome-classic-wayland.desktop.in:3
|
||||
#: data/gnome-classic-xorg.desktop.in:3
|
||||
msgid "This session logs you into GNOME Classic"
|
||||
msgstr "Tämä istunto kirjaa sinut perinteiseen Gnomeen"
|
||||
|
||||
#: data/gnome-classic-wayland.desktop.in:3
|
||||
#: data/gnome-classic-wayland.desktop.in:2
|
||||
msgid "GNOME Classic on Wayland"
|
||||
msgstr "Perinteinen Gnome Waylandia käyttäen"
|
||||
|
||||
#: data/gnome-classic-xorg.desktop.in:3
|
||||
#: data/gnome-classic-xorg.desktop.in:2
|
||||
msgid "GNOME Classic on Xorg"
|
||||
msgstr "Perinteinen Gnome Xorgia käyttäen"
|
||||
|
||||
#: extensions/apps-menu/extension.js:112
|
||||
#: extensions/apps-menu/extension.js:118
|
||||
msgid "Favorites"
|
||||
msgstr "Suosikit"
|
||||
|
||||
#: extensions/apps-menu/extension.js:366
|
||||
msgid "Applications"
|
||||
#: extensions/apps-menu/extension.js:392
|
||||
msgid "Apps"
|
||||
msgstr "Sovellukset"
|
||||
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:12
|
||||
msgid "Application and workspace list"
|
||||
msgstr "Sovellus- ja työtilaluettelo"
|
||||
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:7
|
||||
#: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:13
|
||||
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:34
|
||||
#: extensions/auto-move-windows/prefs.js:156
|
||||
msgid "Workspace Rules"
|
||||
msgstr "Työtilojen säännöt"
|
||||
|
||||
#: extensions/auto-move-windows/prefs.js:236
|
||||
#: extensions/auto-move-windows/prefs.js:311
|
||||
msgid "Add Rule"
|
||||
msgstr "Lisää sääntö"
|
||||
|
||||
#. TRANSLATORS: %s is the filesystem name
|
||||
#: extensions/drive-menu/extension.js:133
|
||||
#: extensions/places-menu/placeDisplay.js:233
|
||||
#: extensions/drive-menu/extension.js:123
|
||||
#: extensions/places-menu/placeDisplay.js:186
|
||||
#, javascript-format
|
||||
msgid "Ejecting drive “%s” failed:"
|
||||
msgstr "Aseman “%s” irrottaminen epäonnistui:"
|
||||
|
||||
#: extensions/drive-menu/extension.js:149
|
||||
#: extensions/drive-menu/extension.js:142
|
||||
msgid "Removable devices"
|
||||
msgstr "Erilliset tallennusvälineet"
|
||||
|
||||
#: extensions/drive-menu/extension.js:171
|
||||
#: extensions/drive-menu/extension.js:164
|
||||
msgid "Open Files"
|
||||
msgstr "Avaa tiedostonhallinta"
|
||||
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
|
||||
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:6
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
|
||||
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:11
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:17
|
||||
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:12
|
||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:18
|
||||
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,100 +113,179 @@ 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:88
|
||||
#: extensions/places-menu/extension.js:91
|
||||
#: extensions/places-menu/extension.js:75
|
||||
#: extensions/places-menu/extension.js:78
|
||||
msgid "Places"
|
||||
msgstr "Sijainnit"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:46
|
||||
#: extensions/places-menu/placeDisplay.js:52
|
||||
#, javascript-format
|
||||
msgid "Failed to launch “%s”"
|
||||
msgstr "Kohteen “%s” käynnistys epäonnistui"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:61
|
||||
#: extensions/places-menu/placeDisplay.js:67
|
||||
#, javascript-format
|
||||
msgid "Failed to mount volume for “%s”"
|
||||
msgstr "Taltion “%s” liittäminen epäonnistui"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:148
|
||||
#: extensions/places-menu/placeDisplay.js:171
|
||||
msgid "Computer"
|
||||
msgstr "Tietokone"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:359
|
||||
#: extensions/places-menu/placeDisplay.js:315
|
||||
msgid "Home"
|
||||
msgstr "Koti"
|
||||
|
||||
#: extensions/places-menu/placeDisplay.js:404
|
||||
msgid "Browse Network"
|
||||
msgstr "Selaa verkkoa"
|
||||
#: 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"
|
||||
|
||||
# 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:7
|
||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:14
|
||||
msgid "Cycle Screenshot Sizes"
|
||||
msgstr "Vaihda kuvakaappausten kokojen välillä"
|
||||
|
||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
|
||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:18
|
||||
msgid "Cycle Screenshot Sizes Backward"
|
||||
msgstr "Vaihda kuvakaappausten kokojen välillä taaksepäin"
|
||||
|
||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5
|
||||
#: 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
|
||||
msgid "Theme name"
|
||||
msgstr "Teeman nimi"
|
||||
|
||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6
|
||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:12
|
||||
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:72
|
||||
#: extensions/window-list/extension.js:98
|
||||
msgid "Close"
|
||||
msgstr "Sulje"
|
||||
|
||||
#: extensions/window-list/extension.js:92
|
||||
#: extensions/window-list/extension.js:125
|
||||
msgid "Unminimize"
|
||||
msgstr "Palauta pienennys"
|
||||
|
||||
#: extensions/window-list/extension.js:92
|
||||
#: extensions/window-list/extension.js:125
|
||||
msgid "Minimize"
|
||||
msgstr "Pienennä"
|
||||
|
||||
#: extensions/window-list/extension.js:99
|
||||
#: extensions/window-list/extension.js:130
|
||||
msgid "Unmaximize"
|
||||
msgstr "Palauta suurennus"
|
||||
|
||||
#: extensions/window-list/extension.js:99
|
||||
#: extensions/window-list/extension.js:130
|
||||
msgid "Maximize"
|
||||
msgstr "Suurenna"
|
||||
|
||||
#: extensions/window-list/extension.js:434
|
||||
#: extensions/window-list/extension.js:720
|
||||
msgid "Minimize all"
|
||||
msgstr "Pienennä kaikki"
|
||||
|
||||
#: extensions/window-list/extension.js:440
|
||||
#: extensions/window-list/extension.js:726
|
||||
msgid "Unminimize all"
|
||||
msgstr "Palauta kaikkien koko"
|
||||
|
||||
#: extensions/window-list/extension.js:446
|
||||
#: extensions/window-list/extension.js:732
|
||||
msgid "Maximize all"
|
||||
msgstr "Suurenna kaikki"
|
||||
|
||||
#: extensions/window-list/extension.js:454
|
||||
#: extensions/window-list/extension.js:740
|
||||
msgid "Unmaximize all"
|
||||
msgstr "Palauta kaikkien koko"
|
||||
|
||||
#: extensions/window-list/extension.js:462
|
||||
#: extensions/window-list/extension.js:748
|
||||
msgid "Close all"
|
||||
msgstr "Sulje kaikki"
|
||||
|
||||
#: extensions/window-list/extension.js:741
|
||||
#: extensions/window-list/extension.js:1000 extensions/window-list/prefs.js:23
|
||||
msgid "Window List"
|
||||
msgstr "Ikkunaluettelo"
|
||||
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:18
|
||||
msgid "When to group windows"
|
||||
msgstr "Milloin ikkunat ryhmitetään"
|
||||
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:19
|
||||
msgid ""
|
||||
"Decides when to group windows from the same application on the window list. "
|
||||
"Possible values are “never”, “auto” and “always”."
|
||||
@@ -214,22 +293,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:20
|
||||
#: extensions/window-list/prefs.js:86
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:26
|
||||
#: extensions/window-list/prefs.js:74
|
||||
msgid "Show windows from all workspaces"
|
||||
msgstr "Näytä ikkunat kaikista työtiloista"
|
||||
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
|
||||
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:27
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:33
|
||||
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:28
|
||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:34
|
||||
msgid ""
|
||||
"Whether to show the window list on all connected monitors or only on the "
|
||||
"primary one."
|
||||
@@ -237,43 +316,108 @@ msgstr ""
|
||||
"Näytetäänkö ikkunaluettelo kaikilla liitetyillä näytöillä vai ainoastaan "
|
||||
"ensisijaisella näytöllä."
|
||||
|
||||
#: extensions/window-list/prefs.js:39
|
||||
#: 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
|
||||
msgid "Window Grouping"
|
||||
msgstr "Ikkunoiden ryhmitys"
|
||||
|
||||
#: extensions/window-list/prefs.js:63
|
||||
#: extensions/window-list/prefs.js:46
|
||||
msgid "Never group windows"
|
||||
msgstr "Älä ryhmitä ikkunoita koskaan"
|
||||
|
||||
#: extensions/window-list/prefs.js:64
|
||||
#: extensions/window-list/prefs.js:47
|
||||
msgid "Group windows when space is limited"
|
||||
msgstr "Ryhmitä ikkunat tilan ollessa rajallinen"
|
||||
|
||||
#: extensions/window-list/prefs.js:65
|
||||
#: extensions/window-list/prefs.js:48
|
||||
msgid "Always group windows"
|
||||
msgstr "Ryhmitä ikkunat aina"
|
||||
|
||||
#: extensions/window-list/prefs.js:81
|
||||
#: extensions/window-list/prefs.js:68
|
||||
msgid "Show on all monitors"
|
||||
msgstr "Näytä kaikilla näytöillä"
|
||||
|
||||
#: extensions/window-list/workspaceIndicator.js:249
|
||||
#: extensions/workspace-indicator/extension.js:254
|
||||
#: 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
|
||||
msgid "Workspace Indicator"
|
||||
msgstr "Työtilan ilmaisin"
|
||||
|
||||
#: extensions/workspace-indicator/prefs.js:33
|
||||
msgid "Workspace Names"
|
||||
msgstr "Työtilojen nimet"
|
||||
#: 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:66
|
||||
#, javascript-format
|
||||
msgid "Workspace %d"
|
||||
msgstr "Työtila %d"
|
||||
#~ msgid "Workspace %d"
|
||||
#~ msgstr "Työtila %d"
|
||||
|
||||
#: extensions/workspace-indicator/prefs.js:207
|
||||
msgid "Add Workspace"
|
||||
msgstr "Lisää työtila"
|
||||
#~ 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"
|
||||
|
||||
#~ msgid "Application"
|
||||
#~ msgstr "Sovellus"
|
||||
@@ -330,12 +474,6 @@ msgstr "Lisää työtila"
|
||||
#~ msgid "Message"
|
||||
#~ msgstr "Viesti"
|
||||
|
||||
#~ msgid "CPU"
|
||||
#~ msgstr "Suoritin"
|
||||
|
||||
#~ msgid "Memory"
|
||||
#~ msgstr "Muisti"
|
||||
|
||||
#~ msgid "GNOME Shell Classic"
|
||||
#~ msgstr "Gnome Shell - perinteinen"
|
||||
|
||||
@@ -366,9 +504,6 @@ msgstr "Lisää työtila"
|
||||
#~ 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"
|
||||
|
||||
@@ -426,9 +561,6 @@ msgstr "Lisää työtila"
|
||||
#~ msgid "Bookmarks"
|
||||
#~ msgstr "Kirjanmerkit"
|
||||
|
||||
#~ msgid "Network"
|
||||
#~ msgstr "Verkko"
|
||||
|
||||
#~ msgid "File System"
|
||||
#~ msgstr "Tiedostojärjestelmä"
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user