Compare commits
477 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a76378625c | |||
| c51ed532ff | |||
| b2a1c4080d | |||
| fbd3ac0e3a | |||
| 74b7b51b19 | |||
| 5b728087be | |||
| 5ba9312448 | |||
| 75a364186b | |||
| 67f2a89924 | |||
| 52e87b421a | |||
| 30c943ec08 | |||
| 49b88c5235 | |||
| d500f09803 | |||
| 91191c630b | |||
| 97dc383877 | |||
| f6c86b884c | |||
| 819d800d9e | |||
| 8bf7c6dcf4 | |||
| 3c7e2e1127 | |||
| 062d2c620f | |||
| 589d0da795 | |||
| 29e0780bd5 | |||
| 676433752e | |||
| 2fa47488e1 | |||
| 68c55e811e | |||
| 416e63346c | |||
| 46874043d7 | |||
| b3d5e06a00 | |||
| 3b4435e254 | |||
| c88f127985 | |||
| 26ee4b83c1 | |||
| f4372b314a | |||
| 5386887d29 | |||
| e0be4d85f0 | |||
| 1034b46b27 | |||
| f3e6c2aa65 | |||
| 6ae4bfb63d | |||
| 3658837f00 | |||
| d6ac84f589 | |||
| 4f6a1bf3a9 | |||
| d52f59d8b7 | |||
| d0d592e274 | |||
| a393d3cddb | |||
| 6f9b56a69a | |||
| 50654a7a41 | |||
| 789b112f51 | |||
| cff33a018a | |||
| cb25dbad9d | |||
| 2c57dc4d38 | |||
| 61f07336a4 | |||
| 1867739b57 | |||
| 10e272e3f1 | |||
| d5ebd1c046 | |||
| 4cea22a1a5 | |||
| 46cc12aba1 | |||
| 3611bfb48c | |||
| ca8ed84129 | |||
| 207da763bc | |||
| d201e91abc | |||
| c8431af8d8 | |||
| 4a896bd2ed | |||
| b01a53da95 | |||
| a30d10bab6 | |||
| b99d2fa310 | |||
| 6b74f464af | |||
| c5e5b4b43f | |||
| 0bd8b5988f | |||
| 00882e1898 | |||
| d3d88383f7 | |||
| 342a9d5dbc | |||
| 09a63b1eab | |||
| e4fb518d8e | |||
| 932403c742 | |||
| 7ab61b955a | |||
| 853578ad27 | |||
| 37e0b5cf50 | |||
| 1666809a52 | |||
| 421af687e7 | |||
| e005cdd54b | |||
| d59fda27cc | |||
| 84262192fb | |||
| 8b6208c60e | |||
| 24da559f90 | |||
| 39574c5a91 | |||
| 4a9f2c9ffb | |||
| 97c11312f0 | |||
| b0719775d0 | |||
| b705daac97 | |||
| abfa57af7d | |||
| 6ae4d06955 | |||
| 17fce87997 | |||
| fecfe79a43 | |||
| fed64f0b3b | |||
| 92fd68cb4f | |||
| 57eb99ccd0 | |||
| ef9b9de3f5 | |||
| 2e7172932f | |||
| b06d691197 | |||
| e56cc7daea | |||
| 568218d51e | |||
| ab20c2df75 | |||
| 5597c5c6b0 | |||
| 0fcf75150d | |||
| 518962a810 | |||
| 63acf623a3 | |||
| d2a98baa1f | |||
| 219d4f9458 | |||
| b5f31f4745 | |||
| ebb965bc1b | |||
| 2b5c4fbc24 | |||
| 605db5ff5d | |||
| 6b135aa2b1 | |||
| 571662133c | |||
| 51f6b93641 | |||
| 5216e460cb | |||
| 3ba27f383f | |||
| f43af678c0 | |||
| 400b88b52d | |||
| 3bd025a283 | |||
| 9c872f9f02 | |||
| 028daa724a | |||
| 111d29140c | |||
| 53b40f4897 | |||
| eb933572f5 | |||
| 6d7d6326b4 | |||
| f6107452ef | |||
| 35ef7f09f4 | |||
| 8a8f33beb4 | |||
| c387ac9a5a | |||
| c83756f8be | |||
| 30f2d221a3 | |||
| 6b8ad4bfd6 | |||
| 5b07c1e22b | |||
| a92de7db3a | |||
| 4b3f135229 | |||
| eac0686ecd | |||
| 33dd2c07c4 | |||
| 52bfafb15a | |||
| 98ac9af09f | |||
| 0437de8d5b | |||
| dbf026237d | |||
| 8e89017cb7 | |||
| 2f5f567145 | |||
| 4e00c4d7d9 | |||
| b64dd2a969 | |||
| b0a56fb0e9 | |||
| ea981e714d | |||
| 02b089fd4d | |||
| c56ed0739d | |||
| 278c89981b | |||
| 80ca2b9af0 | |||
| 098cd784c7 | |||
| 0b5247cbb2 | |||
| 72a2e71cef | |||
| bb3249b8e0 | |||
| 8d6ee48e59 | |||
| 6aef7536bc | |||
| 9fba8f2186 | |||
| d6120de2b9 | |||
| 8ec804bc86 | |||
| e62a9cdf85 | |||
| cf57261165 | |||
| 734530fdab | |||
| 0ccbb31d06 | |||
| 34a64e10fe | |||
| 767035e313 | |||
| 006cc593a3 | |||
| 15560abad7 | |||
| 14cd1db7e9 | |||
| 3f05c946ec | |||
| 9ae7f9c042 | |||
| e9ef77617f | |||
| 06b2c941f2 | |||
| 27220c95f8 | |||
| 5cc260ad39 | |||
| e81eb2097b | |||
| 22d4d38b08 | |||
| c85156ed61 | |||
| 7c766a5aea | |||
| ecd2282ca7 | |||
| 37a90cee1f | |||
| 012c1f5d33 | |||
| 9bb54ab71a | |||
| 6f708cf1fb | |||
| 3147ae5db6 | |||
| f8ea184a0f | |||
| 41f02c2901 | |||
| 2a3f9305fe | |||
| a7dfd593bd | |||
| 01c6e5caee | |||
| bf068e24da | |||
| 45dd8d992d | |||
| a8466a16f7 | |||
| 44ce1a4825 | |||
| c515e495f3 | |||
| f5e0a92cec | |||
| 75080a9595 | |||
| c11ffb5e00 | |||
| 150761721a | |||
| 6a41fe23b3 | |||
| 508508c8d2 | |||
| e4d986e2eb | |||
| 8147edfa06 | |||
| 15b0d78c01 | |||
| 834f143846 | |||
| 8ed1d26524 | |||
| e8db78a8b0 | |||
| 2d4a6635eb | |||
| a6b47be34f | |||
| 351878f136 | |||
| 32d78ceced | |||
| 063826354f | |||
| 297acee240 | |||
| e226b65915 | |||
| 8f3118ab91 | |||
| c2d6385f6e | |||
| 2444c19656 | |||
| 5b820120fc | |||
| 5ad18b258b | |||
| c30f26f3ec | |||
| e3de58323d | |||
| ee41968e17 | |||
| f2768216db | |||
| d1cddb129d | |||
| 5a60ab443e | |||
| 505289376e | |||
| 2fc4528057 | |||
| 4af9692cd5 | |||
| 44291ef9f3 | |||
| 2593de09b0 | |||
| 17017d7306 | |||
| 3a9b1cb8a8 | |||
| ca3db8deae | |||
| dcae2e986e | |||
| 68eb93f54f | |||
| fe6d7ecd6a | |||
| 58a2ddb41f | |||
| dcd0a2f41c | |||
| 14171b1ded | |||
| 65cecc5259 | |||
| 5d105a99c1 | |||
| 2447d40885 | |||
| baa7b678e8 | |||
| b21144c45f | |||
| 170e8cd8af | |||
| f2cbc2af23 | |||
| fd0d10bdef | |||
| 14fbc70578 | |||
| 7b90fd70bc | |||
| 8a0c29a52f | |||
| 3a03c86fbc | |||
| 067e663854 | |||
| f59af77941 | |||
| a98345e5f3 | |||
| f9a25bb4aa | |||
| a107a0b9fa | |||
| 8b0e8fa9b3 | |||
| ccc4adebd7 | |||
| 08b8e75118 | |||
| a6e2d61c37 | |||
| 344ec78cac | |||
| b1014b61e5 | |||
| be38af32af | |||
| c27c644977 | |||
| fb964aca8d | |||
| 79d9f2801f | |||
| ada0472028 | |||
| 1be2e0bf77 | |||
| feebedbdd8 | |||
| 834c602f5d | |||
| 8afad3a02e | |||
| 8829aa039e | |||
| e04b2769b1 | |||
| 9293a5ab4d | |||
| 0c58b507d8 | |||
| a585da93a8 | |||
| e450e619e6 | |||
| 4a747602d9 | |||
| d936717ac0 | |||
| 154b5bec32 | |||
| 2e20bc8753 | |||
| 6cc26d0dbc | |||
| 78d4e79925 | |||
| b8759174f8 | |||
| d89be65fe3 | |||
| 106ed964d5 | |||
| f4babe7575 | |||
| fff39f66a8 | |||
| 708b4ca1ad | |||
| b2158eb2e2 | |||
| bb46352c37 | |||
| 6b63222cbe | |||
| a2daa2e1b8 | |||
| d37c505bef | |||
| cb368a6207 | |||
| b0e6b66380 | |||
| 8ef5a8882f | |||
| 729de9b0ff | |||
| 59011dfe69 | |||
| 64701bef1b | |||
| 70dfbf71f5 | |||
| 4d63512e47 | |||
| d0dc1b427c | |||
| c358c59eb4 | |||
| 078f2fb853 | |||
| edbd3a7ac8 | |||
| 679f9902c1 | |||
| 7a30881c0d | |||
| 993c72ac2c | |||
| 40193aca03 | |||
| 4f91e0668a | |||
| bffd784221 | |||
| 2b1e5cb877 | |||
| d316203b6f | |||
| 965130e363 | |||
| 8e6d65d3eb | |||
| aca3c34142 | |||
| 84bd93bd2c | |||
| 3367b57c05 | |||
| 9905e643a5 | |||
| 0d8aed5ad0 | |||
| 79601cc8d0 | |||
| f021ea7ede | |||
| f3e9917729 | |||
| 14cfa0818f | |||
| 4814730400 | |||
| 91f7f8f1b5 | |||
| fa5baa4301 | |||
| c80707ee1f | |||
| 343eddbfcb | |||
| 04e0999d5b | |||
| 48c8bcec3a | |||
| 38d12453b6 | |||
| b48e92f8c1 | |||
| 14d482e16a | |||
| e87340d7ad | |||
| ee93c06304 | |||
| 1e06ed6503 | |||
| 0fd3f0f62f | |||
| 42d69afa89 | |||
| 1b57d1e015 | |||
| 658ca6415a | |||
| 5ffee2c817 | |||
| 5aad16c8bf | |||
| b623a5923f | |||
| e06245bdca | |||
| e5907292ed | |||
| 70bfbac890 | |||
| d010c60143 | |||
| 649a1cce73 | |||
| bccdc0253d | |||
| b7429bada3 | |||
| 23a85798ca | |||
| e051551747 | |||
| 6eae8d1aa3 | |||
| 6d34936375 | |||
| 46c8eaf417 | |||
| 55b491bb36 | |||
| c78bc4c094 | |||
| 024b39d627 | |||
| 349170f68f | |||
| 6ba32dff81 | |||
| 8fac2692f5 | |||
| 448b9a513d | |||
| 94339dbc19 | |||
| 4aa5b3fc27 | |||
| 84f11659f1 | |||
| 5aacdbea5f | |||
| c7b0e92eb2 | |||
| 612a27fbf5 | |||
| 0b71317791 | |||
| 465e587714 | |||
| 591c8d38db | |||
| 3fde2f8602 | |||
| 3b8bcd02aa | |||
| 9872531544 | |||
| a4ee545b9a | |||
| caa29fb9d6 | |||
| ce6e6389e4 | |||
| edd6d76a58 | |||
| b93d28e66c | |||
| e8703e3484 | |||
| fae67f89b5 | |||
| 97e18cb727 | |||
| 1bd646bc92 | |||
| f4866471e4 | |||
| b3237b6e4e | |||
| ba9226d4e2 | |||
| 9bd813777e | |||
| 56f87c4851 | |||
| 0ef412ebf1 | |||
| eb3adfd251 | |||
| 931a4aab01 | |||
| 40866b97fb | |||
| 0bcd3cd731 | |||
| 5b89864f7f | |||
| dc7d26e4d7 | |||
| 4280c21575 | |||
| 3179686e28 | |||
| 08450b6358 | |||
| 2604055fb0 | |||
| bcfe85ce34 | |||
| 4b6b6f359d | |||
| 543cf7de09 | |||
| f2cf78971d | |||
| 43130b4680 | |||
| 86f24c0a50 | |||
| 7fb6db28c2 | |||
| d37789ce7a | |||
| b47c548deb | |||
| cb60747e5a | |||
| 7f7fd8686f | |||
| 8d7144b6e4 | |||
| 8c163f3a38 | |||
| dd5801c0f7 | |||
| 3020fec2bc | |||
| 2dd771aac4 | |||
| 3c7849cc1a | |||
| 26e7f6bb00 | |||
| 58dec719c7 | |||
| 33f4410a5b | |||
| 1c8ed8df92 | |||
| 142f6e9e3c | |||
| 89e056084a | |||
| ab851d8113 | |||
| fa7b118dc3 | |||
| fbaa04082c | |||
| a5f7a7a215 | |||
| 07d9633609 | |||
| 44ccb41f90 | |||
| e62a0454c6 | |||
| f149ee4cf3 | |||
| 9539a9fa13 | |||
| bfd52dd98a | |||
| d95e2eccdc | |||
| e7145eb9fb | |||
| 656007bf1e | |||
| 4792f8fcbb | |||
| cc6a4d8331 | |||
| 33e9627801 | |||
| 956cef56b4 | |||
| d6c89cd79b | |||
| 88168553f8 | |||
| 99b90377c5 | |||
| 35860c7b2d | |||
| 792be167a4 | |||
| 269c5a1355 | |||
| ddf54c215e | |||
| 1bc146164e | |||
| 72f9c8eefc | |||
| 96d098daba | |||
| 776cfa9736 | |||
| b9a8071dd1 | |||
| da9bd8818d | |||
| 8bb0ee26db | |||
| 374b8c98b6 | |||
| 6904762590 | |||
| 764b8b9ffa | |||
| 53e738b87b | |||
| 524345606c | |||
| 3f6d55994a | |||
| 6bdb1b07ff | |||
| b2f5a930d0 | |||
| 6f83004123 | |||
| 86bd765125 | |||
| 3651237248 | |||
| 6da3e209b2 | |||
| 5a0688cffc | |||
| 7b5ef70b4d | |||
| b45480991a | |||
| ae0c1309a2 | |||
| a0d134f629 | |||
| 3a7e076067 | |||
| a4b9f70cc3 | |||
| 532aad1341 | |||
| 6def4e4a4a | |||
| 8fdc958cb9 |
@@ -1,15 +1,10 @@
|
||||
# SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de>
|
||||
# SPDX-License-Identifier: CC0-1.0
|
||||
|
||||
# These are supported funding model platforms
|
||||
|
||||
github: schneegans
|
||||
patreon: # Replace with a single Patreon username
|
||||
open_collective: # Replace with a single Open Collective username
|
||||
ko_fi: # Replace with a single Ko-fi username
|
||||
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
||||
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
||||
liberapay: # Schneegans
|
||||
issuehunt: # Replace with a single IssueHunt username
|
||||
otechie: # Replace with a single Otechie username
|
||||
custom: ['https://www.paypal.com/donate/?hosted_button_id=3F7UFL8KLVPXE']
|
||||
ko_fi: schneegans
|
||||
custom:
|
||||
[
|
||||
"https://www.paypal.com/donate/?hosted_button_id=3F7UFL8KLVPXE",
|
||||
https://schneegans.cb.id,
|
||||
]
|
||||
|
||||
@@ -14,7 +14,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v4
|
||||
- name: Download cloc
|
||||
run: sudo apt-get update -y && sudo apt-get install -y cloc
|
||||
- name: Get the Numbers
|
||||
@@ -22,7 +22,7 @@ jobs:
|
||||
echo "CODE_LINES=$(scripts/cloc.sh --loc)" >> $GITHUB_ENV
|
||||
echo "COMMENT_LINES=$(scripts/cloc.sh --percentage)" >> $GITHUB_ENV
|
||||
- name: Create Lines-of-Code-Badge
|
||||
uses: schneegans/dynamic-badges-action@v1.3.0
|
||||
uses: schneegans/dynamic-badges-action@v1.7.0
|
||||
with:
|
||||
auth: ${{ secrets.GIST_SECRET }}
|
||||
gistID: 8cf45f23253ff09b21196e7271378762
|
||||
@@ -32,7 +32,7 @@ jobs:
|
||||
color: lightgrey
|
||||
labelColor: 303030
|
||||
- name: Create Comments-Badge
|
||||
uses: schneegans/dynamic-badges-action@v1.3.0
|
||||
uses: schneegans/dynamic-badges-action@v1.7.0
|
||||
with:
|
||||
auth: ${{ secrets.GIST_SECRET }}
|
||||
gistID: 8cf45f23253ff09b21196e7271378762
|
||||
|
||||
@@ -6,10 +6,10 @@ name: Checks
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- '**'
|
||||
- "**"
|
||||
pull_request:
|
||||
branches:
|
||||
- '**'
|
||||
- "**"
|
||||
|
||||
jobs:
|
||||
clang_format:
|
||||
@@ -17,7 +17,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
- name: Download Clang-Format
|
||||
run: |
|
||||
sudo apt update -qq
|
||||
@@ -33,9 +33,9 @@ jobs:
|
||||
name: Check Compliance with REUSE Specification
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: REUSE Compliance Check
|
||||
uses: fsfe/reuse-action@v1
|
||||
- uses: actions/checkout@v4
|
||||
- name: REUSE Compliance Check
|
||||
uses: fsfe/reuse-action@v4
|
||||
|
||||
comment_percentage:
|
||||
name: Check Comment Percentage
|
||||
@@ -43,12 +43,12 @@ jobs:
|
||||
if: github.event_name == 'pull_request'
|
||||
steps:
|
||||
- name: Checkout Current Repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
path: current
|
||||
ref: ${{ github.ref }}
|
||||
- name: Checkout Base Repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
path: base
|
||||
ref: ${{ github.base_ref }}
|
||||
@@ -74,31 +74,11 @@ jobs:
|
||||
name: Run ShellCheck
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
- name: Run ShellCheck
|
||||
run: |
|
||||
find $GITHUB_WORKSPACE -type f -and \( -name "*.sh" \) | xargs shellcheck
|
||||
|
||||
references:
|
||||
name: Generate References
|
||||
runs-on: ubuntu-22.04
|
||||
if: >
|
||||
github.event_name == 'push' && contains(github.event.head_commit.message, '[generate-references]')
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Download Dependencies
|
||||
run: |
|
||||
sudo apt update -qq
|
||||
sudo apt install gettext imagemagick -qq
|
||||
- name: Build Burn-My-Windows
|
||||
run: make
|
||||
- name: Generate References
|
||||
run: sudo make references
|
||||
- uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: references
|
||||
path: tests/references/
|
||||
|
||||
build:
|
||||
name: Run Tests
|
||||
runs-on: ubuntu-22.04
|
||||
@@ -110,27 +90,24 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
version:
|
||||
- '32'
|
||||
- '33'
|
||||
- '34'
|
||||
- '35'
|
||||
- '36'
|
||||
- '37'
|
||||
- "39"
|
||||
- "40"
|
||||
- "41"
|
||||
- "rawhide"
|
||||
session:
|
||||
- 'gnome-xsession'
|
||||
- 'gnome-wayland-nested'
|
||||
- "gnome-xsession"
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Download Dependencies
|
||||
run: |
|
||||
sudo apt update -qq
|
||||
sudo apt install gettext imagemagick -qq
|
||||
- name: Build Burn-My-Windows
|
||||
run: make
|
||||
- name: Test Burn-My-Windows
|
||||
run: sudo $GITHUB_WORKSPACE/tests/run-test.sh -v ${{ matrix.version }} -s ${{ matrix.session }}
|
||||
- uses: actions/upload-artifact@v3
|
||||
if: failure()
|
||||
with:
|
||||
name: result_${{ matrix.version }}_${{ matrix.session }}
|
||||
path: tests/output/
|
||||
- uses: actions/checkout@v4
|
||||
- name: Download Dependencies
|
||||
run: |
|
||||
sudo apt update -qq
|
||||
sudo apt install gettext imagemagick -qq
|
||||
- name: Build Burn-My-Windows
|
||||
run: make
|
||||
- name: Test Burn-My-Windows
|
||||
run: sudo $GITHUB_WORKSPACE/tests/run-test.sh -v ${{ matrix.version }} -s ${{ matrix.session }}
|
||||
- uses: actions/upload-artifact@v4
|
||||
if: failure()
|
||||
with:
|
||||
name: result_${{ matrix.version }}_${{ matrix.session }}
|
||||
path: tests/output/
|
||||
|
||||
@@ -6,48 +6,50 @@ name: Deploy
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- '**'
|
||||
- "**"
|
||||
|
||||
jobs:
|
||||
gnome_bundle:
|
||||
name: Bundle GNOME Shell Extension
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v2
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
sudo apt-get update -q
|
||||
sudo apt-get install gettext
|
||||
- name: Create Release
|
||||
run: |
|
||||
make zip
|
||||
- name: Upload Release
|
||||
uses: svenstaro/upload-release-action@2.2.1
|
||||
with:
|
||||
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
file: burn-my-windows@schneegans.github.com.zip
|
||||
tag: ${{ github.ref }}
|
||||
overwrite: true
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v4
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
sudo apt-get update -q
|
||||
sudo apt-get install gettext
|
||||
- name: Create Release
|
||||
run: |
|
||||
make zip
|
||||
- name: Upload Release
|
||||
uses: svenstaro/upload-release-action@2.9.0
|
||||
with:
|
||||
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
file: burn-my-windows@schneegans.github.com.zip
|
||||
tag: ${{ github.ref }}
|
||||
overwrite: true
|
||||
draft: true
|
||||
|
||||
kwin_bundle:
|
||||
name: Bundle KWin Effect
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v2
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
sudo apt-get update -q
|
||||
sudo apt-get install gettext clang-format
|
||||
- name: Create Release
|
||||
run: |
|
||||
./kwin/build.sh
|
||||
- name: Upload Release
|
||||
uses: svenstaro/upload-release-action@2.2.1
|
||||
with:
|
||||
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
file: kwin/*.tar.gz
|
||||
tag: ${{ github.ref }}
|
||||
overwrite: true
|
||||
file_glob: true
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v4
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
sudo apt-get update -q
|
||||
sudo apt-get install gettext clang-format
|
||||
- name: Create Release
|
||||
run: |
|
||||
./kwin/build.sh
|
||||
- name: Upload Release
|
||||
uses: svenstaro/upload-release-action@2.9.0
|
||||
with:
|
||||
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
file: kwin/*.tar.gz
|
||||
tag: ${{ github.ref }}
|
||||
overwrite: true
|
||||
file_glob: true
|
||||
draft: true
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
# SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de>
|
||||
# SPDX-License-Identifier: CC0-1.0
|
||||
|
||||
name: Generate References
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
references:
|
||||
name: Generate References
|
||||
runs-on: ubuntu-22.04
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
version:
|
||||
- "39"
|
||||
- "40"
|
||||
- "41"
|
||||
- "rawhide"
|
||||
session:
|
||||
- "gnome-xsession"
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Download Dependencies
|
||||
run: |
|
||||
sudo apt update -qq
|
||||
sudo apt install gettext imagemagick -qq
|
||||
- name: Build Burn-My-Windows
|
||||
run: make
|
||||
- name: Generate References
|
||||
run: sudo $GITHUB_WORKSPACE/tests/generate-references.sh -v ${{ matrix.version }} -s ${{ matrix.session }}
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: references-${{ matrix.session }}-${{ matrix.version }}
|
||||
path: tests/references/*${{ matrix.session }}-${{ matrix.version }}.png
|
||||
@@ -1,33 +0,0 @@
|
||||
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
||||
|
||||
Files: tests/references/*
|
||||
Copyright: Simon Schneegans <code@simonschneegans.de>
|
||||
License: CC0-1.0
|
||||
|
||||
Files: kwin/metadata.desktop.in
|
||||
Copyright: Simon Schneegans <code@simonschneegans.de>
|
||||
License: CC0-1.0
|
||||
|
||||
Files: resources/credits/*
|
||||
Copyright: Simon Schneegans <code@simonschneegans.de>
|
||||
License: CC0-1.0
|
||||
|
||||
Files: resources/img/*
|
||||
Copyright: Simon Schneegans <code@simonschneegans.de>
|
||||
License: CC-BY-4.0
|
||||
|
||||
Files: docs/pics/*
|
||||
Copyright: Simon Schneegans <code@simonschneegans.de>
|
||||
License: CC-BY-4.0
|
||||
|
||||
Files: assets/*
|
||||
Copyright: Simon Schneegans <code@simonschneegans.de>
|
||||
License: CC-BY-4.0
|
||||
|
||||
Files: po/*
|
||||
Copyright: Simon Schneegans <code@simonschneegans.de>
|
||||
License: GPL-3.0-or-later
|
||||
|
||||
Files: metadata.json
|
||||
Copyright: Simon Schneegans <code@simonschneegans.de>
|
||||
License: GPL-3.0-or-later
|
||||
@@ -9,7 +9,7 @@ DOMAIN := schneegans.github.com
|
||||
ZIP_NAME := $(NAME)@$(DOMAIN).zip
|
||||
|
||||
# Some of the recipes below depend on some of these files.
|
||||
JS_FILES = $(wildcard src/*.js extension.js prefs.js)
|
||||
JS_FILES = $(wildcard src/*.js src/*/*.js extension.js prefs.js)
|
||||
UI_FILES = $(shell find resources -type f -and \( -name "*.ui" \))
|
||||
RESOURCE_FILES = $(shell find resources -mindepth 2 -type f)
|
||||
LOCALES_PO = $(wildcard po/*.po)
|
||||
@@ -17,7 +17,9 @@ LOCALES_MO = $(patsubst po/%.po,locale/%/LC_MESSAGES/$(NAME).mo,$(LOCALES_PO
|
||||
|
||||
# These files will be included in the extension zip file.
|
||||
ZIP_CONTENT = $(JS_FILES) $(LOCALES_MO) resources/$(NAME).gresource \
|
||||
schemas/gschemas.compiled metadata.json LICENSE
|
||||
schemas/org.gnome.shell.extensions.$(NAME).gschema.xml \
|
||||
schemas/org.gnome.shell.extensions.$(NAME)-profile.gschema.xml \
|
||||
metadata.json LICENSE
|
||||
|
||||
# These seven recipes can be invoked by the user.
|
||||
.PHONY: zip install uninstall pot clean test references
|
||||
@@ -44,28 +46,6 @@ pot: $(JS_FILES) $(UI_FILES)
|
||||
--output=po/$(NAME).pot \
|
||||
$(JS_FILES) $(UI_FILES)
|
||||
|
||||
# This runs several tests in containerized versions of GNOME Shell.
|
||||
test:
|
||||
@ for version in 32 33 34 35 36 37 ; do \
|
||||
for session in "gnome-xsession" "gnome-wayland-nested" ; do \
|
||||
echo ; \
|
||||
echo "Running Tests on Fedora $$version ($$session)." ; \
|
||||
echo ; \
|
||||
./tests/run-test.sh -s $$session -v $$version ; \
|
||||
done \
|
||||
done
|
||||
|
||||
# This re-generates all reference images required by the tests.
|
||||
references:
|
||||
@ for version in 32 33 34 35 36 37 ; do \
|
||||
for session in "gnome-xsession" "gnome-wayland-nested" ; do \
|
||||
echo ; \
|
||||
echo "Generating References for Fedora $$version ($$session)." ; \
|
||||
echo ; \
|
||||
./tests/generate-references.sh -s $$session -v $$version ; \
|
||||
done \
|
||||
done
|
||||
|
||||
# This removes all temporary files created with the other recipes.
|
||||
clean:
|
||||
rm -rf $(ZIP_NAME) \
|
||||
@@ -90,11 +70,6 @@ $(ZIP_NAME): $(ZIP_CONTENT)
|
||||
exit 1; \
|
||||
fi
|
||||
|
||||
# Compiles the gschemas.compiled file from the gschema.xml file.
|
||||
schemas/gschemas.compiled: schemas/org.gnome.shell.extensions.$(NAME).gschema.xml
|
||||
@echo "Compiling schemas..."
|
||||
@glib-compile-schemas schemas
|
||||
|
||||
# Compiles the gresource file from the gresources.xml.
|
||||
resources/$(NAME).gresource: resources/$(NAME).gresource.xml
|
||||
@echo "Compiling resources..."
|
||||
|
||||
@@ -4,51 +4,54 @@ SPDX-License-Identifier: CC-BY-4.0
|
||||
-->
|
||||
|
||||
<p align="center">
|
||||
<a href="https://www.youtube.com/watch?v=L2aaNF_rPHo"><img src ="docs/pics/teaser.jpg" /></a>
|
||||
<a href="https://www.youtube.com/watch?v=ZHMboQq8Z5c"><img src ="docs/pics/teaser.jpg" /></a>
|
||||
</p>
|
||||
|
||||
<h1 align="center">🔥 Set GNOME Shell on Fire!</h1>
|
||||
<p align="center">(and KWin as well)</p>
|
||||
<h1 align="center">🔥 Set GNOME Shell and KWin on Fire!</h1>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://extensions.gnome.org/extension/4679/burn-my-windows/"><img src="https://img.shields.io/badge/Download-extensions.gnome.org-e67f4d.svg?logo=gnome&logoColor=lightgrey&labelColor=303030" /></a><br/>
|
||||
<a href="https://github.com/Schneegans/Burn-My-Windows/actions"><img src="https://github.com/Schneegans/Burn-My-Windows/workflows/Checks/badge.svg?branch=main" /></a>
|
||||
<a href="https://api.reuse.software/info/github.com/Schneegans/Burn-My-Windows"><img src="https://api.reuse.software/badge/github.com/Schneegans/Burn-My-Windows" /></a>
|
||||
<a href="LICENSE"><img src="https://img.shields.io/badge/License-GPLv3-blue.svg?labelColor=303030" /></a>
|
||||
<a href="https://schneegans.github.io/sponsors/"><img src="https://gist.githubusercontent.com/Schneegans/2d06edf0937c480951feb86b9e719304/raw/weekly.svg" /></a>
|
||||
<a href="https://hosted.weblate.org/engage/burn-my-windows/"><img src="https://img.shields.io/weblate/progress/burn-my-windows?label=Translated&logo=weblate&logoColor=lightgray&labelColor=303030" /></a>
|
||||
<a href="scripts/cloc.sh"><img src="https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/Schneegans/8cf45f23253ff09b21196e7271378762/raw/loc.json" /></a>
|
||||
<a href="scripts/cloc.sh"><img src="https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/Schneegans/8cf45f23253ff09b21196e7271378762/raw/comments.json" /></a>
|
||||
</p>
|
||||
|
||||
> [!IMPORTANT]
|
||||
> The code in the `main` branch is for GNOME Shell 45+. For older GNOME versions, please use the `gnome-3.36-44` branch.
|
||||
|
||||
When I released the [Desktop Cube Extension](https://github.com/Schneegans/Desktop-Cube/) for GNOME, many people requested to revive one of the most useless features of Linux desktop history: Setting windows on fire!
|
||||
This extension is not only more useless than the cube, but it is also much more hacky. So I expect some bug! [Let's incinerate them all](https://github.com/Schneegans/Burn-My-Windows/issues)!
|
||||
|
||||
Burn-My-Windows is not only available for **GNOME** but also includes some basic support for **KDE Plasma's KWin**.
|
||||
Further down in this file you'll find installation instructions for both.
|
||||
**🖼️ The wallpapers used in the previews below were all generated using AI and are available in [this GitHub repository](https://github.com/Schneegans/ai-wallpapers).**
|
||||
|
||||
Effect | Preview
|
||||
-----|--------
|
||||
**Apparition** <br> This effect hides your windows by violently sucking them into the void of magic! | <img src ="docs/pics/apparition.gif" />
|
||||
**Broken Glass** <br> Shatter your windows into a shower sharp shards! This effect can be configured so that the shards fly away from your mouse pointer position!| <img src ="docs/pics/glass.gif" />
|
||||
**Doom** <br> Melt your windows. Inspired by the legendary screen transitions of the original Doom. | <img src ="docs/pics/doom.gif" />
|
||||
**Energize A** <br> Beam your windows away! | <img src ="docs/pics/energizeA.gif" />
|
||||
**Energize B** <br> Using different transporter technology results in an alternative visual effect. | <img src ="docs/pics/energizeB.gif" />
|
||||
**Fire** <br> The classic effect inspired by Compiz. However, this is implemented using a GLSL shader and not with a particle system like in the old days. | <img src ="docs/pics/fire.gif" />
|
||||
**Glide** <br> This very simple effect fades the window to transparency with subtle 3D effects. | <img src ="docs/pics/glide.gif" />
|
||||
**Glitch** <br> This effect applies some intentional graphics issues to your windows. | <img src ="docs/pics/glitch.gif" />
|
||||
**Hexagon** <br> With glowing lines and hexagon-shaped tiles, this effect looks very sci-fi. | <img src ="docs/pics/hexagon.gif" />
|
||||
**Incinerate** <br> A less snappy but definitely more fancy take on the fire effect. | <img src ="docs/pics/incinerate.gif" />
|
||||
**Matrix** <br> Turn your windows into a shower of green letters! The color is actually configurable.| <img src ="docs/pics/matrix.gif" />
|
||||
**Pixelate** <br> Pixelate your windows and randomly hide pixels until the entire window is gone.| <img src ="docs/pics/pixelate.gif" />
|
||||
**Pixel Wheel** <br> This simple effect pixelates the window and hides the pixels in a wheel-like fashion.| <img src ="docs/pics/pixel-wheel.gif" />
|
||||
**Pixel Wipe** <br> This effect pixelates the window and hides the pixels radially, starting from the pointer position.| <img src ="docs/pics/pixel-wipe.gif" />
|
||||
**Portal** <br> This ridiculous effect teleports your windows from and to alternative dimensions. It may resemble the portal from a well-known cartoon series... | <img src ="docs/pics/portal.gif" />
|
||||
**Snap of Disintegration** <br> Dissolve your windows into a cloud of dust.| <img src ="docs/pics/snap.gif" />
|
||||
**T-Rex Attack** <br> Destroy your windows with a series of violent slashes!| <img src ="docs/pics/trex.gif" />
|
||||
**TV Effect** <br> This is a very simple effect to demonstrate that this extension could also be used in a more professional environment. | <img src ="docs/pics/tv.gif" />
|
||||
**TV Glitch** <br> This effect combines the Glitch and the TV Effect. | <img src ="docs/pics/tv-glitch.gif" />
|
||||
**Wisps** <br> Let your windows be carried away to the realm of dreams by these little fairies! | <img src ="docs/pics/wisps.gif" />
|
||||
**Your Effect!** <br> The extension is very modular and with a bit of creativity and GLSL knowledge, [you can easily create your own effects](docs/how-to-create-new-effects.md). | [](docs/how-to-create-new-effects.md)
|
||||
| Effect | Preview |
|
||||
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
|
||||
| **Apparition** <br> This effect hides your windows by violently sucking them into the void of magic! | <img src ="docs/pics/apparition.gif" /> |
|
||||
| **Broken Glass** <br> Shatter your windows into a shower sharp shards! This effect can be configured so that the shards fly away from your mouse pointer position! | <img src ="docs/pics/broken-glass.gif" /> |
|
||||
| **Doom** <br> Melt your windows. Inspired by the legendary screen transitions of the original Doom. | <img src ="docs/pics/doom.gif" /> |
|
||||
| **Energize A** <br> Beam your windows away! | <img src ="docs/pics/energize-a.gif" /> |
|
||||
| **Energize B** <br> Using different transporter technology results in an alternative visual effect. | <img src ="docs/pics/energize-b.gif" /> |
|
||||
| **Fire** <br> The classic effect inspired by Compiz. However, this is implemented using a GLSL shader and not with a particle system like in the old days. | <img src ="docs/pics/fire.gif" /> |
|
||||
| **Focus** <br> Focus dude, focus! | <img src ="docs/pics/focus.gif" /> |
|
||||
| **Glide** <br> This very simple effect fades the window to transparency with subtle 3D effects. | <img src ="docs/pics/glide.gif" /> |
|
||||
| **Glitch** <br> This effect applies some intentional graphics issues to your windows. | <img src ="docs/pics/glitch.gif" /> |
|
||||
| **Hexagon** <br> With glowing lines and hexagon-shaped tiles, this effect looks very sci-fi. | <img src ="docs/pics/hexagon.gif" /> |
|
||||
| **Incinerate** <br> A less snappy but definitely more fancy take on the fire effect. | <img src ="docs/pics/incinerate.gif" /> |
|
||||
| **Matrix** <br> Turn your windows into a shower of green letters! The color is actually configurable. | <img src ="docs/pics/matrix.gif" /> |
|
||||
| **Paint Brush** <br> Paint or erase your windows with a thick paint brush. | <img src ="docs/pics/paint-brush.gif" /> |
|
||||
| **Pixelate** <br> Pixelate your windows and randomly hide pixels until the entire window is gone. | <img src ="docs/pics/pixelate.gif" /> |
|
||||
| **Pixel Wheel** <br> This simple effect pixelates the window and hides the pixels in a wheel-like fashion. | <img src ="docs/pics/pixel-wheel.gif" /> |
|
||||
| **Pixel Wipe** <br> This effect pixelates the window and hides the pixels radially, starting from the pointer position. | <img src ="docs/pics/pixel-wipe.gif" /> |
|
||||
| **Portal** <br> This ridiculous effect teleports your windows from and to alternative dimensions. It may resemble the portal from a well-known cartoon series... | <img src ="docs/pics/portal.gif" /> |
|
||||
| **Snap of Disintegration** <br> Dissolve your windows into a cloud of dust. | <img src ="docs/pics/snap.gif" /> |
|
||||
| **T-Rex Attack** <br> Destroy your windows with a series of violent slashes! | <img src ="docs/pics/trex.gif" /> |
|
||||
| **TV Effect** <br> This is a very simple effect to demonstrate that this extension could also be used in a more professional environment. | <img src ="docs/pics/tv.gif" /> |
|
||||
| **TV Glitch** <br> This effect combines the Glitch and the TV Effect. | <img src ="docs/pics/tv-glitch.gif" /> |
|
||||
| **Wisps** <br> Let your windows be carried away to the realm of dreams by these little fairies! | <img src ="docs/pics/wisps.gif" /> |
|
||||
| **Your Effect!** <br> The extension is very modular and with a bit of creativity and GLSL knowledge, [you can easily create your own effects](docs/how-to-create-new-effects.md). | [](docs/how-to-create-new-effects.md) |
|
||||
|
||||
## ✅ Supported Versions
|
||||
|
||||
@@ -68,11 +71,13 @@ Below is a table which summarizes the current availability for all effects.
|
||||
<tr><td>Energize A</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> </tr>
|
||||
<tr><td>Energize B</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> </tr>
|
||||
<tr><td>Fire</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> </tr>
|
||||
<tr><td>Focus</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> </tr>
|
||||
<tr><td>Glide</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> </tr>
|
||||
<tr><td>Glitch</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> </tr>
|
||||
<tr><td>Hexagon</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> </tr>
|
||||
<tr><td>Incinerate</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> </tr>
|
||||
<tr><td>Matrix</td> <td> </td> <td> </td> <td>✅</td> <td> </td> </tr>
|
||||
<tr><td>Paint Brush</td> <td> </td> <td> </td> <td>✅</td> <td> </td> </tr>
|
||||
<tr><td>Pixelate</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> </tr>
|
||||
<tr><td>Pixel Wheel</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> </tr>
|
||||
<tr><td>Pixel Wipe</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> </tr>
|
||||
@@ -84,49 +89,23 @@ Below is a table which summarizes the current availability for all effects.
|
||||
<tr><td>Wisps</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> </tr>
|
||||
</table>
|
||||
|
||||
## 💞 Show that you love Burn-My-Windows!
|
||||
|
||||
## 💞 These People _love_ this Extension
|
||||
[](https://ko-fi.com/schneegans)
|
||||
[](https://github.com/sponsors/Schneegans)
|
||||
[](https://www.paypal.com/donate/?hosted_button_id=3F7UFL8KLVPXE)
|
||||
[](https://schneegans.cb.id)
|
||||
|
||||
While [coding new features](docs/how-to-create-new-effects.md) or [translating the extension](https://hosted.weblate.org/engage/burn-my-windows/) are the most awesome ways to contribute, providing financial support will help me stay motivated to invest my spare time to keep the project alive in the future.
|
||||
While coding new features or translating Burn-My-Windows is the most awesome way to contribute, providing financial support will encourage me to invest my spare time for developing free and open-source software.
|
||||
|
||||
<h3 align="center">🥇 Current Gold Sponsors</h3>
|
||||
<p align="center">
|
||||
<a href="https://github.com/D3vil0p3r">D3vil0p3r</a><br>
|
||||
Maxence Sebald<br>
|
||||
<a href="https://github.com/dennis1248">Dennis ten Hoove</a><br>
|
||||
</p>
|
||||
**These awesome people have already donated to the development of my open-source projects:**
|
||||
|
||||
<h3 align="center">🥈 Current Silver Sponsors</h3>
|
||||
<p align="center">
|
||||
<a href="https://github.com/danielheadbang">@danielheadbang</a><br>
|
||||
<a href="https://github.com/MRR-dev">@MRR-dev</a><br>
|
||||
<a href="https://github.com/castrojo">Jorge Castro</a><br>
|
||||
</p>
|
||||
|
||||
<h3 align="center">🥉 Current Bronze Sponsors</h3>
|
||||
<p align="center">
|
||||
<a href='https://github.com/vlazic'>@vlazic</a><br>
|
||||
<a href='https://github.com/AngelBrielez'>Angel Brielez</a>
|
||||
<!-- <a href="https://github.com/sponsors/Schneegans">Become the first!</a><br> -->
|
||||
</p>
|
||||
|
||||
<h3 align="center">🏅 Previous Sponsors and One-Time Donators</h3>
|
||||
<p align="center">
|
||||
<a href='https://github.com/taconomix'>@taconomix</a><br>
|
||||
<a href='https://github.com/enolive'>@enolive</a><br>
|
||||
<a href="https://github.com/Aggraxis">@Aggraxis</a><br>
|
||||
<a href="https://twitter.com/tjiiik">tj3k</a><br>
|
||||
<a href="https://github.com/wolfyrion">@wolfyrion</a><br>
|
||||
<a href="https://github.com/MrTomRod">@MrTomRod</a><br>
|
||||
Pouhiou<br>
|
||||
DAPREMONT Christophe<br>
|
||||
<a href="https://github.com/manero6">@manero6</a><br>
|
||||
<a href="https://github.com/RickStanley">@RickStanley</a><br>
|
||||
</p>
|
||||
|
||||
|
||||
Do you want to show that you love it too? You may <a href="https://github.com/sponsors/Schneegans">become a sponsor for as little as 1$ / month</a>!
|
||||
If you like this extension, you may also want to try one of my other GNOME extensions: [🧊 Desktop-Cube](https://github.com/Schneegans/Desktop-Cube) or [🍰 Fly-Pie](https://github.com/Schneegans/Fly-Pie/)!
|
||||
<a href="https://schneegans.github.io/sponsors/">
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="https://schneegans.github.io/sponsors/sponsors_dark_small.svg">
|
||||
<img alt="Sponsors List" src="https://schneegans.github.io/sponsors/sponsors_light_small.svg#gh-light-mode-only">
|
||||
</picture>
|
||||
</a>
|
||||
|
||||
## ⬇️ Installation (GNOME)
|
||||
|
||||
@@ -156,7 +135,7 @@ gnome-extensions install burn-my-windows@schneegans.github.com.zip
|
||||
|
||||
Then restart GNOME Shell with <kbd>Alt</kbd> + <kbd>F2</kbd>, <kbd>r</kbd> + <kbd>Enter</kbd>.
|
||||
Or logout / login if you are on Wayland.
|
||||
Then you can enable the extension with the *Gnome Tweak Tool*, the *Extensions* application or with this command:
|
||||
Then you can enable the extension with the _Gnome Tweak Tool_, the _Extensions_ application or with this command:
|
||||
|
||||
```bash
|
||||
gnome-extensions enable burn-my-windows@schneegans.github.com
|
||||
@@ -172,6 +151,12 @@ git clone https://github.com/Schneegans/Burn-My-Windows.git
|
||||
cd Burn-My-Windows
|
||||
```
|
||||
|
||||
If your GNOME Shell version is <= 45, you will have to checkout the `gnome-3.36-44` branch:
|
||||
|
||||
```bash
|
||||
git checkout gnome-3.36-44
|
||||
```
|
||||
|
||||
Now you will have to install the extension.
|
||||
The `make` command below compiles the locales, schemas and resources, creates a zip file of the extension and finally installs it with the `gnome-extensions` tool.
|
||||
|
||||
@@ -181,60 +166,74 @@ make install
|
||||
|
||||
Then restart GNOME Shell with <kbd>Alt</kbd> + <kbd>F2</kbd>, <kbd>r</kbd> + <kbd>Enter</kbd>.
|
||||
Or logout / login if you are on Wayland.
|
||||
Then you can enable the extension with the *Gnome Tweak Tool*, the *Extensions* application or with this command:
|
||||
Then you can enable the extension with the _Gnome Tweak Tool_, the _Extensions_ application or with this command:
|
||||
|
||||
```bash
|
||||
gnome-extensions enable burn-my-windows@schneegans.github.com
|
||||
```
|
||||
|
||||
|
||||
## ⬇️ Installation (KWin)
|
||||
|
||||
You can either download the effects from the KDE store (a), download a stable version from GitHub (b) or clone the latest version directly with `git` (c).
|
||||
|
||||
:warning: **You need at least KWin 5.25.0 for the Burn-My-Windows effects.**
|
||||
> [!IMPORTANT]
|
||||
> You need at least KWin 5.25.0 for the Burn-My-Windows effects.
|
||||
|
||||
:warning: **If the color picker widgets in the effect settings do not work for you, you may have to install a package called `libkf5widgetsaddons-dev` (Kubuntu, KDE Neon, ...) or `kf5-kwidgetsaddons-devel`, `kwidgetsaddons-devel` (Fedora, OpenSuse, ...).**
|
||||
> [!NOTE]
|
||||
> If the color picker widgets in the effect settings do not work for you, you may have to install a package called `libkf5widgetsaddons-dev` (Kubuntu, KDE Neon, ...) or `kf5-kwidgetsaddons-devel`, `kwidgetsaddons-devel` (Fedora, OpenSuse, ...).
|
||||
|
||||
### a) Download from the KDE Store
|
||||
|
||||
Here are links to all effects which are currently available in the KDE store;
|
||||
Here are links to all effects which are currently available in the KDE store:
|
||||
|
||||
* [Energize A](https://store.kde.org/p/1884310)
|
||||
* [Energize B](https://store.kde.org/p/1884311)
|
||||
* [Doom](https://store.kde.org/p/1898739)
|
||||
* [Fire](https://store.kde.org/p/1884307)
|
||||
* [Glide](https://store.kde.org/p/1935778)
|
||||
* [Hexagon](https://store.kde.org/p/1884309)
|
||||
* [Incinerate](https://store.kde.org/p/1861183)
|
||||
* [Pixelate](https://store.kde.org/p/1898742)
|
||||
* [Pixel Wheel](https://store.kde.org/p/1898746)
|
||||
* [Pixel Wipe](https://store.kde.org/p/1898748)
|
||||
* [Portal](https://store.kde.org/p/1959879)
|
||||
* [TV-Effect](https://store.kde.org/p/1884312)
|
||||
* [Wisps](https://store.kde.org/p/1884313)
|
||||
| Plasma 5 | Plasma 6 |
|
||||
| ---------------------------------------------- | ---------------------------------------------- |
|
||||
| [Doom](https://store.kde.org/p/1898739) | [Doom](https://store.kde.org/p/2133831) |
|
||||
| [Energize A](https://store.kde.org/p/1884310) | [Energize A](https://store.kde.org/p/2133829) |
|
||||
| [Energize B](https://store.kde.org/p/1884311) | [Energize B](https://store.kde.org/p/2133828) |
|
||||
| [Fire](https://store.kde.org/p/1884307) | [Fire](https://store.kde.org/p/2133822) |
|
||||
| [Focus - coming soon,maybe] | [Focus - coming soon,maybe] |
|
||||
| [Glide](https://store.kde.org/p/1935778) | [Glide](https://store.kde.org/p/2133839) |
|
||||
| [Glitch](https://store.kde.org/p/1972813) | [Glitch](https://store.kde.org/p/2133844) |
|
||||
| [Hexagon](https://store.kde.org/p/1884309) | [Hexagon](https://store.kde.org/p/2133836) |
|
||||
| [Incinerate](https://store.kde.org/p/1861183) | [Incinerate](https://store.kde.org/p/2133817) |
|
||||
| [Pixelate](https://store.kde.org/p/1898742) | [Pixelate](https://store.kde.org/p/2133832) |
|
||||
| [Pixel Wheel](https://store.kde.org/p/1898746) | [Pixel Wheel](https://store.kde.org/p/2133833) |
|
||||
| [Pixel Wipe](https://store.kde.org/p/1898748) | [Pixel Wipe](https://store.kde.org/p/2133834) |
|
||||
| [Portal](https://store.kde.org/p/1959879) | [Portal](https://store.kde.org/p/2133842) |
|
||||
| [TV-Effect](https://store.kde.org/p/1884312) | [TV-Effect](https://store.kde.org/p/2133825) |
|
||||
| [TV-Glitch](https://store.kde.org/p/1982142) | [TV-Glitch](https://store.kde.org/p/2133819) |
|
||||
| [Wisps](https://store.kde.org/p/1884313) | [Wisps](https://store.kde.org/p/2133824) |
|
||||
|
||||
You can also directly get the effects from within your system settings.
|
||||
Just go to your System Settings, then "Workspace Behavior", and "Desktop Effects". Then click on "Get new Desktop Effetcs...".
|
||||
Just go to your System Settings, then "Workspace Behavior", and "Desktop Effects". Then click on "Get new Desktop Effects...".
|
||||
|
||||
### b) Downloading a Stable Release
|
||||
|
||||
Execute this command to download the latest stable release:
|
||||
|
||||
```bash
|
||||
wget https://github.com/Schneegans/Burn-My-Windows/releases/latest/download/burn_my_windows_kwin4.tar.gz
|
||||
# For Plasma 5
|
||||
wget https://github.com/Schneegans/Burn-My-Windows/releases/latest/download/burn_my_windows_kwin5.tar.gz
|
||||
|
||||
# For Plasma 6
|
||||
wget https://github.com/Schneegans/Burn-My-Windows/releases/latest/download/burn_my_windows_kwin6.tar.gz
|
||||
```
|
||||
|
||||
Install it by executing the following commands.
|
||||
|
||||
```bash
|
||||
mkdir -p ~/.local/share/kwin/effects
|
||||
tar -xf burn_my_windows_kwin4.tar.gz -C ~/.local/share/kwin/effects
|
||||
|
||||
# For Plasma 5
|
||||
tar -xf burn_my_windows_kwin5.tar.gz -C ~/.local/share/kwin/effects
|
||||
|
||||
# For Plasma 6
|
||||
tar -xf burn_my_windows_kwin6.tar.gz -C ~/.local/share/kwin/effects
|
||||
```
|
||||
|
||||
Then select the desired effects in the system settings under "Desktop Effects".
|
||||
|
||||
|
||||
### c) Cloning the Latest Version with `git`
|
||||
|
||||
Execute the clone command below where you want to have the source code of the extension.
|
||||
@@ -249,36 +248,40 @@ Now you will have to build the effects and copy them to your KWin effect directo
|
||||
```bash
|
||||
./kwin/build.sh
|
||||
mkdir -p ~/.local/share/kwin/effects
|
||||
tar -xf kwin/burn_my_windows_kwin4.tar.gz -C ~/.local/share/kwin/effects
|
||||
|
||||
# For Plasma 5
|
||||
tar -xf kwin/burn_my_windows_kwin5.tar.gz -C ~/.local/share/kwin/effects
|
||||
|
||||
# For Plasma 6
|
||||
tar -xf kwin/burn_my_windows_kwin6.tar.gz -C ~/.local/share/kwin/effects
|
||||
```
|
||||
|
||||
That's it!
|
||||
You can now select the desired effects in the system settings under "Desktop Effects".
|
||||
|
||||
|
||||
## :octocat: I want to contribute!
|
||||
|
||||
That's great!
|
||||
Most likely, you want to [create a new effect](docs/how-to-create-new-effects.md) or to [translate the extension](https://hosted.weblate.org/engage/burn-my-windows/)?
|
||||
Most likely, you want to [create a new effect](docs/how-to-create-new-effects.md) or to [translate the extension](https://hosted.weblate.org/engage/burn-my-windows/)?
|
||||
Here are some basic rules to get you started:
|
||||
Commits should start with a Capital letter and should be written in present tense (e.g. __:tada: Add cool new feature__ instead of __:tada: Added cool new feature__).
|
||||
Commits should start with a Capital letter and should be written in present tense (e.g. **:tada: Add cool new feature** instead of **:tada: Added cool new feature**).
|
||||
You should also start your commit message with **one** applicable emoji.
|
||||
This does not only look great but also makes you rethink what to add to a commit. Make many but small commits!
|
||||
|
||||
Emoji | Description
|
||||
------|------------
|
||||
:tada: `:tada:` | When you added a cool new feature.
|
||||
:wrench: `:wrench:` | When you added a piece of code.
|
||||
:recycle: `:recycle:` | When you refactored a part of the code.
|
||||
:sparkles: `:sparkles:` | When you applied clang-format.
|
||||
:globe_with_meridians: `:globe_with_meridians:` | When you worked on translations.
|
||||
:art: `:art:` | When you improved / added assets like themes.
|
||||
:lipstick: `:lipstick:` | When you worked on the UI of the preferences dialog.
|
||||
:rocket: `:rocket:` | When you improved performance.
|
||||
:memo: `:memo:` | When you wrote documentation.
|
||||
:beetle: `:beetle:` | When you fixed a bug.
|
||||
:revolving_hearts: `:revolving_hearts:` | When a new sponsor is added or credits are updated.
|
||||
:heavy_check_mark: `:heavy_check_mark:` | When you worked on checks or adjusted the code to be compliant with them.
|
||||
:twisted_rightwards_arrows: `:twisted_rightwards_arrows:` | When you merged a branch.
|
||||
:fire: `:fire:` | When you removed something.
|
||||
:truck: `:truck:` | When you moved / renamed something.
|
||||
| Emoji | Description |
|
||||
| --------------------------------------------------------- | ------------------------------------------------------------------------- |
|
||||
| :tada: `:tada:` | When you added a cool new feature. |
|
||||
| :wrench: `:wrench:` | When you added a piece of code. |
|
||||
| :recycle: `:recycle:` | When you refactored a part of the code. |
|
||||
| :sparkles: `:sparkles:` | When you applied clang-format. |
|
||||
| :globe_with_meridians: `:globe_with_meridians:` | When you worked on translations. |
|
||||
| :art: `:art:` | When you improved / added assets like themes. |
|
||||
| :lipstick: `:lipstick:` | When you worked on the UI of the preferences dialog. |
|
||||
| :rocket: `:rocket:` | When you improved performance. |
|
||||
| :memo: `:memo:` | When you wrote documentation. |
|
||||
| :beetle: `:beetle:` | When you fixed a bug. |
|
||||
| :revolving_hearts: `:revolving_hearts:` | When a new sponsor is added or credits are updated. |
|
||||
| :heavy_check_mark: `:heavy_check_mark:` | When you worked on checks or adjusted the code to be compliant with them. |
|
||||
| :twisted_rightwards_arrows: `:twisted_rightwards_arrows:` | When you merged a branch. |
|
||||
| :fire: `:fire:` | When you removed something. |
|
||||
| :truck: `:truck:` | When you moved / renamed something. |
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
# SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de>
|
||||
# SPDX-License-Identifier: CC0-1.0
|
||||
|
||||
version = 1
|
||||
|
||||
[[annotations]]
|
||||
path = "tests/references/**"
|
||||
precedence = "aggregate"
|
||||
SPDX-FileCopyrightText = "Simon Schneegans <code@simonschneegans.de>"
|
||||
SPDX-License-Identifier = "CC0-1.0"
|
||||
|
||||
[[annotations]]
|
||||
path = "kwin/metadata.desktop.in"
|
||||
precedence = "aggregate"
|
||||
SPDX-FileCopyrightText = "Simon Schneegans <code@simonschneegans.de>"
|
||||
SPDX-License-Identifier = "CC0-1.0"
|
||||
|
||||
[[annotations]]
|
||||
path = "resources/credits/**"
|
||||
precedence = "aggregate"
|
||||
SPDX-FileCopyrightText = "Simon Schneegans <code@simonschneegans.de>"
|
||||
SPDX-License-Identifier = "CC0-1.0"
|
||||
|
||||
[[annotations]]
|
||||
path = "resources/img/**"
|
||||
precedence = "aggregate"
|
||||
SPDX-FileCopyrightText = "Simon Schneegans <code@simonschneegans.de>"
|
||||
SPDX-License-Identifier = "CC-BY-4.0"
|
||||
|
||||
[[annotations]]
|
||||
path = "docs/pics/**"
|
||||
precedence = "aggregate"
|
||||
SPDX-FileCopyrightText = "Simon Schneegans <code@simonschneegans.de>"
|
||||
SPDX-License-Identifier = "CC-BY-4.0"
|
||||
|
||||
[[annotations]]
|
||||
path = "assets/**"
|
||||
precedence = "aggregate"
|
||||
SPDX-FileCopyrightText = "Simon Schneegans <code@simonschneegans.de>"
|
||||
SPDX-License-Identifier = "CC-BY-4.0"
|
||||
|
||||
[[annotations]]
|
||||
path = "po/**"
|
||||
precedence = "aggregate"
|
||||
SPDX-FileCopyrightText = "Simon Schneegans <code@simonschneegans.de>"
|
||||
SPDX-License-Identifier = "GPL-3.0-or-later"
|
||||
|
||||
[[annotations]]
|
||||
path = "metadata.json"
|
||||
precedence = "aggregate"
|
||||
SPDX-FileCopyrightText = "Simon Schneegans <code@simonschneegans.de>"
|
||||
SPDX-License-Identifier = "GPL-3.0-or-later"
|
||||
@@ -1,7 +1,20 @@
|
||||
# Notes for `claws.blend`
|
||||
# `claws.blend`
|
||||
|
||||
This is the source file for `resources/img/claws.png`. To generate the image, the animation in `claws.blend` is rendered to 256 PNG files and then combined using this command:
|
||||
|
||||
```bash
|
||||
convert *.png -average claws.png
|
||||
```
|
||||
```
|
||||
|
||||
# `brush.blend`
|
||||
|
||||
This is the source file for `resources/img/brush.png`. To generate the image, the four dynamic paint image sequences in `brush.blend` are baked to 256 PNG files each. They are then combined using these commands:
|
||||
|
||||
```bash
|
||||
convert brush1/*.png -average brush1.png
|
||||
convert brush2/*.png -average brush2.png
|
||||
convert brush3/*.png -average brush3.png
|
||||
convert brush4/*.png -average brush4.png
|
||||
|
||||
convert brush1.png brush2.png brush3.png brush4.png -channel RGBA -combine brush.png
|
||||
```
|
||||
|
||||
|
Before Width: | Height: | Size: 4.1 MiB After Width: | Height: | Size: 2.1 MiB |
@@ -5,20 +5,259 @@ SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
# Changelog of the Burn-My-Windows Extension
|
||||
|
||||
## [Burn My Windows 44](https://github.com/schneegans/Burn-My-Windows/releases/tag/v44)
|
||||
|
||||
**Release Date:** 2024-11-06
|
||||
|
||||
#### New Features
|
||||
|
||||
- **New Effect: Focus.** Focus dude, focus. This effect is available both for GNOME and KDE. Thanks to [@jgarza9788](https://github.com/jgarza9788) for this contribution!
|
||||
- Effect Search: There is now a search bar in the preferences dialog which allows you to quickly find the effect you are looking for. Thanks to [@jgarza9788](https://github.com/jgarza9788) for this contribution!
|
||||
|
||||
#### Other Changes
|
||||
|
||||
- The animation duration of all effects can now be adjusted between 0.1s and 3s. This makes fine adjustments easier than with the previous 0.1s to 10s range.
|
||||
- There are now different effect packages for Plasma 5 and Plasma 6. Please make sure to install the correct one for your system.
|
||||
- Many translations have been updated. Thanks to all the translators!
|
||||
- The CI jobs now run only on X11. In addition to GNOME 45, they now also run on GNOME 46 and GNOME 47.
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
- The effects now work on Plasma 6 even if an ICC profile is set. Thanks to [@Zamundaaa](https://github.com/Zamundaaa) for helping here!
|
||||
|
||||
## [Burn My Windows 43](https://github.com/schneegans/Burn-My-Windows/releases/tag/v43)
|
||||
|
||||
**Release Date:** 2024-08-23
|
||||
|
||||
#### Enhancements
|
||||
|
||||
- Ported the extension to GNOME 47.
|
||||
- Several translations have been updated. Thanks to all the translators!
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
- Fixed an issue in the KDE metadata files which caused a warning in the logs on KDE Plasma 6. Thanks to [@nask0](https://github.com/nask0) for the fix!
|
||||
|
||||
## [Burn My Windows 42 [backport release]](https://github.com/schneegans/Burn-My-Windows/releases/tag/v42)
|
||||
|
||||
**Release Date:** 2024-02-27
|
||||
|
||||
- Ported the changes from Burn-My-Windows 41 to GNOME 3.36 - 44.
|
||||
|
||||
## [Burn My Windows 41](https://github.com/schneegans/Burn-My-Windows/releases/tag/v41)
|
||||
|
||||
**Release Date:** 2024-02-27
|
||||
|
||||
#### Enhancements
|
||||
|
||||
- The extension has been updated to work with GNOME 46.
|
||||
- Several translations have been updated. Thanks to all the translators!
|
||||
- All CI jobs are now executed for GNOME 45 and GNOME 46 as well.
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
- Fixed a compatibility issue with Plasma 6. Thanks to [@CoelacanthusHex](https://github.com/CoelacanthusHex) for the fix!
|
||||
- Fixed an issue which caused the origin of the Incinerate and Pixel Wipe effects to be reset to the current mouse position whenever another effect was started while an effect was still running.
|
||||
|
||||
## [Burn My Windows 40 [backport release]](https://github.com/schneegans/Burn-My-Windows/releases/tag/v40)
|
||||
|
||||
**Release Date:** 2023-10-26
|
||||
|
||||
#### Enhancements
|
||||
|
||||
- Ported the changes from Burn-My-Windows 39 to GNOME 3.36 - 44.
|
||||
|
||||
## [Burn My Windows 39](https://github.com/schneegans/Burn-My-Windows/releases/tag/v39)
|
||||
|
||||
**Release Date:** 2023-10-26
|
||||
|
||||
#### Enhancements
|
||||
|
||||
- On KDE, the effects are no longer applied to windows which are on all desktops and have no decoration. This is primarily meant to avoid applying the effects to the Alt+Tab switcher.
|
||||
- Several translations have been updated. Thanks to all the translators!
|
||||
- Instead of an always out-of-date list of sponsors, the main menu of the preferences dialog now contains a link to the new [list of all donors](https://schneegans.github.io/sponsors/). This list is semi-automatically updated whenever a new donation is received. Thanks to all the donors!
|
||||
- The possibility to [donate cryptocurrencies](https://schneegans.cb.id) has been added.
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
- Fixed an issue which caused overly large windows on GNOME for certain applications (e.g. KPatience) if they were re-opened after being closed in maximized state.
|
||||
- Fixed an issue with the archive format which caused a failure when installing the effects via KDE Discover.
|
||||
|
||||
## [Burn My Windows 38](https://github.com/schneegans/Burn-My-Windows/releases/tag/v38)
|
||||
|
||||
**Release Date:** 2023-09-09
|
||||
|
||||
#### Major Changes
|
||||
|
||||
- This is the first release of Burn-My-Windows supporting GNOME 45. This required a [major refactoring](https://github.com/Schneegans/Burn-My-Windows/pull/373/files) of the code base as GJS now uses ESM modules. As a consequence, this version is not compatible with older versions of GNOME Shell anymore. The old code base is still available on the `gnome-3.36-44` branch and if new features are added (especially translations), they can be backported to this branch.
|
||||
|
||||
## [Burn My Windows 37](https://github.com/schneegans/Burn-My-Windows/releases/tag/v37)
|
||||
|
||||
**Release Date:** 2023-08-26
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
- Fixed an issue which caused the effects to crash on KDE in some cases.
|
||||
|
||||
#### Enhancements
|
||||
|
||||
- Several translations have been updated. Thanks to all the translators!
|
||||
|
||||
## [Burn My Windows 36](https://github.com/schneegans/Burn-My-Windows/releases/tag/v36)
|
||||
|
||||
**Release Date:** 2023-08-18
|
||||
|
||||
#### New Features
|
||||
|
||||
- Two convenience buttons have been added to the preferences dialog. One allows you to select all effects, the other one allows you to deselect all effects.
|
||||
- A new main menu entry has been added which allows you to open the effect-profile directory. This is useful if you want to back up or share your profiles with others.
|
||||
- The Wisps effect now supports colorful wisps. You can now specify three colors for the effect. These colors make up a gradient which is used to color the wisps.
|
||||
|
||||
#### Enhancements
|
||||
|
||||
- Several translations have been updated. Thanks to all the translators!
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
- Some effects (Fire, Incinerate, Energize A, Energize B) are faded towards the edges of the window. This used to look weird when the window is maximized. This has been fixed.
|
||||
- On KDE, the animations are not applied to IntelliJ IDEs anymore. These IDEs use windows for their tooltips which do not set the WM class correctly. This caused the animations to be applied to the tooltips as well making them unusable. This is rather a workaround than a fix, but makes the effect usable again in conjunction with IntelliJ IDEs.
|
||||
|
||||
## [Burn My Windows 35](https://github.com/schneegans/Burn-My-Windows/releases/tag/v35)
|
||||
|
||||
**Release Date:** 2023-07-03
|
||||
|
||||
#### New Features
|
||||
|
||||
- **New Effect: Paint-Brush.** This effect paints or erases your windows with a thick paint brush.
|
||||
|
||||
## [Burn My Windows 34](https://github.com/schneegans/Burn-My-Windows/releases/tag/v34)
|
||||
|
||||
**Release Date:** 2023-09-06
|
||||
|
||||
#### Enhancements
|
||||
|
||||
- Added support for the new donation button on extensions.gnome.org.
|
||||
- https://www.paypal.me/simonschneegans is now the default donation link for PayPal.
|
||||
|
||||
## [Burn My Windows 33](https://github.com/schneegans/Burn-My-Windows/releases/tag/v33)
|
||||
|
||||
**Release Date:** 2023-06-06
|
||||
|
||||
#### Enhancements
|
||||
|
||||
- When opening the preferences, a dialog is now shown occasionally to kindly ask for a donation. The dialog can be disabled once it has been shown for the first time.
|
||||
- Several translations have been updated. Thanks to all the translators!
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
- Fixed an issue on GNOME 44.2 which caused the effects to look broken. It was caused by [this change](https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2650).
|
||||
- Fixed an issue which prevented the settings of the Snap of Disintegration effect from being translatable.
|
||||
|
||||
## [Burn My Windows 32](https://github.com/schneegans/Burn-My-Windows/releases/tag/v32)
|
||||
|
||||
**Release Date:** 2023-05-22
|
||||
|
||||
#### Enhancements
|
||||
|
||||
- Several translations have been updated. Thanks to all the translators!
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
- Fixed an issue which caused corrupted windows on X11 GNOME 44 under very specific circumstances. This happened only on X11 and only when the window was resized before it was actually shown.
|
||||
|
||||
## [Burn My Windows 31](https://github.com/schneegans/Burn-My-Windows/releases/tag/v31)
|
||||
|
||||
**Release Date:** 2023-05-04
|
||||
|
||||
#### Enhancements
|
||||
|
||||
- Several translations have been updated. Thanks to all the translators!
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
- Fixed an issue which made windows invisible which did not set the `WM_CLASS` X11 property correctly.
|
||||
- Fixed an issue which made window-picking of Wayland windows impossible on GNOME 44.
|
||||
|
||||
## [Burn My Windows 30](https://github.com/schneegans/Burn-My-Windows/releases/tag/v30)
|
||||
|
||||
**Release Date:** 2023-04-08
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
- Fixed yet another incompatibility with the [Compiz alike magic lamp effect](https://extensions.gnome.org/extension/3740/compiz-alike-magic-lamp-effect/).
|
||||
|
||||
## [Burn My Windows 29](https://github.com/schneegans/Burn-My-Windows/releases/tag/v29)
|
||||
|
||||
**Release Date:** 2023-04-08
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
- Fixed a regression which caused window-close animations not to shown in front of full-screen windows.
|
||||
- Fixed an incompatibility with the [Compiz alike magic lamp effect](https://extensions.gnome.org/extension/3740/compiz-alike-magic-lamp-effect/).
|
||||
|
||||
## [Burn My Windows 28](https://github.com/schneegans/Burn-My-Windows/releases/tag/v28)
|
||||
|
||||
**Release Date:** 2023-04-06
|
||||
|
||||
#### Enhancements
|
||||
|
||||
- **New donation method: Ko-fi**. Follow me on Ko-fi to get the latest updates regarding my extensions: https://ko-fi.com/schneegans!
|
||||
- All shaders are now compatible with OpenGL ES. Due to [this change in Mutter](https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2672) the number of devices using OpenGL ES has significantly increased since GNOME 44. This change makes Burn-My-Windows working on those devices.
|
||||
- It is now possible to create effects which do not have any settings at all.
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
- [This change in GNOME Shell](https://gitlab.gnome.org/GNOME/gnome-shell/-/commit/7bd98f3f5fb7e0d1220646b8a4ee7073534a8e8f) prevented Burn-My-Windows from working if no hardware-acceleration was available on GNOME 44, including the Docker containers used for CI testing. Some severe refactoring was necessary to fix this issue.
|
||||
- The tutorial on how to create new effects has been updated and should work again.
|
||||
- Fixed an issue which caused effect-profile loading to fail whenever Burn-My-Windows was updated.
|
||||
|
||||
## [Burn My Windows 27](https://github.com/schneegans/Burn-My-Windows/releases/tag/v27)
|
||||
|
||||
**Release Date:** 2023-03-01
|
||||
|
||||
#### New Features
|
||||
|
||||
- **Effect Profiles:** It is now possible to create _effect profiles_. Each profile contains a different set of effect settings. You can choose for each profile under which circumstances it will be used. Currently, these constraints are supported:
|
||||
|
||||
- Application name
|
||||
- Animation type (open close)
|
||||
- Window type (normal, dialog)
|
||||
- Desktop style (light, dark)
|
||||
- Power mode (plugged-in, on battery)
|
||||
- Power profile (power saver, balanced, performance)
|
||||
|
||||
This allows for a very detailed configuration of the extension. For instance, you can now...
|
||||
|
||||
- ... exclude specific applications from BMW effects
|
||||
- ... select effects per-application
|
||||
- ... use different configurations of the same effect for opening or closing windows
|
||||
|
||||
The extension will attempt to migrate your previous settings to the new effect profile system. Depending on your previous configuration, you may have now one or two profiles to start with, but you can add an arbitrary amount of profiles.
|
||||
|
||||
The effect profiles are available for all supported GNOME versions (that is GNOME 3.36, 3.38, 40, 41, 42, 43, and 44).
|
||||
|
||||
- **Wallpapers:** A set of AI-generated [wallpapers has released](https://github.com/Schneegans/ai-wallpapers). For each effect of Burn-My-Windows, there is one dedicated wallpaper. As a central theme, each wallpaper shows a window. In some cases, the window is actually burning!
|
||||
- Initial support for GNOME 44.
|
||||
|
||||
#### Other Enhancements
|
||||
|
||||
- As part of the effect profile implementation, the libadwaita-inspired preferences dialog layout got back-ported to all other supported GNOME versions.
|
||||
- A notification is now shown in the settings dialog whenever the extension got updated. It contains a link to this changelog.
|
||||
- Many translation updates. Thanks to all the translators!
|
||||
|
||||
## [Burn My Windows 26](https://github.com/schneegans/Burn-My-Windows/releases/tag/v26)
|
||||
|
||||
**Release Date:** 2023-02-04
|
||||
|
||||
#### New Features
|
||||
|
||||
* **New Effect: TV-Glitch.** This effect combines the Glitch and the TV Effect into one. Credits go to [Kurt Wilson](https://github.com/Kurtoid) for this idea!
|
||||
- **New Effect: TV-Glitch.** This effect combines the Glitch and the TV Effect into one. Credits go to [Kurt Wilson](https://github.com/Kurtoid) for this idea!
|
||||
|
||||
#### Other Enhancements
|
||||
|
||||
* On KDE, the effect configuration dialogs can now be translated. The translations for GNOME are re-used, so we already have many translations! This requires at least KWin 5.27 to be working.
|
||||
* Many translation updates, including a completely new Japanese translation. Thanks to all the translators!
|
||||
* The effect colors for the Glitch and TV Effect now support an alpha channel. With this you can control how much color gets mixed into the window color.
|
||||
|
||||
- On KDE, the effect configuration dialogs can now be translated. The translations for GNOME are re-used, so we already have many translations! This requires at least KWin 5.27 to be working.
|
||||
- Many translation updates, including a completely new Japanese translation. Thanks to all the translators!
|
||||
- The effect colors for the Glitch and TV Effect now support an alpha channel. With this you can control how much color gets mixed into the window color.
|
||||
|
||||
## [Burn My Windows 25](https://github.com/schneegans/Burn-My-Windows/releases/tag/v25)
|
||||
|
||||
@@ -26,7 +265,7 @@ SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* Fixed an issue which prevented the extension from loading if `power-profiles-daemon` was masked.
|
||||
- Fixed an issue which prevented the extension from loading if `power-profiles-daemon` was masked.
|
||||
|
||||
## [Burn My Windows 24](https://github.com/schneegans/Burn-My-Windows/releases/tag/v24)
|
||||
|
||||
@@ -34,18 +273,18 @@ SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
#### New Features
|
||||
|
||||
* **New Effect: Glitch.** This effect applies some intentional graphics issues to your windows.
|
||||
* There is a new option to disable the effects when power-save mode is active. This may not only help to reduce power consumption, but also help in situation where the window animation do not run fluently in power-save mode. This option requires the power-profiles daemon, so it should be available for GNOME Shell 41 and beyond.
|
||||
- **New Effect: Glitch.** This effect applies some intentional graphics issues to your windows.
|
||||
- There is a new option to disable the effects when power-save mode is active. This may not only help to reduce power consumption, but also help in situation where the window animation do not run fluently in power-save mode. This option requires the power-profiles daemon, so it should be available for GNOME Shell 41 and beyond.
|
||||
|
||||
#### Other Enhancements
|
||||
|
||||
* Many translation updates, including a completely new Indonesian translation. Thanks to all the translators!
|
||||
* The menu button of the settings dialog has been moved to the left and now shows a heart instead of three dots.
|
||||
* The about dialog now uses the `Adw.AboutWindow` if available.
|
||||
- Many translation updates, including a completely new Indonesian translation. Thanks to all the translators!
|
||||
- The menu button of the settings dialog has been moved to the left and now shows a heart instead of three dots.
|
||||
- The about dialog now uses the `Adw.AboutWindow` if available.
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* Fixed an issue which could lead to black artifacts for some effects (Fire, Incinerate, Matrix, Portal, T-Rex Attack, and Wisps).
|
||||
- Fixed an issue which could lead to black artifacts for some effects (Fire, Incinerate, Matrix, Portal, T-Rex Attack, and Wisps).
|
||||
|
||||
## [Burn My Windows 23](https://github.com/schneegans/Burn-My-Windows/releases/tag/v23)
|
||||
|
||||
@@ -53,11 +292,11 @@ SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
#### New Features
|
||||
|
||||
* **New Effect: Portal.** This ridiculous effect teleports your windows from and to alternative dimensions. It may resemble the portal from a well-known cartoon series...
|
||||
- **New Effect: Portal.** This ridiculous effect teleports your windows from and to alternative dimensions. It may resemble the portal from a well-known cartoon series...
|
||||
|
||||
#### Other Enhancements
|
||||
|
||||
* Many translation updates. Thanks to all the translators!
|
||||
- Many translation updates. Thanks to all the translators!
|
||||
|
||||
## [Burn My Windows 22](https://github.com/schneegans/Burn-My-Windows/releases/tag/v22)
|
||||
|
||||
@@ -65,14 +304,14 @@ SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
#### New Features
|
||||
|
||||
* **New Effect: Glide.** A very subtle effect which simply fades the window and applies some 3D-like tilting and scaling. This effect is available on all support GNOME versions and on KDE.
|
||||
- **New Effect: Glide.** A very subtle effect which simply fades the window and applies some 3D-like tilting and scaling. This effect is available on all support GNOME versions and on KDE.
|
||||
|
||||
#### Other Enhancements
|
||||
|
||||
* The settings dialog has been redesigned specifically for libadwaita. These changes are only available on GNOME 42 and GNOME 43.
|
||||
* Many translation updates, including a completely new Romanian translation. Thanks to all the translators!
|
||||
* The KWin port of Burn-My-Windows now uses `metadata.json` files instead of the deprecated `metadata.desktop` format.
|
||||
* Burn-My-Windows now follows the [REUSE Specification](https://reuse.software/spec).
|
||||
- The settings dialog has been redesigned specifically for libadwaita. These changes are only available on GNOME 42 and GNOME 43.
|
||||
- Many translation updates, including a completely new Romanian translation. Thanks to all the translators!
|
||||
- The KWin port of Burn-My-Windows now uses `metadata.json` files instead of the deprecated `metadata.desktop` format.
|
||||
- Burn-My-Windows now follows the [REUSE Specification](https://reuse.software/spec).
|
||||
|
||||
## [Burn My Windows 21](https://github.com/schneegans/Burn-My-Windows/releases/tag/v21)
|
||||
|
||||
@@ -80,11 +319,11 @@ SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
#### New Features
|
||||
|
||||
* Added support for GNOME 43.
|
||||
- Added support for GNOME 43.
|
||||
|
||||
#### Other Enhancements
|
||||
|
||||
* Several new translations have been added, including a Lithuanian, Ukrainian, Esperanto, Portuguese, Azerbaijani, and Hebrew translation. Also, many other translations received updates. Thanks to all the translators!
|
||||
- Several new translations have been added, including a Lithuanian, Ukrainian, Esperanto, Portuguese, Azerbaijani, and Hebrew translation. Also, many other translations received updates. Thanks to all the translators!
|
||||
|
||||
## [Burn My Windows 20](https://github.com/schneegans/Burn-My-Windows/releases/tag/v20)
|
||||
|
||||
@@ -92,21 +331,20 @@ SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
#### New Features
|
||||
|
||||
* **New Effect: Doom.** Melt your windows. Inspired by the legendary screen transitions of the original Doom.
|
||||
* **New Effect: Pixelate.** Pixelate your windows and randomly hide pixels until the entire window is gone.
|
||||
* **New Effect: Pixel Wheel.** This simple effect pixelates the window and hides the pixels in a wheel-like fashion.
|
||||
* **New Effect: Pixel Wipe.** This effect pixelates the window and hides the pixels radially, starting from the pointer position.
|
||||
- **New Effect: Doom.** Melt your windows. Inspired by the legendary screen transitions of the original Doom.
|
||||
- **New Effect: Pixelate.** Pixelate your windows and randomly hide pixels until the entire window is gone.
|
||||
- **New Effect: Pixel Wheel.** This simple effect pixelates the window and hides the pixels in a wheel-like fashion.
|
||||
- **New Effect: Pixel Wipe.** This effect pixelates the window and hides the pixels radially, starting from the pointer position.
|
||||
|
||||
#### Enhancements
|
||||
|
||||
* Under KWin, the effects now use the same names as in the KDE store.
|
||||
* The continuous integration tests now use a fuzzy search for the images targets. This way, the test work again on X11 and Wayland.
|
||||
* A new GitHub Actions workflow has been added which is executed whenever a commit message includes the `[generate-references]` tag. This workflow re-creates all reference images for the continuous integration test.
|
||||
- Under KWin, the effects now use the same names as in the KDE store.
|
||||
- The continuous integration tests now use a fuzzy search for the images targets. This way, the test work again on X11 and Wayland.
|
||||
- A new GitHub Actions workflow has been added which is executed whenever a commit message includes the `[generate-references]` tag. This workflow re-creates all reference images for the continuous integration test.
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* Fixed a bug which caused the Incinerate Effect to sometimes not show up properly on KWin if the "Start at pointer position" option was enabled.
|
||||
|
||||
- Fixed a bug which caused the Incinerate Effect to sometimes not show up properly on KWin if the "Start at pointer position" option was enabled.
|
||||
|
||||
## [Burn My Windows 19](https://github.com/schneegans/Burn-My-Windows/releases/tag/v19)
|
||||
|
||||
@@ -114,17 +352,17 @@ SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
#### New Features
|
||||
|
||||
* The incinerate effect now uses the current mouse pointer position as starting position of the burn effect. The old random behaviour can be enabled in the settings. This works both on GNOME and KDE.
|
||||
- The incinerate effect now uses the current mouse pointer position as starting position of the burn effect. The old random behaviour can be enabled in the settings. This works both on GNOME and KDE.
|
||||
|
||||
#### Enhancements
|
||||
|
||||
* Many translation updates, including a completely new Portuguese, Esperanto, and Hebrew translation. A BIG THANKS to all translators!
|
||||
* On GNOME, effects can now execute code whenever an animation ended. This is useful for cleaning up resources.
|
||||
* The KWin build script now generates a separate archive for each effect as well as a combined archive for all effects.
|
||||
- Many translation updates, including a completely new Portuguese, Esperanto, and Hebrew translation. A BIG THANKS to all translators!
|
||||
- On GNOME, effects can now execute code whenever an animation ended. This is useful for cleaning up resources.
|
||||
- The KWin build script now generates a separate archive for each effect as well as a combined archive for all effects.
|
||||
|
||||
#### Fixes
|
||||
|
||||
* Fixed the effect configuration dialog of the Fire effect on KDE.
|
||||
- Fixed the effect configuration dialog of the Fire effect on KDE.
|
||||
|
||||
## [Burn My Windows 18](https://github.com/schneegans/Burn-My-Windows/releases/tag/v18)
|
||||
|
||||
@@ -132,7 +370,7 @@ SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
#### Fixes
|
||||
|
||||
* The GNOME extension package now does not include the KWin JavaScript files anymore.
|
||||
- The GNOME extension package now does not include the KWin JavaScript files anymore.
|
||||
|
||||
## [Burn My Windows 17](https://github.com/schneegans/Burn-My-Windows/releases/tag/v17)
|
||||
|
||||
@@ -140,14 +378,14 @@ SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
#### New Features
|
||||
|
||||
* **New Effect: Incinerate.** This is a completely new take on the fire effect. It is a bit more demanding in terms of GPU power, but at the same time it looks much more awesome!
|
||||
* **Initial KDE Support.** Thanks to the [awesome work](https://invent.kde.org/plasma/kwin/-/merge_requests/2227) of Martin Flöser, it has become possible to port some of its effects to KDE Plasma! For now, only the most simple effects can be ported, but hopefully this list can be improved in the future.
|
||||
* An option has been added which allows to automatically disable all effects if running on battery power.
|
||||
- **New Effect: Incinerate.** This is a completely new take on the fire effect. It is a bit more demanding in terms of GPU power, but at the same time it looks much more awesome!
|
||||
- **Initial KDE Support.** Thanks to the [awesome work](https://invent.kde.org/plasma/kwin/-/merge_requests/2227) of Martin Flöser, it has become possible to port some of its effects to KDE Plasma! For now, only the most simple effects can be ported, but hopefully this list can be improved in the future.
|
||||
- An option has been added which allows to automatically disable all effects if running on battery power.
|
||||
|
||||
#### Enhancements
|
||||
|
||||
* Many translation updates, including a completely new Persian, Polish, and Slovak translation. A BIG THANKS to all translators!
|
||||
* The shader include system has been simplified. There's now just one "common.glsl" which is automatically loaded into each shader.
|
||||
- Many translation updates, including a completely new Persian, Polish, and Slovak translation. A BIG THANKS to all translators!
|
||||
- The shader include system has been simplified. There's now just one "common.glsl" which is automatically loaded into each shader.
|
||||
|
||||
## [Burn My Windows 16](https://github.com/schneegans/Burn-My-Windows/releases/tag/v16)
|
||||
|
||||
@@ -155,16 +393,16 @@ SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
#### Enhancements
|
||||
|
||||
* Many translation updates, including a completely new Arabic, Finnish, Korean, and Swedish translation. A BIG THANKS to all translators!
|
||||
* The shaders are now aware of the actual window size (e.g. excluding the area where the shadow is drawn). For instance, this **fixes the drawing of the effects outside the window bounds** for `libadwaita` apps.
|
||||
* Refactored how the size and opacity transitions of the window actors are set up. Effects can now only specify a desired actor scale which will not change during the animation. All dynamic scaling and fading must be implemented in the shaders now.
|
||||
* The standard uniforms of all shaders have been updated: The window size is now passed as a `vec2` and there is a new `bool uForOpening` which is set to `true` if a window-open animation is ongoing, to `false` otherwise.
|
||||
- Many translation updates, including a completely new Arabic, Finnish, Korean, and Swedish translation. A BIG THANKS to all translators!
|
||||
- The shaders are now aware of the actual window size (e.g. excluding the area where the shadow is drawn). For instance, this **fixes the drawing of the effects outside the window bounds** for `libadwaita` apps.
|
||||
- Refactored how the size and opacity transitions of the window actors are set up. Effects can now only specify a desired actor scale which will not change during the animation. All dynamic scaling and fading must be implemented in the shaders now.
|
||||
- The standard uniforms of all shaders have been updated: The window size is now passed as a `vec2` and there is a new `bool uForOpening` which is set to `true` if a window-open animation is ongoing, to `false` otherwise.
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* **Fixed a major memory leak**. Now, shaders are not re-created anymore whenever a window is opened or closed. Instead, previously created shaders are re-used as often as possible. This requires that all settings are set as uniform values (previously they were injected into the shader source) which in turn requires that `Shell.GLSLEffect` is used instead of `Clutter.ShaderEffect`. This change also requires that all shaders now work with straight instead of premultiplied alpha. Anyways, a lot needed to be refactored for this fix and I hope that it did not bring too many visual changes.
|
||||
* Fixed the window-close animation of windows which were opened before the session was started (e.g. before GNOME Shell has been restarted).
|
||||
* There seem to be cases were `libadwaita` is not available on GNOME 42 (e.g. Pop!_OS 22.04 beta). The preferences dialog now tries to fallback to the GTK4-only variant if `libadwaita` is not available.
|
||||
- **Fixed a major memory leak**. Now, shaders are not re-created anymore whenever a window is opened or closed. Instead, previously created shaders are re-used as often as possible. This requires that all settings are set as uniform values (previously they were injected into the shader source) which in turn requires that `Shell.GLSLEffect` is used instead of `Clutter.ShaderEffect`. This change also requires that all shaders now work with straight instead of premultiplied alpha. Anyways, a lot needed to be refactored for this fix and I hope that it did not bring too many visual changes.
|
||||
- Fixed the window-close animation of windows which were opened before the session was started (e.g. before GNOME Shell has been restarted).
|
||||
- There seem to be cases were `libadwaita` is not available on GNOME 42 (e.g. Pop!\_OS 22.04 beta). The preferences dialog now tries to fallback to the GTK4-only variant if `libadwaita` is not available.
|
||||
|
||||
## [Burn My Windows 15](https://github.com/schneegans/Burn-My-Windows/releases/tag/v15)
|
||||
|
||||
@@ -172,13 +410,13 @@ SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
#### New Features
|
||||
|
||||
* **New Effect: Apparition.** This effect hides the window by violently sucking it into the void of magic. This is available only for GNOME Shell 3.38 and newer.
|
||||
* **New Effect: Hexagon.** With glowing lines and hexagon-shaped tiles, this effect looks very sci-fi. This is available for GNOME Shell 3.36 and newer.
|
||||
* **New Effect: Snap of Disintegration.** This was requested quite frequently! Dissolve your windows into a cloud of dust. This is available only for GNOME Shell 40 and newer.
|
||||
- **New Effect: Apparition.** This effect hides the window by violently sucking it into the void of magic. This is available only for GNOME Shell 3.38 and newer.
|
||||
- **New Effect: Hexagon.** With glowing lines and hexagon-shaped tiles, this effect looks very sci-fi. This is available for GNOME Shell 3.36 and newer.
|
||||
- **New Effect: Snap of Disintegration.** This was requested quite frequently! Dissolve your windows into a cloud of dust. This is available only for GNOME Shell 40 and newer.
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* Disabled the buggy "Shatter from pointer" option of the Broken Glass effect when opening windows (it only makes sense for closing windows).
|
||||
- Disabled the buggy "Shatter from pointer" option of the Broken Glass effect when opening windows (it only makes sense for closing windows).
|
||||
|
||||
## [Burn My Windows 14](https://github.com/schneegans/Burn-My-Windows/releases/tag/v14)
|
||||
|
||||
@@ -186,13 +424,12 @@ SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
#### Enhancements
|
||||
|
||||
* Reduced the lower animation time limits for all effects to 100 ms. This should now allow for very snappy animations!
|
||||
* A completely new Russian translation. Thank you, ANIGO R.!
|
||||
- Reduced the lower animation time limits for all effects to 100 ms. This should now allow for very snappy animations!
|
||||
- A completely new Russian translation. Thank you, ANIGO R.!
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* Fixed the version check for GNOME Shell `42.rc` (before it only worked on `42.alpha` and `42.beta`)
|
||||
|
||||
- Fixed the version check for GNOME Shell `42.rc` (before it only worked on `42.alpha` and `42.beta`)
|
||||
|
||||
## [Burn My Windows 13](https://github.com/schneegans/Burn-My-Windows/releases/tag/v13)
|
||||
|
||||
@@ -200,16 +437,16 @@ SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
#### Enhancements
|
||||
|
||||
* The continuous integration tests have been significantly enhanced. Now, all window-open and window-close animations are visually tested on all supported GNOME versions and on X11 / Wayland (summing up to a total of 136 test cases).
|
||||
* Many translation updates, including a completely new Turkish and Chinese translation. A BIG THANKS to all translators!
|
||||
- The continuous integration tests have been significantly enhanced. Now, all window-open and window-close animations are visually tested on all supported GNOME versions and on X11 / Wayland (summing up to a total of 136 test cases).
|
||||
- Many translation updates, including a completely new Turkish and Chinese translation. A BIG THANKS to all translators!
|
||||
|
||||
#### Other Changes
|
||||
|
||||
* Removed the Liberapay donation option as it does not work properly.
|
||||
- Removed the Liberapay donation option as it does not work properly.
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* Fixed the version check for GNOME Shell 42.
|
||||
- Fixed the version check for GNOME Shell 42.
|
||||
|
||||
## [Burn My Windows 12](https://github.com/schneegans/Burn-My-Windows/releases/tag/v12)
|
||||
|
||||
@@ -217,12 +454,12 @@ SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
#### New Features
|
||||
|
||||
* Added initial support for GNOME Shell 42.
|
||||
* The preferences dialog now uses libadwaita on GNOME Shell 42.
|
||||
- Added initial support for GNOME Shell 42.
|
||||
- The preferences dialog now uses libadwaita on GNOME Shell 42.
|
||||
|
||||
#### Enhancements
|
||||
|
||||
* Added [Liberapay](https://liberapay.com/Schneegans) to the sponsorship options.
|
||||
- Added [Liberapay](https://liberapay.com/Schneegans) to the sponsorship options.
|
||||
|
||||
## [Burn My Windows 11](https://github.com/schneegans/Burn-My-Windows/releases/tag/v11)
|
||||
|
||||
@@ -230,24 +467,24 @@ SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
#### New Features
|
||||
|
||||
* Added an about-dialog which shows all translators and sponsors.
|
||||
- Added an about-dialog which shows all translators and sponsors.
|
||||
|
||||
#### Enhancements
|
||||
|
||||
* There are several new translations! Thanks a lot to all the translators! We now have translations for:
|
||||
* German
|
||||
* English
|
||||
* Czech
|
||||
* Dutch
|
||||
* French
|
||||
* Italian
|
||||
* Norwegian Bokmål
|
||||
* Spanish
|
||||
* A new issue template for suggesting new effects has been added.
|
||||
- There are several new translations! Thanks a lot to all the translators! We now have translations for:
|
||||
- German
|
||||
- English
|
||||
- Czech
|
||||
- Dutch
|
||||
- French
|
||||
- Italian
|
||||
- Norwegian Bokmål
|
||||
- Spanish
|
||||
- A new issue template for suggesting new effects has been added.
|
||||
|
||||
#### Fixes
|
||||
|
||||
* Fixed an issue which caused corrupted windows when trying to maximize windows while the window-open animation was still running (#82, #86, #91).
|
||||
- Fixed an issue which caused corrupted windows when trying to maximize windows while the window-open animation was still running (#82, #86, #91).
|
||||
|
||||
## [Burn My Windows 10](https://github.com/schneegans/Burn-My-Windows/releases/tag/v10)
|
||||
|
||||
@@ -257,18 +494,18 @@ SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
<a href="https://youtu.be/L2aaNF_rPHo"><img align="right" src ="pics/bmw10.jpg" /></a>
|
||||
|
||||
* **Effects for Window Opening.** You can now select effects which are applied on newly opened windows! I expect that there are some bugs left, so please [report any issue you find](https://github.com/Schneegans/Burn-My-Windows/issues)!
|
||||
* **New Effect: Broken Glass.** Shatter your windows into a shower sharp shards! This effect can be configured so that the shards fly away from your mouse pointer position!
|
||||
* **Preview Buttons** have been added to the effect-configuration pages of the preferences dialog. These can be used to, well, preview the current settings (without having to enable the effect first).
|
||||
* **Translations!** It is now possible to [translate the preferences dialog](https://hosted.weblate.org/engage/burn-my-windows/). There is already a finished German translation, and in-progress translations to Italian and Norwegian Bokmål.
|
||||
* **A "Vertical Overshooting" option** was added to the Matrix Effect: This can add some vertical variation to the start and end position of the letter drops.
|
||||
- **Effects for Window Opening.** You can now select effects which are applied on newly opened windows! I expect that there are some bugs left, so please [report any issue you find](https://github.com/Schneegans/Burn-My-Windows/issues)!
|
||||
- **New Effect: Broken Glass.** Shatter your windows into a shower sharp shards! This effect can be configured so that the shards fly away from your mouse pointer position!
|
||||
- **Preview Buttons** have been added to the effect-configuration pages of the preferences dialog. These can be used to, well, preview the current settings (without having to enable the effect first).
|
||||
- **Translations!** It is now possible to [translate the preferences dialog](https://hosted.weblate.org/engage/burn-my-windows/). There is already a finished German translation, and in-progress translations to Italian and Norwegian Bokmål.
|
||||
- **A "Vertical Overshooting" option** was added to the Matrix Effect: This can add some vertical variation to the start and end position of the letter drops.
|
||||
|
||||
#### Other Enhancements
|
||||
|
||||
* Added a menu entry with a link to the guide for creating new effect types.
|
||||
* Thanks to improved timing, the default animation time of several effects could be reduced.
|
||||
* The README now shows the current lines of code and the current comment percentage using my [dynamic-badges-action](https://github.com/Schneegans/dynamic-badges-action).
|
||||
* **Add advanced CI tests:** For each commit to `main`, it is now tested whether the extension can be installed and if the preferences dialog can be shown on GNOME Shell 3.36, 3.38, 40, and 41. Both, X11 and Wayland are checked.
|
||||
- Added a menu entry with a link to the guide for creating new effect types.
|
||||
- Thanks to improved timing, the default animation time of several effects could be reduced.
|
||||
- The README now shows the current lines of code and the current comment percentage using my [dynamic-badges-action](https://github.com/Schneegans/dynamic-badges-action).
|
||||
- **Add advanced CI tests:** For each commit to `main`, it is now tested whether the extension can be installed and if the preferences dialog can be shown on GNOME Shell 3.36, 3.38, 40, and 41. Both, X11 and Wayland are checked.
|
||||
|
||||
## [Burn My Windows 9](https://github.com/schneegans/Burn-My-Windows/releases/tag/v9)
|
||||
|
||||
@@ -276,8 +513,8 @@ SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
#### Fixes
|
||||
|
||||
* Improved compatibility with [Show Application View When Workspace Empty ](https://extensions.gnome.org/extension/2036/show-application-view-when-workspace-empty/) (#54).
|
||||
* Fixed a crash which happened when the window-close icon in the overview was clicked twice (#49).
|
||||
- Improved compatibility with [Show Application View When Workspace Empty ](https://extensions.gnome.org/extension/2036/show-application-view-when-workspace-empty/) (#54).
|
||||
- Fixed a crash which happened when the window-close icon in the overview was clicked twice (#49).
|
||||
|
||||
## [Burn My Windows 8](https://github.com/schneegans/Burn-My-Windows/releases/tag/v8)
|
||||
|
||||
@@ -285,25 +522,24 @@ SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
#### New Features
|
||||
|
||||
* **Random effects!** You can now select a set of effects of which one will be chosen randomly whenever you close a window. **This changes how effects are selected, so you will have to re-select your desired effect(s)**.
|
||||
* **New Effect: Energize A.** Beam your windows away!
|
||||
* **New Effect: Energize B.** Using different transporter technology results in an alternative visual effect.
|
||||
* **New Effect: Wisps.** These little fairies carry your windows to the realm of dreams!
|
||||
* Each effect has its own "Animation Time" setting now. The global animation time has been replaced by those, so **you may have to adjust the sliders to match your previous settings**.
|
||||
- **Random effects!** You can now select a set of effects of which one will be chosen randomly whenever you close a window. **This changes how effects are selected, so you will have to re-select your desired effect(s)**.
|
||||
- **New Effect: Energize A.** Beam your windows away!
|
||||
- **New Effect: Energize B.** Using different transporter technology results in an alternative visual effect.
|
||||
- **New Effect: Wisps.** These little fairies carry your windows to the realm of dreams!
|
||||
- Each effect has its own "Animation Time" setting now. The global animation time has been replaced by those, so **you may have to adjust the sliders to match your previous settings**.
|
||||
|
||||
#### Other Enhancements
|
||||
|
||||
* A [guide for creating new effects](how-to-create-new-effects.md) has been added.
|
||||
* The source code has received a **major refactoring**. This will make the addition of new effects much easier in the future.
|
||||
* The **layout of the settings dialog** has been reworked to make it easier to expand it in the future.
|
||||
* The lower limit of the **animation time of the TV Effect** has been reduced.
|
||||
* The T-Rex-Attack effect is not shown in fully transparent regions of a window any more.
|
||||
* The shaders now use a different noise implementation which produces better 3D noise.
|
||||
- A [guide for creating new effects](how-to-create-new-effects.md) has been added.
|
||||
- The source code has received a **major refactoring**. This will make the addition of new effects much easier in the future.
|
||||
- The **layout of the settings dialog** has been reworked to make it easier to expand it in the future.
|
||||
- The lower limit of the **animation time of the TV Effect** has been reduced.
|
||||
- The T-Rex-Attack effect is not shown in fully transparent regions of a window any more.
|
||||
- The shaders now use a different noise implementation which produces better 3D noise.
|
||||
|
||||
#### Fixes
|
||||
|
||||
* The extension now works even if GNOME Shell's animations are disabled globally.
|
||||
|
||||
- The extension now works even if GNOME Shell's animations are disabled globally.
|
||||
|
||||
## [Burn My Windows 7](https://github.com/schneegans/Burn-My-Windows/releases/tag/v7)
|
||||
|
||||
@@ -311,13 +547,12 @@ SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
#### New Features
|
||||
|
||||
* An option to use a 3D noise for the fire shader has been added. This will add some more temporal variation to the flames at the cost of slightly decreased rendering performance.
|
||||
* A changelog entry has been added to the menu of the preferences dialog.
|
||||
- An option to use a 3D noise for the fire shader has been added. This will add some more temporal variation to the flames at the cost of slightly decreased rendering performance.
|
||||
- A changelog entry has been added to the menu of the preferences dialog.
|
||||
|
||||
#### Fixes
|
||||
|
||||
* Resolve copyright issues by using a MIT-licensed noise implementation.
|
||||
|
||||
- Resolve copyright issues by using a MIT-licensed noise implementation.
|
||||
|
||||
## [Burn My Windows 6](https://github.com/schneegans/Burn-My-Windows/releases/tag/v6)
|
||||
|
||||
@@ -325,7 +560,7 @@ SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
#### Fixes
|
||||
|
||||
* Removed a debug log message.
|
||||
- Removed a debug log message.
|
||||
|
||||
## [Burn My Windows 5](https://github.com/schneegans/Burn-My-Windows/releases/tag/v5)
|
||||
|
||||
@@ -333,17 +568,17 @@ SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
#### New Features
|
||||
|
||||
* Added a new ridiculous close-animation: the T-Rex-Attack!
|
||||
* Added a new simple close-animation: the TV-Effect!
|
||||
* Added a menu to the preferences dialog with links for bug reporting and donations.
|
||||
- Added a new ridiculous close-animation: the T-Rex-Attack!
|
||||
- Added a new simple close-animation: the TV-Effect!
|
||||
- Added a menu to the preferences dialog with links for bug reporting and donations.
|
||||
|
||||
#### Other Enhancements
|
||||
|
||||
* The fire shader now uses a `smoothstep` to make it less blocky.
|
||||
- The fire shader now uses a `smoothstep` to make it less blocky.
|
||||
|
||||
#### Bug Fixes
|
||||
|
||||
* Fixed a bug which messed up the overview of GNOME Shell 3.36.
|
||||
- Fixed a bug which messed up the overview of GNOME Shell 3.36.
|
||||
|
||||
## [Burn My Windows 4](https://github.com/schneegans/Burn-My-Windows/releases/tag/v4)
|
||||
|
||||
@@ -351,13 +586,13 @@ SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
#### New Features
|
||||
|
||||
* Added a new Matrix shader which dissolves your windows in a shower of green letters. You can switch between the fire and the matrix shader in the settings. Sadly, this effect cannot be available under GNOME 3.3x as it was apparently impossible to set textures for a `Clutter.ShaderEffect` in GJS back then.
|
||||
* Added a setting to apply the animation also for closing dialog windows.
|
||||
- Added a new Matrix shader which dissolves your windows in a shower of green letters. You can switch between the fire and the matrix shader in the settings. Sadly, this effect cannot be available under GNOME 3.3x as it was apparently impossible to set textures for a `Clutter.ShaderEffect` in GJS back then.
|
||||
- Added a setting to apply the animation also for closing dialog windows.
|
||||
|
||||
#### Other Enhancements
|
||||
|
||||
* Refactored the code a lot to make it easier to add new shader effects in the future.
|
||||
* Tweaked timing of the fire shader. Previously, the fire became invisible quite quickly. Due to this new animation timing, the default animation time has been reduced to 1500 ms.
|
||||
- Refactored the code a lot to make it easier to add new shader effects in the future.
|
||||
- Tweaked timing of the fire shader. Previously, the fire became invisible quite quickly. Due to this new animation timing, the default animation time has been reduced to 1500 ms.
|
||||
|
||||
## [Burn My Windows 3](https://github.com/schneegans/Burn-My-Windows/releases/tag/v3)
|
||||
|
||||
@@ -365,7 +600,7 @@ SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
#### New Features
|
||||
|
||||
* Add support for GNOME 3.36 and GNOME 3.38.
|
||||
- Add support for GNOME 3.36 and GNOME 3.38.
|
||||
|
||||
## [Burn My Windows 2](https://github.com/schneegans/Burn-My-Windows/releases/tag/v2)
|
||||
|
||||
@@ -373,12 +608,12 @@ SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
#### New Features
|
||||
|
||||
* Added the possibility to adjust fire colors.
|
||||
* Added the possibility to adjust flame speed and scale.
|
||||
* Added some fire presets.
|
||||
- Added the possibility to adjust fire colors.
|
||||
- Added the possibility to adjust flame speed and scale.
|
||||
- Added some fire presets.
|
||||
|
||||
## [Burn My Windows 1](https://github.com/schneegans/Burn-My-Windows/releases/tag/v1)
|
||||
|
||||
**Release Date:** 2021-12-14
|
||||
|
||||
* Initial publication on GitHub supporting GNOME 40 and GNOME 41.
|
||||
- Initial publication on GitHub supporting GNOME 40 and GNOME 41.
|
||||
|
||||
@@ -38,7 +38,7 @@ journalctl -f -o cat | grep -E 'burn-my-windows|'
|
||||
For the sake of this tutorial, we will create a **"Simple Fade"** effect.
|
||||
Of course, you can replace any occurrence of this name and its nick `simple-fade` with your custom effect name.
|
||||
|
||||
Three simple steps are required to create a new effect.
|
||||
Three simple steps are required to create a new effect.
|
||||
You will have to ...
|
||||
|
||||
1. add preferences keys for enabling the effect,
|
||||
@@ -47,9 +47,9 @@ You will have to ...
|
||||
|
||||
### 1. Expanding the Schema
|
||||
|
||||
For enabling the new effect, the boolean settings keys `simple-fade-open-effect`, `simple-fade-close-effect`, and `simple-fade-animation-time` are required.
|
||||
For enabling the new effect, the boolean settings keys `simple-fade-enable-effect` and `simple-fade-animation-time` are required.
|
||||
In this example, we also add a floating point value for storing another property of the effect - we will use them later in the tutorial.
|
||||
Just copy the XML code below to the file [`schemas/org.gnome.shell.extensions.burn-my-windows.gschema.xml`](../schemas/org.gnome.shell.extensions.burn-my-windows.gschema.xml).
|
||||
Just copy the XML code below to the file [`schemas/org.gnome.shell.extensions.burn-my-windows-profile.gschema.xml`](../schemas/org.gnome.shell.extensions.burn-my-windows-profile.gschema.xml).
|
||||
Just remember to replace `simple-fade` with your custom name!
|
||||
|
||||
```xml
|
||||
@@ -57,16 +57,10 @@ Just remember to replace `simple-fade` with your custom name!
|
||||
<!-- Simple Fade Effect Options -->
|
||||
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
|
||||
|
||||
<key name="simple-fade-close-effect" type="b">
|
||||
<key name="simple-fade-enable-effect" type="b">
|
||||
<default>false</default>
|
||||
<summary>Simple Fade Close Effect</summary>
|
||||
<description>Use the Simple Fade effect for window closing.</description>
|
||||
</key>
|
||||
|
||||
<key name="simple-fade-open-effect" type="b">
|
||||
<default>false</default>
|
||||
<summary>Simple Fade Open Effect</summary>
|
||||
<description>Use the Simple Fade effect for window opening.</description>
|
||||
<summary>Simple Fade Enable Effect</summary>
|
||||
<description>Use the Simple Fade effect.</description>
|
||||
</key>
|
||||
|
||||
<key name="simple-fade-animation-time" type="i">
|
||||
@@ -84,7 +78,7 @@ Just remember to replace `simple-fade` with your custom name!
|
||||
|
||||
### 2. Creating the Effect Class
|
||||
|
||||
You will have to create a new GLSL file called `resources/shaders/simple-fade.frag` and a new JavaScript source file called `src/SimpleFade.js`.
|
||||
You will have to create a new GLSL file called `resources/shaders/simple-fade.frag` and a new JavaScript source file called `src/effects/SimpleFade.js`.
|
||||
Simply paste the following source code to the respective file.
|
||||
Please study this code carefully, all of it is explained with inline comments.
|
||||
|
||||
@@ -92,16 +86,31 @@ Please study this code carefully, all of it is explained with inline comments.
|
||||
<summary>Expand this to show the GLSL code.</summary>
|
||||
|
||||
```glsl
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
// ) ( //
|
||||
// ( /( ( ( ) ( ( ( ( )\ ) ( ( //
|
||||
// )\()) ))\ )( ( ( )\ ) )\))( )\ ( (()/( ( )\))( ( //
|
||||
// ((_)\ /((_|()\ )\ ) )\ '(()/( ((_)()((_) )\ ) ((_)))\((_)()\ )\ //
|
||||
// | |(_|_))( ((_)_(_/( _((_)) )(_)) _(()((_|_)_(_/( _| |((_)(()((_|(_) //
|
||||
// | '_ \ || | '_| ' \)) | ' \()| || | \ V V / | ' \)) _` / _ \ V V (_-< //
|
||||
// |_.__/\_,_|_| |_||_| |_|_|_| \_, | \_/\_/|_|_||_|\__,_\___/\_/\_//__/ //
|
||||
// |__/ //
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// SPDX-FileCopyrightText: Your Name <your@email.com>
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
// The content from common.glsl is automatically prepended to each shader effect. This
|
||||
// provides the standard input:
|
||||
|
||||
// vec2 iTexCoord: Texture coordinates for retrieving the window input color.
|
||||
// bool uForOpening: True if a window-open animation is ongoing, false otherwise.
|
||||
// float uProgress: A value which transitions from 0 to 1 during the animation.
|
||||
// float uDuration: The duration of the current animation in seconds.
|
||||
// vec2 uSize: The size of uTexture in pixels.
|
||||
// float uPadding: The empty area around the actual window (e.g. where the shadow
|
||||
// is drawn). For now, this will only be set on GNOME.
|
||||
// vec2 iTexCoord: Texture coordinates for retrieving the window input color.
|
||||
// bool uIsFullscreen: True if the window is maximized or in fullscreen mode.
|
||||
// bool uForOpening: True if a window-open animation is ongoing, false otherwise.
|
||||
// float uProgress: A value which transitions from 0 to 1 during the animation.
|
||||
// float uDuration: The duration of the current animation in seconds.
|
||||
// vec2 uSize: The size of uTexture in pixels.
|
||||
// float uPadding: The empty area around the actual window (e.g. where the shadow
|
||||
// is drawn). For now, this will only be set on GNOME.
|
||||
|
||||
// Furthermore, there are two global methods for reading the window input color and
|
||||
// setting the shader output color. Both methods assume straight alpha:
|
||||
@@ -154,16 +163,16 @@ void main() {
|
||||
// SPDX-FileCopyrightText: Your Name <your@email.com>
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
'use strict';
|
||||
"use strict";
|
||||
|
||||
const GObject = imports.gi.GObject;
|
||||
import * as utils from "../utils.js";
|
||||
|
||||
const _ = imports.gettext.domain('burn-my-windows').gettext;
|
||||
// We import the ShaderFactory only in the Shell process as it is not required in the
|
||||
// preferences process. The preferences process does not create any shader instances, it
|
||||
// only uses the static metadata of the effect.
|
||||
const ShaderFactory = await utils.importInShellOnly("./ShaderFactory.js");
|
||||
|
||||
const ExtensionUtils = imports.misc.extensionUtils;
|
||||
const Me = imports.misc.extensionUtils.getCurrentExtension();
|
||||
const utils = Me.imports.src.utils;
|
||||
const ShaderFactory = Me.imports.src.ShaderFactory.ShaderFactory;
|
||||
const _ = await utils.importGettext();
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
// This effect ... //
|
||||
@@ -173,21 +182,21 @@ const ShaderFactory = Me.imports.src.ShaderFactory.ShaderFactory;
|
||||
// The effect class can be used to get some metadata (like the effect's name or supported
|
||||
// GNOME Shell versions), to initialize the respective page of the settings dialog, as
|
||||
// well as to create the actual shader for the effect.
|
||||
var SimpleFade = class {
|
||||
|
||||
export default class Effect {
|
||||
// The constructor creates a ShaderFactory which will be used by extension.js to create
|
||||
// shader instances for this effect. The shaders will be automagically created using the
|
||||
// GLSL file in resources/shaders/<nick>.glsl. The callback will be called for each
|
||||
// newly created shader instance.
|
||||
constructor() {
|
||||
this.shaderFactory = new ShaderFactory(this.getNick(), (shader) => {
|
||||
|
||||
this.shaderFactory = new ShaderFactory(Effect.getNick(), (shader) => {
|
||||
// Store uniform locations of newly created shaders.
|
||||
shader._uFadeWidth = shader.get_uniform_location('uFadeWidth');
|
||||
shader._uFadeWidth = shader.get_uniform_location("uFadeWidth");
|
||||
|
||||
// Write all uniform values at the start of each animation.
|
||||
shader.connect('begin-animation', (shader, settings) => {
|
||||
shader.set_uniform_float(shader._uFadeWidth, 1, [settings.get_double('simple-fade-width')]);
|
||||
shader.connect("begin-animation", (shader, settings) => {
|
||||
shader.set_uniform_float(shader._uFadeWidth, 1, [
|
||||
settings.get_double("simple-fade-width"),
|
||||
]);
|
||||
});
|
||||
});
|
||||
}
|
||||
@@ -195,32 +204,31 @@ var SimpleFade = class {
|
||||
// ---------------------------------------------------------------------------- metadata
|
||||
|
||||
// The effect is available on all GNOME Shell versions supported by this extension.
|
||||
getMinShellVersion() {
|
||||
static getMinShellVersion() {
|
||||
return [3, 36];
|
||||
}
|
||||
|
||||
// This will be called in various places where a unique identifier for this effect is
|
||||
// required. It should match the prefix of the settings keys which store whether the
|
||||
// effect is enabled currently (e.g. '*-close-effect'), and its animation time
|
||||
// (e.g. '*-animation-time').
|
||||
getNick() {
|
||||
return 'simple-fade';
|
||||
// effect is enabled currently (e.g. '*-enable-effect'), and its animation time
|
||||
// (e.g. '*-animation-time'). Also, the shader file and the settings UI files should be
|
||||
// named likes this.
|
||||
static getNick() {
|
||||
return "simple-fade";
|
||||
}
|
||||
|
||||
// This will be shown in the sidebar of the preferences dialog as well as in the
|
||||
// drop-down menus where the user can choose the effect.
|
||||
getLabel() {
|
||||
return _('Simple Fade Effect');
|
||||
static getLabel() {
|
||||
return _("Simple Fade Effect");
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------- API for prefs.js
|
||||
|
||||
// This is called by the preferences dialog. It loads the settings page for this effect,
|
||||
// binds all properties to the settings and appends the page to the main stack of the
|
||||
// preferences dialog.
|
||||
getPreferences(dialog) {
|
||||
// This is called by the preferences dialog whenever a new effect profile is loaded. It
|
||||
// binds all user interface elements to the respective settings keys of the profile.
|
||||
static bindPreferences(dialog) {
|
||||
// Empty for now... Code is added here later in the tutorial!
|
||||
return null;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------- API for extension.js
|
||||
@@ -228,8 +236,8 @@ var SimpleFade = class {
|
||||
// The getActorScale() is called from extension.js to adjust the actor's size during the
|
||||
// animation. This is useful if the effect requires drawing something beyond the usual
|
||||
// bounds of the actor. This only works for GNOME 3.38+.
|
||||
getActorScale(settings) {
|
||||
return {x: 1.0, y: 1.0};
|
||||
static getActorScale(settings, forOpening, actor) {
|
||||
return { x: 1.0, y: 1.0 };
|
||||
}
|
||||
}
|
||||
```
|
||||
@@ -243,15 +251,17 @@ Both, [`extension.js`](../extension.js) and [`prefs.js`](../prefs.js) define an
|
||||
Like this:
|
||||
|
||||
```javascript
|
||||
import SimpleFade from './src/effects/SimpleFade.js';
|
||||
|
||||
...
|
||||
|
||||
const ALL_EFFECTS = [
|
||||
...
|
||||
new Me.imports.src.SimpleFade.SimpleFade(),
|
||||
new SimpleFade(),
|
||||
...
|
||||
];
|
||||
```
|
||||
|
||||
|
||||
|
||||
### Testing your Effect
|
||||
|
||||
Now you can call `make install` and restart GNOME Shell with <kbd>Alt</kbd> + <kbd>F2</kbd>, <kbd>r</kbd> + <kbd>Enter</kbd>.
|
||||
@@ -267,17 +277,11 @@ gnome-extensions prefs burn-my-windows@schneegans.github.com
|
||||
## Adding a Preferences Page
|
||||
|
||||
There should be two sliders in this example: The animation duration and the width of the fading gradient.
|
||||
|
||||
If your effect supports GNOME Shell 3.3x _and_ GNOME Shell 40+, you will have to provide three `*.ui` files for this.
|
||||
This is because starting with GNOME Shell 40, the preference dialog uses GTK4, before it used to use GTK3.
|
||||
Starting with GNOME Shell 42, it uses `libadwaita` which requires different UI files again.
|
||||
We will load the respective file in the `getPreferences()` method of your new effect class.
|
||||
|
||||
Just save the code below to `resources/ui/gtk3/SimpleFade.ui`, `resources/ui/gtk4/SimpleFade.ui`, and `resources/ui/adw/SimpleFade.ui` respectively.
|
||||
Just save the code below to `resources/ui/adw/simple-fade.ui`.
|
||||
Remember to replace any occurrence of `simple-fade` with your effect's nick-name!
|
||||
|
||||
<details>
|
||||
<summary>Expand this to show the GTK3 code.</summary>
|
||||
<summary>Expand this to show the UI code.</summary>
|
||||
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
@@ -287,10 +291,10 @@ SPDX-FileCopyrightText: Your Name <your@email.com>
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
-->
|
||||
|
||||
<interface>
|
||||
<interface domain="burn-my-windows">
|
||||
|
||||
<object class="GtkAdjustment" id="simple-fade-animation-time">
|
||||
<property name="upper">5000</property>
|
||||
<property name="upper">3000</property>
|
||||
<property name="lower">100</property>
|
||||
<property name="step-increment">10</property>
|
||||
<property name="page-increment">100</property>
|
||||
@@ -303,288 +307,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
||||
<property name="page-increment">0.1</property>
|
||||
</object>
|
||||
|
||||
<object class="GtkBox" id="simple-fade-prefs">
|
||||
<property name="orientation">vertical</property>
|
||||
|
||||
<child>
|
||||
<object class="GtkFrame">
|
||||
<child>
|
||||
<object class="GtkListBox">
|
||||
<property name="selection-mode">none</property>
|
||||
<style>
|
||||
<class name="rich-list" />
|
||||
</style>
|
||||
|
||||
<child>
|
||||
<object class="GtkListBoxRow">
|
||||
<property name="margin-start">10</property>
|
||||
<property name="margin-end">10</property>
|
||||
<property name="margin-top">10</property>
|
||||
<property name="margin-bottom">10</property>
|
||||
<property name="activatable">0</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="label" translatable="yes">Animation Time [ms]</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="hexpand">1</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScale">
|
||||
<property name="halign">end</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="draw-value">1</property>
|
||||
<property name="digits">0</property>
|
||||
<property name="value-pos">left</property>
|
||||
<property name="width-request">300</property>
|
||||
<property name="adjustment">simple-fade-animation-time</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="reset-simple-fade-animation-time">
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="icon-name">edit-clear-symbolic</property>
|
||||
<property name="icon-size">1</property>
|
||||
</object>
|
||||
</child>
|
||||
<property name="tooltip-text" translatable="yes">Reset to Default Value</property>
|
||||
<style>
|
||||
<class name="flat" />
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<object class="GtkListBoxRow">
|
||||
<property name="margin-start">10</property>
|
||||
<property name="margin-end">10</property>
|
||||
<property name="margin-top">10</property>
|
||||
<property name="margin-bottom">10</property>
|
||||
<property name="activatable">0</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="label" translatable="yes">Fade Width</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="hexpand">1</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScale">
|
||||
<property name="halign">end</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="draw-value">1</property>
|
||||
<property name="digits">2</property>
|
||||
<property name="value-pos">left</property>
|
||||
<property name="width-request">300</property>
|
||||
<property name="adjustment">simple-fade-width</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="reset-simple-fade-width">
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="icon-name">edit-clear-symbolic</property>
|
||||
<property name="icon-size">1</property>
|
||||
</object>
|
||||
</child>
|
||||
<property name="tooltip-text" translatable="yes">Reset to Default Value</property>
|
||||
<style>
|
||||
<class name="flat" />
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
</object>
|
||||
|
||||
</interface>
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
|
||||
|
||||
<details>
|
||||
<summary>Expand this to show the GTK4 code.</summary>
|
||||
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!--
|
||||
SPDX-FileCopyrightText: Your Name <your@email.com>
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
-->
|
||||
|
||||
<interface>
|
||||
|
||||
<object class="GtkAdjustment" id="simple-fade-animation-time">
|
||||
<property name="upper">5000</property>
|
||||
<property name="lower">100</property>
|
||||
<property name="step-increment">10</property>
|
||||
<property name="page-increment">100</property>
|
||||
</object>
|
||||
|
||||
<object class="GtkAdjustment" id="simple-fade-width">
|
||||
<property name="upper">1</property>
|
||||
<property name="lower">0</property>
|
||||
<property name="step-increment">0.01</property>
|
||||
<property name="page-increment">0.1</property>
|
||||
</object>
|
||||
|
||||
<object class="GtkBox" id="simple-fade-prefs">
|
||||
<property name="orientation">vertical</property>
|
||||
|
||||
<child>
|
||||
<object class="GtkFrame">
|
||||
<child>
|
||||
<object class="GtkListBox">
|
||||
<property name="selection-mode">none</property>
|
||||
<property name="show-separators">1</property>
|
||||
<style>
|
||||
<class name="rich-list" />
|
||||
</style>
|
||||
|
||||
<child>
|
||||
<object class="GtkListBoxRow">
|
||||
<property name="activatable">0</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="label" translatable="yes">Animation Time [ms]</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="hexpand">1</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScale">
|
||||
<property name="halign">end</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="draw-value">1</property>
|
||||
<property name="digits">0</property>
|
||||
<property name="value-pos">left</property>
|
||||
<property name="width-request">300</property>
|
||||
<property name="adjustment">simple-fade-animation-time</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="reset-simple-fade-animation-time">
|
||||
<property name="icon-name">edit-clear-symbolic</property>
|
||||
<property name="tooltip-text" translatable="yes">Reset to Default Value</property>
|
||||
<style>
|
||||
<class name="flat" />
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<object class="GtkListBoxRow">
|
||||
<property name="activatable">0</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="label" translatable="yes">Fade Width</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="hexpand">1</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScale">
|
||||
<property name="halign">end</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="draw-value">1</property>
|
||||
<property name="digits">2</property>
|
||||
<property name="value-pos">left</property>
|
||||
<property name="width-request">300</property>
|
||||
<property name="adjustment">simple-fade-width</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="reset-simple-fade-width">
|
||||
<property name="icon-name">edit-clear-symbolic</property>
|
||||
<property name="tooltip-text" translatable="yes">Reset to Default Value</property>
|
||||
<style>
|
||||
<class name="flat" />
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
</object>
|
||||
|
||||
</interface>
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
<details>
|
||||
<summary>Expand this to show the libadwaita code.</summary>
|
||||
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!--
|
||||
SPDX-FileCopyrightText: Your Name <your@email.com>
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
-->
|
||||
|
||||
<interface>
|
||||
|
||||
<object class="GtkAdjustment" id="simple-fade-animation-time">
|
||||
<property name="upper">5000</property>
|
||||
<property name="lower">100</property>
|
||||
<property name="step-increment">10</property>
|
||||
<property name="page-increment">100</property>
|
||||
</object>
|
||||
|
||||
<object class="GtkAdjustment" id="simple-fade-width">
|
||||
<property name="upper">1</property>
|
||||
<property name="lower">0</property>
|
||||
<property name="step-increment">0.01</property>
|
||||
<property name="page-increment">0.1</property>
|
||||
</object>
|
||||
|
||||
<object class="AdwActionRow" id="simple-fade-prefs">
|
||||
<object class="AdwExpanderRow" id="simple-fade-prefs">
|
||||
|
||||
<child>
|
||||
<object class="AdwActionRow">
|
||||
@@ -647,21 +370,14 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
### Loading the Preferences Page
|
||||
|
||||
In order to load the above `*.ui` files, add the following code to your effect's `getPreferences()` method.
|
||||
In order to load the above `*.ui` file, add the following code to your effect's `bindPreferences()` method.
|
||||
|
||||
```javascript
|
||||
static getPreferences(dialog) {
|
||||
|
||||
// Add the settings page to the builder.
|
||||
dialog.getBuilder().add_from_resource(`/ui/${utils.getUIDir()}/SimpleFade.ui`);
|
||||
|
||||
static bindPreferences(dialog) {
|
||||
// These connect the settings to the UI elements. Have a look at prefs.js
|
||||
// on how to bind other types of UI elements.
|
||||
dialog.bindAdjustment('simple-fade-animation-time');
|
||||
dialog.bindAdjustment('simple-fade-width');
|
||||
|
||||
// Finally, return the new settings page.
|
||||
return dialog.getBuilder().get_object('simple-fade-prefs');
|
||||
}
|
||||
```
|
||||
|
||||
@@ -677,4 +393,4 @@ make install && pkill -f '.Extensions' && sleep 2 ; gnome-extensions prefs burn-
|
||||
|
||||
That's it!
|
||||
If you have any questions, feel free to [ask them on the discussions board](https://github.com/Schneegans/Burn-My-Windows/discussions).
|
||||
If you are happy with your effect, submit a pull request, and it may get included in the next version!
|
||||
If you are happy with your effect, submit a pull request, and it may get included in the next version!
|
||||
|
||||
@@ -3,5 +3,5 @@
|
||||
The preview GIFs are recorded with OBS Studio at 1920x1080, cut to a length of exactly two seconds and converted to a GIF with the following command:
|
||||
|
||||
```bash
|
||||
gifski --fps 30 -W 400 -H 225 -o effect.gif effect.mp4
|
||||
gifski --fps 30 -W 320 -H 180 -o effect.gif effect.mp4
|
||||
```
|
||||
|
Before Width: | Height: | Size: 415 KiB After Width: | Height: | Size: 256 KiB |
|
After Width: | Height: | Size: 927 KiB |
|
Before Width: | Height: | Size: 623 KiB After Width: | Height: | Size: 433 KiB |
|
After Width: | Height: | Size: 862 KiB |
|
After Width: | Height: | Size: 646 KiB |
|
Before Width: | Height: | Size: 1.0 MiB |
|
Before Width: | Height: | Size: 958 KiB |
|
Before Width: | Height: | Size: 949 KiB After Width: | Height: | Size: 758 KiB |
|
After Width: | Height: | Size: 490 KiB |
|
Before Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 544 KiB After Width: | Height: | Size: 357 KiB |
|
Before Width: | Height: | Size: 387 KiB After Width: | Height: | Size: 366 KiB |
|
Before Width: | Height: | Size: 615 KiB After Width: | Height: | Size: 504 KiB |
|
Before Width: | Height: | Size: 975 KiB After Width: | Height: | Size: 536 KiB |
|
Before Width: | Height: | Size: 625 KiB After Width: | Height: | Size: 593 KiB |
|
After Width: | Height: | Size: 383 KiB |
|
Before Width: | Height: | Size: 414 KiB After Width: | Height: | Size: 261 KiB |
|
Before Width: | Height: | Size: 792 KiB After Width: | Height: | Size: 348 KiB |
|
Before Width: | Height: | Size: 491 KiB After Width: | Height: | Size: 391 KiB |
|
Before Width: | Height: | Size: 840 KiB After Width: | Height: | Size: 676 KiB |
|
Before Width: | Height: | Size: 928 KiB After Width: | Height: | Size: 739 KiB |
|
Before Width: | Height: | Size: 136 KiB After Width: | Height: | Size: 99 KiB |
|
Before Width: | Height: | Size: 936 KiB After Width: | Height: | Size: 603 KiB |
|
Before Width: | Height: | Size: 442 KiB After Width: | Height: | Size: 294 KiB |
|
Before Width: | Height: | Size: 203 KiB After Width: | Height: | Size: 215 KiB |
|
Before Width: | Height: | Size: 821 KiB After Width: | Height: | Size: 660 KiB |
@@ -14,23 +14,43 @@
|
||||
|
||||
'use strict';
|
||||
|
||||
const {Clutter, Gio, Meta} = imports.gi;
|
||||
import Gio from 'gi://Gio';
|
||||
import Meta from 'gi://Meta';
|
||||
|
||||
const Main = imports.ui.main;
|
||||
const Workspace = imports.ui.workspace.Workspace;
|
||||
const WindowManager = imports.ui.windowManager.WindowManager;
|
||||
import {fromVersion26} from './src/migrate.js';
|
||||
import {ProfileManager} from './src/ProfileManager.js';
|
||||
import {WindowPicker} from './src/WindowPicker.js';
|
||||
import * as utils from './src/utils.js';
|
||||
|
||||
// The WindowPreview class is only available on GNOME Shell 3.38+;
|
||||
let WindowPreview = null;
|
||||
try {
|
||||
WindowPreview = imports.ui.windowPreview.WindowPreview;
|
||||
} catch (error) {
|
||||
// Nothing to be done, we are on GNOME Shell 3.36.
|
||||
}
|
||||
import Apparition from './src/effects/Apparition.js';
|
||||
import BrokenGlass from './src/effects/BrokenGlass.js';
|
||||
import Doom from './src/effects/Doom.js';
|
||||
import EnergizeA from './src/effects/EnergizeA.js';
|
||||
import EnergizeB from './src/effects/EnergizeB.js';
|
||||
import Fire from './src/effects/Fire.js';
|
||||
import Focus from './src/effects/Focus.js';
|
||||
import Glide from './src/effects/Glide.js';
|
||||
import Glitch from './src/effects/Glitch.js';
|
||||
import Hexagon from './src/effects/Hexagon.js';
|
||||
import Incinerate from './src/effects/Incinerate.js';
|
||||
import Matrix from './src/effects/Matrix.js';
|
||||
import PaintBrush from './src/effects/PaintBrush.js';
|
||||
import Pixelate from './src/effects/Pixelate.js';
|
||||
import PixelWheel from './src/effects/PixelWheel.js';
|
||||
import PixelWipe from './src/effects/PixelWipe.js';
|
||||
import Portal from './src/effects/Portal.js';
|
||||
import SnapOfDisintegration from './src/effects/SnapOfDisintegration.js';
|
||||
import TRexAttack from './src/effects/TRexAttack.js';
|
||||
import TVEffect from './src/effects/TVEffect.js';
|
||||
import TVGlitch from './src/effects/TVGlitch.js';
|
||||
import Wisps from './src/effects/Wisps.js';
|
||||
|
||||
|
||||
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
|
||||
import {Workspace} from 'resource:///org/gnome/shell/ui/workspace.js';
|
||||
import {WindowPreview} from 'resource:///org/gnome/shell/ui/windowPreview.js';
|
||||
import {Extension} from 'resource:///org/gnome/shell/extensions/extension.js';
|
||||
|
||||
const ExtensionUtils = imports.misc.extensionUtils;
|
||||
const Me = imports.misc.extensionUtils.getCurrentExtension();
|
||||
const utils = Me.imports.src.utils;
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
// This extensions modifies the window-close and window-open animations with all kinds //
|
||||
@@ -41,7 +61,7 @@ const utils = Me.imports.src.utils;
|
||||
// to get this working. For more details, read the other comments in this file... //
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class Extension {
|
||||
export default class BurnMyWindows extends Extension {
|
||||
|
||||
// ------------------------------------------------------------------------ public stuff
|
||||
|
||||
@@ -51,34 +71,56 @@ class Extension {
|
||||
|
||||
// New effects must be registered here and in prefs.js.
|
||||
this._ALL_EFFECTS = [
|
||||
new Me.imports.src.Apparition.Apparition(),
|
||||
new Me.imports.src.BrokenGlass.BrokenGlass(),
|
||||
new Me.imports.src.Doom.Doom(),
|
||||
new Me.imports.src.EnergizeA.EnergizeA(),
|
||||
new Me.imports.src.EnergizeB.EnergizeB(),
|
||||
new Me.imports.src.Fire.Fire(),
|
||||
new Me.imports.src.Glide.Glide(),
|
||||
new Me.imports.src.Glitch.Glitch(),
|
||||
new Me.imports.src.Hexagon.Hexagon(),
|
||||
new Me.imports.src.Incinerate.Incinerate(),
|
||||
new Me.imports.src.Matrix.Matrix(),
|
||||
new Me.imports.src.Pixelate.Pixelate(),
|
||||
new Me.imports.src.PixelWheel.PixelWheel(),
|
||||
new Me.imports.src.PixelWipe.PixelWipe(),
|
||||
new Me.imports.src.Portal.Portal(),
|
||||
new Me.imports.src.SnapOfDisintegration.SnapOfDisintegration(),
|
||||
new Me.imports.src.TRexAttack.TRexAttack(),
|
||||
new Me.imports.src.TVEffect.TVEffect(),
|
||||
new Me.imports.src.TVGlitch.TVGlitch(),
|
||||
new Me.imports.src.Wisps.Wisps(),
|
||||
new Apparition(), new BrokenGlass(), new Doom(),
|
||||
new EnergizeA(), new EnergizeB(), new Fire(),
|
||||
new Focus(), new Glide(), new Glitch(),
|
||||
new Hexagon(), new Incinerate(), new Matrix(),
|
||||
new PaintBrush(), new Pixelate(), new PixelWheel(),
|
||||
new PixelWipe(), new Portal(), new SnapOfDisintegration(),
|
||||
new TRexAttack(), new TVEffect(), new TVGlitch(),
|
||||
new Wisps(),
|
||||
];
|
||||
|
||||
// Load all of our resources.
|
||||
this._resources = Gio.Resource.load(Me.path + '/resources/burn-my-windows.gresource');
|
||||
this._resources =
|
||||
Gio.Resource.load(this.path + '/resources/burn-my-windows.gresource');
|
||||
Gio.resources_register(this._resources);
|
||||
|
||||
// Store a reference to the settings object.
|
||||
this._settings = ExtensionUtils.getSettings();
|
||||
this._settings = this.getSettings();
|
||||
|
||||
// Now we check whether the extension settings need to be migrated from a previous
|
||||
// version. If this is the case, we defer the profile loading until this is finished.
|
||||
const lastVersion = this._settings.get_int('last-extension-version');
|
||||
if (lastVersion < this.metadata.version) {
|
||||
if (lastVersion <= 26) {
|
||||
// If the profile migration fails for some reason, the callback will create a
|
||||
// default profile instead.
|
||||
fromVersion26().finally(() => {
|
||||
this._loadProfiles();
|
||||
this._settings.set_int('last-extension-version', this.metadata.version);
|
||||
});
|
||||
} else {
|
||||
this._loadProfiles();
|
||||
}
|
||||
|
||||
} else {
|
||||
this._loadProfiles();
|
||||
}
|
||||
|
||||
// We reload all effect profiles whenever the currently edited profile in the
|
||||
// preferences dialog changes. This is most likely a bit too often, but it will also
|
||||
// happen whenever a new profile is created and whenever an old profile is deleted.
|
||||
this._settings.connect('changed::active-profile', () => {
|
||||
this._loadProfiles();
|
||||
});
|
||||
|
||||
// This is used to get the desktop's color scheme.
|
||||
this._shellSettings = new Gio.Settings({schema: 'org.gnome.desktop.interface'});
|
||||
|
||||
// Enable the window-picking D-Bus API for the preferences dialog.
|
||||
this._windowPicker = new WindowPicker();
|
||||
this._windowPicker.export();
|
||||
|
||||
// We will use extensionThis to refer to the extension inside the patched methods.
|
||||
const extensionThis = this;
|
||||
@@ -100,178 +142,141 @@ class Extension {
|
||||
}
|
||||
|
||||
// We will monkey-patch these methods. Let's store the original ones.
|
||||
this._origShouldAnimateActor = Main.wm._shouldAnimateActor;
|
||||
this._origWaitForOverviewToHide = Main.wm._waitForOverviewToHide;
|
||||
this._origAddWindowClone = Workspace.prototype._addWindowClone;
|
||||
this._origWindowRemoved = Workspace.prototype._windowRemoved;
|
||||
this._origDoRemoveWindow = Workspace.prototype._doRemoveWindow;
|
||||
this._origShouldAnimateActor = WindowManager.prototype._shouldAnimateActor;
|
||||
this._origWaitForOverviewToHide = WindowManager.prototype._waitForOverviewToHide;
|
||||
this._origDestroyWindowDone = WindowManager.prototype._destroyWindowDone;
|
||||
|
||||
// We will also override these animation times.
|
||||
this._origWindowTime = imports.ui.windowManager.DESTROY_WINDOW_ANIMATION_TIME;
|
||||
this._origDialogTime = imports.ui.windowManager.DIALOG_DESTROY_WINDOW_ANIMATION_TIME;
|
||||
// ------------------------------- patching the window animations outside the overview
|
||||
|
||||
|
||||
// ------------------------------------------------ patching the window-open animation
|
||||
|
||||
// Here we add an effect to the window-open animation. This is done whenever a new
|
||||
// window is created. Usually, there is no real window animation for opening windows
|
||||
// in the overview - only the window's clone is animated - but thanks to the hacks
|
||||
// below, we can show the real animations in the overview.
|
||||
|
||||
// If a window is created the transitions are set up in the async _mapWindow of the
|
||||
// If a window is created, the transitions are set up in the async _mapWindow() of the
|
||||
// WindowManager:
|
||||
// https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/windowManager.js#L1452
|
||||
// AFAIK, overriding this method is not possible as it's called by a signal to
|
||||
// which it is bound via the bind() method. To tweak the async transition
|
||||
// anyways, we override the actors ease() method once - the next time it will be
|
||||
// called by the _mapWindow(), we will intercept it!
|
||||
this._windowCreatedConnection =
|
||||
global.display.connect('window-created', (d, metaWin) => {
|
||||
let actor = metaWin.get_compositor_private();
|
||||
// https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/windowManager.js#L1436
|
||||
// AFAIK, overriding this method is not possible as it's called by a signal to which
|
||||
// it is bound via the bind() method. To tweak the async transition anyways, we
|
||||
// override the actors ease() method once. We do this in _shouldAnimateActor() which
|
||||
// is called right before the ease() in _mapWindow:
|
||||
// https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/windowManager.js#L1465
|
||||
|
||||
const orig = actor.ease;
|
||||
actor.ease = function(...params) {
|
||||
orig.apply(actor, params);
|
||||
actor.ease = orig;
|
||||
// The same trick is done for the window-close animation. This is set up in a similar
|
||||
// fashion in the WindowManager's _destroyWindow():
|
||||
// https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/windowManager.js#L1525
|
||||
// Here is _shouldAnimateActor() also called right before. So we use it again to
|
||||
// monkey-patch the window actor's ease() once.
|
||||
|
||||
// There are cases where the ease() is called prior to mapping the actor. If
|
||||
// the actor is not yet mapped, we defer the effect creation.
|
||||
if (actor.mapped) {
|
||||
extensionThis._setupEffect(actor, true);
|
||||
} else {
|
||||
const connectionID = actor.connect('notify::mapped', () => {
|
||||
extensionThis._setupEffect(actor, true);
|
||||
actor.disconnect(connectionID);
|
||||
});
|
||||
}
|
||||
};
|
||||
// We override WindowManager._shouldAnimateActor() also for another purpose: Usually,
|
||||
// it returns false when we are in the overview. This prevents the window animations
|
||||
// there. To enable animations in the overview, we check inside the method whether it
|
||||
// was called by either _mapWindow or _destroyWindow. If so, we return true. Let's see
|
||||
// if this breaks stuff left and right...
|
||||
Main.wm._shouldAnimateActor = function(actor, types) {
|
||||
const stack = (new Error()).stack;
|
||||
const forClosing = stack.includes('_destroyWindow@');
|
||||
const forOpening = stack.includes('_mapWindow@');
|
||||
|
||||
// This is also called in other cases, for instance when minimizing windows. We are
|
||||
// only interested in window opening and window closing for now.
|
||||
if (forClosing || forOpening) {
|
||||
|
||||
// If there is an applicable effect profile, we intercept the ease() method to
|
||||
// setup our own effect.
|
||||
const chosenEffect = extensionThis._chooseEffect(actor, forOpening);
|
||||
|
||||
if (chosenEffect) {
|
||||
// Store the original ease() method of the actor.
|
||||
const orig = actor.ease;
|
||||
|
||||
// Now intercept the next call to actor.ease().
|
||||
actor.ease = function(...params) {
|
||||
// There is a really weird issue in GNOME Shell 44: A few non-GTK windows are
|
||||
// resized directly after they are mapped on X11. This happens for instance
|
||||
// for keepassxc after it was closed in the maximized state. As the
|
||||
// _mapWindow() method is called asynchronously, the window is not yet visible
|
||||
// when the resize happens. Hence, our ease-override is called for the resize
|
||||
// animation instead of the window-open or window-close animation. This is not
|
||||
// what we want. So we check again whether the ease() call is for the
|
||||
// window-open or window-close animation. If not, we just call the original
|
||||
// ease() method. See also:
|
||||
// https://github.com/Schneegans/Burn-My-Windows/issues/335
|
||||
const stack = (new Error()).stack;
|
||||
const forClosing = stack.includes('_destroyWindow@');
|
||||
const forOpening = stack.includes('_mapWindow@');
|
||||
|
||||
if (forClosing || forOpening) {
|
||||
// Quickly restore the original behavior. Nobody noticed, I guess :D
|
||||
actor.ease = orig;
|
||||
|
||||
// And then create the effect!
|
||||
extensionThis._setupEffect(actor, forOpening, chosenEffect.effect,
|
||||
chosenEffect.profile);
|
||||
} else {
|
||||
orig.apply(this, params);
|
||||
}
|
||||
};
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return extensionThis._origShouldAnimateActor.apply(this, [actor, types]);
|
||||
};
|
||||
|
||||
// Make sure to remove any effects if requested by the window manager.
|
||||
this._killEffectsSignal =
|
||||
global.window_manager.connect('kill-window-effects', (wm, actor) => {
|
||||
const shader = actor.get_effect('burn-my-windows-effect');
|
||||
if (shader) {
|
||||
shader.endAnimation();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
// --------------------------------------------- fix window animations in the overview
|
||||
|
||||
// Some of the effects require that the window's actor is enlarged to provide a bigger
|
||||
// canvas to draw the effects. Outside the overview we can simply increase the scale
|
||||
// of the actor. However, if we are in the overview, we have to enlarge the clone of
|
||||
// the window as well.
|
||||
Workspace.prototype._addWindowClone = function(...params) {
|
||||
const result = extensionThis._origAddWindowClone.apply(this, params);
|
||||
const clone = extensionThis._origAddWindowClone.apply(this, params);
|
||||
const container = clone.window_container;
|
||||
const realWindow = params[0].get_compositor_private();
|
||||
|
||||
// The parameters of this method changed a bit through the versions...
|
||||
let realWindow, clone;
|
||||
// Store the overview clone as temporary members of the real window actor. When we
|
||||
// set up the effect, we will check for the existence of these and enlarge the clone
|
||||
// as needed.
|
||||
realWindow._bmwOverviewClone = clone;
|
||||
realWindow._bmwOverviewCloneContainer = container;
|
||||
|
||||
if (utils.shellVersionIs(3, 36)) {
|
||||
clone = result[0];
|
||||
realWindow = clone.realWindow;
|
||||
} else if (utils.shellVersionIs(3, 38)) {
|
||||
clone = result._windowContainer;
|
||||
realWindow = params[0].get_compositor_private();
|
||||
} else {
|
||||
clone = result.window_container;
|
||||
realWindow = params[0].get_compositor_private();
|
||||
}
|
||||
// Remove the temporary members again once the clone is deleted.
|
||||
container.connect('destroy', () => {
|
||||
delete realWindow._bmwOverviewClone;
|
||||
delete realWindow._bmwOverviewCloneContainer;
|
||||
});
|
||||
|
||||
// Syncing the real window's scale with the scale of its clone only works on GNOME
|
||||
// Shell 3.38+. So effects cannot scale windows in the overview of GNOME 3.36...
|
||||
if (utils.shellVersionIsAtLeast(3, 38)) {
|
||||
const xID = realWindow.connect('notify::scale-x', () => {
|
||||
if (realWindow.scale_x > 0 && clone.allocation.get_size()[0] > 0) {
|
||||
clone.scale_x = realWindow.scale_x;
|
||||
}
|
||||
});
|
||||
|
||||
const yID = realWindow.connect('notify::scale-y', () => {
|
||||
if (realWindow.scale_y > 0 && clone.allocation.get_size()[1] > 0) {
|
||||
clone.scale_y = realWindow.scale_y;
|
||||
}
|
||||
});
|
||||
|
||||
clone.connect('destroy', () => {
|
||||
realWindow.disconnect(xID);
|
||||
realWindow.disconnect(yID);
|
||||
});
|
||||
}
|
||||
|
||||
// This is actually needed for the window-close animation on GNOME Shell 3.36.
|
||||
// On GNOME 3.36, the window clone's 'destroy' handler only calls _removeWindowClone
|
||||
// but not _doRemoveWindow. The latter is required to trigger the repositioning of
|
||||
// the overview window layout. Therefore we call this method in addition.
|
||||
// https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/gnome-3-36/js/ui/workspace.js#L1877
|
||||
// https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/workspace.js#L1405
|
||||
if (utils.shellVersionIs(3, 36)) {
|
||||
clone.connect('destroy', () => this._doRemoveWindow(clone.metaWindow));
|
||||
}
|
||||
|
||||
return result;
|
||||
return clone;
|
||||
};
|
||||
|
||||
// Usually, windows are faded in after the overview is completely hidden. We enable
|
||||
// window-open animations by not waiting for this.
|
||||
WindowManager.prototype._waitForOverviewToHide = async function() {
|
||||
Main.wm._waitForOverviewToHide = async function() {
|
||||
return Promise.resolve();
|
||||
};
|
||||
|
||||
// Here comes the ULTRA-HACK: The method below is called (amongst others) by the
|
||||
// _destroyWindow and _mapWindow methods of the WindowManager. Usually, it returns
|
||||
// false when we are in the overview. This prevents the window animations. As we
|
||||
// cannot monkey-patch the _destroyWindow or _mapWindow methods themselves, we check
|
||||
// inside the method below whether it was called by either of those. If so, we return
|
||||
// true. Let's see if this breaks stuff left and right...
|
||||
// https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/windowManager.js#L1124
|
||||
WindowManager.prototype._shouldAnimateActor = function(...params) {
|
||||
const caller = (new Error()).stack.split('\n')[1];
|
||||
if (caller.includes('_destroyWindow@') || caller.includes('_mapWindow@')) {
|
||||
return true;
|
||||
}
|
||||
return extensionThis._origShouldAnimateActor.apply(this, params);
|
||||
};
|
||||
|
||||
|
||||
// ----------------------------------------------- patching the window-close animation
|
||||
|
||||
// The signal handler below and the following patch are all which is required outside
|
||||
// of the overview. All other hacks further below are just required to defer the
|
||||
// window-hiding in the overview until the effect is finished.
|
||||
|
||||
// The close animation is set up in WindowManager's _destroyWindow:
|
||||
// https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/windowManager.js#L1541
|
||||
// As we cannot monkey-patch the _destroyWindow itself, we connect to the 'destroy'
|
||||
// signal of the window manager and tweak the animation to our needs.
|
||||
this._destroyConnection = global.window_manager.connect('destroy', (wm, actor) => {
|
||||
this._setupEffect(actor, false);
|
||||
});
|
||||
|
||||
// Once the window-close animation is is finished, the window manager's
|
||||
// _destroyWindowDone is called. We use this to free the effect so that it can be
|
||||
// re-used in future.
|
||||
// https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/windowManager.js#L1541
|
||||
WindowManager.prototype._destroyWindowDone = function(shellwm, actor) {
|
||||
if (this._destroying.has(actor)) {
|
||||
const shader = actor.get_effect('burn-my-windows-effect');
|
||||
if (shader) {
|
||||
actor.remove_effect(shader);
|
||||
shader.endAnimation();
|
||||
shader.returnToFactory();
|
||||
}
|
||||
}
|
||||
|
||||
// Call the original method.
|
||||
extensionThis._origDestroyWindowDone.apply(this, [shellwm, actor]);
|
||||
};
|
||||
|
||||
// These three method overrides are mega-hacky! Usually, windows are not faded when
|
||||
// closed from the overview (why?). With these overrides we make sure that they are
|
||||
// actually faded out. To do this, _windowRemoved and _doRemoveWindow now check
|
||||
// whether there is a transition ongoing (via extensionThis._shouldDestroy). If that's
|
||||
// the case, these methods do nothing. Are the actors removed in the end? I hope so.
|
||||
// The _destroyWindow of the WindowManager sets the transitions up and should take
|
||||
// care of removing the actors at the end of the transitions.
|
||||
// https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/workspace.js#L1301
|
||||
// the case, these methods do nothing.
|
||||
// https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/workspace.js#L1258
|
||||
Workspace.prototype._windowRemoved = function(ws, metaWin) {
|
||||
if (extensionThis._shouldDestroy(this, metaWin)) {
|
||||
extensionThis._origWindowRemoved.apply(this, [ws, metaWin]);
|
||||
}
|
||||
};
|
||||
|
||||
// https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/workspace.js#L1180
|
||||
// https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/workspace.js#L1137
|
||||
Workspace.prototype._doRemoveWindow = function(metaWin) {
|
||||
if (extensionThis._shouldDestroy(this, metaWin)) {
|
||||
extensionThis._origDoRemoveWindow.apply(this, [metaWin]);
|
||||
@@ -279,53 +284,50 @@ class Extension {
|
||||
};
|
||||
|
||||
// With the code below, we hide the window-overlay (icon, label, close button) in the
|
||||
// overview once the close-animation is running. As the WindowPreview class is only
|
||||
// available on GNOME 3.38 and beyond, we cannot hide the overlay on GNOME 3.36.
|
||||
if (WindowPreview) {
|
||||
// overview once the close-animation is running.
|
||||
|
||||
// We will monkey-patch these methods.
|
||||
this._origDeleteAll = WindowPreview.prototype._deleteAll;
|
||||
this._origRestack = WindowPreview.prototype._restack;
|
||||
this._origInit = WindowPreview.prototype._init;
|
||||
// We will monkey-patch these methods.
|
||||
this._origDeleteAll = WindowPreview.prototype._deleteAll;
|
||||
this._origRestack = WindowPreview.prototype._restack;
|
||||
this._origInit = WindowPreview.prototype._init;
|
||||
|
||||
// Whenever a WindowPreview is created, we connect to the referenced Meta.Window's
|
||||
// 'unmanaged' signal to hide the overlay.
|
||||
WindowPreview.prototype._init = function(...params) {
|
||||
extensionThis._origInit.apply(this, params);
|
||||
// Whenever a WindowPreview is created, we connect to the referenced Meta.Window's
|
||||
// 'unmanaged' signal to hide the overlay.
|
||||
WindowPreview.prototype._init = function(...params) {
|
||||
extensionThis._origInit.apply(this, params);
|
||||
|
||||
// Hide the window's icon, name, and close button.
|
||||
const connectionID = this.metaWindow.connect('unmanaged', () => {
|
||||
if (this.window_container) {
|
||||
this.overlayEnabled = false;
|
||||
this._icon.visible = false;
|
||||
}
|
||||
});
|
||||
|
||||
// Make sure to not call the callback above if the Meta.Window was not unmanaged
|
||||
// before leaving the overview.
|
||||
this.connect('destroy', () => {
|
||||
this.metaWindow.disconnect(connectionID);
|
||||
});
|
||||
};
|
||||
|
||||
// The _deleteAll is called when the user clicks the X in the overview. We should
|
||||
// not attempt to close windows twice. Due to the animation in the overview, the
|
||||
// close button can be clicked twice which normally would lead to a crash.
|
||||
WindowPreview.prototype._deleteAll = function() {
|
||||
if (!this._closeRequested) {
|
||||
extensionThis._origDeleteAll.apply(this);
|
||||
// Hide the window's icon, name, and close button.
|
||||
const connectionID = this.metaWindow.connect('unmanaged', () => {
|
||||
if (this.window_container) {
|
||||
this.overlayEnabled = false;
|
||||
this._icon.visible = false;
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
// This is required, else WindowPreview's _restack() which is called by the
|
||||
// "this.overlayEnabled = false", sometimes tries to access an already delete
|
||||
// WindowPreview.
|
||||
WindowPreview.prototype._restack = function() {
|
||||
if (!this._closeRequested) {
|
||||
extensionThis._origRestack.apply(this);
|
||||
}
|
||||
};
|
||||
}
|
||||
// Make sure to not call the callback above if the Meta.Window was not unmanaged
|
||||
// before leaving the overview.
|
||||
this.connect('destroy', () => {
|
||||
this.metaWindow.disconnect(connectionID);
|
||||
});
|
||||
};
|
||||
|
||||
// The _deleteAll is called when the user clicks the X in the overview. We should
|
||||
// not attempt to close windows twice. Due to the animation in the overview, the
|
||||
// close button can be clicked twice which normally would lead to a crash.
|
||||
WindowPreview.prototype._deleteAll = function() {
|
||||
if (!this._closeRequested) {
|
||||
extensionThis._origDeleteAll.apply(this);
|
||||
}
|
||||
};
|
||||
|
||||
// This is required, else WindowPreview's _restack() which is called by the
|
||||
// "this.overlayEnabled = false", sometimes tries to access an already delete
|
||||
// WindowPreview.
|
||||
WindowPreview.prototype._restack = function() {
|
||||
if (!this._closeRequested) {
|
||||
extensionThis._origRestack.apply(this);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
// This function could be called after the extension is uninstalled, disabled in GNOME
|
||||
@@ -338,116 +340,207 @@ class Extension {
|
||||
// Unregister our resources.
|
||||
Gio.resources_unregister(this._resources);
|
||||
|
||||
// Disable the window-picking D-Bus API.
|
||||
this._windowPicker.unexport();
|
||||
|
||||
global.window_manager.disconnect(this._killEffectsSignal);
|
||||
|
||||
// Restore the original window-open and window-close animations.
|
||||
global.window_manager.disconnect(this._destroyConnection);
|
||||
global.display.disconnect(this._windowCreatedConnection);
|
||||
Workspace.prototype._addWindowClone = this._origAddWindowClone;
|
||||
Workspace.prototype._windowRemoved = this._origWindowRemoved;
|
||||
Workspace.prototype._doRemoveWindow = this._origDoRemoveWindow;
|
||||
Main.wm._shouldAnimateActor = this._origShouldAnimateActor;
|
||||
Main.wm._waitForOverviewToHide = this._origWaitForOverviewToHide;
|
||||
|
||||
Workspace.prototype._addWindowClone = this._origAddWindowClone;
|
||||
Workspace.prototype._windowRemoved = this._origWindowRemoved;
|
||||
Workspace.prototype._doRemoveWindow = this._origDoRemoveWindow;
|
||||
WindowManager.prototype._shouldAnimateActor = this._origShouldAnimateActor;
|
||||
WindowManager.prototype._waitForOverviewToHide = this._origWaitForOverviewToHide;
|
||||
WindowManager.prototype._destroyWindowDone = this._origDestroyWindowDone;
|
||||
|
||||
imports.ui.windowManager.DESTROY_WINDOW_ANIMATION_TIME = this._origWindowTime;
|
||||
imports.ui.windowManager.DIALOG_DESTROY_WINDOW_ANIMATION_TIME = this._origDialogTime;
|
||||
|
||||
if (WindowPreview) {
|
||||
WindowPreview.prototype._deleteAll = this._origDeleteAll;
|
||||
WindowPreview.prototype._restack = this._origRestack;
|
||||
WindowPreview.prototype._init = this._origInit;
|
||||
}
|
||||
WindowPreview.prototype._deleteAll = this._origDeleteAll;
|
||||
WindowPreview.prototype._restack = this._origRestack;
|
||||
WindowPreview.prototype._init = this._origInit;
|
||||
|
||||
this._settings = null;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------- private stuff
|
||||
|
||||
// This method adds one of the configured effects to the given actor. If forOpening is
|
||||
// set to true, a effect from the enabled window-open animations is chosen, else an
|
||||
// enabled window-close animation is used. This will also tweak the transitions of the
|
||||
// given actor (e.g. scale it up if required).
|
||||
_setupEffect(actor, forOpening) {
|
||||
// This loads all effect profiles and assigns a priority to each profile. Whenever a
|
||||
// window is opened or closed, the matching effect profile with the highest priority
|
||||
// will be chosen.
|
||||
// This method is called whenever the currently edited profile in the/ preferences
|
||||
// dialog changes. This is most likely a bit too often, but it will also happen whenever
|
||||
// a new profile is created and whenever an old profile is deleted.
|
||||
_loadProfiles() {
|
||||
|
||||
// Only add effects to normal windows and dialog windows.
|
||||
// Get all currently available profiles.
|
||||
const profileManager = new ProfileManager(this.metadata);
|
||||
this._profiles = profileManager.getProfiles();
|
||||
|
||||
// Whenever the properties of a profile is changed in the settings, we may have to
|
||||
// resort all profiles according to their priority.
|
||||
const updatePriority = (p) => {
|
||||
p.priority = profileManager.getProfilePriority(p.settings);
|
||||
this._profiles.sort((a, b) => b.priority - a.priority);
|
||||
};
|
||||
|
||||
// For each profile, assign an initial priority and update the priority whenever a
|
||||
// related setting changes.
|
||||
this._profiles.forEach(p => {
|
||||
p.priority = profileManager.getProfilePriority(p.settings);
|
||||
p.settings.connect('changed::profile-app', () => updatePriority(p));
|
||||
p.settings.connect('changed::profile-animation-type', () => updatePriority(p));
|
||||
p.settings.connect('changed::profile-window-type', () => updatePriority(p));
|
||||
p.settings.connect('changed::profile-color-scheme', () => updatePriority(p));
|
||||
p.settings.connect('changed::profile-power-mode', () => updatePriority(p));
|
||||
p.settings.connect('changed::profile-power-profile', () => updatePriority(p));
|
||||
p.settings.connect('changed::profile-high-priority', () => updatePriority(p));
|
||||
});
|
||||
|
||||
// Sort all profiles initially according to their initial priority.
|
||||
this._profiles.sort((a, b) => b.priority - a.priority);
|
||||
}
|
||||
|
||||
// This method selects an effect profile matching the current circumstances. Then a
|
||||
// random effect from its enabled effects will be selected. It returns null if no
|
||||
// profile is currently applicable.
|
||||
_chooseEffect(actor, forOpening) {
|
||||
|
||||
// For now, we only add effects to normal windows and dialog windows.
|
||||
const isNormalWindow = actor.meta_window.window_type == Meta.WindowType.NORMAL;
|
||||
const isDialogWindow =
|
||||
actor.meta_window.window_type == Meta.WindowType.MODAL_DIALOG ||
|
||||
actor.meta_window.window_type == Meta.WindowType.DIALOG;
|
||||
|
||||
if (!isNormalWindow && !isDialogWindow) {
|
||||
return;
|
||||
return null;
|
||||
}
|
||||
|
||||
// We do nothing if a dialog got closed and we should not burn them.
|
||||
const shouldDestroyDialogs = this._settings.get_boolean('destroy-dialogs');
|
||||
// ----------------------------------------------- choose a profile and then an effect
|
||||
|
||||
// If an effect is to be previewed, we have to affect dialogs es well. This is
|
||||
// because the preview window is a dialog window...
|
||||
const action = forOpening ? 'open' : 'close';
|
||||
const previewNick = this._settings.get_string(action + '-preview-effect');
|
||||
// Usually, we use the effect profile with the highest priority which matches the
|
||||
// current circumstances. From this profile, we choose a random effect. However, if an
|
||||
// effect is to be previewed, we choose the currently edited profile regardless of the
|
||||
// circumstances.
|
||||
let profile = null;
|
||||
let effect = null;
|
||||
|
||||
if (isDialogWindow && !shouldDestroyDialogs && previewNick == '') {
|
||||
this._fixAnimationTimes(isDialogWindow, forOpening, null);
|
||||
return;
|
||||
// Hence, we first check if an effect is to be previewed.
|
||||
const previewNick = this._settings.get_string('preview-effect');
|
||||
|
||||
if (previewNick != '') {
|
||||
const activeProfile = this._settings.get_string('active-profile');
|
||||
effect =
|
||||
this._ALL_EFFECTS.find(effect => effect.constructor.getNick() == previewNick);
|
||||
profile = this._profiles.find(p => p.path == activeProfile);
|
||||
|
||||
// Only preview the effect until the preview window is closed.
|
||||
if (!profile || !forOpening) {
|
||||
this._settings.set_string('preview-effect', '');
|
||||
}
|
||||
}
|
||||
// If no effect is previewed, we use the effect profile with the highest priority
|
||||
// which matches the current circumstances. From this profile, we choose a random
|
||||
// effect.
|
||||
else {
|
||||
|
||||
// These numbers match the indices in the Gtk.StringLists defined in the UI files
|
||||
// (e.g. resources/ui/adw/prefs.ui).
|
||||
const animationType = forOpening ? 1 : 2;
|
||||
const windowType = isNormalWindow ? 1 : 2;
|
||||
const powerMode = this._upowerProxy.OnBattery ? 1 : 2;
|
||||
|
||||
// Get the first profile whose constraints match the circumstances. The list is
|
||||
// sorted by priority, so we are good to take the first match.
|
||||
profile = this._profiles.find(p => {
|
||||
const profileApp = p.settings.get_string('profile-app');
|
||||
const profileAnimationType = p.settings.get_int('profile-animation-type');
|
||||
const profileWindowType = p.settings.get_int('profile-window-type');
|
||||
const profilePowerMode = p.settings.get_int('profile-power-mode');
|
||||
const profileColorScheme = p.settings.get_int('profile-color-scheme');
|
||||
const profilePowerProfile = p.settings.get_int('profile-power-profile');
|
||||
|
||||
// First we check whether the animation type, window type, and power mode are
|
||||
// matching.
|
||||
let matches =
|
||||
(profileAnimationType == 0 || profileAnimationType == animationType) &&
|
||||
(profileWindowType == 0 || profileWindowType == windowType) &&
|
||||
(profilePowerMode == 0 || profilePowerMode == powerMode);
|
||||
|
||||
// If that was the case, we also check the application name.
|
||||
if (matches && profileApp != '') {
|
||||
const wmClass = actor.meta_window.get_wm_class();
|
||||
|
||||
if (wmClass) {
|
||||
const app = wmClass.toLowerCase();
|
||||
|
||||
// Split app names at |, remove any whitespace, and transform to lower case.
|
||||
const profileApps =
|
||||
profileApp.split('|').map(item => item.trim().toLowerCase());
|
||||
matches = profileApps.includes(app);
|
||||
} else {
|
||||
matches = false;
|
||||
}
|
||||
}
|
||||
|
||||
// If the profile is still matching, we also check the color scheme.
|
||||
if (matches && profileColorScheme != 0) {
|
||||
const colorScheme = this._shellSettings.get_string('color-scheme');
|
||||
matches &= (profileColorScheme == 1 && colorScheme == 'default') ||
|
||||
(profileColorScheme == 2 && colorScheme == 'prefer-dark');
|
||||
}
|
||||
|
||||
// Finally, we may also have to check the power profile.
|
||||
if (matches && profilePowerProfile != 0 && this._powerProfilesProxy) {
|
||||
const powerProfile = this._powerProfilesProxy.ActiveProfile;
|
||||
|
||||
// To understand the numbers, please refer to the indices in the Gtk.StringList
|
||||
// of the profile-power-profile Adw.ComboRow in resources/ui/adw/prefs.ui.
|
||||
if (powerProfile == 'power-saver') {
|
||||
matches &= profilePowerProfile == 1 || profilePowerProfile == 4;
|
||||
} else if (powerProfile == 'balanced') {
|
||||
matches &= profilePowerProfile == 2 || profilePowerProfile == 4 ||
|
||||
profilePowerProfile == 5;
|
||||
} else {
|
||||
matches &= profilePowerProfile == 3 || profilePowerProfile == 5;
|
||||
}
|
||||
}
|
||||
|
||||
return matches;
|
||||
});
|
||||
|
||||
// If we found a matching profile, choose a random effect from it.
|
||||
if (profile) {
|
||||
|
||||
// Create a list of all enabled effects of this profile.
|
||||
const enabled = this._ALL_EFFECTS.filter(effect => {
|
||||
return profile.settings.get_boolean(
|
||||
`${effect.constructor.getNick()}-enable-effect`);
|
||||
});
|
||||
|
||||
// And then choose a random effect.
|
||||
if (enabled.length > 0) {
|
||||
effect = enabled[Math.floor(Math.random() * enabled.length)];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// We may have to do nothing if running on battery power or if in power-save mode.
|
||||
let disableOnBattery =
|
||||
this._settings.get_boolean('disable-on-battery') && this._upowerProxy.OnBattery;
|
||||
let disableOnPowerSave = this._settings.get_boolean('disable-on-power-save') &&
|
||||
this._powerProfilesProxy && this._powerProfilesProxy.ActiveProfile == 'power-saver';
|
||||
|
||||
if ((disableOnBattery || disableOnPowerSave) && previewNick == '') {
|
||||
this._fixAnimationTimes(isDialogWindow, forOpening, null);
|
||||
return;
|
||||
// If nothing was enabled, we have to do nothing :)
|
||||
if (!effect || !profile) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return {effect: effect, profile: profile};
|
||||
}
|
||||
|
||||
// This method adds the given effect using the settings from the given profile to the
|
||||
// given actor.
|
||||
_setupEffect(actor, forOpening, effect, profile) {
|
||||
|
||||
// There is the weird case where an animation is already ongoing. This happens when a
|
||||
// window is closed which has been created before the session was started (e.g. when
|
||||
// GNOME Shell has been restarted in the meantime).
|
||||
const oldShader = actor.get_effect('burn-my-windows-effect');
|
||||
if (oldShader) {
|
||||
actor.remove_effect(oldShader);
|
||||
oldShader.endAnimation();
|
||||
oldShader.returnToFactory();
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------ choose an effect
|
||||
|
||||
// Now we chose a random effect from all enabled effects.
|
||||
let effect = null;
|
||||
|
||||
// First we check if an effect is to be previewed.
|
||||
if (previewNick != '') {
|
||||
effect = this._ALL_EFFECTS.find(effect => effect.getNick() == previewNick);
|
||||
|
||||
// Only preview the effect once.
|
||||
this._settings.set_string(action + '-preview-effect', '');
|
||||
|
||||
}
|
||||
// Else we choose a random effect from all enabled effects.
|
||||
else {
|
||||
|
||||
// Therefore, we first create a list of all currently enabled effects.
|
||||
const enabled = this._ALL_EFFECTS.filter(effect => {
|
||||
return this._settings.get_boolean(`${effect.getNick()}-${action}-effect`);
|
||||
});
|
||||
|
||||
// And then choose a random effect.
|
||||
if (enabled.length > 0) {
|
||||
effect = enabled[Math.floor(Math.random() * enabled.length)];
|
||||
}
|
||||
}
|
||||
|
||||
// If nothing was enabled, we have to do nothing :)
|
||||
if (effect == null) {
|
||||
this._fixAnimationTimes(isDialogWindow, forOpening, null);
|
||||
return;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------- tweak actor transitions
|
||||
|
||||
// If we are currently performing integration test, all animations are set to a fixed
|
||||
// duration and show a fixed frame from the middle of the animation.
|
||||
const testMode = this._settings.get_boolean('test-mode');
|
||||
@@ -456,123 +549,68 @@ class Extension {
|
||||
// windows are faded in / out scaled up / down slightly by GNOME Shell. Here, we tweak
|
||||
// the transitions so that nothing changes. The window stays opaque and is scaled to
|
||||
// actorScale.
|
||||
const actorScale = effect.getActorScale(this._settings, forOpening, actor);
|
||||
const actorScale =
|
||||
effect.constructor.getActorScale(profile.settings, forOpening, actor);
|
||||
|
||||
// To make things deterministic during testing, we set the effect duration to 5
|
||||
// seconds.
|
||||
const duration =
|
||||
testMode ? 5000 : this._settings.get_int(effect.getNick() + '-animation-time');
|
||||
|
||||
// All animations are relative to the window's center.
|
||||
// All scaling is relative to the window's center.
|
||||
actor.set_pivot_point(0.5, 0.5);
|
||||
actor.opacity = 255;
|
||||
actor.scale_x = actorScale.x;
|
||||
actor.scale_y = actorScale.y;
|
||||
|
||||
|
||||
// We tweak the opacity and scale of the actor. If there is no ongoing transition for
|
||||
// a property, a new one is set up.
|
||||
const config = {'opacity': 255, 'scale-x': actorScale.x, 'scale-y': actorScale.y};
|
||||
|
||||
for (const property in config) {
|
||||
let transition = actor.get_transition(property);
|
||||
|
||||
// If there is currently no ongoing transition, we create a new one. Clutter does
|
||||
// not like to create transitions with the same start and end value - however, we
|
||||
// need at least one transition for our progress value in the shader. So we trick
|
||||
// Clutter by creating an arbitrary transition first and then modifying the start
|
||||
// and end values according to our config object.
|
||||
if (!transition) {
|
||||
actor.set_property(property, 0);
|
||||
actor.save_easing_state();
|
||||
actor.set_easing_duration(1000);
|
||||
actor.set_property(property, 1);
|
||||
actor.restore_easing_state();
|
||||
|
||||
// Now there should be a transition!
|
||||
transition = actor.get_transition(property);
|
||||
}
|
||||
|
||||
// Tweak the transition according to the config object. For some reason, there are
|
||||
// rare cases, where no transition is set up. This happens from time to time...
|
||||
if (transition) {
|
||||
transition.set_duration(duration);
|
||||
transition.set_to(config[property]);
|
||||
transition.set_from(config[property]);
|
||||
transition.set_progress_mode(Clutter.AnimationMode.LINEAR);
|
||||
}
|
||||
// If we are in the overview, we have to enlarge the window's clone as well. We also
|
||||
// disable the clone's overlay (e.g. its icon, name, and close button) during the
|
||||
// animation.
|
||||
if (actor._bmwOverviewClone) {
|
||||
actor._bmwOverviewClone.overlayEnabled = false;
|
||||
actor._bmwOverviewCloneContainer.set_pivot_point(0.5, 0.5);
|
||||
actor._bmwOverviewCloneContainer.scale_x = actorScale.x;
|
||||
actor._bmwOverviewCloneContainer.scale_y = actorScale.y;
|
||||
}
|
||||
|
||||
// Once the transitions are finished, we restore the original actor size.
|
||||
if (forOpening) {
|
||||
const connectionID = actor.connect('transitions-completed', () => {
|
||||
actor.scale_x = 1.0;
|
||||
actor.scale_y = 1.0;
|
||||
actor.disconnect(connectionID);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
// -------------------------------------------------------------------- add the shader
|
||||
|
||||
// Now add a cool shader to our window actor!
|
||||
const shader = effect.shaderFactory.getShader();
|
||||
|
||||
// There should always be an opacity transition going on...
|
||||
const transition = actor.get_transition('opacity');
|
||||
|
||||
if (!transition) {
|
||||
this._fixAnimationTimes(isDialogWindow, forOpening, null);
|
||||
utils.debug('Cannot setup shader without opacity transition.')
|
||||
return;
|
||||
}
|
||||
|
||||
// Assign the effect to the window actor!
|
||||
actor.add_effect_with_name('burn-my-windows-effect', shader);
|
||||
|
||||
// Set one-time uniforms.
|
||||
shader.beginAnimation(this._settings, forOpening, duration * 0.001, actor);
|
||||
// At the end of the animation, we restore the scale of the overview clone (if any)
|
||||
// and call the methods which would have been called by the original ease() calls at
|
||||
// the end of the standard fade-in animation.
|
||||
const endID = shader.connect('end-animation', () => {
|
||||
shader.disconnect(endID);
|
||||
|
||||
// Set other uniforms each frame.
|
||||
transition.connect('new-frame', (t) => {
|
||||
if (testMode) {
|
||||
shader.updateAnimation(0.5);
|
||||
if (actor._bmwOverviewClone) {
|
||||
actor._bmwOverviewClone.overlayEnabled = true;
|
||||
actor._bmwOverviewCloneContainer.scale_x = 1.0;
|
||||
actor._bmwOverviewCloneContainer.scale_y = 1.0;
|
||||
}
|
||||
|
||||
// Restore the original scale of the window actor.
|
||||
actor.scale_x = 1.0;
|
||||
actor.scale_y = 1.0;
|
||||
|
||||
// Remove the shader and mark it being re-usable for future animations.
|
||||
actor.remove_effect(shader);
|
||||
shader.returnToFactory();
|
||||
|
||||
// Finally, once the animation is done or interrupted, we call the methods which
|
||||
// should have been called by the original ease() methods.
|
||||
// https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/windowManager.js#L1487
|
||||
// https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/windowManager.js#L1558.
|
||||
if (forOpening) {
|
||||
Main.wm._mapWindowDone(global.window_manager, actor);
|
||||
} else {
|
||||
shader.updateAnimation(t.get_progress());
|
||||
Main.wm._destroyWindowDone(global.window_manager, actor);
|
||||
}
|
||||
});
|
||||
|
||||
// Remove the effect if the animation finished or was interrupted.
|
||||
if (forOpening) {
|
||||
transition.connect('stopped', () => {
|
||||
const oldShader = actor.get_effect('burn-my-windows-effect');
|
||||
if (oldShader) {
|
||||
actor.remove_effect(oldShader);
|
||||
oldShader.endAnimation();
|
||||
oldShader.returnToFactory();
|
||||
}
|
||||
});
|
||||
}
|
||||
// To make things deterministic during testing, we set the effect duration to 8
|
||||
// seconds.
|
||||
const duration = testMode ?
|
||||
8000 :
|
||||
profile.settings.get_int(effect.constructor.getNick() + '-animation-time');
|
||||
|
||||
// Finally, ensure that all animation times are set properly so that other extensions
|
||||
// may guess how long it will take until windows are gone :)
|
||||
this._fixAnimationTimes(isDialogWindow, forOpening, duration);
|
||||
}
|
||||
|
||||
// The code below is not necessary for Burn-My-Windows to function. However, there
|
||||
// are some extensions such as "Show Application View When Workspace Empty"
|
||||
// https://extensions.gnome.org/extension/2036/show-application-view-when-workspace-empty/
|
||||
// which do something *after* a window was closed. As the window-close animation
|
||||
// duration depends on the used effect, this may vary each time a window is
|
||||
// closed. We set the currently used time here, so that others can get an idea how
|
||||
// long this will take...
|
||||
_fixAnimationTimes(isDialogWindow, forOpening, duration) {
|
||||
if (!forOpening) {
|
||||
if (isDialogWindow) {
|
||||
imports.ui.windowManager.DIALOG_DESTROY_WINDOW_ANIMATION_TIME =
|
||||
duration != null ? duration : this._origDialogTime;
|
||||
} else {
|
||||
imports.ui.windowManager.DESTROY_WINDOW_ANIMATION_TIME =
|
||||
duration != null ? duration : this._origWindowTime;
|
||||
}
|
||||
}
|
||||
// Finally start the animation!
|
||||
shader.beginAnimation(profile.settings, forOpening, testMode, duration, actor);
|
||||
}
|
||||
|
||||
// This is required to enable window-close animations in the overview. See the comment
|
||||
@@ -583,18 +621,9 @@ class Extension {
|
||||
return true;
|
||||
}
|
||||
|
||||
// This was called "realWindow" in GNOME 3.36.
|
||||
const propertyName = utils.shellVersionIs(3, 36) ? 'realWindow' : '_windowActor';
|
||||
const actor = workspace._windows[index][propertyName];
|
||||
if (!actor.get_transition('scale-y')) {
|
||||
return true;
|
||||
}
|
||||
const actor = workspace._windows[index]._windowActor;
|
||||
const shader = actor.get_effect('burn-my-windows-effect');
|
||||
|
||||
return false;
|
||||
return shader == null;
|
||||
}
|
||||
}
|
||||
|
||||
// This function is called once when the extension is loaded, not enabled.
|
||||
function init() {
|
||||
return new Extension();
|
||||
}
|
||||
|
||||
@@ -38,14 +38,24 @@ for file in ../po/*.po; do
|
||||
msgfmt "$file" -o "$BUILD_DIR/locale/$lang/LC_MESSAGES/burn-my-windows.mo"
|
||||
done
|
||||
|
||||
# This method is called one for each effect. The parameters are as follows:
|
||||
# This method is called once for each effect. The parameters are as follows:
|
||||
# $1: The nick of the effect (e.g. "energize-a")
|
||||
# $2: The name of the effect (e.g. "Energize A")
|
||||
# $3: A short description of the effect (e.g. "Beam your windows away")
|
||||
generate() {
|
||||
generate_impl "$1" "$2" "$3" "kwin5"
|
||||
generate_impl "$1" "$2" "$3" "kwin6"
|
||||
}
|
||||
|
||||
# This method is called twice for each effect. The parameters are as follows:
|
||||
# $1: The nick of the effect (e.g. "energize-a")
|
||||
# $2: The name of the effect (e.g. "Energize A")
|
||||
# $3: A short description of the effect (e.g. "Beam your windows away")
|
||||
# #4: Either "kwin5" or "kwin6".
|
||||
generate_impl() {
|
||||
|
||||
# We use the nick for the effect's directory name by replacing dashes with underscoares.
|
||||
DIR_NAME="kwin4_effect_$(echo "$1" | tr '-' '_')"
|
||||
DIR_NAME="${4}_effect_$(echo "$1" | tr '-' '_')"
|
||||
|
||||
# We transform the nick to CamelCase for the JavaScript class name.
|
||||
EFFECT_CLASS="BurnMyWindows$(sed -r 's/(^|-)(\w)/\U\2/g' <<<"$1")Effect"
|
||||
@@ -106,6 +116,11 @@ generate() {
|
||||
{
|
||||
echo "#version 140"
|
||||
echo "#define KWIN"
|
||||
|
||||
if [ "$4" == "kwin6" ]; then
|
||||
echo "#define PLASMA6"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "// This file is automatically generated during the build process."
|
||||
echo ""
|
||||
@@ -115,6 +130,11 @@ generate() {
|
||||
|
||||
{
|
||||
echo "#define KWIN_LEGACY"
|
||||
|
||||
if [ "$4" == "kwin6" ]; then
|
||||
echo "#define PLASMA6"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "// This file is automatically generated during the build process."
|
||||
echo ""
|
||||
@@ -130,7 +150,7 @@ generate() {
|
||||
|
||||
# Create an archive which can be uploaded to https://store.kde.org.
|
||||
# shellcheck disable=SC2046
|
||||
tar -cjf "$DIR_NAME.tar.gz" -C "$BUILD_DIR/$DIR_NAME" $(ls "$BUILD_DIR/$DIR_NAME")
|
||||
tar -czf "$DIR_NAME.tar.gz" -C "$BUILD_DIR/$DIR_NAME" $(ls "$BUILD_DIR/$DIR_NAME")
|
||||
}
|
||||
|
||||
# Now run the above method for all supported effects.
|
||||
@@ -138,6 +158,7 @@ generate "doom" "Doom [Burn-My-Windows]" "Melt your windows"
|
||||
generate "energize-a" "Energize A [Burn-My-Windows]" "Beam your windows away"
|
||||
generate "energize-b" "Energize B [Burn-My-Windows]" "Using different transporter technology results in an alternative visual effect"
|
||||
generate "fire" "Fire [Burn-My-Windows]" "The classic effect inspired by Compiz"
|
||||
generate "focus" "Focus [Burn-My-Windows]" "Focus dude, focus!"
|
||||
generate "glide" "Glide [Burn-My-Windows]" "Fade the window to transparency with subtle 3D effects"
|
||||
generate "glitch" "Glitch [Burn-My-Windows]" "This effect applies some intentional graphics issues to your windows"
|
||||
generate "hexagon" "Hexagon [Burn-My-Windows]" "With glowing lines and hexagon-shaped tiles, this effect looks very sci-fi"
|
||||
@@ -152,4 +173,6 @@ generate "wisps" "Wisps [Burn-My-Windows]" "Let your windows be carr
|
||||
|
||||
# Finally, create an archive for the effects.
|
||||
# shellcheck disable=SC2046
|
||||
tar -cjf "burn_my_windows_kwin4.tar.gz" -C "$BUILD_DIR" $(ls "$BUILD_DIR")
|
||||
cd "$BUILD_DIR"
|
||||
tar -czf "../burn_my_windows_kwin5.tar.gz" kwin5*
|
||||
tar -czf "../burn_my_windows_kwin6.tar.gz" kwin6*
|
||||
|
||||
@@ -0,0 +1,93 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!--
|
||||
SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de>
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
-->
|
||||
|
||||
<ui version="4.0">
|
||||
<class>BMWConfigForm</class>
|
||||
<widget class="QWidget" name="BMWConfigForm">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>562</width>
|
||||
<height>365</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Animation Time [ms]</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="text">
|
||||
<string>Quality</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QSpinBox" name="kcfg_Duration">
|
||||
<property name="minimum">
|
||||
<number>100</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>9999</number>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<number>100</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>Amount</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QDoubleSpinBox" name="kcfg_Quality">
|
||||
<property name="decimals">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<double>1.000000000000000</double>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<double>10.000000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QDoubleSpinBox" name="kcfg_Amount">
|
||||
<property name="decimals">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<double>0.000000000000000</double>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<double>100.000000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources />
|
||||
<connections />
|
||||
</ui>
|
||||
@@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!--
|
||||
SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de>
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
-->
|
||||
|
||||
<kcfg xmlns="http://www.kde.org/standards/kcfg/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0 http://www.kde.org/standards/kcfg/1.0/kcfg.xsd">
|
||||
<kcfgfile name="" />
|
||||
<group name="">
|
||||
<entry name="Duration" type="UInt">
|
||||
<default>500</default>
|
||||
</entry>
|
||||
<entry name="Amount" type="UInt">
|
||||
<default>50</default>
|
||||
</entry>
|
||||
<entry name="Quality" type="UInt">
|
||||
<default>3</default>
|
||||
</entry>
|
||||
</group>
|
||||
</kcfg>
|
||||
@@ -0,0 +1,9 @@
|
||||
// SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de>
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
// This part is automatically included in the effect's source during the build process.
|
||||
// The code below is called whenever the user changes something in the configuration of
|
||||
// the effect.
|
||||
|
||||
effect.setUniform(this.shader, 'uBlurAmount', effect.readConfig('Amount', 1.0));
|
||||
effect.setUniform(this.shader, 'uBlurQuality', effect.readConfig('Quality', 1.0));
|
||||
@@ -9,7 +9,18 @@ const blacklist = [
|
||||
"ksmserver-logout-greeter ksmserver-logout-greeter",
|
||||
|
||||
// KDE Plasma splash screen has to be animated only by the login effect.
|
||||
"ksplashqml ksplashqml"
|
||||
"ksplashqml ksplashqml",
|
||||
|
||||
// All the tooltips of IntelliJ IDEs use the same window class as their main window.
|
||||
// This results in many awkward animations, so we have to blacklist them all.
|
||||
// See https://github.com/Schneegans/Burn-My-Windows/issues/284 for details.
|
||||
"jetbrains-studio jetbrains-studio", "jetbrains-aqua jetbrains-aqua",
|
||||
"jetbrains-clion jetbrains-clion", "jetbrains-datagrip jetbrains-datagrip",
|
||||
"jetbrains-dataspell jetbrains-dataspell", "jetbrains-goland jetbrains-goland",
|
||||
"jetbrains-idea jetbrains-idea", "jetbrains-idea-ce jetbrains-idea-ce",
|
||||
"jetbrains-phpstorm jetbrains-phpstorm", "jetbrains-pycharm jetbrains-pycharm",
|
||||
"jetbrains-pycharm-ce jetbrains-pycharm-ce", "jetbrains-rider jetbrains-rider",
|
||||
"jetbrains-rubymine jetbrains-rubymine", "jetbrains-webstorm jetbrains-webstorm"
|
||||
];
|
||||
|
||||
class %EFFECT_CLASS% {
|
||||
@@ -69,6 +80,12 @@ class %EFFECT_CLASS% {
|
||||
return window.hasDecoration;
|
||||
}
|
||||
|
||||
// This is primarily to avoid animating the AltTab popup.
|
||||
// See https://github.com/Schneegans/Burn-My-Windows/issues/384 for details.
|
||||
if (!window.hasDecoration && window.onAllDesktops) {
|
||||
return false
|
||||
}
|
||||
|
||||
if (blacklist.indexOf(window.windowClass) != -1) {
|
||||
return false;
|
||||
}
|
||||
@@ -122,6 +139,7 @@ class %EFFECT_CLASS% {
|
||||
this.setupForcedRoles(window);
|
||||
|
||||
effect.setUniform(this.shader, 'uForOpening', 1.0);
|
||||
effect.setUniform(this.shader, 'uIsFullscreen', window.fullScreen ? 1.0 : 0.0);
|
||||
|
||||
%ON_ANIMATION_BEGIN%
|
||||
|
||||
@@ -161,6 +179,7 @@ class %EFFECT_CLASS% {
|
||||
this.setupForcedRoles(window);
|
||||
|
||||
effect.setUniform(this.shader, 'uForOpening', 0.0);
|
||||
effect.setUniform(this.shader, 'uIsFullscreen', window.fullScreen ? 1.0 : 0.0);
|
||||
|
||||
%ON_ANIMATION_BEGIN%
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
"KPackageStructure": "KWin/Effect",
|
||||
"KPlugin": {
|
||||
"Name": "%NAME%",
|
||||
"Description": "%DESCRIPTION%",
|
||||
@@ -12,13 +13,14 @@
|
||||
"Id": "%DIR_NAME%",
|
||||
"License": "GPLv3",
|
||||
"Version": "1.0",
|
||||
"EnabledByDefault": "false",
|
||||
"EnabledByDefault": false,
|
||||
"Website": "https://github.com/Schneegans/Burn-My-Windows/",
|
||||
"BugReportUrl": "https://github.com/Schneegans/Burn-My-Windows/issues",
|
||||
"ServiceTypes": [
|
||||
"KWin/Effect"
|
||||
]
|
||||
},
|
||||
"X-KDE-ConfigModule": "kcm_kwin4_genericscripted",
|
||||
"X-KDE-Ordering": "60",
|
||||
"X-KDE-PluginKeyword": "%DIR_NAME%",
|
||||
"X-KWin-Config-TranslationDomain": "burn-my-windows",
|
||||
|
||||
@@ -71,7 +71,17 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="KColorButton" name="kcfg_Color"></widget>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="KColorButton" name="kcfg_Color1"></widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="KColorButton" name="kcfg_Color2"></widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="KColorButton" name="kcfg_Color3"></widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
|
||||
@@ -5,8 +5,7 @@ SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de>
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
-->
|
||||
|
||||
<kcfg xmlns="http://www.kde.org/standards/kcfg/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0
|
||||
http://www.kde.org/standards/kcfg/1.0/kcfg.xsd">
|
||||
<kcfg xmlns="http://www.kde.org/standards/kcfg/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0 http://www.kde.org/standards/kcfg/1.0/kcfg.xsd">
|
||||
<kcfgfile name="" />
|
||||
<group name="">
|
||||
<entry name="Duration" type="UInt">
|
||||
@@ -15,8 +14,14 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
||||
<entry name="Scale" type="Double">
|
||||
<default>1</default>
|
||||
</entry>
|
||||
<entry name="Color" type="Color">
|
||||
<entry name="Color1" type="Color">
|
||||
<default>#ff64c8</default>
|
||||
</entry>
|
||||
<entry name="Color2" type="Color">
|
||||
<default>#6464ff</default>
|
||||
</entry>
|
||||
<entry name="Color3" type="Color">
|
||||
<default>#64c8ff</default>
|
||||
</entry>
|
||||
</group>
|
||||
</kcfg>
|
||||
@@ -7,4 +7,6 @@
|
||||
|
||||
effect.setUniform(this.shader, 'uDuration', this.duration * 0.001);
|
||||
effect.setUniform(this.shader, 'uScale', effect.readConfig('Scale', 1.0));
|
||||
effect.setUniform(this.shader, 'uColor', this.readRGBConfig('Color'));
|
||||
effect.setUniform(this.shader, 'uColor1', this.readRGBConfig('Color1'));
|
||||
effect.setUniform(this.shader, 'uColor2', this.readRGBConfig('Color2'));
|
||||
effect.setUniform(this.shader, 'uColor3', this.readRGBConfig('Color3'));
|
||||
|
||||
@@ -2,16 +2,18 @@
|
||||
"uuid": "burn-my-windows@schneegans.github.com",
|
||||
"description": "Disintegrate your windows with style.",
|
||||
"name": "Burn My Windows",
|
||||
"donations": {
|
||||
"kofi": "schneegans",
|
||||
"github": "schneegans",
|
||||
"paypal": "simonschneegans"
|
||||
},
|
||||
"gettext-domain": "burn-my-windows",
|
||||
"settings-schema": "org.gnome.shell.extensions.burn-my-windows",
|
||||
"shell-version": [
|
||||
"3.36",
|
||||
"3.38",
|
||||
"40",
|
||||
"41",
|
||||
"42",
|
||||
"43"
|
||||
"45",
|
||||
"46",
|
||||
"47"
|
||||
],
|
||||
"url": "https://github.com/Schneegans/Burn-My-Windows",
|
||||
"version": 26
|
||||
"version": 44
|
||||
}
|
||||
@@ -0,0 +1,623 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR Simon Schneegans
|
||||
# This file is distributed under the same license as the burn-my-windows package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: burn-my-windows\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-11-03 09:13+0100\n"
|
||||
"PO-Revision-Date: 2024-09-09 18:09+0000\n"
|
||||
"Last-Translator: symegac <97731141+symegac@users.noreply.github.com>\n"
|
||||
"Language-Team: Danish <https://hosted.weblate.org/projects/burn-my-windows/"
|
||||
"core/da/>\n"
|
||||
"Language: da\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.8-dev\n"
|
||||
|
||||
#: src/effects/Apparition.js:80
|
||||
#, fuzzy
|
||||
msgid "Apparition"
|
||||
msgstr "Åndesyn"
|
||||
|
||||
#: src/effects/BrokenGlass.js:138
|
||||
msgid "Broken Glass"
|
||||
msgstr "Knust glas"
|
||||
|
||||
#: src/effects/Doom.js:87
|
||||
msgid "Doom"
|
||||
msgstr "Doom"
|
||||
|
||||
#: src/effects/EnergizeA.js:74
|
||||
msgid "Energize A"
|
||||
msgstr "Energi A"
|
||||
|
||||
#: src/effects/EnergizeB.js:75
|
||||
msgid "Energize B"
|
||||
msgstr "Energi B"
|
||||
|
||||
#: src/effects/Fire.js:96
|
||||
msgid "Fire"
|
||||
msgstr "Ild"
|
||||
|
||||
#: src/effects/Fire.js:150
|
||||
msgid "Default Fire"
|
||||
msgstr "Standardild"
|
||||
|
||||
#: src/effects/Fire.js:160
|
||||
msgid "Hell Fire"
|
||||
msgstr "Helvedesild"
|
||||
|
||||
#: src/effects/Fire.js:170
|
||||
msgid "Dark and Smutty"
|
||||
msgstr "Mørk og smudsig"
|
||||
|
||||
#: src/effects/Fire.js:180
|
||||
msgid "Cold Breeze"
|
||||
msgstr "Kold brise"
|
||||
|
||||
#: src/effects/Fire.js:190
|
||||
msgid "Santa is Coming"
|
||||
msgstr "Julemanden kommer"
|
||||
|
||||
#: src/effects/Focus.js:76
|
||||
msgid "Focus"
|
||||
msgstr ""
|
||||
|
||||
#: src/effects/Glide.js:78
|
||||
msgid "Glide"
|
||||
msgstr "Glid"
|
||||
|
||||
#: src/effects/Glitch.js:80
|
||||
msgid "Glitch"
|
||||
msgstr "Skærmfejl"
|
||||
|
||||
#: src/effects/Hexagon.js:83
|
||||
msgid "Hexagon"
|
||||
msgstr "Sekskant"
|
||||
|
||||
#: src/effects/Incinerate.js:126
|
||||
msgid "Incinerate"
|
||||
msgstr "Afbrænd"
|
||||
|
||||
#: src/effects/Matrix.js:109
|
||||
msgid "Matrix"
|
||||
msgstr "Matrix"
|
||||
|
||||
#: src/effects/PaintBrush.js:101
|
||||
msgid "Paint Brush"
|
||||
msgstr "Pensel"
|
||||
|
||||
#: src/effects/Pixelate.js:74
|
||||
msgid "Pixelate"
|
||||
msgstr "Pixeler"
|
||||
|
||||
#: src/effects/PixelWheel.js:74
|
||||
msgid "Pixel Wheel"
|
||||
msgstr "Pixelhjul"
|
||||
|
||||
#: src/effects/PixelWipe.js:100
|
||||
msgid "Pixel Wipe"
|
||||
msgstr "Pixelbølge"
|
||||
|
||||
#: src/effects/Portal.js:82
|
||||
msgid "Portal"
|
||||
msgstr "Portal"
|
||||
|
||||
#: src/effects/SnapOfDisintegration.js:110
|
||||
msgid "Snap of Disintegration"
|
||||
msgstr "Opløsningsknips"
|
||||
|
||||
#: src/effects/TRexAttack.js:109
|
||||
msgid "T-Rex Attack"
|
||||
msgstr "Tyrannosaurus-angreb"
|
||||
|
||||
#: src/effects/TVEffect.js:73
|
||||
msgid "TV Effect"
|
||||
msgstr "TV-effekt"
|
||||
|
||||
#: src/effects/TVGlitch.js:81
|
||||
msgid "TV Glitch"
|
||||
msgstr "TV-skærmfejl"
|
||||
|
||||
#: src/effects/Wisps.js:85
|
||||
msgid "Wisps"
|
||||
msgstr "Feer"
|
||||
|
||||
#: prefs.js:236
|
||||
msgid "Preview this effect"
|
||||
msgstr "Forhåndsvis denne effekt"
|
||||
|
||||
#: prefs.js:313
|
||||
msgid "Burn-My-Windows has been updated!"
|
||||
msgstr "Burn-My-Windows er blevet opdateret!"
|
||||
|
||||
#: prefs.js:314 resources/ui/common/menus.ui:17
|
||||
msgid "View Changelog"
|
||||
msgstr "Vis ændringslog"
|
||||
|
||||
#: prefs.js:496
|
||||
msgid "Delete this Profile?"
|
||||
msgstr "Slet denne profil?"
|
||||
|
||||
#: prefs.js:497
|
||||
msgid ""
|
||||
"The current effect profile with all its effect settings will be permanently "
|
||||
"lost."
|
||||
msgstr ""
|
||||
"Den aktuelle effektprofil med alle dens effektsindstillinger vil gå "
|
||||
"permanent tabt."
|
||||
|
||||
#: prefs.js:500
|
||||
msgid "Cancel"
|
||||
msgstr "Annuller"
|
||||
|
||||
#: prefs.js:505
|
||||
msgid "Delete"
|
||||
msgstr "Slet"
|
||||
|
||||
#: prefs.js:737 resources/ui/adw/prefs.ui:103
|
||||
msgid "Opening Windows"
|
||||
msgstr "Åbning af vinduer"
|
||||
|
||||
#: prefs.js:738 resources/ui/adw/prefs.ui:104
|
||||
msgid "Closing Windows"
|
||||
msgstr "Lukning af vinduer"
|
||||
|
||||
#: prefs.js:739 resources/ui/adw/prefs.ui:118
|
||||
msgid "Normal Windows"
|
||||
msgstr "Normale vinduer"
|
||||
|
||||
#: prefs.js:740 resources/ui/adw/prefs.ui:119
|
||||
msgid "Dialog Windows"
|
||||
msgstr "Dialogvinduer"
|
||||
|
||||
#: prefs.js:741 resources/ui/adw/prefs.ui:133
|
||||
msgid "Default Color Scheme"
|
||||
msgstr "Standardfarveskema"
|
||||
|
||||
#: prefs.js:742 resources/ui/adw/prefs.ui:134
|
||||
msgid "Dark Color Scheme"
|
||||
msgstr "Mørkt farveskema"
|
||||
|
||||
#: prefs.js:743 resources/ui/adw/prefs.ui:148
|
||||
msgid "On Battery"
|
||||
msgstr "På batteri"
|
||||
|
||||
#: prefs.js:744 resources/ui/adw/prefs.ui:149
|
||||
msgid "Plugged In"
|
||||
msgstr "Tilsluttet"
|
||||
|
||||
#: prefs.js:745 resources/ui/adw/prefs.ui:163
|
||||
msgid "Power-Saver Mode"
|
||||
msgstr "Energisparetilstand"
|
||||
|
||||
#: prefs.js:746 resources/ui/adw/prefs.ui:164
|
||||
msgid "Balanced Mode"
|
||||
msgstr "Balanceret tilstand"
|
||||
|
||||
#: prefs.js:747 resources/ui/adw/prefs.ui:165
|
||||
msgid "Performance Mode"
|
||||
msgstr "Ydelsestilstand"
|
||||
|
||||
#: prefs.js:748 resources/ui/adw/prefs.ui:166
|
||||
msgid "Power Saver or Balanced"
|
||||
msgstr "Energisparetilstand eller balanceret"
|
||||
|
||||
#: prefs.js:749 resources/ui/adw/prefs.ui:167
|
||||
msgid "Balanced or Performance"
|
||||
msgstr "Balanceret eller ydelsestilstand"
|
||||
|
||||
#: prefs.js:754 resources/ui/adw/prefs.ui:183
|
||||
msgid "High Priority"
|
||||
msgstr "Høj prioritet"
|
||||
|
||||
#: prefs.js:760
|
||||
msgid "Standard Profile"
|
||||
msgstr "Standardprofil"
|
||||
|
||||
#. Translators: %s will be replaced by the effect's name.
|
||||
#: prefs.js:840
|
||||
#, javascript-format
|
||||
msgid "Preview for %s"
|
||||
msgstr "Forhåndsvisning af %s"
|
||||
|
||||
#: prefs.js:859
|
||||
msgid "Close this Window to Preview the Effect!"
|
||||
msgstr "Luk dette vindue for at forhåndsvise effekten!"
|
||||
|
||||
#: resources/ui/common/menus.ui:13
|
||||
msgid "Visit Homepage"
|
||||
msgstr "Besøg hjemmesiden"
|
||||
|
||||
#: resources/ui/common/menus.ui:21
|
||||
msgid "View Matching Wallpapers"
|
||||
msgstr "Vis passende baggrundsbilleder"
|
||||
|
||||
#: resources/ui/common/menus.ui:25
|
||||
msgid "View Donors Hall-of-Fame"
|
||||
msgstr ""
|
||||
|
||||
#: resources/ui/common/menus.ui:31
|
||||
msgid "Donate"
|
||||
msgstr "Doner"
|
||||
|
||||
#: resources/ui/common/menus.ui:50
|
||||
msgid "Report a Bug"
|
||||
msgstr "Rapportér en fejl"
|
||||
|
||||
#: resources/ui/common/menus.ui:54
|
||||
msgid "Create an Effect"
|
||||
msgstr "Opret en effekt"
|
||||
|
||||
#: resources/ui/common/menus.ui:58
|
||||
msgid "Translate"
|
||||
msgstr "Oversæt"
|
||||
|
||||
#: resources/ui/common/menus.ui:64
|
||||
msgid "Open Effect-Profile Directory"
|
||||
msgstr "Åbn effektprofil-filkatalog"
|
||||
|
||||
#: resources/ui/common/menus.ui:70
|
||||
msgid "About Burn-My-Windows"
|
||||
msgstr "Om Burn-My-Windows"
|
||||
|
||||
#: resources/ui/common/menus.ui:81
|
||||
msgid "Add New Profile..."
|
||||
msgstr "Tilføj ny profil..."
|
||||
|
||||
#: resources/ui/adw/broken-glass.ui:15 resources/ui/adw/tv-glitch.ui:14
|
||||
#: resources/ui/adw/glitch.ui:14 resources/ui/adw/matrix.ui:14
|
||||
#: resources/ui/adw/doom.ui:14 resources/ui/adw/paint-brush.ui:14
|
||||
#: resources/ui/adw/trex.ui:14 resources/ui/adw/wisps.ui:14
|
||||
#: resources/ui/adw/energize-b.ui:15 resources/ui/adw/pixel-wheel.ui:14
|
||||
#: resources/ui/adw/glide.ui:14 resources/ui/adw/apparition.ui:15
|
||||
#: resources/ui/adw/portal.ui:14 resources/ui/adw/incinerate.ui:14
|
||||
#: resources/ui/adw/hexagon.ui:14 resources/ui/adw/fire.ui:30
|
||||
#: resources/ui/adw/pixel-wipe.ui:14 resources/ui/adw/snap.ui:14
|
||||
#: resources/ui/adw/focus.ui:35 resources/ui/adw/energize-a.ui:14
|
||||
#: resources/ui/adw/pixelate.ui:14 resources/ui/adw/tv.ui:14
|
||||
msgid "Animation Time [ms]"
|
||||
msgstr "Animationstid [ms]"
|
||||
|
||||
#: resources/ui/adw/broken-glass.ui:37 resources/ui/adw/broken-glass.ui:70
|
||||
#: resources/ui/adw/broken-glass.ui:103 resources/ui/adw/broken-glass.ui:136
|
||||
#: resources/ui/adw/broken-glass.ui:159 resources/ui/adw/tv-glitch.ui:36
|
||||
#: resources/ui/adw/tv-glitch.ui:69 resources/ui/adw/tv-glitch.ui:102
|
||||
#: resources/ui/adw/tv-glitch.ui:135 resources/ui/adw/tv-glitch.ui:160
|
||||
#: resources/ui/adw/glitch.ui:36 resources/ui/adw/glitch.ui:69
|
||||
#: resources/ui/adw/glitch.ui:102 resources/ui/adw/glitch.ui:135
|
||||
#: resources/ui/adw/glitch.ui:160 resources/ui/adw/matrix.ui:36
|
||||
#: resources/ui/adw/matrix.ui:69 resources/ui/adw/matrix.ui:102
|
||||
#: resources/ui/adw/matrix.ui:135 resources/ui/adw/matrix.ui:160
|
||||
#: resources/ui/adw/matrix.ui:185 resources/ui/adw/doom.ui:36
|
||||
#: resources/ui/adw/doom.ui:69 resources/ui/adw/doom.ui:102
|
||||
#: resources/ui/adw/doom.ui:135 resources/ui/adw/paint-brush.ui:36
|
||||
#: resources/ui/adw/paint-brush.ui:69 resources/ui/adw/trex.ui:36
|
||||
#: resources/ui/adw/trex.ui:69 resources/ui/adw/trex.ui:102
|
||||
#: resources/ui/adw/trex.ui:135 resources/ui/adw/trex.ui:160
|
||||
#: resources/ui/adw/wisps.ui:36 resources/ui/adw/wisps.ui:69
|
||||
#: resources/ui/adw/wisps.ui:110 resources/ui/adw/energize-b.ui:37
|
||||
#: resources/ui/adw/energize-b.ui:70 resources/ui/adw/energize-b.ui:95
|
||||
#: resources/ui/adw/pixel-wheel.ui:36 resources/ui/adw/pixel-wheel.ui:69
|
||||
#: resources/ui/adw/pixel-wheel.ui:102 resources/ui/adw/glide.ui:36
|
||||
#: resources/ui/adw/glide.ui:69 resources/ui/adw/glide.ui:102
|
||||
#: resources/ui/adw/glide.ui:135 resources/ui/adw/glide.ui:168
|
||||
#: resources/ui/adw/apparition.ui:37 resources/ui/adw/apparition.ui:70
|
||||
#: resources/ui/adw/apparition.ui:103 resources/ui/adw/apparition.ui:136
|
||||
#: resources/ui/adw/apparition.ui:169 resources/ui/adw/portal.ui:36
|
||||
#: resources/ui/adw/portal.ui:69 resources/ui/adw/portal.ui:102
|
||||
#: resources/ui/adw/portal.ui:135 resources/ui/adw/portal.ui:160
|
||||
#: resources/ui/adw/incinerate.ui:36 resources/ui/adw/incinerate.ui:69
|
||||
#: resources/ui/adw/incinerate.ui:102 resources/ui/adw/incinerate.ui:125
|
||||
#: resources/ui/adw/incinerate.ui:150 resources/ui/adw/hexagon.ui:36
|
||||
#: resources/ui/adw/hexagon.ui:69 resources/ui/adw/hexagon.ui:102
|
||||
#: resources/ui/adw/hexagon.ui:127 resources/ui/adw/hexagon.ui:152
|
||||
#: resources/ui/adw/hexagon.ui:175 resources/ui/adw/fire.ui:52
|
||||
#: resources/ui/adw/fire.ui:85 resources/ui/adw/fire.ui:118
|
||||
#: resources/ui/adw/fire.ui:141 resources/ui/adw/fire.ui:199
|
||||
#: resources/ui/adw/pixel-wipe.ui:36 resources/ui/adw/pixel-wipe.ui:69
|
||||
#: resources/ui/adw/snap.ui:36 resources/ui/adw/snap.ui:69
|
||||
#: resources/ui/adw/snap.ui:94 resources/ui/adw/focus.ui:50
|
||||
#: resources/ui/adw/focus.ui:76 resources/ui/adw/focus.ui:102
|
||||
#: resources/ui/adw/energize-a.ui:36 resources/ui/adw/energize-a.ui:69
|
||||
#: resources/ui/adw/energize-a.ui:94 resources/ui/adw/pixelate.ui:36
|
||||
#: resources/ui/adw/pixelate.ui:69 resources/ui/adw/pixelate.ui:102
|
||||
#: resources/ui/adw/tv.ui:36 resources/ui/adw/tv.ui:61
|
||||
msgid "Reset to Default Value"
|
||||
msgstr "Nulstil til standardværdi"
|
||||
|
||||
#: resources/ui/adw/broken-glass.ui:48 resources/ui/adw/tv-glitch.ui:47
|
||||
#: resources/ui/adw/glitch.ui:47 resources/ui/adw/matrix.ui:47
|
||||
#: resources/ui/adw/wisps.ui:47 resources/ui/adw/energize-b.ui:48
|
||||
#: resources/ui/adw/glide.ui:47 resources/ui/adw/incinerate.ui:47
|
||||
#: resources/ui/adw/hexagon.ui:47 resources/ui/adw/fire.ui:63
|
||||
#: resources/ui/adw/snap.ui:47 resources/ui/adw/energize-a.ui:47
|
||||
msgid "Scale"
|
||||
msgstr "Størrelse"
|
||||
|
||||
#: resources/ui/adw/broken-glass.ui:81
|
||||
msgid "Gravity"
|
||||
msgstr "Tyngdekraft"
|
||||
|
||||
#: resources/ui/adw/broken-glass.ui:114
|
||||
msgid "Blow Force"
|
||||
msgstr "Slagkraft"
|
||||
|
||||
#: resources/ui/adw/broken-glass.ui:147
|
||||
msgid "Shatter From Pointer Location"
|
||||
msgstr "Knus fra musepositionen"
|
||||
|
||||
#: resources/ui/adw/broken-glass.ui:148
|
||||
msgid ""
|
||||
"The shards will fly away from where your mouse pointer was when closing the "
|
||||
"window."
|
||||
msgstr ""
|
||||
"Glasskårene flyver væk fra der, hvor din musemarkør befandt sig ved lukning "
|
||||
"af vinduet."
|
||||
|
||||
#: resources/ui/adw/tv-glitch.ui:80 resources/ui/adw/glitch.ui:80
|
||||
msgid "Strength"
|
||||
msgstr "Styrke"
|
||||
|
||||
#: resources/ui/adw/tv-glitch.ui:113 resources/ui/adw/glitch.ui:113
|
||||
#: resources/ui/adw/fire.ui:96
|
||||
msgid "Speed"
|
||||
msgstr "Hastighed"
|
||||
|
||||
#: resources/ui/adw/tv-glitch.ui:146 resources/ui/adw/glitch.ui:146
|
||||
#: resources/ui/adw/wisps.ui:80 resources/ui/adw/energize-b.ui:81
|
||||
#: resources/ui/adw/portal.ui:146 resources/ui/adw/incinerate.ui:136
|
||||
#: resources/ui/adw/snap.ui:80 resources/ui/adw/energize-a.ui:80
|
||||
#: resources/ui/adw/tv.ui:47
|
||||
msgid "Color"
|
||||
msgstr "Farve"
|
||||
|
||||
#: resources/ui/adw/matrix.ui:80 resources/ui/adw/apparition.ui:48
|
||||
msgid "Randomness"
|
||||
msgstr "Tilfældighed"
|
||||
|
||||
#: resources/ui/adw/matrix.ui:113
|
||||
#, fuzzy
|
||||
msgid "Vertical Overshooting"
|
||||
msgstr "Vertikal overskridelse"
|
||||
|
||||
#: resources/ui/adw/matrix.ui:146
|
||||
msgid "Trail Color"
|
||||
msgstr "Sporets farve"
|
||||
|
||||
#: resources/ui/adw/matrix.ui:171
|
||||
msgid "Tip Color"
|
||||
msgstr "Spidsens farve"
|
||||
|
||||
#: resources/ui/adw/doom.ui:47
|
||||
msgid "Horizontal Scale"
|
||||
msgstr "Vandret skalering"
|
||||
|
||||
#: resources/ui/adw/doom.ui:80
|
||||
msgid "Vertical Scale"
|
||||
msgstr "Lodret skalering"
|
||||
|
||||
#: resources/ui/adw/doom.ui:113 resources/ui/adw/pixel-wheel.ui:80
|
||||
#: resources/ui/adw/pixel-wipe.ui:47 resources/ui/adw/pixelate.ui:80
|
||||
msgid "Pixel Size"
|
||||
msgstr "Pixelstørrelse"
|
||||
|
||||
#: resources/ui/adw/paint-brush.ui:47
|
||||
msgid "Brush Size"
|
||||
msgstr "Penselstørrelse"
|
||||
|
||||
#: resources/ui/adw/trex.ui:47
|
||||
msgid "Claw Scratch Scale"
|
||||
msgstr "Klokradsstørrelse"
|
||||
|
||||
#: resources/ui/adw/trex.ui:80
|
||||
msgid "Claw Scratch Count"
|
||||
msgstr "Klokradsantal"
|
||||
|
||||
#: resources/ui/adw/trex.ui:113
|
||||
msgid "Warp Effect"
|
||||
msgstr "Forvridningseffekt"
|
||||
|
||||
#: resources/ui/adw/trex.ui:146
|
||||
msgid "Flash Color"
|
||||
msgstr "Blitzfarve"
|
||||
|
||||
#: resources/ui/adw/pixel-wheel.ui:47
|
||||
msgid "Spoke Count"
|
||||
msgstr "Antal eger"
|
||||
|
||||
#: resources/ui/adw/glide.ui:80
|
||||
#, fuzzy
|
||||
msgid "Squish"
|
||||
msgstr "Komprimering"
|
||||
|
||||
#: resources/ui/adw/glide.ui:113
|
||||
msgid "Tilt"
|
||||
msgstr "Hældning"
|
||||
|
||||
#: resources/ui/adw/glide.ui:146
|
||||
msgid "Shift"
|
||||
msgstr "Forskydning"
|
||||
|
||||
#: resources/ui/adw/apparition.ui:81
|
||||
msgid "Twirl Intensity"
|
||||
msgstr "Hvirvelintensitet"
|
||||
|
||||
#: resources/ui/adw/apparition.ui:114
|
||||
msgid "Shake Intensity"
|
||||
msgstr "Rystelsesintensitet"
|
||||
|
||||
#: resources/ui/adw/apparition.ui:147
|
||||
msgid "Suction Intensity"
|
||||
msgstr "Sugeintensitet"
|
||||
|
||||
#: resources/ui/adw/portal.ui:47
|
||||
msgid "Rotation Speed"
|
||||
msgstr "Rotationshastighed"
|
||||
|
||||
#: resources/ui/adw/portal.ui:80
|
||||
msgid "Whirling"
|
||||
msgstr "Hvirvling"
|
||||
|
||||
#: resources/ui/adw/portal.ui:113
|
||||
msgid "Details"
|
||||
msgstr "Detaljer"
|
||||
|
||||
#: resources/ui/adw/incinerate.ui:80
|
||||
msgid "Turbulence"
|
||||
msgstr "Turbulens"
|
||||
|
||||
#: resources/ui/adw/incinerate.ui:113
|
||||
msgid "Start at Pointer"
|
||||
msgstr "Start ved musemarkør"
|
||||
|
||||
#: resources/ui/adw/incinerate.ui:114
|
||||
msgid "If disabled, a random location will be chosen."
|
||||
msgstr "Hvis dette er deaktiveret, vælges en tilfældig placering."
|
||||
|
||||
#: resources/ui/adw/hexagon.ui:80
|
||||
msgid "Mesh Line Width"
|
||||
msgstr "Gitterlinjebredde"
|
||||
|
||||
#: resources/ui/adw/hexagon.ui:113
|
||||
msgid "Line Color"
|
||||
msgstr "Linjefarve"
|
||||
|
||||
#: resources/ui/adw/hexagon.ui:138
|
||||
msgid "Glow Color"
|
||||
msgstr "Glødfarve"
|
||||
|
||||
#: resources/ui/adw/hexagon.ui:163
|
||||
msgid "Additive Blending"
|
||||
msgstr "Additiv farveblanding"
|
||||
|
||||
#: resources/ui/adw/hexagon.ui:164
|
||||
msgid "You may want to enable this for dark window themes."
|
||||
msgstr "Du får måske brug for at aktivere dette for mørke vinduestemaer."
|
||||
|
||||
#: resources/ui/adw/fire.ui:14
|
||||
msgid "Presets"
|
||||
msgstr "Forhåndsindstillinger"
|
||||
|
||||
#: resources/ui/adw/fire.ui:19
|
||||
msgid "Choose a Preset"
|
||||
msgstr "Vælg en forhåndsindstilling"
|
||||
|
||||
#: resources/ui/adw/fire.ui:129
|
||||
msgid "3D Noise"
|
||||
msgstr "3D-støj"
|
||||
|
||||
#: resources/ui/adw/fire.ui:130
|
||||
msgid "Creates a more dynamic fire but requires more GPU power."
|
||||
msgstr "Skaber en mere dynamisk ild men kræver mere GPU-kraft."
|
||||
|
||||
#: resources/ui/adw/fire.ui:152
|
||||
msgid "Gradient"
|
||||
msgstr "Farveforløb"
|
||||
|
||||
#: resources/ui/adw/focus.ui:61
|
||||
msgid "Blur Amount"
|
||||
msgstr ""
|
||||
|
||||
#: resources/ui/adw/focus.ui:87
|
||||
msgid "Blur Quality"
|
||||
msgstr ""
|
||||
|
||||
#: resources/ui/adw/prefs.ui:65
|
||||
msgid "Effect Profile Constraints"
|
||||
msgstr "Rediger profilbegrænsninger"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:66
|
||||
msgid "Define when the current effect settings should be used."
|
||||
msgstr "Definer, hvornår de aktuelle effektindstillinger skal bruges."
|
||||
|
||||
#: resources/ui/adw/prefs.ui:70
|
||||
#, fuzzy
|
||||
msgid "Application"
|
||||
msgstr "Applikation"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:81 resources/ui/adw/prefs.ui:102
|
||||
#: resources/ui/adw/prefs.ui:117 resources/ui/adw/prefs.ui:132
|
||||
#: resources/ui/adw/prefs.ui:147 resources/ui/adw/prefs.ui:162
|
||||
#, fuzzy
|
||||
msgid "Any"
|
||||
msgstr "Hvilken som helst"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:98
|
||||
msgid "Animation Type"
|
||||
msgstr "Animationstype"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:113
|
||||
msgid "Window Type"
|
||||
msgstr "Vinduestype"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:128
|
||||
msgid "Color Scheme"
|
||||
msgstr "Farveskema"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:143
|
||||
msgid "Power Mode"
|
||||
msgstr "Strømtilstand"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:158
|
||||
msgid "Power Profile"
|
||||
msgstr "Strømprofil"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:179
|
||||
msgid "Advanced Profile Options"
|
||||
msgstr "Avancerede profilindstillinger"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:184
|
||||
msgid "Use this profile even if there are better matching profiles."
|
||||
msgstr "Benyt denne profil, selv hvis der er mere passende profiler."
|
||||
|
||||
#: resources/ui/adw/prefs.ui:204
|
||||
msgid "Delete this Profile..."
|
||||
msgstr "Slet denne profil..."
|
||||
|
||||
#: resources/ui/adw/prefs.ui:223
|
||||
msgid "Effect Selection"
|
||||
msgstr "Effektudvælgelse"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:224
|
||||
msgid "If multiple are selected, one is chosen randomly."
|
||||
msgstr "Hvis flere er valgt, vælges en tilfældigt."
|
||||
|
||||
#: resources/ui/adw/prefs.ui:235
|
||||
msgid "Search..."
|
||||
msgstr ""
|
||||
|
||||
#: resources/ui/adw/prefs.ui:250
|
||||
msgid "Enable All"
|
||||
msgstr ""
|
||||
|
||||
#: resources/ui/adw/prefs.ui:256
|
||||
msgid "Disable All"
|
||||
msgstr ""
|
||||
|
||||
#: resources/ui/adw/pixelate.ui:47
|
||||
msgid "Noise"
|
||||
msgstr "Støj"
|
||||
|
||||
#~ msgid "Gold Sponsors"
|
||||
#~ msgstr "Guldsponsorer"
|
||||
|
||||
#~ msgid "Silver Sponsors"
|
||||
#~ msgstr "Sølvsponsorer"
|
||||
|
||||
#~ msgid "Bronze Sponsors"
|
||||
#~ msgstr "Bronzesponsorer"
|
||||
|
||||
#~ msgid "Past Sponsors"
|
||||
#~ msgstr "Tidligere sponsorer"
|
||||
|
||||
#~ msgid "All"
|
||||
#~ msgstr "Alle"
|
||||
|
||||
#~ msgid "None"
|
||||
#~ msgstr "Ingen"
|
||||
@@ -0,0 +1,615 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR Simon Schneegans
|
||||
# This file is distributed under the same license as the burn-my-windows package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: burn-my-windows\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-11-03 09:13+0100\n"
|
||||
"PO-Revision-Date: 2024-05-08 03:07+0000\n"
|
||||
"Last-Translator: Scrambled777 <weblate.scrambled777@simplelogin.com>\n"
|
||||
"Language-Team: Hindi <https://hosted.weblate.org/projects/burn-my-windows/"
|
||||
"core/hi/>\n"
|
||||
"Language: hi\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 5.5.4-rc\n"
|
||||
|
||||
#: src/effects/Apparition.js:80
|
||||
msgid "Apparition"
|
||||
msgstr "प्रेतछाया"
|
||||
|
||||
#: src/effects/BrokenGlass.js:138
|
||||
msgid "Broken Glass"
|
||||
msgstr "टूटा हुआ शीशा"
|
||||
|
||||
#: src/effects/Doom.js:87
|
||||
msgid "Doom"
|
||||
msgstr "कयामत"
|
||||
|
||||
#: src/effects/EnergizeA.js:74
|
||||
msgid "Energize A"
|
||||
msgstr "ऊर्जावान A"
|
||||
|
||||
#: src/effects/EnergizeB.js:75
|
||||
msgid "Energize B"
|
||||
msgstr "ऊर्जावान B"
|
||||
|
||||
#: src/effects/Fire.js:96
|
||||
msgid "Fire"
|
||||
msgstr "आग"
|
||||
|
||||
#: src/effects/Fire.js:150
|
||||
msgid "Default Fire"
|
||||
msgstr "तयशुदा आग"
|
||||
|
||||
#: src/effects/Fire.js:160
|
||||
msgid "Hell Fire"
|
||||
msgstr "नरक की आग"
|
||||
|
||||
#: src/effects/Fire.js:170
|
||||
msgid "Dark and Smutty"
|
||||
msgstr "अँधेरी और मैली"
|
||||
|
||||
#: src/effects/Fire.js:180
|
||||
msgid "Cold Breeze"
|
||||
msgstr "ठंडी हवा"
|
||||
|
||||
#: src/effects/Fire.js:190
|
||||
msgid "Santa is Coming"
|
||||
msgstr "सांता आ रहा है"
|
||||
|
||||
#: src/effects/Focus.js:76
|
||||
msgid "Focus"
|
||||
msgstr ""
|
||||
|
||||
#: src/effects/Glide.js:78
|
||||
msgid "Glide"
|
||||
msgstr "फिसलन"
|
||||
|
||||
#: src/effects/Glitch.js:80
|
||||
msgid "Glitch"
|
||||
msgstr "गड़बड़ी"
|
||||
|
||||
#: src/effects/Hexagon.js:83
|
||||
msgid "Hexagon"
|
||||
msgstr "षटकोण"
|
||||
|
||||
#: src/effects/Incinerate.js:126
|
||||
msgid "Incinerate"
|
||||
msgstr "भस्म"
|
||||
|
||||
#: src/effects/Matrix.js:109
|
||||
msgid "Matrix"
|
||||
msgstr "आव्यूह"
|
||||
|
||||
#: src/effects/PaintBrush.js:101
|
||||
msgid "Paint Brush"
|
||||
msgstr "पेंट ब्रश"
|
||||
|
||||
#: src/effects/Pixelate.js:74
|
||||
msgid "Pixelate"
|
||||
msgstr "पिक्सलेट"
|
||||
|
||||
#: src/effects/PixelWheel.js:74
|
||||
msgid "Pixel Wheel"
|
||||
msgstr "पिक्सल व्हील"
|
||||
|
||||
#: src/effects/PixelWipe.js:100
|
||||
msgid "Pixel Wipe"
|
||||
msgstr "पिक्सल वाइप"
|
||||
|
||||
#: src/effects/Portal.js:82
|
||||
msgid "Portal"
|
||||
msgstr "पोर्टल"
|
||||
|
||||
#: src/effects/SnapOfDisintegration.js:110
|
||||
msgid "Snap of Disintegration"
|
||||
msgstr "विघटन की चुटकी"
|
||||
|
||||
#: src/effects/TRexAttack.js:109
|
||||
msgid "T-Rex Attack"
|
||||
msgstr "T-Rex का हमला"
|
||||
|
||||
#: src/effects/TVEffect.js:73
|
||||
msgid "TV Effect"
|
||||
msgstr "TV प्रभाव"
|
||||
|
||||
#: src/effects/TVGlitch.js:81
|
||||
msgid "TV Glitch"
|
||||
msgstr "TV की गड़बड़ी"
|
||||
|
||||
#: src/effects/Wisps.js:85
|
||||
msgid "Wisps"
|
||||
msgstr "विसप्स"
|
||||
|
||||
#: prefs.js:236
|
||||
msgid "Preview this effect"
|
||||
msgstr "इस प्रभाव का पूर्वावलोकन करें"
|
||||
|
||||
#: prefs.js:313
|
||||
msgid "Burn-My-Windows has been updated!"
|
||||
msgstr "Burn-My-Windows अपडेट कर दिया गया है!"
|
||||
|
||||
#: prefs.js:314 resources/ui/common/menus.ui:17
|
||||
msgid "View Changelog"
|
||||
msgstr "चेंजलॉग देखें"
|
||||
|
||||
#: prefs.js:496
|
||||
msgid "Delete this Profile?"
|
||||
msgstr "यह प्रोफ़ाइल हटाएं?"
|
||||
|
||||
#: prefs.js:497
|
||||
msgid ""
|
||||
"The current effect profile with all its effect settings will be permanently "
|
||||
"lost."
|
||||
msgstr "वर्तमान प्रभाव प्रोफ़ाइल अपनी सभी प्रभाव सेटिंग्स के साथ स्थायी रूप से खो जाएगी।"
|
||||
|
||||
#: prefs.js:500
|
||||
msgid "Cancel"
|
||||
msgstr "रद्द करें"
|
||||
|
||||
#: prefs.js:505
|
||||
msgid "Delete"
|
||||
msgstr "मिटाएं"
|
||||
|
||||
#: prefs.js:737 resources/ui/adw/prefs.ui:103
|
||||
msgid "Opening Windows"
|
||||
msgstr "विंडो खोलते समय"
|
||||
|
||||
#: prefs.js:738 resources/ui/adw/prefs.ui:104
|
||||
msgid "Closing Windows"
|
||||
msgstr "विंडो बंद करते समय"
|
||||
|
||||
#: prefs.js:739 resources/ui/adw/prefs.ui:118
|
||||
msgid "Normal Windows"
|
||||
msgstr "सामान्य विंडो"
|
||||
|
||||
#: prefs.js:740 resources/ui/adw/prefs.ui:119
|
||||
msgid "Dialog Windows"
|
||||
msgstr "संवाद विंडो"
|
||||
|
||||
#: prefs.js:741 resources/ui/adw/prefs.ui:133
|
||||
msgid "Default Color Scheme"
|
||||
msgstr "तयशुदा रंग योजना"
|
||||
|
||||
#: prefs.js:742 resources/ui/adw/prefs.ui:134
|
||||
msgid "Dark Color Scheme"
|
||||
msgstr "गहरी रंग योजना"
|
||||
|
||||
#: prefs.js:743 resources/ui/adw/prefs.ui:148
|
||||
msgid "On Battery"
|
||||
msgstr "बैटरी पर"
|
||||
|
||||
#: prefs.js:744 resources/ui/adw/prefs.ui:149
|
||||
msgid "Plugged In"
|
||||
msgstr "जब प्लग इन हो"
|
||||
|
||||
#: prefs.js:745 resources/ui/adw/prefs.ui:163
|
||||
msgid "Power-Saver Mode"
|
||||
msgstr "पावर-सेवर मोड"
|
||||
|
||||
#: prefs.js:746 resources/ui/adw/prefs.ui:164
|
||||
msgid "Balanced Mode"
|
||||
msgstr "संतुलित मोड"
|
||||
|
||||
#: prefs.js:747 resources/ui/adw/prefs.ui:165
|
||||
msgid "Performance Mode"
|
||||
msgstr "प्रदर्शन मोड"
|
||||
|
||||
#: prefs.js:748 resources/ui/adw/prefs.ui:166
|
||||
msgid "Power Saver or Balanced"
|
||||
msgstr "पावर सेवर या संतुलित"
|
||||
|
||||
#: prefs.js:749 resources/ui/adw/prefs.ui:167
|
||||
msgid "Balanced or Performance"
|
||||
msgstr "संतुलित या प्रदर्शन"
|
||||
|
||||
#: prefs.js:754 resources/ui/adw/prefs.ui:183
|
||||
msgid "High Priority"
|
||||
msgstr "उच्च प्राथमिकता"
|
||||
|
||||
#: prefs.js:760
|
||||
msgid "Standard Profile"
|
||||
msgstr "मानक प्रोफ़ाइल"
|
||||
|
||||
#. Translators: %s will be replaced by the effect's name.
|
||||
#: prefs.js:840
|
||||
#, javascript-format
|
||||
msgid "Preview for %s"
|
||||
msgstr "%s का पूर्वावलोकन"
|
||||
|
||||
#: prefs.js:859
|
||||
msgid "Close this Window to Preview the Effect!"
|
||||
msgstr "प्रभाव का पूर्वावलोकन करने के लिए इस विंडो को बंद करें!"
|
||||
|
||||
#: resources/ui/common/menus.ui:13
|
||||
msgid "Visit Homepage"
|
||||
msgstr "मुखपृष्ठ पर जाएं"
|
||||
|
||||
#: resources/ui/common/menus.ui:21
|
||||
msgid "View Matching Wallpapers"
|
||||
msgstr "मिलते-जुलते वॉलपेपर देखें"
|
||||
|
||||
#: resources/ui/common/menus.ui:25
|
||||
msgid "View Donors Hall-of-Fame"
|
||||
msgstr ""
|
||||
|
||||
#: resources/ui/common/menus.ui:31
|
||||
msgid "Donate"
|
||||
msgstr "दान करें"
|
||||
|
||||
#: resources/ui/common/menus.ui:50
|
||||
msgid "Report a Bug"
|
||||
msgstr "बग रिपोर्ट करें"
|
||||
|
||||
#: resources/ui/common/menus.ui:54
|
||||
msgid "Create an Effect"
|
||||
msgstr "एक प्रभाव पैदा करें"
|
||||
|
||||
#: resources/ui/common/menus.ui:58
|
||||
msgid "Translate"
|
||||
msgstr "अनुवाद"
|
||||
|
||||
#: resources/ui/common/menus.ui:64
|
||||
msgid "Open Effect-Profile Directory"
|
||||
msgstr "इफ़ेक्ट-प्रोफ़ाइल निर्देशिका खोलें"
|
||||
|
||||
#: resources/ui/common/menus.ui:70
|
||||
msgid "About Burn-My-Windows"
|
||||
msgstr "Burn-My-Windows के बारे में"
|
||||
|
||||
#: resources/ui/common/menus.ui:81
|
||||
msgid "Add New Profile..."
|
||||
msgstr "नई प्रोफ़ाइल जोड़ें…"
|
||||
|
||||
#: resources/ui/adw/broken-glass.ui:15 resources/ui/adw/tv-glitch.ui:14
|
||||
#: resources/ui/adw/glitch.ui:14 resources/ui/adw/matrix.ui:14
|
||||
#: resources/ui/adw/doom.ui:14 resources/ui/adw/paint-brush.ui:14
|
||||
#: resources/ui/adw/trex.ui:14 resources/ui/adw/wisps.ui:14
|
||||
#: resources/ui/adw/energize-b.ui:15 resources/ui/adw/pixel-wheel.ui:14
|
||||
#: resources/ui/adw/glide.ui:14 resources/ui/adw/apparition.ui:15
|
||||
#: resources/ui/adw/portal.ui:14 resources/ui/adw/incinerate.ui:14
|
||||
#: resources/ui/adw/hexagon.ui:14 resources/ui/adw/fire.ui:30
|
||||
#: resources/ui/adw/pixel-wipe.ui:14 resources/ui/adw/snap.ui:14
|
||||
#: resources/ui/adw/focus.ui:35 resources/ui/adw/energize-a.ui:14
|
||||
#: resources/ui/adw/pixelate.ui:14 resources/ui/adw/tv.ui:14
|
||||
msgid "Animation Time [ms]"
|
||||
msgstr "एनीमेशन समय [ms]"
|
||||
|
||||
#: resources/ui/adw/broken-glass.ui:37 resources/ui/adw/broken-glass.ui:70
|
||||
#: resources/ui/adw/broken-glass.ui:103 resources/ui/adw/broken-glass.ui:136
|
||||
#: resources/ui/adw/broken-glass.ui:159 resources/ui/adw/tv-glitch.ui:36
|
||||
#: resources/ui/adw/tv-glitch.ui:69 resources/ui/adw/tv-glitch.ui:102
|
||||
#: resources/ui/adw/tv-glitch.ui:135 resources/ui/adw/tv-glitch.ui:160
|
||||
#: resources/ui/adw/glitch.ui:36 resources/ui/adw/glitch.ui:69
|
||||
#: resources/ui/adw/glitch.ui:102 resources/ui/adw/glitch.ui:135
|
||||
#: resources/ui/adw/glitch.ui:160 resources/ui/adw/matrix.ui:36
|
||||
#: resources/ui/adw/matrix.ui:69 resources/ui/adw/matrix.ui:102
|
||||
#: resources/ui/adw/matrix.ui:135 resources/ui/adw/matrix.ui:160
|
||||
#: resources/ui/adw/matrix.ui:185 resources/ui/adw/doom.ui:36
|
||||
#: resources/ui/adw/doom.ui:69 resources/ui/adw/doom.ui:102
|
||||
#: resources/ui/adw/doom.ui:135 resources/ui/adw/paint-brush.ui:36
|
||||
#: resources/ui/adw/paint-brush.ui:69 resources/ui/adw/trex.ui:36
|
||||
#: resources/ui/adw/trex.ui:69 resources/ui/adw/trex.ui:102
|
||||
#: resources/ui/adw/trex.ui:135 resources/ui/adw/trex.ui:160
|
||||
#: resources/ui/adw/wisps.ui:36 resources/ui/adw/wisps.ui:69
|
||||
#: resources/ui/adw/wisps.ui:110 resources/ui/adw/energize-b.ui:37
|
||||
#: resources/ui/adw/energize-b.ui:70 resources/ui/adw/energize-b.ui:95
|
||||
#: resources/ui/adw/pixel-wheel.ui:36 resources/ui/adw/pixel-wheel.ui:69
|
||||
#: resources/ui/adw/pixel-wheel.ui:102 resources/ui/adw/glide.ui:36
|
||||
#: resources/ui/adw/glide.ui:69 resources/ui/adw/glide.ui:102
|
||||
#: resources/ui/adw/glide.ui:135 resources/ui/adw/glide.ui:168
|
||||
#: resources/ui/adw/apparition.ui:37 resources/ui/adw/apparition.ui:70
|
||||
#: resources/ui/adw/apparition.ui:103 resources/ui/adw/apparition.ui:136
|
||||
#: resources/ui/adw/apparition.ui:169 resources/ui/adw/portal.ui:36
|
||||
#: resources/ui/adw/portal.ui:69 resources/ui/adw/portal.ui:102
|
||||
#: resources/ui/adw/portal.ui:135 resources/ui/adw/portal.ui:160
|
||||
#: resources/ui/adw/incinerate.ui:36 resources/ui/adw/incinerate.ui:69
|
||||
#: resources/ui/adw/incinerate.ui:102 resources/ui/adw/incinerate.ui:125
|
||||
#: resources/ui/adw/incinerate.ui:150 resources/ui/adw/hexagon.ui:36
|
||||
#: resources/ui/adw/hexagon.ui:69 resources/ui/adw/hexagon.ui:102
|
||||
#: resources/ui/adw/hexagon.ui:127 resources/ui/adw/hexagon.ui:152
|
||||
#: resources/ui/adw/hexagon.ui:175 resources/ui/adw/fire.ui:52
|
||||
#: resources/ui/adw/fire.ui:85 resources/ui/adw/fire.ui:118
|
||||
#: resources/ui/adw/fire.ui:141 resources/ui/adw/fire.ui:199
|
||||
#: resources/ui/adw/pixel-wipe.ui:36 resources/ui/adw/pixel-wipe.ui:69
|
||||
#: resources/ui/adw/snap.ui:36 resources/ui/adw/snap.ui:69
|
||||
#: resources/ui/adw/snap.ui:94 resources/ui/adw/focus.ui:50
|
||||
#: resources/ui/adw/focus.ui:76 resources/ui/adw/focus.ui:102
|
||||
#: resources/ui/adw/energize-a.ui:36 resources/ui/adw/energize-a.ui:69
|
||||
#: resources/ui/adw/energize-a.ui:94 resources/ui/adw/pixelate.ui:36
|
||||
#: resources/ui/adw/pixelate.ui:69 resources/ui/adw/pixelate.ui:102
|
||||
#: resources/ui/adw/tv.ui:36 resources/ui/adw/tv.ui:61
|
||||
msgid "Reset to Default Value"
|
||||
msgstr "तयशुदा मान पर रीसेट करें"
|
||||
|
||||
#: resources/ui/adw/broken-glass.ui:48 resources/ui/adw/tv-glitch.ui:47
|
||||
#: resources/ui/adw/glitch.ui:47 resources/ui/adw/matrix.ui:47
|
||||
#: resources/ui/adw/wisps.ui:47 resources/ui/adw/energize-b.ui:48
|
||||
#: resources/ui/adw/glide.ui:47 resources/ui/adw/incinerate.ui:47
|
||||
#: resources/ui/adw/hexagon.ui:47 resources/ui/adw/fire.ui:63
|
||||
#: resources/ui/adw/snap.ui:47 resources/ui/adw/energize-a.ui:47
|
||||
msgid "Scale"
|
||||
msgstr "पैमाना"
|
||||
|
||||
#: resources/ui/adw/broken-glass.ui:81
|
||||
msgid "Gravity"
|
||||
msgstr "गुरुत्व"
|
||||
|
||||
#: resources/ui/adw/broken-glass.ui:114
|
||||
msgid "Blow Force"
|
||||
msgstr "प्रहार का बल"
|
||||
|
||||
#: resources/ui/adw/broken-glass.ui:147
|
||||
msgid "Shatter From Pointer Location"
|
||||
msgstr "सूचक स्थान से चकनाचूर"
|
||||
|
||||
#: resources/ui/adw/broken-glass.ui:148
|
||||
msgid ""
|
||||
"The shards will fly away from where your mouse pointer was when closing the "
|
||||
"window."
|
||||
msgstr "खिड़की बंद करते समय आपका माउस सूचक जहां था, वहां से टुकड़े उड़ जाएंगे।"
|
||||
|
||||
#: resources/ui/adw/tv-glitch.ui:80 resources/ui/adw/glitch.ui:80
|
||||
msgid "Strength"
|
||||
msgstr "ताकत"
|
||||
|
||||
#: resources/ui/adw/tv-glitch.ui:113 resources/ui/adw/glitch.ui:113
|
||||
#: resources/ui/adw/fire.ui:96
|
||||
msgid "Speed"
|
||||
msgstr "गति"
|
||||
|
||||
#: resources/ui/adw/tv-glitch.ui:146 resources/ui/adw/glitch.ui:146
|
||||
#: resources/ui/adw/wisps.ui:80 resources/ui/adw/energize-b.ui:81
|
||||
#: resources/ui/adw/portal.ui:146 resources/ui/adw/incinerate.ui:136
|
||||
#: resources/ui/adw/snap.ui:80 resources/ui/adw/energize-a.ui:80
|
||||
#: resources/ui/adw/tv.ui:47
|
||||
msgid "Color"
|
||||
msgstr "रंग"
|
||||
|
||||
#: resources/ui/adw/matrix.ui:80 resources/ui/adw/apparition.ui:48
|
||||
msgid "Randomness"
|
||||
msgstr "बेतरतीबी"
|
||||
|
||||
#: resources/ui/adw/matrix.ui:113
|
||||
msgid "Vertical Overshooting"
|
||||
msgstr "लंबवत ओवरशूटिंग"
|
||||
|
||||
#: resources/ui/adw/matrix.ui:146
|
||||
msgid "Trail Color"
|
||||
msgstr "पगडंडी का रंग"
|
||||
|
||||
#: resources/ui/adw/matrix.ui:171
|
||||
msgid "Tip Color"
|
||||
msgstr "टिप का रंग"
|
||||
|
||||
#: resources/ui/adw/doom.ui:47
|
||||
msgid "Horizontal Scale"
|
||||
msgstr "क्षैतिज पैमाना"
|
||||
|
||||
#: resources/ui/adw/doom.ui:80
|
||||
msgid "Vertical Scale"
|
||||
msgstr "लंबवत पैमाना"
|
||||
|
||||
#: resources/ui/adw/doom.ui:113 resources/ui/adw/pixel-wheel.ui:80
|
||||
#: resources/ui/adw/pixel-wipe.ui:47 resources/ui/adw/pixelate.ui:80
|
||||
msgid "Pixel Size"
|
||||
msgstr "पिक्सल आकार"
|
||||
|
||||
#: resources/ui/adw/paint-brush.ui:47
|
||||
msgid "Brush Size"
|
||||
msgstr "ब्रश का आकार"
|
||||
|
||||
#: resources/ui/adw/trex.ui:47
|
||||
msgid "Claw Scratch Scale"
|
||||
msgstr "पंजे का स्क्रैच स्केल"
|
||||
|
||||
#: resources/ui/adw/trex.ui:80
|
||||
msgid "Claw Scratch Count"
|
||||
msgstr "पंजे की खरोंच गिनती"
|
||||
|
||||
#: resources/ui/adw/trex.ui:113
|
||||
msgid "Warp Effect"
|
||||
msgstr "वार्प प्रभाव"
|
||||
|
||||
#: resources/ui/adw/trex.ui:146
|
||||
msgid "Flash Color"
|
||||
msgstr "फ़्लैश रंग"
|
||||
|
||||
#: resources/ui/adw/pixel-wheel.ui:47
|
||||
msgid "Spoke Count"
|
||||
msgstr "स्पोक की गिनती"
|
||||
|
||||
#: resources/ui/adw/glide.ui:80
|
||||
msgid "Squish"
|
||||
msgstr "स्क्विश"
|
||||
|
||||
#: resources/ui/adw/glide.ui:113
|
||||
msgid "Tilt"
|
||||
msgstr "झुकाव"
|
||||
|
||||
#: resources/ui/adw/glide.ui:146
|
||||
msgid "Shift"
|
||||
msgstr "बदलाव"
|
||||
|
||||
#: resources/ui/adw/apparition.ui:81
|
||||
msgid "Twirl Intensity"
|
||||
msgstr "घुमाव की तीव्रता"
|
||||
|
||||
#: resources/ui/adw/apparition.ui:114
|
||||
msgid "Shake Intensity"
|
||||
msgstr "झटकों की तीव्रता"
|
||||
|
||||
#: resources/ui/adw/apparition.ui:147
|
||||
msgid "Suction Intensity"
|
||||
msgstr "चूषण तीव्रता"
|
||||
|
||||
#: resources/ui/adw/portal.ui:47
|
||||
msgid "Rotation Speed"
|
||||
msgstr "घूर्णन गति"
|
||||
|
||||
#: resources/ui/adw/portal.ui:80
|
||||
msgid "Whirling"
|
||||
msgstr "घुमावदार"
|
||||
|
||||
#: resources/ui/adw/portal.ui:113
|
||||
msgid "Details"
|
||||
msgstr "विवरण"
|
||||
|
||||
#: resources/ui/adw/incinerate.ui:80
|
||||
msgid "Turbulence"
|
||||
msgstr "उथल-पुथल"
|
||||
|
||||
#: resources/ui/adw/incinerate.ui:113
|
||||
msgid "Start at Pointer"
|
||||
msgstr "सूचक से प्रारंभ करें"
|
||||
|
||||
#: resources/ui/adw/incinerate.ui:114
|
||||
msgid "If disabled, a random location will be chosen."
|
||||
msgstr "यदि अक्षम किया गया है, तो एक यादृच्छिक स्थान चुना जाएगा।"
|
||||
|
||||
#: resources/ui/adw/hexagon.ui:80
|
||||
msgid "Mesh Line Width"
|
||||
msgstr "जाल रेखा की चौड़ाई"
|
||||
|
||||
#: resources/ui/adw/hexagon.ui:113
|
||||
msgid "Line Color"
|
||||
msgstr "रेखा रंग"
|
||||
|
||||
#: resources/ui/adw/hexagon.ui:138
|
||||
msgid "Glow Color"
|
||||
msgstr "चमकदार रंग"
|
||||
|
||||
#: resources/ui/adw/hexagon.ui:163
|
||||
msgid "Additive Blending"
|
||||
msgstr "योगात्मक सम्मिश्रण"
|
||||
|
||||
#: resources/ui/adw/hexagon.ui:164
|
||||
msgid "You may want to enable this for dark window themes."
|
||||
msgstr "आप इसे डार्क विंडो थीम के लिए सक्षम करना चाह सकते हैं।"
|
||||
|
||||
#: resources/ui/adw/fire.ui:14
|
||||
msgid "Presets"
|
||||
msgstr "प्रीसेट"
|
||||
|
||||
#: resources/ui/adw/fire.ui:19
|
||||
msgid "Choose a Preset"
|
||||
msgstr "प्रीसेट चुनें"
|
||||
|
||||
#: resources/ui/adw/fire.ui:129
|
||||
msgid "3D Noise"
|
||||
msgstr "3D शोर"
|
||||
|
||||
#: resources/ui/adw/fire.ui:130
|
||||
msgid "Creates a more dynamic fire but requires more GPU power."
|
||||
msgstr ""
|
||||
"अधिक गतिशील आग पैदा करता है लेकिन इसके लिए अधिक GPU शक्ति की आवश्यकता होती है।"
|
||||
|
||||
#: resources/ui/adw/fire.ui:152
|
||||
msgid "Gradient"
|
||||
msgstr "ग्रेडियेंट"
|
||||
|
||||
#: resources/ui/adw/focus.ui:61
|
||||
msgid "Blur Amount"
|
||||
msgstr ""
|
||||
|
||||
#: resources/ui/adw/focus.ui:87
|
||||
msgid "Blur Quality"
|
||||
msgstr ""
|
||||
|
||||
#: resources/ui/adw/prefs.ui:65
|
||||
msgid "Effect Profile Constraints"
|
||||
msgstr "प्रभाव प्रोफ़ाइल बाधाएं"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:66
|
||||
msgid "Define when the current effect settings should be used."
|
||||
msgstr "परिभाषित करें कि वर्तमान प्रभाव सेटिंग्स का उपयोग कब किया जाना चाहिए।"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:70
|
||||
msgid "Application"
|
||||
msgstr "अनुप्रयोग"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:81 resources/ui/adw/prefs.ui:102
|
||||
#: resources/ui/adw/prefs.ui:117 resources/ui/adw/prefs.ui:132
|
||||
#: resources/ui/adw/prefs.ui:147 resources/ui/adw/prefs.ui:162
|
||||
msgid "Any"
|
||||
msgstr "कोई"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:98
|
||||
msgid "Animation Type"
|
||||
msgstr "एनिमेशन प्रकार"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:113
|
||||
msgid "Window Type"
|
||||
msgstr "विंडो प्रकार"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:128
|
||||
msgid "Color Scheme"
|
||||
msgstr "रंग योजना"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:143
|
||||
msgid "Power Mode"
|
||||
msgstr "पावर मोड"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:158
|
||||
msgid "Power Profile"
|
||||
msgstr "पावर प्रोफ़ाइल"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:179
|
||||
msgid "Advanced Profile Options"
|
||||
msgstr "उन्नत प्रोफ़ाइल विकल्प"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:184
|
||||
msgid "Use this profile even if there are better matching profiles."
|
||||
msgstr "बेहतर मिलान वाली प्रोफ़ाइल होने पर भी इस प्रोफ़ाइल का उपयोग करें।"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:204
|
||||
msgid "Delete this Profile..."
|
||||
msgstr "इस प्रोफ़ाइल को मिटाएं…"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:223
|
||||
msgid "Effect Selection"
|
||||
msgstr "प्रभाव चयन"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:224
|
||||
msgid "If multiple are selected, one is chosen randomly."
|
||||
msgstr "यदि एकाधिक का चयन किया जाता है, तो एक को यादृच्छिक रूप से चुना जाता है।"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:235
|
||||
msgid "Search..."
|
||||
msgstr ""
|
||||
|
||||
#: resources/ui/adw/prefs.ui:250
|
||||
msgid "Enable All"
|
||||
msgstr ""
|
||||
|
||||
#: resources/ui/adw/prefs.ui:256
|
||||
msgid "Disable All"
|
||||
msgstr ""
|
||||
|
||||
#: resources/ui/adw/pixelate.ui:47
|
||||
msgid "Noise"
|
||||
msgstr "शोर"
|
||||
|
||||
#~ msgid "Gold Sponsors"
|
||||
#~ msgstr "स्वर्ण प्रायोजक"
|
||||
|
||||
#~ msgid "Silver Sponsors"
|
||||
#~ msgstr "रजत प्रायोजक"
|
||||
|
||||
#~ msgid "Bronze Sponsors"
|
||||
#~ msgstr "कांस्य प्रायोजक"
|
||||
|
||||
#~ msgid "Past Sponsors"
|
||||
#~ msgstr "पिछले प्रायोजक"
|
||||
|
||||
#~ msgid "All"
|
||||
#~ msgstr "सभी"
|
||||
|
||||
#~ msgid "None"
|
||||
#~ msgstr "कोई नहीं"
|
||||
@@ -0,0 +1,640 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR Simon Schneegans
|
||||
# This file is distributed under the same license as the burn-my-windows package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: burn-my-windows\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-11-03 09:13+0100\n"
|
||||
"PO-Revision-Date: 2024-08-18 17:09+0000\n"
|
||||
"Last-Translator: atomkapa atomkapa <atomkapa@gmail.com>\n"
|
||||
"Language-Team: Hungarian <https://hosted.weblate.org/projects/burn-my-"
|
||||
"windows/core/hu/>\n"
|
||||
"Language: hu\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.7\n"
|
||||
|
||||
#: src/effects/Apparition.js:80
|
||||
msgid "Apparition"
|
||||
msgstr "Megjelenés"
|
||||
|
||||
#: src/effects/BrokenGlass.js:138
|
||||
msgid "Broken Glass"
|
||||
msgstr "Betört üveg"
|
||||
|
||||
#: src/effects/Doom.js:87
|
||||
msgid "Doom"
|
||||
msgstr "Doom"
|
||||
|
||||
#: src/effects/EnergizeA.js:74
|
||||
msgid "Energize A"
|
||||
msgstr "Energiát! A"
|
||||
|
||||
#: src/effects/EnergizeB.js:75
|
||||
msgid "Energize B"
|
||||
msgstr "Energiát! B"
|
||||
|
||||
#: src/effects/Fire.js:96
|
||||
msgid "Fire"
|
||||
msgstr "Tűz"
|
||||
|
||||
#: src/effects/Fire.js:150
|
||||
msgid "Default Fire"
|
||||
msgstr "Alapértelmezett tűz"
|
||||
|
||||
#: src/effects/Fire.js:160
|
||||
msgid "Hell Fire"
|
||||
msgstr "Pokoli tűz"
|
||||
|
||||
#: src/effects/Fire.js:170
|
||||
msgid "Dark and Smutty"
|
||||
msgstr "Sötét és kormos tűz"
|
||||
|
||||
#: src/effects/Fire.js:180
|
||||
msgid "Cold Breeze"
|
||||
msgstr "Fagyos szellő"
|
||||
|
||||
#: src/effects/Fire.js:190
|
||||
msgid "Santa is Coming"
|
||||
msgstr "Télapó itt van"
|
||||
|
||||
#: src/effects/Focus.js:76
|
||||
msgid "Focus"
|
||||
msgstr ""
|
||||
|
||||
#: src/effects/Glide.js:78
|
||||
msgid "Glide"
|
||||
msgstr "Siklás"
|
||||
|
||||
#: src/effects/Glitch.js:80
|
||||
msgid "Glitch"
|
||||
msgstr "Hiba"
|
||||
|
||||
#: src/effects/Hexagon.js:83
|
||||
msgid "Hexagon"
|
||||
msgstr "Hatszög"
|
||||
|
||||
#: src/effects/Incinerate.js:126
|
||||
msgid "Incinerate"
|
||||
msgstr "Elégetés"
|
||||
|
||||
#: src/effects/Matrix.js:109
|
||||
msgid "Matrix"
|
||||
msgstr "Mátrix"
|
||||
|
||||
#: src/effects/PaintBrush.js:101
|
||||
msgid "Paint Brush"
|
||||
msgstr "Ecset"
|
||||
|
||||
#: src/effects/Pixelate.js:74
|
||||
msgid "Pixelate"
|
||||
msgstr "Pixelezés"
|
||||
|
||||
#: src/effects/PixelWheel.js:74
|
||||
msgid "Pixel Wheel"
|
||||
msgstr "Pixelkerék"
|
||||
|
||||
#: src/effects/PixelWipe.js:100
|
||||
msgid "Pixel Wipe"
|
||||
msgstr "Pixelhullám"
|
||||
|
||||
#: src/effects/Portal.js:82
|
||||
msgid "Portal"
|
||||
msgstr "Portál"
|
||||
|
||||
#: src/effects/SnapOfDisintegration.js:110
|
||||
msgid "Snap of Disintegration"
|
||||
msgstr "Thanos csettintése"
|
||||
|
||||
#: src/effects/TRexAttack.js:109
|
||||
msgid "T-Rex Attack"
|
||||
msgstr "T-Rex támadás"
|
||||
|
||||
#: src/effects/TVEffect.js:73
|
||||
msgid "TV Effect"
|
||||
msgstr "Tévé hatás"
|
||||
|
||||
#: src/effects/TVGlitch.js:81
|
||||
msgid "TV Glitch"
|
||||
msgstr "Tévé hiba"
|
||||
|
||||
#: src/effects/Wisps.js:85
|
||||
msgid "Wisps"
|
||||
msgstr "Szálak"
|
||||
|
||||
#: prefs.js:236
|
||||
msgid "Preview this effect"
|
||||
msgstr "Előnézet"
|
||||
|
||||
#: prefs.js:313
|
||||
msgid "Burn-My-Windows has been updated!"
|
||||
msgstr "A Burn-My-Windows frissült!"
|
||||
|
||||
#: prefs.js:314 resources/ui/common/menus.ui:17
|
||||
msgid "View Changelog"
|
||||
msgstr "Változási napló megtekintése"
|
||||
|
||||
#: prefs.js:496
|
||||
msgid "Delete this Profile?"
|
||||
msgstr "Biztosan törli a profilt?"
|
||||
|
||||
#: prefs.js:497
|
||||
msgid ""
|
||||
"The current effect profile with all its effect settings will be permanently "
|
||||
"lost."
|
||||
msgstr "A jelenlegi profil minden beállítással együtt örökre elveszik."
|
||||
|
||||
#: prefs.js:500
|
||||
msgid "Cancel"
|
||||
msgstr "Mégse"
|
||||
|
||||
#: prefs.js:505
|
||||
msgid "Delete"
|
||||
msgstr "Törlés"
|
||||
|
||||
#: prefs.js:737 resources/ui/adw/prefs.ui:103
|
||||
msgid "Opening Windows"
|
||||
msgstr "Ablakok megnyitása"
|
||||
|
||||
#: prefs.js:738 resources/ui/adw/prefs.ui:104
|
||||
msgid "Closing Windows"
|
||||
msgstr "Ablakok bezárása"
|
||||
|
||||
#: prefs.js:739 resources/ui/adw/prefs.ui:118
|
||||
msgid "Normal Windows"
|
||||
msgstr "Normál ablakok"
|
||||
|
||||
#: prefs.js:740 resources/ui/adw/prefs.ui:119
|
||||
msgid "Dialog Windows"
|
||||
msgstr "Párbeszédablakok"
|
||||
|
||||
#: prefs.js:741 resources/ui/adw/prefs.ui:133
|
||||
msgid "Default Color Scheme"
|
||||
msgstr "Alapértelmezett téma"
|
||||
|
||||
#: prefs.js:742 resources/ui/adw/prefs.ui:134
|
||||
msgid "Dark Color Scheme"
|
||||
msgstr "Sötét téma"
|
||||
|
||||
#: prefs.js:743 resources/ui/adw/prefs.ui:148
|
||||
msgid "On Battery"
|
||||
msgstr "Akkumulátoron"
|
||||
|
||||
#: prefs.js:744 resources/ui/adw/prefs.ui:149
|
||||
msgid "Plugged In"
|
||||
msgstr "Csatlakoztatva"
|
||||
|
||||
#: prefs.js:745 resources/ui/adw/prefs.ui:163
|
||||
msgid "Power-Saver Mode"
|
||||
msgstr "Energiatakarékos üzemmód"
|
||||
|
||||
#: prefs.js:746 resources/ui/adw/prefs.ui:164
|
||||
msgid "Balanced Mode"
|
||||
msgstr "Kiegyensúlyozott üzemmód"
|
||||
|
||||
#: prefs.js:747 resources/ui/adw/prefs.ui:165
|
||||
msgid "Performance Mode"
|
||||
msgstr "Teljesítmény üzemmód"
|
||||
|
||||
#: prefs.js:748 resources/ui/adw/prefs.ui:166
|
||||
msgid "Power Saver or Balanced"
|
||||
msgstr "Enerigiatakarékos vagy kiegyensúlyozott üzemmód"
|
||||
|
||||
#: prefs.js:749 resources/ui/adw/prefs.ui:167
|
||||
msgid "Balanced or Performance"
|
||||
msgstr "Kiegyensúlyozott vagy teljesítmény üzemmód"
|
||||
|
||||
#: prefs.js:754 resources/ui/adw/prefs.ui:183
|
||||
msgid "High Priority"
|
||||
msgstr "Magas Prioritás"
|
||||
|
||||
#: prefs.js:760
|
||||
msgid "Standard Profile"
|
||||
msgstr "Alapértelmezett Profil"
|
||||
|
||||
#. Translators: %s will be replaced by the effect's name.
|
||||
#: prefs.js:840
|
||||
#, javascript-format
|
||||
msgid "Preview for %s"
|
||||
msgstr "%s előnézete"
|
||||
|
||||
#: prefs.js:859
|
||||
msgid "Close this Window to Preview the Effect!"
|
||||
msgstr "Zárja be ezt az ablakot hogy előnézze ezt a hatást!"
|
||||
|
||||
#: resources/ui/common/menus.ui:13
|
||||
msgid "Visit Homepage"
|
||||
msgstr "Honlap meglátogatása"
|
||||
|
||||
#: resources/ui/common/menus.ui:21
|
||||
msgid "View Matching Wallpapers"
|
||||
msgstr "Passzoló háttérképek megtekintése"
|
||||
|
||||
#: resources/ui/common/menus.ui:25
|
||||
msgid "View Donors Hall-of-Fame"
|
||||
msgstr ""
|
||||
|
||||
#: resources/ui/common/menus.ui:31
|
||||
msgid "Donate"
|
||||
msgstr "Adományozás"
|
||||
|
||||
#: resources/ui/common/menus.ui:50
|
||||
msgid "Report a Bug"
|
||||
msgstr "Hiba jelentése"
|
||||
|
||||
#: resources/ui/common/menus.ui:54
|
||||
msgid "Create an Effect"
|
||||
msgstr "Hatás készítése"
|
||||
|
||||
#: resources/ui/common/menus.ui:58
|
||||
msgid "Translate"
|
||||
msgstr "Fordítás"
|
||||
|
||||
#: resources/ui/common/menus.ui:64
|
||||
msgid "Open Effect-Profile Directory"
|
||||
msgstr "Az effektbeállításokat tartalmazó mappa megnyitása"
|
||||
|
||||
#: resources/ui/common/menus.ui:70
|
||||
msgid "About Burn-My-Windows"
|
||||
msgstr "A Burn-My-Windowsról"
|
||||
|
||||
#: resources/ui/common/menus.ui:81
|
||||
msgid "Add New Profile..."
|
||||
msgstr "Új Profil Hozzáadása..."
|
||||
|
||||
#: resources/ui/adw/broken-glass.ui:15 resources/ui/adw/tv-glitch.ui:14
|
||||
#: resources/ui/adw/glitch.ui:14 resources/ui/adw/matrix.ui:14
|
||||
#: resources/ui/adw/doom.ui:14 resources/ui/adw/paint-brush.ui:14
|
||||
#: resources/ui/adw/trex.ui:14 resources/ui/adw/wisps.ui:14
|
||||
#: resources/ui/adw/energize-b.ui:15 resources/ui/adw/pixel-wheel.ui:14
|
||||
#: resources/ui/adw/glide.ui:14 resources/ui/adw/apparition.ui:15
|
||||
#: resources/ui/adw/portal.ui:14 resources/ui/adw/incinerate.ui:14
|
||||
#: resources/ui/adw/hexagon.ui:14 resources/ui/adw/fire.ui:30
|
||||
#: resources/ui/adw/pixel-wipe.ui:14 resources/ui/adw/snap.ui:14
|
||||
#: resources/ui/adw/focus.ui:35 resources/ui/adw/energize-a.ui:14
|
||||
#: resources/ui/adw/pixelate.ui:14 resources/ui/adw/tv.ui:14
|
||||
msgid "Animation Time [ms]"
|
||||
msgstr "Animáció időtartama [ms]"
|
||||
|
||||
#: resources/ui/adw/broken-glass.ui:37 resources/ui/adw/broken-glass.ui:70
|
||||
#: resources/ui/adw/broken-glass.ui:103 resources/ui/adw/broken-glass.ui:136
|
||||
#: resources/ui/adw/broken-glass.ui:159 resources/ui/adw/tv-glitch.ui:36
|
||||
#: resources/ui/adw/tv-glitch.ui:69 resources/ui/adw/tv-glitch.ui:102
|
||||
#: resources/ui/adw/tv-glitch.ui:135 resources/ui/adw/tv-glitch.ui:160
|
||||
#: resources/ui/adw/glitch.ui:36 resources/ui/adw/glitch.ui:69
|
||||
#: resources/ui/adw/glitch.ui:102 resources/ui/adw/glitch.ui:135
|
||||
#: resources/ui/adw/glitch.ui:160 resources/ui/adw/matrix.ui:36
|
||||
#: resources/ui/adw/matrix.ui:69 resources/ui/adw/matrix.ui:102
|
||||
#: resources/ui/adw/matrix.ui:135 resources/ui/adw/matrix.ui:160
|
||||
#: resources/ui/adw/matrix.ui:185 resources/ui/adw/doom.ui:36
|
||||
#: resources/ui/adw/doom.ui:69 resources/ui/adw/doom.ui:102
|
||||
#: resources/ui/adw/doom.ui:135 resources/ui/adw/paint-brush.ui:36
|
||||
#: resources/ui/adw/paint-brush.ui:69 resources/ui/adw/trex.ui:36
|
||||
#: resources/ui/adw/trex.ui:69 resources/ui/adw/trex.ui:102
|
||||
#: resources/ui/adw/trex.ui:135 resources/ui/adw/trex.ui:160
|
||||
#: resources/ui/adw/wisps.ui:36 resources/ui/adw/wisps.ui:69
|
||||
#: resources/ui/adw/wisps.ui:110 resources/ui/adw/energize-b.ui:37
|
||||
#: resources/ui/adw/energize-b.ui:70 resources/ui/adw/energize-b.ui:95
|
||||
#: resources/ui/adw/pixel-wheel.ui:36 resources/ui/adw/pixel-wheel.ui:69
|
||||
#: resources/ui/adw/pixel-wheel.ui:102 resources/ui/adw/glide.ui:36
|
||||
#: resources/ui/adw/glide.ui:69 resources/ui/adw/glide.ui:102
|
||||
#: resources/ui/adw/glide.ui:135 resources/ui/adw/glide.ui:168
|
||||
#: resources/ui/adw/apparition.ui:37 resources/ui/adw/apparition.ui:70
|
||||
#: resources/ui/adw/apparition.ui:103 resources/ui/adw/apparition.ui:136
|
||||
#: resources/ui/adw/apparition.ui:169 resources/ui/adw/portal.ui:36
|
||||
#: resources/ui/adw/portal.ui:69 resources/ui/adw/portal.ui:102
|
||||
#: resources/ui/adw/portal.ui:135 resources/ui/adw/portal.ui:160
|
||||
#: resources/ui/adw/incinerate.ui:36 resources/ui/adw/incinerate.ui:69
|
||||
#: resources/ui/adw/incinerate.ui:102 resources/ui/adw/incinerate.ui:125
|
||||
#: resources/ui/adw/incinerate.ui:150 resources/ui/adw/hexagon.ui:36
|
||||
#: resources/ui/adw/hexagon.ui:69 resources/ui/adw/hexagon.ui:102
|
||||
#: resources/ui/adw/hexagon.ui:127 resources/ui/adw/hexagon.ui:152
|
||||
#: resources/ui/adw/hexagon.ui:175 resources/ui/adw/fire.ui:52
|
||||
#: resources/ui/adw/fire.ui:85 resources/ui/adw/fire.ui:118
|
||||
#: resources/ui/adw/fire.ui:141 resources/ui/adw/fire.ui:199
|
||||
#: resources/ui/adw/pixel-wipe.ui:36 resources/ui/adw/pixel-wipe.ui:69
|
||||
#: resources/ui/adw/snap.ui:36 resources/ui/adw/snap.ui:69
|
||||
#: resources/ui/adw/snap.ui:94 resources/ui/adw/focus.ui:50
|
||||
#: resources/ui/adw/focus.ui:76 resources/ui/adw/focus.ui:102
|
||||
#: resources/ui/adw/energize-a.ui:36 resources/ui/adw/energize-a.ui:69
|
||||
#: resources/ui/adw/energize-a.ui:94 resources/ui/adw/pixelate.ui:36
|
||||
#: resources/ui/adw/pixelate.ui:69 resources/ui/adw/pixelate.ui:102
|
||||
#: resources/ui/adw/tv.ui:36 resources/ui/adw/tv.ui:61
|
||||
msgid "Reset to Default Value"
|
||||
msgstr "Visszaállítás az alapértelmezett értékre"
|
||||
|
||||
#: resources/ui/adw/broken-glass.ui:48 resources/ui/adw/tv-glitch.ui:47
|
||||
#: resources/ui/adw/glitch.ui:47 resources/ui/adw/matrix.ui:47
|
||||
#: resources/ui/adw/wisps.ui:47 resources/ui/adw/energize-b.ui:48
|
||||
#: resources/ui/adw/glide.ui:47 resources/ui/adw/incinerate.ui:47
|
||||
#: resources/ui/adw/hexagon.ui:47 resources/ui/adw/fire.ui:63
|
||||
#: resources/ui/adw/snap.ui:47 resources/ui/adw/energize-a.ui:47
|
||||
msgid "Scale"
|
||||
msgstr "Skála"
|
||||
|
||||
#: resources/ui/adw/broken-glass.ui:81
|
||||
msgid "Gravity"
|
||||
msgstr "Gravitáció"
|
||||
|
||||
#: resources/ui/adw/broken-glass.ui:114
|
||||
msgid "Blow Force"
|
||||
msgstr "Fúvóerő"
|
||||
|
||||
#: resources/ui/adw/broken-glass.ui:147
|
||||
msgid "Shatter From Pointer Location"
|
||||
msgstr "Összetörés a mutató pozíciójáról"
|
||||
|
||||
#: resources/ui/adw/broken-glass.ui:148
|
||||
msgid ""
|
||||
"The shards will fly away from where your mouse pointer was when closing the "
|
||||
"window."
|
||||
msgstr ""
|
||||
"A szilánkok onnan fognak elrepülni, ahol a mutató tartózkodott az ablak "
|
||||
"bezárásakor."
|
||||
|
||||
#: resources/ui/adw/tv-glitch.ui:80 resources/ui/adw/glitch.ui:80
|
||||
msgid "Strength"
|
||||
msgstr "Erő"
|
||||
|
||||
#: resources/ui/adw/tv-glitch.ui:113 resources/ui/adw/glitch.ui:113
|
||||
#: resources/ui/adw/fire.ui:96
|
||||
msgid "Speed"
|
||||
msgstr "Gyorsaság"
|
||||
|
||||
#: resources/ui/adw/tv-glitch.ui:146 resources/ui/adw/glitch.ui:146
|
||||
#: resources/ui/adw/wisps.ui:80 resources/ui/adw/energize-b.ui:81
|
||||
#: resources/ui/adw/portal.ui:146 resources/ui/adw/incinerate.ui:136
|
||||
#: resources/ui/adw/snap.ui:80 resources/ui/adw/energize-a.ui:80
|
||||
#: resources/ui/adw/tv.ui:47
|
||||
msgid "Color"
|
||||
msgstr "Szín"
|
||||
|
||||
#: resources/ui/adw/matrix.ui:80 resources/ui/adw/apparition.ui:48
|
||||
msgid "Randomness"
|
||||
msgstr "Véletlenszerűség"
|
||||
|
||||
#: resources/ui/adw/matrix.ui:113
|
||||
msgid "Vertical Overshooting"
|
||||
msgstr "Függőleges túlcsúszás"
|
||||
|
||||
#: resources/ui/adw/matrix.ui:146
|
||||
msgid "Trail Color"
|
||||
msgstr "Nyom színe"
|
||||
|
||||
#: resources/ui/adw/matrix.ui:171
|
||||
msgid "Tip Color"
|
||||
msgstr "Csúcs színe"
|
||||
|
||||
#: resources/ui/adw/doom.ui:47
|
||||
msgid "Horizontal Scale"
|
||||
msgstr "Vízszintes skála"
|
||||
|
||||
#: resources/ui/adw/doom.ui:80
|
||||
msgid "Vertical Scale"
|
||||
msgstr "Függőleges skála"
|
||||
|
||||
#: resources/ui/adw/doom.ui:113 resources/ui/adw/pixel-wheel.ui:80
|
||||
#: resources/ui/adw/pixel-wipe.ui:47 resources/ui/adw/pixelate.ui:80
|
||||
msgid "Pixel Size"
|
||||
msgstr "Pixelméret"
|
||||
|
||||
#: resources/ui/adw/paint-brush.ui:47
|
||||
msgid "Brush Size"
|
||||
msgstr "Ecset mérete"
|
||||
|
||||
#: resources/ui/adw/trex.ui:47
|
||||
msgid "Claw Scratch Scale"
|
||||
msgstr "Karmolás mérete"
|
||||
|
||||
#: resources/ui/adw/trex.ui:80
|
||||
msgid "Claw Scratch Count"
|
||||
msgstr "Korom karmolás száma"
|
||||
|
||||
#: resources/ui/adw/trex.ui:113
|
||||
msgid "Warp Effect"
|
||||
msgstr "Eltorzító hatás"
|
||||
|
||||
#: resources/ui/adw/trex.ui:146
|
||||
msgid "Flash Color"
|
||||
msgstr "Villanás színe"
|
||||
|
||||
#: resources/ui/adw/pixel-wheel.ui:47
|
||||
msgid "Spoke Count"
|
||||
msgstr "Sugár száma"
|
||||
|
||||
#: resources/ui/adw/glide.ui:80
|
||||
msgid "Squish"
|
||||
msgstr "Összenyomás"
|
||||
|
||||
#: resources/ui/adw/glide.ui:113
|
||||
msgid "Tilt"
|
||||
msgstr "Billenés"
|
||||
|
||||
#: resources/ui/adw/glide.ui:146
|
||||
msgid "Shift"
|
||||
msgstr "Elmozdítás"
|
||||
|
||||
#: resources/ui/adw/apparition.ui:81
|
||||
msgid "Twirl Intensity"
|
||||
msgstr "Pörgés intenzitása"
|
||||
|
||||
#: resources/ui/adw/apparition.ui:114
|
||||
msgid "Shake Intensity"
|
||||
msgstr "Rázkódás intenzitása"
|
||||
|
||||
#: resources/ui/adw/apparition.ui:147
|
||||
msgid "Suction Intensity"
|
||||
msgstr "Szívóerő Intenzitása"
|
||||
|
||||
#: resources/ui/adw/portal.ui:47
|
||||
msgid "Rotation Speed"
|
||||
msgstr "Forgás sebessége"
|
||||
|
||||
#: resources/ui/adw/portal.ui:80
|
||||
msgid "Whirling"
|
||||
msgstr "Örvénylés"
|
||||
|
||||
#: resources/ui/adw/portal.ui:113
|
||||
msgid "Details"
|
||||
msgstr "Részletesség"
|
||||
|
||||
#: resources/ui/adw/incinerate.ui:80
|
||||
msgid "Turbulence"
|
||||
msgstr "Turbulencia"
|
||||
|
||||
#: resources/ui/adw/incinerate.ui:113
|
||||
msgid "Start at Pointer"
|
||||
msgstr "Kezdés a mutatónál"
|
||||
|
||||
#: resources/ui/adw/incinerate.ui:114
|
||||
msgid "If disabled, a random location will be chosen."
|
||||
msgstr "Ha ki van kapcsolva, egy véletlenszerű hely lesz választva."
|
||||
|
||||
#: resources/ui/adw/hexagon.ui:80
|
||||
msgid "Mesh Line Width"
|
||||
msgstr "Körvonal Vastagsága"
|
||||
|
||||
#: resources/ui/adw/hexagon.ui:113
|
||||
msgid "Line Color"
|
||||
msgstr "Vonal színe"
|
||||
|
||||
#: resources/ui/adw/hexagon.ui:138
|
||||
msgid "Glow Color"
|
||||
msgstr "Világítás színe"
|
||||
|
||||
#: resources/ui/adw/hexagon.ui:163
|
||||
msgid "Additive Blending"
|
||||
msgstr "Beolvadó Színek"
|
||||
|
||||
#: resources/ui/adw/hexagon.ui:164
|
||||
msgid "You may want to enable this for dark window themes."
|
||||
msgstr "Sötét témájú ablakokhoz ajánlott."
|
||||
|
||||
#: resources/ui/adw/fire.ui:14
|
||||
msgid "Presets"
|
||||
msgstr "Sablonok"
|
||||
|
||||
#: resources/ui/adw/fire.ui:19
|
||||
msgid "Choose a Preset"
|
||||
msgstr "Válassz egy sablont"
|
||||
|
||||
#: resources/ui/adw/fire.ui:129
|
||||
msgid "3D Noise"
|
||||
msgstr "3D zaj"
|
||||
|
||||
#: resources/ui/adw/fire.ui:130
|
||||
msgid "Creates a more dynamic fire but requires more GPU power."
|
||||
msgstr "Egy dinamikusabb tüzet készít, de több GPU erőt igényel."
|
||||
|
||||
#: resources/ui/adw/fire.ui:152
|
||||
msgid "Gradient"
|
||||
msgstr "Árnyalatok"
|
||||
|
||||
#: resources/ui/adw/focus.ui:61
|
||||
msgid "Blur Amount"
|
||||
msgstr ""
|
||||
|
||||
#: resources/ui/adw/focus.ui:87
|
||||
msgid "Blur Quality"
|
||||
msgstr ""
|
||||
|
||||
#: resources/ui/adw/prefs.ui:65
|
||||
msgid "Effect Profile Constraints"
|
||||
msgstr "Profil Beállításai"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:66
|
||||
msgid "Define when the current effect settings should be used."
|
||||
msgstr ""
|
||||
"Határozza meg, mikor legyenek használatban az aktuális effektbeállítások."
|
||||
|
||||
#: resources/ui/adw/prefs.ui:70
|
||||
msgid "Application"
|
||||
msgstr "Applikáció"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:81 resources/ui/adw/prefs.ui:102
|
||||
#: resources/ui/adw/prefs.ui:117 resources/ui/adw/prefs.ui:132
|
||||
#: resources/ui/adw/prefs.ui:147 resources/ui/adw/prefs.ui:162
|
||||
msgid "Any"
|
||||
msgstr "Bármelyik"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:98
|
||||
msgid "Animation Type"
|
||||
msgstr "Animációtípus"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:113
|
||||
msgid "Window Type"
|
||||
msgstr "Ablaktípus"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:128
|
||||
msgid "Color Scheme"
|
||||
msgstr "Téma"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:143
|
||||
msgid "Power Mode"
|
||||
msgstr "Energiaforrás módja"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:158
|
||||
msgid "Power Profile"
|
||||
msgstr "Energiagazdálkodási beállítás"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:179
|
||||
msgid "Advanced Profile Options"
|
||||
msgstr "Haladó beállítások"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:184
|
||||
msgid "Use this profile even if there are better matching profiles."
|
||||
msgstr "Profil használata akkor is, ha van másik, ami jobban megfelelő lenne."
|
||||
|
||||
#: resources/ui/adw/prefs.ui:204
|
||||
msgid "Delete this Profile..."
|
||||
msgstr "Profil Törlése..."
|
||||
|
||||
#: resources/ui/adw/prefs.ui:223
|
||||
msgid "Effect Selection"
|
||||
msgstr "Effektus kiválasztása"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:224
|
||||
msgid "If multiple are selected, one is chosen randomly."
|
||||
msgstr ""
|
||||
"Ha több is ki van választva, minden alkalommal egy véletlenszerű lesz "
|
||||
"használva."
|
||||
|
||||
#: resources/ui/adw/prefs.ui:235
|
||||
msgid "Search..."
|
||||
msgstr ""
|
||||
|
||||
#: resources/ui/adw/prefs.ui:250
|
||||
msgid "Enable All"
|
||||
msgstr ""
|
||||
|
||||
#: resources/ui/adw/prefs.ui:256
|
||||
msgid "Disable All"
|
||||
msgstr ""
|
||||
|
||||
#: resources/ui/adw/pixelate.ui:47
|
||||
msgid "Noise"
|
||||
msgstr "Zaj"
|
||||
|
||||
#~ msgid "Gold Sponsors"
|
||||
#~ msgstr "Aranyszponzorok"
|
||||
|
||||
#~ msgid "Silver Sponsors"
|
||||
#~ msgstr "Ezüstszponzorok"
|
||||
|
||||
#~ msgid "Bronze Sponsors"
|
||||
#~ msgstr "Bronzszponzorok"
|
||||
|
||||
#~ msgid "Past Sponsors"
|
||||
#~ msgstr "Korábbi szponzorok"
|
||||
|
||||
#~ msgid "All"
|
||||
#~ msgstr "Mind"
|
||||
|
||||
#~ msgid "None"
|
||||
#~ msgstr "Egyik sem"
|
||||
|
||||
#~ msgid "Effects"
|
||||
#~ msgstr "Hatások"
|
||||
|
||||
#~ msgid "Use this effect when opening windows"
|
||||
#~ msgstr "Használja ezt a hatást az ablakok megnyitásakor"
|
||||
|
||||
#~ msgid "Use this effect when closing windows"
|
||||
#~ msgstr "Használja ezt a hatást az ablakok bezárásakor"
|
||||
|
||||
#~ msgid "General Options"
|
||||
#~ msgstr "Általános opciók"
|
||||
|
||||
#~ msgid "Welcome to Burn-My-Windows!"
|
||||
#~ msgstr "Üdvözöljük a Burn-My-Windowsban!"
|
||||
|
||||
#~ msgid "If you like this extension, recommend it to your friends :)"
|
||||
#~ msgstr "Ha tetszik önnek ez a bővítmény, ajánlja barátainak :)"
|
||||
|
||||
#~ msgid "Open Window Animation"
|
||||
#~ msgstr "Megnyitott ablak animációja"
|
||||
@@ -0,0 +1,614 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR Simon Schneegans
|
||||
# This file is distributed under the same license as the burn-my-windows package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: burn-my-windows\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-11-03 09:13+0100\n"
|
||||
"PO-Revision-Date: 2024-09-18 04:09+0000\n"
|
||||
"Last-Translator: GholtsMxv <ghost20090105@gmail.com>\n"
|
||||
"Language-Team: Chinese (Traditional Han script) <https://hosted.weblate.org/"
|
||||
"projects/burn-my-windows/core/zh_Hant/>\n"
|
||||
"Language: zh_Hant\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 5.8-dev\n"
|
||||
|
||||
#: src/effects/Apparition.js:80
|
||||
msgid "Apparition"
|
||||
msgstr "幽靈旋風"
|
||||
|
||||
#: src/effects/BrokenGlass.js:138
|
||||
msgid "Broken Glass"
|
||||
msgstr "玻璃碎裂"
|
||||
|
||||
#: src/effects/Doom.js:87
|
||||
msgid "Doom"
|
||||
msgstr "毀滅戰士"
|
||||
|
||||
#: src/effects/EnergizeA.js:74
|
||||
msgid "Energize A"
|
||||
msgstr "碎片融解A"
|
||||
|
||||
#: src/effects/EnergizeB.js:75
|
||||
msgid "Energize B"
|
||||
msgstr "碎片融解B"
|
||||
|
||||
#: src/effects/Fire.js:96
|
||||
msgid "Fire"
|
||||
msgstr "烈火燃燒"
|
||||
|
||||
#: src/effects/Fire.js:150
|
||||
msgid "Default Fire"
|
||||
msgstr "預設烈火燃燒效果"
|
||||
|
||||
#: src/effects/Fire.js:160
|
||||
msgid "Hell Fire"
|
||||
msgstr "地獄之火"
|
||||
|
||||
#: src/effects/Fire.js:170
|
||||
msgid "Dark and Smutty"
|
||||
msgstr "暗黑之火"
|
||||
|
||||
#: src/effects/Fire.js:180
|
||||
msgid "Cold Breeze"
|
||||
msgstr "冰火之舞"
|
||||
|
||||
#: src/effects/Fire.js:190
|
||||
msgid "Santa is Coming"
|
||||
msgstr "聖誕節來臨"
|
||||
|
||||
#: src/effects/Focus.js:76
|
||||
msgid "Focus"
|
||||
msgstr ""
|
||||
|
||||
#: src/effects/Glide.js:78
|
||||
msgid "Glide"
|
||||
msgstr "滑翔"
|
||||
|
||||
#: src/effects/Glitch.js:80
|
||||
msgid "Glitch"
|
||||
msgstr "電子脈衝"
|
||||
|
||||
#: src/effects/Hexagon.js:83
|
||||
msgid "Hexagon"
|
||||
msgstr "蜂巢拼圖"
|
||||
|
||||
#: src/effects/Incinerate.js:126
|
||||
msgid "Incinerate"
|
||||
msgstr "燃燒蔓開"
|
||||
|
||||
#: src/effects/Matrix.js:109
|
||||
msgid "Matrix"
|
||||
msgstr "駭客任務"
|
||||
|
||||
#: src/effects/PaintBrush.js:101
|
||||
msgid "Paint Brush"
|
||||
msgstr "畫筆"
|
||||
|
||||
#: src/effects/Pixelate.js:74
|
||||
msgid "Pixelate"
|
||||
msgstr "像素化"
|
||||
|
||||
#: src/effects/PixelWheel.js:74
|
||||
msgid "Pixel Wheel"
|
||||
msgstr "像素輪"
|
||||
|
||||
#: src/effects/PixelWipe.js:100
|
||||
msgid "Pixel Wipe"
|
||||
msgstr "像素清除"
|
||||
|
||||
#: src/effects/Portal.js:82
|
||||
msgid "Portal"
|
||||
msgstr "傳送門"
|
||||
|
||||
#: src/effects/SnapOfDisintegration.js:110
|
||||
msgid "Snap of Disintegration"
|
||||
msgstr "碎片掉落"
|
||||
|
||||
#: src/effects/TRexAttack.js:109
|
||||
msgid "T-Rex Attack"
|
||||
msgstr "霸王龍攻擊"
|
||||
|
||||
#: src/effects/TVEffect.js:73
|
||||
msgid "TV Effect"
|
||||
msgstr "電視效果"
|
||||
|
||||
#: src/effects/TVGlitch.js:81
|
||||
msgid "TV Glitch"
|
||||
msgstr "電視故障"
|
||||
|
||||
#: src/effects/Wisps.js:85
|
||||
msgid "Wisps"
|
||||
msgstr "精靈飛散"
|
||||
|
||||
#: prefs.js:236
|
||||
msgid "Preview this effect"
|
||||
msgstr "預覽此效果"
|
||||
|
||||
#: prefs.js:313
|
||||
msgid "Burn-My-Windows has been updated!"
|
||||
msgstr "Burn-My-Windows已更新!"
|
||||
|
||||
#: prefs.js:314 resources/ui/common/menus.ui:17
|
||||
msgid "View Changelog"
|
||||
msgstr "查看更新日誌"
|
||||
|
||||
#: prefs.js:496
|
||||
msgid "Delete this Profile?"
|
||||
msgstr "刪除此配置嗎?"
|
||||
|
||||
#: prefs.js:497
|
||||
msgid ""
|
||||
"The current effect profile with all its effect settings will be permanently "
|
||||
"lost."
|
||||
msgstr "目前效果設定檔設定的所有效果都將永久遺失。"
|
||||
|
||||
#: prefs.js:500
|
||||
msgid "Cancel"
|
||||
msgstr "取消"
|
||||
|
||||
#: prefs.js:505
|
||||
msgid "Delete"
|
||||
msgstr "刪除"
|
||||
|
||||
#: prefs.js:737 resources/ui/adw/prefs.ui:103
|
||||
msgid "Opening Windows"
|
||||
msgstr "打開視窗"
|
||||
|
||||
#: prefs.js:738 resources/ui/adw/prefs.ui:104
|
||||
msgid "Closing Windows"
|
||||
msgstr "關閉視窗"
|
||||
|
||||
#: prefs.js:739 resources/ui/adw/prefs.ui:118
|
||||
msgid "Normal Windows"
|
||||
msgstr "常規視窗"
|
||||
|
||||
#: prefs.js:740 resources/ui/adw/prefs.ui:119
|
||||
msgid "Dialog Windows"
|
||||
msgstr "對話視窗"
|
||||
|
||||
#: prefs.js:741 resources/ui/adw/prefs.ui:133
|
||||
msgid "Default Color Scheme"
|
||||
msgstr "預設色彩方案"
|
||||
|
||||
#: prefs.js:742 resources/ui/adw/prefs.ui:134
|
||||
msgid "Dark Color Scheme"
|
||||
msgstr "暗色色彩方案"
|
||||
|
||||
#: prefs.js:743 resources/ui/adw/prefs.ui:148
|
||||
msgid "On Battery"
|
||||
msgstr "使用電池時"
|
||||
|
||||
#: prefs.js:744 resources/ui/adw/prefs.ui:149
|
||||
msgid "Plugged In"
|
||||
msgstr "插入電源時"
|
||||
|
||||
#: prefs.js:745 resources/ui/adw/prefs.ui:163
|
||||
msgid "Power-Saver Mode"
|
||||
msgstr "節電模式"
|
||||
|
||||
#: prefs.js:746 resources/ui/adw/prefs.ui:164
|
||||
msgid "Balanced Mode"
|
||||
msgstr "平衡模式"
|
||||
|
||||
#: prefs.js:747 resources/ui/adw/prefs.ui:165
|
||||
msgid "Performance Mode"
|
||||
msgstr "性能模式"
|
||||
|
||||
#: prefs.js:748 resources/ui/adw/prefs.ui:166
|
||||
msgid "Power Saver or Balanced"
|
||||
msgstr "節電或平衡"
|
||||
|
||||
#: prefs.js:749 resources/ui/adw/prefs.ui:167
|
||||
msgid "Balanced or Performance"
|
||||
msgstr "節電或平衡"
|
||||
|
||||
#: prefs.js:754 resources/ui/adw/prefs.ui:183
|
||||
msgid "High Priority"
|
||||
msgstr "高優先級"
|
||||
|
||||
#: prefs.js:760
|
||||
msgid "Standard Profile"
|
||||
msgstr "標準參數"
|
||||
|
||||
#. Translators: %s will be replaced by the effect's name.
|
||||
#: prefs.js:840
|
||||
#, javascript-format
|
||||
msgid "Preview for %s"
|
||||
msgstr "%s 的預覽"
|
||||
|
||||
#: prefs.js:859
|
||||
msgid "Close this Window to Preview the Effect!"
|
||||
msgstr "關閉此窗,預覽效果!"
|
||||
|
||||
#: resources/ui/common/menus.ui:13
|
||||
msgid "Visit Homepage"
|
||||
msgstr "訪問主頁"
|
||||
|
||||
#: resources/ui/common/menus.ui:21
|
||||
msgid "View Matching Wallpapers"
|
||||
msgstr "查看相符的壁紙"
|
||||
|
||||
#: resources/ui/common/menus.ui:25
|
||||
msgid "View Donors Hall-of-Fame"
|
||||
msgstr ""
|
||||
|
||||
#: resources/ui/common/menus.ui:31
|
||||
msgid "Donate"
|
||||
msgstr "捐贈"
|
||||
|
||||
#: resources/ui/common/menus.ui:50
|
||||
msgid "Report a Bug"
|
||||
msgstr "報告錯誤"
|
||||
|
||||
#: resources/ui/common/menus.ui:54
|
||||
msgid "Create an Effect"
|
||||
msgstr "創建特效"
|
||||
|
||||
#: resources/ui/common/menus.ui:58
|
||||
msgid "Translate"
|
||||
msgstr "翻譯"
|
||||
|
||||
#: resources/ui/common/menus.ui:64
|
||||
msgid "Open Effect-Profile Directory"
|
||||
msgstr "開啟效果設定檔目錄"
|
||||
|
||||
#: resources/ui/common/menus.ui:70
|
||||
msgid "About Burn-My-Windows"
|
||||
msgstr "關於 Burn-My-Windows"
|
||||
|
||||
#: resources/ui/common/menus.ui:81
|
||||
msgid "Add New Profile..."
|
||||
msgstr "新建配置…"
|
||||
|
||||
#: resources/ui/adw/broken-glass.ui:15 resources/ui/adw/tv-glitch.ui:14
|
||||
#: resources/ui/adw/glitch.ui:14 resources/ui/adw/matrix.ui:14
|
||||
#: resources/ui/adw/doom.ui:14 resources/ui/adw/paint-brush.ui:14
|
||||
#: resources/ui/adw/trex.ui:14 resources/ui/adw/wisps.ui:14
|
||||
#: resources/ui/adw/energize-b.ui:15 resources/ui/adw/pixel-wheel.ui:14
|
||||
#: resources/ui/adw/glide.ui:14 resources/ui/adw/apparition.ui:15
|
||||
#: resources/ui/adw/portal.ui:14 resources/ui/adw/incinerate.ui:14
|
||||
#: resources/ui/adw/hexagon.ui:14 resources/ui/adw/fire.ui:30
|
||||
#: resources/ui/adw/pixel-wipe.ui:14 resources/ui/adw/snap.ui:14
|
||||
#: resources/ui/adw/focus.ui:35 resources/ui/adw/energize-a.ui:14
|
||||
#: resources/ui/adw/pixelate.ui:14 resources/ui/adw/tv.ui:14
|
||||
msgid "Animation Time [ms]"
|
||||
msgstr "動畫時間 [毫秒]"
|
||||
|
||||
#: resources/ui/adw/broken-glass.ui:37 resources/ui/adw/broken-glass.ui:70
|
||||
#: resources/ui/adw/broken-glass.ui:103 resources/ui/adw/broken-glass.ui:136
|
||||
#: resources/ui/adw/broken-glass.ui:159 resources/ui/adw/tv-glitch.ui:36
|
||||
#: resources/ui/adw/tv-glitch.ui:69 resources/ui/adw/tv-glitch.ui:102
|
||||
#: resources/ui/adw/tv-glitch.ui:135 resources/ui/adw/tv-glitch.ui:160
|
||||
#: resources/ui/adw/glitch.ui:36 resources/ui/adw/glitch.ui:69
|
||||
#: resources/ui/adw/glitch.ui:102 resources/ui/adw/glitch.ui:135
|
||||
#: resources/ui/adw/glitch.ui:160 resources/ui/adw/matrix.ui:36
|
||||
#: resources/ui/adw/matrix.ui:69 resources/ui/adw/matrix.ui:102
|
||||
#: resources/ui/adw/matrix.ui:135 resources/ui/adw/matrix.ui:160
|
||||
#: resources/ui/adw/matrix.ui:185 resources/ui/adw/doom.ui:36
|
||||
#: resources/ui/adw/doom.ui:69 resources/ui/adw/doom.ui:102
|
||||
#: resources/ui/adw/doom.ui:135 resources/ui/adw/paint-brush.ui:36
|
||||
#: resources/ui/adw/paint-brush.ui:69 resources/ui/adw/trex.ui:36
|
||||
#: resources/ui/adw/trex.ui:69 resources/ui/adw/trex.ui:102
|
||||
#: resources/ui/adw/trex.ui:135 resources/ui/adw/trex.ui:160
|
||||
#: resources/ui/adw/wisps.ui:36 resources/ui/adw/wisps.ui:69
|
||||
#: resources/ui/adw/wisps.ui:110 resources/ui/adw/energize-b.ui:37
|
||||
#: resources/ui/adw/energize-b.ui:70 resources/ui/adw/energize-b.ui:95
|
||||
#: resources/ui/adw/pixel-wheel.ui:36 resources/ui/adw/pixel-wheel.ui:69
|
||||
#: resources/ui/adw/pixel-wheel.ui:102 resources/ui/adw/glide.ui:36
|
||||
#: resources/ui/adw/glide.ui:69 resources/ui/adw/glide.ui:102
|
||||
#: resources/ui/adw/glide.ui:135 resources/ui/adw/glide.ui:168
|
||||
#: resources/ui/adw/apparition.ui:37 resources/ui/adw/apparition.ui:70
|
||||
#: resources/ui/adw/apparition.ui:103 resources/ui/adw/apparition.ui:136
|
||||
#: resources/ui/adw/apparition.ui:169 resources/ui/adw/portal.ui:36
|
||||
#: resources/ui/adw/portal.ui:69 resources/ui/adw/portal.ui:102
|
||||
#: resources/ui/adw/portal.ui:135 resources/ui/adw/portal.ui:160
|
||||
#: resources/ui/adw/incinerate.ui:36 resources/ui/adw/incinerate.ui:69
|
||||
#: resources/ui/adw/incinerate.ui:102 resources/ui/adw/incinerate.ui:125
|
||||
#: resources/ui/adw/incinerate.ui:150 resources/ui/adw/hexagon.ui:36
|
||||
#: resources/ui/adw/hexagon.ui:69 resources/ui/adw/hexagon.ui:102
|
||||
#: resources/ui/adw/hexagon.ui:127 resources/ui/adw/hexagon.ui:152
|
||||
#: resources/ui/adw/hexagon.ui:175 resources/ui/adw/fire.ui:52
|
||||
#: resources/ui/adw/fire.ui:85 resources/ui/adw/fire.ui:118
|
||||
#: resources/ui/adw/fire.ui:141 resources/ui/adw/fire.ui:199
|
||||
#: resources/ui/adw/pixel-wipe.ui:36 resources/ui/adw/pixel-wipe.ui:69
|
||||
#: resources/ui/adw/snap.ui:36 resources/ui/adw/snap.ui:69
|
||||
#: resources/ui/adw/snap.ui:94 resources/ui/adw/focus.ui:50
|
||||
#: resources/ui/adw/focus.ui:76 resources/ui/adw/focus.ui:102
|
||||
#: resources/ui/adw/energize-a.ui:36 resources/ui/adw/energize-a.ui:69
|
||||
#: resources/ui/adw/energize-a.ui:94 resources/ui/adw/pixelate.ui:36
|
||||
#: resources/ui/adw/pixelate.ui:69 resources/ui/adw/pixelate.ui:102
|
||||
#: resources/ui/adw/tv.ui:36 resources/ui/adw/tv.ui:61
|
||||
msgid "Reset to Default Value"
|
||||
msgstr "重設為預設值"
|
||||
|
||||
#: resources/ui/adw/broken-glass.ui:48 resources/ui/adw/tv-glitch.ui:47
|
||||
#: resources/ui/adw/glitch.ui:47 resources/ui/adw/matrix.ui:47
|
||||
#: resources/ui/adw/wisps.ui:47 resources/ui/adw/energize-b.ui:48
|
||||
#: resources/ui/adw/glide.ui:47 resources/ui/adw/incinerate.ui:47
|
||||
#: resources/ui/adw/hexagon.ui:47 resources/ui/adw/fire.ui:63
|
||||
#: resources/ui/adw/snap.ui:47 resources/ui/adw/energize-a.ui:47
|
||||
msgid "Scale"
|
||||
msgstr "比例"
|
||||
|
||||
#: resources/ui/adw/broken-glass.ui:81
|
||||
msgid "Gravity"
|
||||
msgstr "重力"
|
||||
|
||||
#: resources/ui/adw/broken-glass.ui:114
|
||||
msgid "Blow Force"
|
||||
msgstr "彈拉力度"
|
||||
|
||||
#: resources/ui/adw/broken-glass.ui:147
|
||||
msgid "Shatter From Pointer Location"
|
||||
msgstr "從遊標位置破碎"
|
||||
|
||||
#: resources/ui/adw/broken-glass.ui:148
|
||||
msgid ""
|
||||
"The shards will fly away from where your mouse pointer was when closing the "
|
||||
"window."
|
||||
msgstr "視窗破碎效果將會從遊標位置開始。"
|
||||
|
||||
#: resources/ui/adw/tv-glitch.ui:80 resources/ui/adw/glitch.ui:80
|
||||
msgid "Strength"
|
||||
msgstr "強度"
|
||||
|
||||
#: resources/ui/adw/tv-glitch.ui:113 resources/ui/adw/glitch.ui:113
|
||||
#: resources/ui/adw/fire.ui:96
|
||||
msgid "Speed"
|
||||
msgstr "速度"
|
||||
|
||||
#: resources/ui/adw/tv-glitch.ui:146 resources/ui/adw/glitch.ui:146
|
||||
#: resources/ui/adw/wisps.ui:80 resources/ui/adw/energize-b.ui:81
|
||||
#: resources/ui/adw/portal.ui:146 resources/ui/adw/incinerate.ui:136
|
||||
#: resources/ui/adw/snap.ui:80 resources/ui/adw/energize-a.ui:80
|
||||
#: resources/ui/adw/tv.ui:47
|
||||
msgid "Color"
|
||||
msgstr "顏色"
|
||||
|
||||
#: resources/ui/adw/matrix.ui:80 resources/ui/adw/apparition.ui:48
|
||||
msgid "Randomness"
|
||||
msgstr "隨機值"
|
||||
|
||||
#: resources/ui/adw/matrix.ui:113
|
||||
msgid "Vertical Overshooting"
|
||||
msgstr "緊身衝擊"
|
||||
|
||||
#: resources/ui/adw/matrix.ui:146
|
||||
msgid "Trail Color"
|
||||
msgstr "尾跡顏色"
|
||||
|
||||
#: resources/ui/adw/matrix.ui:171
|
||||
msgid "Tip Color"
|
||||
msgstr "提示顏色"
|
||||
|
||||
#: resources/ui/adw/doom.ui:47
|
||||
msgid "Horizontal Scale"
|
||||
msgstr "水平比例"
|
||||
|
||||
#: resources/ui/adw/doom.ui:80
|
||||
msgid "Vertical Scale"
|
||||
msgstr "垂直比例"
|
||||
|
||||
#: resources/ui/adw/doom.ui:113 resources/ui/adw/pixel-wheel.ui:80
|
||||
#: resources/ui/adw/pixel-wipe.ui:47 resources/ui/adw/pixelate.ui:80
|
||||
msgid "Pixel Size"
|
||||
msgstr "像素大小"
|
||||
|
||||
#: resources/ui/adw/paint-brush.ui:47
|
||||
msgid "Brush Size"
|
||||
msgstr "筆刷大小"
|
||||
|
||||
#: resources/ui/adw/trex.ui:47
|
||||
msgid "Claw Scratch Scale"
|
||||
msgstr "爪痕大小"
|
||||
|
||||
#: resources/ui/adw/trex.ui:80
|
||||
msgid "Claw Scratch Count"
|
||||
msgstr "爪痕數量"
|
||||
|
||||
#: resources/ui/adw/trex.ui:113
|
||||
msgid "Warp Effect"
|
||||
msgstr "扭曲效果"
|
||||
|
||||
#: resources/ui/adw/trex.ui:146
|
||||
msgid "Flash Color"
|
||||
msgstr "邊緣顏色"
|
||||
|
||||
#: resources/ui/adw/pixel-wheel.ui:47
|
||||
msgid "Spoke Count"
|
||||
msgstr "輻條數量"
|
||||
|
||||
#: resources/ui/adw/glide.ui:80
|
||||
msgid "Squish"
|
||||
msgstr "壓碎程度"
|
||||
|
||||
#: resources/ui/adw/glide.ui:113
|
||||
msgid "Tilt"
|
||||
msgstr "傾斜"
|
||||
|
||||
#: resources/ui/adw/glide.ui:146
|
||||
msgid "Shift"
|
||||
msgstr "變幻"
|
||||
|
||||
#: resources/ui/adw/apparition.ui:81
|
||||
msgid "Twirl Intensity"
|
||||
msgstr "扭曲力度"
|
||||
|
||||
#: resources/ui/adw/apparition.ui:114
|
||||
msgid "Shake Intensity"
|
||||
msgstr "晃動力度"
|
||||
|
||||
#: resources/ui/adw/apparition.ui:147
|
||||
msgid "Suction Intensity"
|
||||
msgstr "吃力力度"
|
||||
|
||||
#: resources/ui/adw/portal.ui:47
|
||||
msgid "Rotation Speed"
|
||||
msgstr "旋轉速度"
|
||||
|
||||
#: resources/ui/adw/portal.ui:80
|
||||
msgid "Whirling"
|
||||
msgstr "迴旋"
|
||||
|
||||
#: resources/ui/adw/portal.ui:113
|
||||
msgid "Details"
|
||||
msgstr "細節"
|
||||
|
||||
#: resources/ui/adw/incinerate.ui:80
|
||||
msgid "Turbulence"
|
||||
msgstr "擾動"
|
||||
|
||||
#: resources/ui/adw/incinerate.ui:113
|
||||
msgid "Start at Pointer"
|
||||
msgstr "從遊標位置開始"
|
||||
|
||||
#: resources/ui/adw/incinerate.ui:114
|
||||
msgid "If disabled, a random location will be chosen."
|
||||
msgstr "如果禁用,將從隨機位置開始。"
|
||||
|
||||
#: resources/ui/adw/hexagon.ui:80
|
||||
msgid "Mesh Line Width"
|
||||
msgstr "網格線寬"
|
||||
|
||||
#: resources/ui/adw/hexagon.ui:113
|
||||
msgid "Line Color"
|
||||
msgstr "線條顏色"
|
||||
|
||||
#: resources/ui/adw/hexagon.ui:138
|
||||
msgid "Glow Color"
|
||||
msgstr "光暈顏色"
|
||||
|
||||
#: resources/ui/adw/hexagon.ui:163
|
||||
msgid "Additive Blending"
|
||||
msgstr "疊加融合"
|
||||
|
||||
#: resources/ui/adw/hexagon.ui:164
|
||||
msgid "You may want to enable this for dark window themes."
|
||||
msgstr "在暗黑視窗主題中,您可能需要此特效。"
|
||||
|
||||
#: resources/ui/adw/fire.ui:14
|
||||
msgid "Presets"
|
||||
msgstr "預設"
|
||||
|
||||
#: resources/ui/adw/fire.ui:19
|
||||
msgid "Choose a Preset"
|
||||
msgstr "選取預設配置"
|
||||
|
||||
#: resources/ui/adw/fire.ui:129
|
||||
msgid "3D Noise"
|
||||
msgstr "3D雜訊"
|
||||
|
||||
#: resources/ui/adw/fire.ui:130
|
||||
msgid "Creates a more dynamic fire but requires more GPU power."
|
||||
msgstr "創造更多動態火焰,但更耗費顯示卡資源。"
|
||||
|
||||
#: resources/ui/adw/fire.ui:152
|
||||
msgid "Gradient"
|
||||
msgstr "漸層色"
|
||||
|
||||
#: resources/ui/adw/focus.ui:61
|
||||
msgid "Blur Amount"
|
||||
msgstr ""
|
||||
|
||||
#: resources/ui/adw/focus.ui:87
|
||||
msgid "Blur Quality"
|
||||
msgstr ""
|
||||
|
||||
#: resources/ui/adw/prefs.ui:65
|
||||
msgid "Effect Profile Constraints"
|
||||
msgstr "效果配置限制"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:66
|
||||
msgid "Define when the current effect settings should be used."
|
||||
msgstr "定義何時使用目前效果設定。"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:70
|
||||
msgid "Application"
|
||||
msgstr "程式"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:81 resources/ui/adw/prefs.ui:102
|
||||
#: resources/ui/adw/prefs.ui:117 resources/ui/adw/prefs.ui:132
|
||||
#: resources/ui/adw/prefs.ui:147 resources/ui/adw/prefs.ui:162
|
||||
msgid "Any"
|
||||
msgstr "任意"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:98
|
||||
msgid "Animation Type"
|
||||
msgstr "動畫類型"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:113
|
||||
msgid "Window Type"
|
||||
msgstr "視窗類型"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:128
|
||||
msgid "Color Scheme"
|
||||
msgstr "色彩方案"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:143
|
||||
msgid "Power Mode"
|
||||
msgstr "電池模式"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:158
|
||||
msgid "Power Profile"
|
||||
msgstr "電源配置"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:179
|
||||
msgid "Advanced Profile Options"
|
||||
msgstr "進階配置選項"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:184
|
||||
msgid "Use this profile even if there are better matching profiles."
|
||||
msgstr "即使有更好匹配的配置文件,也使用此配置。"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:204
|
||||
msgid "Delete this Profile..."
|
||||
msgstr "刪除此配置…"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:223
|
||||
msgid "Effect Selection"
|
||||
msgstr "效果選擇"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:224
|
||||
msgid "If multiple are selected, one is chosen randomly."
|
||||
msgstr "如果多選,則每次隨機。"
|
||||
|
||||
#: resources/ui/adw/prefs.ui:235
|
||||
msgid "Search..."
|
||||
msgstr ""
|
||||
|
||||
#: resources/ui/adw/prefs.ui:250
|
||||
msgid "Enable All"
|
||||
msgstr ""
|
||||
|
||||
#: resources/ui/adw/prefs.ui:256
|
||||
msgid "Disable All"
|
||||
msgstr ""
|
||||
|
||||
#: resources/ui/adw/pixelate.ui:47
|
||||
msgid "Noise"
|
||||
msgstr "雜訊"
|
||||
|
||||
#~ msgid "Gold Sponsors"
|
||||
#~ msgstr "金牌贊助商"
|
||||
|
||||
#~ msgid "Silver Sponsors"
|
||||
#~ msgstr "銀牌贊助商"
|
||||
|
||||
#~ msgid "Bronze Sponsors"
|
||||
#~ msgstr "銅牌贊助商"
|
||||
|
||||
#~ msgid "Past Sponsors"
|
||||
#~ msgstr "往屆贊助商"
|
||||
|
||||
#~ msgid "All"
|
||||
#~ msgstr "全部"
|
||||
|
||||
#~ msgid "None"
|
||||
#~ msgstr "無"
|
||||
@@ -1,82 +0,0 @@
|
||||
{
|
||||
"gold": [
|
||||
{
|
||||
"name": "D3vil0p3r",
|
||||
"url": "https://github.com/D3vil0p3r"
|
||||
},
|
||||
{
|
||||
"name": "Maxence Sebald",
|
||||
"url": ""
|
||||
},
|
||||
{
|
||||
"name": "Dennis ten Hoove",
|
||||
"url": "https://github.com/dennis1248"
|
||||
}
|
||||
],
|
||||
"silver": [
|
||||
{
|
||||
"name": "@danielheadbang",
|
||||
"url": "https://github.com/danielheadbang"
|
||||
},
|
||||
{
|
||||
"name": "@MRR-dev",
|
||||
"url": "https://github.com/MRR-dev"
|
||||
},
|
||||
{
|
||||
"name": "Jorge Castro",
|
||||
"url": "https://github.com/castrojo"
|
||||
}
|
||||
],
|
||||
"bronze": [
|
||||
{
|
||||
"name": "@vlazic",
|
||||
"url": "https://github.com/vlazic"
|
||||
},
|
||||
{
|
||||
"name": "Angel Brielez",
|
||||
"url": "https://github.com/AngelBrielez"
|
||||
}
|
||||
],
|
||||
"past": [
|
||||
{
|
||||
"name": "@taconomix",
|
||||
"url": "https://github.com/taconomix"
|
||||
},
|
||||
{
|
||||
"name": "@enolive",
|
||||
"url": "https://github.com/enolive"
|
||||
},
|
||||
{
|
||||
"name": "@Aggraxis",
|
||||
"url": "https://github.com/Aggraxis"
|
||||
},
|
||||
{
|
||||
"name": "tj3k",
|
||||
"url": "https://twitter.com/tjiiik"
|
||||
},
|
||||
{
|
||||
"name": "@wolfyrion",
|
||||
"url": "https://github.com/wolfyrion"
|
||||
},
|
||||
{
|
||||
"name": "@MrTomRod",
|
||||
"url": "https://github.com/MrTomRod"
|
||||
},
|
||||
{
|
||||
"name": "Pouhiou",
|
||||
"url": ""
|
||||
},
|
||||
{
|
||||
"name": "DAPREMONT Christophe",
|
||||
"url": ""
|
||||
},
|
||||
{
|
||||
"name": "@manero6",
|
||||
"url": "https://github.com/manero6"
|
||||
},
|
||||
{
|
||||
"name": "@RickStanley",
|
||||
"url": "https://github.com/RickStanley"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,416 +1,524 @@
|
||||
[
|
||||
{
|
||||
"Turkish": [
|
||||
[
|
||||
"tcreeper.earth@gmail.com",
|
||||
"TCr3",
|
||||
24
|
||||
],
|
||||
[
|
||||
"muhaaliss@pm.me",
|
||||
"Muha Aliss",
|
||||
59
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"Lithuanian": [
|
||||
[
|
||||
"hazap@hotmail.com",
|
||||
"Moo",
|
||||
50
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"German": [
|
||||
[
|
||||
"juri26@outlook.de",
|
||||
"jagfwajgf",
|
||||
1
|
||||
],
|
||||
[
|
||||
"atalanttore@googlemail.com",
|
||||
"Ettore Atalan",
|
||||
2
|
||||
],
|
||||
[
|
||||
"code@simonschneegans.de",
|
||||
"Simon Schneegans",
|
||||
92
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"Esperanto": [
|
||||
[
|
||||
"phlostically@mailinator.com",
|
||||
"phlostically",
|
||||
81
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"Russian": [
|
||||
[
|
||||
"sergei@racingrebel.com",
|
||||
"\u041c\u0438\u0441\u0442\u0435\u0440 \u041f\u0435\u0440\u0435\u0432\u043e\u0434",
|
||||
11
|
||||
],
|
||||
[
|
||||
"lenemter@gmail.com",
|
||||
"lenemter",
|
||||
16
|
||||
],
|
||||
[
|
||||
"ddaudix@gmail.com",
|
||||
"Daudix UFO",
|
||||
33
|
||||
],
|
||||
[
|
||||
"eg.ermakov2016@yandex.ru",
|
||||
"\u0415\u0433\u043e\u0440 \u0415\u0440\u043c\u0430\u043a\u043e\u0432",
|
||||
39
|
||||
],
|
||||
[
|
||||
"franigoyt@gmail.com",
|
||||
"ANIGO R. (AR)",
|
||||
56
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"Romanian": [
|
||||
[
|
||||
"softexpert@gmail.com",
|
||||
"SoftExpert",
|
||||
101
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"Ukrainian": [
|
||||
[
|
||||
"911us@duck.com",
|
||||
"Petro S.",
|
||||
52
|
||||
],
|
||||
[
|
||||
"yuridm@gmail.com",
|
||||
"\u042e\u0440\u0456\u0439 \u0414\u043c\u0438\u0442\u0440\u0435\u043d\u043a\u043e",
|
||||
53
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"Japanese": [
|
||||
[
|
||||
"ryuichi.ya220@gmail.com",
|
||||
"Ryan Y",
|
||||
96
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"Czech": [
|
||||
[
|
||||
"yuridm@gmail.com",
|
||||
"\u042e\u0440\u0456\u0439 \u0414\u043c\u0438\u0442\u0440\u0435\u043d\u043a\u043e",
|
||||
1
|
||||
],
|
||||
[
|
||||
"jose1711@gmail.com",
|
||||
"Jose Riha",
|
||||
4
|
||||
],
|
||||
[
|
||||
"jiri.doubravsky@gmail.com",
|
||||
"Ji\u0159\u00ed Doubravsk\u00fd",
|
||||
69
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"Portuguese": [
|
||||
[
|
||||
"ssantos@web.de",
|
||||
"ssantos",
|
||||
1
|
||||
],
|
||||
[
|
||||
"dyegoaurelio@gmail.com",
|
||||
"dyegoaurelio",
|
||||
12
|
||||
],
|
||||
[
|
||||
"pedro.hvn.2018@gmail.com",
|
||||
"KrulesExGamer",
|
||||
78
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"Hebrew": [
|
||||
[
|
||||
"hvusvvnkl12345@gmail.com",
|
||||
"\u05d9\u05d4\u05d5\u05d3\u05d4 \u05d0\u05dc\u05d9\u05e1\u05e3",
|
||||
38
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"Polish": [
|
||||
[
|
||||
"sto@tutanota.de",
|
||||
"WaldiS",
|
||||
7
|
||||
],
|
||||
[
|
||||
"gnu.ewm@protonmail.com",
|
||||
"gnu-ewm",
|
||||
11
|
||||
],
|
||||
[
|
||||
"pwrzonca@gmail.com",
|
||||
"Pawe\u0142 Rzo\u0144ca",
|
||||
85
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"Italian": [
|
||||
[
|
||||
"mario03@gmail.com",
|
||||
"Mario",
|
||||
1
|
||||
],
|
||||
[
|
||||
"albano_battistella@hotmail.com",
|
||||
"albanobattistella",
|
||||
104
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"Arabic": [
|
||||
[
|
||||
"dabsantamer@yahoo.com",
|
||||
"tamer dab",
|
||||
7
|
||||
],
|
||||
[
|
||||
"yamen.malik2@gmail.com",
|
||||
"Yamen Malik",
|
||||
8
|
||||
],
|
||||
[
|
||||
"hamzah.abusamak@gmail.com",
|
||||
"bonbonboi",
|
||||
8
|
||||
],
|
||||
[
|
||||
"fawaz27000@hotmail.com",
|
||||
"fawaz006",
|
||||
76
|
||||
]
|
||||
{
|
||||
"email": "fawaz27000@hotmail.com",
|
||||
"full_name": "fawaz006",
|
||||
"change_count": 64
|
||||
},
|
||||
{
|
||||
"email": "dabsantamer@yahoo.com",
|
||||
"full_name": "tamer dab",
|
||||
"change_count": 7
|
||||
},
|
||||
{
|
||||
"email": "yamen.malik2@gmail.com",
|
||||
"full_name": "Yamen Malik",
|
||||
"change_count": 7
|
||||
},
|
||||
{
|
||||
"email": "hamzah.abusamak@gmail.com",
|
||||
"full_name": "bonbonboi",
|
||||
"change_count": 5
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Azerbaijani": [
|
||||
[
|
||||
"xxmn77@gmail.com",
|
||||
"X\u0259yyam Qocayev",
|
||||
76
|
||||
]
|
||||
{
|
||||
"email": "xxmn77@gmail.com",
|
||||
"full_name": "X\u0259yyam Qocayev",
|
||||
"change_count": 63
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Indonesian": [
|
||||
[
|
||||
"randompsyduck@duck.com",
|
||||
"Sir-Ivysaur",
|
||||
87
|
||||
]
|
||||
"Chinese (Simplified Han script)": [
|
||||
{
|
||||
"email": "aerowolf_sn@qq.com",
|
||||
"full_name": "aerowolf",
|
||||
"change_count": 101
|
||||
},
|
||||
{
|
||||
"email": "poonsters6@gmail.com",
|
||||
"full_name": "merelymyself",
|
||||
"change_count": 32
|
||||
},
|
||||
{
|
||||
"email": "lyuutau@outlook.com",
|
||||
"full_name": "\u5218\u97ec",
|
||||
"change_count": 30
|
||||
},
|
||||
{
|
||||
"email": "coelacanthushex@gmail.com",
|
||||
"full_name": "Celeste Liu",
|
||||
"change_count": 3
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Chinese (Traditional Han script)": [
|
||||
{
|
||||
"email": "ghost20090105@gmail.com",
|
||||
"full_name": "GholtsMxv",
|
||||
"change_count": 120
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Czech": [
|
||||
{
|
||||
"email": "6325410@seznam.cz",
|
||||
"full_name": "Miraficus",
|
||||
"change_count": 77
|
||||
},
|
||||
{
|
||||
"email": "jiri.doubravsky@gmail.com",
|
||||
"full_name": "Ji\u0159\u00ed Doubravsk\u00fd",
|
||||
"change_count": 60
|
||||
},
|
||||
{
|
||||
"email": "jose1711@gmail.com",
|
||||
"full_name": "Jose Riha",
|
||||
"change_count": 4
|
||||
},
|
||||
{
|
||||
"email": "yuridm@gmail.com",
|
||||
"full_name": "\u042e\u0440\u0456\u0439 \u0414\u043c\u0438\u0442\u0440\u0435\u043d\u043a\u043e",
|
||||
"change_count": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Danish": [
|
||||
{
|
||||
"email": "symmetricalmegalomania@gmail.com",
|
||||
"full_name": "symegac",
|
||||
"change_count": 129
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Dutch": [
|
||||
[
|
||||
"code@simonschneegans.de",
|
||||
"Simon Schneegans",
|
||||
1
|
||||
],
|
||||
[
|
||||
"vistausss@fastmail.com",
|
||||
"Heimen Stoffels",
|
||||
105
|
||||
]
|
||||
{
|
||||
"email": "vistausss@fastmail.com",
|
||||
"full_name": "Heimen Stoffels",
|
||||
"change_count": 122
|
||||
},
|
||||
{
|
||||
"email": "philip.goto@gmail.com",
|
||||
"full_name": "Philip Goto",
|
||||
"change_count": 5
|
||||
},
|
||||
{
|
||||
"email": "code@simonschneegans.de",
|
||||
"full_name": "Simon Schneegans",
|
||||
"change_count": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Spanish": [
|
||||
[
|
||||
"jorgec2005@gmail.com",
|
||||
"Jorge C",
|
||||
5
|
||||
],
|
||||
[
|
||||
"dev.n47os@aleeas.com",
|
||||
"Ulices",
|
||||
6
|
||||
],
|
||||
[
|
||||
"fitojb@ubuntu.com",
|
||||
"Adolfo Jayme Barrientos",
|
||||
9
|
||||
],
|
||||
[
|
||||
"andres.segarra.aparicio@gmail.com",
|
||||
"Andres Segarra",
|
||||
10
|
||||
],
|
||||
[
|
||||
"fran-carro@hotmail.es",
|
||||
"gallegonovato",
|
||||
17
|
||||
],
|
||||
[
|
||||
"oscfdezdz@tuta.io",
|
||||
"\u00d3scar Fern\u00e1ndez D\u00edaz",
|
||||
69
|
||||
]
|
||||
"English": [
|
||||
{
|
||||
"email": "softexpert@gmail.com",
|
||||
"full_name": "SoftExpert",
|
||||
"change_count": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"French": [
|
||||
[
|
||||
"matshot03@gmail.com",
|
||||
"Mathis Chabrier",
|
||||
5
|
||||
],
|
||||
[
|
||||
"redxxiii@zaclys.net",
|
||||
"Reda",
|
||||
13
|
||||
],
|
||||
[
|
||||
"softexpert@gmail.com",
|
||||
"SoftExpert",
|
||||
17
|
||||
],
|
||||
[
|
||||
"mathieu.bousquet2@gmail.com",
|
||||
"Mathieu B.",
|
||||
28
|
||||
],
|
||||
[
|
||||
"theo.remon+weblate@uswery.eu",
|
||||
"Th\u00e9o Remon",
|
||||
30
|
||||
],
|
||||
[
|
||||
"bonnemainsnathan@gmail.com",
|
||||
"Nathan",
|
||||
42
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"Swedish": [
|
||||
[
|
||||
"obslsessed@duck.com",
|
||||
"obslsessed",
|
||||
5
|
||||
],
|
||||
[
|
||||
"droidbittin@gmail.com",
|
||||
"Luna Jernberg",
|
||||
10
|
||||
],
|
||||
[
|
||||
"swedishsailfishosuser@tutanota.com",
|
||||
"Kristoffer Grundstr\u00f6m",
|
||||
55
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"Persian": [
|
||||
[
|
||||
"eshagh094@gmail.com",
|
||||
"Eshagh shahidani",
|
||||
72
|
||||
]
|
||||
"Esperanto": [
|
||||
{
|
||||
"email": "phlostically@mailinator.com",
|
||||
"full_name": "phlostically",
|
||||
"change_count": 68
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Finnish": [
|
||||
[
|
||||
"jiri.gronroos@iki.fi",
|
||||
"Jiri Gr\u00f6nroos",
|
||||
54
|
||||
]
|
||||
{
|
||||
"email": "jiri.gronroos@iki.fi",
|
||||
"full_name": "Jiri Gr\u00f6nroos",
|
||||
"change_count": 43
|
||||
},
|
||||
{
|
||||
"email": "jouko.tiilikainen@gmail.com",
|
||||
"full_name": "Tinde (Joke)",
|
||||
"change_count": 3
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"French": [
|
||||
{
|
||||
"email": "softexpert@gmail.com",
|
||||
"full_name": "SoftExpert",
|
||||
"change_count": 52
|
||||
},
|
||||
{
|
||||
"email": "bonnemainsnathan@gmail.com",
|
||||
"full_name": "Nathan",
|
||||
"change_count": 38
|
||||
},
|
||||
{
|
||||
"email": "mathieu.bousquet2@gmail.com",
|
||||
"full_name": "Mathieu B.",
|
||||
"change_count": 26
|
||||
},
|
||||
{
|
||||
"email": "theo.remon+weblate@uswery.eu",
|
||||
"full_name": "Th\u00e9o Remon",
|
||||
"change_count": 22
|
||||
},
|
||||
{
|
||||
"email": "redxxiii@zaclys.net",
|
||||
"full_name": "Reda",
|
||||
"change_count": 6
|
||||
},
|
||||
{
|
||||
"email": "brice.laurencin@gmail.com",
|
||||
"full_name": "Brice Laurencin",
|
||||
"change_count": 5
|
||||
},
|
||||
{
|
||||
"email": "matshot03@gmail.com",
|
||||
"full_name": "Mathis Chabrier",
|
||||
"change_count": 2
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"German": [
|
||||
{
|
||||
"email": "code@simonschneegans.de",
|
||||
"full_name": "Simon Schneegans",
|
||||
"change_count": 123
|
||||
},
|
||||
{
|
||||
"email": "atalanttore@googlemail.com",
|
||||
"full_name": "Ettore Atalan",
|
||||
"change_count": 3
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Hebrew": [
|
||||
{
|
||||
"email": "hvusvvnkl12345@gmail.com",
|
||||
"full_name": "\u05d9\u05d4\u05d5\u05d3\u05d4 \u05d0\u05dc\u05d9\u05e1\u05e3",
|
||||
"change_count": 33
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Hindi": [
|
||||
{
|
||||
"email": "weblate.scrambled777@simplelogin.com",
|
||||
"full_name": "Scrambled777",
|
||||
"change_count": 154
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Hungarian": [
|
||||
{
|
||||
"email": "atomkapa@gmail.com",
|
||||
"full_name": "atomkapa atomkapa",
|
||||
"change_count": 87
|
||||
},
|
||||
{
|
||||
"email": "superh552@gmail.com",
|
||||
"full_name": "KinteLiX",
|
||||
"change_count": 75
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Indonesian": [
|
||||
{
|
||||
"email": "randompsyduck@duck.com",
|
||||
"full_name": "Sir-Ivysaur",
|
||||
"change_count": 71
|
||||
},
|
||||
{
|
||||
"email": "rezaalmanda27@gmail.com",
|
||||
"full_name": "Reza Almanda",
|
||||
"change_count": 56
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Italian": [
|
||||
{
|
||||
"email": "albano_battistella@hotmail.com",
|
||||
"full_name": "albanobattistella",
|
||||
"change_count": 131
|
||||
},
|
||||
{
|
||||
"email": "mceyes@protonmail.com",
|
||||
"full_name": "Frankie McEyes",
|
||||
"change_count": 2
|
||||
},
|
||||
{ "email": "mario03@gmail.com", "full_name": "Mario", "change_count": 1 }
|
||||
]
|
||||
},
|
||||
{
|
||||
"Japanese": [
|
||||
{
|
||||
"email": "ryuichi.ya220@gmail.com",
|
||||
"full_name": "Ryan Y",
|
||||
"change_count": 75
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Korean": [
|
||||
[
|
||||
"darkcircle.0426@gmail.com",
|
||||
"Seong-ho Cho",
|
||||
74
|
||||
]
|
||||
{
|
||||
"email": "darkcircle.0426@gmail.com",
|
||||
"full_name": "Seong-ho Cho",
|
||||
"change_count": 128
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Slovak": [
|
||||
[
|
||||
"jose1711@gmail.com",
|
||||
"Jose Riha",
|
||||
82
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"Chinese (Simplified)": [
|
||||
[
|
||||
"coelacanthushex@gmail.com",
|
||||
"Celeste Liu",
|
||||
3
|
||||
],
|
||||
[
|
||||
"ourmicroid@outlook.com",
|
||||
"joe",
|
||||
4
|
||||
],
|
||||
[
|
||||
"lyuutau@outlook.com",
|
||||
"\u5218\u97ec",
|
||||
35
|
||||
],
|
||||
[
|
||||
"poonsters6@gmail.com",
|
||||
"merelymyself",
|
||||
39
|
||||
],
|
||||
[
|
||||
"aerowolf@tom.com",
|
||||
"aerowolf",
|
||||
49
|
||||
]
|
||||
"Lithuanian": [
|
||||
{ "email": "hazap@hotmail.com", "full_name": "Moo", "change_count": 79 }
|
||||
]
|
||||
},
|
||||
{
|
||||
"Norwegian Bokm\u00e5l": [
|
||||
[
|
||||
"code@simonschneegans.de",
|
||||
"Simon Schneegans",
|
||||
1
|
||||
],
|
||||
[
|
||||
"epost@anotheragency.no",
|
||||
"Allan Nordh\u00f8y",
|
||||
47
|
||||
]
|
||||
{
|
||||
"email": "epost@anotheragency.no",
|
||||
"full_name": "Allan Nordh\u00f8y",
|
||||
"change_count": 40
|
||||
},
|
||||
{
|
||||
"email": "code@simonschneegans.de",
|
||||
"full_name": "Simon Schneegans",
|
||||
"change_count": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Persian": [
|
||||
{
|
||||
"email": "lijeyol367@nickolis.com",
|
||||
"full_name": "lijeyol367",
|
||||
"change_count": 80
|
||||
},
|
||||
{
|
||||
"email": "eshagh094@gmail.com",
|
||||
"full_name": "Eshagh shahidani",
|
||||
"change_count": 61
|
||||
},
|
||||
{
|
||||
"email": "dani.behzi@ubuntu.com",
|
||||
"full_name": "Danial Behzadi",
|
||||
"change_count": 39
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Polish": [
|
||||
{
|
||||
"email": "pwrzonca@gmail.com",
|
||||
"full_name": "Pawe\u0142 Rzo\u0144ca",
|
||||
"change_count": 73
|
||||
},
|
||||
{ "email": "sto@tutanota.de", "full_name": "WaldiS", "change_count": 38 },
|
||||
{
|
||||
"email": "gnu.ewm@protonmail.com",
|
||||
"full_name": "Eryk Michalak",
|
||||
"change_count": 10
|
||||
},
|
||||
{
|
||||
"email": "krzys.chorzempa@gmail.com",
|
||||
"full_name": "Krzysztof Chorzempa",
|
||||
"change_count": 4
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Portuguese": [
|
||||
{
|
||||
"email": "pedro.hvn.2018@gmail.com",
|
||||
"full_name": "KrulesExGamer",
|
||||
"change_count": 65
|
||||
},
|
||||
{ "email": "ssantos@web.de", "full_name": "ssantos", "change_count": 55 },
|
||||
{
|
||||
"email": "dyegoaurelio@gmail.com",
|
||||
"full_name": "dyegoaurelio",
|
||||
"change_count": 8
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Portuguese (Brazil)": [
|
||||
{
|
||||
"email": "mr-isaac@ig.com.br",
|
||||
"full_name": "Isaac Dias",
|
||||
"change_count": 89
|
||||
},
|
||||
{
|
||||
"email": "fefehex12@gmail.com",
|
||||
"full_name": "Fernando Lopes",
|
||||
"change_count": 49
|
||||
},
|
||||
{
|
||||
"email": "gutojusto22@gmail.com",
|
||||
"full_name": "Gustavo",
|
||||
"change_count": 24
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Romanian": [
|
||||
{
|
||||
"email": "softexpert@gmail.com",
|
||||
"full_name": "SoftExpert",
|
||||
"change_count": 126
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Russian": [
|
||||
{
|
||||
"email": "lenemter@gmail.com",
|
||||
"full_name": "lenemter",
|
||||
"change_count": 49
|
||||
},
|
||||
{
|
||||
"email": "franigoyt@gmail.com",
|
||||
"full_name": "ANIGO R. (AR)",
|
||||
"change_count": 45
|
||||
},
|
||||
{
|
||||
"email": "eg.ermakov2016@yandex.ru",
|
||||
"full_name": "\u0415\u0433\u043e\u0440 \u0415\u0440\u043c\u0430\u043a\u043e\u0432",
|
||||
"change_count": 33
|
||||
},
|
||||
{
|
||||
"email": "ddaudix@gmail.com",
|
||||
"full_name": "David Lapshin",
|
||||
"change_count": 31
|
||||
},
|
||||
{
|
||||
"email": "sergei@racingrebel.com",
|
||||
"full_name": "\u041c\u0438\u0441\u0442\u0435\u0440 \u041f\u0435\u0440\u0435\u0432\u043e\u0434",
|
||||
"change_count": 11
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Slovak": [
|
||||
{
|
||||
"email": "jose1711@gmail.com",
|
||||
"full_name": "Jose Riha",
|
||||
"change_count": 124
|
||||
},
|
||||
{
|
||||
"email": "salka.milan@googlemail.com",
|
||||
"full_name": "Milan \u0160alka",
|
||||
"change_count": 10
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Spanish": [
|
||||
{
|
||||
"email": "oscfdezdz@tuta.io",
|
||||
"full_name": "\u00d3scar Fern\u00e1ndez D\u00edaz",
|
||||
"change_count": 59
|
||||
},
|
||||
{
|
||||
"email": "hasecilu@tuta.io",
|
||||
"full_name": "Ulices",
|
||||
"change_count": 35
|
||||
},
|
||||
{
|
||||
"email": "fran-carro@hotmail.es",
|
||||
"full_name": "gallegonovato",
|
||||
"change_count": 25
|
||||
},
|
||||
{
|
||||
"email": "andres.segarra.aparicio@gmail.com",
|
||||
"full_name": "Andres Segarra",
|
||||
"change_count": 10
|
||||
},
|
||||
{
|
||||
"email": "fitojb@ubuntu.com",
|
||||
"full_name": "Adolfo Jayme Barrientos",
|
||||
"change_count": 7
|
||||
},
|
||||
{
|
||||
"email": "jorgec2005@gmail.com",
|
||||
"full_name": "Jorge C",
|
||||
"change_count": 4
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Swedish": [
|
||||
{
|
||||
"email": "swedishsailfishosuser@tutanota.com",
|
||||
"full_name": "Kristoffer Grundstr\u00f6m",
|
||||
"change_count": 46
|
||||
},
|
||||
{
|
||||
"email": "droidbittin@gmail.com",
|
||||
"full_name": "Luna Jernberg",
|
||||
"change_count": 9
|
||||
},
|
||||
{
|
||||
"email": "obslsessed@duck.com",
|
||||
"full_name": "obslsessed",
|
||||
"change_count": 5
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Turkish": [
|
||||
{
|
||||
"email": "noreply+13144@weblate.org",
|
||||
"full_name": "Deleted User",
|
||||
"change_count": 72
|
||||
},
|
||||
{
|
||||
"email": "muhaaliss@pm.me",
|
||||
"full_name": "Muha Aliss",
|
||||
"change_count": 48
|
||||
},
|
||||
{
|
||||
"email": "tcreeper.earth@gmail.com",
|
||||
"full_name": "TCr3",
|
||||
"change_count": 24
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Ukrainian": [
|
||||
{
|
||||
"email": "yuridm@gmail.com",
|
||||
"full_name": "\u042e\u0440\u0456\u0439 \u0414\u043c\u0438\u0442\u0440\u0435\u043d\u043a\u043e",
|
||||
"change_count": 44
|
||||
},
|
||||
{
|
||||
"email": "911us@duck.com",
|
||||
"full_name": "Petro S.",
|
||||
"change_count": 44
|
||||
},
|
||||
{
|
||||
"email": "cakestwix1@gmail.com",
|
||||
"full_name": "CakesTwix",
|
||||
"change_count": 35
|
||||
},
|
||||
{
|
||||
"email": "sergiy.goncharuk.1@gmail.com",
|
||||
"full_name": "\u0421\u0435\u0440\u0433\u0456\u0439",
|
||||
"change_count": 4
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
]
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
/*
|
||||
SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de>
|
||||
SPDX-License-Identifier: CC0-1.0
|
||||
*/
|
||||
|
||||
.pill-button {
|
||||
border-radius: 9999px;
|
||||
}
|
||||
|
After Width: | Height: | Size: 955 KiB |
@@ -0,0 +1,45 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="16"
|
||||
height="16"
|
||||
version="1.1"
|
||||
id="svg859"
|
||||
sodipodi:docname="bmw-copy-effects-symbolic.svg"
|
||||
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs863" />
|
||||
<sodipodi:namedview
|
||||
id="namedview861"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
showgrid="true"
|
||||
inkscape:zoom="39.949625"
|
||||
inkscape:cx="3.1915194"
|
||||
inkscape:cy="6.7334801"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1163"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg859">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid963" />
|
||||
</sodipodi:namedview>
|
||||
<g
|
||||
fill="#222222"
|
||||
id="g951"
|
||||
transform="rotate(-90,8.5,8.5)">
|
||||
<path
|
||||
id="path949"
|
||||
d="M 11,5 H 10 C 9.742188,5 9.472656,5.128906 9.28125,5.3125 L 9,5.59375 V 0 H 7 V 5.59375 L 6.71875,5.3125 C 6.527344,5.128906 6.257812,5 6,5 H 5 V 6 C 5,6 5.089844,6.550781 5.28125,6.75 L 8,9.40625 10.71875,6.75 C 10.910156,6.550781 11,6.308594 11,6 Z m 0,0 M 6,2 H 3 C 2,2 2,3 2,3 v 10 c 0,0 0,1 1,1 h 11 c 1,0 1,-1 1,-1 v -3 c 0.14,0 0.28,0 0.41,-0.03 C 16.32,9.78 17,8.97 17,8 17,6.9 16.1,6 15,6 V 3 C 15,2 14,2 14,2 h -4 v 2 h 3 v 1 h -1 v 6 h 1 v 1 H 4 V 4 H 6 Z M 16,8 C 16,8.41 15.73,8.75 15.38,8.91 15.26,8.96 15.14,9 15,9 14.45,9 14,8.55 14,8 c 0,-0.55 0.45,-1 1,-1 0.55,0 1,0.45 1,1 z" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.8 KiB |
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="16px" viewBox="0 0 16 16" width="16px"><path d="m 11.574219 0.402344 l -2.574219 2.597656 l 3.984375 4.074219 l 2.648437 -2.671875 c 0.484376 -0.484375 0.425782 -1.515625 0 -1.941406 l -2.058593 -2.058594 c -0.4375 -0.4375002 -1.441407 -0.554688 -2 0 z m -3.574219 3.597656 l -8 8 v 4 h 4.058594 l 7.925781 -7.925781 z m 0 0" fill="#222222"/></svg>
|
||||
|
After Width: | Height: | Size: 436 B |
@@ -0,0 +1,45 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="16"
|
||||
height="16"
|
||||
version="1.1"
|
||||
id="svg859"
|
||||
sodipodi:docname="bmw-paste-effects-symbolic.svg"
|
||||
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs863" />
|
||||
<sodipodi:namedview
|
||||
id="namedview861"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
showgrid="true"
|
||||
inkscape:zoom="30.619781"
|
||||
inkscape:cx="14.02688"
|
||||
inkscape:cy="7.5114841"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1163"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg859">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid963" />
|
||||
</sodipodi:namedview>
|
||||
<g
|
||||
fill="#222222"
|
||||
id="g951"
|
||||
transform="rotate(-90,11.5,5.5)">
|
||||
<path
|
||||
id="path949"
|
||||
d="M 11,5 H 10 C 9.742188,5 9.472656,5.128906 9.28125,5.3125 L 9,5.59375 V 1 H 7 V 5.59375 L 6.71875,5.3125 C 6.527344,5.128906 6.257812,5 6,5 H 5 V 6 C 5,6 5.089844,6.550781 5.28125,6.75 L 8,9.40625 10.71875,6.75 C 10.910156,6.550781 11,6.308594 11,6 Z M 16,2 C 16,2.41 15.73,2.75 15.38,2.91 15.26,2.96 15.14,3 15,3 14.45,3 14,2.55 14,2 c 0,-0.55 0.45,-1 1,-1 0.55,0 1,0.45 1,1 z m -3,-4 v 1 h -1 v 6 h 1 v 1 h -1 c 0,1 0,1 -1,2 h 3 c 1,0 1,-1 1,-1 V 4 C 15.14,4 15.28,4 15.41,3.97 16.32,3.78 17,2.97 17,2 17,0.9 16.1,0 15,0 V -3 C 15,-4 14,-4 14,-4 9.9636199,-4 6.886735,-4 3,-4 2,-4 2,-3 2,-3 V 7 C 2,7 2,8 3,8 H 5.048681 C 4,7 4,7 4,6 v -8 c 3.0556612,0 6.334851,0 9,0 z" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.8 KiB |
@@ -0,0 +1,55 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
height="16px"
|
||||
viewBox="0 0 16 16"
|
||||
width="16px"
|
||||
version="1.1"
|
||||
id="svg880"
|
||||
sodipodi:docname="bmw-select-app-symbolic.svg"
|
||||
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs884" />
|
||||
<sodipodi:namedview
|
||||
id="namedview882"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
showgrid="true"
|
||||
inkscape:zoom="57.412587"
|
||||
inkscape:cx="8.0905604"
|
||||
inkscape:cy="8.0992692"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1163"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg880">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid975" />
|
||||
</sodipodi:namedview>
|
||||
<path
|
||||
d="m 7,11 v 5 h 2 v -5 m 2,-2 h 5 V 7 H 11 M 9,5 V 0 H 7 V 5 M 5.0431967,7 H 0 v 2 h 4.9715524"
|
||||
fill="#222222"
|
||||
id="path878"
|
||||
sodipodi:nodetypes="cccccccccccccccc" />
|
||||
<path
|
||||
id="path966"
|
||||
d="M 14.708984 10 L 12.580078 10 C 12.074974 11.149358 11.149798 12.075226 10 12.580078 L 10 14.707031 C 12.252335 14.032781 14.034893 12.252099 14.708984 10 z " />
|
||||
<path
|
||||
id="path2645"
|
||||
d="M 10 1.2929688 L 10 3.4199219 C 11.149798 3.9247737 12.074974 4.8506419 12.580078 6 L 14.708984 6 C 14.034893 3.7479009 12.252335 1.9672199 10 1.2929688 z " />
|
||||
<path
|
||||
id="path2107"
|
||||
d="M 3.421875 10 L 1.2910156 10 C 1.965107 12.252099 3.7476652 14.032781 6 14.707031 L 6 12.580078 C 4.8504712 12.075345 3.9270579 11.148985 3.421875 10 z " />
|
||||
<path
|
||||
id="path2456"
|
||||
d="M 6 1.2929688 C 3.7476652 1.9672199 1.965107 3.7479009 1.2910156 6 L 3.421875 6 C 3.9270579 4.8510155 4.8504712 3.9246556 6 3.4199219 L 6 1.2929688 z " />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.0 KiB |
@@ -0,0 +1,13 @@
|
||||
<!--
|
||||
SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de>
|
||||
SPDX-License-Identifier: CC0-1.0
|
||||
-->
|
||||
|
||||
<node>
|
||||
<interface name="org.gnome.shell.extensions.BurnMyWindows">
|
||||
<method name="PickWindow" />
|
||||
<signal name="WindowPicked">
|
||||
<arg name="window" type="s" />
|
||||
</signal>
|
||||
</interface>
|
||||
</node>
|
||||
@@ -31,7 +31,7 @@ void main() {
|
||||
float progress = uForOpening ? 1.0 - uProgress : uProgress;
|
||||
|
||||
// Draw the individual shard layers.
|
||||
for (float i = 0; i < SHARD_LAYERS; ++i) {
|
||||
for (float i = 0.0; i < SHARD_LAYERS; ++i) {
|
||||
|
||||
// To enable drawing shards outside of the window bounds, the actor was scaled
|
||||
// by ACTOR_SCALE. Here we scale and move the texture coordinates so that the
|
||||
@@ -51,8 +51,8 @@ void main() {
|
||||
|
||||
// Move down each layer a bit.
|
||||
float gravity =
|
||||
(uForOpening ? -1.0 : 1.0) * uGravity * 0.1 * (i + 1) * progress * progress;
|
||||
coords += vec2(0, gravity);
|
||||
(uForOpening ? -1.0 : 1.0) * uGravity * 0.1 * (i + 1.0) * progress * progress;
|
||||
coords += vec2(0.0, gravity);
|
||||
|
||||
// Restore correct position.
|
||||
coords += uEpicenter;
|
||||
@@ -66,10 +66,10 @@ void main() {
|
||||
// the bin of the current shard.
|
||||
float shardGroup = floor(shardMap.g * SHARD_LAYERS * 0.999);
|
||||
|
||||
if (shardGroup == i && (shardMap.x - pow(progress + 0.1, 2)) > 0.0) {
|
||||
if (shardGroup == i && (shardMap.x - pow(progress + 0.1, 2.0)) > 0.0) {
|
||||
oColor = getInputColor(coords);
|
||||
}
|
||||
}
|
||||
|
||||
setOutputColor(oColor);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,13 +20,14 @@
|
||||
|
||||
// Each shader can access these standard input values:
|
||||
|
||||
// vec2 iTexCoord: Texture coordinates for retrieving the window input color.
|
||||
// bool uForOpening: True if a window-open animation is ongoing, false otherwise.
|
||||
// float uProgress: A value which transitions from 0 to 1 during the animation.
|
||||
// float uDuration: The duration of the current animation in seconds.
|
||||
// vec2 uSize: The size of uTexture in pixels.
|
||||
// float uPadding: The empty area around the actual window (e.g. where the shadow
|
||||
// is drawn). For now, this will only be set on GNOME.
|
||||
// vec2 iTexCoord: Texture coordinates for retrieving the window input color.
|
||||
// bool uIsFullscreen: True if the window is maximized or in fullscreen mode.
|
||||
// bool uForOpening: True if a window-open animation is ongoing, false otherwise.
|
||||
// float uProgress: A value which transitions from 0 to 1 during the animation.
|
||||
// float uDuration: The duration of the current animation in seconds.
|
||||
// vec2 uSize: The size of uTexture in pixels.
|
||||
// float uPadding: The empty area around the actual window (e.g. where the shadow
|
||||
// is drawn). For now, this will only be set on GNOME.
|
||||
|
||||
// Furthermore, there are two global methods for reading the window input color and
|
||||
// setting the shader output color. Both methods assume straight alpha:
|
||||
@@ -35,11 +36,16 @@
|
||||
// void setOutputColor(vec4 outColor)
|
||||
|
||||
uniform bool uForOpening;
|
||||
uniform bool uIsFullscreen;
|
||||
uniform float uProgress;
|
||||
uniform float uDuration;
|
||||
|
||||
#if defined(KWIN) // --------------------------------------------------------------------
|
||||
|
||||
#if defined(PLASMA6)
|
||||
#include "colormanagement.glsl"
|
||||
#endif
|
||||
|
||||
uniform sampler2D sampler;
|
||||
uniform int textureWidth;
|
||||
uniform int textureHeight;
|
||||
@@ -62,11 +68,29 @@ vec4 getInputColor(vec2 coords) {
|
||||
}
|
||||
|
||||
void setOutputColor(vec4 outColor) {
|
||||
|
||||
// If a uniform is not used, it will be optimized away. This condition is always
|
||||
// false, but it will prevent the compiler from optimizing away the uniforms uForOpening
|
||||
// and uIsFullscreen. On KWin, we need to do this as we do not have a way to check if a
|
||||
// uniform is used in the shader.
|
||||
if (outColor.a > 1000.0 && uForOpening && uIsFullscreen) {
|
||||
outColor = vec4(0.0);
|
||||
}
|
||||
|
||||
fragColor = vec4(outColor.rgb * outColor.a, outColor.a);
|
||||
|
||||
#if defined(PLASMA6)
|
||||
fragColor = sourceEncodingToNitsInDestinationColorspace(fragColor);
|
||||
fragColor = nitsToDestinationEncoding(fragColor);
|
||||
#endif
|
||||
}
|
||||
|
||||
#elif defined(KWIN_LEGACY) // -----------------------------------------------------------
|
||||
|
||||
#if defined(PLASMA6)
|
||||
#include "colormanagement.glsl"
|
||||
#endif
|
||||
|
||||
uniform sampler2D sampler;
|
||||
uniform int textureWidth;
|
||||
uniform int textureHeight;
|
||||
@@ -88,7 +112,20 @@ vec4 getInputColor(vec2 coords) {
|
||||
}
|
||||
|
||||
void setOutputColor(vec4 outColor) {
|
||||
// If a uniform is not used, it will be optimized away. This condition is always
|
||||
// false, but it will prevent the compiler from optimizing away the uniforms uForOpening
|
||||
// and uIsFullscreen. On KWin, we need to do this as we do not have a way to check if a
|
||||
// uniform is used in the shader.
|
||||
if (outColor.a > 1000.0 && uForOpening && uIsFullscreen) {
|
||||
outColor = vec4(0.0);
|
||||
}
|
||||
|
||||
gl_FragColor = vec4(outColor.rgb * outColor.a, outColor.a);
|
||||
|
||||
#if defined(PLASMA6)
|
||||
fragColor = sourceEncodingToNitsInDestinationColorspace(fragColor);
|
||||
fragColor = nitsToDestinationEncoding(fragColor);
|
||||
#endif
|
||||
}
|
||||
|
||||
#else // GNOME --------------------------------------------------------------------------
|
||||
@@ -99,7 +136,7 @@ uniform vec2 uSize;
|
||||
uniform float uPadding;
|
||||
|
||||
// On GNOME, we set iTexCoord to be an alias for the cogl variables.
|
||||
vec2 iTexCoord = cogl_tex_coord_in[0].st;
|
||||
#define iTexCoord vec2(cogl_tex_coord_in[0])
|
||||
|
||||
// Shell.GLSLEffect uses straight alpha. So we have to convert from premultiplied.
|
||||
vec4 getInputColor(vec2 coords) {
|
||||
@@ -168,14 +205,18 @@ float easeOutBack(float x, float e) {
|
||||
// --------------------------------------------------------------------- edge mask helpers
|
||||
|
||||
// This method returns a mask which smoothly transitions towards zero when approaching
|
||||
// the window's borders. There is a variant which takes the transition area width in
|
||||
// the window's borders. If the window is currently maximized or in fullscreen mode, this
|
||||
// will return 1.0 everywhere. There is a variant which takes the transition area width in
|
||||
// pixels and one which takes this as a percentage.
|
||||
float getEdgeMask(vec2 uv, vec2 maxUV, float fadeWidth) {
|
||||
float mask = 1.0;
|
||||
mask *= smoothstep(0.0, 1.0, clamp(uv.x / fadeWidth, 0.0, 1.0));
|
||||
mask *= smoothstep(0.0, 1.0, clamp(uv.y / fadeWidth, 0.0, 1.0));
|
||||
mask *= smoothstep(0.0, 1.0, clamp((maxUV.x - uv.x) / fadeWidth, 0.0, 1.0));
|
||||
mask *= smoothstep(0.0, 1.0, clamp((maxUV.y - uv.y) / fadeWidth, 0.0, 1.0));
|
||||
|
||||
if (!uIsFullscreen) {
|
||||
mask *= smoothstep(0.0, 1.0, clamp(uv.x / fadeWidth, 0.0, 1.0));
|
||||
mask *= smoothstep(0.0, 1.0, clamp(uv.y / fadeWidth, 0.0, 1.0));
|
||||
mask *= smoothstep(0.0, 1.0, clamp((maxUV.x - uv.x) / fadeWidth, 0.0, 1.0));
|
||||
mask *= smoothstep(0.0, 1.0, clamp((maxUV.y - uv.y) / fadeWidth, 0.0, 1.0));
|
||||
}
|
||||
|
||||
return mask;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,86 @@
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
// ) ( //
|
||||
// ( /( ( ( ) ( ( ( ( )\ ) ( ( //
|
||||
// )\()) ))\ )( ( ( )\ ) )\))( )\ ( (()/( ( )\))( ( //
|
||||
// ((_)\ /((_|()\ )\ ) )\ '(()/( ((_)()((_) )\ ) ((_)))\((_)()\ )\ //
|
||||
// | |(_|_))( ((_)_(_/( _((_)) )(_)) _(()((_|_)_(_/( _| |((_)(()((_|(_) //
|
||||
// | '_ \ || | '_| ' \)) | ' \()| || | \ V V / | ' \)) _` / _ \ V V (_-< //
|
||||
// |_.__/\_,_|_| |_||_| |_|_|_| \_, | \_/\_/|_|_||_|\__,_\___/\_/\_//__/ //
|
||||
// |__/ //
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// SPDX-FileCopyrightText: Justin Garza JGarza9788@gmail.com
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
// The content from common.glsl is automatically prepended to each shader effect. This
|
||||
// provides the standard input:
|
||||
|
||||
// vec2 iTexCoord: Texture coordinates for retrieving the window input color.
|
||||
// bool uIsFullscreen: True if the window is maximized or in fullscreen mode.
|
||||
// bool uForOpening: True if a window-open animation is ongoing, false otherwise.
|
||||
// float uProgress: A value which transitions from 0 to 1 during the animation.
|
||||
// float uDuration: The duration of the current animation in seconds.
|
||||
// vec2 uSize: The size of uTexture in pixels.
|
||||
// float uPadding: The empty area around the actual window (e.g. where the shadow
|
||||
// is drawn). For now, this will only be set on GNOME.
|
||||
|
||||
// Furthermore, there are two global methods for reading the window input color and
|
||||
// setting the shader output color. Both methods assume straight alpha:
|
||||
|
||||
// vec4 getInputColor(vec2 coords)
|
||||
// void setOutputColor(vec4 outColor)
|
||||
|
||||
|
||||
// Ease-in-out cubic for alpha
|
||||
float easeInOutCubic(float x) {
|
||||
return x < 0.5 ? 4.0 * x * x * x : 1.0 - pow(-2.0 * x + 2.0, 3.0) / 2.0;
|
||||
}
|
||||
|
||||
// Ease-in-out sine for blur
|
||||
float easeInOutSine(float x) {
|
||||
return -(cos(3.14159265 * x) - 1.0) / 2.0;
|
||||
}
|
||||
|
||||
// A simple blur function
|
||||
vec4 blur(vec2 uv, float radius, float samples) {
|
||||
vec4 color = vec4(0.0);
|
||||
|
||||
const float tau = 6.28318530718;
|
||||
const float directions = 15.0;
|
||||
|
||||
for (float d = 0.0; d < tau; d += tau / directions) {
|
||||
for (float s = 0.0; s < 1.0; s += 1.0 / samples) {
|
||||
vec2 offset = vec2(cos(d), sin(d)) * radius * (1.0 - s) / uSize;
|
||||
color += getInputColor(uv + offset);
|
||||
}
|
||||
}
|
||||
|
||||
return color / samples / directions;
|
||||
}
|
||||
|
||||
|
||||
// The width of the fading effect is loaded from the settings.
|
||||
uniform float uBlurAmount;
|
||||
uniform float uBlurQuality;
|
||||
|
||||
void main() {
|
||||
|
||||
float progl = uForOpening ? uProgress : 1.0 - uProgress;
|
||||
|
||||
float easedProgressBlur = easeInOutSine(progl); // Blur easing
|
||||
float easedProgressAlpha = easeInOutCubic(progl); // Alpha easing
|
||||
|
||||
// Control blur amount using easedProgressBlur
|
||||
float blurAmount = mix(uBlurAmount, 0.0, easedProgressBlur);
|
||||
|
||||
// Apply blur
|
||||
vec4 texColor = blur( iTexCoord.st, blurAmount, uBlurQuality);
|
||||
|
||||
// Control alpha using easedProgressAlpha
|
||||
float alpha = easedProgressAlpha;
|
||||
|
||||
// Set final color with alpha transition
|
||||
texColor.a *= alpha;
|
||||
|
||||
setOutputColor(texColor);
|
||||
}
|
||||
@@ -107,12 +107,14 @@ void main() {
|
||||
if ((!uForOpening && gradient > hideThreshold) ||
|
||||
(uForOpening && gradient < hideThreshold)) {
|
||||
|
||||
// We add some distortion in the scorch zone
|
||||
// We add some distortion in the scorch zone. This is only possible if using GLES.
|
||||
vec2 distort = vec2(0.0);
|
||||
|
||||
#ifndef GL_ES
|
||||
if (scorchRange.x < gradient && gradient < scorchRange.y) {
|
||||
distort = vec2(dFdx(gradient), dFdy(gradient)) * scorchMask * 5.0;
|
||||
}
|
||||
#endif
|
||||
|
||||
oColor = getInputColor(iTexCoord + distort);
|
||||
}
|
||||
@@ -154,4 +156,4 @@ void main() {
|
||||
}
|
||||
|
||||
setOutputColor(oColor);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,7 +54,7 @@ vec2 getRain(vec2 fragCoord) {
|
||||
float delay = fract(sin(column) * 78.233) * mix(0.0, 1.0, uRandomness);
|
||||
float speed = fract(cos(column) * 12.989) * mix(0.0, 0.3, uRandomness) + 1.5;
|
||||
|
||||
float distToDrop = (uProgress * 2 - delay) * speed - iTexCoord.y;
|
||||
float distToDrop = (uProgress * 2.0 - delay) * speed - iTexCoord.y;
|
||||
|
||||
float rainAlpha = distToDrop >= 0.0 ? exp(-distToDrop / TRAIL_LENGTH) : 0.0;
|
||||
float windowAlpha = 1.0 - clamp(uSize.y * distToDrop, 0.0, FADE_WIDTH) / FADE_WIDTH;
|
||||
@@ -91,7 +91,7 @@ void main() {
|
||||
|
||||
// This is used to fade out the remaining trails in the end.
|
||||
float finalFade =
|
||||
1 -
|
||||
1.0 -
|
||||
clamp((uProgress - FINAL_FADE_START_TIME) / (1.0 - FINAL_FADE_START_TIME), 0.0, 1.0);
|
||||
float rainAlpha = finalFade * rainMask.x;
|
||||
|
||||
@@ -106,4 +106,4 @@ void main() {
|
||||
// oColor = vec4(vec3(rainMask.y), 1);
|
||||
|
||||
setOutputColor(oColor);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
// ) ( //
|
||||
// ( /( ( ( ) ( ( ( ( )\ ) ( ( //
|
||||
// )\()) ))\ )( ( ( )\ ) )\))( )\ ( (()/( ( )\))( ( //
|
||||
// ((_)\ /((_|()\ )\ ) )\ '(()/( ((_)()((_) )\ ) ((_)))\((_)()\ )\ //
|
||||
// | |(_|_))( ((_)_(_/( _((_)) )(_)) _(()((_|_)_(_/( _| |((_)(()((_|(_) //
|
||||
// | '_ \ || | '_| ' \)) | ' \()| || | \ V V / | ' \)) _` / _ \ V V (_-< //
|
||||
// |_.__/\_,_|_| |_||_| |_|_|_| \_, | \_/\_/|_|_||_|\__,_\___/\_/\_//__/ //
|
||||
// |__/ //
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// SPDX-FileCopyrightText: Simon Schneegans <code@simonschneegans.de>
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
// The content from common.glsl is automatically prepended to each shader effect.
|
||||
|
||||
// See assets/README.md for how this texture was created.
|
||||
uniform sampler2D uBrushTexture;
|
||||
uniform float uBrushSize;
|
||||
|
||||
const float SHADOW_WIDTH = 0.03;
|
||||
const float SHADOW_STEPS = 10.0;
|
||||
|
||||
// Returns 1.0 if the window texture at the given texCoord should be painted.
|
||||
float getMask(vec2 texCoord, float progress) {
|
||||
float brush = texture2D(uBrushTexture, texCoord)[int(uBrushSize - 1.0)];
|
||||
if (uForOpening) {
|
||||
return step(brush, progress);
|
||||
}
|
||||
|
||||
return step(progress, brush);
|
||||
}
|
||||
|
||||
void main() {
|
||||
|
||||
vec4 oColor = getInputColor(iTexCoord.st);
|
||||
|
||||
// This will be 0.0 in the masked-out areas.
|
||||
float mask = getMask(iTexCoord.st, uProgress);
|
||||
|
||||
// Add a simple drop shadow below the remaining parts.
|
||||
if (mask == 0.0) {
|
||||
|
||||
for (float i = 0.0; i < SHADOW_STEPS; ++i) {
|
||||
vec2 shadowTexCoord = iTexCoord.st - vec2(0.0, i * SHADOW_WIDTH / SHADOW_STEPS);
|
||||
float shadowMask = getMask(shadowTexCoord, uProgress);
|
||||
float shadowAlpha = (1.0 - i / SHADOW_STEPS) * shadowMask * getInputColor(shadowTexCoord).a;
|
||||
|
||||
if (shadowAlpha > 0.0) {
|
||||
oColor = vec4(vec3(0.0), shadowAlpha * 0.2);
|
||||
break;
|
||||
}
|
||||
|
||||
// If we arrived at the end of the shadow, make sure to set the alpha to 0.
|
||||
if (i == SHADOW_STEPS - 1.0) {
|
||||
oColor.a = 0.0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
setOutputColor(oColor);
|
||||
}
|
||||