Compare commits
493 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| db248b3ce6 | |||
| 2e2651ea4c | |||
| 696225fdc9 | |||
| fd31c81873 | |||
| 981f094061 | |||
| e864d0d1cc | |||
| 4345703c2e | |||
| a911447375 | |||
| 2d3307c657 | |||
| d59bc0b7f0 | |||
| cb8c2eb27f | |||
| 0544729bba | |||
| 017c410a6a | |||
| f2c73329be | |||
| ce644be96f | |||
| e75a1a15ac | |||
| 1155170c7c | |||
| 6d8f54a20b | |||
| 93a2e7bdba | |||
| 3bfaf6f88a | |||
| 37baccd9fc | |||
| 9365725246 | |||
| f1257c4523 | |||
| f0865f039e | |||
| 4955c20669 | |||
| cf007dd472 | |||
| 701b14ecbf | |||
| 18674b2e35 | |||
| b9067eed79 | |||
| 68c7beabab | |||
| 3ba184bfe2 | |||
| 24fa8a6e04 | |||
| 923f204478 | |||
| 930595003d | |||
| a69d37f2ee | |||
| 2e715149db | |||
| 26d067d301 | |||
| 51df22adcf | |||
| c1df8cedb8 | |||
| 2189f8cc58 | |||
| 6cd74c86ae | |||
| 6ff6eb2c22 | |||
| 88657c2def | |||
| 68b7915bc6 | |||
| f6e66faf8f | |||
| ee0bb2c636 | |||
| 6bee46bf1a | |||
| 1edb245e85 | |||
| 7a010d5a72 | |||
| 9e4b7488b3 | |||
| 18cf40a521 | |||
| ed6d806617 | |||
| f4347d240a | |||
| 4f5e421539 | |||
| 72868ac7c5 | |||
| 5dea503cbd | |||
| 81b8ad4499 | |||
| 8f8292afb3 | |||
| d505f75c9b | |||
| a8a2729531 | |||
| aeee81a82c | |||
| 9306ee7a5d | |||
| e8c8c7d940 | |||
| 871c9c39dc | |||
| fcefdc3271 | |||
| ecc955b4cd | |||
| 7e5f7eb0aa | |||
| 1c3407c05f | |||
| 7a017c1e76 | |||
| 26fb856ffc | |||
| 9d2b15ba26 | |||
| 28cdc1df1a | |||
| b2455f0ecd | |||
| 0c501f84b9 | |||
| c6d5ea5934 | |||
| 047f939b63 | |||
| 3d693372ad | |||
| a33802d3e5 | |||
| 573aba17d7 | |||
| d483244ecb | |||
| 8e39e0d363 | |||
| 2762830b10 | |||
| df1df4b8e1 | |||
| 210e86641b | |||
| 2117c42d74 | |||
| a8a49e3c65 | |||
| bfe26eaf84 | |||
| 60a08debff | |||
| 132bd9259e | |||
| 5eb4dcf6bf | |||
| 5edffcd859 | |||
| 295fb67225 | |||
| a2c271d677 | |||
| 6901f6187d | |||
| e2ee6bacd0 | |||
| bc6c24fc4e | |||
| 58f72a073d | |||
| d8b526a715 | |||
| a5b6871562 | |||
| deb6031381 | |||
| 486cb59aff | |||
| de9a3df7bd | |||
| c83a75766c | |||
| c016fb531c | |||
| 1615745a1f | |||
| dc50382d22 | |||
| a5b84379f4 | |||
| d168261fa5 | |||
| db131fc7da | |||
| e83760388f | |||
| 82d19a5433 | |||
| e3e39728ce | |||
| 76dfb8ef31 | |||
| 544cf566b5 | |||
| da88313488 | |||
| 2aa0720e93 | |||
| 80c6656c4f | |||
| be536ee32e | |||
| 339e06634f | |||
| ff9527ea52 | |||
| a5a3523df8 | |||
| 06acd9ff25 | |||
| 1a1d45d9e4 | |||
| 1d3775b3d1 | |||
| 15c83db793 | |||
| cc021589b8 | |||
| 5e316d37cb | |||
| 28dbb47937 | |||
| 619de9d5ee | |||
| 561b8aeb03 | |||
| 4286fd1bcc | |||
| 3bb0897bc1 | |||
| 12eedcf6f7 | |||
| 08d382facc | |||
| e2369147b1 | |||
| 5e559c4444 | |||
| e30762ea43 | |||
| 1fa4a078d8 | |||
| 3e87fa8aa5 | |||
| e52ca120c4 | |||
| 3eadbba8a1 | |||
| 41f9451070 | |||
| d9ae9a023a | |||
| d2f5bfdbfd | |||
| b4a1953372 | |||
| 96a1de92db | |||
| cc2f46b837 | |||
| db1342e5ff | |||
| 86c5057d62 | |||
| 779dea8408 | |||
| 544f374e44 | |||
| b55d783cc2 | |||
| 9f25047e24 | |||
| fb66afbf71 | |||
| 365fa6abc9 | |||
| d7a824f35f | |||
| 0d8e412220 | |||
| 991f6ef508 | |||
| 37f03f5e2e | |||
| b4a4ff0a06 | |||
| de8876bd5e | |||
| 5ad272e628 | |||
| 3b22582752 | |||
| e734fcbd21 | |||
| 435879c121 | |||
| ed81650f55 | |||
| 1276a880de | |||
| 584016c291 | |||
| 4e948b2b48 | |||
| b6bce374ad | |||
| 6cbd8abdca | |||
| 5947f38421 | |||
| 41664b152c | |||
| 29b24e391a | |||
| 0cdb80a9e0 | |||
| a8907d6fb1 | |||
| 4851a66c57 | |||
| 1d5c2091cc | |||
| e5abcaf7c8 | |||
| d5733eed90 | |||
| 8957c277a1 | |||
| a22cc0dc4e | |||
| 276f6a1c6f | |||
| e161e32b63 | |||
| e31a351c56 | |||
| f728c0172b | |||
| 136644d45e | |||
| 24308612fd | |||
| 1ae3e89b57 | |||
| 8b9be8f120 | |||
| c1bb6ca349 | |||
| b03d1b9cc7 | |||
| 3ce0485742 | |||
| 100651a74c | |||
| d3b687df8b | |||
| df463177e7 | |||
| 62af36ebfa | |||
| c5246b7415 | |||
| d39c1fd685 | |||
| 665a7fbbcb | |||
| 5138e30a2a | |||
| a69fa591da | |||
| 7f2a3eb2ca | |||
| a4987d03b8 | |||
| c477f10bfb | |||
| 2ae0f368b9 | |||
| e45cc8cdc0 | |||
| 3c8edd7b3a | |||
| ac33058086 | |||
| 855832d08b | |||
| 9f07981fe5 | |||
| a27d6d3c7e | |||
| 2a4da355f1 | |||
| c7a08aaf74 | |||
| ca47fbc16b | |||
| 5a3c3de1a4 | |||
| ff9062ac17 | |||
| 9486fc3f98 | |||
| 8c1d6d88cf | |||
| 33b16681c6 | |||
| 3c51716268 | |||
| e5421b6cc6 | |||
| f1e7ae1010 | |||
| 10fe907c83 | |||
| ae9809caba | |||
| 28e873b5e0 | |||
| 39d532ca3f | |||
| 07a602e404 | |||
| a448e48cdb | |||
| 092a3ee21a | |||
| c95d197c5c | |||
| 88cfcdbd2e | |||
| f3378c7b6f | |||
| 50545c1486 | |||
| ae8749b7e1 | |||
| ff678d06ea | |||
| 6345449d50 | |||
| 8951266183 | |||
| 6911624d4d | |||
| 84a548c0b9 | |||
| da6efff220 | |||
| cc99aff03b | |||
| cdc5210c25 | |||
| 4838833d72 | |||
| 0fad184fda | |||
| 6d8c96d665 | |||
| e6c1a3b052 | |||
| f047cb0baf | |||
| 71add2e391 | |||
| 61abd2a48f | |||
| 6ba2f49866 | |||
| 2fd2cf9074 | |||
| 28494941e1 | |||
| d0d40f248d | |||
| cc2a2ca153 | |||
| 2307b639dd | |||
| 1e0ea36a81 | |||
| b70059ac4d | |||
| 4e1250a6ba | |||
| 56d2852004 | |||
| 3fa8edcb1a | |||
| edb14ea03c | |||
| a2f554bc1e | |||
| eb567c1120 | |||
| a289bbfb93 | |||
| 5486c2040d | |||
| 84c95be03f | |||
| d9e6c6c4c5 | |||
| 25559e758c | |||
| 89ce4aee4a | |||
| b1eb9b9080 | |||
| ba9d2e7919 | |||
| 9d0c742f34 | |||
| 1e69961bc7 | |||
| e4ddc4c14e | |||
| a0b6535210 | |||
| be149bab3d | |||
| 1b4bbe19e3 | |||
| 2e6b602a04 | |||
| 5b9012152c | |||
| efd20bb4f7 | |||
| 7d595e4774 | |||
| 7b4c3085c0 | |||
| 9a9b3afa31 | |||
| 7045a5dcea | |||
| 777bae87b5 | |||
| 06ae867c2f | |||
| 77ebd3d202 | |||
| 59bc054ef6 | |||
| 227f999001 | |||
| e37782c2ce | |||
| f210be5ab4 | |||
| 12b1a0639e | |||
| 34098b871b | |||
| 57e9dfe722 | |||
| cc2ebff0e3 | |||
| 7c21766dd5 | |||
| 965dfd2d39 | |||
| f17a519c38 | |||
| 49e598b4b7 | |||
| 40f13f3afa | |||
| 356e2054fa | |||
| 8223ca9739 | |||
| dab22e927b | |||
| a1f60be674 | |||
| e0ec59d30b | |||
| abc1c9ef7e | |||
| 3e4a778978 | |||
| ca85495a1c | |||
| fe20c27b60 | |||
| 41dc03222c | |||
| 3cf56d8270 | |||
| 9436564a76 | |||
| 142065d58b | |||
| 2ffd3d95bb | |||
| 6b9f87dbea | |||
| 5ba59d1096 | |||
| 3b2aee92fb | |||
| 12dac8ee62 | |||
| f8df77051b | |||
| fd9c0f6be4 | |||
| cf05510b0d | |||
| 207923a1b6 | |||
| fbbcb058fa | |||
| cef1736de2 | |||
| da10cfc062 | |||
| 0ad1e9bbc1 | |||
| 7cbf2533fe | |||
| 1a9d1c235c | |||
| 5c8a19f54f | |||
| 44fe593f8a | |||
| b8d1af4e50 | |||
| 18f189b887 | |||
| c9776c97de | |||
| 57a4241749 | |||
| 163ff997b1 | |||
| 449e9879ce | |||
| 5ea14f063f | |||
| 84350c3776 | |||
| 3cc3d03f0b | |||
| 91027ae9a4 | |||
| 9db80785a5 | |||
| a876817127 | |||
| 057e5bb0c1 | |||
| 07fc66765d | |||
| 3a0c70aef7 | |||
| bbb6a73af1 | |||
| 51119ec213 | |||
| 2690ee46f2 | |||
| bc2e456a6a | |||
| daa7b9b6ab | |||
| b27c3719f0 | |||
| 147482d5e8 | |||
| 514403e1ba | |||
| 109d3aad6a | |||
| 15779e204d | |||
| 49e403f822 | |||
| ffb5b76f4e | |||
| b21932ffd9 | |||
| 46d8f1c8d9 | |||
| 8caffac3d7 | |||
| 40da5360a4 | |||
| 5b9f91991f | |||
| a565f2d984 | |||
| 0b7269a4b8 | |||
| c7805b4b40 | |||
| e6b65be75a | |||
| 7043fe592c | |||
| f7d35c41ae | |||
| afb4942a72 | |||
| 4f7bd0918b | |||
| fb8d34254a | |||
| 2a390c4c25 | |||
| 040fbf72e9 | |||
| 395e9aea3c | |||
| bb3508327f | |||
| 068ae45f6c | |||
| 02ff0f658b | |||
| 3c14d9b524 | |||
| 8de00babad | |||
| 59768f0514 | |||
| e185fe30f8 | |||
| 0d20be43d4 | |||
| 356632063c | |||
| 3a592ddb59 | |||
| 652ade33b5 | |||
| 05e6188921 | |||
| b222ebed80 | |||
| 179d9b9ae1 | |||
| ab7f50d2c8 | |||
| 51cc3c7cd1 | |||
| d51f14529a | |||
| 563dfc3d4d | |||
| 3ad72a04af | |||
| d43130f779 | |||
| ce997ff4fd | |||
| 7a5d530358 | |||
| dd0520f334 | |||
| aab9143c13 | |||
| b689ec2ef4 | |||
| c9c2da444b | |||
| 9c931c175c | |||
| 39db8f1768 | |||
| f7ed9ff131 | |||
| 4423126272 | |||
| 5294bc510b | |||
| 1b599315a2 | |||
| b561655503 | |||
| 64923382b4 | |||
| 5ef6525be7 | |||
| 6dc066f7dd | |||
| 380cf61811 | |||
| 4624ca952e | |||
| 6f1475e944 | |||
| 22256eec46 | |||
| 31a5de2577 | |||
| 269e008541 | |||
| 79d866e9b5 | |||
| 6d4341f8a4 | |||
| 61dd96a29e | |||
| 9e2a8e0fb2 | |||
| 82ff7afe2b | |||
| 0017eaebfc | |||
| fa729854b8 | |||
| 5644aebac7 | |||
| 941f5e43b4 | |||
| a595407d39 | |||
| 60417b361e | |||
| c3adf1724c | |||
| 435bbff3b0 | |||
| 706ea0dd7e | |||
| e7c37a9d54 | |||
| a7f66d648e | |||
| 013dc818e3 | |||
| 9430670019 | |||
| 67c795b610 | |||
| 42158401ac | |||
| 06a9891d77 | |||
| c53e5325c3 | |||
| 6161d531fc | |||
| ad52e75e97 | |||
| 2db7b6756d | |||
| 2f70c6c8a7 | |||
| 8fd8943460 | |||
| 695b533be1 | |||
| 491e9fb3e9 | |||
| 4d8bccc861 | |||
| 88b5fea2f9 | |||
| 91e886c564 | |||
| 1e8ff58d82 | |||
| 0b84052458 | |||
| 4abc92ef44 | |||
| d12833afc4 | |||
| 8de34e23a3 | |||
| 3158caa1be | |||
| 8a6d13c416 | |||
| 90fe2cfb36 | |||
| c91d5ebec1 | |||
| 5a00d5e117 | |||
| 1b938d9d5b | |||
| 62cbbef068 | |||
| 684547a66d | |||
| 261569c9fd | |||
| e8d3ad369a | |||
| f81ae009f9 | |||
| 8b954a2937 | |||
| 1e58f48f1d | |||
| 1a0e9905fb | |||
| 8a04a843f6 | |||
| 814e57fbd0 | |||
| f69389a76b | |||
| 3f9b1357ff | |||
| e0cb098823 | |||
| bc470533bf | |||
| 84d4e7efe3 | |||
| 39b900243e | |||
| 017aedadd2 | |||
| 7c06399818 | |||
| 26646997b0 | |||
| 1b3f651c7e | |||
| 23b002adaa | |||
| d9118a8653 | |||
| 245714aa0c | |||
| 2618620d04 | |||
| 1d3d0585a2 | |||
| 2e263b1cdc | |||
| f4aece9488 | |||
| c1928689da | |||
| 6972b3458d | |||
| bb6634bbb0 | |||
| 1b2a6bdc72 | |||
| 901c12671e | |||
| 3c564fd613 |
-29
@@ -1,29 +0,0 @@
|
|||||||
ABOUT-NLS
|
|
||||||
Makefile
|
|
||||||
Makefile.in
|
|
||||||
Makefile.in.in
|
|
||||||
aclocal.m4
|
|
||||||
autom4te.cache/
|
|
||||||
config/
|
|
||||||
configure
|
|
||||||
config.log
|
|
||||||
config.status
|
|
||||||
data/*.json
|
|
||||||
m4/
|
|
||||||
po/*.header
|
|
||||||
po/*.sed
|
|
||||||
po/*.sin
|
|
||||||
po/Makevars.template
|
|
||||||
po/POTFILES
|
|
||||||
po/Rules-quot
|
|
||||||
po/gnome-shell-extensions.pot
|
|
||||||
po/stamp-it
|
|
||||||
staging/
|
|
||||||
zip-files/
|
|
||||||
|
|
||||||
*~
|
|
||||||
*.gmo
|
|
||||||
metadata.json
|
|
||||||
*.desktop
|
|
||||||
*.gschema.valid
|
|
||||||
*.session
|
|
||||||
+2
-1
@@ -107,7 +107,8 @@ eslint:
|
|||||||
stage: review
|
stage: review
|
||||||
<<: *prereview_req
|
<<: *prereview_req
|
||||||
script:
|
script:
|
||||||
- eslint -o $LINT_LOG -f junit --resolve-plugins-relative-to $(npm root -g) extensions
|
- export NODE_PATH=$(npm root -g)
|
||||||
|
- ./.gitlab-ci/run-eslint --output-file ${LINT_LOG} --format junit --stdout
|
||||||
artifacts:
|
artifacts:
|
||||||
paths:
|
paths:
|
||||||
- ${LINT_LOG}
|
- ${LINT_LOG}
|
||||||
|
|||||||
Executable
+54
@@ -0,0 +1,54 @@
|
|||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
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);
|
||||||
|
});
|
||||||
@@ -1,3 +1,14 @@
|
|||||||
|
45.beta
|
||||||
|
=======
|
||||||
|
* Port extensions to ESM [Florian; !259, !266, !268, !269]
|
||||||
|
* Misc. bug fixes and cleanups [Florian; !260, !261, !262, !263, !264]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Florian Müllner
|
||||||
|
|
||||||
|
Translators:
|
||||||
|
Efstathios Iosifidis [el]
|
||||||
|
|
||||||
45.alpha
|
45.alpha
|
||||||
========
|
========
|
||||||
* window-list: Modernize default styling [Alexander; !253]
|
* window-list: Modernize default styling [Alexander; !253]
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
|
Before Width: | Height: | Size: 100 KiB |
Vendored
+916
@@ -0,0 +1,916 @@
|
|||||||
|
gnome-shell-extensions (45~beta-1) experimental; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release
|
||||||
|
|
||||||
|
-- Jeremy Bícha <jbicha@ubuntu.com> Mon, 21 Aug 2023 10:17:23 -0400
|
||||||
|
|
||||||
|
gnome-shell-extensions (44.0-2) unstable; urgency=medium
|
||||||
|
|
||||||
|
* Team upload
|
||||||
|
* Upload to unstable (part of transition: #1043144)
|
||||||
|
|
||||||
|
-- Simon McVittie <smcv@debian.org> Sun, 20 Aug 2023 23:04:08 +0100
|
||||||
|
|
||||||
|
gnome-shell-extensions (44.0-1) experimental; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release
|
||||||
|
* debian/control.in: Bump minimum meson to 0.58.0
|
||||||
|
* debian/control.in: Build-Depend on libglib2.0-bin
|
||||||
|
|
||||||
|
-- Jeremy Bicha <jbicha@ubuntu.com> Mon, 27 Mar 2023 08:50:32 -0400
|
||||||
|
|
||||||
|
gnome-shell-extensions (44~rc-1) experimental; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release
|
||||||
|
|
||||||
|
-- Jeremy Bicha <jbicha@ubuntu.com> Tue, 07 Mar 2023 12:20:00 -0500
|
||||||
|
|
||||||
|
gnome-shell-extensions (44~beta-1) experimental; urgency=medium
|
||||||
|
|
||||||
|
[ Jeremy Bicha ]
|
||||||
|
* New upstream release
|
||||||
|
|
||||||
|
[ Debian Janitor ]
|
||||||
|
* Remove constraints unnecessary since buster (oldstable)
|
||||||
|
|
||||||
|
-- Jeremy Bicha <jbicha@ubuntu.com> Wed, 15 Feb 2023 11:01:26 -0500
|
||||||
|
|
||||||
|
gnome-shell-extensions (43.1-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release
|
||||||
|
|
||||||
|
-- Jeremy Bicha <jbicha@ubuntu.com> Tue, 22 Nov 2022 14:14:48 -0500
|
||||||
|
|
||||||
|
gnome-shell-extensions (43.0-2) unstable; urgency=medium
|
||||||
|
|
||||||
|
* Release to unstable
|
||||||
|
|
||||||
|
-- Jeremy Bicha <jbicha@ubuntu.com> Tue, 27 Sep 2022 19:13:41 -0400
|
||||||
|
|
||||||
|
gnome-shell-extensions (43.0-1) experimental; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release
|
||||||
|
|
||||||
|
-- Jeremy Bicha <jbicha@ubuntu.com> Mon, 19 Sep 2022 10:57:41 -0400
|
||||||
|
|
||||||
|
gnome-shell-extensions (43~rc-1) experimental; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release
|
||||||
|
|
||||||
|
-- Jeremy Bicha <jbicha@ubuntu.com> Tue, 06 Sep 2022 14:39:00 -0400
|
||||||
|
|
||||||
|
gnome-shell-extensions (43~beta-1) experimental; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release
|
||||||
|
|
||||||
|
-- Jeremy Bicha <jbicha@ubuntu.com> Sun, 21 Aug 2022 10:59:20 -0400
|
||||||
|
|
||||||
|
gnome-shell-extensions (42.3-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release (LP: #1981606)
|
||||||
|
|
||||||
|
-- Jeremy Bicha <jbicha@ubuntu.com> Wed, 13 Jul 2022 17:49:05 +0200
|
||||||
|
|
||||||
|
gnome-shell-extensions (42.2-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release
|
||||||
|
|
||||||
|
-- Jeremy Bicha <jbicha@ubuntu.com> Fri, 03 Jun 2022 09:23:28 -0400
|
||||||
|
|
||||||
|
gnome-shell-extensions (42.1-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release (LP: #1972365)
|
||||||
|
|
||||||
|
-- Jeremy Bicha <jbicha@ubuntu.com> Mon, 09 May 2022 08:09:32 -0400
|
||||||
|
|
||||||
|
gnome-shell-extensions (42.0-2) unstable; urgency=medium
|
||||||
|
|
||||||
|
* Release to unstable
|
||||||
|
|
||||||
|
-- Jeremy Bicha <jbicha@ubuntu.com> Mon, 28 Mar 2022 11:18:12 -0400
|
||||||
|
|
||||||
|
gnome-shell-extensions (42.0-1) experimental; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release
|
||||||
|
|
||||||
|
-- Jeremy Bicha <jeremy.bicha@canonical.com> Mon, 14 Mar 2022 11:30:18 -0400
|
||||||
|
|
||||||
|
gnome-shell-extensions (42~rc-1) experimental; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release
|
||||||
|
|
||||||
|
-- Jeremy Bicha <jeremy.bicha@canonical.com> Tue, 08 Mar 2022 17:54:41 -0500
|
||||||
|
|
||||||
|
gnome-shell-extensions (42~beta-1) experimental; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release:
|
||||||
|
- Use libadwaita for preferences
|
||||||
|
- window-list: Fix on-screen keyboard
|
||||||
|
- native-window-placement: Fix distorted layout in app grid
|
||||||
|
* debian/control: Depend on libadwaita and gtk-4 (instead of gtk-3)
|
||||||
|
* debian/patches: Drop applied upstream
|
||||||
|
|
||||||
|
-- Marco Trevisan (Treviño) <marco@ubuntu.com> Wed, 23 Feb 2022 07:35:20 +0100
|
||||||
|
|
||||||
|
gnome-shell-extensions (41.1-2) unstable; urgency=medium
|
||||||
|
|
||||||
|
* Team upload
|
||||||
|
* d/p/meson-Drop-unused-argument-for-i18n.merge_file.patch:
|
||||||
|
Backport patch from upstream to fix FBTFS with Meson 0.61
|
||||||
|
(Closes: #1005534)
|
||||||
|
|
||||||
|
-- Simon McVittie <smcv@debian.org> Tue, 15 Feb 2022 11:18:30 +0000
|
||||||
|
|
||||||
|
gnome-shell-extensions (41.1-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release
|
||||||
|
|
||||||
|
-- Jeremy Bicha <jbicha@debian.org> Sun, 12 Dec 2021 20:30:17 -0500
|
||||||
|
|
||||||
|
gnome-shell-extensions (41.0-2) unstable; urgency=medium
|
||||||
|
|
||||||
|
* Team upload
|
||||||
|
* Upload to unstable
|
||||||
|
|
||||||
|
-- Simon McVittie <smcv@debian.org> Sat, 16 Oct 2021 20:06:04 +0100
|
||||||
|
|
||||||
|
gnome-shell-extensions (41.0-1) experimental; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release
|
||||||
|
* debian/control.in: Bump minimum meson to 0.53.0
|
||||||
|
* Bump Standards-Version to 4.6.0
|
||||||
|
|
||||||
|
-- Jeremy Bicha <jbicha@debian.org> Sun, 10 Oct 2021 17:04:15 -0400
|
||||||
|
|
||||||
|
gnome-shell-extensions (40.4-3) unstable; urgency=medium
|
||||||
|
|
||||||
|
* Team upload
|
||||||
|
* Release to unstable (transition: #992870)
|
||||||
|
|
||||||
|
-- Simon McVittie <smcv@debian.org> Sat, 11 Sep 2021 21:52:59 +0100
|
||||||
|
|
||||||
|
gnome-shell-extensions (40.4-2) experimental; urgency=medium
|
||||||
|
|
||||||
|
[ Jeremy Bicha ]
|
||||||
|
* New upstream release
|
||||||
|
* debian/copyright: Add gnome-classic.css to Files-Excluded
|
||||||
|
* Revert "debian/control: Don't build depend on sassc"
|
||||||
|
* This ensures we compile the CSS file from source.
|
||||||
|
|
||||||
|
[ Marco Trevisan (Treviño) ]
|
||||||
|
* debian/control: Support pre-release versions of gnome-shell
|
||||||
|
|
||||||
|
-- Jeremy Bicha <jbicha@debian.org> Sun, 29 Aug 2021 09:16:04 -0400
|
||||||
|
|
||||||
|
gnome-shell-extensions (40.1-1) experimental; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release
|
||||||
|
* debian/control:
|
||||||
|
- Update runtime dependencies to match code.
|
||||||
|
Found grepping code via:
|
||||||
|
grep "imports\.gi" --include "*.js" -rh -B2 . \
|
||||||
|
| grep -o "\b[A-Z][A-Za-z]\+\b" | sed "s/,\?\s*$//g" | sort -u
|
||||||
|
- Don't build depend on sassc.
|
||||||
|
Since we compile from tarball, this is not needed anymore given that
|
||||||
|
compiled css are provided already.
|
||||||
|
- Build-depend on dh-sequence-gnome 0.22.
|
||||||
|
It's the first version that supports new GNOME versioning schema.
|
||||||
|
|
||||||
|
-- Marco Trevisan (Treviño) <marco@ubuntu.com> Sun, 30 May 2021 20:05:13 +0200
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.38.2-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* Team upload
|
||||||
|
* New upstream release
|
||||||
|
* Standards-Version: 4.5.1 (no changes required)
|
||||||
|
* d/gbp.conf: Use upstream/3.38.x branch.
|
||||||
|
Version 40~alpha was already released upstream.
|
||||||
|
|
||||||
|
-- Simon McVittie <smcv@debian.org> Thu, 03 Dec 2020 10:17:58 +0000
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.38.1-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release
|
||||||
|
* Recommend gnome-shell-extension-prefs instead of gnome-tweaks
|
||||||
|
|
||||||
|
-- Jeremy Bicha <jbicha@debian.org> Tue, 06 Oct 2020 17:44:30 -0400
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.38.0-2) unstable; urgency=medium
|
||||||
|
|
||||||
|
* Team upload
|
||||||
|
* Revert "debian/watch: Watch for unstable releases"
|
||||||
|
* Release to unstable
|
||||||
|
|
||||||
|
-- Simon McVittie <smcv@debian.org> Fri, 25 Sep 2020 23:00:58 +0100
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.38.0-1) experimental; urgency=medium
|
||||||
|
|
||||||
|
* Team upload
|
||||||
|
* New upstream release
|
||||||
|
- Translation updates
|
||||||
|
* d/upstream/metadata: Add
|
||||||
|
* Update standards version to 4.5.0, no changes needed
|
||||||
|
* Fix gnome-classic regression in 3.37.91-1.
|
||||||
|
gnome-session no longer takes the `--session gnome-classic` argument
|
||||||
|
when running in classic mode.
|
||||||
|
|
||||||
|
-- Simon McVittie <smcv@debian.org> Tue, 22 Sep 2020 11:49:24 +0100
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.37.91-1) experimental; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release:
|
||||||
|
- drive-menu: Emphasize eject buttons
|
||||||
|
- user-theme: Add preference dialog
|
||||||
|
- window-list:
|
||||||
|
+ Fix inconsistent state in preference dialog
|
||||||
|
+ auto-move: Modernize preference dialogs
|
||||||
|
- workspace-indicator: Overhaul preference dialog
|
||||||
|
- user-theme: Support session mode styles
|
||||||
|
- Adjust to gnome-shell changes
|
||||||
|
* debian/patches: Refresh
|
||||||
|
* debian/control: B-D on debhelper 13
|
||||||
|
* debian/rules: Don't override dh_missing equal default behavior
|
||||||
|
* debian/control: Remove useless dependency on clutter gir
|
||||||
|
|
||||||
|
-- Marco Trevisan (Treviño) <marco@ubuntu.com> Thu, 27 Aug 2020 17:39:42 +0200
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.36.2-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release
|
||||||
|
|
||||||
|
-- Laurent Bigonville <bigon@debian.org> Sun, 03 May 2020 10:02:18 +0200
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.36.1-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* Team upload
|
||||||
|
* New upstream release
|
||||||
|
- Update Ukrainian translation
|
||||||
|
- Update Gnome Shell CSS
|
||||||
|
* Upload to unstable (part of transition: #954422)
|
||||||
|
|
||||||
|
-- Simon McVittie <smcv@debian.org> Fri, 10 Apr 2020 15:12:29 +0100
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.36.0-1) experimental; urgency=medium
|
||||||
|
|
||||||
|
* New upstream translation release
|
||||||
|
|
||||||
|
-- Iain Lane <laney@debian.org> Mon, 16 Mar 2020 12:39:02 +0000
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.35.91-1) experimental; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release
|
||||||
|
- Fixes and adjustments to latest gnome-shell
|
||||||
|
|
||||||
|
-- Marco Trevisan (Treviño) <marco@ubuntu.com> Mon, 24 Feb 2020 18:29:29 +0000
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.34.2-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release
|
||||||
|
* debian/control.in: Bump Standards-Version to 4.4.1 (no further changes)
|
||||||
|
|
||||||
|
-- Laurent Bigonville <bigon@debian.org> Mon, 30 Dec 2019 00:51:13 +0100
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.34.1-2) unstable; urgency=high
|
||||||
|
|
||||||
|
* New upstream release
|
||||||
|
- Fix GNOME Classic session's compatibility with gnome-setting-daemon 3.34
|
||||||
|
|
||||||
|
-- Jeremy Bicha <jbicha@debian.org> Tue, 08 Oct 2019 22:49:14 -0400
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.34.0-2) unstable; urgency=medium
|
||||||
|
|
||||||
|
* Team upload.
|
||||||
|
* Upload to unstable.
|
||||||
|
|
||||||
|
-- Andreas Henriksson <andreas@fatal.se> Mon, 30 Sep 2019 17:27:38 +0200
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.34.0-1) experimental; urgency=medium
|
||||||
|
|
||||||
|
* New upstream translation release
|
||||||
|
|
||||||
|
-- Iain Lane <laney@debian.org> Tue, 10 Sep 2019 10:59:31 +0100
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.33.92-1) experimental; urgency=medium
|
||||||
|
|
||||||
|
* New upstream bugfix / translation releases
|
||||||
|
|
||||||
|
-- Iain Lane <laney@debian.org> Thu, 05 Sep 2019 18:22:14 +0100
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.33.90-1) experimental; urgency=medium
|
||||||
|
|
||||||
|
[ Marco Trevisan (Treviño) ]
|
||||||
|
* New upstream release
|
||||||
|
+ window-list: Support showing windows from all workspaces
|
||||||
|
+ Make GNOME Classic more classic:
|
||||||
|
- Disable GNOME 3 overview
|
||||||
|
- Add window picker button to window list
|
||||||
|
- Style improvements and fixes
|
||||||
|
- Support horizontal workspace layout in window list
|
||||||
|
- Add draggable previews to window list workspace switcher
|
||||||
|
- Arrange workspaces horizontally
|
||||||
|
+ workspace-indicator: Support horizontal workspace layout
|
||||||
|
+ workspace-indicator: Add draggable previews
|
||||||
|
+ Fix windowsNavigator extension after ES6 port
|
||||||
|
+ screenshot-window-sizer: Add phone screenshot sizes
|
||||||
|
|
||||||
|
[ Iain Lane ]
|
||||||
|
* rules: Build all extensions via the upstream build system. We don't need
|
||||||
|
to hardcode the list to build, as the build system provides a way to build
|
||||||
|
'all' extensions.
|
||||||
|
* rules: Build with --fail-missing
|
||||||
|
* compat, control, rules: Move to compat 12 and specifying via build-deps
|
||||||
|
|
||||||
|
-- Iain Lane <laney@debian.org> Tue, 13 Aug 2019 11:59:22 +0100
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.32.0-1) experimental; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release
|
||||||
|
|
||||||
|
-- Iain Lane <laney@debian.org> Tue, 12 Mar 2019 16:34:14 +0000
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.31.92-1) experimental; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release
|
||||||
|
|
||||||
|
-- Iain Lane <laney@debian.org> Wed, 06 Mar 2019 15:40:48 +0000
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.31.90-1) experimental; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release
|
||||||
|
+ Misc. bug fixes and cleanups
|
||||||
|
+ Remove obsolete alternate-tab extension
|
||||||
|
+ Adjust to gnome-shell changes
|
||||||
|
* debian/watch: Watch for unstable releases
|
||||||
|
* rules: alternate-tab is dropped; stop trying to enable it
|
||||||
|
|
||||||
|
-- Iain Lane <laney@debian.org> Thu, 21 Feb 2019 10:33:12 +0000
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.30.1-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* Team upload
|
||||||
|
* New upstream release
|
||||||
|
* Bump Standards-Version to 4.2.1
|
||||||
|
* d/p/gnome-session-classic-wrapper-script.patch:
|
||||||
|
Re-word to avoid a Lintian warning
|
||||||
|
|
||||||
|
-- Simon McVittie <smcv@debian.org> Fri, 02 Nov 2018 09:26:47 +0000
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.30.0-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release
|
||||||
|
* Release to unstable
|
||||||
|
|
||||||
|
-- Jeremy Bicha <jbicha@debian.org> Wed, 05 Sep 2018 12:34:40 -0400
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.29.91-1) experimental; urgency=medium
|
||||||
|
|
||||||
|
* Team upload
|
||||||
|
* New upstream development release
|
||||||
|
* Bump Standards-Version to 4.2.0
|
||||||
|
* Sort dependency lists (wrap-and-sort -a)
|
||||||
|
* d/copyright: Remove unnecessary sentence fragment
|
||||||
|
* d/p/series: Remove commented-out line
|
||||||
|
|
||||||
|
-- Simon McVittie <smcv@debian.org> Mon, 20 Aug 2018 20:27:57 +0100
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.29.90-1) experimental; urgency=medium
|
||||||
|
|
||||||
|
* Team upload
|
||||||
|
* New upstream development release
|
||||||
|
|
||||||
|
-- Simon McVittie <smcv@debian.org> Thu, 02 Aug 2018 10:46:44 +0100
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.29.3+really3.29.3-1) experimental; urgency=medium
|
||||||
|
|
||||||
|
* Team upload
|
||||||
|
* d/watch: Watch for development versions
|
||||||
|
* Re-upload to experimental with a higher version than
|
||||||
|
3.29.3+really3.28.1-1, which reverted the incorrect upload of the
|
||||||
|
previous version to unstable
|
||||||
|
|
||||||
|
-- Simon McVittie <smcv@debian.org> Fri, 27 Jul 2018 23:56:10 +0100
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.29.3-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* Team upload
|
||||||
|
|
||||||
|
[ Arnaud Rebillout ]
|
||||||
|
* New upstream release
|
||||||
|
|
||||||
|
[ Simon McVittie ]
|
||||||
|
* Bump Standards-Version to 4.1.5
|
||||||
|
* Set Rules-Requires-Root to no
|
||||||
|
|
||||||
|
-- Simon McVittie <smcv@debian.org> Fri, 27 Jul 2018 09:37:34 +0100
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.28.1-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release
|
||||||
|
* Bump Standards-Version to 4.1.4
|
||||||
|
|
||||||
|
-- Jeremy Bicha <jbicha@debian.org> Mon, 14 May 2018 21:51:46 -0400
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.28.0-2) unstable; urgency=medium
|
||||||
|
|
||||||
|
* Fix typo in configure flag that resulted in missing
|
||||||
|
auto-move-windows, native-window-placement, & user-theme extensions
|
||||||
|
|
||||||
|
-- Jeremy Bicha <jbicha@debian.org> Mon, 19 Mar 2018 18:20:53 -0400
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.28.0-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release
|
||||||
|
|
||||||
|
-- Jeremy Bicha <jbicha@debian.org> Sun, 18 Mar 2018 20:17:17 -0400
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.27.92-2) unstable; urgency=medium
|
||||||
|
|
||||||
|
* Release to unstable
|
||||||
|
|
||||||
|
-- Jeremy Bicha <jbicha@debian.org> Sat, 10 Mar 2018 19:37:45 -0500
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.27.92-1) experimental; urgency=medium
|
||||||
|
|
||||||
|
[ Jeremy Bicha ]
|
||||||
|
* New upstream release candidate
|
||||||
|
* Drop explicit dependency on mutter's gir. gnome-shell-extensions depends
|
||||||
|
on gnome-shell which depends on the gir. Dropping it will make transitions
|
||||||
|
easier.
|
||||||
|
|
||||||
|
[ Simon McVittie ]
|
||||||
|
* Recommend gnome-tweaks instead of transitional gnome-tweak-tool
|
||||||
|
|
||||||
|
-- Jeremy Bicha <jbicha@debian.org> Mon, 05 Mar 2018 21:02:01 -0500
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.27.91-1) experimental; urgency=medium
|
||||||
|
|
||||||
|
* New upstream development release
|
||||||
|
* Build with meson
|
||||||
|
* Build-Depend on sassc
|
||||||
|
* Bump debhelper compat to 11
|
||||||
|
* Drop places-menu-Don-t-force-dispose-of-uninitialized-proxies.patch &
|
||||||
|
dont-require-nautilus-classic.patch: Applied in new release
|
||||||
|
|
||||||
|
-- Jeremy Bicha <jbicha@debian.org> Fri, 23 Feb 2018 19:49:59 -0500
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.26.2-3) unstable; urgency=medium
|
||||||
|
|
||||||
|
* Team upload
|
||||||
|
|
||||||
|
[ Jeremy Bicha ]
|
||||||
|
* Update Vcs fields for migration to https://salsa.debian.org/
|
||||||
|
|
||||||
|
[ Simon McVittie ]
|
||||||
|
* d/patches: Re-export with gbp pq export
|
||||||
|
* d/p/places-menu-Don-t-force-dispose-of-uninitialized-proxies.patch:
|
||||||
|
Take patch from upstream to avoid frequent tracebacks from the Places
|
||||||
|
menu with gjs >= 1.50.2-3 (Closes: #888608)
|
||||||
|
|
||||||
|
-- Simon McVittie <smcv@debian.org> Tue, 30 Jan 2018 09:15:54 +0000
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.26.2-2) unstable; urgency=medium
|
||||||
|
|
||||||
|
* Update Vcs fields for conversion to git
|
||||||
|
* Add debian/gbp.conf
|
||||||
|
* Bump Standards-Version to 4.1.2
|
||||||
|
|
||||||
|
-- Jeremy Bicha <jbicha@debian.org> Fri, 15 Dec 2017 15:19:14 -0500
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.26.2-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release
|
||||||
|
|
||||||
|
-- Michael Biebl <biebl@debian.org> Sun, 05 Nov 2017 20:17:03 +0100
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.26.1-2) unstable; urgency=medium
|
||||||
|
|
||||||
|
* Release to unstable
|
||||||
|
* Bump Standards-Version to 4.1.1
|
||||||
|
|
||||||
|
-- Jeremy Bicha <jbicha@debian.org> Fri, 13 Oct 2017 16:49:30 -0400
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.26.1-1) experimental; urgency=medium
|
||||||
|
|
||||||
|
* Team upload
|
||||||
|
* New upstream stable release
|
||||||
|
|
||||||
|
-- Simon McVittie <smcv@debian.org> Fri, 06 Oct 2017 11:01:11 +0100
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.26.0-1) experimental; urgency=medium
|
||||||
|
|
||||||
|
* Team upload
|
||||||
|
* New upstream stable release
|
||||||
|
|
||||||
|
-- Simon McVittie <smcv@debian.org> Wed, 13 Sep 2017 11:33:19 +0100
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.25.91-1) experimental; urgency=medium
|
||||||
|
|
||||||
|
* Team upload
|
||||||
|
* New upstream release, for GNOME Shell 3.25.91
|
||||||
|
- d/p/adapt-to-gsd324.patch: Drop, applied upstream
|
||||||
|
- Switch dependency to gir1.2-mutter-1
|
||||||
|
|
||||||
|
-- Simon McVittie <smcv@debian.org> Tue, 05 Sep 2017 16:43:01 +0100
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.22.2-2) unstable; urgency=medium
|
||||||
|
|
||||||
|
* Add adapt-to-gsd324.patch (Closes: #869948):
|
||||||
|
- Adjust gnome-session file for gnome-settings-daemon 3.24
|
||||||
|
* debian/control.in:
|
||||||
|
- Bump Standards-Version to 4.0.0
|
||||||
|
- Explicitly depend on gnome-settings-daemon >= 3.24
|
||||||
|
- Drop version from gnome-tweak-tool recommends
|
||||||
|
- Depend on gnome-session-bin instead of gnome-session (LP: #1702832)
|
||||||
|
|
||||||
|
-- Jeremy Bicha <jbicha@ubuntu.com> Sun, 06 Aug 2017 17:38:06 -0400
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.22.2-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
|
||||||
|
-- Michael Biebl <biebl@debian.org> Thu, 10 Nov 2016 19:36:44 +0100
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.22.1-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
|
||||||
|
-- Michael Biebl <biebl@debian.org> Tue, 11 Oct 2016 17:58:31 +0200
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.22.0-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
|
||||||
|
-- Michael Biebl <biebl@debian.org> Tue, 20 Sep 2016 01:59:50 +0200
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.21.92-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream development release.
|
||||||
|
* Replace Build-Depends gnome-common with pkg-config and gettext.
|
||||||
|
|
||||||
|
-- Michael Biebl <biebl@debian.org> Tue, 13 Sep 2016 22:13:19 +0200
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.21.91-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream beta release.
|
||||||
|
|
||||||
|
-- Andreas Henriksson <andreas@fatal.se> Tue, 30 Aug 2016 19:57:32 +0200
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.21.90-1) experimental; urgency=medium
|
||||||
|
|
||||||
|
[ Andreas Henriksson ]
|
||||||
|
* New upstream beta release.
|
||||||
|
* Update build-dependencies according to configure.ac changes:
|
||||||
|
- drop intltool, now gettext is used instead.
|
||||||
|
|
||||||
|
[ Jeremy Bicha ]
|
||||||
|
* Convert from cdbs to dh
|
||||||
|
* Add debian/docs to install NEWS and README
|
||||||
|
* Bump dh compat to 10
|
||||||
|
* Update Vcs fields
|
||||||
|
* Refresh patches
|
||||||
|
|
||||||
|
-- Andreas Henriksson <andreas@fatal.se> Sun, 21 Aug 2016 05:36:17 +0200
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.21.4-1) experimental; urgency=medium
|
||||||
|
|
||||||
|
* New upstream development release.
|
||||||
|
* Stop hard-coding Victor Seva in the Uploaders field
|
||||||
|
|
||||||
|
-- Andreas Henriksson <andreas@fatal.se> Fri, 12 Aug 2016 16:28:33 +0200
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.20.1-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
* Bump Standards-Version to 3.9.8.
|
||||||
|
|
||||||
|
-- Michael Biebl <biebl@debian.org> Wed, 11 May 2016 15:21:35 +0200
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.20.0-2) unstable; urgency=medium
|
||||||
|
|
||||||
|
* Upload to unstable.
|
||||||
|
|
||||||
|
-- Michael Biebl <biebl@debian.org> Sun, 17 Apr 2016 00:25:25 +0200
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.20.0-1) experimental; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
|
||||||
|
-- Andreas Henriksson <andreas@fatal.se> Fri, 25 Mar 2016 10:48:00 +0100
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.19.92-1) experimental; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
* Update dont-require-nautilus-classic.patch to apply.
|
||||||
|
|
||||||
|
-- Andreas Henriksson <andreas@fatal.se> Thu, 17 Mar 2016 12:51:13 +0100
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.18.4-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
* Bump Standards-Version to 3.9.7.
|
||||||
|
|
||||||
|
-- Michael Biebl <biebl@debian.org> Sun, 06 Mar 2016 22:38:57 +0100
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.18.3-2) unstable; urgency=medium
|
||||||
|
|
||||||
|
* Add Breaks/Replaces gnome-shell-common (<< 3.18) (Closes: #808906)
|
||||||
|
- Helps upgrades from Jessie by allowing overwriting
|
||||||
|
/usr/share/gnome-shell/theme/calendar-today.svg et.al.
|
||||||
|
which was previously shipped in gnome-shell-common.
|
||||||
|
|
||||||
|
-- Andreas Henriksson <andreas@fatal.se> Wed, 10 Feb 2016 01:24:42 +0100
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.18.3-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
|
||||||
|
-- Michael Biebl <biebl@debian.org> Thu, 14 Jan 2016 22:49:16 +0100
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.18.2-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
|
||||||
|
-- Michael Biebl <biebl@debian.org> Fri, 13 Nov 2015 00:04:09 +0100
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.18.1-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
|
||||||
|
-- Michael Biebl <biebl@debian.org> Fri, 16 Oct 2015 22:09:01 +0200
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.18.0-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
|
||||||
|
-- Laurent Bigonville <bigon@debian.org> Sun, 11 Oct 2015 16:29:18 +0200
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.17.92-1) experimental; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release candidate.
|
||||||
|
|
||||||
|
-- Andreas Henriksson <andreas@fatal.se> Fri, 18 Sep 2015 17:28:06 +0200
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.16.2-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
[ Emilio Pozuelo Monfort ]
|
||||||
|
* debian/gnome-shell-extensions.gsettings-override:
|
||||||
|
+ Dropped, no longer needed as the enabled extension no longer exists.
|
||||||
|
Thanks Artur Rona for noticing. (Closes: #782747)
|
||||||
|
|
||||||
|
[ Michael Biebl ]
|
||||||
|
* New upstream release.
|
||||||
|
* Update Homepage.
|
||||||
|
* Bump debhelper compatibility level to 9.
|
||||||
|
|
||||||
|
-- Michael Biebl <biebl@debian.org> Thu, 02 Jul 2015 19:13:32 +0200
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.16.1-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
* debian/control.in,
|
||||||
|
debian/rules:
|
||||||
|
+ The system monitor extension was removed. Drop the libgtop
|
||||||
|
build and runtime dependencies and stop enabling it.
|
||||||
|
* debian/patches/apps-center-labels.patch,
|
||||||
|
debian/patches/window-list-pointerInNotification.patch,
|
||||||
|
debian/patches/menu-arrows-icons.patch:
|
||||||
|
+ Dropped, merged upstream.
|
||||||
|
* debian/patches/dont-require-nautilus-classic.patch:
|
||||||
|
+ Updated for the new version.
|
||||||
|
|
||||||
|
-- Emilio Pozuelo Monfort <pochu@debian.org> Sun, 14 Jun 2015 15:23:59 +0200
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.14.2-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream bugfix release.
|
||||||
|
* menu-arrows-icons: new patch. Make arrows consistent with the rest
|
||||||
|
of the shell.
|
||||||
|
* apps-center-labels.patch: patch from upstream git. Center labels
|
||||||
|
vertically in the applications menu.
|
||||||
|
* window-list-pointerInNotification.patch: patch from upstream git.
|
||||||
|
Update window-list extension for an older shell API change.
|
||||||
|
|
||||||
|
-- Josselin Mouette <joss@debian.org> Sun, 30 Nov 2014 16:06:59 +0100
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.14.1-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
* debian/control.in: Bump Standards-Version to 3.9.6 (no further changes)
|
||||||
|
* Add missing dependencies against gir packages, including gir1.2-gmenu-3.0,
|
||||||
|
this should fix the apps-menu extension for some people (Closes: #765460).
|
||||||
|
|
||||||
|
-- Laurent Bigonville <bigon@debian.org> Sun, 19 Oct 2014 21:17:58 +0200
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.14.0-2) unstable; urgency=medium
|
||||||
|
|
||||||
|
* Drop xrandr from EXTENSIONS_DISABLED, this extension was removed
|
||||||
|
upstream.
|
||||||
|
* Add new screenshot-window-sizer extension to EXTENSIONS_ENABLED.
|
||||||
|
|
||||||
|
-- Michael Biebl <biebl@debian.org> Wed, 24 Sep 2014 01:15:32 +0200
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.14.0-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* debian/watch: only scan for stable releases.
|
||||||
|
* New upstream release.
|
||||||
|
* Upload to unstable.
|
||||||
|
|
||||||
|
-- Andreas Henriksson <andreas@fatal.se> Tue, 23 Sep 2014 15:46:30 +0200
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.13.91-1) experimental; urgency=medium
|
||||||
|
|
||||||
|
* New upstream development release.
|
||||||
|
|
||||||
|
-- Andreas Henriksson <andreas@fatal.se> Sat, 06 Sep 2014 11:16:39 -0700
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.12.2-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
* Bump Standards-Version to 3.9.5
|
||||||
|
* Upload to unstable.
|
||||||
|
|
||||||
|
-- Andreas Henriksson <andreas@fatal.se> Tue, 15 Jul 2014 00:06:09 +0200
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.12.0-1) experimental; urgency=low
|
||||||
|
|
||||||
|
[ Jean Schurger ]
|
||||||
|
* New upstream release (3.10.1)
|
||||||
|
* debian/rules: remove one of the 'windowsNavigator' extension listed twice
|
||||||
|
and the 'alternative-system-menu' extension (does not exists anymore)
|
||||||
|
* debian/copyright: Update 'Format:' line
|
||||||
|
|
||||||
|
[ Andreas Henriksson ]
|
||||||
|
* New upstream release (3.12.0)
|
||||||
|
* debian/local/gnome-session-classic,
|
||||||
|
debian/patches/gnome-session-classic-wrapper-script.patch:
|
||||||
|
- update script to include new GNOME_SHELL_SESSION_MODE env variable
|
||||||
|
and update patch to apply again.
|
||||||
|
|
||||||
|
-- Andreas Henriksson <andreas@fatal.se> Fri, 04 Apr 2014 21:43:18 +0200
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.8.4-2) unstable; urgency=low
|
||||||
|
|
||||||
|
* Upload to unstable.
|
||||||
|
|
||||||
|
-- Emilio Pozuelo Monfort <pochu@debian.org> Sun, 13 Oct 2013 18:11:33 +0200
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.8.4-1) experimental; urgency=low
|
||||||
|
|
||||||
|
[ Jeremy Bicha ]
|
||||||
|
* New upstream release
|
||||||
|
* Dropped patches applied in new version:
|
||||||
|
- fix-hibernate.patch
|
||||||
|
- fix-applications-menu-resolution-change.patch
|
||||||
|
- look-in-data-home-for-themes.patch
|
||||||
|
|
||||||
|
[ Michael Biebl ]
|
||||||
|
* Add a wrapper script to start the GNOME Classic session as currently
|
||||||
|
Xsession doesn't allow to run gnome-session with custom arguments due to
|
||||||
|
#653327.
|
||||||
|
|
||||||
|
-- Michael Biebl <biebl@debian.org> Fri, 11 Oct 2013 18:55:23 +0200
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.8.3.1-1) experimental; urgency=low
|
||||||
|
|
||||||
|
[ Jeremy Bicha ]
|
||||||
|
* New upstream release
|
||||||
|
- default-min-max and static-workspaces extensions have been dropped.
|
||||||
|
Use Classic Mode or tweak org.gnome.shell.overrides in dconf-editor
|
||||||
|
* debian/control.in:
|
||||||
|
- Depend on gnome-session 3.8, required for the new Classic mode.
|
||||||
|
- Update homepage
|
||||||
|
* debian/patches/dont-require-nautilus-classic.patch:
|
||||||
|
- Don't require nautilus-classic since it forces desktop icons
|
||||||
|
* debian/patches/fix-applications-menu-resolution-change.patch:
|
||||||
|
- Backport commit to not break applications menu when screen resolution
|
||||||
|
changes
|
||||||
|
* debian/patches/fix-hibernate.patch:
|
||||||
|
- Backport patch to fix checking whether hibernate is allowed
|
||||||
|
* debian/patches/look-in-data-home-for-themes.patch:
|
||||||
|
- Backport commit to also look in XDG_DATA_HOME (usually ~/.local/share/)
|
||||||
|
for user themes
|
||||||
|
* debian/rules:
|
||||||
|
- Run autoreconf
|
||||||
|
|
||||||
|
-- Andreas Henriksson <andreas@fatal.se> Fri, 16 Aug 2013 20:25:30 +0200
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.8.2-1) experimental; urgency=low
|
||||||
|
|
||||||
|
* Team upload
|
||||||
|
|
||||||
|
[ Victor Seva ]
|
||||||
|
* Recommends gnome-tweak-tool
|
||||||
|
|
||||||
|
[ Jean Schurger ]
|
||||||
|
* New upstream release 3.7.92 (LP: #1017979, #1059152).
|
||||||
|
* Enabled new extensions.
|
||||||
|
* Dropped 'dock' and 'gajim'.
|
||||||
|
* Use ./configure instead of autoreconf.
|
||||||
|
* Bumped Standards-Version to 3.9.4.
|
||||||
|
* Updated Vcs-Svn.
|
||||||
|
* debian/control.in
|
||||||
|
- Added runtime dependency to 'gvfs' (>= 1.16.0).
|
||||||
|
The 'Places' extension rely on a 'gvfs' linked to 'udisks2'.
|
||||||
|
|
||||||
|
[ Simon McVittie ]
|
||||||
|
* New upstream release 3.8.2.
|
||||||
|
* Install the "classic mode"
|
||||||
|
* Enable windowNavigator extension (this means we have everything except
|
||||||
|
example and xrandr, the same as in the Ubuntu gnome3-team's PPA)
|
||||||
|
|
||||||
|
-- Simon McVittie <smcv@debian.org> Thu, 23 May 2013 09:07:23 +0100
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.4.0-2) unstable; urgency=low
|
||||||
|
|
||||||
|
* Upload to unstable.
|
||||||
|
|
||||||
|
-- Michael Biebl <biebl@debian.org> Wed, 30 May 2012 13:22:54 +0200
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.4.0-1) experimental; urgency=low
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
* Remove 01_status-menu_disable_accounts.patch: The alternative-status-menu
|
||||||
|
extension no longer recreates the complete user menu but reuses the one
|
||||||
|
from gnome-shell, so we can't easily get rid of the "Online Accounts" menu
|
||||||
|
entry. We will patch gnome-shell directly instead.
|
||||||
|
* Remove 02-Revert-all-remove-all-GSettings-usage.patch and
|
||||||
|
03-Revert-Remove-all-references-to-localedir-from-metad.patch, no longer
|
||||||
|
required.
|
||||||
|
* Bump Standards-Version to 3.9.3
|
||||||
|
|
||||||
|
-- Michael Biebl <biebl@debian.org> Mon, 21 May 2012 00:24:56 +0200
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.2.3-1) unstable; urgency=low
|
||||||
|
|
||||||
|
[ Josselin Mouette ]
|
||||||
|
* gnome-shell-extensions.gsettings-override: enable the alternative
|
||||||
|
status menu by default. Closes: #648112.
|
||||||
|
* Use ${gnome:Version} to generate strict dependencies, it’s very
|
||||||
|
unlikely that extensions remain compatible after a major upgrade.
|
||||||
|
|
||||||
|
[ Michael Biebl ]
|
||||||
|
* Upload to unstable.
|
||||||
|
|
||||||
|
[ Josselin Mouette ]
|
||||||
|
* 01_status-menu_disable_accounts.patch: new patch. Drop the unusable
|
||||||
|
advertisement for Google. It is already available in the control
|
||||||
|
center anyway.
|
||||||
|
|
||||||
|
[ Michael Biebl ]
|
||||||
|
* New upstream release.
|
||||||
|
* Drop patches which have been merged upstream:
|
||||||
|
- debian/patches/upstream/*
|
||||||
|
- debian/patches/fix-*
|
||||||
|
* Refresh 01_status-menu_disable_accounts.patch.
|
||||||
|
* Add 02-Revert-all-remove-all-GSettings-usage.patch: Use GSettings since we
|
||||||
|
install the extensions system-wide.
|
||||||
|
* Use dh-autoreconf to generate the build system.
|
||||||
|
* Add 03-Revert-Remove-all-references-to-localedir-from-metad.patch: Use
|
||||||
|
locales from system-wide location.
|
||||||
|
|
||||||
|
-- Michael Biebl <biebl@debian.org> Sat, 11 Feb 2012 23:28:53 +0100
|
||||||
|
|
||||||
|
gnome-shell-extensions (3.2.0-1) experimental; urgency=low
|
||||||
|
|
||||||
|
[ Victor Seva ]
|
||||||
|
* Initial release (Closes: #627515)
|
||||||
|
Package based on the work by Bilal Akhtar <bilalakhtar@ubuntu.com>
|
||||||
|
* debian/copyright
|
||||||
|
- Added myself
|
||||||
|
- Fixed syntax-error-in-dep5-copyright syntax error
|
||||||
|
* debian/control.in
|
||||||
|
- Added myself as maintainer.
|
||||||
|
- Fix gnome-shell dependency.
|
||||||
|
- Fix gir1.2-gtop-2.0 dependency for systemMonitor ext.
|
||||||
|
* debian/rules
|
||||||
|
- Added uploaders.mk gnome-version.mk includes.
|
||||||
|
- Removed unused variables.
|
||||||
|
* debian/watch added.
|
||||||
|
* No more gnome-shell-extension-* packages.
|
||||||
|
* debian/patches/upstream
|
||||||
|
- patch_967aee7aad2accfb38d91ab56b6c5e91d86a2722.diff
|
||||||
|
popup menu fix
|
||||||
|
- patch_66242aa76a5d59fb4659551575c1fbb42e50b8fb.diff
|
||||||
|
dock fix.
|
||||||
|
- patch_4c5a36e4c0cbe38f2e26b6b3c8b02e88b4b939f7.diff
|
||||||
|
patch_2bba98d6214cffae2eb5cecb9d7c1f6b6d244052.diff
|
||||||
|
systemMonitor: Properly enable/disable
|
||||||
|
* debian/patches
|
||||||
|
- fix_dock_gnome-shell_version.diff
|
||||||
|
- fix_alternate-tab_661281.diff
|
||||||
|
- fix_alternate-tab_gnome-shell_version.diff
|
||||||
|
* debian/rules
|
||||||
|
- EXTENSIONS_ENABLED, EXTENSIONS_DISABLED variables
|
||||||
|
- disabled xrandr-indicator
|
||||||
|
|
||||||
|
[ Michael Biebl ]
|
||||||
|
* debian/watch: Track .xz tarballs.
|
||||||
|
* debian/control.in:
|
||||||
|
- Set pkg-gnome-maintainers@lists.alioth.debian.org as Maintainer and add
|
||||||
|
Victor Seva <linuxmaniac@torreviejawireless.org> to Uploaders.
|
||||||
|
- Wrap (Build-)Depends.
|
||||||
|
- Add Vcs-Svn and Vcs-Browser field.
|
||||||
|
* debian/rules:
|
||||||
|
- Include gnome-get-source.mk.
|
||||||
|
|
||||||
|
-- Michael Biebl <biebl@debian.org> Sat, 12 Nov 2011 18:32:22 +0100
|
||||||
Vendored
+50
@@ -0,0 +1,50 @@
|
|||||||
|
# This file is autogenerated. DO NOT EDIT!
|
||||||
|
#
|
||||||
|
# Modifications should be made to debian/control.in instead.
|
||||||
|
# This file is regenerated automatically in the clean target.
|
||||||
|
Source: gnome-shell-extensions
|
||||||
|
Section: gnome
|
||||||
|
Priority: optional
|
||||||
|
Maintainer: Debian GNOME Maintainers <pkg-gnome-maintainers@lists.alioth.debian.org>
|
||||||
|
Uploaders: Iain Lane <laney@debian.org>, Laurent Bigonville <bigon@debian.org>, Marco Trevisan (Treviño) <marco@ubuntu.com>
|
||||||
|
Build-Depends: debhelper-compat (= 13),
|
||||||
|
dh-sequence-gnome (>= 0.22),
|
||||||
|
libglib2.0-bin,
|
||||||
|
meson (>= 0.58.0),
|
||||||
|
sassc
|
||||||
|
Rules-Requires-Root: no
|
||||||
|
Standards-Version: 4.6.0
|
||||||
|
Vcs-Browser: https://salsa.debian.org/gnome-team/gnome-shell-extensions
|
||||||
|
Vcs-Git: https://salsa.debian.org/gnome-team/gnome-shell-extensions.git
|
||||||
|
Homepage: https://wiki.gnome.org/Projects/GnomeShell/Extensions
|
||||||
|
|
||||||
|
Package: gnome-shell-extensions
|
||||||
|
Architecture: all
|
||||||
|
Depends: gir1.2-adw-1,
|
||||||
|
gir1.2-atk-1.0,
|
||||||
|
gir1.2-glib-2.0,
|
||||||
|
gir1.2-gmenu-3.0,
|
||||||
|
gir1.2-graphene-1.0 (>= 1.10.2),
|
||||||
|
gir1.2-gtk-4.0,
|
||||||
|
gir1.2-pango-1.0,
|
||||||
|
gnome-session-bin (>= 3.8),
|
||||||
|
gnome-settings-daemon (>= 3.24),
|
||||||
|
gnome-shell (<< ${gnome:NextVersion}),
|
||||||
|
gnome-shell (>= ${gnome:Version}),
|
||||||
|
gvfs (>= 1.16.0),
|
||||||
|
${misc:Depends}
|
||||||
|
Recommends: gnome-shell-extension-prefs
|
||||||
|
Replaces: gnome-shell-common (<< 3.18)
|
||||||
|
Breaks: gnome-shell-common (<< 3.18)
|
||||||
|
Description: Extensions to extend functionality of GNOME Shell
|
||||||
|
The GNOME Shell redefines user interactions with the GNOME desktop. In
|
||||||
|
particular, it offers new paradigms for launching applications,
|
||||||
|
accessing documents, and organizing open windows in GNOME. Later, it
|
||||||
|
will introduce a new applets eco-system and offer new solutions for
|
||||||
|
other desktop features, such as notifications and contacts management.
|
||||||
|
The GNOME Shell is intended to replace functions handled by the GNOME
|
||||||
|
Panel and by the window manager in previous versions of GNOME. The GNOME
|
||||||
|
Shell has rich visual effects enabled by new graphical technologies.
|
||||||
|
.
|
||||||
|
GNOME Shell is extensible using extensions. This package contains
|
||||||
|
official GNOME Shell extensions.
|
||||||
Vendored
+46
@@ -0,0 +1,46 @@
|
|||||||
|
Source: gnome-shell-extensions
|
||||||
|
Section: gnome
|
||||||
|
Priority: optional
|
||||||
|
Maintainer: Debian GNOME Maintainers <pkg-gnome-maintainers@lists.alioth.debian.org>
|
||||||
|
Uploaders: @GNOME_TEAM@
|
||||||
|
Build-Depends: debhelper-compat (= 13),
|
||||||
|
dh-sequence-gnome (>= 0.22),
|
||||||
|
libglib2.0-bin,
|
||||||
|
meson (>= 0.58.0),
|
||||||
|
sassc
|
||||||
|
Rules-Requires-Root: no
|
||||||
|
Standards-Version: 4.6.0
|
||||||
|
Vcs-Browser: https://salsa.debian.org/gnome-team/gnome-shell-extensions
|
||||||
|
Vcs-Git: https://salsa.debian.org/gnome-team/gnome-shell-extensions.git
|
||||||
|
Homepage: https://wiki.gnome.org/Projects/GnomeShell/Extensions
|
||||||
|
|
||||||
|
Package: gnome-shell-extensions
|
||||||
|
Architecture: all
|
||||||
|
Depends: gir1.2-adw-1,
|
||||||
|
gir1.2-atk-1.0,
|
||||||
|
gir1.2-glib-2.0,
|
||||||
|
gir1.2-gmenu-3.0,
|
||||||
|
gir1.2-graphene-1.0 (>= 1.10.2),
|
||||||
|
gir1.2-gtk-4.0,
|
||||||
|
gir1.2-pango-1.0,
|
||||||
|
gnome-session-bin (>= 3.8),
|
||||||
|
gnome-settings-daemon (>= 3.24),
|
||||||
|
gnome-shell (<< ${gnome:NextVersion}),
|
||||||
|
gnome-shell (>= ${gnome:Version}),
|
||||||
|
gvfs (>= 1.16.0),
|
||||||
|
${misc:Depends}
|
||||||
|
Recommends: gnome-shell-extension-prefs
|
||||||
|
Replaces: gnome-shell-common (<< 3.18)
|
||||||
|
Breaks: gnome-shell-common (<< 3.18)
|
||||||
|
Description: Extensions to extend functionality of GNOME Shell
|
||||||
|
The GNOME Shell redefines user interactions with the GNOME desktop. In
|
||||||
|
particular, it offers new paradigms for launching applications,
|
||||||
|
accessing documents, and organizing open windows in GNOME. Later, it
|
||||||
|
will introduce a new applets eco-system and offer new solutions for
|
||||||
|
other desktop features, such as notifications and contacts management.
|
||||||
|
The GNOME Shell is intended to replace functions handled by the GNOME
|
||||||
|
Panel and by the window manager in previous versions of GNOME. The GNOME
|
||||||
|
Shell has rich visual effects enabled by new graphical technologies.
|
||||||
|
.
|
||||||
|
GNOME Shell is extensible using extensions. This package contains
|
||||||
|
official GNOME Shell extensions.
|
||||||
Vendored
+30
@@ -0,0 +1,30 @@
|
|||||||
|
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
||||||
|
Upstream-Name: gnome-shell-extensions
|
||||||
|
Upstream-Contact: 2011 Giovanni Campagna <gcampagna@src.gnome.org>
|
||||||
|
Source: https://download.gnome.org/sources/gnome-shell-extensions/
|
||||||
|
Files-Excluded: data/gnome-classic.css
|
||||||
|
Comment: Build that generated file from source
|
||||||
|
|
||||||
|
Files: *
|
||||||
|
Copyright: 2011 Giovanni Campagna <gcampagna@src.gnome.org>
|
||||||
|
License: GPL-2+
|
||||||
|
|
||||||
|
Files: debian/*
|
||||||
|
Copyright:
|
||||||
|
2011 Victor Seva <linuxmaniac@torreviejawireless.org>
|
||||||
|
2011 Bilal Akhtar <bilalakhtar@ubuntu.com>
|
||||||
|
License: GPL-2+
|
||||||
|
|
||||||
|
License: GPL-2+
|
||||||
|
This package is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
.
|
||||||
|
This package is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
.
|
||||||
|
On Debian systems, the complete text of the GNU General
|
||||||
|
Public License version 2 can be found in "/usr/share/common-licenses/GPL-2".
|
||||||
Vendored
+2
@@ -0,0 +1,2 @@
|
|||||||
|
NEWS
|
||||||
|
README.md
|
||||||
Vendored
+17
@@ -0,0 +1,17 @@
|
|||||||
|
[DEFAULT]
|
||||||
|
pristine-tar = True
|
||||||
|
debian-branch = debian/master
|
||||||
|
upstream-branch = upstream/latest
|
||||||
|
|
||||||
|
[buildpackage]
|
||||||
|
sign-tags = True
|
||||||
|
|
||||||
|
[dch]
|
||||||
|
multimaint-merge = True
|
||||||
|
|
||||||
|
[import-orig]
|
||||||
|
postimport = dch -v%(version)s New upstream release; git add debian/changelog; debcommit
|
||||||
|
upstream-vcs-tag = %(version%~%.)s
|
||||||
|
|
||||||
|
[pq]
|
||||||
|
patch-numbers = False
|
||||||
Vendored
+1
@@ -0,0 +1 @@
|
|||||||
|
debian/local/gnome-session-classic usr/bin
|
||||||
+2
@@ -0,0 +1,2 @@
|
|||||||
|
#! /bin/sh
|
||||||
|
env GNOME_SHELL_SESSION_MODE=classic gnome-session "$@"
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
From: Michael Biebl <biebl@debian.org>
|
||||||
|
Date: Tue, 30 Jan 2018 09:04:03 +0000
|
||||||
|
Subject: Use a wrapper script to start GNOME classic session
|
||||||
|
|
||||||
|
Xsession currently doesn't allow passing more then one argument, as it
|
||||||
|
otherwise fails with
|
||||||
|
Xsession: unable to launch "gnome-session --session classic" X session ---
|
||||||
|
"gnome-session --session classic" not found; falling back to default session.
|
||||||
|
|
||||||
|
This is due to [1]. Add a wrapper script to start the GNOME classic session
|
||||||
|
as a workaround. Once [1] is fixed, this should be removed again.
|
||||||
|
|
||||||
|
[1] http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=653327.
|
||||||
|
---
|
||||||
|
data/gnome-classic.desktop.in | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/data/gnome-classic.desktop.in b/data/gnome-classic.desktop.in
|
||||||
|
index 13da2b5..d627655 100644
|
||||||
|
--- a/data/gnome-classic.desktop.in
|
||||||
|
+++ b/data/gnome-classic.desktop.in
|
||||||
|
@@ -1,7 +1,7 @@
|
||||||
|
[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-classic
|
||||||
|
TryExec=gnome-session
|
||||||
|
Type=Application
|
||||||
|
DesktopNames=GNOME-Classic;GNOME;
|
||||||
Vendored
+1
@@ -0,0 +1 @@
|
|||||||
|
gnome-session-classic-wrapper-script.patch
|
||||||
+9
@@ -0,0 +1,9 @@
|
|||||||
|
#!/usr/bin/make -f
|
||||||
|
|
||||||
|
%:
|
||||||
|
dh $@
|
||||||
|
|
||||||
|
override_dh_auto_configure:
|
||||||
|
dh_auto_configure -- \
|
||||||
|
-Dextension_set=all \
|
||||||
|
-Dclassic_mode=true
|
||||||
Vendored
+1
@@ -0,0 +1 @@
|
|||||||
|
3.0 (quilt)
|
||||||
Vendored
+5
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
Bug-Database: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues
|
||||||
|
Bug-Submit: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues/new
|
||||||
|
Repository: https://gitlab.gnome.org/GNOME/gnome-shell-extensions.git
|
||||||
|
Repository-Browse: https://gitlab.gnome.org/GNOME/gnome-shell-extensions
|
||||||
Vendored
+4
@@ -0,0 +1,4 @@
|
|||||||
|
version=4
|
||||||
|
opts="searchmode=plain, uversionmangle=s/\.(alpha|beta|rc)/~$1/, downloadurlmangle=s|cache.json||" \
|
||||||
|
https://download.gnome.org/sources/@PACKAGE@/cache.json \
|
||||||
|
[\d.]+/@PACKAGE@-([\d.]+)@ARCHIVE_EXT@
|
||||||
@@ -1,18 +1,22 @@
|
|||||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||||
/* exported init enable disable */
|
import Atk from 'gi://Atk';
|
||||||
|
import Clutter from 'gi://Clutter';
|
||||||
|
import Gio from 'gi://Gio';
|
||||||
|
import GLib from 'gi://GLib';
|
||||||
|
import GMenu from 'gi://GMenu';
|
||||||
|
import GObject from 'gi://GObject';
|
||||||
|
import Gtk from 'gi://Gtk';
|
||||||
|
import Meta from 'gi://Meta';
|
||||||
|
import Shell from 'gi://Shell';
|
||||||
|
import St from 'gi://St';
|
||||||
|
import {EventEmitter} from 'resource:///org/gnome/shell/misc/signals.js';
|
||||||
|
|
||||||
const {
|
import {Extension, gettext as _} from 'resource:///org/gnome/shell/extensions/extension.js';
|
||||||
Atk, Clutter, Gio, GLib, GMenu, GObject, Gtk, Meta, Shell, St,
|
|
||||||
} = imports.gi;
|
|
||||||
const {EventEmitter} = imports.misc.signals;
|
|
||||||
|
|
||||||
const DND = imports.ui.dnd;
|
import * as DND from 'resource:///org/gnome/shell/ui/dnd.js';
|
||||||
const ExtensionUtils = imports.misc.extensionUtils;
|
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
|
||||||
const Main = imports.ui.main;
|
import * as PanelMenu from 'resource:///org/gnome/shell/ui/panelMenu.js';
|
||||||
const PanelMenu = imports.ui.panelMenu;
|
import * as PopupMenu from 'resource:///org/gnome/shell/ui/popupMenu.js';
|
||||||
const PopupMenu = imports.ui.popupMenu;
|
|
||||||
|
|
||||||
const _ = ExtensionUtils.gettext;
|
|
||||||
|
|
||||||
const appSys = Shell.AppSystem.get_default();
|
const appSys = Shell.AppSystem.get_default();
|
||||||
|
|
||||||
@@ -46,11 +50,8 @@ class ApplicationMenuItem extends PopupMenu.PopupBaseMenuItem {
|
|||||||
this.label_actor = appLabel;
|
this.label_actor = appLabel;
|
||||||
|
|
||||||
let textureCache = St.TextureCache.get_default();
|
let textureCache = St.TextureCache.get_default();
|
||||||
let iconThemeChangedId = textureCache.connect('icon-theme-changed',
|
textureCache.connectObject('icon-theme-changed',
|
||||||
this._updateIcon.bind(this));
|
() => this._updateIcon(), this);
|
||||||
this.connect('destroy', () => {
|
|
||||||
textureCache.disconnect(iconThemeChangedId);
|
|
||||||
});
|
|
||||||
this._updateIcon();
|
this._updateIcon();
|
||||||
|
|
||||||
this._delegate = this;
|
this._delegate = this;
|
||||||
@@ -269,9 +270,7 @@ class DesktopTarget extends EventEmitter {
|
|||||||
|
|
||||||
_setDesktop(desktop) {
|
_setDesktop(desktop) {
|
||||||
if (this._desktop) {
|
if (this._desktop) {
|
||||||
this._desktop.disconnect(this._desktopDestroyedId);
|
this._desktop.disconnectObject(this);
|
||||||
this._desktopDestroyedId = 0;
|
|
||||||
|
|
||||||
delete this._desktop._delegate;
|
delete this._desktop._delegate;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -279,9 +278,9 @@ class DesktopTarget extends EventEmitter {
|
|||||||
this.emit('desktop-changed');
|
this.emit('desktop-changed');
|
||||||
|
|
||||||
if (this._desktop) {
|
if (this._desktop) {
|
||||||
this._desktopDestroyedId = this._desktop.connect('destroy', () => {
|
this._desktop.connectObject('destroy', () => {
|
||||||
this._setDesktop(null);
|
this._setDesktop(null);
|
||||||
});
|
}, this);
|
||||||
this._desktop._delegate = this;
|
this._desktop._delegate = this;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -321,10 +320,7 @@ class DesktopTarget extends EventEmitter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
destroy() {
|
destroy() {
|
||||||
if (this._windowAddedId)
|
global.window_group.disconnectObject(this);
|
||||||
global.window_group.disconnect(this._windowAddedId);
|
|
||||||
this._windowAddedId = 0;
|
|
||||||
|
|
||||||
this._setDesktop(null);
|
this._setDesktop(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -386,15 +382,14 @@ class ApplicationsButton extends PanelMenu.Button {
|
|||||||
this.name = 'panelApplications';
|
this.name = 'panelApplications';
|
||||||
this.label_actor = this._label;
|
this.label_actor = this._label;
|
||||||
|
|
||||||
this._showingId = Main.overview.connect('showing', () => {
|
Main.overview.connectObject(
|
||||||
this.add_accessible_state(Atk.StateType.CHECKED);
|
'showing', () => this.add_accessible_state(Atk.StateType.CHECKED),
|
||||||
});
|
'hiding', () => this.remove_accessible_state(Atk.StateType.CHECKED),
|
||||||
this._hidingId = Main.overview.connect('hiding', () => {
|
this);
|
||||||
this.remove_accessible_state(Atk.StateType.CHECKED);
|
|
||||||
});
|
|
||||||
Main.wm.addKeybinding(
|
Main.wm.addKeybinding(
|
||||||
'apps-menu-toggle-menu',
|
'apps-menu-toggle-menu',
|
||||||
ExtensionUtils.getSettings(),
|
Extension.lookupByURL(import.meta.url).getSettings(),
|
||||||
Meta.KeyBindingFlags.IGNORE_AUTOREPEAT,
|
Meta.KeyBindingFlags.IGNORE_AUTOREPEAT,
|
||||||
Shell.ActionMode.NORMAL | Shell.ActionMode.OVERVIEW,
|
Shell.ActionMode.NORMAL | Shell.ActionMode.OVERVIEW,
|
||||||
() => this.menu.toggle());
|
() => this.menu.toggle());
|
||||||
@@ -410,15 +405,15 @@ class ApplicationsButton extends PanelMenu.Button {
|
|||||||
});
|
});
|
||||||
|
|
||||||
this._tree = new GMenu.Tree({menu_basename: 'applications.menu'});
|
this._tree = new GMenu.Tree({menu_basename: 'applications.menu'});
|
||||||
this._treeChangedId = this._tree.connect('changed',
|
this._tree.connectObject('changed',
|
||||||
this._onTreeChanged.bind(this));
|
() => this._onTreeChanged(), this);
|
||||||
|
|
||||||
this._applicationsButtons = new Map();
|
this._applicationsButtons = new Map();
|
||||||
this.reloadFlag = false;
|
this.reloadFlag = false;
|
||||||
this._createLayout();
|
this._createLayout();
|
||||||
this._display();
|
this._display();
|
||||||
this._installedChangedId = appSys.connect('installed-changed',
|
appSys.connectObject('installed-changed',
|
||||||
this._onTreeChanged.bind(this));
|
() => this._onTreeChanged(), this);
|
||||||
}
|
}
|
||||||
|
|
||||||
_onTreeChanged() {
|
_onTreeChanged() {
|
||||||
@@ -442,11 +437,7 @@ class ApplicationsButton extends PanelMenu.Button {
|
|||||||
_onDestroy() {
|
_onDestroy() {
|
||||||
super._onDestroy();
|
super._onDestroy();
|
||||||
|
|
||||||
Main.overview.disconnect(this._showingId);
|
delete this._tree;
|
||||||
Main.overview.disconnect(this._hidingId);
|
|
||||||
appSys.disconnect(this._installedChangedId);
|
|
||||||
this._tree.disconnect(this._treeChangedId);
|
|
||||||
this._tree = null;
|
|
||||||
|
|
||||||
Main.wm.removeKeybinding('apps-menu-toggle-menu');
|
Main.wm.removeKeybinding('apps-menu-toggle-menu');
|
||||||
|
|
||||||
@@ -677,22 +668,17 @@ class ApplicationsButton extends PanelMenu.Button {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let appsMenuButton;
|
export default class AppsMenuExtension extends Extension {
|
||||||
|
enable() {
|
||||||
|
this._appsMenuButton = new ApplicationsButton();
|
||||||
|
const index = Main.sessionMode.panel.left.indexOf('activities') + 1;
|
||||||
|
Main.panel.addToStatusArea(
|
||||||
|
'apps-menu', this._appsMenuButton, index, 'left');
|
||||||
|
}
|
||||||
|
|
||||||
/** */
|
disable() {
|
||||||
function enable() {
|
Main.panel.menuManager.removeMenu(this._appsMenuButton.menu);
|
||||||
appsMenuButton = new ApplicationsButton();
|
this._appsMenuButton.destroy();
|
||||||
let index = Main.sessionMode.panel.left.indexOf('activities') + 1;
|
delete this._appsMenuButton;
|
||||||
Main.panel.addToStatusArea('apps-menu', appsMenuButton, index, 'left');
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/** */
|
|
||||||
function disable() {
|
|
||||||
Main.panel.menuManager.removeMenu(appsMenuButton.menu);
|
|
||||||
appsMenuButton.destroy();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** */
|
|
||||||
function init() {
|
|
||||||
ExtensionUtils.initTranslations();
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,22 +1,20 @@
|
|||||||
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
||||||
// Start apps on custom workspaces
|
// Start apps on custom workspaces
|
||||||
/* exported init enable disable */
|
|
||||||
|
|
||||||
const {Shell} = imports.gi;
|
import Shell from 'gi://Shell';
|
||||||
|
|
||||||
const ExtensionUtils = imports.misc.extensionUtils;
|
import {Extension} from 'resource:///org/gnome/shell/extensions/extension.js';
|
||||||
const Main = imports.ui.main;
|
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
|
||||||
|
|
||||||
class WindowMover {
|
class WindowMover {
|
||||||
constructor() {
|
constructor(settings) {
|
||||||
this._settings = ExtensionUtils.getSettings();
|
this._settings = settings;
|
||||||
this._appSystem = Shell.AppSystem.get_default();
|
this._appSystem = Shell.AppSystem.get_default();
|
||||||
this._appConfigs = new Map();
|
this._appConfigs = new Map();
|
||||||
this._appData = new Map();
|
this._appData = new Map();
|
||||||
|
|
||||||
this._appsChangedId =
|
this._appSystem.connectObject('installed-changed',
|
||||||
this._appSystem.connect('installed-changed',
|
() => this._updateAppData(), this);
|
||||||
this._updateAppData.bind(this));
|
|
||||||
|
|
||||||
this._settings.connect('changed', this._updateAppConfigs.bind(this));
|
this._settings.connect('changed', this._updateAppConfigs.bind(this));
|
||||||
this._updateAppConfigs();
|
this._updateAppConfigs();
|
||||||
@@ -38,7 +36,7 @@ class WindowMover {
|
|||||||
let removedApps = [...this._appData.keys()]
|
let removedApps = [...this._appData.keys()]
|
||||||
.filter(a => !ids.includes(a.id));
|
.filter(a => !ids.includes(a.id));
|
||||||
removedApps.forEach(app => {
|
removedApps.forEach(app => {
|
||||||
app.disconnect(this._appData.get(app).windowsChangedId);
|
app.disconnectObject(this);
|
||||||
this._appData.delete(app);
|
this._appData.delete(app);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -46,21 +44,14 @@ class WindowMover {
|
|||||||
.map(id => this._appSystem.lookup_app(id))
|
.map(id => this._appSystem.lookup_app(id))
|
||||||
.filter(app => app && !this._appData.has(app));
|
.filter(app => app && !this._appData.has(app));
|
||||||
addedApps.forEach(app => {
|
addedApps.forEach(app => {
|
||||||
let data = {
|
app.connectObject('window-changed',
|
||||||
windowsChangedId: app.connect('windows-changed',
|
this._appWindowsChanged.bind(this), this);
|
||||||
this._appWindowsChanged.bind(this)),
|
this._appData.set(app, {windows: app.get_windows()});
|
||||||
moveWindowsId: 0,
|
|
||||||
windows: app.get_windows(),
|
|
||||||
};
|
|
||||||
this._appData.set(app, data);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
destroy() {
|
destroy() {
|
||||||
if (this._appsChangedId) {
|
this._appSystem.disconnectObject(this);
|
||||||
this._appSystem.disconnect(this._appsChangedId);
|
|
||||||
this._appsChangedId = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this._settings) {
|
if (this._settings) {
|
||||||
this._settings.run_dispose();
|
this._settings.run_dispose();
|
||||||
@@ -105,47 +96,41 @@ class WindowMover {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let prevCheckWorkspaces;
|
export default class AutoMoveExtension extends Extension {
|
||||||
let winMover;
|
enable() {
|
||||||
|
this._prevCheckWorkspaces = Main.wm._workspaceTracker._checkWorkspaces;
|
||||||
/** */
|
Main.wm._workspaceTracker._checkWorkspaces =
|
||||||
function init() {
|
this._getCheckWorkspaceOverride(this._prevCheckWorkspaces);
|
||||||
ExtensionUtils.initTranslations();
|
this._windowMover = new WindowMover(this.getSettings());
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @returns {bool} - false (used as MetaLater handler)
|
|
||||||
*/
|
|
||||||
function myCheckWorkspaces() {
|
|
||||||
let keepAliveWorkspaces = [];
|
|
||||||
let foundNonEmpty = false;
|
|
||||||
for (let i = this._workspaces.length - 1; i >= 0; i--) {
|
|
||||||
if (!foundNonEmpty) {
|
|
||||||
foundNonEmpty = this._workspaces[i].list_windows().some(
|
|
||||||
w => !w.is_on_all_workspaces());
|
|
||||||
} else if (!this._workspaces[i]._keepAliveId) {
|
|
||||||
keepAliveWorkspaces.push(this._workspaces[i]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// make sure the original method only removes empty workspaces at the end
|
disable() {
|
||||||
keepAliveWorkspaces.forEach(ws => (ws._keepAliveId = 1));
|
Main.wm._workspaceTracker._checkWorkspaces = this._prevCheckWorkspaces;
|
||||||
prevCheckWorkspaces.call(this);
|
this._windowMover.destroy();
|
||||||
keepAliveWorkspaces.forEach(ws => delete ws._keepAliveId);
|
delete this._windowMover;
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
_getCheckWorkspaceOverride(originalMethod) {
|
||||||
}
|
/* eslint-disable no-invalid-this */
|
||||||
|
return function () {
|
||||||
/** */
|
const keepAliveWorkspaces = [];
|
||||||
function enable() {
|
let foundNonEmpty = false;
|
||||||
prevCheckWorkspaces = Main.wm._workspaceTracker._checkWorkspaces;
|
for (let i = this._workspaces.length - 1; i >= 0; i--) {
|
||||||
Main.wm._workspaceTracker._checkWorkspaces = myCheckWorkspaces;
|
if (!foundNonEmpty) {
|
||||||
|
foundNonEmpty = this._workspaces[i].list_windows().some(
|
||||||
winMover = new WindowMover();
|
w => !w.is_on_all_workspaces());
|
||||||
}
|
} else if (!this._workspaces[i]._keepAliveId) {
|
||||||
|
keepAliveWorkspaces.push(this._workspaces[i]);
|
||||||
/** */
|
}
|
||||||
function disable() {
|
}
|
||||||
Main.wm._workspaceTracker._checkWorkspaces = prevCheckWorkspaces;
|
|
||||||
winMover.destroy();
|
// make sure the original method only removes empty workspaces at the end
|
||||||
|
keepAliveWorkspaces.forEach(ws => (ws._keepAliveId = 1));
|
||||||
|
originalMethod.call(this);
|
||||||
|
keepAliveWorkspaces.forEach(ws => delete ws._keepAliveId);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
/* eslint-enable no-invalid-this */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
||||||
// Start apps on custom workspaces
|
// Start apps on custom workspaces
|
||||||
/* exported init buildPrefsWidget */
|
|
||||||
|
|
||||||
const {Adw, Gio, GLib, GObject, Gtk} = imports.gi;
|
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';
|
||||||
|
|
||||||
const ExtensionUtils = imports.misc.extensionUtils;
|
import {ExtensionPreferences, gettext as _} from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js';
|
||||||
|
|
||||||
const _ = ExtensionUtils.gettext;
|
|
||||||
|
|
||||||
const SETTINGS_KEY = 'application-list';
|
const SETTINGS_KEY = 'application-list';
|
||||||
|
|
||||||
@@ -59,13 +60,14 @@ class RulesList extends GObject.Object {
|
|||||||
GObject.registerClass(this);
|
GObject.registerClass(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
#settings = ExtensionUtils.getSettings();
|
#settings;
|
||||||
#rules = [];
|
#rules = [];
|
||||||
#changedId;
|
#changedId;
|
||||||
|
|
||||||
constructor() {
|
constructor(settings) {
|
||||||
super();
|
super();
|
||||||
|
|
||||||
|
this.#settings = settings;
|
||||||
this.#changedId =
|
this.#changedId =
|
||||||
this.#settings.connect(`changed::${SETTINGS_KEY}`,
|
this.#settings.connect(`changed::${SETTINGS_KEY}`,
|
||||||
() => this.#sync());
|
() => this.#sync());
|
||||||
@@ -147,12 +149,13 @@ class AutoMoveSettingsWidget extends Adw.PreferencesGroup {
|
|||||||
(self, name, param) => self._rules.changeWorkspace(...param.deepUnpack()));
|
(self, name, param) => self._rules.changeWorkspace(...param.deepUnpack()));
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor() {
|
constructor(settings) {
|
||||||
super({
|
super({
|
||||||
title: _('Workspace Rules'),
|
title: _('Workspace Rules'),
|
||||||
});
|
});
|
||||||
|
|
||||||
this._rules = new RulesList();
|
this._settings = settings;
|
||||||
|
this._rules = new RulesList(this._settings);
|
||||||
|
|
||||||
const store = new Gio.ListStore({item_type: Gio.ListModel});
|
const store = new Gio.ListStore({item_type: Gio.ListModel});
|
||||||
const listModel = new Gtk.FlattenListModel({model: store});
|
const listModel = new Gtk.FlattenListModel({model: store});
|
||||||
@@ -173,7 +176,7 @@ class AutoMoveSettingsWidget extends Adw.PreferencesGroup {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_addNewRule() {
|
_addNewRule() {
|
||||||
const dialog = new NewRuleDialog(this.get_root());
|
const dialog = new NewRuleDialog(this.get_root(), this._settings);
|
||||||
dialog.connect('response', (dlg, id) => {
|
dialog.connect('response', (dlg, id) => {
|
||||||
const appInfo = id === Gtk.ResponseType.OK
|
const appInfo = id === Gtk.ResponseType.OK
|
||||||
? dialog.get_widget().get_app_info() : null;
|
? dialog.get_widget().get_app_info() : null;
|
||||||
@@ -312,13 +315,13 @@ class NewRuleDialog extends Gtk.AppChooserDialog {
|
|||||||
GObject.registerClass(this);
|
GObject.registerClass(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor(parent) {
|
constructor(parent, settings) {
|
||||||
super({
|
super({
|
||||||
transient_for: parent,
|
transient_for: parent,
|
||||||
modal: true,
|
modal: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
this._settings = ExtensionUtils.getSettings();
|
this._settings = settings;
|
||||||
|
|
||||||
this.get_widget().set({
|
this.get_widget().set({
|
||||||
show_all: true,
|
show_all: true,
|
||||||
@@ -338,14 +341,8 @@ class NewRuleDialog extends Gtk.AppChooserDialog {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** */
|
export default class AutoMovePrefs extends ExtensionPreferences {
|
||||||
function init() {
|
getPreferencesWidget() {
|
||||||
ExtensionUtils.initTranslations();
|
return new AutoMoveSettingsWidget(this.getSettings());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @returns {Gtk.Widget} - the prefs widget
|
|
||||||
*/
|
|
||||||
function buildPrefsWidget() {
|
|
||||||
return new AutoMoveSettingsWidget();
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,16 @@
|
|||||||
/* exported init enable disable */
|
|
||||||
// Drive menu extension
|
// Drive menu extension
|
||||||
const {Clutter, Gio, GObject, Shell, St} = imports.gi;
|
import Clutter from 'gi://Clutter';
|
||||||
|
import Gio from 'gi://Gio';
|
||||||
|
import GObject from 'gi://GObject';
|
||||||
|
import Shell from 'gi://Shell';
|
||||||
|
import St from 'gi://St';
|
||||||
|
|
||||||
const ExtensionUtils = imports.misc.extensionUtils;
|
import {Extension, gettext as _} from 'resource:///org/gnome/shell/extensions/extension.js';
|
||||||
const Main = imports.ui.main;
|
|
||||||
const PanelMenu = imports.ui.panelMenu;
|
|
||||||
const PopupMenu = imports.ui.popupMenu;
|
|
||||||
const ShellMountOperation = imports.ui.shellMountOperation;
|
|
||||||
|
|
||||||
const _ = ExtensionUtils.gettext;
|
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
|
||||||
|
import * as PanelMenu from 'resource:///org/gnome/shell/ui/panelMenu.js';
|
||||||
|
import * as PopupMenu from 'resource:///org/gnome/shell/ui/popupMenu.js';
|
||||||
|
import * as ShellMountOperation from 'resource:///org/gnome/shell/ui/shellMountOperation.js';
|
||||||
|
|
||||||
Gio._promisify(Gio.File.prototype, 'query_filesystem_info_async');
|
Gio._promisify(Gio.File.prototype, 'query_filesystem_info_async');
|
||||||
|
|
||||||
@@ -47,19 +49,11 @@ class MountMenuItem extends PopupMenu.PopupBaseMenuItem {
|
|||||||
|
|
||||||
this.hide();
|
this.hide();
|
||||||
|
|
||||||
this._changedId = mount.connect('changed', this._syncVisibility.bind(this));
|
mount.connectObject('changed',
|
||||||
|
() => this._syncVisibility(), this);
|
||||||
this._syncVisibility();
|
this._syncVisibility();
|
||||||
}
|
}
|
||||||
|
|
||||||
_onDestroy() {
|
|
||||||
if (this._changedId) {
|
|
||||||
this.mount.disconnect(this._changedId);
|
|
||||||
this._changedId = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
super.destroy();
|
|
||||||
}
|
|
||||||
|
|
||||||
async _isInteresting() {
|
async _isInteresting() {
|
||||||
if (!this.mount.can_eject() && !this.mount.can_unmount())
|
if (!this.mount.can_eject() && !this.mount.can_unmount())
|
||||||
return false;
|
return false;
|
||||||
@@ -152,12 +146,12 @@ class DriveMenu extends PanelMenu.Button {
|
|||||||
this.add_child(icon);
|
this.add_child(icon);
|
||||||
|
|
||||||
this._monitor = Gio.VolumeMonitor.get();
|
this._monitor = Gio.VolumeMonitor.get();
|
||||||
this._addedId = this._monitor.connect('mount-added',
|
this._monitor.connectObject(
|
||||||
(monitor, mount) => this._addMount(mount));
|
'mount-added', (monitor, mount) => this._addMount(mount),
|
||||||
this._removedId = this._monitor.connect('mount-removed', (monitor, mount) => {
|
'mount-removed', (monitor, mount) => {
|
||||||
this._removeMount(mount);
|
this._removeMount(mount);
|
||||||
this._updateMenuVisibility();
|
this._updateMenuVisibility();
|
||||||
});
|
}, this);
|
||||||
|
|
||||||
this._mounts = [];
|
this._mounts = [];
|
||||||
|
|
||||||
@@ -199,33 +193,16 @@ class DriveMenu extends PanelMenu.Button {
|
|||||||
}
|
}
|
||||||
log('Removing a mount that was never added to the menu');
|
log('Removing a mount that was never added to the menu');
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
_onDestroy() {
|
export default class PlaceMenuExtension extends Extension {
|
||||||
if (this._addedId) {
|
enable() {
|
||||||
this._monitor.disconnect(this._addedId);
|
this._indicator = new DriveMenu();
|
||||||
this._monitor.disconnect(this._removedId);
|
Main.panel.addToStatusArea('drive-menu', this._indicator);
|
||||||
this._addedId = 0;
|
}
|
||||||
this._removedId = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
super._onDestroy();
|
disable() {
|
||||||
|
this._indicator.destroy();
|
||||||
|
delete this._indicator;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** */
|
|
||||||
function init() {
|
|
||||||
ExtensionUtils.initTranslations();
|
|
||||||
}
|
|
||||||
|
|
||||||
let _indicator;
|
|
||||||
|
|
||||||
/** */
|
|
||||||
function enable() {
|
|
||||||
_indicator = new DriveMenu();
|
|
||||||
Main.panel.addToStatusArea('drive-menu', _indicator);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** */
|
|
||||||
function disable() {
|
|
||||||
_indicator.destroy();
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,17 +1,22 @@
|
|||||||
/* exported enable disable */
|
import {AppIcon} from 'resource:///org/gnome/shell/ui/appDisplay.js';
|
||||||
const AppDisplay = imports.ui.appDisplay;
|
import {InjectionManager} from 'resource:///org/gnome/shell/extensions/extension.js';
|
||||||
|
|
||||||
let _activateOriginal = null;
|
export default class Extension {
|
||||||
|
constructor() {
|
||||||
|
this._injectionManager = new InjectionManager();
|
||||||
|
}
|
||||||
|
|
||||||
/** */
|
enable() {
|
||||||
function enable() {
|
this._injectionManager.overrideMethod(AppIcon.prototype, 'activate',
|
||||||
_activateOriginal = AppDisplay.AppIcon.prototype.activate;
|
originalMethod => {
|
||||||
AppDisplay.AppIcon.prototype.activate = function () {
|
return function () {
|
||||||
_activateOriginal.call(this, 2);
|
// eslint-disable-next-line no-invalid-this
|
||||||
};
|
originalMethod.call(this, 2);
|
||||||
}
|
};
|
||||||
|
});
|
||||||
/** */
|
}
|
||||||
function disable() {
|
|
||||||
AppDisplay.AppIcon.prototype.activate = _activateOriginal;
|
disable() {
|
||||||
|
this._injectionManager.clear();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
/* exported init */
|
|
||||||
/*
|
/*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@@ -16,11 +15,11 @@
|
|||||||
* SPDX-License-Identifier: GPL-2.0-or-later
|
* SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const {St} = imports.gi;
|
import St from 'gi://St';
|
||||||
|
|
||||||
const Main = imports.ui.main;
|
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
|
||||||
|
|
||||||
class Extension {
|
export default class Extension {
|
||||||
_updateColorScheme(scheme) {
|
_updateColorScheme(scheme) {
|
||||||
Main.sessionMode.colorScheme = scheme;
|
Main.sessionMode.colorScheme = scheme;
|
||||||
St.Settings.get().notify('color-scheme');
|
St.Settings.get().notify('color-scheme');
|
||||||
@@ -35,8 +34,3 @@ class Extension {
|
|||||||
this._updateColorScheme(this._savedColorScheme);
|
this._updateColorScheme(this._savedColorScheme);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** */
|
|
||||||
function init() {
|
|
||||||
return new Extension();
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
||||||
/* exported enable disable */
|
import Clutter from 'gi://Clutter';
|
||||||
const {Clutter} = imports.gi;
|
|
||||||
|
|
||||||
const ExtensionUtils = imports.misc.extensionUtils;
|
import {Extension, InjectionManager} from 'resource:///org/gnome/shell/extensions/extension.js';
|
||||||
const Main = imports.ui.main;
|
|
||||||
const {WindowPreview} = imports.ui.windowPreview;
|
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
|
||||||
const Workspace = imports.ui.workspace;
|
import {WindowPreview} from 'resource:///org/gnome/shell/ui/windowPreview.js';
|
||||||
|
import * as Workspace from 'resource:///org/gnome/shell/ui/workspace.js';
|
||||||
|
|
||||||
// testing settings for natural window placement strategy:
|
// testing settings for natural window placement strategy:
|
||||||
const WINDOW_PLACEMENT_NATURAL_ACCURACY = 20; // accuracy of window translate moves (KDE-default: 20)
|
const WINDOW_PLACEMENT_NATURAL_ACCURACY = 20; // accuracy of window translate moves (KDE-default: 20)
|
||||||
@@ -236,75 +236,64 @@ class NaturalLayoutStrategy extends Workspace.LayoutStrategy {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let winInjections, workspaceInjections;
|
export default class NativeWindowPlacementExtension extends Extension {
|
||||||
|
constructor(metadata) {
|
||||||
|
super(metadata);
|
||||||
|
|
||||||
/** */
|
this._injectionManager = new InjectionManager();
|
||||||
function resetState() {
|
}
|
||||||
winInjections = { };
|
|
||||||
workspaceInjections = { };
|
enable() {
|
||||||
}
|
const settings = this.getSettings();
|
||||||
|
|
||||||
/** */
|
const layoutProto = Workspace.WorkspaceLayout.prototype;
|
||||||
function enable() {
|
const previewProto = WindowPreview.prototype;
|
||||||
resetState();
|
|
||||||
|
this._injectionManager.overrideMethod(layoutProto, '_createBestLayout', () => {
|
||||||
let settings = ExtensionUtils.getSettings();
|
/* eslint-disable no-invalid-this */
|
||||||
|
return function () {
|
||||||
workspaceInjections['_createBestLayout'] = Workspace.WorkspaceLayout.prototype._createBestLayout;
|
this._layoutStrategy = new NaturalLayoutStrategy({
|
||||||
Workspace.WorkspaceLayout.prototype._createBestLayout = function (_area) {
|
monitor: Main.layoutManager.monitors[this._monitorIndex],
|
||||||
this._layoutStrategy = new NaturalLayoutStrategy({
|
}, settings);
|
||||||
monitor: Main.layoutManager.monitors[this._monitorIndex],
|
return this._layoutStrategy.computeLayout(this._sortedWindows);
|
||||||
}, settings);
|
};
|
||||||
return this._layoutStrategy.computeLayout(this._sortedWindows);
|
/* eslint-enable no-invalid-this */
|
||||||
};
|
});
|
||||||
|
|
||||||
// position window titles on top of windows in overlay
|
// position window titles on top of windows in overlay
|
||||||
winInjections['_init'] = WindowPreview.prototype._init;
|
this._injectionManager.overrideMethod(previewProto, '_init', originalMethod => {
|
||||||
WindowPreview.prototype._init = function (...args) {
|
/* eslint-disable no-invalid-this */
|
||||||
winInjections['_init'].call(this, ...args);
|
return function (...args) {
|
||||||
|
originalMethod.call(this, ...args);
|
||||||
if (!settings.get_boolean('window-captions-on-top'))
|
|
||||||
return;
|
if (!settings.get_boolean('window-captions-on-top'))
|
||||||
|
return;
|
||||||
const alignConstraint = this._title.get_constraints().find(
|
|
||||||
c => c.align_axis && c.align_axis === Clutter.AlignAxis.Y_AXIS);
|
const alignConstraint = this._title.get_constraints().find(
|
||||||
alignConstraint.factor = 0;
|
c => c.align_axis && c.align_axis === Clutter.AlignAxis.Y_AXIS);
|
||||||
|
alignConstraint.factor = 0;
|
||||||
const bindConstraint = this._title.get_constraints().find(
|
|
||||||
c => c.coordinate && c.coordinate === Clutter.BindCoordinate.Y);
|
const bindConstraint = this._title.get_constraints().find(
|
||||||
bindConstraint.offset = 0;
|
c => c.coordinate && c.coordinate === Clutter.BindCoordinate.Y);
|
||||||
};
|
bindConstraint.offset = 0;
|
||||||
winInjections['_adjustOverlayOffsets'] =
|
};
|
||||||
WindowPreview.prototype._adjustOverlayOffsets;
|
/* eslint-enable no-invalid-this */
|
||||||
WindowPreview.prototype._adjustOverlayOffsets = function (...args) {
|
});
|
||||||
winInjections['_adjustOverlayOffsets'].call(this, ...args);
|
|
||||||
|
this._injectionManager.overrideMethod(previewProto, '_adjustOverlayOffsets', originalMethod => {
|
||||||
if (settings.get_boolean('window-captions-on-top'))
|
/* eslint-disable no-invalid-this */
|
||||||
this._title.translation_y = -this._title.translation_y;
|
return function (...args) {
|
||||||
};
|
originalMethod.call(this, ...args);
|
||||||
}
|
|
||||||
|
if (settings.get_boolean('window-captions-on-top'))
|
||||||
/**
|
this._title.translation_y = -this._title.translation_y;
|
||||||
* @param {object} object - object that was modified
|
};
|
||||||
* @param {object} injection - the map of previous injections
|
/* eslint-enable no-invalid-this */
|
||||||
* @param {string} name - the @injection key that should be removed
|
});
|
||||||
*/
|
}
|
||||||
function removeInjection(object, injection, name) {
|
|
||||||
if (injection[name] === undefined)
|
disable() {
|
||||||
delete object[name];
|
this._injectionManager.clear();
|
||||||
else
|
global.stage.queue_relayout();
|
||||||
object[name] = injection[name];
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/** */
|
|
||||||
function disable() {
|
|
||||||
var i;
|
|
||||||
|
|
||||||
for (i in workspaceInjections)
|
|
||||||
removeInjection(Workspace.WorkspaceLayout.prototype, workspaceInjections, i);
|
|
||||||
for (i in winInjections)
|
|
||||||
removeInjection(WindowPreview.prototype, winInjections, i);
|
|
||||||
|
|
||||||
global.stage.queue_relayout();
|
|
||||||
resetState();
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,17 +1,16 @@
|
|||||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||||
/* exported init enable disable */
|
import Clutter from 'gi://Clutter';
|
||||||
|
import GObject from 'gi://GObject';
|
||||||
|
import St from 'gi://St';
|
||||||
|
|
||||||
const {Clutter, GObject, St} = imports.gi;
|
import {Extension, gettext as _} from 'resource:///org/gnome/shell/extensions/extension.js';
|
||||||
|
|
||||||
const ExtensionUtils = imports.misc.extensionUtils;
|
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
|
||||||
const Main = imports.ui.main;
|
import * as PanelMenu from 'resource:///org/gnome/shell/ui/panelMenu.js';
|
||||||
const PanelMenu = imports.ui.panelMenu;
|
import * as PopupMenu from 'resource:///org/gnome/shell/ui/popupMenu.js';
|
||||||
const PopupMenu = imports.ui.popupMenu;
|
|
||||||
|
|
||||||
const Me = ExtensionUtils.getCurrentExtension();
|
import {PlacesManager} from './placeDisplay.js';
|
||||||
const PlaceDisplay = Me.imports.placeDisplay;
|
|
||||||
|
|
||||||
const _ = ExtensionUtils.gettext;
|
|
||||||
const N_ = x => x;
|
const N_ = x => x;
|
||||||
|
|
||||||
const PLACE_ICON_SIZE = 16;
|
const PLACE_ICON_SIZE = 16;
|
||||||
@@ -53,17 +52,8 @@ class PlaceMenuItem extends PopupMenu.PopupBaseMenuItem {
|
|||||||
this.add_child(this._ejectButton);
|
this.add_child(this._ejectButton);
|
||||||
}
|
}
|
||||||
|
|
||||||
this._changedId = info.connect('changed',
|
info.connectObject('changed',
|
||||||
this._propertiesChanged.bind(this));
|
this._propertiesChanged.bind(this), this);
|
||||||
}
|
|
||||||
|
|
||||||
destroy() {
|
|
||||||
if (this._changedId) {
|
|
||||||
this._info.disconnect(this._changedId);
|
|
||||||
this._changedId = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
super.destroy();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
activate(event) {
|
activate(event) {
|
||||||
@@ -100,7 +90,7 @@ class PlacesMenu extends PanelMenu.Button {
|
|||||||
});
|
});
|
||||||
this.add_actor(label);
|
this.add_actor(label);
|
||||||
|
|
||||||
this.placesManager = new PlaceDisplay.PlacesManager();
|
this.placesManager = new PlacesManager();
|
||||||
|
|
||||||
this._sections = { };
|
this._sections = { };
|
||||||
|
|
||||||
@@ -138,24 +128,18 @@ class PlacesMenu extends PanelMenu.Button {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** */
|
export default class PlacesMenuExtension extends Extension {
|
||||||
function init() {
|
enable() {
|
||||||
ExtensionUtils.initTranslations();
|
this._indicator = new PlacesMenu();
|
||||||
}
|
|
||||||
|
let pos = Main.sessionMode.panel.left.length;
|
||||||
let _indicator;
|
if ('apps-menu' in Main.panel.statusArea)
|
||||||
|
pos++;
|
||||||
/** */
|
Main.panel.addToStatusArea('places-menu', this._indicator, pos, 'left');
|
||||||
function enable() {
|
}
|
||||||
_indicator = new PlacesMenu();
|
|
||||||
|
disable() {
|
||||||
let pos = Main.sessionMode.panel.left.length;
|
this._indicator.destroy();
|
||||||
if ('apps-menu' in Main.panel.statusArea)
|
delete this._indicator;
|
||||||
pos++;
|
}
|
||||||
Main.panel.addToStatusArea('places-menu', _indicator, pos, 'left');
|
|
||||||
}
|
|
||||||
|
|
||||||
/** */
|
|
||||||
function disable() {
|
|
||||||
_indicator.destroy();
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
/* exported PlacesManager */
|
import Gio from 'gi://Gio';
|
||||||
|
import GLib from 'gi://GLib';
|
||||||
|
import Shell from 'gi://Shell';
|
||||||
|
import {EventEmitter} from 'resource:///org/gnome/shell/misc/signals.js';
|
||||||
|
|
||||||
const {Gio, GLib, Shell} = imports.gi;
|
import {gettext as _} from 'resource:///org/gnome/shell/extensions/extension.js';
|
||||||
const {EventEmitter} = imports.misc.signals;
|
|
||||||
|
|
||||||
const ExtensionUtils = imports.misc.extensionUtils;
|
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
|
||||||
const Main = imports.ui.main;
|
import * as ShellMountOperation from 'resource:///org/gnome/shell/ui/shellMountOperation.js';
|
||||||
const ShellMountOperation = imports.ui.shellMountOperation;
|
|
||||||
|
|
||||||
const _ = ExtensionUtils.gettext;
|
|
||||||
const N_ = x => x;
|
const N_ = x => x;
|
||||||
|
|
||||||
Gio._promisify(Gio.AppInfo, 'launch_default_for_uri_async');
|
Gio._promisify(Gio.AppInfo, 'launch_default_for_uri_async');
|
||||||
@@ -248,7 +248,7 @@ const DEFAULT_DIRECTORIES = [
|
|||||||
GLib.UserDirectory.DIRECTORY_VIDEOS,
|
GLib.UserDirectory.DIRECTORY_VIDEOS,
|
||||||
];
|
];
|
||||||
|
|
||||||
var PlacesManager = class extends EventEmitter {
|
export class PlacesManager extends EventEmitter {
|
||||||
constructor() {
|
constructor() {
|
||||||
super();
|
super();
|
||||||
|
|
||||||
@@ -260,15 +260,25 @@ var PlacesManager = class extends EventEmitter {
|
|||||||
};
|
};
|
||||||
|
|
||||||
this._settings = new Gio.Settings({schema_id: BACKGROUND_SCHEMA});
|
this._settings = new Gio.Settings({schema_id: BACKGROUND_SCHEMA});
|
||||||
this._showDesktopIconsChangedId = this._settings.connect(
|
this._settings.connectObject('changed::show-desktop-icons',
|
||||||
'changed::show-desktop-icons', this._updateSpecials.bind(this));
|
() => this._updateSpecials(), this);
|
||||||
this._updateSpecials();
|
this._updateSpecials();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Show devices, code more or less ported from nautilus-places-sidebar.c
|
* Show devices, code more or less ported from nautilus-places-sidebar.c
|
||||||
*/
|
*/
|
||||||
this._volumeMonitor = Gio.VolumeMonitor.get();
|
this._volumeMonitor = Gio.VolumeMonitor.get();
|
||||||
this._connectVolumeMonitorSignals();
|
this._volumeMonitor.connectObject(
|
||||||
|
'volume-added', () => this._updateMounts(),
|
||||||
|
'volume-removed', () => this._updateMounts(),
|
||||||
|
'volume-changed', () => this._updateMounts(),
|
||||||
|
'mount-added', () => this._updateMounts(),
|
||||||
|
'mount-removed', () => this._updateMounts(),
|
||||||
|
'mount-changed', () => this._updateMounts(),
|
||||||
|
'drive-connected', () => this._updateMounts(),
|
||||||
|
'drive-disconnected', () => this._updateMounts(),
|
||||||
|
'drive-changed', () => this._updateMounts(),
|
||||||
|
this);
|
||||||
this._updateMounts();
|
this._updateMounts();
|
||||||
|
|
||||||
this._bookmarksFile = this._findBookmarksFile();
|
this._bookmarksFile = this._findBookmarksFile();
|
||||||
@@ -293,34 +303,11 @@ var PlacesManager = class extends EventEmitter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_connectVolumeMonitorSignals() {
|
|
||||||
const signals = [
|
|
||||||
'volume-added',
|
|
||||||
'volume-removed',
|
|
||||||
'volume-changed',
|
|
||||||
'mount-added',
|
|
||||||
'mount-removed',
|
|
||||||
'mount-changed',
|
|
||||||
'drive-connected',
|
|
||||||
'drive-disconnected',
|
|
||||||
'drive-changed',
|
|
||||||
];
|
|
||||||
|
|
||||||
this._volumeMonitorSignals = [];
|
|
||||||
let func = this._updateMounts.bind(this);
|
|
||||||
for (let i = 0; i < signals.length; i++) {
|
|
||||||
let id = this._volumeMonitor.connect(signals[i], func);
|
|
||||||
this._volumeMonitorSignals.push(id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
destroy() {
|
destroy() {
|
||||||
if (this._settings)
|
this._settings?.disconnectObject(this);
|
||||||
this._settings.disconnect(this._showDesktopIconsChangedId);
|
|
||||||
this._settings = null;
|
this._settings = null;
|
||||||
|
|
||||||
for (let i = 0; i < this._volumeMonitorSignals.length; i++)
|
this._volumeMonitor.disconnectObject(this);
|
||||||
this._volumeMonitor.disconnect(this._volumeMonitorSignals[i]);
|
|
||||||
|
|
||||||
if (this._monitor)
|
if (this._monitor)
|
||||||
this._monitor.cancel();
|
this._monitor.cancel();
|
||||||
@@ -546,4 +533,4 @@ var PlacesManager = class extends EventEmitter {
|
|||||||
get(kind) {
|
get(kind) {
|
||||||
return this._places[kind];
|
return this._places[kind];
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
/* exported enable disable */
|
|
||||||
/* Screenshot Window Sizer for Gnome Shell
|
/* Screenshot Window Sizer for Gnome Shell
|
||||||
*
|
*
|
||||||
* Copyright (c) 2013 Owen Taylor <otaylor@redhat.com>
|
* Copyright (c) 2013 Owen Taylor <otaylor@redhat.com>
|
||||||
@@ -19,153 +18,151 @@
|
|||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const {Clutter, Meta, Shell, St} = imports.gi;
|
import Clutter from 'gi://Clutter';
|
||||||
|
import Meta from 'gi://Meta';
|
||||||
|
import Shell from 'gi://Shell';
|
||||||
|
import St from 'gi://St';
|
||||||
|
|
||||||
const ExtensionUtils = imports.misc.extensionUtils;
|
import {Extension} from 'resource:///org/gnome/shell/extensions/extension.js';
|
||||||
const Main = imports.ui.main;
|
|
||||||
|
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
|
||||||
|
|
||||||
const MESSAGE_FADE_TIME = 2000;
|
const MESSAGE_FADE_TIME = 2000;
|
||||||
|
|
||||||
let text;
|
export default class ScreenshotWindowSizerExtension extends Extension {
|
||||||
|
SIZES = [
|
||||||
|
[624, 351],
|
||||||
|
[800, 450],
|
||||||
|
[1024, 576],
|
||||||
|
[1200, 675],
|
||||||
|
[1600, 900],
|
||||||
|
[360, 654], // Phone portrait maximized
|
||||||
|
[720, 360], // Phone landscape fullscreen
|
||||||
|
];
|
||||||
|
|
||||||
/** */
|
_flashMessage(message) {
|
||||||
function hideMessage() {
|
if (!this._text) {
|
||||||
text.destroy();
|
this._text = new St.Label({style_class: 'screenshot-sizer-message'});
|
||||||
text = null;
|
Main.uiGroup.add_actor(this._text);
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param {string} message - the message to flash
|
|
||||||
*/
|
|
||||||
function flashMessage(message) {
|
|
||||||
if (!text) {
|
|
||||||
text = new St.Label({style_class: 'screenshot-sizer-message'});
|
|
||||||
Main.uiGroup.add_actor(text);
|
|
||||||
}
|
|
||||||
|
|
||||||
text.remove_all_transitions();
|
|
||||||
text.text = message;
|
|
||||||
|
|
||||||
text.opacity = 255;
|
|
||||||
|
|
||||||
let monitor = Main.layoutManager.primaryMonitor;
|
|
||||||
text.set_position(
|
|
||||||
monitor.x + Math.floor(monitor.width / 2 - text.width / 2),
|
|
||||||
monitor.y + Math.floor(monitor.height / 2 - text.height / 2));
|
|
||||||
|
|
||||||
text.ease({
|
|
||||||
opacity: 0,
|
|
||||||
duration: MESSAGE_FADE_TIME,
|
|
||||||
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
|
||||||
onComplete: hideMessage,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
let SIZES = [
|
|
||||||
[624, 351],
|
|
||||||
[800, 450],
|
|
||||||
[1024, 576],
|
|
||||||
[1200, 675],
|
|
||||||
[1600, 900],
|
|
||||||
[360, 654], // Phone portrait maximized
|
|
||||||
[720, 360], // Phone landscape fullscreen
|
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param {Meta.Display} display - the display
|
|
||||||
* @param {Meta.Window=} window - for per-window bindings, the window
|
|
||||||
* @param {Meta.KeyBinding} binding - the key binding
|
|
||||||
*/
|
|
||||||
function 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;
|
|
||||||
|
|
||||||
// Unmaximize first
|
|
||||||
if (window.get_maximized() !== 0)
|
|
||||||
window.unmaximize(Meta.MaximizeFlags.BOTH);
|
|
||||||
|
|
||||||
let workArea = window.get_work_area_current_monitor();
|
|
||||||
let 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 = 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
|
|
||||||
let nearestIndex;
|
|
||||||
let nearestError;
|
|
||||||
|
|
||||||
for (let i = 0; i < scaledSizes.length; i++) {
|
|
||||||
let [width, height] = scaledSizes[i];
|
|
||||||
|
|
||||||
// get the best initial window size
|
|
||||||
let error = Math.abs(width - outerRect.width) + Math.abs(height - outerRect.height);
|
|
||||||
if (nearestIndex === undefined || error < nearestError) {
|
|
||||||
nearestIndex = i;
|
|
||||||
nearestError = error;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this._text.remove_all_transitions();
|
||||||
|
this._text.text = message;
|
||||||
|
|
||||||
|
this._text.opacity = 255;
|
||||||
|
|
||||||
|
const monitor = Main.layoutManager.primaryMonitor;
|
||||||
|
this._text.set_position(
|
||||||
|
monitor.x + Math.floor(monitor.width / 2 - this._text.width / 2),
|
||||||
|
monitor.y + Math.floor(monitor.height / 2 - this._text.height / 2));
|
||||||
|
|
||||||
|
this._text.ease({
|
||||||
|
opacity: 0,
|
||||||
|
duration: MESSAGE_FADE_TIME,
|
||||||
|
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
||||||
|
onComplete: () => this._hideMessage(),
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// get the next size up or down from ideal
|
_hideMessage() {
|
||||||
let newIndex = (nearestIndex + (backwards ? -1 : 1)) % scaledSizes.length;
|
this._text.destroy();
|
||||||
let [newWidth, newHeight] = scaledSizes[newIndex];
|
delete this._text;
|
||||||
|
}
|
||||||
|
|
||||||
// Push the window onscreen if it would be resized offscreen
|
/**
|
||||||
let newX = outerRect.x;
|
* @param {Meta.Display} display - the display
|
||||||
let newY = outerRect.y;
|
* @param {Meta.Window=} window - for per-window bindings, the window
|
||||||
if (newX + newWidth > workArea.x + workArea.width)
|
* @param {Meta.KeyBinding} binding - the key binding
|
||||||
newX = Math.max(workArea.x + workArea.width - newWidth);
|
*/
|
||||||
if (newY + newHeight > workArea.y + workArea.height)
|
_cycleScreenshotSizes(display, window, binding) {
|
||||||
newY = Math.max(workArea.y + workArea.height - newHeight);
|
// 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;
|
||||||
|
|
||||||
const id = window.connect('size-changed', () => {
|
// Unmaximize first
|
||||||
window.disconnect(id);
|
if (window.get_maximized() !== 0)
|
||||||
_notifySizeChange(window);
|
window.unmaximize(Meta.MaximizeFlags.BOTH);
|
||||||
});
|
|
||||||
window.move_resize_frame(true, newX, newY, newWidth, newHeight);
|
let workArea = window.get_work_area_current_monitor();
|
||||||
}
|
let outerRect = window.get_frame_rect();
|
||||||
|
|
||||||
/**
|
// Double both axes if on a hidpi display
|
||||||
* @param {Meta.Window} window - the window whose size changed
|
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
|
||||||
*/
|
let scaledSizes = this.SIZES.map(size => size.map(wh => wh * scaleFactor))
|
||||||
function _notifySizeChange(window) {
|
.filter(([w, h]) => w <= workArea.width && h <= workArea.height);
|
||||||
const {scaleFactor} = St.ThemeContext.get_for_stage(global.stage);
|
|
||||||
let newOuterRect = window.get_frame_rect();
|
// Find the nearest 16:9 size for the current window size
|
||||||
let message = '%d×%d'.format(
|
let nearestIndex;
|
||||||
newOuterRect.width / scaleFactor,
|
let nearestError;
|
||||||
newOuterRect.height / scaleFactor);
|
|
||||||
|
for (let i = 0; i < scaledSizes.length; i++) {
|
||||||
// The new size might have been constrained by geometry hints (e.g. for
|
let [width, height] = scaledSizes[i];
|
||||||
// a terminal) - in that case, include the actual ratio to the message
|
|
||||||
// we flash
|
// get the best initial window size
|
||||||
let actualNumerator = 9 * newOuterRect.width / newOuterRect.height;
|
let error = Math.abs(width - outerRect.width) + Math.abs(height - outerRect.height);
|
||||||
if (Math.abs(actualNumerator - 16) > 0.01)
|
if (nearestIndex === undefined || error < nearestError) {
|
||||||
message += ' (%.2f:9)'.format(actualNumerator);
|
nearestIndex = i;
|
||||||
|
nearestError = error;
|
||||||
flashMessage(message);
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** */
|
// get the next size up or down from ideal
|
||||||
function enable() {
|
let newIndex = (nearestIndex + (backwards ? -1 : 1)) % scaledSizes.length;
|
||||||
Main.wm.addKeybinding(
|
let [newWidth, newHeight] = scaledSizes[newIndex];
|
||||||
'cycle-screenshot-sizes',
|
|
||||||
ExtensionUtils.getSettings(),
|
// Push the window onscreen if it would be resized offscreen
|
||||||
Meta.KeyBindingFlags.PER_WINDOW,
|
let newX = outerRect.x;
|
||||||
Shell.ActionMode.NORMAL,
|
let newY = outerRect.y;
|
||||||
cycleScreenshotSizes);
|
if (newX + newWidth > workArea.x + workArea.width)
|
||||||
Main.wm.addKeybinding(
|
newX = Math.max(workArea.x + workArea.width - newWidth);
|
||||||
'cycle-screenshot-sizes-backward',
|
if (newY + newHeight > workArea.y + workArea.height)
|
||||||
ExtensionUtils.getSettings(),
|
newY = Math.max(workArea.y + workArea.height - newHeight);
|
||||||
Meta.KeyBindingFlags.PER_WINDOW | Meta.KeyBindingFlags.IS_REVERSED,
|
|
||||||
Shell.ActionMode.NORMAL,
|
const id = window.connect('size-changed', () => {
|
||||||
cycleScreenshotSizes);
|
window.disconnect(id);
|
||||||
}
|
this._notifySizeChange(window);
|
||||||
|
});
|
||||||
/** */
|
window.move_resize_frame(true, newX, newY, newWidth, newHeight);
|
||||||
function disable() {
|
}
|
||||||
Main.wm.removeKeybinding('cycle-screenshot-sizes');
|
|
||||||
Main.wm.removeKeybinding('cycle-screenshot-sizes-backward');
|
/**
|
||||||
|
* @param {Meta.Window} window - the window whose size changed
|
||||||
|
*/
|
||||||
|
_notifySizeChange(window) {
|
||||||
|
const {scaleFactor} = St.ThemeContext.get_for_stage(global.stage);
|
||||||
|
let newOuterRect = window.get_frame_rect();
|
||||||
|
let message = '%d×%d'.format(
|
||||||
|
newOuterRect.width / scaleFactor,
|
||||||
|
newOuterRect.height / scaleFactor);
|
||||||
|
|
||||||
|
// 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;
|
||||||
|
if (Math.abs(actualNumerator - 16) > 0.01)
|
||||||
|
message += ' (%.2f:9)'.format(actualNumerator);
|
||||||
|
|
||||||
|
this._flashMessage(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
enable() {
|
||||||
|
Main.wm.addKeybinding(
|
||||||
|
'cycle-screenshot-sizes',
|
||||||
|
this.getSettings(),
|
||||||
|
Meta.KeyBindingFlags.PER_WINDOW,
|
||||||
|
Shell.ActionMode.NORMAL,
|
||||||
|
this._cycleScreenshotSizes.bind(this));
|
||||||
|
Main.wm.addKeybinding(
|
||||||
|
'cycle-screenshot-sizes-backward',
|
||||||
|
this.getSettings(),
|
||||||
|
Meta.KeyBindingFlags.PER_WINDOW | Meta.KeyBindingFlags.IS_REVERSED,
|
||||||
|
Shell.ActionMode.NORMAL,
|
||||||
|
this._cycleScreenshotSizes.bind(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
disable() {
|
||||||
|
Main.wm.removeKeybinding('cycle-screenshot-sizes');
|
||||||
|
Main.wm.removeKeybinding('cycle-screenshot-sizes-backward');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,20 +1,19 @@
|
|||||||
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
||||||
// Load shell theme from ~/.local/share/themes/name/gnome-shell
|
// Load shell theme from ~/.local/share/themes/name/gnome-shell
|
||||||
/* exported init */
|
|
||||||
|
|
||||||
const {Gio} = imports.gi;
|
import Gio from 'gi://Gio';
|
||||||
|
|
||||||
const ExtensionUtils = imports.misc.extensionUtils;
|
import {Extension} from 'resource:///org/gnome/shell/extensions/extension.js';
|
||||||
const Main = imports.ui.main;
|
|
||||||
|
|
||||||
const Me = ExtensionUtils.getCurrentExtension();
|
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
|
||||||
const Util = Me.imports.util;
|
|
||||||
|
import {getThemeDirs, getModeThemeDirs} from './util.js';
|
||||||
|
|
||||||
const SETTINGS_KEY = 'name';
|
const SETTINGS_KEY = 'name';
|
||||||
|
|
||||||
class ThemeManager {
|
export default class ThemeManager extends Extension {
|
||||||
enable() {
|
enable() {
|
||||||
this._settings = ExtensionUtils.getSettings();
|
this._settings = this.getSettings();
|
||||||
this._settings.connect(`changed::${SETTINGS_KEY}`, this._changeTheme.bind(this));
|
this._settings.connect(`changed::${SETTINGS_KEY}`, this._changeTheme.bind(this));
|
||||||
this._changeTheme();
|
this._changeTheme();
|
||||||
}
|
}
|
||||||
@@ -32,10 +31,10 @@ class ThemeManager {
|
|||||||
let themeName = this._settings.get_string(SETTINGS_KEY);
|
let themeName = this._settings.get_string(SETTINGS_KEY);
|
||||||
|
|
||||||
if (themeName) {
|
if (themeName) {
|
||||||
const stylesheetPaths = Util.getThemeDirs()
|
const stylesheetPaths = getThemeDirs()
|
||||||
.map(dir => `${dir}/${themeName}/gnome-shell/gnome-shell.css`);
|
.map(dir => `${dir}/${themeName}/gnome-shell/gnome-shell.css`);
|
||||||
|
|
||||||
stylesheetPaths.push(...Util.getModeThemeDirs()
|
stylesheetPaths.push(...getModeThemeDirs()
|
||||||
.map(dir => `${dir}/${themeName}.css`));
|
.map(dir => `${dir}/${themeName}.css`));
|
||||||
|
|
||||||
stylesheet = stylesheetPaths.find(path => {
|
stylesheet = stylesheetPaths.find(path => {
|
||||||
@@ -45,17 +44,10 @@ class ThemeManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (stylesheet)
|
if (stylesheet)
|
||||||
global.log(`loading user theme: ${stylesheet}`);
|
log(`loading user theme: ${stylesheet}`);
|
||||||
else
|
else
|
||||||
global.log('loading default theme (Adwaita)');
|
log('loading default theme (Adwaita)');
|
||||||
Main.setThemeStylesheet(stylesheet);
|
Main.setThemeStylesheet(stylesheet);
|
||||||
Main.loadTheme();
|
Main.loadTheme();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @returns {ThemeManager} - the extension state object
|
|
||||||
*/
|
|
||||||
function init() {
|
|
||||||
return new ThemeManager();
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,15 +1,17 @@
|
|||||||
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
||||||
/* exported init buildPrefsWidget */
|
|
||||||
|
|
||||||
// we use async/await here to not block the mainloop, not to parallelize
|
// we use async/await here to not block the mainloop, not to parallelize
|
||||||
/* eslint-disable no-await-in-loop */
|
/* eslint-disable no-await-in-loop */
|
||||||
|
|
||||||
const {Adw, Gio, GLib, GObject, Gtk} = imports.gi;
|
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';
|
||||||
|
|
||||||
const ExtensionUtils = imports.misc.extensionUtils;
|
import {ExtensionPreferences} from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js';
|
||||||
|
|
||||||
const Me = ExtensionUtils.getCurrentExtension();
|
import {getThemeDirs, getModeThemeDirs} from './util.js';
|
||||||
const Util = Me.imports.util;
|
|
||||||
|
|
||||||
Gio._promisify(Gio.File.prototype, 'enumerate_children_async');
|
Gio._promisify(Gio.File.prototype, 'enumerate_children_async');
|
||||||
Gio._promisify(Gio.File.prototype, 'query_info_async');
|
Gio._promisify(Gio.File.prototype, 'query_info_async');
|
||||||
@@ -20,13 +22,13 @@ class UserThemePrefsWidget extends Adw.PreferencesGroup {
|
|||||||
GObject.registerClass(this);
|
GObject.registerClass(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor() {
|
constructor(settings) {
|
||||||
super({title: 'Themes'});
|
super({title: 'Themes'});
|
||||||
|
|
||||||
this._actionGroup = new Gio.SimpleActionGroup();
|
this._actionGroup = new Gio.SimpleActionGroup();
|
||||||
this.insert_action_group('theme', this._actionGroup);
|
this.insert_action_group('theme', this._actionGroup);
|
||||||
|
|
||||||
this._settings = ExtensionUtils.getSettings();
|
this._settings = settings;
|
||||||
this._actionGroup.add_action(
|
this._actionGroup.add_action(
|
||||||
this._settings.create_action('name'));
|
this._settings.create_action('name'));
|
||||||
|
|
||||||
@@ -39,7 +41,7 @@ class UserThemePrefsWidget extends Adw.PreferencesGroup {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async _collectThemes() {
|
async _collectThemes() {
|
||||||
for (const dirName of Util.getThemeDirs()) {
|
for (const dirName of getThemeDirs()) {
|
||||||
const dir = Gio.File.new_for_path(dirName);
|
const dir = Gio.File.new_for_path(dirName);
|
||||||
for (const name of await this._enumerateDir(dir)) {
|
for (const name of await this._enumerateDir(dir)) {
|
||||||
if (this._rows.has(name))
|
if (this._rows.has(name))
|
||||||
@@ -60,7 +62,7 @@ class UserThemePrefsWidget extends Adw.PreferencesGroup {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const dirName of Util.getModeThemeDirs()) {
|
for (const dirName of getModeThemeDirs()) {
|
||||||
const dir = Gio.File.new_for_path(dirName);
|
const dir = Gio.File.new_for_path(dirName);
|
||||||
for (const filename of await this._enumerateDir(dir)) {
|
for (const filename of await this._enumerateDir(dir)) {
|
||||||
if (!filename.endsWith('.css'))
|
if (!filename.endsWith('.css'))
|
||||||
@@ -125,13 +127,8 @@ class ThemeRow extends Adw.ActionRow {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** */
|
export default class UserThemePrefs extends ExtensionPreferences {
|
||||||
function init() {
|
getPreferencesWidget() {
|
||||||
}
|
return new UserThemePrefsWidget(this.getSettings());
|
||||||
|
}
|
||||||
/**
|
|
||||||
* @returns {Gtk.Widget} - the prefs widget
|
|
||||||
*/
|
|
||||||
function buildPrefsWidget() {
|
|
||||||
return new UserThemePrefsWidget();
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,11 @@
|
|||||||
/* exported getThemeDirs getModeThemeDirs */
|
import GLib from 'gi://GLib';
|
||||||
const {GLib} = imports.gi;
|
|
||||||
|
|
||||||
const fn = (...args) => GLib.build_filenamev(args);
|
const fn = (...args) => GLib.build_filenamev(args);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @returns {string[]} - an ordered list of theme directories
|
* @returns {string[]} - an ordered list of theme directories
|
||||||
*/
|
*/
|
||||||
function getThemeDirs() {
|
export function getThemeDirs() {
|
||||||
return [
|
return [
|
||||||
fn(GLib.get_home_dir(), '.themes'),
|
fn(GLib.get_home_dir(), '.themes'),
|
||||||
fn(GLib.get_user_data_dir(), 'themes'),
|
fn(GLib.get_user_data_dir(), 'themes'),
|
||||||
@@ -17,7 +16,7 @@ function getThemeDirs() {
|
|||||||
/**
|
/**
|
||||||
* @returns {string[]} - an ordered list of mode theme directories
|
* @returns {string[]} - an ordered list of mode theme directories
|
||||||
*/
|
*/
|
||||||
function getModeThemeDirs() {
|
export function getModeThemeDirs() {
|
||||||
return GLib.get_system_data_dirs()
|
return GLib.get_system_data_dirs()
|
||||||
.map(dir => fn(dir, 'gnome-shell', 'theme'));
|
.map(dir => fn(dir, 'gnome-shell', 'theme'));
|
||||||
}
|
}
|
||||||
|
|||||||
+119
-184
@@ -1,17 +1,21 @@
|
|||||||
/* exported init */
|
import Clutter from 'gi://Clutter';
|
||||||
const {Clutter, Gio, GLib, GObject, Gtk, Meta, Shell, St} = imports.gi;
|
import Gio from 'gi://Gio';
|
||||||
|
import GLib from 'gi://GLib';
|
||||||
|
import GObject from 'gi://GObject';
|
||||||
|
import Gtk from 'gi://Gtk';
|
||||||
|
import Meta from 'gi://Meta';
|
||||||
|
import Shell from 'gi://Shell';
|
||||||
|
import St from 'gi://St';
|
||||||
|
|
||||||
const DND = imports.ui.dnd;
|
import {Extension, gettext as _} from 'resource:///org/gnome/shell/extensions/extension.js';
|
||||||
const ExtensionUtils = imports.misc.extensionUtils;
|
|
||||||
const Main = imports.ui.main;
|
|
||||||
const Overview = imports.ui.overview;
|
|
||||||
const PopupMenu = imports.ui.popupMenu;
|
|
||||||
|
|
||||||
const Me = ExtensionUtils.getCurrentExtension();
|
import * as DND from 'resource:///org/gnome/shell/ui/dnd.js';
|
||||||
const {WindowPicker, WindowPickerToggle} = Me.imports.windowPicker;
|
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
|
||||||
const {WorkspaceIndicator} = Me.imports.workspaceIndicator;
|
import * as Overview from 'resource:///org/gnome/shell/ui/overview.js';
|
||||||
|
import * as PopupMenu from 'resource:///org/gnome/shell/ui/popupMenu.js';
|
||||||
|
|
||||||
const _ = ExtensionUtils.gettext;
|
import {WindowPicker, WindowPickerToggle} from './windowPicker.js';
|
||||||
|
import {WorkspaceIndicator} from './workspaceIndicator.js';
|
||||||
|
|
||||||
const ICON_TEXTURE_SIZE = 24;
|
const ICON_TEXTURE_SIZE = 24;
|
||||||
const DND_ACTIVATE_TIMEOUT = 500;
|
const DND_ACTIVATE_TIMEOUT = 500;
|
||||||
@@ -51,10 +55,6 @@ class WindowContextMenu extends PopupMenu.PopupMenu {
|
|||||||
});
|
});
|
||||||
this.addMenuItem(this._minimizeItem);
|
this.addMenuItem(this._minimizeItem);
|
||||||
|
|
||||||
this._notifyMinimizedId = this._metaWindow.connect(
|
|
||||||
'notify::minimized', this._updateMinimizeItem.bind(this));
|
|
||||||
this._updateMinimizeItem();
|
|
||||||
|
|
||||||
this._maximizeItem = new PopupMenu.PopupMenuItem('');
|
this._maximizeItem = new PopupMenu.PopupMenuItem('');
|
||||||
this._maximizeItem.connect('activate', () => {
|
this._maximizeItem.connect('activate', () => {
|
||||||
if (this._metaWindow.get_maximized() === Meta.MaximizeFlags.BOTH)
|
if (this._metaWindow.get_maximized() === Meta.MaximizeFlags.BOTH)
|
||||||
@@ -64,21 +64,20 @@ class WindowContextMenu extends PopupMenu.PopupMenu {
|
|||||||
});
|
});
|
||||||
this.addMenuItem(this._maximizeItem);
|
this.addMenuItem(this._maximizeItem);
|
||||||
|
|
||||||
this._notifyMaximizedHId = this._metaWindow.connect(
|
|
||||||
'notify::maximized-horizontally',
|
|
||||||
this._updateMaximizeItem.bind(this));
|
|
||||||
this._notifyMaximizedVId = this._metaWindow.connect(
|
|
||||||
'notify::maximized-vertically',
|
|
||||||
this._updateMaximizeItem.bind(this));
|
|
||||||
this._updateMaximizeItem();
|
|
||||||
|
|
||||||
this._closeItem = new PopupMenu.PopupMenuItem(_('Close'));
|
this._closeItem = new PopupMenu.PopupMenuItem(_('Close'));
|
||||||
this._closeItem.connect('activate', () => {
|
this._closeItem.connect('activate', () => {
|
||||||
this._metaWindow.delete(global.get_current_time());
|
this._metaWindow.delete(global.get_current_time());
|
||||||
});
|
});
|
||||||
this.addMenuItem(this._closeItem);
|
this.addMenuItem(this._closeItem);
|
||||||
|
|
||||||
this.actor.connect('destroy', this._onDestroy.bind(this));
|
this._metaWindow.connectObject(
|
||||||
|
'notify::minimized', this._updateMinimizeItem.bind(this),
|
||||||
|
'notify::maximized-horizontally', this._updateMaximizeItem.bind(this),
|
||||||
|
'notify::maximized-vertically', this._updateMaximizeItem.bind(this),
|
||||||
|
this);
|
||||||
|
|
||||||
|
this._updateMinimizeItem();
|
||||||
|
this._updateMaximizeItem();
|
||||||
|
|
||||||
this.connect('open-state-changed', () => {
|
this.connect('open-state-changed', () => {
|
||||||
if (!this.isOpen)
|
if (!this.isOpen)
|
||||||
@@ -101,12 +100,6 @@ class WindowContextMenu extends PopupMenu.PopupMenu {
|
|||||||
this._maximizeItem.label.text = maximized
|
this._maximizeItem.label.text = maximized
|
||||||
? _('Unmaximize') : _('Maximize');
|
? _('Unmaximize') : _('Maximize');
|
||||||
}
|
}
|
||||||
|
|
||||||
_onDestroy() {
|
|
||||||
this._metaWindow.disconnect(this._notifyMinimizedId);
|
|
||||||
this._metaWindow.disconnect(this._notifyMaximizedHId);
|
|
||||||
this._metaWindow.disconnect(this._notifyMaximizedVId);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class WindowTitle extends St.BoxLayout {
|
class WindowTitle extends St.BoxLayout {
|
||||||
@@ -130,20 +123,19 @@ class WindowTitle extends St.BoxLayout {
|
|||||||
this.add(this.label_actor);
|
this.add(this.label_actor);
|
||||||
|
|
||||||
this._textureCache = St.TextureCache.get_default();
|
this._textureCache = St.TextureCache.get_default();
|
||||||
this._iconThemeChangedId = this._textureCache.connect(
|
this._textureCache.connectObject('icon-theme-changed',
|
||||||
'icon-theme-changed', this._updateIcon.bind(this));
|
() => this._updateIcon(), this);
|
||||||
this._notifyWmClass = this._metaWindow.connect_after(
|
|
||||||
'notify::wm-class', this._updateIcon.bind(this));
|
this._metaWindow.connectObject(
|
||||||
this._notifyAppId = this._metaWindow.connect_after(
|
'notify::wm-class',
|
||||||
'notify::gtk-application-id', this._updateIcon.bind(this));
|
() => this._updateIcon(), GObject.ConnectFlags.AFTER,
|
||||||
|
'notify::gtk-application-id',
|
||||||
|
() => this._updateIcon(), GObject.ConnectFlags.AFTER,
|
||||||
|
'notify::title', () => this._updateTitle(),
|
||||||
|
'notify::minimized', () => this._minimizedChanged(),
|
||||||
|
this);
|
||||||
|
|
||||||
this._updateIcon();
|
this._updateIcon();
|
||||||
|
|
||||||
this.connect('destroy', this._onDestroy.bind(this));
|
|
||||||
|
|
||||||
this._notifyTitleId = this._metaWindow.connect(
|
|
||||||
'notify::title', this._updateTitle.bind(this));
|
|
||||||
this._notifyMinimizedId = this._metaWindow.connect(
|
|
||||||
'notify::minimized', this._minimizedChanged.bind(this));
|
|
||||||
this._minimizedChanged();
|
this._minimizedChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -173,14 +165,6 @@ class WindowTitle extends St.BoxLayout {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_onDestroy() {
|
|
||||||
this._textureCache.disconnect(this._iconThemeChangedId);
|
|
||||||
this._metaWindow.disconnect(this._notifyTitleId);
|
|
||||||
this._metaWindow.disconnect(this._notifyMinimizedId);
|
|
||||||
this._metaWindow.disconnect(this._notifyWmClass);
|
|
||||||
this._metaWindow.disconnect(this._notifyAppId);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class BaseButton extends St.Button {
|
class BaseButton extends St.Button {
|
||||||
@@ -216,16 +200,16 @@ class BaseButton extends St.Button {
|
|||||||
|
|
||||||
this._contextMenuManager = new PopupMenu.PopupMenuManager(this);
|
this._contextMenuManager = new PopupMenu.PopupMenuManager(this);
|
||||||
|
|
||||||
this._switchWorkspaceId = global.window_manager.connect(
|
global.window_manager.connectObject('switch-workspace',
|
||||||
'switch-workspace', this._updateVisibility.bind(this));
|
() => this._updateVisibility(), this);
|
||||||
|
|
||||||
if (this._perMonitor) {
|
if (this._perMonitor) {
|
||||||
this._windowEnteredMonitorId = global.display.connect(
|
global.display.connectObject(
|
||||||
'window-entered-monitor',
|
'window-entered-monitor',
|
||||||
this._windowEnteredOrLeftMonitor.bind(this));
|
this._windowEnteredOrLeftMonitor.bind(this),
|
||||||
this._windowLeftMonitorId = global.display.connect(
|
|
||||||
'window-left-monitor',
|
'window-left-monitor',
|
||||||
this._windowEnteredOrLeftMonitor.bind(this));
|
this._windowEnteredOrLeftMonitor.bind(this),
|
||||||
|
this);
|
||||||
}
|
}
|
||||||
|
|
||||||
this._tooltip = new Tooltip(this, {
|
this._tooltip = new Tooltip(this, {
|
||||||
@@ -334,9 +318,11 @@ class BaseButton extends St.Button {
|
|||||||
if (isOpen)
|
if (isOpen)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
const extension = Extension.lookupByURL(import.meta.url);
|
||||||
|
|
||||||
let [x, y] = global.get_pointer();
|
let [x, y] = global.get_pointer();
|
||||||
let actor = global.stage.get_actor_at_pos(Clutter.PickMode.REACTIVE, x, y);
|
let actor = global.stage.get_actor_at_pos(Clutter.PickMode.REACTIVE, x, y);
|
||||||
if (Me.stateObj.someWindowListContains(actor))
|
if (extension.someWindowListContains(actor))
|
||||||
actor.sync_hover();
|
actor.sync_hover();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -391,16 +377,6 @@ class BaseButton extends St.Button {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_onDestroy() {
|
_onDestroy() {
|
||||||
global.window_manager.disconnect(this._switchWorkspaceId);
|
|
||||||
|
|
||||||
if (this._windowEnteredMonitorId)
|
|
||||||
global.display.disconnect(this._windowEnteredMonitorId);
|
|
||||||
this._windowEnteredMonitorId = 0;
|
|
||||||
|
|
||||||
if (this._windowLeftMonitorId)
|
|
||||||
global.display.disconnect(this._windowLeftMonitorId);
|
|
||||||
this._windowLeftMonitorId = 0;
|
|
||||||
|
|
||||||
this._tooltip.destroy();
|
this._tooltip.destroy();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -414,9 +390,11 @@ class WindowButton extends BaseButton {
|
|||||||
super(perMonitor, monitorIndex);
|
super(perMonitor, monitorIndex);
|
||||||
|
|
||||||
this.metaWindow = metaWindow;
|
this.metaWindow = metaWindow;
|
||||||
this._skipTaskbarId = metaWindow.connect('notify::skip-taskbar', () => {
|
metaWindow.connectObject(
|
||||||
this._updateVisibility();
|
'notify::skip-taskbar', () => this._updateVisibility(),
|
||||||
});
|
'workspace-changed', () => this._updateVisibility(),
|
||||||
|
this);
|
||||||
|
|
||||||
this._updateVisibility();
|
this._updateVisibility();
|
||||||
|
|
||||||
this._windowTitle = new WindowTitle(this.metaWindow);
|
this._windowTitle = new WindowTitle(this.metaWindow);
|
||||||
@@ -430,11 +408,8 @@ class WindowButton extends BaseButton {
|
|||||||
this._contextMenuManager.addMenu(this._contextMenu);
|
this._contextMenuManager.addMenu(this._contextMenu);
|
||||||
Main.uiGroup.add_actor(this._contextMenu.actor);
|
Main.uiGroup.add_actor(this._contextMenu.actor);
|
||||||
|
|
||||||
this._workspaceChangedId = this.metaWindow.connect(
|
global.display.connectObject('notify::focus-window',
|
||||||
'workspace-changed', this._updateVisibility.bind(this));
|
() => this._updateStyle(), this);
|
||||||
|
|
||||||
this._notifyFocusId = global.display.connect(
|
|
||||||
'notify::focus-window', this._updateStyle.bind(this));
|
|
||||||
this._updateStyle();
|
this._updateStyle();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -478,9 +453,6 @@ class WindowButton extends BaseButton {
|
|||||||
|
|
||||||
_onDestroy() {
|
_onDestroy() {
|
||||||
super._onDestroy();
|
super._onDestroy();
|
||||||
this.metaWindow.disconnect(this._skipTaskbarId);
|
|
||||||
this.metaWindow.disconnect(this._workspaceChangedId);
|
|
||||||
global.display.disconnect(this._notifyFocusId);
|
|
||||||
this._contextMenu.destroy();
|
this._contextMenu.destroy();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -597,18 +569,17 @@ class AppButton extends BaseButton {
|
|||||||
Main.uiGroup.add_actor(this._appContextMenu.actor);
|
Main.uiGroup.add_actor(this._appContextMenu.actor);
|
||||||
|
|
||||||
this._textureCache = St.TextureCache.get_default();
|
this._textureCache = St.TextureCache.get_default();
|
||||||
this._iconThemeChangedId =
|
this._textureCache.connectObject('icon-theme-changed', () => {
|
||||||
this._textureCache.connect('icon-theme-changed', () => {
|
this._icon.child = app.create_icon_texture(ICON_TEXTURE_SIZE);
|
||||||
this._icon.child = app.create_icon_texture(ICON_TEXTURE_SIZE);
|
}, this);
|
||||||
});
|
|
||||||
|
|
||||||
this._windowsChangedId = this.app.connect(
|
this.app.connectObject('windows-changed',
|
||||||
'windows-changed', this._windowsChanged.bind(this));
|
() => this._windowsChanged(), this);
|
||||||
this._windowsChanged();
|
this._windowsChanged();
|
||||||
|
|
||||||
this._windowTracker = Shell.WindowTracker.get_default();
|
this._windowTracker = Shell.WindowTracker.get_default();
|
||||||
this._notifyFocusId = this._windowTracker.connect(
|
this._windowTracker.connectObject('notify::focus-app',
|
||||||
'notify::focus-app', this._updateStyle.bind(this));
|
() => this._updateStyle(), this);
|
||||||
this._updateStyle();
|
this._updateStyle();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -728,9 +699,6 @@ class AppButton extends BaseButton {
|
|||||||
|
|
||||||
_onDestroy() {
|
_onDestroy() {
|
||||||
super._onDestroy();
|
super._onDestroy();
|
||||||
this._textureCache.disconnect(this._iconThemeChangedId);
|
|
||||||
this._windowTracker.disconnect(this._notifyFocusId);
|
|
||||||
this.app.disconnect(this._windowsChangedId);
|
|
||||||
this._menu.destroy();
|
this._menu.destroy();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -740,7 +708,7 @@ class WindowList extends St.Widget {
|
|||||||
GObject.registerClass(this);
|
GObject.registerClass(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor(perMonitor, monitor) {
|
constructor(perMonitor, monitor, settings) {
|
||||||
super({
|
super({
|
||||||
name: 'panel',
|
name: 'panel',
|
||||||
style_class: 'bottom-panel solid',
|
style_class: 'bottom-panel solid',
|
||||||
@@ -787,12 +755,12 @@ class WindowList extends St.Widget {
|
|||||||
indicatorsBox.add_child(this._workspaceIndicator.container);
|
indicatorsBox.add_child(this._workspaceIndicator.container);
|
||||||
|
|
||||||
this._mutterSettings = new Gio.Settings({schema_id: 'org.gnome.mutter'});
|
this._mutterSettings = new Gio.Settings({schema_id: 'org.gnome.mutter'});
|
||||||
this._workspacesOnlyOnPrimaryChangedId = this._mutterSettings.connect(
|
this._mutterSettings.connectObject(
|
||||||
'changed::workspaces-only-on-primary',
|
'changed::workspaces-only-on-primary',
|
||||||
this._updateWorkspaceIndicatorVisibility.bind(this));
|
() => this._updateWorkspaceIndicatorVisibility(),
|
||||||
this._dynamicWorkspacesChangedId = this._mutterSettings.connect(
|
|
||||||
'changed::dynamic-workspaces',
|
'changed::dynamic-workspaces',
|
||||||
this._updateWorkspaceIndicatorVisibility.bind(this));
|
() => this._updateWorkspaceIndicatorVisibility(),
|
||||||
|
this);
|
||||||
this._updateWorkspaceIndicatorVisibility();
|
this._updateWorkspaceIndicatorVisibility();
|
||||||
|
|
||||||
this._menuManager = new PopupMenu.PopupMenuManager(this);
|
this._menuManager = new PopupMenu.PopupMenuManager(this);
|
||||||
@@ -810,59 +778,58 @@ class WindowList extends St.Widget {
|
|||||||
this._updatePosition();
|
this._updatePosition();
|
||||||
|
|
||||||
this._appSystem = Shell.AppSystem.get_default();
|
this._appSystem = Shell.AppSystem.get_default();
|
||||||
this._appStateChangedId = this._appSystem.connect(
|
this._appSystem.connectObject('app-state-changed',
|
||||||
'app-state-changed', this._onAppStateChanged.bind(this));
|
this._onAppStateChanged.bind(this), this);
|
||||||
|
|
||||||
// Hack: OSK gesture is tied to visibility, piggy-back on that
|
// Hack: OSK gesture is tied to visibility, piggy-back on that
|
||||||
this._keyboardVisiblechangedId =
|
Main.keyboard._bottomDragAction.connectObject('notify::enabled',
|
||||||
Main.keyboard._bottomDragAction.connect('notify::enabled',
|
action => {
|
||||||
action => {
|
const visible = !action.enabled;
|
||||||
const visible = !action.enabled;
|
if (visible) {
|
||||||
if (visible) {
|
Main.uiGroup.set_child_above_sibling(
|
||||||
Main.uiGroup.set_child_above_sibling(
|
this, Main.layoutManager.keyboardBox);
|
||||||
this, Main.layoutManager.keyboardBox);
|
} else {
|
||||||
} else {
|
Main.uiGroup.set_child_above_sibling(
|
||||||
Main.uiGroup.set_child_above_sibling(
|
this, Main.layoutManager.panelBox);
|
||||||
this, Main.layoutManager.panelBox);
|
}
|
||||||
}
|
this._updateKeyboardAnchor();
|
||||||
this._updateKeyboardAnchor();
|
}, this);
|
||||||
});
|
|
||||||
|
|
||||||
let workspaceManager = global.workspace_manager;
|
let workspaceManager = global.workspace_manager;
|
||||||
|
|
||||||
this._nWorkspacesChangedId = workspaceManager.connect(
|
workspaceManager.connectObject('notify::n-workspaces',
|
||||||
'notify::n-workspaces', this._updateWorkspaceIndicatorVisibility.bind(this));
|
() => this._updateWorkspaceIndicatorVisibility(), this);
|
||||||
this._updateWorkspaceIndicatorVisibility();
|
this._updateWorkspaceIndicatorVisibility();
|
||||||
|
|
||||||
this._switchWorkspaceId = global.window_manager.connect(
|
global.window_manager.connectObject('switch-workspace',
|
||||||
'switch-workspace', this._checkGrouping.bind(this));
|
() => this._checkGrouping(), this);
|
||||||
|
|
||||||
this._overviewShowingId = Main.overview.connect('showing', () => {
|
Main.overview.connectObject(
|
||||||
this.hide();
|
'showing', () => {
|
||||||
this._updateKeyboardAnchor();
|
this.hide();
|
||||||
});
|
|
||||||
|
|
||||||
this._overviewHidingId = Main.overview.connect('hidden', () => {
|
|
||||||
this.visible = !this._monitor.inFullscreen;
|
|
||||||
this._updateKeyboardAnchor();
|
|
||||||
});
|
|
||||||
|
|
||||||
this._fullscreenChangedId =
|
|
||||||
global.display.connect('in-fullscreen-changed', () => {
|
|
||||||
// Work-around for initial change from unknown to !fullscreen
|
|
||||||
if (Main.overview.visible)
|
|
||||||
this.hide();
|
|
||||||
this._updateKeyboardAnchor();
|
this._updateKeyboardAnchor();
|
||||||
});
|
},
|
||||||
|
'hidden', () => {
|
||||||
|
this.visible = !this._monitor.inFullscreen;
|
||||||
|
this._updateKeyboardAnchor();
|
||||||
|
}, this);
|
||||||
|
|
||||||
|
global.display.connectObject('in-fullscreen-changed', () => {
|
||||||
|
// Work-around for initial change from unknown to !fullscreen
|
||||||
|
if (Main.overview.visible)
|
||||||
|
this.hide();
|
||||||
|
this._updateKeyboardAnchor();
|
||||||
|
}, this);
|
||||||
|
|
||||||
this._windowSignals = new Map();
|
this._windowSignals = new Map();
|
||||||
this._windowCreatedId = global.display.connect(
|
this._windowCreatedId = global.display.connect(
|
||||||
'window-created', (dsp, win) => this._addWindow(win));
|
'window-created', (dsp, win) => this._addWindow(win));
|
||||||
|
|
||||||
this._dragBeginId = Main.xdndHandler.connect('drag-begin',
|
Main.xdndHandler.connectObject(
|
||||||
this._monitorDrag.bind(this));
|
'drag-begin', () => this._monitorDrag(),
|
||||||
this._dragEndId = Main.xdndHandler.connect('drag-end',
|
'drag-end', () => this._stopMonitoringDrag(),
|
||||||
this._stopMonitoringDrag.bind(this));
|
this);
|
||||||
|
|
||||||
this._dragMonitor = {
|
this._dragMonitor = {
|
||||||
dragMotion: this._onDragMotion.bind(this),
|
dragMotion: this._onDragMotion.bind(this),
|
||||||
};
|
};
|
||||||
@@ -870,7 +837,7 @@ class WindowList extends St.Widget {
|
|||||||
this._dndTimeoutId = 0;
|
this._dndTimeoutId = 0;
|
||||||
this._dndWindow = null;
|
this._dndWindow = null;
|
||||||
|
|
||||||
this._settings = ExtensionUtils.getSettings();
|
this._settings = settings;
|
||||||
this._settings.connect('changed::grouping-mode',
|
this._settings.connect('changed::grouping-mode',
|
||||||
() => this._groupingModeChanged());
|
() => this._groupingModeChanged());
|
||||||
this._grouped = undefined;
|
this._grouped = undefined;
|
||||||
@@ -911,7 +878,8 @@ class WindowList extends St.Widget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_updateWindowListVisibility() {
|
_updateWindowListVisibility() {
|
||||||
let visible = !Main.windowPicker.visible;
|
const {windowPicker} = Extension.lookupByURL(import.meta.url);
|
||||||
|
const visible = !windowPicker.visible;
|
||||||
|
|
||||||
this._windowList.ease({
|
this._windowList.ease({
|
||||||
opacity: visible ? 255 : 0,
|
opacity: visible ? 255 : 0,
|
||||||
@@ -1109,37 +1077,14 @@ class WindowList extends St.Widget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_onDestroy() {
|
_onDestroy() {
|
||||||
this._mutterSettings.disconnect(this._workspacesOnlyOnPrimaryChangedId);
|
|
||||||
this._mutterSettings.disconnect(this._dynamicWorkspacesChangedId);
|
|
||||||
|
|
||||||
this._workspaceIndicator.destroy();
|
this._workspaceIndicator.destroy();
|
||||||
|
|
||||||
Main.ctrlAltTabManager.removeGroup(this);
|
Main.ctrlAltTabManager.removeGroup(this);
|
||||||
|
|
||||||
this._appSystem.disconnect(this._appStateChangedId);
|
|
||||||
this._appStateChangedId = 0;
|
|
||||||
|
|
||||||
Main.keyboard._bottomDragAction.disconnect(this._keyboardVisiblechangedId);
|
|
||||||
this._keyboardVisiblechangedId = 0;
|
|
||||||
|
|
||||||
global.workspace_manager.disconnect(this._nWorkspacesChangedId);
|
|
||||||
this._nWorkspacesChangedId = 0;
|
|
||||||
|
|
||||||
global.window_manager.disconnect(this._switchWorkspaceId);
|
|
||||||
this._switchWorkspaceId = 0;
|
|
||||||
|
|
||||||
this._windowSignals.forEach((id, win) => win.disconnect(id));
|
this._windowSignals.forEach((id, win) => win.disconnect(id));
|
||||||
this._windowSignals.clear();
|
this._windowSignals.clear();
|
||||||
|
|
||||||
Main.overview.disconnect(this._overviewShowingId);
|
|
||||||
Main.overview.disconnect(this._overviewHidingId);
|
|
||||||
|
|
||||||
global.display.disconnect(this._fullscreenChangedId);
|
|
||||||
global.display.disconnect(this._windowCreatedId);
|
|
||||||
|
|
||||||
this._stopMonitoringDrag();
|
this._stopMonitoringDrag();
|
||||||
Main.xdndHandler.disconnect(this._dragBeginId);
|
|
||||||
Main.xdndHandler.disconnect(this._dragEndId);
|
|
||||||
|
|
||||||
this._settings.run_dispose();
|
this._settings.run_dispose();
|
||||||
|
|
||||||
@@ -1149,9 +1094,9 @@ class WindowList extends St.Widget {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class Extension {
|
export default class WindowListExtension extends Extension {
|
||||||
constructor() {
|
constructor(metadata) {
|
||||||
ExtensionUtils.initTranslations();
|
super(metadata);
|
||||||
|
|
||||||
this._windowLists = null;
|
this._windowLists = null;
|
||||||
this._hideOverviewOrig = Main.overview.hide;
|
this._hideOverviewOrig = Main.overview.hide;
|
||||||
@@ -1160,17 +1105,17 @@ class Extension {
|
|||||||
enable() {
|
enable() {
|
||||||
this._windowLists = [];
|
this._windowLists = [];
|
||||||
|
|
||||||
this._settings = ExtensionUtils.getSettings();
|
this._settings = this.getSettings();
|
||||||
this._showOnAllMonitorsChangedId = this._settings.connect(
|
this._settings.connectObject('changed::show-on-all-monitors',
|
||||||
'changed::show-on-all-monitors', this._buildWindowLists.bind(this));
|
() => this._buildWindowLists(), this);
|
||||||
|
|
||||||
this._monitorsChangedId = Main.layoutManager.connect(
|
Main.layoutManager.connectObject('monitors-changed',
|
||||||
'monitors-changed', this._buildWindowLists.bind(this));
|
() => this._buildWindowLists(), this);
|
||||||
|
|
||||||
Main.windowPicker = new WindowPicker();
|
this.windowPicker = new WindowPicker();
|
||||||
|
|
||||||
Main.overview.hide = () => {
|
Main.overview.hide = () => {
|
||||||
Main.windowPicker.close();
|
this.windowPicker.close();
|
||||||
this._hideOverviewOrig.call(Main.overview);
|
this._hideOverviewOrig.call(Main.overview);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1185,7 +1130,7 @@ class Extension {
|
|||||||
|
|
||||||
Main.layoutManager.monitors.forEach(monitor => {
|
Main.layoutManager.monitors.forEach(monitor => {
|
||||||
if (showOnAllMonitors || monitor === Main.layoutManager.primaryMonitor)
|
if (showOnAllMonitors || monitor === Main.layoutManager.primaryMonitor)
|
||||||
this._windowLists.push(new WindowList(showOnAllMonitors, monitor));
|
this._windowLists.push(new WindowList(showOnAllMonitors, monitor, this.getSettings()));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1193,11 +1138,8 @@ class Extension {
|
|||||||
if (!this._windowLists)
|
if (!this._windowLists)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
this._settings.disconnect(this._showOnAllMonitorsChangedId);
|
this._settings.disconnectObject(this);
|
||||||
this._showOnAllMonitorsChangedId = 0;
|
Main.layoutManager.disconnectObject(this);
|
||||||
|
|
||||||
Main.layoutManager.disconnect(this._monitorsChangedId);
|
|
||||||
this._monitorsChangedId = 0;
|
|
||||||
|
|
||||||
this._windowLists.forEach(windowList => {
|
this._windowLists.forEach(windowList => {
|
||||||
windowList.hide();
|
windowList.hide();
|
||||||
@@ -1205,8 +1147,8 @@ class Extension {
|
|||||||
});
|
});
|
||||||
this._windowLists = null;
|
this._windowLists = null;
|
||||||
|
|
||||||
Main.windowPicker.destroy();
|
this.windowPicker.destroy();
|
||||||
delete Main.windowPicker;
|
delete this.windowPicker;
|
||||||
|
|
||||||
Main.overview.hide = this._hideOverviewOrig;
|
Main.overview.hide = this._hideOverviewOrig;
|
||||||
}
|
}
|
||||||
@@ -1279,10 +1221,3 @@ class Tooltip extends St.Label {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @returns {Extension} - the extension's state object
|
|
||||||
*/
|
|
||||||
function init() {
|
|
||||||
return new Extension();
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,29 +1,24 @@
|
|||||||
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
||||||
/* exported init buildPrefsWidget */
|
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';
|
||||||
|
|
||||||
const {Adw, Gio, GLib, GObject, Gtk} = imports.gi;
|
import {ExtensionPreferences, gettext as _} from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js';
|
||||||
|
|
||||||
const ExtensionUtils = imports.misc.extensionUtils;
|
|
||||||
|
|
||||||
const _ = ExtensionUtils.gettext;
|
|
||||||
|
|
||||||
/** */
|
|
||||||
function init() {
|
|
||||||
ExtensionUtils.initTranslations();
|
|
||||||
}
|
|
||||||
|
|
||||||
class WindowListPrefsWidget extends Adw.PreferencesPage {
|
class WindowListPrefsWidget extends Adw.PreferencesPage {
|
||||||
static {
|
static {
|
||||||
GObject.registerClass(this);
|
GObject.registerClass(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor() {
|
constructor(settings) {
|
||||||
super();
|
super();
|
||||||
|
|
||||||
this._actionGroup = new Gio.SimpleActionGroup();
|
this._actionGroup = new Gio.SimpleActionGroup();
|
||||||
this.insert_action_group('window-list', this._actionGroup);
|
this.insert_action_group('window-list', this._actionGroup);
|
||||||
|
|
||||||
this._settings = ExtensionUtils.getSettings();
|
this._settings = settings;
|
||||||
this._actionGroup.add_action(
|
this._actionGroup.add_action(
|
||||||
this._settings.create_action('grouping-mode'));
|
this._settings.create_action('grouping-mode'));
|
||||||
this._actionGroup.add_action(
|
this._actionGroup.add_action(
|
||||||
@@ -84,9 +79,8 @@ class WindowListPrefsWidget extends Adw.PreferencesPage {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
export default class WindowListPrefs extends ExtensionPreferences {
|
||||||
* @returns {Gtk.Widget} - the prefs widget
|
getPreferencesWidget() {
|
||||||
*/
|
return new WindowListPrefsWidget(this.getSettings());
|
||||||
function buildPrefsWidget() {
|
}
|
||||||
return new WindowListPrefsWidget();
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,17 +1,20 @@
|
|||||||
/* exported WindowPicker, WindowPickerToggle */
|
import Clutter from 'gi://Clutter';
|
||||||
const {Clutter, GObject, Shell, St} = imports.gi;
|
import GObject from 'gi://GObject';
|
||||||
|
import Shell from 'gi://Shell';
|
||||||
|
import St from 'gi://St';
|
||||||
|
|
||||||
const Layout = imports.ui.layout;
|
import {Extension, InjectionManager} from 'resource:///org/gnome/shell/extensions/extension.js';
|
||||||
const Main = imports.ui.main;
|
import * as Layout from 'resource:///org/gnome/shell/ui/layout.js';
|
||||||
const {WorkspacesDisplay} = imports.ui.workspacesView;
|
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
|
||||||
const Workspace = imports.ui.workspace;
|
import {WorkspacesDisplay} from 'resource:///org/gnome/shell/ui/workspacesView.js';
|
||||||
|
import * as Workspace from 'resource:///org/gnome/shell/ui/workspace.js';
|
||||||
|
|
||||||
const {VIGNETTE_BRIGHTNESS} = imports.ui.lightbox;
|
import {VIGNETTE_BRIGHTNESS} from 'resource:///org/gnome/shell/ui/lightbox.js';
|
||||||
const {
|
import {
|
||||||
SIDE_CONTROLS_ANIMATION_TIME,
|
SIDE_CONTROLS_ANIMATION_TIME,
|
||||||
OverviewAdjustment,
|
OverviewAdjustment,
|
||||||
ControlsState,
|
ControlsState
|
||||||
} = imports.ui.overviewControls;
|
} from 'resource:///org/gnome/shell/ui/overviewControls.js';
|
||||||
|
|
||||||
class MyWorkspacesDisplay extends WorkspacesDisplay {
|
class MyWorkspacesDisplay extends WorkspacesDisplay {
|
||||||
static {
|
static {
|
||||||
@@ -32,12 +35,13 @@ class MyWorkspacesDisplay extends WorkspacesDisplay {
|
|||||||
|
|
||||||
super(controls, workspaceAdjustment, overviewAdjustment);
|
super(controls, workspaceAdjustment, overviewAdjustment);
|
||||||
|
|
||||||
|
this._windowPicker = controls;
|
||||||
|
|
||||||
this._workspaceAdjustment = workspaceAdjustment;
|
this._workspaceAdjustment = workspaceAdjustment;
|
||||||
this._workspaceAdjustment.actor = this;
|
this._workspaceAdjustment.actor = this;
|
||||||
|
|
||||||
this._nWorkspacesChangedId =
|
workspaceManager.connectObject('notify::n-workspaces',
|
||||||
workspaceManager.connect('notify::n-workspaces',
|
() => this._updateAdjustment(), this);
|
||||||
this._updateAdjustment.bind(this));
|
|
||||||
|
|
||||||
this.add_constraint(
|
this.add_constraint(
|
||||||
new Layout.MonitorConstraint({
|
new Layout.MonitorConstraint({
|
||||||
@@ -48,7 +52,7 @@ class MyWorkspacesDisplay extends WorkspacesDisplay {
|
|||||||
|
|
||||||
prepareToEnterOverview(...args) {
|
prepareToEnterOverview(...args) {
|
||||||
if (!this._scrollEventId) {
|
if (!this._scrollEventId) {
|
||||||
this._scrollEventId = Main.windowPicker.connect('scroll-event',
|
this._scrollEventId = this._windowPicker.connect('scroll-event',
|
||||||
this._onScrollEvent.bind(this));
|
this._onScrollEvent.bind(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -57,7 +61,7 @@ class MyWorkspacesDisplay extends WorkspacesDisplay {
|
|||||||
|
|
||||||
vfunc_hide(...args) {
|
vfunc_hide(...args) {
|
||||||
if (this._scrollEventId > 0)
|
if (this._scrollEventId > 0)
|
||||||
Main.windowPicker.disconnect(this._scrollEventId);
|
this._windowPicker.disconnect(this._scrollEventId);
|
||||||
this._scrollEventId = 0;
|
this._scrollEventId = 0;
|
||||||
|
|
||||||
super.vfunc_hide(...args);
|
super.vfunc_hide(...args);
|
||||||
@@ -70,86 +74,9 @@ class MyWorkspacesDisplay extends WorkspacesDisplay {
|
|||||||
value: workspaceManager.get_active_workspace_index(),
|
value: workspaceManager.get_active_workspace_index(),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
_onDestroy() {
|
|
||||||
if (this._nWorkspacesChangedId)
|
|
||||||
global.workspace_manager.disconnect(this._nWorkspacesChangedId);
|
|
||||||
this._nWorkspacesChangedId = 0;
|
|
||||||
|
|
||||||
super._onDestroy();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class MyWorkspace extends Workspace.Workspace {
|
export class WindowPicker extends Clutter.Actor {
|
||||||
static {
|
|
||||||
GObject.registerClass(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(...args) {
|
|
||||||
super(...args);
|
|
||||||
|
|
||||||
this._adjChangedId =
|
|
||||||
this._overviewAdjustment.connect('notify::value', () => {
|
|
||||||
const {value: progress} = this._overviewAdjustment;
|
|
||||||
const brightness = 1 - (1 - VIGNETTE_BRIGHTNESS) * progress;
|
|
||||||
for (const bg of this._background?._backgroundGroup ?? []) {
|
|
||||||
bg.content.set({
|
|
||||||
vignette: true,
|
|
||||||
brightness,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
_onDestroy() {
|
|
||||||
super._onDestroy();
|
|
||||||
|
|
||||||
if (this._adjChangedId)
|
|
||||||
this._overviewAdjustment.disconnect(this._adjChangedId);
|
|
||||||
this._adjChangedId = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class MyWorkspaceBackground extends Workspace.WorkspaceBackground {
|
|
||||||
static {
|
|
||||||
GObject.registerClass(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
_updateBorderRadius() {
|
|
||||||
}
|
|
||||||
|
|
||||||
vfunc_allocate(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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var WindowPicker = class WindowPicker extends Clutter.Actor {
|
|
||||||
static [GObject.signals] = {
|
static [GObject.signals] = {
|
||||||
'open-state-changed': {param_types: [GObject.TYPE_BOOLEAN]},
|
'open-state-changed': {param_types: [GObject.TYPE_BOOLEAN]},
|
||||||
};
|
};
|
||||||
@@ -164,11 +91,11 @@ var WindowPicker = class WindowPicker extends Clutter.Actor {
|
|||||||
this._visible = false;
|
this._visible = false;
|
||||||
this._modal = false;
|
this._modal = false;
|
||||||
|
|
||||||
this._overlayKeyId = 0;
|
|
||||||
this._stageKeyPressId = 0;
|
this._stageKeyPressId = 0;
|
||||||
|
|
||||||
this._adjustment = new OverviewAdjustment(this);
|
this._adjustment = new OverviewAdjustment(this);
|
||||||
|
|
||||||
|
this._injectionManager = new InjectionManager();
|
||||||
this.connect('destroy', this._onDestroy.bind(this));
|
this.connect('destroy', this._onDestroy.bind(this));
|
||||||
|
|
||||||
global.bind_property('screen-width',
|
global.bind_property('screen-width',
|
||||||
@@ -186,21 +113,78 @@ var WindowPicker = class WindowPicker extends Clutter.Actor {
|
|||||||
if (!Main.sessionMode.hasOverview) {
|
if (!Main.sessionMode.hasOverview) {
|
||||||
this._injectBackgroundShade();
|
this._injectBackgroundShade();
|
||||||
|
|
||||||
this._overlayKeyId = global.display.connect('overlay-key', () => {
|
global.display.connectObject('overlay-key', () => {
|
||||||
if (!this._visible)
|
if (!this._visible)
|
||||||
this.open();
|
this.open();
|
||||||
else
|
else
|
||||||
this.close();
|
this.close();
|
||||||
});
|
}, this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_injectBackgroundShade() {
|
_injectBackgroundShade() {
|
||||||
this._origWorkspace = Workspace.Workspace;
|
const backgroundProto = Workspace.WorkspaceBackground.prototype;
|
||||||
this._origWorkspaceBackground = Workspace.WorkspaceBackground;
|
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);
|
||||||
|
|
||||||
Workspace.Workspace = MyWorkspace;
|
const themeNode = this.get_theme_node();
|
||||||
Workspace.WorkspaceBackground = MyWorkspaceBackground;
|
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() {
|
get visible() {
|
||||||
@@ -306,27 +290,15 @@ var WindowPicker = class WindowPicker extends Clutter.Actor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_onDestroy() {
|
_onDestroy() {
|
||||||
if (this._origWorkspace)
|
this._injectionManager.clear();
|
||||||
Workspace.Workspace = this._origWorkspace;
|
|
||||||
|
|
||||||
if (this._origWorkspaceBackground)
|
|
||||||
Workspace.WorkspaceBackground = this._origWorkspaceBackground;
|
|
||||||
|
|
||||||
if (this._monitorsChangedId)
|
|
||||||
Main.layoutManager.disconnect(this._monitorsChangedId);
|
|
||||||
this._monitorsChangedId = 0;
|
|
||||||
|
|
||||||
if (this._overlayKeyId)
|
|
||||||
global.display.disconnect(this._overlayKeyId);
|
|
||||||
this._overlayKeyId = 0;
|
|
||||||
|
|
||||||
if (this._stageKeyPressId)
|
if (this._stageKeyPressId)
|
||||||
global.stage.disconnect(this._stageKeyPressId);
|
global.stage.disconnect(this._stageKeyPressId);
|
||||||
this._stageKeyPressId = 0;
|
this._stageKeyPressId = 0;
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|
||||||
var WindowPickerToggle = class WindowPickerToggle extends St.Button {
|
export class WindowPickerToggle extends St.Button {
|
||||||
static {
|
static {
|
||||||
GObject.registerClass(this);
|
GObject.registerClass(this);
|
||||||
}
|
}
|
||||||
@@ -350,15 +322,16 @@ var WindowPickerToggle = class WindowPickerToggle extends St.Button {
|
|||||||
toggle_mode: true,
|
toggle_mode: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const {windowPicker} = Extension.lookupByURL(import.meta.url);
|
||||||
this.connect('notify::checked', () => {
|
this.connect('notify::checked', () => {
|
||||||
if (this.checked)
|
if (this.checked)
|
||||||
Main.windowPicker.open();
|
windowPicker.open();
|
||||||
else
|
else
|
||||||
Main.windowPicker.close();
|
windowPicker.close();
|
||||||
});
|
});
|
||||||
|
|
||||||
Main.windowPicker.connect('open-state-changed', () => {
|
windowPicker.connect('open-state-changed', () => {
|
||||||
this.checked = Main.windowPicker.visible;
|
this.checked = windowPicker.visible;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|||||||
@@ -1,13 +1,15 @@
|
|||||||
/* exported WorkspaceIndicator */
|
import Clutter from 'gi://Clutter';
|
||||||
const {Clutter, Gio, GObject, Meta, St} = imports.gi;
|
import Gio from 'gi://Gio';
|
||||||
|
import GObject from 'gi://GObject';
|
||||||
|
import Meta from 'gi://Meta';
|
||||||
|
import St from 'gi://St';
|
||||||
|
|
||||||
const DND = imports.ui.dnd;
|
import {gettext as _} from 'resource:///org/gnome/shell/extensions/extension.js';
|
||||||
const ExtensionUtils = imports.misc.extensionUtils;
|
|
||||||
const Main = imports.ui.main;
|
|
||||||
const PanelMenu = imports.ui.panelMenu;
|
|
||||||
const PopupMenu = imports.ui.popupMenu;
|
|
||||||
|
|
||||||
const _ = ExtensionUtils.gettext;
|
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_OFFSET = 6;
|
||||||
const TOOLTIP_ANIMATION_TIME = 150;
|
const TOOLTIP_ANIMATION_TIME = 150;
|
||||||
@@ -29,20 +31,17 @@ class WindowPreview extends St.Button {
|
|||||||
|
|
||||||
this._window = window;
|
this._window = window;
|
||||||
|
|
||||||
this.connect('destroy', this._onDestroy.bind(this));
|
this._window.connectObject(
|
||||||
|
'size-changed', () => this.queue_relayout(),
|
||||||
this._sizeChangedId = this._window.connect('size-changed',
|
'position-changed', () => {
|
||||||
() => this.queue_relayout());
|
|
||||||
this._positionChangedId = this._window.connect('position-changed',
|
|
||||||
() => {
|
|
||||||
this._updateVisible();
|
this._updateVisible();
|
||||||
this.queue_relayout();
|
this.queue_relayout();
|
||||||
});
|
},
|
||||||
this._minimizedChangedId = this._window.connect('notify::minimized',
|
'notify::minimized', this._updateVisible.bind(this),
|
||||||
this._updateVisible.bind(this));
|
this);
|
||||||
|
|
||||||
this._focusChangedId = global.display.connect('notify::focus-window',
|
global.display.connectObject('notify::focus-window',
|
||||||
this._onFocusChanged.bind(this));
|
this._onFocusChanged.bind(this), this);
|
||||||
this._onFocusChanged();
|
this._onFocusChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -51,13 +50,6 @@ class WindowPreview extends St.Button {
|
|||||||
return this._window;
|
return this._window;
|
||||||
}
|
}
|
||||||
|
|
||||||
_onDestroy() {
|
|
||||||
this._window.disconnect(this._sizeChangedId);
|
|
||||||
this._window.disconnect(this._positionChangedId);
|
|
||||||
this._window.disconnect(this._minimizedChangedId);
|
|
||||||
global.display.disconnect(this._focusChangedId);
|
|
||||||
}
|
|
||||||
|
|
||||||
_onFocusChanged() {
|
_onFocusChanged() {
|
||||||
if (global.display.focus_window === this._window)
|
if (global.display.focus_window === this._window)
|
||||||
this.add_style_class_name('active');
|
this.add_style_class_name('active');
|
||||||
@@ -138,16 +130,13 @@ class WorkspaceThumbnail extends St.Button {
|
|||||||
let workspaceManager = global.workspace_manager;
|
let workspaceManager = global.workspace_manager;
|
||||||
this._workspace = workspaceManager.get_workspace_by_index(index);
|
this._workspace = workspaceManager.get_workspace_by_index(index);
|
||||||
|
|
||||||
this._windowAddedId = this._workspace.connect('window-added',
|
this._workspace.connectObject(
|
||||||
(ws, window) => {
|
'window-added', (ws, window) => this._addWindow(window),
|
||||||
this._addWindow(window);
|
'window-removed', (ws, window) => this._removeWindow(window),
|
||||||
});
|
this);
|
||||||
this._windowRemovedId = this._workspace.connect('window-removed',
|
|
||||||
(ws, window) => {
|
global.display.connectObject('restacked',
|
||||||
this._removeWindow(window);
|
this._onRestacked.bind(this), this);
|
||||||
});
|
|
||||||
this._restackedId = global.display.connect('restacked',
|
|
||||||
this._onRestacked.bind(this));
|
|
||||||
|
|
||||||
this._workspace.list_windows().forEach(w => this._addWindow(w));
|
this._workspace.list_windows().forEach(w => this._addWindow(w));
|
||||||
this._onRestacked();
|
this._onRestacked();
|
||||||
@@ -245,14 +234,10 @@ class WorkspaceThumbnail extends St.Button {
|
|||||||
|
|
||||||
_onDestroy() {
|
_onDestroy() {
|
||||||
this._tooltip.destroy();
|
this._tooltip.destroy();
|
||||||
|
|
||||||
this._workspace.disconnect(this._windowAddedId);
|
|
||||||
this._workspace.disconnect(this._windowRemovedId);
|
|
||||||
global.display.disconnect(this._restackedId);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var WorkspaceIndicator = class WorkspaceIndicator extends PanelMenu.Button {
|
export class WorkspaceIndicator extends PanelMenu.Button {
|
||||||
static {
|
static {
|
||||||
GObject.registerClass(this);
|
GObject.registerClass(this);
|
||||||
}
|
}
|
||||||
@@ -295,14 +280,11 @@ var WorkspaceIndicator = class WorkspaceIndicator extends PanelMenu.Button {
|
|||||||
|
|
||||||
this._workspacesItems = [];
|
this._workspacesItems = [];
|
||||||
|
|
||||||
this._workspaceManagerSignals = [
|
workspaceManager.connectObject(
|
||||||
workspaceManager.connect('notify::n-workspaces',
|
'notify::n-workspaces', this._nWorkspacesChanged.bind(this), GObject.ConnectFlags.AFTER,
|
||||||
this._nWorkspacesChanged.bind(this)),
|
'workspace-switched', this._onWorkspaceSwitched.bind(this), GObject.ConnectFlags.AFTER,
|
||||||
workspaceManager.connect_after('workspace-switched',
|
'notify::layout-rows', this._updateThumbnailVisibility.bind(this),
|
||||||
this._onWorkspaceSwitched.bind(this)),
|
this);
|
||||||
workspaceManager.connect('notify::layout-rows',
|
|
||||||
this._updateThumbnailVisibility.bind(this)),
|
|
||||||
];
|
|
||||||
|
|
||||||
this.connect('scroll-event', this._onScrollEvent.bind(this));
|
this.connect('scroll-event', this._onScrollEvent.bind(this));
|
||||||
this._updateMenu();
|
this._updateMenu();
|
||||||
@@ -310,20 +292,8 @@ var WorkspaceIndicator = class WorkspaceIndicator extends PanelMenu.Button {
|
|||||||
this._updateThumbnailVisibility();
|
this._updateThumbnailVisibility();
|
||||||
|
|
||||||
this._settings = new Gio.Settings({schema_id: 'org.gnome.desktop.wm.preferences'});
|
this._settings = new Gio.Settings({schema_id: 'org.gnome.desktop.wm.preferences'});
|
||||||
this._settingsChangedId = this._settings.connect(
|
this._settings.connectObject('changed::workspace-names',
|
||||||
'changed::workspace-names', this._updateMenuLabels.bind(this));
|
() => this._updateMenuLabels(), this);
|
||||||
}
|
|
||||||
|
|
||||||
_onDestroy() {
|
|
||||||
for (let i = 0; i < this._workspaceManagerSignals.length; i++)
|
|
||||||
global.workspace_manager.disconnect(this._workspaceManagerSignals[i]);
|
|
||||||
|
|
||||||
if (this._settingsChangedId) {
|
|
||||||
this._settings.disconnect(this._settingsChangedId);
|
|
||||||
this._settingsChangedId = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
super._onDestroy();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_updateThumbnailVisibility() {
|
_updateThumbnailVisibility() {
|
||||||
@@ -447,4 +417,4 @@ var WorkspaceIndicator = class WorkspaceIndicator extends PanelMenu.Button {
|
|||||||
let newIndex = this._currentWorkspace + diff;
|
let newIndex = this._currentWorkspace + diff;
|
||||||
this._activate(newIndex);
|
this._activate(newIndex);
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|||||||
@@ -1,276 +1,290 @@
|
|||||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||||
/* exported init */
|
import Clutter from 'gi://Clutter';
|
||||||
const {Clutter, Graphene, GObject, St} = imports.gi;
|
import Graphene from 'gi://Graphene';
|
||||||
|
import St from 'gi://St';
|
||||||
|
|
||||||
const Main = imports.ui.main;
|
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
|
||||||
const OverviewControls = imports.ui.overviewControls;
|
import * as OverviewControls from 'resource:///org/gnome/shell/ui/overviewControls.js';
|
||||||
const Workspace = imports.ui.workspace;
|
import {InjectionManager} from 'resource:///org/gnome/shell/extensions/extension.js';
|
||||||
const WorkspacesView = imports.ui.workspacesView;
|
import {WindowPreview} from 'resource:///org/gnome/shell/ui/windowPreview.js';
|
||||||
|
import {Workspace} from 'resource:///org/gnome/shell/ui/workspace.js';
|
||||||
|
import {WorkspacesView} from 'resource:///org/gnome/shell/ui/workspacesView.js';
|
||||||
|
|
||||||
const WINDOW_SLOT = 4;
|
const WINDOW_SLOT = 4;
|
||||||
|
|
||||||
class MyWorkspace extends Workspace.Workspace {
|
export default class Extension {
|
||||||
static {
|
|
||||||
GObject.registerClass(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(...args) {
|
|
||||||
super(...args);
|
|
||||||
|
|
||||||
if (this.metaWorkspace && this.metaWorkspace.index() < 9) {
|
|
||||||
this._tip = new St.Label({
|
|
||||||
style_class: 'extension-windowsNavigator-window-tooltip',
|
|
||||||
visible: false,
|
|
||||||
});
|
|
||||||
this.add_actor(this._tip);
|
|
||||||
|
|
||||||
this.connect('notify::scale-x', () => {
|
|
||||||
this._tip.set_scale(1 / this.scale_x, 1 / this.scale_x);
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
this._tip = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
vfunc_allocate(box) {
|
|
||||||
super.vfunc_allocate(box);
|
|
||||||
|
|
||||||
if (this._tip)
|
|
||||||
this._tip.allocate_preferred_size(0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
showTooltip() {
|
|
||||||
if (!this._tip)
|
|
||||||
return;
|
|
||||||
this._tip.text = (this.metaWorkspace.index() + 1).toString();
|
|
||||||
this._tip.show();
|
|
||||||
this.set_child_below_sibling(this._tip, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
hideTooltip() {
|
|
||||||
if (this._tip)
|
|
||||||
this._tip.hide();
|
|
||||||
}
|
|
||||||
|
|
||||||
getWindowWithTooltip(id) {
|
|
||||||
const {layoutManager} = this._container;
|
|
||||||
const slot = layoutManager._windowSlots[id - 1];
|
|
||||||
return slot ? slot[WINDOW_SLOT].metaWindow : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
showWindowsTooltips() {
|
|
||||||
const {layoutManager} = this._container;
|
|
||||||
for (let i = 0; i < layoutManager._windowSlots.length; i++) {
|
|
||||||
if (layoutManager._windowSlots[i])
|
|
||||||
layoutManager._windowSlots[i][WINDOW_SLOT].showTooltip(`${i + 1}`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
hideWindowsTooltips() {
|
|
||||||
const {layoutManager} = this._container;
|
|
||||||
for (let i in layoutManager._windowSlots) {
|
|
||||||
if (layoutManager._windowSlots[i])
|
|
||||||
layoutManager._windowSlots[i][WINDOW_SLOT].hideTooltip();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// overriding _addWindowClone to apply the tooltip patch on the cloned
|
|
||||||
// windowPreview
|
|
||||||
_addWindowClone(metaWindow) {
|
|
||||||
const clone = super._addWindowClone(metaWindow);
|
|
||||||
|
|
||||||
// appling the tooltip patch
|
|
||||||
(function patchPreview() {
|
|
||||||
this._text = new St.Label({
|
|
||||||
style_class: 'extension-windowsNavigator-window-tooltip',
|
|
||||||
visible: false,
|
|
||||||
});
|
|
||||||
|
|
||||||
this._text.add_constraint(new Clutter.BindConstraint({
|
|
||||||
source: this.windowContainer,
|
|
||||||
coordinate: Clutter.BindCoordinate.POSITION,
|
|
||||||
}));
|
|
||||||
this._text.add_constraint(new Clutter.AlignConstraint({
|
|
||||||
source: this.windowContainer,
|
|
||||||
align_axis: Clutter.AlignAxis.X_AXIS,
|
|
||||||
pivot_point: new Graphene.Point({x: 0.5, y: -1}),
|
|
||||||
factor: this._closeButtonSide === St.Side.LEFT ? 1 : 0,
|
|
||||||
}));
|
|
||||||
this._text.add_constraint(new Clutter.AlignConstraint({
|
|
||||||
source: this.windowContainer,
|
|
||||||
align_axis: Clutter.AlignAxis.Y_AXIS,
|
|
||||||
pivot_point: new Graphene.Point({x: -1, y: 0.5}),
|
|
||||||
factor: 0,
|
|
||||||
}));
|
|
||||||
|
|
||||||
this.add_child(this._text);
|
|
||||||
}).call(clone);
|
|
||||||
|
|
||||||
clone.showTooltip = function (text) {
|
|
||||||
this._text.set({text});
|
|
||||||
this._text.show();
|
|
||||||
};
|
|
||||||
|
|
||||||
clone.hideTooltip = function () {
|
|
||||||
if (this._text && this._text.visible)
|
|
||||||
this._text.hide();
|
|
||||||
};
|
|
||||||
|
|
||||||
return clone;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class MyWorkspacesView extends WorkspacesView.WorkspacesView {
|
|
||||||
static {
|
|
||||||
GObject.registerClass(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(...args) {
|
|
||||||
super(...args);
|
|
||||||
|
|
||||||
this._pickWorkspace = false;
|
|
||||||
this._pickWindow = false;
|
|
||||||
this._keyPressEventId =
|
|
||||||
global.stage.connect('key-press-event', this._onKeyPress.bind(this));
|
|
||||||
this._keyReleaseEventId =
|
|
||||||
global.stage.connect('key-release-event', this._onKeyRelease.bind(this));
|
|
||||||
}
|
|
||||||
|
|
||||||
_onDestroy() {
|
|
||||||
super._onDestroy();
|
|
||||||
|
|
||||||
global.stage.disconnect(this._keyPressEventId);
|
|
||||||
global.stage.disconnect(this._keyReleaseEventId);
|
|
||||||
}
|
|
||||||
|
|
||||||
_hideTooltips() {
|
|
||||||
if (global.stage.get_key_focus() === global.stage)
|
|
||||||
global.stage.set_key_focus(this._prevFocusActor);
|
|
||||||
this._pickWindow = false;
|
|
||||||
for (let i = 0; i < this._workspaces.length; i++)
|
|
||||||
this._workspaces[i].hideWindowsTooltips();
|
|
||||||
}
|
|
||||||
|
|
||||||
_hideWorkspacesTooltips() {
|
|
||||||
global.stage.set_key_focus(this._prevFocusActor);
|
|
||||||
this._pickWorkspace = false;
|
|
||||||
for (let i = 0; i < this._workspaces.length; i++)
|
|
||||||
this._workspaces[i].hideTooltip();
|
|
||||||
}
|
|
||||||
|
|
||||||
_onKeyRelease(s, o) {
|
|
||||||
if (this._pickWindow &&
|
|
||||||
(o.get_key_symbol() === Clutter.KEY_Alt_L ||
|
|
||||||
o.get_key_symbol() === Clutter.KEY_Alt_R))
|
|
||||||
this._hideTooltips();
|
|
||||||
if (this._pickWorkspace &&
|
|
||||||
(o.get_key_symbol() === Clutter.KEY_Control_L ||
|
|
||||||
o.get_key_symbol() === Clutter.KEY_Control_R))
|
|
||||||
this._hideWorkspacesTooltips();
|
|
||||||
}
|
|
||||||
|
|
||||||
_onKeyPress(s, o) {
|
|
||||||
const {ControlsState} = OverviewControls;
|
|
||||||
if (this._overviewAdjustment.value !== ControlsState.WINDOW_PICKER)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
let workspaceManager = global.workspace_manager;
|
|
||||||
|
|
||||||
if ((o.get_key_symbol() === Clutter.KEY_Alt_L ||
|
|
||||||
o.get_key_symbol() === Clutter.KEY_Alt_R) &&
|
|
||||||
!this._pickWorkspace) {
|
|
||||||
this._prevFocusActor = global.stage.get_key_focus();
|
|
||||||
global.stage.set_key_focus(null);
|
|
||||||
this._active = workspaceManager.get_active_workspace_index();
|
|
||||||
this._pickWindow = true;
|
|
||||||
this._workspaces[workspaceManager.get_active_workspace_index()].showWindowsTooltips();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if ((o.get_key_symbol() === Clutter.KEY_Control_L ||
|
|
||||||
o.get_key_symbol() === Clutter.KEY_Control_R) &&
|
|
||||||
!this._pickWindow) {
|
|
||||||
this._prevFocusActor = global.stage.get_key_focus();
|
|
||||||
global.stage.set_key_focus(null);
|
|
||||||
this._pickWorkspace = true;
|
|
||||||
for (let i = 0; i < this._workspaces.length; i++)
|
|
||||||
this._workspaces[i].showTooltip();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (global.stage.get_key_focus() !== global.stage)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
// ignore shift presses, they're required to get numerals in azerty keyboards
|
|
||||||
if ((this._pickWindow || this._pickWorkspace) &&
|
|
||||||
(o.get_key_symbol() === Clutter.KEY_Shift_L ||
|
|
||||||
o.get_key_symbol() === Clutter.KEY_Shift_R))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
if (this._pickWindow) {
|
|
||||||
if (this._active !== workspaceManager.get_active_workspace_index()) {
|
|
||||||
this._hideTooltips();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
let c = o.get_key_symbol() - Clutter.KEY_KP_0;
|
|
||||||
if (c > 9 || c <= 0) {
|
|
||||||
c = o.get_key_symbol() - Clutter.KEY_0;
|
|
||||||
if (c > 9 || c <= 0) {
|
|
||||||
this._hideTooltips();
|
|
||||||
global.log(c);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let win = this._workspaces[this._active].getWindowWithTooltip(c);
|
|
||||||
this._hideTooltips();
|
|
||||||
|
|
||||||
if (win)
|
|
||||||
Main.activateWindow(win, global.get_current_time());
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (this._pickWorkspace) {
|
|
||||||
let c = o.get_key_symbol() - Clutter.KEY_KP_0;
|
|
||||||
if (c > 9 || c <= 0) {
|
|
||||||
c = o.get_key_symbol() - Clutter.KEY_0;
|
|
||||||
if (c > 9 || c <= 0) {
|
|
||||||
this._hideWorkspacesTooltips();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let workspace = this._workspaces[c - 1];
|
|
||||||
if (workspace !== undefined)
|
|
||||||
workspace.metaWorkspace.activate(global.get_current_time());
|
|
||||||
|
|
||||||
this._hideWorkspacesTooltips();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class Extension {
|
|
||||||
constructor() {
|
constructor() {
|
||||||
this._origWorkspace = Workspace.Workspace;
|
this._injectionManager = new InjectionManager();
|
||||||
this._origWorkspacesView = WorkspacesView.WorkspacesView;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
enable() {
|
enable() {
|
||||||
Workspace.Workspace = MyWorkspace;
|
const previewProto = WindowPreview.prototype;
|
||||||
WorkspacesView.WorkspacesView = MyWorkspacesView;
|
|
||||||
|
this._injectionManager.overrideMethod(previewProto, '_init', originalMethod => {
|
||||||
|
/* eslint-disable no-invalid-this */
|
||||||
|
return function (...args) {
|
||||||
|
originalMethod.call(this, ...args);
|
||||||
|
|
||||||
|
this._text = new St.Label({
|
||||||
|
style_class: 'extension-windowsNavigator-window-tooltip',
|
||||||
|
visible: false,
|
||||||
|
});
|
||||||
|
|
||||||
|
this._text.add_constraint(new Clutter.BindConstraint({
|
||||||
|
source: this.windowContainer,
|
||||||
|
coordinate: Clutter.BindCoordinate.POSITION,
|
||||||
|
}));
|
||||||
|
this._text.add_constraint(new Clutter.AlignConstraint({
|
||||||
|
source: this.windowContainer,
|
||||||
|
align_axis: Clutter.AlignAxis.X_AXIS,
|
||||||
|
pivot_point: new Graphene.Point({x: 0.5, y: -1}),
|
||||||
|
factor: this._closeButtonSide === St.Side.LEFT ? 1 : 0,
|
||||||
|
}));
|
||||||
|
this._text.add_constraint(new Clutter.AlignConstraint({
|
||||||
|
source: this.windowContainer,
|
||||||
|
align_axis: Clutter.AlignAxis.Y_AXIS,
|
||||||
|
pivot_point: new Graphene.Point({x: -1, y: 0.5}),
|
||||||
|
factor: 0,
|
||||||
|
}));
|
||||||
|
|
||||||
|
this.add_child(this._text);
|
||||||
|
};
|
||||||
|
/* eslint-enable */
|
||||||
|
});
|
||||||
|
this._injectionManager.overrideMethod(previewProto, 'showTooltip', () => {
|
||||||
|
/* eslint-disable no-invalid-this */
|
||||||
|
return function (text) {
|
||||||
|
this._text.set({text});
|
||||||
|
this._text.show();
|
||||||
|
};
|
||||||
|
/* eslint-enable */
|
||||||
|
});
|
||||||
|
this._injectionManager.overrideMethod(previewProto, 'hideTooltip', () => {
|
||||||
|
/* eslint-disable no-invalid-this */
|
||||||
|
return function () {
|
||||||
|
this._text?.hide();
|
||||||
|
};
|
||||||
|
/* eslint-enable */
|
||||||
|
});
|
||||||
|
|
||||||
|
const workspaceProto = Workspace.prototype;
|
||||||
|
this._injectionManager.overrideMethod(workspaceProto, '_init', originalMethod => {
|
||||||
|
/* eslint-disable no-invalid-this */
|
||||||
|
return function (...args) {
|
||||||
|
originalMethod.call(this, ...args);
|
||||||
|
|
||||||
|
if (this.metaWorkspace && this.metaWorkspace.index() < 9) {
|
||||||
|
this._tip = new St.Label({
|
||||||
|
style_class: 'extension-windowsNavigator-window-tooltip',
|
||||||
|
visible: false,
|
||||||
|
});
|
||||||
|
this.add_actor(this._tip);
|
||||||
|
|
||||||
|
this.connect('notify::scale-x', () => {
|
||||||
|
this._tip.set_scale(1 / this.scale_x, 1 / this.scale_x);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
this._tip = null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
/* eslint-enable */
|
||||||
|
});
|
||||||
|
this._injectionManager.overrideMethod(workspaceProto, 'vfunc_allocate', originalMethod => {
|
||||||
|
/* eslint-disable no-invalid-this */
|
||||||
|
return function (box) {
|
||||||
|
originalMethod.call(this, box);
|
||||||
|
|
||||||
|
this._tip?.allocate_preferred_size(0, 0);
|
||||||
|
};
|
||||||
|
/* eslint-enable */
|
||||||
|
});
|
||||||
|
this._injectionManager.overrideMethod(workspaceProto, 'showTooltip', () => {
|
||||||
|
/* eslint-disable no-invalid-this */
|
||||||
|
return function () {
|
||||||
|
if (!this._tip)
|
||||||
|
return;
|
||||||
|
this._tip.text = (this.metaWorkspace.index() + 1).toString();
|
||||||
|
this._tip.show();
|
||||||
|
this.set_child_below_sibling(this._tip, null);
|
||||||
|
};
|
||||||
|
/* eslint-enable */
|
||||||
|
});
|
||||||
|
this._injectionManager.overrideMethod(workspaceProto, 'hideTooltip', () => {
|
||||||
|
/* eslint-disable no-invalid-this */
|
||||||
|
return function () {
|
||||||
|
this._tip?.hide();
|
||||||
|
};
|
||||||
|
/* eslint-enable */
|
||||||
|
});
|
||||||
|
this._injectionManager.overrideMethod(workspaceProto, 'getWindowWithTooltip', () => {
|
||||||
|
/* eslint-disable no-invalid-this */
|
||||||
|
return function (id) {
|
||||||
|
const {layoutManager} = this._container;
|
||||||
|
const slot = layoutManager._windowSlots[id - 1];
|
||||||
|
return slot ? slot[WINDOW_SLOT].metaWindow : null;
|
||||||
|
};
|
||||||
|
/* eslint-enable */
|
||||||
|
});
|
||||||
|
this._injectionManager.overrideMethod(workspaceProto, 'showWindowsTooltips', () => {
|
||||||
|
/* eslint-disable no-invalid-this */
|
||||||
|
return function () {
|
||||||
|
const {layoutManager} = this._container;
|
||||||
|
for (let i = 0; i < layoutManager._windowSlots.length; i++) {
|
||||||
|
if (layoutManager._windowSlots[i])
|
||||||
|
layoutManager._windowSlots[i][WINDOW_SLOT].showTooltip(`${i + 1}`);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
/* eslint-enable */
|
||||||
|
});
|
||||||
|
this._injectionManager.overrideMethod(workspaceProto, 'hideWindowsTooltips', () => {
|
||||||
|
/* eslint-disable no-invalid-this */
|
||||||
|
return function () {
|
||||||
|
const {layoutManager} = this._container;
|
||||||
|
for (let i in layoutManager._windowSlots) {
|
||||||
|
if (layoutManager._windowSlots[i])
|
||||||
|
layoutManager._windowSlots[i][WINDOW_SLOT].hideTooltip();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
/* eslint-enable */
|
||||||
|
});
|
||||||
|
|
||||||
|
const viewProto = WorkspacesView.prototype;
|
||||||
|
this._injectionManager.overrideMethod(viewProto, '_init', originalMethod => {
|
||||||
|
/* eslint-disable no-invalid-this */
|
||||||
|
return function (...args) {
|
||||||
|
originalMethod.call(this, ...args);
|
||||||
|
|
||||||
|
this._pickWorkspace = false;
|
||||||
|
this._pickWindow = false;
|
||||||
|
global.stage.connectObject(
|
||||||
|
'key-press-event', this._onKeyPress.bind(this),
|
||||||
|
'key-release-event', this._onKeyRelease.bind(this),
|
||||||
|
this);
|
||||||
|
};
|
||||||
|
/* eslint-enable */
|
||||||
|
});
|
||||||
|
this._injectionManager.overrideMethod(viewProto, '_hideTooltips', () => {
|
||||||
|
/* eslint-disable no-invalid-this */
|
||||||
|
return function () {
|
||||||
|
if (global.stage.get_key_focus() === global.stage)
|
||||||
|
global.stage.set_key_focus(this._prevFocusActor);
|
||||||
|
this._pickWindow = false;
|
||||||
|
for (let i = 0; i < this._workspaces.length; i++)
|
||||||
|
this._workspaces[i].hideWindowsTooltips();
|
||||||
|
};
|
||||||
|
/* eslint-enable */
|
||||||
|
});
|
||||||
|
this._injectionManager.overrideMethod(viewProto, '_hideWorkspacesTooltips', () => {
|
||||||
|
/* eslint-disable no-invalid-this */
|
||||||
|
return function () {
|
||||||
|
global.stage.set_key_focus(this._prevFocusActor);
|
||||||
|
this._pickWorkspace = false;
|
||||||
|
for (let i = 0; i < this._workspaces.length; i++)
|
||||||
|
this._workspaces[i].hideTooltip();
|
||||||
|
};
|
||||||
|
/* eslint-enable */
|
||||||
|
});
|
||||||
|
this._injectionManager.overrideMethod(viewProto, '_onKeyRelease', () => {
|
||||||
|
/* eslint-disable no-invalid-this */
|
||||||
|
return function (actor, event) {
|
||||||
|
if (this._pickWindow &&
|
||||||
|
(event.get_key_symbol() === Clutter.KEY_Alt_L ||
|
||||||
|
event.get_key_symbol() === Clutter.KEY_Alt_R))
|
||||||
|
this._hideTooltips();
|
||||||
|
if (this._pickWorkspace &&
|
||||||
|
(event.get_key_symbol() === Clutter.KEY_Control_L ||
|
||||||
|
event.get_key_symbol() === Clutter.KEY_Control_R))
|
||||||
|
this._hideWorkspacesTooltips();
|
||||||
|
};
|
||||||
|
/* eslint-enable */
|
||||||
|
});
|
||||||
|
this._injectionManager.overrideMethod(viewProto, '_onKeyPress', () => {
|
||||||
|
/* eslint-disable no-invalid-this */
|
||||||
|
return function (actor, event) {
|
||||||
|
const {ControlsState} = OverviewControls;
|
||||||
|
if (this._overviewAdjustment.value !== ControlsState.WINDOW_PICKER)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
let workspaceManager = global.workspace_manager;
|
||||||
|
|
||||||
|
if ((event.get_key_symbol() === Clutter.KEY_Alt_L ||
|
||||||
|
event.get_key_symbol() === Clutter.KEY_Alt_R) &&
|
||||||
|
!this._pickWorkspace) {
|
||||||
|
this._prevFocusActor = global.stage.get_key_focus();
|
||||||
|
global.stage.set_key_focus(null);
|
||||||
|
this._active = workspaceManager.get_active_workspace_index();
|
||||||
|
this._pickWindow = true;
|
||||||
|
this._workspaces[workspaceManager.get_active_workspace_index()].showWindowsTooltips();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if ((event.get_key_symbol() === Clutter.KEY_Control_L ||
|
||||||
|
event.get_key_symbol() === Clutter.KEY_Control_R) &&
|
||||||
|
!this._pickWindow) {
|
||||||
|
this._prevFocusActor = global.stage.get_key_focus();
|
||||||
|
global.stage.set_key_focus(null);
|
||||||
|
this._pickWorkspace = true;
|
||||||
|
for (let i = 0; i < this._workspaces.length; i++)
|
||||||
|
this._workspaces[i].showTooltip();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (global.stage.get_key_focus() !== global.stage)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// ignore shift presses, they're required to get numerals in azerty keyboards
|
||||||
|
if ((this._pickWindow || this._pickWorkspace) &&
|
||||||
|
(event.get_key_symbol() === Clutter.KEY_Shift_L ||
|
||||||
|
event.get_key_symbol() === Clutter.KEY_Shift_R))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (this._pickWindow) {
|
||||||
|
if (this._active !== workspaceManager.get_active_workspace_index()) {
|
||||||
|
this._hideTooltips();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
let c = event.get_key_symbol() - Clutter.KEY_KP_0;
|
||||||
|
if (c > 9 || c <= 0) {
|
||||||
|
c = event.get_key_symbol() - Clutter.KEY_0;
|
||||||
|
if (c > 9 || c <= 0) {
|
||||||
|
this._hideTooltips();
|
||||||
|
log(c);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let win = this._workspaces[this._active].getWindowWithTooltip(c);
|
||||||
|
this._hideTooltips();
|
||||||
|
|
||||||
|
if (win)
|
||||||
|
Main.activateWindow(win, global.get_current_time());
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (this._pickWorkspace) {
|
||||||
|
let c = event.get_key_symbol() - Clutter.KEY_KP_0;
|
||||||
|
if (c > 9 || c <= 0) {
|
||||||
|
c = event.get_key_symbol() - Clutter.KEY_0;
|
||||||
|
if (c > 9 || c <= 0) {
|
||||||
|
this._hideWorkspacesTooltips();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let workspace = this._workspaces[c - 1];
|
||||||
|
if (workspace !== undefined)
|
||||||
|
workspace.metaWorkspace.activate(global.get_current_time());
|
||||||
|
|
||||||
|
this._hideWorkspacesTooltips();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
/* eslint-enable */
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
disable() {
|
disable() {
|
||||||
Workspace.Workspace = this._origWorkspace;
|
this._injectionManager.clear();
|
||||||
WorkspacesView.WorkspacesView = this._origWorkspacesView;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @returns {Extension} - the extension's state object
|
|
||||||
*/
|
|
||||||
function init() {
|
|
||||||
return new Extension();
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,15 +1,16 @@
|
|||||||
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
||||||
/* exported init enable disable */
|
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';
|
||||||
|
|
||||||
const {Clutter, Gio, GObject, Meta, St} = imports.gi;
|
import {Extension, gettext as _} from 'resource:///org/gnome/shell/extensions/extension.js';
|
||||||
|
|
||||||
const DND = imports.ui.dnd;
|
import * as DND from 'resource:///org/gnome/shell/ui/dnd.js';
|
||||||
const ExtensionUtils = imports.misc.extensionUtils;
|
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
|
||||||
const Main = imports.ui.main;
|
import * as PanelMenu from 'resource:///org/gnome/shell/ui/panelMenu.js';
|
||||||
const PanelMenu = imports.ui.panelMenu;
|
import * as PopupMenu from 'resource:///org/gnome/shell/ui/popupMenu.js';
|
||||||
const PopupMenu = imports.ui.popupMenu;
|
|
||||||
|
|
||||||
const _ = ExtensionUtils.gettext;
|
|
||||||
|
|
||||||
const WORKSPACE_SCHEMA = 'org.gnome.desktop.wm.preferences';
|
const WORKSPACE_SCHEMA = 'org.gnome.desktop.wm.preferences';
|
||||||
const WORKSPACE_KEY = 'workspace-names';
|
const WORKSPACE_KEY = 'workspace-names';
|
||||||
@@ -34,20 +35,17 @@ class WindowPreview extends St.Button {
|
|||||||
|
|
||||||
this._window = window;
|
this._window = window;
|
||||||
|
|
||||||
this.connect('destroy', this._onDestroy.bind(this));
|
this._window.connectObject(
|
||||||
|
'size-changed', () => this.queue_relayout(),
|
||||||
this._sizeChangedId = this._window.connect('size-changed',
|
'position-changed', () => {
|
||||||
() => this.queue_relayout());
|
|
||||||
this._positionChangedId = this._window.connect('position-changed',
|
|
||||||
() => {
|
|
||||||
this._updateVisible();
|
this._updateVisible();
|
||||||
this.queue_relayout();
|
this.queue_relayout();
|
||||||
});
|
},
|
||||||
this._minimizedChangedId = this._window.connect('notify::minimized',
|
'notify::minimized', this._updateVisible.bind(this),
|
||||||
this._updateVisible.bind(this));
|
this);
|
||||||
|
|
||||||
this._focusChangedId = global.display.connect('notify::focus-window',
|
global.display.connectObject('notify::focus-window',
|
||||||
this._onFocusChanged.bind(this));
|
this._onFocusChanged.bind(this), this);
|
||||||
this._onFocusChanged();
|
this._onFocusChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -56,13 +54,6 @@ class WindowPreview extends St.Button {
|
|||||||
return this._window;
|
return this._window;
|
||||||
}
|
}
|
||||||
|
|
||||||
_onDestroy() {
|
|
||||||
this._window.disconnect(this._sizeChangedId);
|
|
||||||
this._window.disconnect(this._positionChangedId);
|
|
||||||
this._window.disconnect(this._minimizedChangedId);
|
|
||||||
global.display.disconnect(this._focusChangedId);
|
|
||||||
}
|
|
||||||
|
|
||||||
_onFocusChanged() {
|
_onFocusChanged() {
|
||||||
if (global.display.focus_window === this._window)
|
if (global.display.focus_window === this._window)
|
||||||
this.add_style_class_name('active');
|
this.add_style_class_name('active');
|
||||||
@@ -143,16 +134,13 @@ class WorkspaceThumbnail extends St.Button {
|
|||||||
let workspaceManager = global.workspace_manager;
|
let workspaceManager = global.workspace_manager;
|
||||||
this._workspace = workspaceManager.get_workspace_by_index(index);
|
this._workspace = workspaceManager.get_workspace_by_index(index);
|
||||||
|
|
||||||
this._windowAddedId = this._workspace.connect('window-added',
|
this._workspace.connectObject(
|
||||||
(ws, window) => {
|
'window-added', (ws, window) => this._addWindow(window),
|
||||||
this._addWindow(window);
|
'window-removed', (ws, window) => this._removeWindow(window),
|
||||||
});
|
this);
|
||||||
this._windowRemovedId = this._workspace.connect('window-removed',
|
|
||||||
(ws, window) => {
|
global.display.connectObject('restacked',
|
||||||
this._removeWindow(window);
|
this._onRestacked.bind(this), this);
|
||||||
});
|
|
||||||
this._restackedId = global.display.connect('restacked',
|
|
||||||
this._onRestacked.bind(this));
|
|
||||||
|
|
||||||
this._workspace.list_windows().forEach(w => this._addWindow(w));
|
this._workspace.list_windows().forEach(w => this._addWindow(w));
|
||||||
this._onRestacked();
|
this._onRestacked();
|
||||||
@@ -250,10 +238,6 @@ class WorkspaceThumbnail extends St.Button {
|
|||||||
|
|
||||||
_onDestroy() {
|
_onDestroy() {
|
||||||
this._tooltip.destroy();
|
this._tooltip.destroy();
|
||||||
|
|
||||||
this._workspace.disconnect(this._windowAddedId);
|
|
||||||
this._workspace.disconnect(this._windowRemovedId);
|
|
||||||
global.display.disconnect(this._restackedId);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -295,14 +279,11 @@ class WorkspaceIndicator extends PanelMenu.Button {
|
|||||||
this._workspaceSection = new PopupMenu.PopupMenuSection();
|
this._workspaceSection = new PopupMenu.PopupMenuSection();
|
||||||
this.menu.addMenuItem(this._workspaceSection);
|
this.menu.addMenuItem(this._workspaceSection);
|
||||||
|
|
||||||
this._workspaceManagerSignals = [
|
workspaceManager.connectObject(
|
||||||
workspaceManager.connect_after('notify::n-workspaces',
|
'notify::n-workspaces', this._nWorkspacesChanged.bind(this), GObject.ConnectFlags.AFTER,
|
||||||
this._nWorkspacesChanged.bind(this)),
|
'workspace-switched', this._onWorkspaceSwitched.bind(this), GObject.ConnectFlags.AFTER,
|
||||||
workspaceManager.connect_after('workspace-switched',
|
'notify::layout-rows', this._updateThumbnailVisibility.bind(this),
|
||||||
this._onWorkspaceSwitched.bind(this)),
|
this);
|
||||||
workspaceManager.connect('notify::layout-rows',
|
|
||||||
this._updateThumbnailVisibility.bind(this)),
|
|
||||||
];
|
|
||||||
|
|
||||||
this.connect('scroll-event', this._onScrollEvent.bind(this));
|
this.connect('scroll-event', this._onScrollEvent.bind(this));
|
||||||
this._thumbnailsBox.connect('scroll-event', this._onScrollEvent.bind(this));
|
this._thumbnailsBox.connect('scroll-event', this._onScrollEvent.bind(this));
|
||||||
@@ -311,20 +292,11 @@ class WorkspaceIndicator extends PanelMenu.Button {
|
|||||||
this._updateThumbnailVisibility();
|
this._updateThumbnailVisibility();
|
||||||
|
|
||||||
this._settings = new Gio.Settings({schema_id: WORKSPACE_SCHEMA});
|
this._settings = new Gio.Settings({schema_id: WORKSPACE_SCHEMA});
|
||||||
this._settingsChangedId = this._settings.connect(
|
this._settings.connectObject(`changed::${WORKSPACE_KEY}`,
|
||||||
`changed::${WORKSPACE_KEY}`,
|
this._updateMenuLabels.bind(this), this);
|
||||||
this._updateMenuLabels.bind(this));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_onDestroy() {
|
_onDestroy() {
|
||||||
for (let i = 0; i < this._workspaceManagerSignals.length; i++)
|
|
||||||
global.workspace_manager.disconnect(this._workspaceManagerSignals[i]);
|
|
||||||
|
|
||||||
if (this._settingsChangedId) {
|
|
||||||
this._settings.disconnect(this._settingsChangedId);
|
|
||||||
this._settingsChangedId = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
Main.panel.set_offscreen_redirect(Clutter.OffscreenRedirect.ALWAYS);
|
Main.panel.set_offscreen_redirect(Clutter.OffscreenRedirect.ALWAYS);
|
||||||
|
|
||||||
super._onDestroy();
|
super._onDestroy();
|
||||||
@@ -454,20 +426,14 @@ class WorkspaceIndicator extends PanelMenu.Button {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** */
|
export default class WorkspaceIndicatorExtension extends Extension {
|
||||||
function init() {
|
enable() {
|
||||||
ExtensionUtils.initTranslations();
|
this._indicator = new WorkspaceIndicator();
|
||||||
}
|
Main.panel.addToStatusArea('workspace-indicator', this._indicator);
|
||||||
|
}
|
||||||
|
|
||||||
let _indicator;
|
disable() {
|
||||||
|
this._indicator.destroy();
|
||||||
/** */
|
delete this._indicator;
|
||||||
function enable() {
|
}
|
||||||
_indicator = new WorkspaceIndicator();
|
|
||||||
Main.panel.addToStatusArea('workspace-indicator', _indicator);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** */
|
|
||||||
function disable() {
|
|
||||||
_indicator.destroy();
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,13 @@
|
|||||||
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
||||||
/* exported init buildPrefsWidget */
|
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';
|
||||||
|
|
||||||
const {Adw, Gio, GLib, GObject, Gtk, Pango} = imports.gi;
|
import {ExtensionPreferences, gettext as _} from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js';
|
||||||
|
|
||||||
const ExtensionUtils = imports.misc.extensionUtils;
|
|
||||||
|
|
||||||
const _ = ExtensionUtils.gettext;
|
|
||||||
const N_ = e => e;
|
const N_ = e => e;
|
||||||
|
|
||||||
const WORKSPACE_SCHEMA = 'org.gnome.desktop.wm.preferences';
|
const WORKSPACE_SCHEMA = 'org.gnome.desktop.wm.preferences';
|
||||||
@@ -256,14 +258,8 @@ class NewWorkspaceRow extends Adw.PreferencesRow {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** */
|
export default class WorkspaceIndicatorPrefs extends ExtensionPreferences {
|
||||||
function init() {
|
getPreferencesWidget() {
|
||||||
ExtensionUtils.initTranslations();
|
return new WorkspaceSettingsWidget();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @returns {Gtk.Widget} - the prefs widget
|
|
||||||
*/
|
|
||||||
function buildPrefsWidget() {
|
|
||||||
return new WorkspaceSettingsWidget();
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -68,7 +68,10 @@ rules:
|
|||||||
jsdoc/check-tag-names: error
|
jsdoc/check-tag-names: error
|
||||||
jsdoc/check-types: error
|
jsdoc/check-types: error
|
||||||
jsdoc/implements-on-classes: error
|
jsdoc/implements-on-classes: error
|
||||||
jsdoc/newline-after-description: error
|
jsdoc/tag-lines:
|
||||||
|
- error
|
||||||
|
- any
|
||||||
|
- startLines: 1
|
||||||
jsdoc/require-jsdoc: error
|
jsdoc/require-jsdoc: error
|
||||||
jsdoc/require-param: error
|
jsdoc/require-param: error
|
||||||
jsdoc/require-param-description: error
|
jsdoc/require-param-description: error
|
||||||
|
|||||||
@@ -10,3 +10,5 @@ rules:
|
|||||||
prefer-arrow-callback: error
|
prefer-arrow-callback: error
|
||||||
globals:
|
globals:
|
||||||
global: readonly
|
global: readonly
|
||||||
|
parserOptions:
|
||||||
|
sourceType: module
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
project('gnome-shell-extensions',
|
project('gnome-shell-extensions',
|
||||||
version: '45.alpha',
|
version: '45.beta',
|
||||||
meson_version: '>= 0.58.0',
|
meson_version: '>= 0.58.0',
|
||||||
license: 'GPL2+'
|
license: 'GPL2+'
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ msgstr ""
|
|||||||
"Project-Id-Version: gnome-shell-extensions master\n"
|
"Project-Id-Version: gnome-shell-extensions master\n"
|
||||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
|
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
|
||||||
"issues\n"
|
"issues\n"
|
||||||
"POT-Creation-Date: 2020-05-28 00:55+0000\n"
|
"POT-Creation-Date: 2023-02-18 15:10+0000\n"
|
||||||
"PO-Revision-Date: 2020-07-14 00:40+0300\n"
|
"PO-Revision-Date: 2023-08-01 23:41+0300\n"
|
||||||
"Last-Translator: Efstathios Iosifidis <eiosifidis@gnome.org>\n"
|
"Last-Translator: Efstathios Iosifidis <eiosifidis@gnome.org>\n"
|
||||||
"Language-Team: Greek, Modern (1453-) <gnome-el-list@gnome.org>\n"
|
"Language-Team: Greek, Modern (1453-) <gnome-el-list@gnome.org>\n"
|
||||||
"Language: el\n"
|
"Language: el\n"
|
||||||
@@ -21,22 +21,31 @@ msgstr ""
|
|||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
"X-Generator: Poedit 1.8.7.1\n"
|
"X-Generator: Poedit 3.3.2\n"
|
||||||
"X-Project-Style: gnome\n"
|
"X-Project-Style: gnome\n"
|
||||||
|
|
||||||
#: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3
|
#: data/gnome-classic.desktop.in:3
|
||||||
msgid "GNOME Classic"
|
msgid "GNOME Classic"
|
||||||
msgstr "GNOME Classic"
|
msgstr "GNOME Classic"
|
||||||
|
|
||||||
#: 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"
|
msgid "This session logs you into GNOME Classic"
|
||||||
msgstr "Αυτή η συνεδρία σας συνδέει στο GNOME Classic"
|
msgstr "Αυτή η συνεδρία σας συνδέει στο GNOME Classic"
|
||||||
|
|
||||||
#: extensions/apps-menu/extension.js:113
|
#: data/gnome-classic-wayland.desktop.in:3
|
||||||
|
msgid "GNOME Classic on Wayland"
|
||||||
|
msgstr "GNOME Classic σε Wayland"
|
||||||
|
|
||||||
|
#: data/gnome-classic-xorg.desktop.in:3
|
||||||
|
msgid "GNOME Classic on Xorg"
|
||||||
|
msgstr "GNOME Classic σε Xorg"
|
||||||
|
|
||||||
|
#: extensions/apps-menu/extension.js:118
|
||||||
msgid "Favorites"
|
msgid "Favorites"
|
||||||
msgstr "Αγαπημένα"
|
msgstr "Αγαπημένα"
|
||||||
|
|
||||||
#: extensions/apps-menu/extension.js:369
|
#: extensions/apps-menu/extension.js:380
|
||||||
msgid "Applications"
|
msgid "Applications"
|
||||||
msgstr "Εφαρμογές"
|
msgstr "Εφαρμογές"
|
||||||
|
|
||||||
@@ -53,26 +62,26 @@ msgstr ""
|
|||||||
"(όνομα αρχείου επιφάνειας εργασίας), ακολουθούμενη από άνω-κάτω τελεία και "
|
"(όνομα αρχείου επιφάνειας εργασίας), ακολουθούμενη από άνω-κάτω τελεία και "
|
||||||
"τον αριθμό του χώρου εργασίας"
|
"τον αριθμό του χώρου εργασίας"
|
||||||
|
|
||||||
#: extensions/auto-move-windows/prefs.js:35
|
#: extensions/auto-move-windows/prefs.js:152
|
||||||
msgid "Workspace Rules"
|
msgid "Workspace Rules"
|
||||||
msgstr "Κανόνες χώρων εργασίας"
|
msgstr "Κανόνες χώρων εργασίας"
|
||||||
|
|
||||||
#: extensions/auto-move-windows/prefs.js:243
|
#: extensions/auto-move-windows/prefs.js:306
|
||||||
msgid "Add Rule"
|
msgid "Add Rule"
|
||||||
msgstr "Προσθήκη κανόνα"
|
msgstr "Προσθήκη κανόνα"
|
||||||
|
|
||||||
#. TRANSLATORS: %s is the filesystem name
|
#. TRANSLATORS: %s is the filesystem name
|
||||||
#: extensions/drive-menu/extension.js:112
|
#: extensions/drive-menu/extension.js:126
|
||||||
#: extensions/places-menu/placeDisplay.js:233
|
#: extensions/places-menu/placeDisplay.js:212
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Ejecting drive “%s” failed:"
|
msgid "Ejecting drive “%s” failed:"
|
||||||
msgstr "Αποτυχία εξαγωγής του δίσκου «%s»:"
|
msgstr "Αποτυχία εξαγωγής του δίσκου «%s»:"
|
||||||
|
|
||||||
#: extensions/drive-menu/extension.js:128
|
#: extensions/drive-menu/extension.js:145
|
||||||
msgid "Removable devices"
|
msgid "Removable devices"
|
||||||
msgstr "Αφαιρούμενες συσκευές"
|
msgstr "Αφαιρούμενες συσκευές"
|
||||||
|
|
||||||
#: extensions/drive-menu/extension.js:155
|
#: extensions/drive-menu/extension.js:167
|
||||||
msgid "Open Files"
|
msgid "Open Files"
|
||||||
msgstr "Άνοιγμα αρχείων"
|
msgstr "Άνοιγμα αρχείων"
|
||||||
|
|
||||||
@@ -106,31 +115,31 @@ msgstr ""
|
|||||||
"στο κάτω μέρος. Η αλλαγή αυτής της ρύθμισης απαιτεί επανεκκίνηση του "
|
"στο κάτω μέρος. Η αλλαγή αυτής της ρύθμισης απαιτεί επανεκκίνηση του "
|
||||||
"κελύφους για να υπάρξει κάποιο αποτέλεσμα."
|
"κελύφους για να υπάρξει κάποιο αποτέλεσμα."
|
||||||
|
|
||||||
#: extensions/places-menu/extension.js:89
|
#: extensions/places-menu/extension.js:94
|
||||||
#: extensions/places-menu/extension.js:93
|
#: extensions/places-menu/extension.js:97
|
||||||
msgid "Places"
|
msgid "Places"
|
||||||
msgstr "Τοποθεσίες"
|
msgstr "Τοποθεσίες"
|
||||||
|
|
||||||
#: extensions/places-menu/placeDisplay.js:46
|
#: extensions/places-menu/placeDisplay.js:52
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Failed to launch “%s”"
|
msgid "Failed to launch “%s”"
|
||||||
msgstr "Αποτυχία εκκίνησης «%s»"
|
msgstr "Αποτυχία εκκίνησης «%s»"
|
||||||
|
|
||||||
#: extensions/places-menu/placeDisplay.js:61
|
#: extensions/places-menu/placeDisplay.js:67
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Failed to mount volume for “%s”"
|
msgid "Failed to mount volume for “%s”"
|
||||||
msgstr "Αποτυχία προσάρτησης τόμου για «%s»"
|
msgstr "Αποτυχία προσάρτησης τόμου για «%s»"
|
||||||
|
|
||||||
#: extensions/places-menu/placeDisplay.js:148
|
#: extensions/places-menu/placeDisplay.js:127
|
||||||
#: extensions/places-menu/placeDisplay.js:171
|
#: extensions/places-menu/placeDisplay.js:150
|
||||||
msgid "Computer"
|
msgid "Computer"
|
||||||
msgstr "Υπολογιστής"
|
msgstr "Υπολογιστής"
|
||||||
|
|
||||||
#: extensions/places-menu/placeDisplay.js:359
|
#: extensions/places-menu/placeDisplay.js:340
|
||||||
msgid "Home"
|
msgid "Home"
|
||||||
msgstr "Προσωπικός φάκελος"
|
msgstr "Προσωπικός φάκελος"
|
||||||
|
|
||||||
#: extensions/places-menu/placeDisplay.js:404
|
#: extensions/places-menu/placeDisplay.js:385
|
||||||
msgid "Browse Network"
|
msgid "Browse Network"
|
||||||
msgstr "Περιήγηση δικτύου"
|
msgstr "Περιήγηση δικτύου"
|
||||||
|
|
||||||
@@ -151,47 +160,47 @@ msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Το όνομα του θέματος που θα φορτωθεί από το ~ /.themes/name/gnome-shell"
|
"Το όνομα του θέματος που θα φορτωθεί από το ~ /.themes/name/gnome-shell"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:98
|
#: extensions/window-list/extension.js:72
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr "Κλείσιμο"
|
msgstr "Κλείσιμο"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:118
|
#: extensions/window-list/extension.js:92
|
||||||
msgid "Unminimize"
|
msgid "Unminimize"
|
||||||
msgstr "Αποελαχιστοποίηση"
|
msgstr "Αποελαχιστοποίηση"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:118
|
#: extensions/window-list/extension.js:92
|
||||||
msgid "Minimize"
|
msgid "Minimize"
|
||||||
msgstr "Ελαχιστοποίηση"
|
msgstr "Ελαχιστοποίηση"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:125
|
#: extensions/window-list/extension.js:99
|
||||||
msgid "Unmaximize"
|
msgid "Unmaximize"
|
||||||
msgstr "Απομεγιστοποίηση"
|
msgstr "Απομεγιστοποίηση"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:125
|
#: extensions/window-list/extension.js:99
|
||||||
msgid "Maximize"
|
msgid "Maximize"
|
||||||
msgstr "Μεγιστοποίηση"
|
msgstr "Μεγιστοποίηση"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:428
|
#: extensions/window-list/extension.js:483
|
||||||
msgid "Minimize all"
|
msgid "Minimize all"
|
||||||
msgstr "Ελαχιστοποίηση όλων"
|
msgstr "Ελαχιστοποίηση όλων"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:434
|
#: extensions/window-list/extension.js:489
|
||||||
msgid "Unminimize all"
|
msgid "Unminimize all"
|
||||||
msgstr "Αποελαχιστοποίηση όλων"
|
msgstr "Αποελαχιστοποίηση όλων"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:440
|
#: extensions/window-list/extension.js:495
|
||||||
msgid "Maximize all"
|
msgid "Maximize all"
|
||||||
msgstr "Μεγιστοποίηση όλων"
|
msgstr "Μεγιστοποίηση όλων"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:448
|
#: extensions/window-list/extension.js:503
|
||||||
msgid "Unmaximize all"
|
msgid "Unmaximize all"
|
||||||
msgstr "Απομεγιστοποίηση όλων"
|
msgstr "Απομεγιστοποίηση όλων"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:456
|
#: extensions/window-list/extension.js:511
|
||||||
msgid "Close all"
|
msgid "Close all"
|
||||||
msgstr "Κλείσιμο όλων"
|
msgstr "Κλείσιμο όλων"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:734
|
#: extensions/window-list/extension.js:795
|
||||||
msgid "Window List"
|
msgid "Window List"
|
||||||
msgstr "Λίστα παραθύρου"
|
msgstr "Λίστα παραθύρου"
|
||||||
|
|
||||||
@@ -209,7 +218,7 @@ msgstr ""
|
|||||||
"«always» (πάντα)."
|
"«always» (πάντα)."
|
||||||
|
|
||||||
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
|
||||||
#: extensions/window-list/prefs.js:100
|
#: extensions/window-list/prefs.js:79
|
||||||
msgid "Show windows from all workspaces"
|
msgid "Show windows from all workspaces"
|
||||||
msgstr "Εμφάνιση των παραθύρων από όλους τους χώρους εργασίας"
|
msgstr "Εμφάνιση των παραθύρων από όλους τους χώρους εργασίας"
|
||||||
|
|
||||||
@@ -230,41 +239,41 @@ msgstr ""
|
|||||||
"Αν θα εμφανίζεται ο κατάλογος παραθύρων όλων των συνδεμένων οθονών ή μόνο "
|
"Αν θα εμφανίζεται ο κατάλογος παραθύρων όλων των συνδεμένων οθονών ή μόνο "
|
||||||
"της κύριας οθόνης."
|
"της κύριας οθόνης."
|
||||||
|
|
||||||
#: extensions/window-list/prefs.js:29
|
#: extensions/window-list/prefs.js:35
|
||||||
msgid "Window Grouping"
|
msgid "Window Grouping"
|
||||||
msgstr "Ομαδοποίηση παραθύρου"
|
msgstr "Ομαδοποίηση παραθύρου"
|
||||||
|
|
||||||
#: extensions/window-list/prefs.js:58
|
#: extensions/window-list/prefs.js:40
|
||||||
msgid "Never group windows"
|
msgid "Never group windows"
|
||||||
msgstr "Να μη γίνεται ποτέ ομαδοποίηση παραθύρων"
|
msgstr "Να μη γίνεται ποτέ ομαδοποίηση παραθύρων"
|
||||||
|
|
||||||
#: extensions/window-list/prefs.js:59
|
#: extensions/window-list/prefs.js:41
|
||||||
msgid "Group windows when space is limited"
|
msgid "Group windows when space is limited"
|
||||||
msgstr "Ομαδοποίηση παραθύρων όταν ο χώρος είναι περιορισμένος"
|
msgstr "Ομαδοποίηση παραθύρων όταν ο χώρος είναι περιορισμένος"
|
||||||
|
|
||||||
#: extensions/window-list/prefs.js:60
|
#: extensions/window-list/prefs.js:42
|
||||||
msgid "Always group windows"
|
msgid "Always group windows"
|
||||||
msgstr "Να γίνεται πάντα ομαδοποίηση παραθύρων"
|
msgstr "Να γίνεται πάντα ομαδοποίηση παραθύρων"
|
||||||
|
|
||||||
#: extensions/window-list/prefs.js:94
|
#: extensions/window-list/prefs.js:66
|
||||||
msgid "Show on all monitors"
|
msgid "Show on all monitors"
|
||||||
msgstr "Να εμφανίζεται σε όλες τις οθόνες"
|
msgstr "Να εμφανίζεται σε όλες τις οθόνες"
|
||||||
|
|
||||||
#: extensions/window-list/workspaceIndicator.js:207
|
#: extensions/window-list/workspaceIndicator.js:261
|
||||||
#: extensions/workspace-indicator/extension.js:213
|
#: extensions/workspace-indicator/extension.js:266
|
||||||
msgid "Workspace Indicator"
|
msgid "Workspace Indicator"
|
||||||
msgstr "Δείκτης χώρου εργασίας"
|
msgstr "Δείκτης χώρου εργασίας"
|
||||||
|
|
||||||
#: extensions/workspace-indicator/prefs.js:34
|
#: extensions/workspace-indicator/prefs.js:62
|
||||||
msgid "Workspace Names"
|
|
||||||
msgstr "Ονόματα χώρων εργασίας:"
|
|
||||||
|
|
||||||
#: extensions/workspace-indicator/prefs.js:67
|
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Workspace %d"
|
msgid "Workspace %d"
|
||||||
msgstr "Χώρος εργασίας %d"
|
msgstr "Χώρος εργασίας %d"
|
||||||
|
|
||||||
#: extensions/workspace-indicator/prefs.js:218
|
#: extensions/workspace-indicator/prefs.js:129
|
||||||
|
msgid "Workspace Names"
|
||||||
|
msgstr "Ονόματα χώρων εργασίας"
|
||||||
|
|
||||||
|
#: extensions/workspace-indicator/prefs.js:255
|
||||||
msgid "Add Workspace"
|
msgid "Add Workspace"
|
||||||
msgstr "Προσθήκη χώρου εργασίας"
|
msgstr "Προσθήκη χώρου εργασίας"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user