Compare commits
464 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e179ab72fc | |||
| 11e8f2832c | |||
| 61f86a3f29 | |||
| 0fed304f79 | |||
| 02989fd0f7 | |||
| 9900ae19dc | |||
| b9a4d178a8 | |||
| 8815c670ea | |||
| 1e45a69d36 | |||
| 0b7c3e3dbb | |||
| b9563829bb | |||
| 4b26753d83 | |||
| cdb7ff0cec | |||
| c421da905f | |||
| 5a08081cc0 | |||
| ad542d2f77 | |||
| 20e8a0dcc3 | |||
| 87c26eab14 | |||
| 877a53c2fc | |||
| 10e38adf20 | |||
| 2a64ee6993 | |||
| 9d9ef27317 | |||
| 785656d149 | |||
| f8ee696c7c | |||
| aa677b265a | |||
| 9b04e6f44c | |||
| 315aa82d15 | |||
| 0bc41bcb1d | |||
| e59c218c62 | |||
| 880758e470 | |||
| a5ce94c6d3 | |||
| 8a73e58134 | |||
| bfe7a760d1 | |||
| 0d932f4b24 | |||
| 6c1dbe1ee1 | |||
| a125390c5f | |||
| fdb5f3e8ef | |||
| d64feb040d | |||
| 987409b742 | |||
| e14efb3dfc | |||
| 7e3262a58d | |||
| f670aa5cc3 | |||
| da2ed2d695 | |||
| 23e5cd30a4 | |||
| 42a85d81a6 | |||
| 1d65af715f | |||
| 7ae2ddcb95 | |||
| 0abb0f4b57 | |||
| dfcff4b297 | |||
| fa2840aee3 | |||
| e48e1d0a38 | |||
| f9f4684c8d | |||
| 3954649632 | |||
| 74702c00e5 | |||
| 727872833f | |||
| e0518f0bda | |||
| ef5a8a9641 | |||
| 69bfc23b7f | |||
| 9bc1e04654 | |||
| c3872afc30 | |||
| a6e5f8aab7 | |||
| 67a4db07aa | |||
| f834c29530 | |||
| 60f38b3b6c | |||
| 3fddc8e846 | |||
| f0e1229a26 | |||
| 00871cc98f | |||
| 3992182905 | |||
| 2df41753e5 | |||
| 39c221775e | |||
| eda45e6072 | |||
| 333871387a | |||
| eb6b84eb18 | |||
| d8c651f255 | |||
| 7cf25a3bc0 | |||
| fdad0263ec | |||
| c5181cda46 | |||
| 56f6eccc82 | |||
| 6a74326a61 | |||
| 48d4956ee0 | |||
| 0ab46d5c70 | |||
| cd7d9aa2a4 | |||
| ea3d27c311 | |||
| 6c050118f4 | |||
| dfb942f6fe | |||
| 262efe3c9e | |||
| d1d099fbbf | |||
| 45da997dd3 | |||
| d91c949068 | |||
| 5a028aab52 | |||
| c49758f1c5 | |||
| 5ca52e89d5 | |||
| dd26111c04 | |||
| f40e7109e5 | |||
| 5cb3e1877a | |||
| a78a16b4a7 | |||
| a6307d48c0 | |||
| f9d95b9408 | |||
| fb3df46a25 | |||
| d2a7a95628 | |||
| 12e91b86e5 | |||
| 5e89c761ca | |||
| d12307991a | |||
| c711ce83fa | |||
| 96f91eda59 | |||
| e2a76b665a | |||
| c638e6c0f2 | |||
| 9ef1ecd827 | |||
| 60f0954a76 | |||
| 08339cd78e | |||
| a772154471 | |||
| e02cd89c8b | |||
| 706857132a | |||
| c0f6028212 | |||
| ecd9e4ab6c | |||
| d4f3391481 | |||
| dd9b47e51e | |||
| 279dd348e4 | |||
| efe068324b | |||
| 338f742310 | |||
| c1845d73bd | |||
| a3ae190edc | |||
| 6e946fe702 | |||
| dca49d662d | |||
| df73753b08 | |||
| 0676b9c0f9 | |||
| 13b8b3c22c | |||
| 35ee8fc2c6 | |||
| 99924c3952 | |||
| dfd7191aa1 | |||
| c5fd578214 | |||
| e00a73b88a | |||
| 487fd4cd1c | |||
| 2acb53fa2e | |||
| 548ede7eea | |||
| 667f72532e | |||
| 7753a68331 | |||
| 6728411a52 | |||
| 31ff2d4c97 | |||
| d355424f22 | |||
| dde7084711 | |||
| f77bf60bcb | |||
| e3f1091f2d | |||
| ffb3462d54 | |||
| e1c1fc73e2 | |||
| 5ca9f35a95 | |||
| 6128102eac | |||
| cb6d5357d9 | |||
| 9fb703ca6b | |||
| 06d2b906e0 | |||
| 98403dfc3b | |||
| ec88930f80 | |||
| ee5e54f9f4 | |||
| ed9c17dfdd | |||
| 10027b6697 | |||
| 27abc7a42b | |||
| 3bb56a7a59 | |||
| 0e94c81734 | |||
| 7d41bd9fbd | |||
| f12cd9ba39 | |||
| 182a9cff18 | |||
| 9bb5399263 | |||
| 82bd3efc73 | |||
| 0b3f7e37f0 | |||
| 2f034bbee2 | |||
| f14ae5f3c9 | |||
| 1463a6481e | |||
| 0a9be8fc82 | |||
| 75629a468f | |||
| 72a5a3424f | |||
| 4e35410b7a | |||
| 9faa028f1e | |||
| 60f8139482 | |||
| e7f7a488c6 | |||
| f0b3e4de0a | |||
| 25ada42ed9 | |||
| ef95c7e4e7 | |||
| 9e53a37c08 | |||
| b3e783e7a8 | |||
| 9e41c06cd7 | |||
| 7b3650fb68 | |||
| 0bb2184efb | |||
| e55101526c | |||
| 50b89bb8b5 | |||
| 856ebbf7e6 | |||
| 0c5564fe55 | |||
| 53ee4c096e | |||
| 5754e2db58 | |||
| 468ed6cfe6 | |||
| a4fac964dc | |||
| 245ab96a27 | |||
| 6b373686d3 | |||
| c90f90a5c7 | |||
| 1dca3fecaa | |||
| b6f4ed7013 | |||
| 9b6374881d | |||
| 2388b8738f | |||
| 775bd5a86a | |||
| 3630228cac | |||
| 7517d8ab6a | |||
| 9ebfd1f495 | |||
| dfca68062c | |||
| ce1334a610 | |||
| 8bc650ae19 | |||
| 46fe71d1b8 | |||
| 29b0d0d96b | |||
| 037a65c3d1 | |||
| 55bd12c989 | |||
| 2c5c6e0c1a | |||
| e2353389e5 | |||
| 9d00455d8f | |||
| c49c20fe38 | |||
| 684cfeeeaa | |||
| eb3e6f9136 | |||
| 1e2668c291 | |||
| c2c4eb39be | |||
| 711b714a3f | |||
| cdcdecd8f1 | |||
| 800efc2bb2 | |||
| 9679bb63b2 | |||
| 1d10cdf600 | |||
| 7dd6b5e112 | |||
| 1f7e5cc36a | |||
| 4b76e797cf | |||
| 631f88ff42 | |||
| 98b0a5e9ee | |||
| 9b630b387c | |||
| 5bf1339ef1 | |||
| a70c9b7f5d | |||
| b120e7fee9 | |||
| fe052f0e69 | |||
| e9919240c9 | |||
| ca19f18c8f | |||
| 48d2d8789d | |||
| 5006a926b5 | |||
| 729f233d7a | |||
| 79046280d2 | |||
| 6442791482 | |||
| 3523728a61 | |||
| 7627c47d89 | |||
| caa83943ba | |||
| ae41fceba9 | |||
| d71be4b73d | |||
| 1888229da6 | |||
| 10aec91ebb | |||
| 1d22e73a44 | |||
| 3981d066e5 | |||
| fc47063c73 | |||
| 7a6777f703 | |||
| c5d79240fd | |||
| 9e4156a706 | |||
| f61af132e7 | |||
| 75617da66d | |||
| 805bcc4ab0 | |||
| d76abc79c7 | |||
| 44c5651c3e | |||
| afa8ccd07f | |||
| c6624e84b3 | |||
| 5b72347566 | |||
| b7e30eb99a | |||
| bfa203266a | |||
| 7cabe76fe3 | |||
| ef934af38d | |||
| cbc4aab55d | |||
| 56a94b31e6 | |||
| 05a0586e38 | |||
| bf7c3c548f | |||
| 9eb2a50c47 | |||
| 2bba98d621 | |||
| 4c5a36e4c0 | |||
| 66242aa76a | |||
| 967aee7aad | |||
| 6ba59d9072 | |||
| 9f7c5d38f0 | |||
| d3bf490b3d | |||
| 4d803fce0f | |||
| 00bb650c6c | |||
| c256ed802b | |||
| e102c0c666 | |||
| 1bcd3c2e0c | |||
| 207c9a3946 | |||
| 96d3af463e | |||
| 66b78cac1e | |||
| 0cc9067b71 | |||
| e41bbc04d0 | |||
| efea45dd9e | |||
| cd3c9813ab | |||
| b756358261 | |||
| 4ccf1388c8 | |||
| 431add9e1f | |||
| c3368456af | |||
| 6c19ad8695 | |||
| 39e5bd238a | |||
| def262e1d8 | |||
| 09b04bca9e | |||
| b113e9162e | |||
| bafb5ef723 | |||
| ce2246b5f9 | |||
| 9bafd12821 | |||
| 6d292945b6 | |||
| ba269cef57 | |||
| c08f3736e0 | |||
| 6b5e3a3e85 | |||
| 1ee7b39809 | |||
| 8276e6d583 | |||
| dad3c317a7 | |||
| 23ecaf9b84 | |||
| 8351799a16 | |||
| cb50830d26 | |||
| 871049b9f2 | |||
| c019806c37 | |||
| af018b1f4a | |||
| 2d82dcbafa | |||
| ba16a8e0d8 | |||
| f0a19173c1 | |||
| d7e13b4abd | |||
| 61e62987fb | |||
| f8e40f2dde | |||
| 5f299e109b | |||
| 5d26fc2e71 | |||
| ab4436e728 | |||
| 7e97c1440b | |||
| f947f79603 | |||
| f9895c4eaa | |||
| 1eb245c514 | |||
| 231e1f610a | |||
| 765905f5b8 | |||
| aa38aa1e9e | |||
| 67dc01ea36 | |||
| e4c977146a | |||
| 1c4252720d | |||
| 6a33fd077d | |||
| 2732f6d2c2 | |||
| 5115abcf54 | |||
| 0597577d08 | |||
| fa4ac23a4d | |||
| 1b05d27246 | |||
| 30ab8c5841 | |||
| 23613f32c7 | |||
| 002b1b5d07 | |||
| 438bfe6b34 | |||
| 20094e43c5 | |||
| bbc00e5c3d | |||
| dd4ccca358 | |||
| 9a8704203b | |||
| 68629ea7a6 | |||
| 048e29f3ed | |||
| 4c313514ba | |||
| deb70e5d5d | |||
| e8fd6244b2 | |||
| 6055ad8866 | |||
| de173d0e1c | |||
| 939994d07d | |||
| 18912db64e | |||
| d5366cb800 | |||
| da89fe53fb | |||
| 31ee462a0b | |||
| 4d8af00bba | |||
| bdbf44805d | |||
| 47b478df60 | |||
| 60bc404d95 | |||
| 72583b1bf6 | |||
| 63dd27c4f5 | |||
| 41d9b71b26 | |||
| 93dbe4cb6b | |||
| 212bf6c70c | |||
| 251b1cc935 | |||
| ed5bb6cf9a | |||
| 40ca668f0c | |||
| 03660f45b1 | |||
| 1a00ee38fe | |||
| 190f722fe6 | |||
| 2d1e3560b3 | |||
| f24365520c | |||
| bfd107cef0 | |||
| eae099f97c | |||
| 3281a10031 | |||
| 30273d09df | |||
| b20cba35a8 | |||
| a78e42e4fc | |||
| 5b212bd1fd | |||
| 268fd462ac | |||
| d942e255f7 | |||
| f016b95f77 | |||
| 6756ad4630 | |||
| 2df002955e | |||
| 0ce994ba46 | |||
| 52104d5bd1 | |||
| b2233963b4 | |||
| 5b4cb3b527 | |||
| 8b73c8209f | |||
| 9c455db395 | |||
| e6e8f9e55a | |||
| af09393e50 | |||
| 954aa1fa7e | |||
| 569e80c132 | |||
| 908a6752c1 | |||
| f41aa6a0fa | |||
| 94de7095c6 | |||
| d28a9d7bed | |||
| 6563a5b9db | |||
| ff43078ff3 | |||
| a4d2ef959b | |||
| e09b0f3b5f | |||
| 4335a52997 | |||
| 2b024315f7 | |||
| 6d56cf6d98 | |||
| f0f78b097b | |||
| 17e8373513 | |||
| 26f5c03040 | |||
| 6cd9530862 | |||
| fcddcc5185 | |||
| 311accd815 | |||
| ac8d16674c | |||
| 941c819604 | |||
| 6edb1c7c60 | |||
| 5a5b7e56a1 | |||
| 0f3e93a39a | |||
| a0181ce802 | |||
| 0307c59f0e | |||
| 46e959845d | |||
| 610bdb0b52 | |||
| 0ecccc7868 | |||
| e0f27e9496 | |||
| 9563164d76 | |||
| 223e934ba9 | |||
| a4d7a4eba4 | |||
| 1639f9f624 | |||
| 1148415672 | |||
| 1d9a26d7d7 | |||
| 783ec6cf68 | |||
| 5514ecbc3e | |||
| 2cc0eec19d | |||
| 40dff3d08f | |||
| f28e3c78ab | |||
| a1ae5a338a | |||
| 441d4b6b01 | |||
| e4602fd890 | |||
| 6e5114d897 | |||
| 6177734a65 | |||
| 3825069e52 | |||
| c3e1e63eef | |||
| 064a4c5891 | |||
| c828d09539 | |||
| 27a1714f37 | |||
| 41ec4150e5 | |||
| 984e755ee6 | |||
| fbbe5ba764 | |||
| a7d59970cb | |||
| 4e12738df2 | |||
| 349d1f5e52 | |||
| b289b0fdee | |||
| e7c2d2c277 | |||
| f62424e9bb | |||
| f92addbbf6 | |||
| 53384f9eaf | |||
| e12ff1b6f9 | |||
| 586d72f1fe | |||
| 7a4e22feec | |||
| b730d7f97e | |||
| ecd7c1754d | |||
| 951d59ba15 | |||
| 2962768a6f | |||
| aaf2057725 |
+12
-2
@@ -4,10 +4,20 @@ Makefile.in.in
|
|||||||
configure
|
configure
|
||||||
config.log
|
config.log
|
||||||
config.status
|
config.status
|
||||||
config/
|
|
||||||
aclocal.m4
|
aclocal.m4
|
||||||
autom4te.cache/
|
autom4te.cache/
|
||||||
m4/
|
data/*.json
|
||||||
|
po/gnome-shell-extensions.pot
|
||||||
po/POTFILES
|
po/POTFILES
|
||||||
po/stamp-it
|
po/stamp-it
|
||||||
staging/
|
staging/
|
||||||
|
zip-files/
|
||||||
|
|
||||||
|
*~
|
||||||
|
*.gmo
|
||||||
|
metadata.json
|
||||||
|
*.desktop
|
||||||
|
*.desktop.in
|
||||||
|
*.gschema.xml
|
||||||
|
*.gschema.valid
|
||||||
|
*.session
|
||||||
|
|||||||
@@ -0,0 +1,339 @@
|
|||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
Version 2, June 1991
|
||||||
|
|
||||||
|
Copyright (C) 1989, 1991 Free Software Foundation, Inc. <http://fsf.org>
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
Preamble
|
||||||
|
|
||||||
|
The licenses for most software are designed to take away your
|
||||||
|
freedom to share and change it. By contrast, the GNU General Public
|
||||||
|
License is intended to guarantee your freedom to share and change free
|
||||||
|
software--to make sure the software is free for all its users. This
|
||||||
|
General Public License applies to most of the Free Software
|
||||||
|
Foundation's software and to any other program whose authors commit to
|
||||||
|
using it. (Some other Free Software Foundation software is covered by
|
||||||
|
the GNU Library General Public License instead.) You can apply it to
|
||||||
|
your programs, too.
|
||||||
|
|
||||||
|
When we speak of free software, we are referring to freedom, not
|
||||||
|
price. Our General Public Licenses are designed to make sure that you
|
||||||
|
have the freedom to distribute copies of free software (and charge for
|
||||||
|
this service if you wish), that you receive source code or can get it
|
||||||
|
if you want it, that you can change the software or use pieces of it
|
||||||
|
in new free programs; and that you know you can do these things.
|
||||||
|
|
||||||
|
To protect your rights, we need to make restrictions that forbid
|
||||||
|
anyone to deny you these rights or to ask you to surrender the rights.
|
||||||
|
These restrictions translate to certain responsibilities for you if you
|
||||||
|
distribute copies of the software, or if you modify it.
|
||||||
|
|
||||||
|
For example, if you distribute copies of such a program, whether
|
||||||
|
gratis or for a fee, you must give the recipients all the rights that
|
||||||
|
you have. You must make sure that they, too, receive or can get the
|
||||||
|
source code. And you must show them these terms so they know their
|
||||||
|
rights.
|
||||||
|
|
||||||
|
We protect your rights with two steps: (1) copyright the software, and
|
||||||
|
(2) offer you this license which gives you legal permission to copy,
|
||||||
|
distribute and/or modify the software.
|
||||||
|
|
||||||
|
Also, for each author's protection and ours, we want to make certain
|
||||||
|
that everyone understands that there is no warranty for this free
|
||||||
|
software. If the software is modified by someone else and passed on, we
|
||||||
|
want its recipients to know that what they have is not the original, so
|
||||||
|
that any problems introduced by others will not reflect on the original
|
||||||
|
authors' reputations.
|
||||||
|
|
||||||
|
Finally, any free program is threatened constantly by software
|
||||||
|
patents. We wish to avoid the danger that redistributors of a free
|
||||||
|
program will individually obtain patent licenses, in effect making the
|
||||||
|
program proprietary. To prevent this, we have made it clear that any
|
||||||
|
patent must be licensed for everyone's free use or not licensed at all.
|
||||||
|
|
||||||
|
The precise terms and conditions for copying, distribution and
|
||||||
|
modification follow.
|
||||||
|
|
||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
|
0. This License applies to any program or other work which contains
|
||||||
|
a notice placed by the copyright holder saying it may be distributed
|
||||||
|
under the terms of this General Public License. The "Program", below,
|
||||||
|
refers to any such program or work, and a "work based on the Program"
|
||||||
|
means either the Program or any derivative work under copyright law:
|
||||||
|
that is to say, a work containing the Program or a portion of it,
|
||||||
|
either verbatim or with modifications and/or translated into another
|
||||||
|
language. (Hereinafter, translation is included without limitation in
|
||||||
|
the term "modification".) Each licensee is addressed as "you".
|
||||||
|
|
||||||
|
Activities other than copying, distribution and modification are not
|
||||||
|
covered by this License; they are outside its scope. The act of
|
||||||
|
running the Program is not restricted, and the output from the Program
|
||||||
|
is covered only if its contents constitute a work based on the
|
||||||
|
Program (independent of having been made by running the Program).
|
||||||
|
Whether that is true depends on what the Program does.
|
||||||
|
|
||||||
|
1. You may copy and distribute verbatim copies of the Program's
|
||||||
|
source code as you receive it, in any medium, provided that you
|
||||||
|
conspicuously and appropriately publish on each copy an appropriate
|
||||||
|
copyright notice and disclaimer of warranty; keep intact all the
|
||||||
|
notices that refer to this License and to the absence of any warranty;
|
||||||
|
and give any other recipients of the Program a copy of this License
|
||||||
|
along with the Program.
|
||||||
|
|
||||||
|
You may charge a fee for the physical act of transferring a copy, and
|
||||||
|
you may at your option offer warranty protection in exchange for a fee.
|
||||||
|
|
||||||
|
2. You may modify your copy or copies of the Program or any portion
|
||||||
|
of it, thus forming a work based on the Program, and copy and
|
||||||
|
distribute such modifications or work under the terms of Section 1
|
||||||
|
above, provided that you also meet all of these conditions:
|
||||||
|
|
||||||
|
a) You must cause the modified files to carry prominent notices
|
||||||
|
stating that you changed the files and the date of any change.
|
||||||
|
|
||||||
|
b) You must cause any work that you distribute or publish, that in
|
||||||
|
whole or in part contains or is derived from the Program or any
|
||||||
|
part thereof, to be licensed as a whole at no charge to all third
|
||||||
|
parties under the terms of this License.
|
||||||
|
|
||||||
|
c) If the modified program normally reads commands interactively
|
||||||
|
when run, you must cause it, when started running for such
|
||||||
|
interactive use in the most ordinary way, to print or display an
|
||||||
|
announcement including an appropriate copyright notice and a
|
||||||
|
notice that there is no warranty (or else, saying that you provide
|
||||||
|
a warranty) and that users may redistribute the program under
|
||||||
|
these conditions, and telling the user how to view a copy of this
|
||||||
|
License. (Exception: if the Program itself is interactive but
|
||||||
|
does not normally print such an announcement, your work based on
|
||||||
|
the Program is not required to print an announcement.)
|
||||||
|
|
||||||
|
These requirements apply to the modified work as a whole. If
|
||||||
|
identifiable sections of that work are not derived from the Program,
|
||||||
|
and can be reasonably considered independent and separate works in
|
||||||
|
themselves, then this License, and its terms, do not apply to those
|
||||||
|
sections when you distribute them as separate works. But when you
|
||||||
|
distribute the same sections as part of a whole which is a work based
|
||||||
|
on the Program, the distribution of the whole must be on the terms of
|
||||||
|
this License, whose permissions for other licensees extend to the
|
||||||
|
entire whole, and thus to each and every part regardless of who wrote it.
|
||||||
|
|
||||||
|
Thus, it is not the intent of this section to claim rights or contest
|
||||||
|
your rights to work written entirely by you; rather, the intent is to
|
||||||
|
exercise the right to control the distribution of derivative or
|
||||||
|
collective works based on the Program.
|
||||||
|
|
||||||
|
In addition, mere aggregation of another work not based on the Program
|
||||||
|
with the Program (or with a work based on the Program) on a volume of
|
||||||
|
a storage or distribution medium does not bring the other work under
|
||||||
|
the scope of this License.
|
||||||
|
|
||||||
|
3. You may copy and distribute the Program (or a work based on it,
|
||||||
|
under Section 2) in object code or executable form under the terms of
|
||||||
|
Sections 1 and 2 above provided that you also do one of the following:
|
||||||
|
|
||||||
|
a) Accompany it with the complete corresponding machine-readable
|
||||||
|
source code, which must be distributed under the terms of Sections
|
||||||
|
1 and 2 above on a medium customarily used for software interchange; or,
|
||||||
|
|
||||||
|
b) Accompany it with a written offer, valid for at least three
|
||||||
|
years, to give any third party, for a charge no more than your
|
||||||
|
cost of physically performing source distribution, a complete
|
||||||
|
machine-readable copy of the corresponding source code, to be
|
||||||
|
distributed under the terms of Sections 1 and 2 above on a medium
|
||||||
|
customarily used for software interchange; or,
|
||||||
|
|
||||||
|
c) Accompany it with the information you received as to the offer
|
||||||
|
to distribute corresponding source code. (This alternative is
|
||||||
|
allowed only for noncommercial distribution and only if you
|
||||||
|
received the program in object code or executable form with such
|
||||||
|
an offer, in accord with Subsection b above.)
|
||||||
|
|
||||||
|
The source code for a work means the preferred form of the work for
|
||||||
|
making modifications to it. For an executable work, complete source
|
||||||
|
code means all the source code for all modules it contains, plus any
|
||||||
|
associated interface definition files, plus the scripts used to
|
||||||
|
control compilation and installation of the executable. However, as a
|
||||||
|
special exception, the source code distributed need not include
|
||||||
|
anything that is normally distributed (in either source or binary
|
||||||
|
form) with the major components (compiler, kernel, and so on) of the
|
||||||
|
operating system on which the executable runs, unless that component
|
||||||
|
itself accompanies the executable.
|
||||||
|
|
||||||
|
If distribution of executable or object code is made by offering
|
||||||
|
access to copy from a designated place, then offering equivalent
|
||||||
|
access to copy the source code from the same place counts as
|
||||||
|
distribution of the source code, even though third parties are not
|
||||||
|
compelled to copy the source along with the object code.
|
||||||
|
|
||||||
|
4. You may not copy, modify, sublicense, or distribute the Program
|
||||||
|
except as expressly provided under this License. Any attempt
|
||||||
|
otherwise to copy, modify, sublicense or distribute the Program is
|
||||||
|
void, and will automatically terminate your rights under this License.
|
||||||
|
However, parties who have received copies, or rights, from you under
|
||||||
|
this License will not have their licenses terminated so long as such
|
||||||
|
parties remain in full compliance.
|
||||||
|
|
||||||
|
5. You are not required to accept this License, since you have not
|
||||||
|
signed it. However, nothing else grants you permission to modify or
|
||||||
|
distribute the Program or its derivative works. These actions are
|
||||||
|
prohibited by law if you do not accept this License. Therefore, by
|
||||||
|
modifying or distributing the Program (or any work based on the
|
||||||
|
Program), you indicate your acceptance of this License to do so, and
|
||||||
|
all its terms and conditions for copying, distributing or modifying
|
||||||
|
the Program or works based on it.
|
||||||
|
|
||||||
|
6. Each time you redistribute the Program (or any work based on the
|
||||||
|
Program), the recipient automatically receives a license from the
|
||||||
|
original licensor to copy, distribute or modify the Program subject to
|
||||||
|
these terms and conditions. You may not impose any further
|
||||||
|
restrictions on the recipients' exercise of the rights granted herein.
|
||||||
|
You are not responsible for enforcing compliance by third parties to
|
||||||
|
this License.
|
||||||
|
|
||||||
|
7. If, as a consequence of a court judgment or allegation of patent
|
||||||
|
infringement or for any other reason (not limited to patent issues),
|
||||||
|
conditions are imposed on you (whether by court order, agreement or
|
||||||
|
otherwise) that contradict the conditions of this License, they do not
|
||||||
|
excuse you from the conditions of this License. If you cannot
|
||||||
|
distribute so as to satisfy simultaneously your obligations under this
|
||||||
|
License and any other pertinent obligations, then as a consequence you
|
||||||
|
may not distribute the Program at all. For example, if a patent
|
||||||
|
license would not permit royalty-free redistribution of the Program by
|
||||||
|
all those who receive copies directly or indirectly through you, then
|
||||||
|
the only way you could satisfy both it and this License would be to
|
||||||
|
refrain entirely from distribution of the Program.
|
||||||
|
|
||||||
|
If any portion of this section is held invalid or unenforceable under
|
||||||
|
any particular circumstance, the balance of the section is intended to
|
||||||
|
apply and the section as a whole is intended to apply in other
|
||||||
|
circumstances.
|
||||||
|
|
||||||
|
It is not the purpose of this section to induce you to infringe any
|
||||||
|
patents or other property right claims or to contest validity of any
|
||||||
|
such claims; this section has the sole purpose of protecting the
|
||||||
|
integrity of the free software distribution system, which is
|
||||||
|
implemented by public license practices. Many people have made
|
||||||
|
generous contributions to the wide range of software distributed
|
||||||
|
through that system in reliance on consistent application of that
|
||||||
|
system; it is up to the author/donor to decide if he or she is willing
|
||||||
|
to distribute software through any other system and a licensee cannot
|
||||||
|
impose that choice.
|
||||||
|
|
||||||
|
This section is intended to make thoroughly clear what is believed to
|
||||||
|
be a consequence of the rest of this License.
|
||||||
|
|
||||||
|
8. If the distribution and/or use of the Program is restricted in
|
||||||
|
certain countries either by patents or by copyrighted interfaces, the
|
||||||
|
original copyright holder who places the Program under this License
|
||||||
|
may add an explicit geographical distribution limitation excluding
|
||||||
|
those countries, so that distribution is permitted only in or among
|
||||||
|
countries not thus excluded. In such case, this License incorporates
|
||||||
|
the limitation as if written in the body of this License.
|
||||||
|
|
||||||
|
9. The Free Software Foundation may publish revised and/or new versions
|
||||||
|
of the General Public License from time to time. Such new versions will
|
||||||
|
be similar in spirit to the present version, but may differ in detail to
|
||||||
|
address new problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the Program
|
||||||
|
specifies a version number of this License which applies to it and "any
|
||||||
|
later version", you have the option of following the terms and conditions
|
||||||
|
either of that version or of any later version published by the Free
|
||||||
|
Software Foundation. If the Program does not specify a version number of
|
||||||
|
this License, you may choose any version ever published by the Free Software
|
||||||
|
Foundation.
|
||||||
|
|
||||||
|
10. If you wish to incorporate parts of the Program into other free
|
||||||
|
programs whose distribution conditions are different, write to the author
|
||||||
|
to ask for permission. For software which is copyrighted by the Free
|
||||||
|
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||||
|
make exceptions for this. Our decision will be guided by the two goals
|
||||||
|
of preserving the free status of all derivatives of our free software and
|
||||||
|
of promoting the sharing and reuse of software generally.
|
||||||
|
|
||||||
|
NO WARRANTY
|
||||||
|
|
||||||
|
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||||
|
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||||
|
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||||
|
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||||
|
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||||
|
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||||
|
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||||
|
REPAIR OR CORRECTION.
|
||||||
|
|
||||||
|
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||||
|
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||||
|
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||||
|
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||||
|
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||||
|
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||||
|
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||||
|
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
How to Apply These Terms to Your New Programs
|
||||||
|
|
||||||
|
If you develop a new program, and you want it to be of the greatest
|
||||||
|
possible use to the public, the best way to achieve this is to make it
|
||||||
|
free software which everyone can redistribute and change under these terms.
|
||||||
|
|
||||||
|
To do so, attach the following notices to the program. It is safest
|
||||||
|
to attach them to the start of each source file to most effectively
|
||||||
|
convey the exclusion of warranty; and each file should have at least
|
||||||
|
the "copyright" line and a pointer to where the full notice is found.
|
||||||
|
|
||||||
|
<one line to give the program's name and a brief idea of what it does.>
|
||||||
|
Copyright (C) <year> <name of author>
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
|
|
||||||
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
|
||||||
|
If the program is interactive, make it output a short notice like this
|
||||||
|
when it starts in an interactive mode:
|
||||||
|
|
||||||
|
Gnomovision version 69, Copyright (C) year name of author
|
||||||
|
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||||
|
This is free software, and you are welcome to redistribute it
|
||||||
|
under certain conditions; type `show c' for details.
|
||||||
|
|
||||||
|
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||||
|
parts of the General Public License. Of course, the commands you use may
|
||||||
|
be called something other than `show w' and `show c'; they could even be
|
||||||
|
mouse-clicks or menu items--whatever suits your program.
|
||||||
|
|
||||||
|
You should also get your employer (if you work as a programmer) or your
|
||||||
|
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||||
|
necessary. Here is a sample; alter the names:
|
||||||
|
|
||||||
|
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||||
|
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||||
|
|
||||||
|
<signature of Ty Coon>, 1 April 1989
|
||||||
|
Ty Coon, President of Vice
|
||||||
|
|
||||||
|
This General Public License does not permit incorporating your program into
|
||||||
|
proprietary programs. If your program is a subroutine library, you may
|
||||||
|
consider it more useful to permit linking proprietary applications with the
|
||||||
|
library. If this is what you want to do, use the GNU Library General
|
||||||
|
Public License instead of this License.
|
||||||
+48
@@ -1,3 +1,51 @@
|
|||||||
ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
|
ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
|
||||||
|
|
||||||
|
DIST_SUBDIRS = data extensions po
|
||||||
|
|
||||||
SUBDIRS = extensions po
|
SUBDIRS = extensions po
|
||||||
|
|
||||||
|
if CLASSIC_MODE
|
||||||
|
SUBDIRS += data
|
||||||
|
endif
|
||||||
|
|
||||||
|
EXTRA_DIST = lib/convenience.js
|
||||||
|
|
||||||
|
DISTCHECK_CONFIGURE_FLAGS = --enable-extensions=all
|
||||||
|
|
||||||
|
include include.mk
|
||||||
|
|
||||||
|
zip-file: all
|
||||||
|
-rm -fR $(builddir)/_build
|
||||||
|
-rm -fR $(builddir)/zip-files
|
||||||
|
$(MKDIR_P) $(builddir)/_build; \
|
||||||
|
$(MKDIR_P) $(builddir)/zip-files; \
|
||||||
|
$(MAKE) install DESTDIR="$(abs_builddir)/_build"; \
|
||||||
|
for i in $(ENABLED_EXTENSIONS); do \
|
||||||
|
mv "$(builddir)/_build$(topextensiondir)/$${i}$(extensionbase)" "$(builddir)/_build/"; \
|
||||||
|
cp -r "$(builddir)/_build$(datadir)/locale" "$(builddir)/_build/$${i}$(extensionbase)"; \
|
||||||
|
cp "$(srcdir)/COPYING" -t "$(builddir)/_build/$${i}$(extensionbase)"; \
|
||||||
|
if [ -f "$(builddir)/_build$(datadir)/glib-2.0/schemas/$(gschemabase).$${i}.gschema.xml" ]; then \
|
||||||
|
$(MKDIR_P) "$(builddir)/_build/$${i}$(extensionbase)/schemas"; \
|
||||||
|
mv "$(builddir)/_build$(datadir)/glib-2.0/schemas/$(gschemabase).$${i}.gschema.xml" "$(builddir)/_build/$${i}$(extensionbase)/schemas"; \
|
||||||
|
glib-compile-schemas "$(builddir)/_build/$${i}$(extensionbase)/schemas"; \
|
||||||
|
fi; \
|
||||||
|
(cd "$(builddir)/_build/$${i}$(extensionbase)"; \
|
||||||
|
zip -qr "$(abs_builddir)/zip-files/$${i}$(extensionbase).shell-extension.zip" .; \
|
||||||
|
); \
|
||||||
|
done
|
||||||
|
-rm -fR $(builddir)/_build
|
||||||
|
|
||||||
|
localprefix = $(HOME)/.local/share/gnome-shell/extensions
|
||||||
|
|
||||||
|
local-install: zip-file
|
||||||
|
for i in $(ENABLED_EXTENSIONS); do \
|
||||||
|
uuid="$${i}$(extensionbase)"; \
|
||||||
|
zip_file="$(abs_builddir)/zip-files/$${uuid}.shell-extension.zip"; \
|
||||||
|
if [ -d "$(localprefix)/$${uuid}" ]; then \
|
||||||
|
rm -fR "$(localprefix)/$${uuid}"; \
|
||||||
|
fi; \
|
||||||
|
$(MKDIR_P) $(localprefix)/$${uuid}; \
|
||||||
|
(cd $(localprefix)/$${uuid}; \
|
||||||
|
unzip -q $${zip_file}; \
|
||||||
|
); \
|
||||||
|
done
|
||||||
|
|||||||
@@ -0,0 +1,217 @@
|
|||||||
|
3.7.3
|
||||||
|
=====
|
||||||
|
* new extensions: default-min-max, static-workspaces
|
||||||
|
* alternate-tab now uses the built-in window switcher and just
|
||||||
|
takes over the switch-application keybinding
|
||||||
|
* workspace-indicator: is no longer part of classic-mode
|
||||||
|
* we now install classic-mode data files for gdm, gnome-session
|
||||||
|
and gnome-shell, so if you enable classic-mode you get a new
|
||||||
|
session option in GDM
|
||||||
|
* updated translations (ar, es, pl, ru, sl, zh_HK, zh_TW)
|
||||||
|
|
||||||
|
3.7.2
|
||||||
|
=====
|
||||||
|
* fixed crashes with places-menu, windowsNavigator, alternate-tab
|
||||||
|
and native-window-placement
|
||||||
|
* alternate-tab now hides attached modal dialogs
|
||||||
|
* places-menu has restored support for Nautilus 3.4
|
||||||
|
* the default for hibernate is now to show in alternative-status-menu
|
||||||
|
* some extensions are now tagged as "classic", and can be chosen with
|
||||||
|
--enable-extensions=classic-mode
|
||||||
|
* dock and gajim were removed at the beginning of the 3.7.1 cycle,
|
||||||
|
as they were buggy and unmaintained
|
||||||
|
* updated translations (ar, cs, de, el, es, gl, id, lt, lv, pa, pl
|
||||||
|
ru, sk, sl, sr, sr@latin)
|
||||||
|
|
||||||
|
3.6.1
|
||||||
|
=====
|
||||||
|
* fixed alternative-status-menu for the new lock screen
|
||||||
|
* squashed some alternate-tab warnings
|
||||||
|
* drive-menu now works with 3.6 again
|
||||||
|
* updated translations (ar, cs, el, es, gl, id, lv, pl, sl)
|
||||||
|
|
||||||
|
3.6.0
|
||||||
|
=====
|
||||||
|
* major rework in places menu, to make it work without
|
||||||
|
removed supporting code in the shell and to make it look like
|
||||||
|
the nautilus sidebar
|
||||||
|
(similar work would be needed for drive-menu, not done yet)
|
||||||
|
* updated translations (ca, cs, de, el, en_GB, es, fi, hu, id, lt,
|
||||||
|
pl, pt_BR, ru, sl, sr)
|
||||||
|
|
||||||
|
3.5.91
|
||||||
|
======
|
||||||
|
* various crashers were fixed in alternative-tab
|
||||||
|
* auto-move-windows now can be made to work with static workspaces
|
||||||
|
* place-menu is now on the left and uses symbolic icons like Files
|
||||||
|
* StIconType usage was removed from all extensions, after it was
|
||||||
|
removed in core
|
||||||
|
* systemMonitor, xrandr-indicator, apps-menu, places-menu,
|
||||||
|
alternative-status-menu were updated for the newer shell
|
||||||
|
* updated translations (es, gl, it, pl, sl)
|
||||||
|
|
||||||
|
3.5.90
|
||||||
|
======
|
||||||
|
* alternate-tab has been reworked again, the old mode switch
|
||||||
|
was removed and the all&thumbnails code extended to handle
|
||||||
|
icons and filtering to the workspace
|
||||||
|
* alternate-tab thumbnails now reflect the aspect ratio of the windows
|
||||||
|
* systemMonitor now shows a tooltip above the indicator
|
||||||
|
* native-window-placement, systemMonitor and windowsNavigator have been updated
|
||||||
|
for the newer shell
|
||||||
|
* updated translations (es, pa)
|
||||||
|
|
||||||
|
3.5.5
|
||||||
|
=====
|
||||||
|
* convenience module has been relicensed to BSD,
|
||||||
|
for compatibility with GPLv3 extensions
|
||||||
|
* alternate-tab has been refactored and seen various
|
||||||
|
improvements to all&thumbnails mode, including a new
|
||||||
|
overlaid application icon
|
||||||
|
* updated translations (lt, id, sr)
|
||||||
|
|
||||||
|
3.5.4
|
||||||
|
=====
|
||||||
|
* updated translations (de, es, ar, sl, lv, zh_CN)
|
||||||
|
|
||||||
|
3.5.2
|
||||||
|
=====
|
||||||
|
* removable-drive-menu is now a11y friendly
|
||||||
|
* the dock can now be placed on any monitor, not just the primary
|
||||||
|
* dock is now clipped to its monitor
|
||||||
|
* alternative-status-menu now exposes GSettings for Suspend
|
||||||
|
and Hibernate visibility - no UI yet
|
||||||
|
* more gnome-shell API changes (places-menu, removable-drive-menu,
|
||||||
|
alternative-status-menu)
|
||||||
|
* miscellaneous bug fixes (native-window-placement, gajim,
|
||||||
|
auto-move-windows)
|
||||||
|
* updated translations
|
||||||
|
|
||||||
|
3.4.0
|
||||||
|
=====
|
||||||
|
* build system improvements
|
||||||
|
* updated translations (ar, cs, fr)
|
||||||
|
|
||||||
|
3.3.92
|
||||||
|
======
|
||||||
|
* various updates for gnome-shell API changes (dock,
|
||||||
|
native-window-placement)
|
||||||
|
* local-install is now a make rule, not a shell script
|
||||||
|
* updated translations (zh, es, sw, ga, hu, it, no, pt_BR, de, sl,
|
||||||
|
pl, la, fi, sr)
|
||||||
|
|
||||||
|
3.3.90
|
||||||
|
======
|
||||||
|
* system wide installation via "make install" is possible
|
||||||
|
again
|
||||||
|
* alternate-tab can now pre-activate the selected window
|
||||||
|
* auto-move-windows, workspace-indicator and example gained
|
||||||
|
new preference dialogs
|
||||||
|
* workspace-indicator: fixed a bug wrt focus stealing prevention
|
||||||
|
* updated translations (es, pt_BR, it, sl, gl, sr)
|
||||||
|
|
||||||
|
3.3.5
|
||||||
|
=====
|
||||||
|
* improvements to the build system and convenience module,
|
||||||
|
making it easier for other extensions to use, and bringing
|
||||||
|
it up to date with gnome-shell changes
|
||||||
|
* all extensions were ported to the Lang.Class framework
|
||||||
|
(except xrandr-indicator, which is pending GDBus merge)
|
||||||
|
* alternate-tab and dock were slightly refactored to clean up
|
||||||
|
some old code
|
||||||
|
|
||||||
|
3.3.4
|
||||||
|
=====
|
||||||
|
* improved styling of windowsNavigator tooltips
|
||||||
|
* fixed windowsNavigator when used with the numeric keypad
|
||||||
|
* fixed native-window-placement with custom button layout
|
||||||
|
* updated translations (pt_BR, cz)
|
||||||
|
|
||||||
|
3.3.3
|
||||||
|
=====
|
||||||
|
* windowsNavigator was fixed to work with azerty keyboards
|
||||||
|
* drive-menu was changed to use media-eject icon instead of media-optical
|
||||||
|
* dock: the default value of hide-effect is now move
|
||||||
|
* dock: if autohide is disabled, now it pushes maximized windows aside
|
||||||
|
* dock was updated to match current core shell styling
|
||||||
|
* native-window-placement: position stategy setting was removed
|
||||||
|
* alternative-status-menu no longer conflicts with other extensions
|
||||||
|
in the user menu
|
||||||
|
* various other minor bug fixes
|
||||||
|
* updated translations (zh, uk, es, it, cz, sl, sk, fi)
|
||||||
|
|
||||||
|
3.3.2
|
||||||
|
=====
|
||||||
|
* all extensions are now self-contained, including l10n and settings
|
||||||
|
* introduce a convenience module that can be shared among all extensions
|
||||||
|
* you can know build an installable zip file with make zip-file
|
||||||
|
* apps-menu no longer shows NoDisplay apps
|
||||||
|
* alternative-status-menu, alternate-tab: fix for master shell
|
||||||
|
|
||||||
|
3.2.1
|
||||||
|
=====
|
||||||
|
* dock: added "move" hide effect
|
||||||
|
* systemMonitor: now it enables/disables properly
|
||||||
|
* systemMonitor: improved styling
|
||||||
|
* alternate-tab: both modes now work with gnome-shell 3.2
|
||||||
|
* various other bug fixes
|
||||||
|
* updated translations
|
||||||
|
|
||||||
|
3.2.0
|
||||||
|
=====
|
||||||
|
|
||||||
|
* various: update for gnome-shell API changes
|
||||||
|
|
||||||
|
3.1.91
|
||||||
|
======
|
||||||
|
|
||||||
|
* gajim: update for gnome-shell API changes
|
||||||
|
|
||||||
|
3.1.90
|
||||||
|
======
|
||||||
|
|
||||||
|
* All extensions have been ported to the new extension
|
||||||
|
system (including live enable/disable)
|
||||||
|
* Updated translations
|
||||||
|
* xrandr-indicator no longer requires a specific gjs version
|
||||||
|
* windowsNavigator fixed for more than 2 workspaces
|
||||||
|
|
||||||
|
3.1.4
|
||||||
|
=====
|
||||||
|
|
||||||
|
* New extension: a menu for changing workspace (workspace-indicator)
|
||||||
|
* systemMonitor: lower the requirement on libgtop
|
||||||
|
* auto-move-windows: open overview when last window on
|
||||||
|
last workspace is closed
|
||||||
|
* dock: implement autohiding, with various configurable
|
||||||
|
effects
|
||||||
|
* alternate-tab: more configurable implementations available
|
||||||
|
* native-window-placement: don't rearrange the windows when
|
||||||
|
the workspace switcher is shown/hidden
|
||||||
|
* update for gnome-shell 3.1.4 API changes
|
||||||
|
|
||||||
|
3.1.3
|
||||||
|
=====
|
||||||
|
|
||||||
|
* New extension: a menu for removable drives (drive-menu
|
||||||
|
* New extensions: GNOME 2 like menus for apps and places
|
||||||
|
(apps-menu, places-menu)
|
||||||
|
* New extension: additional configurability for the window
|
||||||
|
layout in the overview, including a mechanism similar to
|
||||||
|
KDE4 (native-window-placement)
|
||||||
|
* New extension: a message tray indicator for CPU and memory
|
||||||
|
usage (uses libgtop) (systemMonitor)
|
||||||
|
* user-theme: fixed resetting theme
|
||||||
|
* user-theme: support themes installed in /usr/share/themes
|
||||||
|
* alternative-status-menu: ported to gnome-shell master
|
||||||
|
* dock: ported to gnome-shell master
|
||||||
|
* dock: make position configurable (can be left or right)
|
||||||
|
* Updated translations
|
||||||
|
|
||||||
|
3.0.2
|
||||||
|
=====
|
||||||
|
|
||||||
|
* Updated translations.
|
||||||
|
* Fixed bug #647386 (reverting of user-theme to default)
|
||||||
|
* Fixed bug #647599 (support globally installed themes)
|
||||||
|
* Added license and README
|
||||||
@@ -17,6 +17,72 @@ For general information about GNOME Shell
|
|||||||
Bugs should be reported at http://bugzilla.gnome.org against the 'gnome-shell'
|
Bugs should be reported at http://bugzilla.gnome.org against the 'gnome-shell'
|
||||||
product, with the 'extensions' component.
|
product, with the 'extensions' component.
|
||||||
|
|
||||||
|
Extensions
|
||||||
|
==========
|
||||||
|
|
||||||
|
alternate-tab
|
||||||
|
|
||||||
|
Lets you use classic Alt+Tab (window-based instead of app-based) in GNOME Shell.
|
||||||
|
|
||||||
|
alternative-status-menu
|
||||||
|
|
||||||
|
For those who want a power off item visible at all the time, replaces GNOME Shell
|
||||||
|
status menu with one featuring separate Suspend and Power Off. Adds the ability to
|
||||||
|
hibernate as well.
|
||||||
|
|
||||||
|
apps-menu
|
||||||
|
|
||||||
|
Lets you reach an application using gnome 2.x style menu on the panel.
|
||||||
|
|
||||||
|
auto-move-windows
|
||||||
|
|
||||||
|
Lets you manage your workspaces more easily, assigning a specific workspace to
|
||||||
|
each application as soon as it creates a window, in a manner configurable with a
|
||||||
|
GSettings key.
|
||||||
|
|
||||||
|
dock
|
||||||
|
|
||||||
|
Shows a dock-style task switcher on the right side of the screen.
|
||||||
|
|
||||||
|
drive-menu
|
||||||
|
Shows a status menu for rapid unmount and power off of external storage devices
|
||||||
|
(i.e. pendrives)
|
||||||
|
|
||||||
|
example
|
||||||
|
|
||||||
|
A minimal example illustrating how to write extensions.
|
||||||
|
|
||||||
|
gajim
|
||||||
|
|
||||||
|
Integration with Gajim, a Jabber/XMPP instant messaging client.
|
||||||
|
|
||||||
|
native-window-placement
|
||||||
|
|
||||||
|
An alternative algorithm for layouting the thumbnails in the windows overview, that
|
||||||
|
more closely reflects the actual positions and sizes.
|
||||||
|
|
||||||
|
places-menu
|
||||||
|
|
||||||
|
Shows a status Indicator for navigating to Places.
|
||||||
|
|
||||||
|
systemMonitor
|
||||||
|
|
||||||
|
An message tray indicator showing CPU and memory loads.
|
||||||
|
|
||||||
|
user-theme
|
||||||
|
|
||||||
|
Loads a shell theme from ~/.themes/<name>/gnome-shell.
|
||||||
|
|
||||||
|
windowsNavigator
|
||||||
|
|
||||||
|
Allow keyboard selection of windows and workspaces in overlay mode.
|
||||||
|
|
||||||
|
xrandr-indicator
|
||||||
|
|
||||||
|
Replace the GTK+ based indicator from gnome-settings-daemon with
|
||||||
|
a native one. Lets the user rotate the laptop monitor and open
|
||||||
|
display preferences quickly.
|
||||||
|
|
||||||
License
|
License
|
||||||
=======
|
=======
|
||||||
GNOME Shell Extensions are distributed under the terms of the GNU General Public License,
|
GNOME Shell Extensions are distributed under the terms of the GNU General Public License,
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
install-sh
|
||||||
|
mkinstalldirs
|
||||||
|
missing
|
||||||
+57
-21
@@ -1,10 +1,10 @@
|
|||||||
AC_PREREQ(2.63)
|
AC_PREREQ(2.63)
|
||||||
AC_INIT([gnome-shell-extensions],[2.91.6],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell&component=extensions])
|
AC_INIT([gnome-shell-extensions],[3.7.3],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell&component=extensions])
|
||||||
|
|
||||||
AC_CONFIG_MACRO_DIR([m4])
|
AC_CONFIG_MACRO_DIR([m4])
|
||||||
AC_CONFIG_AUX_DIR([config])
|
AC_CONFIG_AUX_DIR([config])
|
||||||
|
|
||||||
AM_INIT_AUTOMAKE([1.10 dist-bzip2 no-dist-gzip foreign])
|
AM_INIT_AUTOMAKE([1.10 dist-bzip2 no-dist-gzip foreign tar-ustar])
|
||||||
|
|
||||||
m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
|
m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
|
||||||
|
|
||||||
@@ -16,23 +16,53 @@ IT_PROG_INTLTOOL(0.26)
|
|||||||
|
|
||||||
PKG_PROG_PKG_CONFIG([0.22])
|
PKG_PROG_PKG_CONFIG([0.22])
|
||||||
|
|
||||||
ADDITIONAL_PACKAGES=
|
GLIB_GSETTINGS
|
||||||
|
|
||||||
dnl keep this in sync with extensions/Makefile.am
|
SHELL_VERSION="$PACKAGE_VERSION"
|
||||||
ALL_EXTENSIONS="example alternate-tab xrandr-indicator windowsNavigator"
|
shell_major=`echo "$PACKAGE_VERSION" | cut -d'.' -f1`
|
||||||
|
shell_minor=`echo "$PACKAGE_VERSION" | cut -d'.' -f2`
|
||||||
|
if test "$(($shell_minor % 2))" -eq 0; then
|
||||||
|
SHELL_VERSION="$shell_major.$shell_minor"
|
||||||
|
fi
|
||||||
|
AC_SUBST([SHELL_VERSION])
|
||||||
|
|
||||||
|
dnl keep this in alphabetic order
|
||||||
|
CLASSIC_EXTENSIONS="apps-menu places-menu alternate-tab default-min-max static-workspaces"
|
||||||
|
DEFAULT_EXTENSIONS="$CLASSIC_EXTENSIONS alternative-status-menu drive-menu windowsNavigator workspace-indicator"
|
||||||
|
ALL_EXTENSIONS="$DEFAULT_EXTENSIONS auto-move-windows example native-window-placement systemMonitor user-theme xrandr-indicator"
|
||||||
|
AC_SUBST(CLASSIC_EXTENSIONS, [$CLASSIC_EXTENSIONS])
|
||||||
|
AC_SUBST(ALL_EXTENSIONS, [$ALL_EXTENSIONS])
|
||||||
AC_ARG_ENABLE([extensions],
|
AC_ARG_ENABLE([extensions],
|
||||||
[AS_HELP_STRING([--enable-extensions],[Space separated list of extensions to enable. Default is that all extensions are built.])],
|
[AS_HELP_STRING([--enable-extensions],[Space separated list of extensions to enable.
|
||||||
|
The default is to build and distribute all extensions that can be installed in the home directory and have no external depedencies.
|
||||||
|
Use "all" to enable all available extensions, or "classic-mode" to enable extensions that restore GNOME 2 functionality.])],
|
||||||
[],
|
[],
|
||||||
[enable_extensions=$ALL_EXTENSIONS]
|
[enable_extensions=$DEFAULT_EXTENSIONS]
|
||||||
)
|
)
|
||||||
|
AM_CONDITIONAL([CLASSIC_MODE], [test x"$enable_extensions" = xclassic-mode -o x"$enable_extensions" = xall])
|
||||||
|
|
||||||
|
if test x"$enable_extensions" = xall; then
|
||||||
|
enable_extensions="$ALL_EXTENSIONS"
|
||||||
|
fi
|
||||||
|
if test x"$enable_extensions" = xclassic-mode; then
|
||||||
|
enable_extensions="$CLASSIC_EXTENSIONS"
|
||||||
|
fi
|
||||||
|
|
||||||
ENABLED_EXTENSIONS=
|
ENABLED_EXTENSIONS=
|
||||||
for e in $enable_extensions; do
|
for e in $enable_extensions; do
|
||||||
case $e in
|
case $e in
|
||||||
xrandr-indicator)
|
systemMonitor)
|
||||||
ENABLED_EXTENSIONS="$ENABLED_EXTENSIONS $e"
|
PKG_CHECK_MODULES(GTOP, libgtop-2.0 >= 2.28.3,
|
||||||
ADDITIONAL_PACKAGES="gnome-desktop-3.0 >= 2.91.6"
|
[ENABLED_EXTENSIONS="$ENABLED_EXTENSIONS $e"],
|
||||||
|
[AC_MSG_WARN([libgtop-2.0 not found, disabling systemMonitor])])
|
||||||
;;
|
;;
|
||||||
alternate-tab|example|windowsNavigator)
|
xrandr-indicator)
|
||||||
|
PKG_CHECK_MODULES(GNOME_DESKTOP, gnome-desktop-3.0 >= 2.91.6,
|
||||||
|
[ENABLED_EXTENSIONS="$ENABLED_EXTENSIONS $e"],
|
||||||
|
[AC_MSG_WARN([gnome-desktop-3.0 not found, disabling xrandr-indicator])])
|
||||||
|
;;
|
||||||
|
dnl keep this in alphabetic order
|
||||||
|
alternate-tab|alternative-status-menu|apps-menu|auto-move-windows|default-min-max|drive-menu|example|native-window-placement|places-menu|static-workspaces|user-theme|windowsNavigator|workspace-indicator)
|
||||||
ENABLED_EXTENSIONS="$ENABLED_EXTENSIONS $e"
|
ENABLED_EXTENSIONS="$ENABLED_EXTENSIONS $e"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
@@ -42,20 +72,26 @@ done
|
|||||||
|
|
||||||
AC_SUBST(ENABLED_EXTENSIONS, [$ENABLED_EXTENSIONS])
|
AC_SUBST(ENABLED_EXTENSIONS, [$ENABLED_EXTENSIONS])
|
||||||
|
|
||||||
dnl We don't really need cflags or libdirs, we just check
|
dnl Please keep this sorted alphabetically
|
||||||
dnl to ensure we don't fail at runtime.
|
|
||||||
|
|
||||||
if test "x$ADDITIONAL_PACKAGES" != x; then
|
|
||||||
PKG_CHECK_MODULES(ADDITIONAL, [$ADDITIONAL_PACKAGES])
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_CONFIG_FILES([
|
AC_CONFIG_FILES([
|
||||||
Makefile
|
data/Makefile
|
||||||
extensions/Makefile
|
|
||||||
extensions/example/Makefile
|
|
||||||
extensions/alternate-tab/Makefile
|
extensions/alternate-tab/Makefile
|
||||||
|
extensions/alternative-status-menu/Makefile
|
||||||
|
extensions/apps-menu/Makefile
|
||||||
|
extensions/auto-move-windows/Makefile
|
||||||
|
extensions/default-min-max/Makefile
|
||||||
|
extensions/drive-menu/Makefile
|
||||||
|
extensions/example/Makefile
|
||||||
|
extensions/native-window-placement/Makefile
|
||||||
|
extensions/places-menu/Makefile
|
||||||
|
extensions/static-workspaces/Makefile
|
||||||
|
extensions/systemMonitor/Makefile
|
||||||
|
extensions/user-theme/Makefile
|
||||||
extensions/windowsNavigator/Makefile
|
extensions/windowsNavigator/Makefile
|
||||||
|
extensions/workspace-indicator/Makefile
|
||||||
extensions/xrandr-indicator/Makefile
|
extensions/xrandr-indicator/Makefile
|
||||||
|
extensions/Makefile
|
||||||
|
Makefile
|
||||||
po/Makefile.in
|
po/Makefile.in
|
||||||
])
|
])
|
||||||
AC_OUTPUT
|
AC_OUTPUT
|
||||||
|
|||||||
@@ -0,0 +1,54 @@
|
|||||||
|
include $(top_srcdir)/include.mk
|
||||||
|
|
||||||
|
desktopdir = $(datadir)/applications
|
||||||
|
desktop_in_in_files = gnome-shell-classic.desktop.in.in
|
||||||
|
desktop_in_files = $(desktop_in_in_files:.desktop.in.in=.desktop.in)
|
||||||
|
desktop_DATA = $(desktop_in_files:.desktop.in=.desktop)
|
||||||
|
|
||||||
|
sessiondir = $(datadir)/gnome-session/sessions
|
||||||
|
session_in_in_files = gnome-classic.session.desktop.in.in
|
||||||
|
session_in_files = $(session_in_in_files:.session.desktop.in.in=.session.desktop.in)
|
||||||
|
session_DATA = $(session_in_files:.session.desktop.in=.session)
|
||||||
|
|
||||||
|
xsessiondir = $(datadir)/xsessions
|
||||||
|
xsession_in_files = gnome-classic.desktop.in
|
||||||
|
xsession_DATA = $(xsession_in_files:.desktop.in=.desktop)
|
||||||
|
|
||||||
|
modedir = $(datadir)/gnome-shell/modes
|
||||||
|
mode_in_files = classic.json.in
|
||||||
|
mode_DATA = $(mode_in_files:.json.in=.json)
|
||||||
|
|
||||||
|
%.desktop.in:%.desktop.in.in
|
||||||
|
$(AM_V_GEN) sed \
|
||||||
|
-e "s|\@libexecdir\@|$(libexecdir)|" \
|
||||||
|
-e "s|\@bindir\@|$(bindir)|" \
|
||||||
|
-e "s|\@VERSION\@|$(VERSION)|" \
|
||||||
|
$< > $@
|
||||||
|
|
||||||
|
comma:=,
|
||||||
|
empty:=
|
||||||
|
space:= $(empty) $(empty)
|
||||||
|
extensions:=$(patsubst %,\"%$(extensionbase)\",$(CLASSIC_EXTENSIONS))
|
||||||
|
extension_list:=$(subst $(space),$(comma),$(extensions))
|
||||||
|
%.json:%.json.in
|
||||||
|
$(AM_V_GEN) sed \
|
||||||
|
-e "s|\@CLASSIC_EXTENSIONS\@|$(extension_list)|g" \
|
||||||
|
$< > $@
|
||||||
|
|
||||||
|
%.session: %.session.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@
|
||||||
|
|
||||||
|
@INTLTOOL_DESKTOP_RULE@
|
||||||
|
|
||||||
|
EXTRA_DIST = \
|
||||||
|
$(desktop_in_in_files) \
|
||||||
|
$(session_in_in_files) \
|
||||||
|
$(xsession_in_files) \
|
||||||
|
$(mode_in_files) \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
|
CLEANFILES = \
|
||||||
|
$(desktop_DATA) \
|
||||||
|
$(session_DATA) \
|
||||||
|
$(xsession_DATA) \
|
||||||
|
$(mode_DATA) \
|
||||||
|
$(NULL)
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"parentMode": "user",
|
||||||
|
"enabledExtensions": [@CLASSIC_EXTENSIONS@]
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
_Name=GNOME Classic
|
||||||
|
_Comment=This session logs you into GNOME Classic
|
||||||
|
Exec=gnome-session --session gnome-classic
|
||||||
|
TryExec=gnome-session
|
||||||
|
Icon=
|
||||||
|
Type=Application
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
[GNOME Session]
|
||||||
|
_Name=GNOME Classic
|
||||||
|
RequiredComponents=gnome-shell-classic;gnome-settings-daemon;
|
||||||
|
IsRunnableHelper=@libexecdir@/gnome-session-check-accelerated
|
||||||
|
FallbackSession=gnome-fallback
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Type=Application
|
||||||
|
_Name=GNOME Shell Classic
|
||||||
|
_Comment=Window management and application launching
|
||||||
|
Exec=@bindir@/gnome-shell --mode=classic
|
||||||
|
TryExec=@bindir@/gnome-shell
|
||||||
|
X-GNOME-Bugzilla-Bugzilla=GNOME
|
||||||
|
X-GNOME-Bugzilla-Product=gnome-shell
|
||||||
|
X-GNOME-Bugzilla-Component=general
|
||||||
|
X-GNOME-Bugzilla-Version=@VERSION@
|
||||||
|
Categories=GNOME;GTK;Core;
|
||||||
|
OnlyShowIn=GNOME;
|
||||||
|
NoDisplay=true
|
||||||
|
X-GNOME-Autostart-Phase=WindowManager
|
||||||
|
X-GNOME-Provides=panel;windowmanager;
|
||||||
|
X-GNOME-Autostart-Notify=true
|
||||||
|
X-GNOME-AutoRestart=false
|
||||||
+16
-8
@@ -1,10 +1,18 @@
|
|||||||
# Change these to modify how installation is performed
|
include $(top_srcdir)/include.mk
|
||||||
# If you modify extensionbase, you also need to modify
|
|
||||||
# metadata.json of each extension
|
|
||||||
topextensiondir = $(datadir)/gnome-shell/extensions
|
|
||||||
extensionbase = @gnome-shell-extensions.gnome.org
|
|
||||||
|
|
||||||
extensiondir = $(topextensiondir)/$(EXTENSION_ID)$(extensionbase)
|
dist_extension_DATA = extension.js stylesheet.css $(EXTRA_MODULES)
|
||||||
|
nodist_extension_DATA = metadata.json $(top_srcdir)/lib/convenience.js $(EXTRA_EXTENSION)
|
||||||
|
|
||||||
dist_extension_DATA = metadata.json extension.js stylesheet.css
|
EXTRA_DIST = metadata.json.in
|
||||||
nodist_extension_DATA = $(EXTRA_EXTENSION)
|
|
||||||
|
metadata.json: metadata.json.in $(top_builddir)/config.status
|
||||||
|
$(AM_V_GEN) sed \
|
||||||
|
-e "s|[@]extension_id@|$(EXTENSION_ID)|" \
|
||||||
|
-e "s|[@]uuid@|$(uuid)|" \
|
||||||
|
-e "s|[@]gschemaname@|$(gschemaname)|" \
|
||||||
|
-e "s|[@]gettext_domain@|$(GETTEXT_PACKAGE)|" \
|
||||||
|
-e "s|[@]shell_current@|$(SHELL_VERSION)|" \
|
||||||
|
-e "s|[@]url@|$(extensionurl)|" \
|
||||||
|
$< > $@
|
||||||
|
|
||||||
|
CLEANFILES = metadata.json
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
DIST_SUBDIRS = example alternate-tab xrandr-indicator windowsNavigator
|
DIST_SUBDIRS = $(ALL_EXTENSIONS)
|
||||||
|
|
||||||
SUBDIRS = $(ENABLED_EXTENSIONS)
|
SUBDIRS = $(ENABLED_EXTENSIONS)
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
EXTENSION_ID = alternate-tab
|
EXTENSION_ID = alternate-tab
|
||||||
|
|
||||||
|
EXTRA_MODULES = prefs.js
|
||||||
|
|
||||||
include ../../extension.mk
|
include ../../extension.mk
|
||||||
|
|||||||
@@ -1,236 +1,63 @@
|
|||||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
/* -*- mode: js; js-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||||
|
|
||||||
const Clutter = imports.gi.Clutter;
|
const Clutter = imports.gi.Clutter;
|
||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
const Mainloop = imports.mainloop;
|
const Meta = imports.gi.Meta;
|
||||||
const Shell= imports.gi.Shell;
|
|
||||||
const St = imports.gi.St;
|
|
||||||
|
|
||||||
const AltTab=imports.ui.altTab;
|
const AltTab = imports.ui.altTab;
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const Tweener = imports.ui.tweener;
|
|
||||||
const WindowManager = imports.ui.windowManager;
|
|
||||||
|
|
||||||
function AltTabPopup2() {
|
let injections = {};
|
||||||
this._init();
|
|
||||||
|
function init(metadata) {
|
||||||
}
|
}
|
||||||
|
|
||||||
AltTabPopup2.prototype = {
|
function setKeybinding(name, func) {
|
||||||
__proto__ : AltTab.AltTabPopup.prototype,
|
Main.wm.setCustomKeybindingHandler(name, Main.KeybindingMode.NORMAL, func);
|
||||||
|
}
|
||||||
|
|
||||||
_init : function() {
|
function enable() {
|
||||||
this.actor = new Shell.GenericContainer({ name: 'altTabPopup',
|
injections['_initialSelection'] = AltTab.WindowSwitcherPopup.prototype._initialSelection;
|
||||||
reactive: true });
|
AltTab.WindowSwitcherPopup.prototype._initialSelection = function(backward, binding) {
|
||||||
|
if (binding == 'switch-windows-backward' ||
|
||||||
this.actor.connect('get-preferred-width', Lang.bind(this, this._getPreferredWidth));
|
binding == 'switch-applications-backward' ||
|
||||||
this.actor.connect('get-preferred-height', Lang.bind(this, this._getPreferredHeight));
|
binding == 'switch-group-backward' || backward)
|
||||||
this.actor.connect('allocate', Lang.bind(this, this._allocate));
|
this._select(this._items.length - 1);
|
||||||
|
else if (this._items.length == 1)
|
||||||
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
|
this._select(0);
|
||||||
|
else
|
||||||
this._haveModal = false;
|
this._select(1);
|
||||||
|
};
|
||||||
this._currentApp = 0;
|
injections['_keyPressHandler'] = AltTab.WindowSwitcherPopup.prototype._keyPressHandler;
|
||||||
this._currentWindow = -1;
|
AltTab.WindowSwitcherPopup.prototype._keyPressHandler = function(keysym, backwards, action) {
|
||||||
this._thumbnailTimeoutId = 0;
|
if (action == Meta.KeyBindingAction.SWITCH_WINDOWS ||
|
||||||
this._motionTimeoutId = 0;
|
action == Meta.KeyBindingAction.SWITCH_APPLICATIONS ||
|
||||||
|
action == Meta.KeyBindingAction.SWITCH_GROUP) {
|
||||||
// Initially disable hover so we ignore the enter-event if
|
this._select(backwards ? this._previous() : this._next());
|
||||||
// the switcher appears underneath the current pointer location
|
} else if (action == Meta.KeyBindingAction.SWITCH_WINDOWS_BACKWARD ||
|
||||||
this._disableHover();
|
action == Meta.KeyBindingAction.SWITCH_APPLICATIONS_BACKWARD ||
|
||||||
|
action == Meta.KeyBindingAction.SWITCH_GROUP_BACKWARD) {
|
||||||
this.show();
|
this._select(this._previous());
|
||||||
Main.uiGroup.add_actor(this.actor);
|
|
||||||
},
|
|
||||||
|
|
||||||
show : function(backward) {
|
|
||||||
let windows = global.get_window_actors();
|
|
||||||
|
|
||||||
let list = '';
|
|
||||||
let normal_windows= [];
|
|
||||||
let appIcons = [];
|
|
||||||
let tracker = Shell.WindowTracker.get_default();
|
|
||||||
let apps = tracker.get_running_apps ('');
|
|
||||||
|
|
||||||
for (let w = windows.length-1; w >= 0; w--) {
|
|
||||||
let win = windows[w].get_meta_window();
|
|
||||||
if (win.window_type == 0) {
|
|
||||||
normal_windows.push(win);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
normal_windows.sort(Lang.bind(this, this._sortWindows));
|
|
||||||
|
|
||||||
let win_on_top = normal_windows.shift();
|
|
||||||
normal_windows.push(win_on_top);
|
|
||||||
windows = normal_windows;
|
|
||||||
for (let w = 0; w < windows.length; w++) {
|
|
||||||
let win = windows[w];
|
|
||||||
|
|
||||||
let ap1 = null;
|
|
||||||
for (let i = 0;i < apps.length; i++) {
|
|
||||||
let app_wins = apps[i].get_windows();
|
|
||||||
for (let j = 0;j < app_wins.length; j++) {
|
|
||||||
if (app_wins[j] == win)
|
|
||||||
ap1 = new AltTab.AppIcon(apps[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ap1.cachedWindows = [win];
|
|
||||||
appIcons.push(ap1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!windows.length)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (!Main.pushModal(this.actor))
|
|
||||||
return false;
|
|
||||||
this._haveModal = true;
|
|
||||||
|
|
||||||
this.actor.connect('key-press-event', Lang.bind(this, this._keyPressEvent));
|
|
||||||
this.actor.connect('key-release-event', Lang.bind(this, this._keyReleaseEvent));
|
|
||||||
|
|
||||||
this.actor.connect('button-press-event', Lang.bind(this, this._clickedOutside));
|
|
||||||
this.actor.connect('scroll-event', Lang.bind(this, this._onScroll));
|
|
||||||
|
|
||||||
this._appSwitcher = new WindowList(windows);
|
|
||||||
this._appSwitcher.highlight(0,false);
|
|
||||||
this.actor.add_actor(this._appSwitcher.actor);
|
|
||||||
this._appSwitcher.connect('item-activated', Lang.bind(this, this._appActivated));
|
|
||||||
this._appSwitcher.connect('item-entered', Lang.bind(this, this._appEntered));
|
|
||||||
|
|
||||||
this._appIcons = appIcons;
|
|
||||||
|
|
||||||
return true
|
|
||||||
},
|
|
||||||
|
|
||||||
_keyPressEvent : function(actor, event) {
|
|
||||||
let keysym = event.get_key_symbol();
|
|
||||||
let shift = (Shell.get_event_state(event) & Clutter.ModifierType.SHIFT_MASK);
|
|
||||||
// X allows servers to represent Shift+Tab in two different ways
|
|
||||||
if (shift && keysym == Clutter.Tab)
|
|
||||||
keysym = Clutter.ISO_Left_Tab;
|
|
||||||
|
|
||||||
this._disableHover();
|
|
||||||
|
|
||||||
if (keysym == Clutter.grave)
|
|
||||||
this._select(this._currentApp, this._nextWindow());
|
|
||||||
else if (keysym == Clutter.asciitilde)
|
|
||||||
this._select(this._currentApp, this._previousWindow());
|
|
||||||
else if (keysym == Clutter.Escape)
|
|
||||||
this.destroy();
|
|
||||||
else if (this._thumbnailsFocused) {
|
|
||||||
if (keysym == Clutter.Tab) {
|
|
||||||
if (this._currentWindow == this._appIcons[this._currentApp].cachedWindows.length - 1)
|
|
||||||
this._select(this._nextApp());
|
|
||||||
else
|
|
||||||
this._select(this._currentApp, this._nextWindow());
|
|
||||||
} else if (keysym == Clutter.ISO_Left_Tab) {
|
|
||||||
if (this._currentWindow == 0 || this._currentWindow == -1)
|
|
||||||
this._select(this._previousApp());
|
|
||||||
else
|
|
||||||
this._select(this._currentApp, this._previousWindow());
|
|
||||||
} else if (keysym == Clutter.Left)
|
|
||||||
this._select(this._currentApp, this._previousWindow());
|
|
||||||
else if (keysym == Clutter.Right)
|
|
||||||
this._select(this._currentApp, this._nextWindow());
|
|
||||||
else if (keysym == Clutter.Up)
|
|
||||||
this._select(this._currentApp, null, true);
|
|
||||||
} else {
|
} else {
|
||||||
if (keysym == Clutter.Tab)
|
if (keysym == Clutter.Left)
|
||||||
this._select(this._nextApp());
|
this._select(this._previous());
|
||||||
else if (keysym == Clutter.ISO_Left_Tab)
|
|
||||||
this._select(this._previousApp());
|
|
||||||
else if (keysym == Clutter.Left)
|
|
||||||
this._select(this._previousApp());
|
|
||||||
else if (keysym == Clutter.Right)
|
else if (keysym == Clutter.Right)
|
||||||
this._select(this._nextApp());
|
this._select(this._next());
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
return true;
|
setKeybinding('switch-applications', Lang.bind(Main.wm, Main.wm._startWindowSwitcher));
|
||||||
},
|
setKeybinding('switch-group', Lang.bind(Main.wm, Main.wm._startWindowSwitcher));
|
||||||
|
setKeybinding('switch-applications-backward', Lang.bind(Main.wm, Main.wm._startWindowSwitcher));
|
||||||
_sortWindows : function(win1,win2) {
|
setKeybinding('switch-group-backward', Lang.bind(Main.wm, Main.wm._startWindowSwitcher));
|
||||||
let t1 = win1.get_user_time();
|
|
||||||
let t2 = win2.get_user_time();
|
|
||||||
if (t2 > t1) return 1;
|
|
||||||
else return -1;
|
|
||||||
},
|
|
||||||
|
|
||||||
_appActivated : function(thumbnailList, n) {
|
|
||||||
let appIcon = this._appIcons[this._currentApp];
|
|
||||||
Main.activateWindow(appIcon.cachedWindows[0]);
|
|
||||||
this.destroy();
|
|
||||||
},
|
|
||||||
|
|
||||||
_finish : function() {
|
|
||||||
let app = this._appIcons[this._currentApp];
|
|
||||||
Main.activateWindow(app.cachedWindows[0]);
|
|
||||||
this.destroy();
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
function WindowList(windows) {
|
|
||||||
this._init(windows);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
WindowList.prototype = {
|
function disable() {
|
||||||
__proto__ : AltTab.AppSwitcher.prototype,
|
setKeybinding('switch-applications', Lang.bind(Main.wm, Main.wm._startAppSwitcher));
|
||||||
|
setKeybinding('switch-group', Lang.bind(Main.wm, Main.wm._startAppSwitcher));
|
||||||
|
setKeybinding('switch-applications-backward', Lang.bind(Main.wm, Main.wm._startAppSwitcher));
|
||||||
|
setKeybinding('switch-group-backward', Lang.bind(Main.wm, Main.wm._startAppSwitcher));
|
||||||
|
|
||||||
_init : function(windows) {
|
for (prop in injections)
|
||||||
AltTab.AppSwitcher.prototype._init.call(this, []);
|
AltTab.WindowSwitcherPopup.prototype[prop] = injections[prop];
|
||||||
|
|
||||||
let activeWorkspace = global.screen.get_active_workspace();
|
|
||||||
this._labels = new Array();
|
|
||||||
this._thumbnailBins = new Array();
|
|
||||||
this._clones = new Array();
|
|
||||||
this._windows = windows;
|
|
||||||
this._arrows= new Array();
|
|
||||||
this.icons= new Array();
|
|
||||||
for (let w = 0; w < windows.length; w++) {
|
|
||||||
let arrow = new St.DrawingArea({ style_class: 'switcher-arrow' });
|
|
||||||
arrow.connect('repaint', Lang.bind(this, function (area) {
|
|
||||||
Shell.draw_box_pointer(area, Shell.PointerDirection.DOWN);
|
|
||||||
}));
|
|
||||||
this._list.add_actor(arrow);
|
|
||||||
this._arrows.push(arrow);
|
|
||||||
|
|
||||||
arrow.hide();
|
|
||||||
|
|
||||||
let win=windows[w];
|
|
||||||
|
|
||||||
let tracker = Shell.WindowTracker.get_default();
|
|
||||||
let apps = tracker.get_running_apps ('');
|
|
||||||
let ap1 = null;
|
|
||||||
for (let i = 0; i < apps.length; i++) {
|
|
||||||
let app_wins = apps[i].get_windows();
|
|
||||||
for (let j = 0; j < app_wins.length; j++) {
|
|
||||||
if (app_wins[j] == win) {
|
|
||||||
ap1 = new AltTab.AppIcon(apps[i]);
|
|
||||||
let mutterWindow = win.get_compositor_private();
|
|
||||||
let windowTexture = mutterWindow.get_texture ();
|
|
||||||
let [width, height] = windowTexture.get_size();
|
|
||||||
let scale = Math.min(1.0, 128 / width, 128 / height);
|
|
||||||
|
|
||||||
let clone = new Clutter.Clone ({ source: windowTexture, reactive: true, width: width * scale, height: height * scale });
|
|
||||||
ap1.icon = ap1.app.create_icon_texture(128);
|
|
||||||
ap1._iconBin.set_size(128,128);
|
|
||||||
ap1._iconBin.child=clone;
|
|
||||||
|
|
||||||
ap1.label.text=win.get_title();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ap1.cachedWindows = [win];
|
|
||||||
this._addIcon(ap1);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
addSeparator: function () {
|
|
||||||
this._separator=null;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
function main() {
|
|
||||||
Main.wm.setKeybindingHandler('switch_windows', function() {
|
|
||||||
let alpopup = new AltTabPopup2();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
{
|
|
||||||
"uuid": "alternate-tab@gnome-shell-extensions.gnome.org",
|
|
||||||
"name": "AlternateTab",
|
|
||||||
"description": "A replacement for Alt-Tab, allows to cycle between windows and does not group by application",
|
|
||||||
"original-author": "thomas.bouffon@gmail.com",
|
|
||||||
"shell-version": [ "2.91.5", "2.91.6" ]
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"extension-id": "@extension_id@",
|
||||||
|
"uuid": "@uuid@",
|
||||||
|
"settings-schema": "@gschemaname@",
|
||||||
|
"gettext-domain": "@gettext_domain@",
|
||||||
|
"name": "AlternateTab",
|
||||||
|
"description": "A replacement for Alt-Tab, allows to cycle between windows and does not group by application",
|
||||||
|
"original-authors": [ "jw@bargsten.org", "thomas.bouffon@gmail.com" ],
|
||||||
|
"shell-version": [ "@shell_current@" ],
|
||||||
|
"url": "@url@"
|
||||||
|
}
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||||
|
|
||||||
|
const Gio = imports.gi.Gio;
|
||||||
|
const Gtk = imports.gi.Gtk;
|
||||||
|
const GObject = imports.gi.GObject;
|
||||||
|
const Lang = imports.lang;
|
||||||
|
|
||||||
|
const Gettext = imports.gettext.domain('gnome-shell-extensions');
|
||||||
|
const _ = Gettext.gettext;
|
||||||
|
const N_ = function(e) { return e };
|
||||||
|
|
||||||
|
const ExtensionUtils = imports.misc.extensionUtils;
|
||||||
|
const Me = ExtensionUtils.getCurrentExtension();
|
||||||
|
const Convenience = Me.imports.convenience;
|
||||||
|
|
||||||
|
const SETTINGS_APP_ICON_MODE = 'app-icon-mode';
|
||||||
|
const SETTINGS_CURRENT_WORKSPACE_ONLY = 'current-workspace-only';
|
||||||
|
|
||||||
|
const MODES = {
|
||||||
|
'thumbnail-only': N_("Thumbnail only"),
|
||||||
|
'app-icon-only': N_("Application icon only"),
|
||||||
|
'both': N_("Thumbnail and application icon"),
|
||||||
|
};
|
||||||
|
|
||||||
|
const AltTabSettingsWidget = new GObject.Class({
|
||||||
|
Name: 'AlternateTab.Prefs.AltTabSettingsWidget',
|
||||||
|
GTypeName: 'AltTabSettingsWidget',
|
||||||
|
Extends: Gtk.Grid,
|
||||||
|
|
||||||
|
_init : function(params) {
|
||||||
|
this.parent(params);
|
||||||
|
this.margin = 10;
|
||||||
|
this.orientation = Gtk.Orientation.VERTICAL;
|
||||||
|
|
||||||
|
this._settings = new Gio.Settings({ schema: 'org.gnome.shell.window-switcher' });
|
||||||
|
|
||||||
|
let presentLabel = _("Present windows as");
|
||||||
|
this.add(new Gtk.Label({ label: presentLabel, sensitive: true,
|
||||||
|
margin_bottom: 10, margin_top: 5 }));
|
||||||
|
|
||||||
|
let top = 1;
|
||||||
|
let radio = null;
|
||||||
|
let currentMode = this._settings.get_string(SETTINGS_APP_ICON_MODE);
|
||||||
|
for (let mode in MODES) {
|
||||||
|
// copy the mode variable because it has function scope, not block scope
|
||||||
|
// so cannot be used in a closure
|
||||||
|
let modeCapture = mode;
|
||||||
|
let name = Gettext.gettext(MODES[mode]);
|
||||||
|
|
||||||
|
radio = new Gtk.RadioButton({ group: radio, label: name, valign: Gtk.Align.START });
|
||||||
|
radio.connect('toggled', Lang.bind(this, function(widget) {
|
||||||
|
if (widget.active)
|
||||||
|
this._settings.set_string(SETTINGS_APP_ICON_MODE, modeCapture);
|
||||||
|
}));
|
||||||
|
this.add(radio);
|
||||||
|
|
||||||
|
if (mode == currentMode)
|
||||||
|
radio.active = true;
|
||||||
|
top += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
let check = new Gtk.CheckButton({ label: _("Show only windows in the current workspace"),
|
||||||
|
margin_top: 12 });
|
||||||
|
this._settings.bind(SETTINGS_CURRENT_WORKSPACE_ONLY, check, 'active', Gio.SettingsBindFlags.DEFAULT);
|
||||||
|
this.add(check);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
function init() {
|
||||||
|
Convenience.initTranslations();
|
||||||
|
}
|
||||||
|
|
||||||
|
function buildPrefsWidget() {
|
||||||
|
let widget = new AltTabSettingsWidget();
|
||||||
|
widget.show_all();
|
||||||
|
|
||||||
|
return widget;
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
EXTENSION_ID = alternative-status-menu
|
||||||
|
|
||||||
|
include ../../extension.mk
|
||||||
|
include ../../settings.mk
|
||||||
@@ -0,0 +1,191 @@
|
|||||||
|
/* -*- mode: js2 - indent-tabs-mode: nil - js2-basic-offset: 4 -*- */
|
||||||
|
|
||||||
|
const Gio = imports.gi.Gio;
|
||||||
|
const GLib = imports.gi.GLib;
|
||||||
|
const Lang = imports.lang;
|
||||||
|
const Mainloop = imports.mainloop;
|
||||||
|
const St = imports.gi.St;
|
||||||
|
|
||||||
|
const BoxPointer = imports.ui.boxpointer;
|
||||||
|
const Main = imports.ui.main;
|
||||||
|
const PopupMenu = imports.ui.popupMenu;
|
||||||
|
|
||||||
|
const Gettext = imports.gettext.domain('gnome-shell-extensions');
|
||||||
|
const _ = Gettext.gettext;
|
||||||
|
|
||||||
|
const ExtensionUtils = imports.misc.extensionUtils;
|
||||||
|
const Me = ExtensionUtils.getCurrentExtension();
|
||||||
|
const Convenience = Me.imports.convenience;
|
||||||
|
|
||||||
|
const LOCK_ENABLED_KEY = 'lock-enabled';
|
||||||
|
|
||||||
|
let extension;
|
||||||
|
|
||||||
|
// Need to reimplement here the missing bits from LoginManager
|
||||||
|
|
||||||
|
function loginManager_hibernate() {
|
||||||
|
if (this._proxy) {
|
||||||
|
// systemd path
|
||||||
|
this._proxy.call("Hibernate",
|
||||||
|
GLib.Variant.new('(b)', [true]),
|
||||||
|
Gio.DBusCallFlags.NONE,
|
||||||
|
-1, null, null);
|
||||||
|
} else {
|
||||||
|
// upower path
|
||||||
|
this._upClient.hibernate_sync(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function loginManager_canHibernate(asyncCallback) {
|
||||||
|
if (this._proxy) {
|
||||||
|
// systemd path
|
||||||
|
this._proxy.call("CanHibernate",
|
||||||
|
null,
|
||||||
|
Gio.DBusCallFlags.NONE,
|
||||||
|
-1, null, function(proxy, asyncResult) {
|
||||||
|
let result, error;
|
||||||
|
|
||||||
|
try {
|
||||||
|
result = proxy.call_finish(asyncResult);
|
||||||
|
} catch(e) {
|
||||||
|
error = e;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (error)
|
||||||
|
asyncCallback(false);
|
||||||
|
else
|
||||||
|
asyncCallback(result[0] != 'no');
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
Mainloop.idle_add(Lang.bind(this, function() {
|
||||||
|
asyncCallback(this._upClient.get_can_hibernate());
|
||||||
|
return false;
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function statusMenu_updateHaveHibernate() {
|
||||||
|
loginManager_canHibernate.call(this._loginManager, Lang.bind(this,
|
||||||
|
function(result) {
|
||||||
|
this._haveHibernate = result;
|
||||||
|
this._updateSuspendOrPowerOff();
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
function statusMenu_updateSuspendOrPowerOff() {
|
||||||
|
this._suspendOrPowerOffItem.actor.hide();
|
||||||
|
|
||||||
|
extension.suspendItem.actor.visible = this._haveSuspend;
|
||||||
|
extension.hibernateItem.actor.visible = this._haveHibernate;
|
||||||
|
extension.powerOffItem.actor.visible = this._haveShutdown;
|
||||||
|
}
|
||||||
|
|
||||||
|
function onSuspendActivate(item) {
|
||||||
|
Main.overview.hide();
|
||||||
|
|
||||||
|
if (this._screenSaverSettings.get_boolean(LOCK_ENABLED_KEY)) {
|
||||||
|
let tmpId = Main.screenShield.connect('lock-screen-shown', Lang.bind(this, function() {
|
||||||
|
Main.screenShield.disconnect(tmpId);
|
||||||
|
|
||||||
|
this._loginManager.suspend();
|
||||||
|
}));
|
||||||
|
|
||||||
|
this.menu.close(BoxPointer.PopupAnimation.NONE);
|
||||||
|
Main.screenShield.lock(true);
|
||||||
|
} else {
|
||||||
|
this._loginManager.suspend();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function onHibernateActivate(item) {
|
||||||
|
Main.overview.hide();
|
||||||
|
|
||||||
|
if (this._screenSaverSettings.get_boolean(LOCK_ENABLED_KEY)) {
|
||||||
|
let tmpId = Main.screenShield.connect('lock-screen-shown', Lang.bind(this, function() {
|
||||||
|
Main.screenShield.disconnect(tmpId);
|
||||||
|
|
||||||
|
loginManager_hibernate.call(this._loginManager);
|
||||||
|
}));
|
||||||
|
|
||||||
|
this.menu.close(BoxPointer.PopupAnimation.NONE);
|
||||||
|
Main.screenShield.lock(true);
|
||||||
|
} else {
|
||||||
|
loginManager_hibernate.call(this._loginManager);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const Extension = new Lang.Class({
|
||||||
|
Name: 'AlternativeStatusMenu.Extension',
|
||||||
|
|
||||||
|
_init: function() {
|
||||||
|
this.suspendItem = null;
|
||||||
|
this.hibernateItem = null;
|
||||||
|
this.powerOffItem = null;
|
||||||
|
|
||||||
|
Convenience.initTranslations();
|
||||||
|
this._settings = Convenience.getSettings();
|
||||||
|
},
|
||||||
|
|
||||||
|
enable: function() {
|
||||||
|
let statusMenu = Main.panel.statusArea.userMenu;
|
||||||
|
|
||||||
|
let children = statusMenu.menu._getMenuItems();
|
||||||
|
let index = children.length;
|
||||||
|
|
||||||
|
/* find the old entry */
|
||||||
|
for (let i = children.length - 1; i >= 0; i--) {
|
||||||
|
if (children[i] == statusMenu._suspendOrPowerOffItem) {
|
||||||
|
index = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* add the new entries */
|
||||||
|
this.suspendItem = new PopupMenu.PopupMenuItem(_("Suspend"));
|
||||||
|
this.suspendItem.connect('activate', Lang.bind(statusMenu, onSuspendActivate));
|
||||||
|
|
||||||
|
this.hibernateItem = new PopupMenu.PopupMenuItem(_("Hibernate"));
|
||||||
|
this.hibernateItem.connect('activate', Lang.bind(statusMenu, onHibernateActivate));
|
||||||
|
|
||||||
|
this.powerOffItem = new PopupMenu.PopupMenuItem(_("Power Off"));
|
||||||
|
this.powerOffItem.connect('activate', Lang.bind(statusMenu, function() {
|
||||||
|
this._session.ShutdownRemote();
|
||||||
|
}));
|
||||||
|
|
||||||
|
/* insert the entries at the found position */
|
||||||
|
statusMenu.menu.addMenuItem(this.suspendItem, index);
|
||||||
|
statusMenu.menu.addMenuItem(this.hibernateItem, index + 1);
|
||||||
|
statusMenu.menu.addMenuItem(this.powerOffItem, index + 2);
|
||||||
|
|
||||||
|
this._openStateChangedId = statusMenu.menu.connect('open-state-changed', function() {
|
||||||
|
statusMenu_updateHaveHibernate.call(statusMenu);
|
||||||
|
});
|
||||||
|
|
||||||
|
this._previousUpdateSuspendOrPowerOff = statusMenu._updateSuspendOrPowerOff;
|
||||||
|
statusMenu._updateSuspendOrPowerOff = statusMenu_updateSuspendOrPowerOff;
|
||||||
|
|
||||||
|
this._settingsChangedId = this._settings.connect('changed', function() {
|
||||||
|
statusMenu._updateSuspendOrPowerOff();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
disable: function() {
|
||||||
|
let statusMenu = Main.panel.statusArea.userMenu;
|
||||||
|
|
||||||
|
this.suspendItem.destroy();
|
||||||
|
this.hibernateItem.destroy();
|
||||||
|
this.powerOffItem.destroy();
|
||||||
|
|
||||||
|
statusMenu.menu.disconnect(this._openStateChangedId);
|
||||||
|
this._settings.disconnect(this._settingsChangedId);
|
||||||
|
|
||||||
|
statusMenu._updateSuspendOrPowerOff = this._previousUpdateSuspendOrPowerOff;
|
||||||
|
statusMenu._updateSuspendOrPowerOff();
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
// Put your extension initialization code here
|
||||||
|
function init(metadata) {
|
||||||
|
return (extension = new Extension());
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"extension-id": "@extension_id@",
|
||||||
|
"uuid": "@uuid@",
|
||||||
|
"settings-schema": "@gschemaname@",
|
||||||
|
"gettext-domain": "@gettext_domain@",
|
||||||
|
"name": "Alternative Status Menu",
|
||||||
|
"description": "Replaces GNOME Shell Status Menu with one showing Suspend/Hibernate and Power Off as separate items",
|
||||||
|
"shell-version": [ "@shell_current@" ],
|
||||||
|
"url": "@url@"
|
||||||
|
}
|
||||||
+14
@@ -0,0 +1,14 @@
|
|||||||
|
<schemalist gettext-domain="gnome-shell-extensions">
|
||||||
|
<schema id="org.gnome.shell.extensions.alternative-status-menu" path="/org/gnome/shell/extensions/alternative-status-menu/">
|
||||||
|
<key name="allow-suspend" type="b">
|
||||||
|
<default>true</default>
|
||||||
|
<_summary>Enable suspending</_summary>
|
||||||
|
<_description>Control the visibility of the Suspend menu item</_description>
|
||||||
|
</key>
|
||||||
|
<key name="allow-hibernate" type="b">
|
||||||
|
<default>true</default>
|
||||||
|
<_summary>Enable hibernating</_summary>
|
||||||
|
<_description>Control the visibility of the Hibernate menu item</_description>
|
||||||
|
</key>
|
||||||
|
</schema>
|
||||||
|
</schemalist>
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
.popup-alternating-menu-item:alternate {
|
||||||
|
font-weight: normal !important;
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
EXTENSION_ID = apps-menu
|
||||||
|
|
||||||
|
include ../../extension.mk
|
||||||
@@ -0,0 +1,111 @@
|
|||||||
|
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||||
|
|
||||||
|
const GMenu = imports.gi.GMenu;
|
||||||
|
const Lang = imports.lang;
|
||||||
|
const Shell = imports.gi.Shell;
|
||||||
|
const St = imports.gi.St;
|
||||||
|
|
||||||
|
const Main = imports.ui.main;
|
||||||
|
const PanelMenu = imports.ui.panelMenu;
|
||||||
|
const PopupMenu = imports.ui.popupMenu;
|
||||||
|
|
||||||
|
const ICON_SIZE = 28;
|
||||||
|
|
||||||
|
const AppMenuItem = new Lang.Class({
|
||||||
|
Name: 'AppsMenu.AppMenuItem',
|
||||||
|
Extends: PopupMenu.PopupBaseMenuItem,
|
||||||
|
|
||||||
|
_init: function (app, params) {
|
||||||
|
this.parent(params);
|
||||||
|
|
||||||
|
this._app = app;
|
||||||
|
this.label = new St.Label({ text: app.get_name() });
|
||||||
|
this.addActor(this.label);
|
||||||
|
this._icon = app.create_icon_texture(ICON_SIZE);
|
||||||
|
this.addActor(this._icon, { expand: false });
|
||||||
|
},
|
||||||
|
|
||||||
|
activate: function (event) {
|
||||||
|
this._app.activate_full(-1, event.get_time());
|
||||||
|
|
||||||
|
this.parent(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
const ApplicationsButton = new Lang.Class({
|
||||||
|
Name: 'AppsMenu.ApplicationsButton',
|
||||||
|
Extends: PanelMenu.SystemStatusButton,
|
||||||
|
|
||||||
|
_init: function() {
|
||||||
|
this.parent('start-here-symbolic');
|
||||||
|
|
||||||
|
this._appSys = Shell.AppSystem.get_default();
|
||||||
|
this._installedChangedId = this._appSys.connect('installed-changed', Lang.bind(this, this._refresh));
|
||||||
|
|
||||||
|
this._display();
|
||||||
|
},
|
||||||
|
|
||||||
|
destroy: function() {
|
||||||
|
this._appSys.disconnect(this._installedChangedId);
|
||||||
|
|
||||||
|
this.parent();
|
||||||
|
},
|
||||||
|
|
||||||
|
_refresh: function() {
|
||||||
|
this._clearAll();
|
||||||
|
this._display();
|
||||||
|
},
|
||||||
|
|
||||||
|
_clearAll: function() {
|
||||||
|
this.menu.removeAll();
|
||||||
|
},
|
||||||
|
|
||||||
|
// Recursively load a GMenuTreeDirectory; we could put this in ShellAppSystem too
|
||||||
|
// (taken from js/ui/appDisplay.js in core shell)
|
||||||
|
_loadCategory: function(dir, menu) {
|
||||||
|
var iter = dir.iter();
|
||||||
|
var nextType;
|
||||||
|
while ((nextType = iter.next()) != GMenu.TreeItemType.INVALID) {
|
||||||
|
if (nextType == GMenu.TreeItemType.ENTRY) {
|
||||||
|
var entry = iter.get_entry();
|
||||||
|
var app = this._appSys.lookup_app_by_tree_entry(entry);
|
||||||
|
if (!entry.get_app_info().get_nodisplay())
|
||||||
|
menu.addMenuItem(new AppMenuItem(app));
|
||||||
|
} else if (nextType == GMenu.TreeItemType.DIRECTORY) {
|
||||||
|
this._loadCategory(iter.get_directory(), menu);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_display : function() {
|
||||||
|
let tree = this._appSys.get_tree();
|
||||||
|
let root = tree.get_root_directory();
|
||||||
|
|
||||||
|
let iter = root.iter();
|
||||||
|
let nextType;
|
||||||
|
while ((nextType = iter.next()) != GMenu.TreeItemType.INVALID) {
|
||||||
|
if (nextType == GMenu.TreeItemType.DIRECTORY) {
|
||||||
|
let dir = iter.get_directory();
|
||||||
|
let item = new PopupMenu.PopupSubMenuMenuItem(dir.get_name());
|
||||||
|
this._loadCategory(dir, item.menu);
|
||||||
|
this.menu.addMenuItem(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
let appsMenuButton;
|
||||||
|
|
||||||
|
function enable() {
|
||||||
|
appsMenuButton = new ApplicationsButton();
|
||||||
|
Main.panel.addToStatusArea('apps-menu', appsMenuButton, 1, 'left');
|
||||||
|
}
|
||||||
|
|
||||||
|
function disable() {
|
||||||
|
appsMenuButton.destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
function init() {
|
||||||
|
/* do nothing */
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"extension-id": "@extension_id@",
|
||||||
|
"uuid": "@uuid@",
|
||||||
|
"settings-schema": "@gschemaname@",
|
||||||
|
"gettext-domain": "@gettext_domain@",
|
||||||
|
"name": "Applications Menu",
|
||||||
|
"description": "Add a gnome 2.x style menu for applications",
|
||||||
|
"shell-version": [ "@shell_current@" ],
|
||||||
|
"url": "@url@"
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
/* none used*/
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
EXTENSION_ID = auto-move-windows
|
||||||
|
|
||||||
|
EXTRA_MODULES = prefs.js
|
||||||
|
|
||||||
|
include ../../extension.mk
|
||||||
|
include ../../settings.mk
|
||||||
|
|
||||||
@@ -0,0 +1,167 @@
|
|||||||
|
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
||||||
|
// Start apps on custom workspaces
|
||||||
|
|
||||||
|
const Glib = imports.gi.GLib;
|
||||||
|
const Gio = imports.gi.Gio;
|
||||||
|
const Lang = imports.lang;
|
||||||
|
const Mainloop = imports.mainloop;
|
||||||
|
const Meta = imports.gi.Meta;
|
||||||
|
const Shell = imports.gi.Shell;
|
||||||
|
const St = imports.gi.St;
|
||||||
|
|
||||||
|
const Main = imports.ui.main;
|
||||||
|
|
||||||
|
const ExtensionUtils = imports.misc.extensionUtils;
|
||||||
|
const Me = ExtensionUtils.getCurrentExtension();
|
||||||
|
const Convenience = Me.imports.convenience;
|
||||||
|
|
||||||
|
const SETTINGS_KEY = 'application-list';
|
||||||
|
|
||||||
|
let settings;
|
||||||
|
|
||||||
|
const WindowMover = new Lang.Class({
|
||||||
|
Name: 'AutoMoveWindows.WindowMover',
|
||||||
|
|
||||||
|
_init: function() {
|
||||||
|
this._settings = settings;
|
||||||
|
this._windowTracker = Shell.WindowTracker.get_default();
|
||||||
|
|
||||||
|
let display = global.screen.get_display();
|
||||||
|
// Connect after so the handler from ShellWindowTracker has already run
|
||||||
|
this._windowCreatedId = display.connect_after('window-created', Lang.bind(this, this._findAndMove));
|
||||||
|
},
|
||||||
|
|
||||||
|
destroy: function() {
|
||||||
|
if (this._windowCreatedId) {
|
||||||
|
global.screen.get_display().disconnect(this._windowCreatedId);
|
||||||
|
this._windowCreatedId = 0;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_ensureAtLeastWorkspaces: function(num, window) {
|
||||||
|
for (let j = global.screen.n_workspaces; j <= num; j++) {
|
||||||
|
window.change_workspace_by_index(j-1, false, global.get_current_time());
|
||||||
|
global.screen.append_new_workspace(false, 0);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_findAndMove: function(display, window, noRecurse) {
|
||||||
|
if (!this._windowTracker.is_window_interesting(window))
|
||||||
|
return;
|
||||||
|
|
||||||
|
let spaces = this._settings.get_strv(SETTINGS_KEY);
|
||||||
|
|
||||||
|
let app = this._windowTracker.get_window_app(window);
|
||||||
|
if (!app) {
|
||||||
|
if (!noRecurse) {
|
||||||
|
// window is not tracked yet
|
||||||
|
Mainloop.idle_add(Lang.bind(this, function() {
|
||||||
|
this._findAndMove(display, window, true);
|
||||||
|
return false;
|
||||||
|
}));
|
||||||
|
} else
|
||||||
|
log ('Cannot find application for window');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let app_id = app.get_id();
|
||||||
|
for ( let j = 0 ; j < spaces.length; j++ ) {
|
||||||
|
let apps_to_space = spaces[j].split(":");
|
||||||
|
// Match application id
|
||||||
|
if (apps_to_space[0] == app_id) {
|
||||||
|
let workspace_num = parseInt(apps_to_space[1]) - 1;
|
||||||
|
|
||||||
|
if (workspace_num >= global.screen.n_workspaces)
|
||||||
|
this._ensureAtLeastWorkspaces(workspace_num, window);
|
||||||
|
|
||||||
|
window.change_workspace_by_index(workspace_num, false, global.get_current_time());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
let prevCheckWorkspaces;
|
||||||
|
let winMover;
|
||||||
|
|
||||||
|
function init() {
|
||||||
|
Convenience.initTranslations();
|
||||||
|
settings = Convenience.getSettings();
|
||||||
|
}
|
||||||
|
|
||||||
|
function myCheckWorkspaces() {
|
||||||
|
let i;
|
||||||
|
let emptyWorkspaces = new Array(Main._workspaces.length);
|
||||||
|
|
||||||
|
for (i = 0; i < Main._workspaces.length; i++) {
|
||||||
|
let lastRemoved = Main._workspaces[i]._lastRemovedWindow;
|
||||||
|
if (lastRemoved &&
|
||||||
|
(lastRemoved.get_window_type() == Meta.WindowType.SPLASHSCREEN ||
|
||||||
|
lastRemoved.get_window_type() == Meta.WindowType.DIALOG ||
|
||||||
|
lastRemoved.get_window_type() == Meta.WindowType.MODAL_DIALOG))
|
||||||
|
emptyWorkspaces[i] = false;
|
||||||
|
else
|
||||||
|
emptyWorkspaces[i] = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
let windows = global.get_window_actors();
|
||||||
|
for (i = 0; i < windows.length; i++) {
|
||||||
|
let win = windows[i];
|
||||||
|
|
||||||
|
if (win.get_meta_window().is_on_all_workspaces())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
let workspaceIndex = win.get_workspace();
|
||||||
|
emptyWorkspaces[workspaceIndex] = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we don't have an empty workspace at the end, add one
|
||||||
|
if (!emptyWorkspaces[emptyWorkspaces.length -1]) {
|
||||||
|
global.screen.append_new_workspace(false, global.get_current_time());
|
||||||
|
emptyWorkspaces.push(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
let activeWorkspaceIndex = global.screen.get_active_workspace_index();
|
||||||
|
let activeIsLast = activeWorkspaceIndex == global.screen.n_workspaces - 2;
|
||||||
|
let removingTrailWorkspaces = (emptyWorkspaces[activeWorkspaceIndex] &&
|
||||||
|
activeIsLast);
|
||||||
|
// Don't enter the overview when removing multiple empty workspaces at startup
|
||||||
|
let showOverview = (removingTrailWorkspaces &&
|
||||||
|
!emptyWorkspaces.every(function(x) { return x; }));
|
||||||
|
|
||||||
|
if (removingTrailWorkspaces) {
|
||||||
|
// "Merge" the empty workspace we are removing with the one at the end
|
||||||
|
Main.wm.blockAnimations();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete other empty workspaces; do it from the end to avoid index changes
|
||||||
|
for (i = emptyWorkspaces.length - 2; i >= 0; i--) {
|
||||||
|
if (emptyWorkspaces[i])
|
||||||
|
global.screen.remove_workspace(Main._workspaces[i], global.get_current_time());
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (removingTrailWorkspaces) {
|
||||||
|
global.screen.get_workspace_by_index(global.screen.n_workspaces - 1).activate(global.get_current_time());
|
||||||
|
|
||||||
|
Main.wm.unblockAnimations();
|
||||||
|
|
||||||
|
if (!Main.overview.visible && showOverview)
|
||||||
|
Main.overview.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
Main._checkWorkspacesId = 0;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function enable() {
|
||||||
|
prevCheckWorkspaces = Main._checkWorkspaces;
|
||||||
|
if (Meta.prefs_get_dynamic_workspaces())
|
||||||
|
Main._checkWorkspaces = myCheckWorkspaces;
|
||||||
|
|
||||||
|
winMover = new WindowMover();
|
||||||
|
}
|
||||||
|
|
||||||
|
function disable() {
|
||||||
|
Main._checkWorkspaces = prevCheckWorkspaces;
|
||||||
|
winMover.destroy();
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"extension-id": "@extension_id@",
|
||||||
|
"uuid": "@uuid@",
|
||||||
|
"settings-schema": "@gschemaname@",
|
||||||
|
"gettext-domain": "@gettext_domain@",
|
||||||
|
"name": "Auto Move Windows",
|
||||||
|
"description": "Move applications to specific workspaces when they create windows",
|
||||||
|
"shell-version": [ "@shell_current@" ],
|
||||||
|
"original-authors": [ "alessandro.crismani@gmail.com", "thomas.bouffon@gmail.com" ],
|
||||||
|
"url": "@url@"
|
||||||
|
}
|
||||||
+10
@@ -0,0 +1,10 @@
|
|||||||
|
<schemalist gettext-domain="gnome-shell-extensions">
|
||||||
|
<schema id="org.gnome.shell.extensions.auto-move-windows" path="/org/gnome/shell/extensions/auto-move-windows/">
|
||||||
|
<key name="application-list" type="as">
|
||||||
|
<!-- FIXME: should be a(su), when JS supports more of GVariant -->
|
||||||
|
<default>[ ]</default>
|
||||||
|
<_summary>Application and workspace list</_summary>
|
||||||
|
<_description>A list of strings, each containing an application id (desktop file name), followed by a colon and the workspace number</_description>
|
||||||
|
</key>
|
||||||
|
</schema>
|
||||||
|
</schemalist>
|
||||||
@@ -0,0 +1,260 @@
|
|||||||
|
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
||||||
|
// Start apps on custom workspaces
|
||||||
|
|
||||||
|
const GdkPixbuf = imports.gi.GdkPixbuf;
|
||||||
|
const Gio = imports.gi.Gio;
|
||||||
|
const GLib = imports.gi.GLib;
|
||||||
|
const GObject = imports.gi.GObject;
|
||||||
|
const GMenu = imports.gi.GMenu;
|
||||||
|
const Gtk = imports.gi.Gtk;
|
||||||
|
const Lang = imports.lang;
|
||||||
|
const Mainloop = imports.mainloop;
|
||||||
|
|
||||||
|
const Gettext = imports.gettext.domain('gnome-shell-extensions');
|
||||||
|
const _ = Gettext.gettext;
|
||||||
|
const N_ = function(e) { return e };
|
||||||
|
|
||||||
|
const ExtensionUtils = imports.misc.extensionUtils;
|
||||||
|
const Me = ExtensionUtils.getCurrentExtension();
|
||||||
|
const Convenience = Me.imports.convenience;
|
||||||
|
|
||||||
|
const SETTINGS_KEY = 'application-list';
|
||||||
|
|
||||||
|
const WORKSPACE_MAX = 36; // compiled in limit of mutter
|
||||||
|
|
||||||
|
const Columns = {
|
||||||
|
APPINFO: 0,
|
||||||
|
DISPLAY_NAME: 1,
|
||||||
|
ICON: 2,
|
||||||
|
WORKSPACE: 3,
|
||||||
|
ADJUSTMENT: 4
|
||||||
|
};
|
||||||
|
|
||||||
|
const Widget = new GObject.Class({
|
||||||
|
Name: 'AutoMoveWindows.Prefs.Widget',
|
||||||
|
GTypeName: 'AutoMoveWindowsPrefsWidget',
|
||||||
|
Extends: Gtk.Grid,
|
||||||
|
|
||||||
|
_init: function(params) {
|
||||||
|
this.parent(params);
|
||||||
|
this.set_orientation(Gtk.Orientation.VERTICAL);
|
||||||
|
|
||||||
|
this._settings = Convenience.getSettings();
|
||||||
|
this._settings.connect('changed', Lang.bind(this, this._refresh));
|
||||||
|
this._changedPermitted = false;
|
||||||
|
|
||||||
|
this._store = new Gtk.ListStore();
|
||||||
|
this._store.set_column_types([Gio.AppInfo, GObject.TYPE_STRING, Gio.Icon, GObject.TYPE_INT,
|
||||||
|
Gtk.Adjustment]);
|
||||||
|
|
||||||
|
this._treeView = new Gtk.TreeView({ model: this._store,
|
||||||
|
hexpand: true, vexpand: true });
|
||||||
|
this._treeView.get_selection().set_mode(Gtk.SelectionMode.SINGLE);
|
||||||
|
|
||||||
|
let appColumn = new Gtk.TreeViewColumn({ expand: true, sort_column_id: Columns.DISPLAY_NAME,
|
||||||
|
title: _("Application") });
|
||||||
|
let iconRenderer = new Gtk.CellRendererPixbuf;
|
||||||
|
appColumn.pack_start(iconRenderer, false);
|
||||||
|
appColumn.add_attribute(iconRenderer, "gicon", Columns.ICON);
|
||||||
|
let nameRenderer = new Gtk.CellRendererText;
|
||||||
|
appColumn.pack_start(nameRenderer, true);
|
||||||
|
appColumn.add_attribute(nameRenderer, "text", Columns.DISPLAY_NAME);
|
||||||
|
this._treeView.append_column(appColumn);
|
||||||
|
|
||||||
|
let workspaceColumn = new Gtk.TreeViewColumn({ title: _("Workspace"),
|
||||||
|
sort_column_id: Columns.WORKSPACE });
|
||||||
|
let workspaceRenderer = new Gtk.CellRendererSpin({ editable: true });
|
||||||
|
workspaceRenderer.connect('edited', Lang.bind(this, this._workspaceEdited));
|
||||||
|
workspaceColumn.pack_start(workspaceRenderer, true);
|
||||||
|
workspaceColumn.add_attribute(workspaceRenderer, "adjustment", Columns.ADJUSTMENT);
|
||||||
|
workspaceColumn.add_attribute(workspaceRenderer, "text", Columns.WORKSPACE);
|
||||||
|
this._treeView.append_column(workspaceColumn);
|
||||||
|
|
||||||
|
this.add(this._treeView);
|
||||||
|
|
||||||
|
let toolbar = new Gtk.Toolbar();
|
||||||
|
toolbar.get_style_context().add_class(Gtk.STYLE_CLASS_INLINE_TOOLBAR);
|
||||||
|
this.add(toolbar);
|
||||||
|
|
||||||
|
let newButton = new Gtk.ToolButton({ stock_id: Gtk.STOCK_NEW,
|
||||||
|
label: _("Add rule"),
|
||||||
|
is_important: true });
|
||||||
|
newButton.connect('clicked', Lang.bind(this, this._createNew));
|
||||||
|
toolbar.add(newButton);
|
||||||
|
|
||||||
|
let delButton = new Gtk.ToolButton({ stock_id: Gtk.STOCK_DELETE });
|
||||||
|
delButton.connect('clicked', Lang.bind(this, this._deleteSelected));
|
||||||
|
toolbar.add(delButton);
|
||||||
|
|
||||||
|
this._changedPermitted = true;
|
||||||
|
this._refresh();
|
||||||
|
},
|
||||||
|
|
||||||
|
_createNew: function() {
|
||||||
|
let dialog = new Gtk.Dialog({ title: _("Create new matching rule"),
|
||||||
|
transient_for: this.get_toplevel(),
|
||||||
|
modal: true });
|
||||||
|
dialog.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL);
|
||||||
|
dialog.add_button(_("Add"), Gtk.ResponseType.OK);
|
||||||
|
dialog.set_default_response(Gtk.ResponseType.OK);
|
||||||
|
|
||||||
|
let grid = new Gtk.Grid({ column_spacing: 10,
|
||||||
|
row_spacing: 15,
|
||||||
|
margin: 10 });
|
||||||
|
dialog._appChooser = new Gtk.AppChooserWidget({ show_all: true });
|
||||||
|
grid.attach(dialog._appChooser, 0, 0, 2, 1);
|
||||||
|
grid.attach(new Gtk.Label({ label: _("Workspace") }),
|
||||||
|
0, 1, 1, 1);
|
||||||
|
let adjustment = new Gtk.Adjustment({ lower: 1,
|
||||||
|
upper: WORKSPACE_MAX,
|
||||||
|
step_increment: 1
|
||||||
|
});
|
||||||
|
dialog._spin = new Gtk.SpinButton({ adjustment: adjustment,
|
||||||
|
snap_to_ticks: true });
|
||||||
|
dialog._spin.set_value(1);
|
||||||
|
grid.attach(dialog._spin, 1, 1, 1, 1);
|
||||||
|
dialog.get_content_area().add(grid);
|
||||||
|
|
||||||
|
dialog.connect('response', Lang.bind(this, function(dialog, id) {
|
||||||
|
if (id != Gtk.ResponseType.OK) {
|
||||||
|
dialog.destroy();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let appInfo = dialog._appChooser.get_app_info();
|
||||||
|
if (!appInfo)
|
||||||
|
return;
|
||||||
|
let index = Math.floor(dialog._spin.value);
|
||||||
|
if (isNaN(index) || index < 0)
|
||||||
|
index = 1;
|
||||||
|
|
||||||
|
this._changedPermitted = false;
|
||||||
|
if (!this._appendItem(appInfo.get_id(), index)) {
|
||||||
|
this._changedPermitted = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let iter = this._store.append();
|
||||||
|
let adj = new Gtk.Adjustment({ lower: 1,
|
||||||
|
upper: WORKSPACE_MAX,
|
||||||
|
step_increment: 1,
|
||||||
|
value: index });
|
||||||
|
this._store.set(iter,
|
||||||
|
[Columns.APPINFO, Columns.ICON, Columns.DISPLAY_NAME, Columns.WORKSPACE, Columns.ADJUSTMENT],
|
||||||
|
[appInfo, appInfo.get_icon(), appInfo.get_display_name(), index, adj]);
|
||||||
|
this._changedPermitted = true;
|
||||||
|
|
||||||
|
dialog.destroy();
|
||||||
|
}));
|
||||||
|
dialog.show_all();
|
||||||
|
},
|
||||||
|
|
||||||
|
_deleteSelected: function() {
|
||||||
|
let [any, model, iter] = this._treeView.get_selection().get_selected();
|
||||||
|
|
||||||
|
if (any) {
|
||||||
|
let appInfo = this._store.get_value(iter, Columns.APPINFO);
|
||||||
|
|
||||||
|
this._changedPermitted = false;
|
||||||
|
this._removeItem(appInfo.get_id());
|
||||||
|
this._store.remove(iter);
|
||||||
|
this._changedPermitted = true;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_workspaceEdited: function(renderer, pathString, text) {
|
||||||
|
let index = parseInt(text);
|
||||||
|
if (isNaN(index) || index < 0)
|
||||||
|
index = 1;
|
||||||
|
let path = Gtk.TreePath.new_from_string(pathString);
|
||||||
|
let [model, iter] = this._store.get_iter(path);
|
||||||
|
let appInfo = this._store.get_value(iter, Columns.APPINFO);
|
||||||
|
|
||||||
|
this._changedPermitted = false;
|
||||||
|
this._changeItem(appInfo.get_id(), index);
|
||||||
|
this._store.set_value(iter, Columns.WORKSPACE, index);
|
||||||
|
this._changedPermitted = true;
|
||||||
|
},
|
||||||
|
|
||||||
|
_refresh: function() {
|
||||||
|
if (!this._changedPermitted)
|
||||||
|
// Ignore this notification, model is being modified outside
|
||||||
|
return;
|
||||||
|
|
||||||
|
this._store.clear();
|
||||||
|
|
||||||
|
let currentItems = this._settings.get_strv(SETTINGS_KEY);
|
||||||
|
let validItems = [ ];
|
||||||
|
for (let i = 0; i < currentItems.length; i++) {
|
||||||
|
let [id, index] = currentItems[i].split(':');
|
||||||
|
let appInfo = Gio.DesktopAppInfo.new(id);
|
||||||
|
if (!appInfo)
|
||||||
|
continue;
|
||||||
|
validItems.push(currentItems[i]);
|
||||||
|
|
||||||
|
let iter = this._store.append();
|
||||||
|
let adj = new Gtk.Adjustment({ lower: 1,
|
||||||
|
upper: WORKSPACE_MAX,
|
||||||
|
step_increment: 1,
|
||||||
|
value: index });
|
||||||
|
this._store.set(iter,
|
||||||
|
[Columns.APPINFO, Columns.ICON, Columns.DISPLAY_NAME, Columns.WORKSPACE, Columns.ADJUSTMENT],
|
||||||
|
[appInfo, appInfo.get_icon(), appInfo.get_display_name(), parseInt(index), adj]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (validItems.length != currentItems.length) // some items were filtered out
|
||||||
|
this._settings.set_strv(SETTINGS_KEY, validItems);
|
||||||
|
},
|
||||||
|
|
||||||
|
_appendItem: function(id, workspace) {
|
||||||
|
let currentItems = this._settings.get_strv(SETTINGS_KEY);
|
||||||
|
let alreadyHave = currentItems.map(function(el) {
|
||||||
|
return el.split(':')[0];
|
||||||
|
}).indexOf(id) != -1;
|
||||||
|
|
||||||
|
if (alreadyHave) {
|
||||||
|
printerr("Already have an item for this id");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
currentItems.push(id + ':' + workspace);
|
||||||
|
this._settings.set_strv(SETTINGS_KEY, currentItems);
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
|
||||||
|
_removeItem: function(id) {
|
||||||
|
let currentItems = this._settings.get_strv(SETTINGS_KEY);
|
||||||
|
let index = currentItems.map(function(el) {
|
||||||
|
return el.split(':')[0];
|
||||||
|
}).indexOf(id);
|
||||||
|
|
||||||
|
if (index < 0)
|
||||||
|
return;
|
||||||
|
currentItems.splice(index, 1);
|
||||||
|
this._settings.set_strv(SETTINGS_KEY, currentItems);
|
||||||
|
},
|
||||||
|
|
||||||
|
_changeItem: function(id, workspace) {
|
||||||
|
let currentItems = this._settings.get_strv(SETTINGS_KEY);
|
||||||
|
let index = currentItems.map(function(el) {
|
||||||
|
return el.split(':')[0];
|
||||||
|
}).indexOf(id);
|
||||||
|
|
||||||
|
if (index < 0)
|
||||||
|
currentItems.push(id + ':' + workspace);
|
||||||
|
else
|
||||||
|
currentItems[index] = id + ':' + workspace;
|
||||||
|
this._settings.set_strv(SETTINGS_KEY, currentItems);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
function init() {
|
||||||
|
Convenience.initTranslations();
|
||||||
|
}
|
||||||
|
|
||||||
|
function buildPrefsWidget() {
|
||||||
|
let widget = new Widget();
|
||||||
|
widget.show_all();
|
||||||
|
|
||||||
|
return widget;
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
/* This extensions requires no special styling */
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
EXTENSION_ID = default-min-max
|
||||||
|
|
||||||
|
include ../../extension.mk
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
||||||
|
|
||||||
|
const Meta = imports.gi.Meta;
|
||||||
|
|
||||||
|
const BUTTON_LAYOUT_KEY = 'button-layout';
|
||||||
|
const EXTENSION_SCHEMA = 'org.gnome.desktop.wm.preferences';
|
||||||
|
const SHELL_OVERRIDES_SCHEMA = 'org.gnome.shell.overrides';
|
||||||
|
|
||||||
|
function init(metadata) {
|
||||||
|
}
|
||||||
|
|
||||||
|
function enable() {
|
||||||
|
// Override gnome-shell's overrides
|
||||||
|
Meta.prefs_override_preference_schema(BUTTON_LAYOUT_KEY, EXTENSION_SCHEMA);
|
||||||
|
}
|
||||||
|
|
||||||
|
function disable() {
|
||||||
|
// Restore gnome-shell's overrides
|
||||||
|
Meta.prefs_override_preference_schema(BUTTON_LAYOUT_KEY, SHELL_OVERRIDES_SCHEMA);
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"extension-id": "@extension_id@",
|
||||||
|
"uuid": "@uuid@",
|
||||||
|
"settings-schema": "@gschemaname@",
|
||||||
|
"gettext-domain": "@gettext_domain@",
|
||||||
|
"name": "Default Minimize and Maximize",
|
||||||
|
"description": "Adds minimize and maximize buttons to the titlebar by default",
|
||||||
|
"original-authors": [ "debarshir@gnome.org" ],
|
||||||
|
"shell-version": [ "@shell_current@" ],
|
||||||
|
"url": "@url@"
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
/* This extensions requires no special styling */
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
EXTENSION_ID = drive-menu
|
||||||
|
|
||||||
|
include ../../extension.mk
|
||||||
@@ -0,0 +1,186 @@
|
|||||||
|
// Drive menu extension
|
||||||
|
const Gio = imports.gi.Gio;
|
||||||
|
const Lang = imports.lang;
|
||||||
|
const St = imports.gi.St;
|
||||||
|
const Shell = imports.gi.Shell;
|
||||||
|
|
||||||
|
const Gettext = imports.gettext.domain('gnome-shell-extensions');
|
||||||
|
const _ = Gettext.gettext;
|
||||||
|
|
||||||
|
const Main = imports.ui.main;
|
||||||
|
const Panel = imports.ui.panel;
|
||||||
|
const PanelMenu = imports.ui.panelMenu;
|
||||||
|
const PopupMenu = imports.ui.popupMenu;
|
||||||
|
const ShellMountOperation = imports.ui.shellMountOperation;
|
||||||
|
|
||||||
|
const ExtensionUtils = imports.misc.extensionUtils;
|
||||||
|
const Me = ExtensionUtils.getCurrentExtension();
|
||||||
|
const Convenience = Me.imports.convenience;
|
||||||
|
|
||||||
|
const MountMenuItem = new Lang.Class({
|
||||||
|
Name: 'DriveMenu.MountMenuItem',
|
||||||
|
Extends: PopupMenu.PopupBaseMenuItem,
|
||||||
|
|
||||||
|
_init: function(mount) {
|
||||||
|
this.parent();
|
||||||
|
|
||||||
|
this.label = new St.Label({ text: mount.get_name() });
|
||||||
|
this.addActor(this.label);
|
||||||
|
this.actor.label_actor = this.label;
|
||||||
|
|
||||||
|
this.mount = mount;
|
||||||
|
|
||||||
|
let ejectIcon = new St.Icon({ icon_name: 'media-eject-symbolic',
|
||||||
|
style_class: 'popup-menu-icon ' });
|
||||||
|
let ejectButton = new St.Button({ child: ejectIcon });
|
||||||
|
ejectButton.connect('clicked', Lang.bind(this, this._eject));
|
||||||
|
this.addActor(ejectButton);
|
||||||
|
},
|
||||||
|
|
||||||
|
_eject: function() {
|
||||||
|
let mountOp = new ShellMountOperation.ShellMountOperation(this.mount);
|
||||||
|
|
||||||
|
if (this.mount.can_eject())
|
||||||
|
this.mount.eject_with_operation(Gio.MountUnmountFlags.NONE,
|
||||||
|
mountOp.mountOp,
|
||||||
|
null, // Gio.Cancellable
|
||||||
|
Lang.bind(this, this._ejectFinish));
|
||||||
|
else
|
||||||
|
this.mount.unmount_with_operation(Gio.MountUnmountFlags.NONE,
|
||||||
|
mountOp.mountOp,
|
||||||
|
null, // Gio.Cancellable
|
||||||
|
Lang.bind(this, this._unmountFinish));
|
||||||
|
},
|
||||||
|
|
||||||
|
_unmountFinish: function(mount, result) {
|
||||||
|
try {
|
||||||
|
mount.unmount_with_operation_finish(result);
|
||||||
|
} catch(e) {
|
||||||
|
this._reportFailure(e);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_ejectFinish: function(mount, result) {
|
||||||
|
try {
|
||||||
|
mount.eject_with_operation_finish(result);
|
||||||
|
} catch(e) {
|
||||||
|
this._reportFailure(e);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_reportFailure: function(exception) {
|
||||||
|
let msg = _("Ejecting drive '%s' failed:").format(this.mount.get_name());
|
||||||
|
Main.notifyError(msg, exception.message);
|
||||||
|
},
|
||||||
|
|
||||||
|
activate: function(event) {
|
||||||
|
Gio.AppInfo.launch_default_for_uri(this.mount.get_root().get_uri(),
|
||||||
|
global.create_app_launch_context());
|
||||||
|
|
||||||
|
this.parent(event);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const DriveMenu = new Lang.Class({
|
||||||
|
Name: 'DriveMenu.DriveMenu',
|
||||||
|
Extends: PanelMenu.SystemStatusButton,
|
||||||
|
|
||||||
|
_init: function() {
|
||||||
|
this.parent('media-eject-symbolic', _("Removable devices"));
|
||||||
|
|
||||||
|
this._monitor = Gio.VolumeMonitor.get();
|
||||||
|
this._addedId = this._monitor.connect('mount-added', Lang.bind(this, function(monitor, mount) {
|
||||||
|
this._addMount(mount);
|
||||||
|
this._updateMenuVisibility();
|
||||||
|
}));
|
||||||
|
this._removedId = this._monitor.connect('mount-removed', Lang.bind(this, function(monitor, mount) {
|
||||||
|
this._removeMount(mount);
|
||||||
|
this._updateMenuVisibility();
|
||||||
|
}));
|
||||||
|
|
||||||
|
this._mounts = [ ];
|
||||||
|
|
||||||
|
this._monitor.get_mounts().forEach(Lang.bind(this, this._addMount));
|
||||||
|
|
||||||
|
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||||
|
this.menu.addAction(_("Open File"), function(event) {
|
||||||
|
let appSystem = Shell.AppSystem.get_default();
|
||||||
|
let app = appSystem.lookup_app('nautilus.desktop');
|
||||||
|
app.activate_full(-1, event.get_time());
|
||||||
|
});
|
||||||
|
|
||||||
|
this._updateMenuVisibility();
|
||||||
|
},
|
||||||
|
|
||||||
|
_updateMenuVisibility: function() {
|
||||||
|
if (this._mounts.length > 0)
|
||||||
|
this.actor.show();
|
||||||
|
else
|
||||||
|
this.actor.hide();
|
||||||
|
},
|
||||||
|
|
||||||
|
_isMountInteresting: function(mount) {
|
||||||
|
if (!mount.can_eject() && !mount.can_unmount())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
let volume = mount.get_volume();
|
||||||
|
|
||||||
|
if (volume == null) {
|
||||||
|
// probably a GDaemonMount, could be network or
|
||||||
|
// local, but we can't tell; assume it's local for now
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return volume.get_identifier('class') != 'network';
|
||||||
|
},
|
||||||
|
|
||||||
|
_addMount: function(mount) {
|
||||||
|
if (!this._isMountInteresting(mount))
|
||||||
|
return;
|
||||||
|
|
||||||
|
let item = new MountMenuItem(mount);
|
||||||
|
this._mounts.unshift(item);
|
||||||
|
this.menu.addMenuItem(item, 0);
|
||||||
|
},
|
||||||
|
|
||||||
|
_removeMount: function(mount) {
|
||||||
|
if (!this._isMountInteresting(mount))
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (let i = 0; i < this._mounts.length; i++) {
|
||||||
|
let item = this._mounts[i];
|
||||||
|
if (item.mount == mount) {
|
||||||
|
item.destroy();
|
||||||
|
this._mounts.splice(i, 1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
log ('Removing a mount that was never added to the menu');
|
||||||
|
},
|
||||||
|
|
||||||
|
destroy: function() {
|
||||||
|
if (this._connectedId) {
|
||||||
|
this._monitor.disconnect(this._connectedId);
|
||||||
|
this._monitor.disconnect(this._disconnectedId);
|
||||||
|
this._connectedId = 0;
|
||||||
|
this._disconnectedId = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.parent();
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
function init() {
|
||||||
|
Convenience.initTranslations();
|
||||||
|
}
|
||||||
|
|
||||||
|
let _indicator;
|
||||||
|
|
||||||
|
function enable() {
|
||||||
|
_indicator = new DriveMenu;
|
||||||
|
Main.panel.addToStatusArea('drive-menu', _indicator);
|
||||||
|
}
|
||||||
|
|
||||||
|
function disable() {
|
||||||
|
_indicator.destroy();
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"extension-id": "@extension_id@",
|
||||||
|
"uuid": "@uuid@",
|
||||||
|
"settings-schema": "@gschemaname@",
|
||||||
|
"gettext-domain": "@gettext_domain@",
|
||||||
|
"name": "Removable Drive Menu",
|
||||||
|
"description": "A status menu for accessing and unmounting removable devices",
|
||||||
|
"shell-version": [ "@shell_current@" ],
|
||||||
|
"url": "@url@"
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
/* This extensions requires no custom styling */
|
||||||
@@ -1,3 +1,6 @@
|
|||||||
EXTENSION_ID = example
|
EXTENSION_ID = example
|
||||||
|
|
||||||
|
EXTRA_MODULES = prefs.js
|
||||||
|
|
||||||
include ../../extension.mk
|
include ../../extension.mk
|
||||||
|
include ../../settings.mk
|
||||||
|
|||||||
@@ -1,19 +1,49 @@
|
|||||||
|
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
||||||
// Sample extension code, makes clicking on the panel show a message
|
// Sample extension code, makes clicking on the panel show a message
|
||||||
const St = imports.gi.St;
|
const St = imports.gi.St;
|
||||||
const Mainloop = imports.mainloop;
|
const Mainloop = imports.mainloop;
|
||||||
|
|
||||||
|
const Gettext = imports.gettext.domain('gnome-shell-extensions');
|
||||||
|
const _ = Gettext.gettext;
|
||||||
|
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
|
|
||||||
|
const ExtensionUtils = imports.misc.extensionUtils;
|
||||||
|
const Me = ExtensionUtils.getCurrentExtension();
|
||||||
|
const Convenience = Me.imports.convenience;
|
||||||
|
|
||||||
function _showHello() {
|
function _showHello() {
|
||||||
let text = new St.Label({ style_class: 'helloworld-label', text: "Hello, world!" });
|
let settings = Convenience.getSettings();
|
||||||
let monitor = global.get_primary_monitor();
|
let text = settings.get_string('hello-text') || _("Hello, world!");
|
||||||
global.stage.add_actor(text);
|
|
||||||
text.set_position(Math.floor (monitor.width / 2 - text.width / 2), Math.floor(monitor.height / 2 - text.height / 2));
|
let label = new St.Label({ style_class: 'helloworld-label', text: text });
|
||||||
Mainloop.timeout_add(3000, function () { text.destroy(); });
|
let monitor = Main.layoutManager.primaryMonitor;
|
||||||
|
global.stage.add_actor(label);
|
||||||
|
label.set_position(Math.floor (monitor.width / 2 - label.width / 2), Math.floor(monitor.height / 2 - label.height / 2));
|
||||||
|
Mainloop.timeout_add(3000, function () { label.destroy(); });
|
||||||
}
|
}
|
||||||
|
|
||||||
// Put your extension initialization code here
|
// Put your extension initialization code here
|
||||||
function main() {
|
function init(metadata) {
|
||||||
Main.panel.actor.reactive = true;
|
log ('Example extension initalized');
|
||||||
Main.panel.actor.connect('button-release-event', _showHello);
|
|
||||||
|
Convenience.initTranslations();
|
||||||
|
}
|
||||||
|
|
||||||
|
let signalId;
|
||||||
|
|
||||||
|
function enable() {
|
||||||
|
log ('Example extension enabled');
|
||||||
|
|
||||||
|
Main.panel.actor.reactive = true;
|
||||||
|
signalId = Main.panel.actor.connect('button-release-event', _showHello);
|
||||||
|
}
|
||||||
|
|
||||||
|
function disable() {
|
||||||
|
log ('Example extension disabled');
|
||||||
|
|
||||||
|
if (signalId) {
|
||||||
|
Main.panel.actor.disconnect(signalId);
|
||||||
|
signalId = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +0,0 @@
|
|||||||
{
|
|
||||||
"uuid": "example@gnome-shell-extensions.gnome.org",
|
|
||||||
"name": "Hello, World!",
|
|
||||||
"description": "An example extension to show how it works. Shows Hello, world when clicking on the top panel.",
|
|
||||||
"shell-version": [ "2.91.6" ]
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"extension-id": "@extension_id@",
|
||||||
|
"uuid": "@uuid@",
|
||||||
|
"settings-schema": "@gschemaname@",
|
||||||
|
"gettext-domain": "@gettext_domain@",
|
||||||
|
"name": "Hello, World!",
|
||||||
|
"description": "An example extension to show how it works. Shows Hello, world when clicking on the top panel.",
|
||||||
|
"shell-version": [ "@shell_current@" ],
|
||||||
|
"url": "@url@"
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
<schemalist gettext-domain="gnome-shell-extensions">
|
||||||
|
<schema id="org.gnome.shell.extensions.example" path="/org/gnome/shell/extensions/example/">
|
||||||
|
<key name="hello-text" type="s">
|
||||||
|
<default>''</default>
|
||||||
|
<_summary>Alternative greeting text.</_summary>
|
||||||
|
<_description>If not empty, it contains the text that will be shown when clicking on the panel.</_description>
|
||||||
|
</key>
|
||||||
|
</schema>
|
||||||
|
</schemalist>
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
||||||
|
|
||||||
|
const GLib = imports.gi.GLib;
|
||||||
|
const GObject = imports.gi.GObject;
|
||||||
|
const Gio = imports.gi.Gio;
|
||||||
|
const Gtk = imports.gi.Gtk;
|
||||||
|
|
||||||
|
const Gettext = imports.gettext.domain('gnome-shell-extensions');
|
||||||
|
const _ = Gettext.gettext;
|
||||||
|
|
||||||
|
const ExtensionUtils = imports.misc.extensionUtils;
|
||||||
|
const Me = ExtensionUtils.getCurrentExtension();
|
||||||
|
const Convenience = Me.imports.convenience;
|
||||||
|
|
||||||
|
function init() {
|
||||||
|
Convenience.initTranslations();
|
||||||
|
}
|
||||||
|
|
||||||
|
const ExamplePrefsWidget = new GObject.Class({
|
||||||
|
Name: 'Example.Prefs.Widget',
|
||||||
|
GTypeName: 'ExamplePrefsWidget',
|
||||||
|
Extends: Gtk.Grid,
|
||||||
|
|
||||||
|
_init: function(params) {
|
||||||
|
this.parent(params);
|
||||||
|
this.margin = this.row_spacing = this.column_spacing = 10;
|
||||||
|
|
||||||
|
// TRANSLATORS: Example is the name of the extension, should not be
|
||||||
|
// translated
|
||||||
|
let primaryText = _("Example aims to show how to build well behaved \
|
||||||
|
extensions for the Shell and as such it has little functionality on its own.\n\
|
||||||
|
Nevertheless it's possible to customize the greeting message.");
|
||||||
|
|
||||||
|
this.attach(new Gtk.Label({ label: primaryText, wrap: true }), 0, 0, 2, 1);
|
||||||
|
|
||||||
|
this.attach(new Gtk.Label({ label: '<b>' + _("Message:") + '</b>', use_markup: true }),
|
||||||
|
0, 1, 1, 1);
|
||||||
|
|
||||||
|
let entry = new Gtk.Entry({ hexpand: true });
|
||||||
|
this.attach(entry, 1, 1, 1, 1);
|
||||||
|
|
||||||
|
this._settings = Convenience.getSettings();
|
||||||
|
this._settings.bind('hello-text', entry, 'text', Gio.SettingsBindFlags.DEFAULT);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
function buildPrefsWidget() {
|
||||||
|
let widget = new ExamplePrefsWidget();
|
||||||
|
widget.show_all();
|
||||||
|
|
||||||
|
return widget;
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
EXTENSION_ID = native-window-placement
|
||||||
|
|
||||||
|
include ../../extension.mk
|
||||||
|
include ../../settings.mk
|
||||||
|
|
||||||
@@ -0,0 +1,459 @@
|
|||||||
|
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
||||||
|
// import just everything from workspace.js:
|
||||||
|
const Clutter = imports.gi.Clutter;
|
||||||
|
const Gio = imports.gi.Gio;
|
||||||
|
const Lang = imports.lang;
|
||||||
|
const Mainloop = imports.mainloop;
|
||||||
|
const Meta = imports.gi.Meta;
|
||||||
|
const Pango = imports.gi.Pango;
|
||||||
|
const Shell = imports.gi.Shell;
|
||||||
|
const St = imports.gi.St;
|
||||||
|
const Signals = imports.signals;
|
||||||
|
|
||||||
|
const DND = imports.ui.dnd;
|
||||||
|
const Lightbox = imports.ui.lightbox;
|
||||||
|
const Main = imports.ui.main;
|
||||||
|
const Overview = imports.ui.overview;
|
||||||
|
const Panel = imports.ui.panel;
|
||||||
|
const Tweener = imports.ui.tweener;
|
||||||
|
|
||||||
|
const Workspace = imports.ui.workspace;
|
||||||
|
const WindowPositionFlags = Workspace.WindowPositionFlags;
|
||||||
|
|
||||||
|
const ExtensionUtils = imports.misc.extensionUtils;
|
||||||
|
const Me = ExtensionUtils.getCurrentExtension();
|
||||||
|
const Convenience = Me.imports.convenience;
|
||||||
|
|
||||||
|
// testing settings for natural window placement strategy:
|
||||||
|
const WINDOW_PLACEMENT_NATURAL_FILLGAPS = true; // enlarge windows at the end to fill gaps // not implemented yet
|
||||||
|
const WINDOW_PLACEMENT_NATURAL_GRID_FALLBACK = true; // fallback to grid mode if all windows have the same size and positions. // not implemented yet
|
||||||
|
const WINDOW_PLACEMENT_NATURAL_ACCURACY = 20; // accuracy of window translate moves (KDE-default: 20)
|
||||||
|
const WINDOW_PLACEMENT_NATURAL_GAPS = 5; // half of the minimum gap between windows
|
||||||
|
const WINDOW_PLACEMENT_NATURAL_MAX_TRANSLATIONS = 5000; // safety limit for preventing endless loop if something is wrong in the algorithm
|
||||||
|
|
||||||
|
const PLACE_WINDOW_CAPTIONS_ON_TOP = true; // place window titles in overview on top of windows with overlap parameter
|
||||||
|
|
||||||
|
const WORKSPACE_BORDER_GAP = 10; // minimum gap between the workspace area and the workspace selector
|
||||||
|
const WINDOW_AREA_TOP_GAP = 20; // minimum gap between the workspace area and the top border. This keeps window captions and close buttons visible. 13px (26/2) should currently be enough.
|
||||||
|
|
||||||
|
const BUTTON_LAYOUT_SCHEMA = 'org.gnome.shell.overrides';
|
||||||
|
const BUTTON_LAYOUT_KEY = 'button-layout';
|
||||||
|
|
||||||
|
function injectToFunction(parent, name, func) {
|
||||||
|
let origin = parent[name];
|
||||||
|
parent[name] = function() {
|
||||||
|
let ret;
|
||||||
|
ret = origin.apply(this, arguments);
|
||||||
|
if (ret === undefined)
|
||||||
|
ret = func.apply(this, arguments);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const Rect = new Lang.Class({
|
||||||
|
Name: 'NativeWindowPlacement.Rect',
|
||||||
|
|
||||||
|
_init: function(x, y, width, height) {
|
||||||
|
[this.x, this.y, this.width, this.height] = [x, y, width, height];
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* used in _calculateWindowTransformationsNatural to replace Meta.Rectangle that is too slow.
|
||||||
|
*/
|
||||||
|
copy: function() {
|
||||||
|
return new Rect(this.x, this.y, this.width, this.height);
|
||||||
|
},
|
||||||
|
|
||||||
|
union: function(rect2) {
|
||||||
|
let dest = this.copy();
|
||||||
|
if (rect2.x < dest.x)
|
||||||
|
{
|
||||||
|
dest.width += dest.x - rect2.x;
|
||||||
|
dest.x = rect2.x;
|
||||||
|
}
|
||||||
|
if (rect2.y < dest.y)
|
||||||
|
{
|
||||||
|
dest.height += dest.y - rect2.y;
|
||||||
|
dest.y = rect2.y;
|
||||||
|
}
|
||||||
|
if (rect2.x + rect2.width > dest.x + dest.width)
|
||||||
|
dest.width = rect2.x + rect2.width - dest.x;
|
||||||
|
if (rect2.y + rect2.height > dest.y + dest.height)
|
||||||
|
dest.height = rect2.y + rect2.height - dest.y;
|
||||||
|
|
||||||
|
return dest;
|
||||||
|
},
|
||||||
|
|
||||||
|
adjusted: function(dx, dy, dx2, dy2) {
|
||||||
|
let dest = this.copy();
|
||||||
|
dest.x += dx;
|
||||||
|
dest.y += dy;
|
||||||
|
dest.width += -dx + dx2;
|
||||||
|
dest.height += -dy + dy2;
|
||||||
|
return dest;
|
||||||
|
},
|
||||||
|
|
||||||
|
overlap: function(rect2) {
|
||||||
|
return !((this.x + this.width <= rect2.x) ||
|
||||||
|
(rect2.x + rect2.width <= this.x) ||
|
||||||
|
(this.y + this.height <= rect2.y) ||
|
||||||
|
(rect2.y + rect2.height <= this.y));
|
||||||
|
},
|
||||||
|
|
||||||
|
center: function() {
|
||||||
|
return [this.x + this.width / 2, this.y + this.height / 2];
|
||||||
|
},
|
||||||
|
|
||||||
|
translate: function(dx, dy) {
|
||||||
|
this.x += dx;
|
||||||
|
this.y += dy;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
let winInjections, workspaceInjections, connectedSignals;
|
||||||
|
|
||||||
|
function resetState() {
|
||||||
|
winInjections = { };
|
||||||
|
workspaceInjections = { };
|
||||||
|
connectedSignals = [ ];
|
||||||
|
}
|
||||||
|
|
||||||
|
function enable() {
|
||||||
|
resetState();
|
||||||
|
|
||||||
|
let settings = Convenience.getSettings();
|
||||||
|
let useMoreScreen = settings.get_boolean('use-more-screen');
|
||||||
|
let windowCaptionsOnTop = settings.get_boolean('window-captions-on-top');
|
||||||
|
let signalId = settings.connect('changed::use-more-screen', function() {
|
||||||
|
useMoreScreen = settings.get_boolean('use-more-screen');
|
||||||
|
});
|
||||||
|
connectedSignals.push({ obj: settings, id: signalId });
|
||||||
|
|
||||||
|
/**
|
||||||
|
* _calculateWindowTransformationsNatural:
|
||||||
|
* @clones: Array of #MetaWindow
|
||||||
|
*
|
||||||
|
* Returns clones with matching target coordinates and scales to arrange windows in a natural way that no overlap exists and relative window size is preserved.
|
||||||
|
* This function is almost a 1:1 copy of the function
|
||||||
|
* PresentWindowsEffect::calculateWindowTransformationsNatural() from KDE, see:
|
||||||
|
* https://projects.kde.org/projects/kde/kdebase/kde-workspace/repository/revisions/master/entry/kwin/effects/presentwindows/presentwindows.cpp
|
||||||
|
*/
|
||||||
|
Workspace.Workspace.prototype._calculateWindowTransformationsNatural = function(clones) {
|
||||||
|
// As we are using pseudo-random movement (See "slot") we need to make sure the list
|
||||||
|
// is always sorted the same way no matter which window is currently active.
|
||||||
|
clones = clones.sort(function (win1, win2) {
|
||||||
|
return win2.metaWindow.get_stable_sequence() - win1.metaWindow.get_stable_sequence();
|
||||||
|
});
|
||||||
|
|
||||||
|
// Put a gap on the right edge of the workspace to separe it from the workspace selector
|
||||||
|
let ratio = this._width / this._height;
|
||||||
|
let x_gap = Math.max(WORKSPACE_BORDER_GAP, WINDOW_AREA_TOP_GAP * ratio);
|
||||||
|
let y_gap = Math.max(WORKSPACE_BORDER_GAP / ratio, WINDOW_AREA_TOP_GAP);
|
||||||
|
let bottom_padding = 0;
|
||||||
|
|
||||||
|
// If the window captions are below the window, put an additional gap to account for them
|
||||||
|
if (!windowCaptionsOnTop && this._windowOverlays.length)
|
||||||
|
bottom_padding += this._windowOverlays[0].chromeHeights()[1];
|
||||||
|
|
||||||
|
let area = new Rect(this._x + x_gap/2, this._y + y_gap, this._width - x_gap, this._height - y_gap - bottom_padding);
|
||||||
|
|
||||||
|
let bounds = area.copy();
|
||||||
|
|
||||||
|
let direction = 0;
|
||||||
|
let directions = [];
|
||||||
|
let rects = [];
|
||||||
|
for (let i = 0; i < clones.length; i++) {
|
||||||
|
// save rectangles into 4-dimensional arrays representing two corners of the rectangular: [left_x, top_y, right_x, bottom_y]
|
||||||
|
let rect = clones[i].metaWindow.get_outer_rect();
|
||||||
|
rects[i] = new Rect(rect.x, rect.y, rect.width, rect.height);
|
||||||
|
bounds = bounds.union(rects[i]);
|
||||||
|
|
||||||
|
// This is used when the window is on the edge of the screen to try to use as much screen real estate as possible.
|
||||||
|
directions[i] = direction;
|
||||||
|
direction++;
|
||||||
|
if (direction == 4) {
|
||||||
|
direction = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let loop_counter = 0;
|
||||||
|
let overlap;
|
||||||
|
do {
|
||||||
|
overlap = false;
|
||||||
|
for (let i = 0; i < rects.length; i++) {
|
||||||
|
for (let j = 0; j < rects.length; j++) {
|
||||||
|
if (i != j && rects[i].adjusted(-WINDOW_PLACEMENT_NATURAL_GAPS, -WINDOW_PLACEMENT_NATURAL_GAPS,
|
||||||
|
WINDOW_PLACEMENT_NATURAL_GAPS, WINDOW_PLACEMENT_NATURAL_GAPS).overlap(
|
||||||
|
rects[j].adjusted(-WINDOW_PLACEMENT_NATURAL_GAPS, -WINDOW_PLACEMENT_NATURAL_GAPS,
|
||||||
|
WINDOW_PLACEMENT_NATURAL_GAPS, WINDOW_PLACEMENT_NATURAL_GAPS))) {
|
||||||
|
loop_counter++;
|
||||||
|
overlap = true;
|
||||||
|
|
||||||
|
// TODO: something like a Point2D would be nicer here:
|
||||||
|
|
||||||
|
// Determine pushing direction
|
||||||
|
let i_center = rects[i].center();
|
||||||
|
let j_center = rects[j].center();
|
||||||
|
let diff = [j_center[0] - i_center[0], j_center[1] - i_center[1]];
|
||||||
|
|
||||||
|
// Prevent dividing by zero and non-movement
|
||||||
|
if (diff[0] == 0 && diff[1] == 0)
|
||||||
|
diff[0] = 1;
|
||||||
|
// Try to keep screen/workspace aspect ratio
|
||||||
|
if ( bounds.height / bounds.width > area.height / area.width )
|
||||||
|
diff[0] *= 2;
|
||||||
|
else
|
||||||
|
diff[1] *= 2;
|
||||||
|
|
||||||
|
// Approximate a vector of between 10px and 20px in magnitude in the same direction
|
||||||
|
let length = Math.sqrt(diff[0] * diff[0] + diff[1] * diff[1]);
|
||||||
|
diff[0] = diff[0] * WINDOW_PLACEMENT_NATURAL_ACCURACY / length;
|
||||||
|
diff[1] = diff[1] * WINDOW_PLACEMENT_NATURAL_ACCURACY / length;
|
||||||
|
|
||||||
|
// Move both windows apart
|
||||||
|
rects[i].translate(-diff[0], -diff[1]);
|
||||||
|
rects[j].translate(diff[0], diff[1]);
|
||||||
|
|
||||||
|
|
||||||
|
if (useMoreScreen) {
|
||||||
|
// Try to keep the bounding rect the same aspect as the screen so that more
|
||||||
|
// screen real estate is utilised. We do this by splitting the screen into nine
|
||||||
|
// equal sections, if the window center is in any of the corner sections pull the
|
||||||
|
// window towards the outer corner. If it is in any of the other edge sections
|
||||||
|
// alternate between each corner on that edge. We don't want to determine it
|
||||||
|
// randomly as it will not produce consistant locations when using the filter.
|
||||||
|
// Only move one window so we don't cause large amounts of unnecessary zooming
|
||||||
|
// in some situations. We need to do this even when expanding later just in case
|
||||||
|
// all windows are the same size.
|
||||||
|
// (We are using an old bounding rect for this, hopefully it doesn't matter)
|
||||||
|
let xSection = Math.round((rects[i].x - bounds.x) / (bounds.width / 3));
|
||||||
|
let ySection = Math.round((rects[i].y - bounds.y) / (bounds.height / 3));
|
||||||
|
|
||||||
|
let i_center = rects[i].center();
|
||||||
|
diff[0] = 0;
|
||||||
|
diff[1] = 0;
|
||||||
|
if (xSection != 1 || ySection != 1) { // Remove this if you want the center to pull as well
|
||||||
|
if (xSection == 1)
|
||||||
|
xSection = (directions[i] / 2 ? 2 : 0);
|
||||||
|
if (ySection == 1)
|
||||||
|
ySection = (directions[i] % 2 ? 2 : 0);
|
||||||
|
}
|
||||||
|
if (xSection == 0 && ySection == 0) {
|
||||||
|
diff[0] = bounds.x - i_center[0];
|
||||||
|
diff[1] = bounds.y - i_center[1];
|
||||||
|
}
|
||||||
|
if (xSection == 2 && ySection == 0) {
|
||||||
|
diff[0] = bounds.x + bounds.width - i_center[0];
|
||||||
|
diff[1] = bounds.y - i_center[1];
|
||||||
|
}
|
||||||
|
if (xSection == 2 && ySection == 2) {
|
||||||
|
diff[0] = bounds.x + bounds.width - i_center[0];
|
||||||
|
diff[1] = bounds.y + bounds.height - i_center[1];
|
||||||
|
}
|
||||||
|
if (xSection == 0 && ySection == 2) {
|
||||||
|
diff[0] = bounds.x - i_center[0];
|
||||||
|
diff[1] = bounds.y + bounds.height - i_center[1];
|
||||||
|
}
|
||||||
|
if (diff[0] != 0 || diff[1] != 0) {
|
||||||
|
let length = Math.sqrt(diff[0]*diff[0] + diff[1]*diff[1]);
|
||||||
|
diff[0] *= WINDOW_PLACEMENT_NATURAL_ACCURACY / length / 2; // /2 to make it less influencing than the normal center-move above
|
||||||
|
diff[1] *= WINDOW_PLACEMENT_NATURAL_ACCURACY / length / 2;
|
||||||
|
rects[i].translate(diff[0], diff[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update bounding rect
|
||||||
|
bounds = bounds.union(rects[i]);
|
||||||
|
bounds = bounds.union(rects[j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} while (overlap && loop_counter < WINDOW_PLACEMENT_NATURAL_MAX_TRANSLATIONS);
|
||||||
|
|
||||||
|
// Work out scaling by getting the most top-left and most bottom-right window coords.
|
||||||
|
let scale;
|
||||||
|
scale = Math.min(area.width / bounds.width,
|
||||||
|
area.height / bounds.height,
|
||||||
|
1.0);
|
||||||
|
|
||||||
|
// Make bounding rect fill the screen size for later steps
|
||||||
|
bounds.x = bounds.x - (area.width - bounds.width * scale) / 2;
|
||||||
|
bounds.y = bounds.y - (area.height - bounds.height * scale) / 2;
|
||||||
|
bounds.width = area.width / scale;
|
||||||
|
bounds.height = area.height / scale;
|
||||||
|
|
||||||
|
// Move all windows back onto the screen and set their scale
|
||||||
|
for (let i = 0; i < rects.length; i++) {
|
||||||
|
rects[i].translate(-bounds.x, -bounds.y);
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Implement the KDE part "Try to fill the gaps by enlarging windows if they have the space" here. (If this is wanted)
|
||||||
|
|
||||||
|
// rescale to workspace
|
||||||
|
let scales = [];
|
||||||
|
|
||||||
|
let buttonOuterHeight, captionHeight;
|
||||||
|
let buttonOuterWidth = 0;
|
||||||
|
|
||||||
|
let targets = [];
|
||||||
|
for (let i = 0; i < rects.length; i++) {
|
||||||
|
rects[i].x = rects[i].x * scale + area.x;
|
||||||
|
rects[i].y = rects[i].y * scale + area.y;
|
||||||
|
|
||||||
|
targets[i] = [rects[i].x, rects[i].y, scale];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [clones, targets];
|
||||||
|
}
|
||||||
|
workspaceInjections['_calculateWindowTransformationsNatural'] = undefined;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* _realPositionWindows:
|
||||||
|
* @flags:
|
||||||
|
* INITIAL - this is the initial positioning of the windows.
|
||||||
|
* ANIMATE - Indicates that we need animate changing position.
|
||||||
|
*/
|
||||||
|
workspaceInjections['_realPositionWindows'] = Workspace.Workspace.prototype._realPositionWindows;
|
||||||
|
Workspace.Workspace.prototype._realPositionWindows = function(flags) {
|
||||||
|
if (this._repositionWindowsId > 0) {
|
||||||
|
Mainloop.source_remove(this._repositionWindowsId);
|
||||||
|
this._repositionWindowsId = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
let clones = this._windows.slice();
|
||||||
|
if (this._reservedSlot)
|
||||||
|
clones.push(this._reservedSlot);
|
||||||
|
|
||||||
|
let initialPositioning = flags & WindowPositionFlags.INITIAL;
|
||||||
|
let animate = flags & WindowPositionFlags.ANIMATE;
|
||||||
|
|
||||||
|
// Start the animations
|
||||||
|
let targets = [];
|
||||||
|
let scales = [];
|
||||||
|
|
||||||
|
[clones, targets] = this._calculateWindowTransformationsNatural(clones);
|
||||||
|
|
||||||
|
let currentWorkspace = global.screen.get_active_workspace();
|
||||||
|
let isOnCurrentWorkspace = this.metaWorkspace == null || this.metaWorkspace == currentWorkspace;
|
||||||
|
|
||||||
|
for (let i = 0; i < clones.length; i++) {
|
||||||
|
let clone = clones[i];
|
||||||
|
let [x, y , scale] = targets[i];
|
||||||
|
let metaWindow = clone.metaWindow;
|
||||||
|
let mainIndex = this._lookupIndex(metaWindow);
|
||||||
|
let overlay = this._windowOverlays[mainIndex];
|
||||||
|
|
||||||
|
// Positioning a window currently being dragged must be avoided;
|
||||||
|
// we'll just leave a blank spot in the layout for it.
|
||||||
|
if (clone.inDrag)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (overlay && initialPositioning)
|
||||||
|
overlay.hide();
|
||||||
|
if (animate && isOnCurrentWorkspace) {
|
||||||
|
if (!metaWindow.showing_on_its_workspace()) {
|
||||||
|
/* Hidden windows should fade in and grow
|
||||||
|
* therefore we need to resize them now so they
|
||||||
|
* can be scaled up later */
|
||||||
|
if (initialPositioning) {
|
||||||
|
clone.actor.opacity = 0;
|
||||||
|
clone.actor.scale_x = 0;
|
||||||
|
clone.actor.scale_y = 0;
|
||||||
|
clone.actor.x = x;
|
||||||
|
clone.actor.y = y;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make the window slightly transparent to indicate it's hidden
|
||||||
|
Tweener.addTween(clone.actor,
|
||||||
|
{ opacity: 255,
|
||||||
|
time: Overview.ANIMATION_TIME,
|
||||||
|
transition: 'easeInQuad'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
this._animateClone(clone, overlay, x, y, scale, initialPositioning);
|
||||||
|
} else {
|
||||||
|
clone.actor.set_position(x, y);
|
||||||
|
clone.actor.set_scale(scale, scale);
|
||||||
|
this._updateWindowOverlayPositions(clone, overlay, x, y, scale, false);
|
||||||
|
this._showWindowOverlay(clone, overlay, isOnCurrentWorkspace);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// position window titles on top of windows in overlay ////
|
||||||
|
if (windowCaptionsOnTop) {
|
||||||
|
winInjections['chromeHeights'] = Workspace.WindowOverlay.prototype.chromeHeights;
|
||||||
|
Workspace.WindowOverlay.prototype.chromeHeights = function () {
|
||||||
|
return [Math.max( this.closeButton.height - this.closeButton._overlap, this.title.height - this.title._overlap),
|
||||||
|
0];
|
||||||
|
};
|
||||||
|
|
||||||
|
winInjections['updatePositions'] = Workspace.WindowOverlay.prototype.updatePositions;
|
||||||
|
Workspace.WindowOverlay.prototype.updatePositions = function(cloneX, cloneY, cloneWidth, cloneHeight, animate) {
|
||||||
|
let button = this.closeButton;
|
||||||
|
let title = this.title;
|
||||||
|
|
||||||
|
let settings = new Gio.Settings({ schema: BUTTON_LAYOUT_SCHEMA });
|
||||||
|
let layout = settings.get_string(BUTTON_LAYOUT_KEY);
|
||||||
|
let rtl = Clutter.get_default_text_direction() == Clutter.TextDirection.RTL;
|
||||||
|
|
||||||
|
let split = layout.split(":");
|
||||||
|
let side;
|
||||||
|
if (split[0].indexOf("close") > -1)
|
||||||
|
side = rtl ? St.Side.RIGHT : St.Side.LEFT;
|
||||||
|
else
|
||||||
|
side = rtl ? St.Side.LEFT : St.Side.RIGHT;
|
||||||
|
|
||||||
|
let buttonX;
|
||||||
|
let buttonY = cloneY - (button.height - button._overlap);
|
||||||
|
if (side == St.Side.LEFT)
|
||||||
|
buttonX = cloneX - (button.width - button._overlap);
|
||||||
|
else
|
||||||
|
buttonX = cloneX + (cloneWidth - button._overlap);
|
||||||
|
|
||||||
|
if (animate)
|
||||||
|
this._animateOverlayActor(button, Math.floor(buttonX), Math.floor(buttonY), button.width);
|
||||||
|
else
|
||||||
|
button.set_position(Math.floor(buttonX), Math.floor(buttonY));
|
||||||
|
|
||||||
|
if (!title.fullWidth)
|
||||||
|
title.fullWidth = title.width;
|
||||||
|
let titleWidth = Math.min(title.fullWidth, cloneWidth);
|
||||||
|
|
||||||
|
let titleX = cloneX + (cloneWidth - titleWidth) / 2;
|
||||||
|
let titleY = cloneY - title.height + title._spacing;
|
||||||
|
|
||||||
|
if (animate)
|
||||||
|
this._animateOverlayActor(title, Math.floor(titleX), Math.floor(titleY), titleWidth);
|
||||||
|
else {
|
||||||
|
title.width = titleWidth;
|
||||||
|
title.set_position(Math.floor(titleX), Math.floor(titleY));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function removeInjection(object, injection, name) {
|
||||||
|
if (injection[name] === undefined)
|
||||||
|
delete object[name];
|
||||||
|
else
|
||||||
|
object[name] = injection[name];
|
||||||
|
}
|
||||||
|
|
||||||
|
function disable() {
|
||||||
|
for (i in workspaceInjections)
|
||||||
|
removeInjection(Workspace.Workspace.prototype, workspaceInjections, i);
|
||||||
|
for (i in winInjections)
|
||||||
|
removeInjection(Workspace.WindowOverlay.prototype, winInjections, i);
|
||||||
|
|
||||||
|
for each (i in connectedSignals)
|
||||||
|
i.obj.disconnect(i.id);
|
||||||
|
|
||||||
|
global.stage.queue_relayout();
|
||||||
|
resetState();
|
||||||
|
}
|
||||||
|
|
||||||
|
function init() {
|
||||||
|
/* do nothing */
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"uuid": "@uuid@",
|
||||||
|
"extension-id": "@extension_id@",
|
||||||
|
"settings-schema": "@gschemaname@",
|
||||||
|
"gettext-domain": "@gettext_domain@",
|
||||||
|
"name": "Native Window Placement",
|
||||||
|
"description": "Arrange windows in overview in a more native way",
|
||||||
|
"shell-version": [ "@shell_current@" ],
|
||||||
|
"url": "@url@",
|
||||||
|
"original-authors": [ "wepmaschda@gmx.de" ]
|
||||||
|
}
|
||||||
+16
@@ -0,0 +1,16 @@
|
|||||||
|
<schemalist gettext-domain="gnome-shell-extensions">
|
||||||
|
<schema id="org.gnome.shell.extensions.native-window-placement" path="/org/gnome/shell/extensions/native-window-placement/">
|
||||||
|
<key name="use-more-screen" type="b">
|
||||||
|
<default>true</default>
|
||||||
|
<_summary>Use more screen for windows</_summary>
|
||||||
|
<_description>Try to use more screen for placing window thumbnails by adapting to screen aspect ratio, and consolidating
|
||||||
|
them further to reduce the bounding box. This setting applies only with the natural placement strategy.</_description>
|
||||||
|
</key>
|
||||||
|
<key name="window-captions-on-top" type="b">
|
||||||
|
<default>true</default>
|
||||||
|
<_summary>Place window captions on top</_summary>
|
||||||
|
<_description>If true, place window captions on top the respective thumbnail, overriding shell default of placing it at
|
||||||
|
the bottom. Changing this setting requires restarting the shell to have any effect.</_description>
|
||||||
|
</key>
|
||||||
|
</schema>
|
||||||
|
</schemalist>
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
.window-caption {
|
||||||
|
-shell-caption-spacing: 13px; /* current caption height is 26px => set it to half of it. TODO: better solution needed */
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
EXTENSION_ID = places-menu
|
||||||
|
|
||||||
|
EXTRA_MODULES = placeDisplay.js
|
||||||
|
|
||||||
|
include ../../extension.mk
|
||||||
@@ -0,0 +1,118 @@
|
|||||||
|
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||||
|
|
||||||
|
const Gio = imports.gi.Gio;
|
||||||
|
const GLib = imports.gi.GLib;
|
||||||
|
const Lang = imports.lang;
|
||||||
|
const Shell = imports.gi.Shell;
|
||||||
|
const St = imports.gi.St;
|
||||||
|
|
||||||
|
const Main = imports.ui.main;
|
||||||
|
const PanelMenu = imports.ui.panelMenu;
|
||||||
|
const PopupMenu = imports.ui.popupMenu;
|
||||||
|
const Panel = imports.ui.panel;
|
||||||
|
|
||||||
|
const Gettext = imports.gettext.domain('gnome-shell-extensions');
|
||||||
|
const _ = Gettext.gettext;
|
||||||
|
const N_ = function(x) { return x; }
|
||||||
|
|
||||||
|
const ExtensionUtils = imports.misc.extensionUtils;
|
||||||
|
const Me = ExtensionUtils.getCurrentExtension();
|
||||||
|
const Convenience = Me.imports.convenience;
|
||||||
|
const PlaceDisplay = Me.imports.placeDisplay;
|
||||||
|
|
||||||
|
const PLACE_ICON_SIZE = 16;
|
||||||
|
|
||||||
|
const PlaceMenuItem = new Lang.Class({
|
||||||
|
Name: 'PlaceMenuItem',
|
||||||
|
Extends: PopupMenu.PopupMenuItem,
|
||||||
|
|
||||||
|
_init: function(info) {
|
||||||
|
this.parent(info.name);
|
||||||
|
this._info = info;
|
||||||
|
|
||||||
|
this.addActor(new St.Icon({ gicon: info.icon,
|
||||||
|
icon_size: PLACE_ICON_SIZE }),
|
||||||
|
{ align: St.Align.END, span: -1 });
|
||||||
|
},
|
||||||
|
|
||||||
|
activate: function(event) {
|
||||||
|
this._info.launch(event.get_time());
|
||||||
|
|
||||||
|
this.parent(event);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const SECTIONS = {
|
||||||
|
'special': N_("Places"),
|
||||||
|
'devices': N_("Devices"),
|
||||||
|
'bookmarks': N_("Bookmarks"),
|
||||||
|
'network': N_("Network")
|
||||||
|
}
|
||||||
|
|
||||||
|
const PlacesMenu = new Lang.Class({
|
||||||
|
Name: 'PlacesMenu.PlacesMenu',
|
||||||
|
Extends: PanelMenu.SystemStatusButton,
|
||||||
|
|
||||||
|
_init: function() {
|
||||||
|
this.parent('folder-symbolic');
|
||||||
|
this.placesManager = new PlaceDisplay.PlacesManager();
|
||||||
|
|
||||||
|
this._sections = { };
|
||||||
|
|
||||||
|
for (let foo in SECTIONS) {
|
||||||
|
let id = foo; // stupid JS closure semantics...
|
||||||
|
this._sections[id] = { section: new PopupMenu.PopupMenuSection(),
|
||||||
|
title: Gettext.gettext(SECTIONS[id]) };
|
||||||
|
this.placesManager.connect(id + '-updated', Lang.bind(this, function() {
|
||||||
|
this._redisplay(id);
|
||||||
|
}));
|
||||||
|
|
||||||
|
this._create(id);
|
||||||
|
this.menu.addMenuItem(this._sections[id].section);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
destroy: function() {
|
||||||
|
this.placesManager.destroy();
|
||||||
|
|
||||||
|
this.parent();
|
||||||
|
},
|
||||||
|
|
||||||
|
_redisplay: function(id) {
|
||||||
|
this._sections[id].section.removeAll();
|
||||||
|
this._create(id);
|
||||||
|
},
|
||||||
|
|
||||||
|
_create: function(id) {
|
||||||
|
let title = new PopupMenu.PopupMenuItem(this._sections[id].title,
|
||||||
|
{ reactive: false,
|
||||||
|
style_class: 'popup-subtitle-menu-item' });
|
||||||
|
this._sections[id].section.addMenuItem(title);
|
||||||
|
|
||||||
|
let places = this.placesManager.get(id);
|
||||||
|
|
||||||
|
for (let i = 0; i < places.length; i++)
|
||||||
|
this._sections[id].section.addMenuItem(new PlaceMenuItem(places[i]));
|
||||||
|
|
||||||
|
this._sections[id].section.actor.visible = places.length > 0;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
function init() {
|
||||||
|
Convenience.initTranslations();
|
||||||
|
}
|
||||||
|
|
||||||
|
let _indicator;
|
||||||
|
|
||||||
|
function enable() {
|
||||||
|
_indicator = new PlacesMenu;
|
||||||
|
|
||||||
|
let pos = 1;
|
||||||
|
if ('apps-menu' in Main.panel.statusArea)
|
||||||
|
pos = 2;
|
||||||
|
Main.panel.addToStatusArea('places-menu', _indicator, pos, 'left');
|
||||||
|
}
|
||||||
|
|
||||||
|
function disable() {
|
||||||
|
_indicator.destroy();
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"extension-id": "@extension_id@",
|
||||||
|
"uuid": "@uuid@",
|
||||||
|
"settings-schema": "@gschemaname@",
|
||||||
|
"gettext-domain": "@gettext_domain@",
|
||||||
|
"name": "Places Status Indicator",
|
||||||
|
"description": "Add a systems status menu for quickly navigating places in the system",
|
||||||
|
"shell-version": [ "@shell_current@" ],
|
||||||
|
"url": "@url@"
|
||||||
|
}
|
||||||
@@ -0,0 +1,336 @@
|
|||||||
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
|
|
||||||
|
const GLib = imports.gi.GLib;
|
||||||
|
const Gio = imports.gi.Gio;
|
||||||
|
const Shell = imports.gi.Shell;
|
||||||
|
const Lang = imports.lang;
|
||||||
|
const Mainloop = imports.mainloop;
|
||||||
|
const Signals = imports.signals;
|
||||||
|
const St = imports.gi.St;
|
||||||
|
|
||||||
|
const DND = imports.ui.dnd;
|
||||||
|
const Main = imports.ui.main;
|
||||||
|
const Params = imports.misc.params;
|
||||||
|
const Search = imports.ui.search;
|
||||||
|
const Util = imports.misc.util;
|
||||||
|
|
||||||
|
const Gettext = imports.gettext.domain('gnome-shell-extensions');
|
||||||
|
const _ = Gettext.gettext;
|
||||||
|
const N_ = function(x) { return x; }
|
||||||
|
|
||||||
|
const PlaceInfo = new Lang.Class({
|
||||||
|
Name: 'PlaceInfo',
|
||||||
|
|
||||||
|
_init: function(kind, file, name, icon) {
|
||||||
|
this.kind = kind;
|
||||||
|
this.file = file;
|
||||||
|
this.name = name || this._getFileName();
|
||||||
|
this.icon = icon ? new Gio.ThemedIcon({ name: icon }) : this.getIcon();
|
||||||
|
},
|
||||||
|
|
||||||
|
isRemovable: function() {
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
|
||||||
|
launch: function(timestamp) {
|
||||||
|
let launchContext = global.create_app_launch_context();
|
||||||
|
launchContext.set_timestamp(timestamp);
|
||||||
|
|
||||||
|
try {
|
||||||
|
Gio.AppInfo.launch_default_for_uri(this.file.get_uri(),
|
||||||
|
launchContext);
|
||||||
|
} catch(e if e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_MOUNTED)) {
|
||||||
|
this.file.mount_enclosing_volume(0, null, null, function(file, result) {
|
||||||
|
file.mount_enclosing_volume_finish(result);
|
||||||
|
Gio.AppInfo.launch_default_for_uri(file.get_uri(), launchContext);
|
||||||
|
});
|
||||||
|
} catch(e) {
|
||||||
|
Main.notifyError(_("Failed to launch \"%s\"").format(this.name), e.message);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
getIcon: function() {
|
||||||
|
try {
|
||||||
|
let info = this.file.query_info('standard::symbolic-icon', 0, null);
|
||||||
|
return info.get_symbolic_icon();
|
||||||
|
} catch(e if e instanceof Gio.IOErrorEnum) {
|
||||||
|
// return a generic icon for this kind
|
||||||
|
switch (this.kind) {
|
||||||
|
case 'network':
|
||||||
|
return new Gio.ThemedIcon({ name: 'folder-remote-symbolic' });
|
||||||
|
case 'devices':
|
||||||
|
return new Gio.ThemedIcon({ name: 'drive-harddisk-symbolic' });
|
||||||
|
case 'special':
|
||||||
|
case 'bookmarks':
|
||||||
|
default:
|
||||||
|
if (!this.file.is_native())
|
||||||
|
return new Gio.ThemedIcon({ name: 'folder-remote-symbolic' });
|
||||||
|
else
|
||||||
|
return new Gio.ThemedIcon({ name: 'folder-symbolic' });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_getFileName: function() {
|
||||||
|
try {
|
||||||
|
let info = this.file.query_info('standard::display-name', 0, null);
|
||||||
|
return info.get_display_name();
|
||||||
|
} catch(e if e instanceof Gio.IOErrorEnum) {
|
||||||
|
return this.file.get_basename();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const PlaceDeviceInfo = new Lang.Class({
|
||||||
|
Name: 'PlaceDeviceInfo',
|
||||||
|
Extends: PlaceInfo,
|
||||||
|
|
||||||
|
_init: function(kind, mount) {
|
||||||
|
this._mount = mount;
|
||||||
|
this.parent(kind, mount.get_root(), mount.get_name());
|
||||||
|
},
|
||||||
|
|
||||||
|
getIcon: function() {
|
||||||
|
return this._mount.get_symbolic_icon();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const DEFAULT_DIRECTORIES = [
|
||||||
|
GLib.UserDirectory.DIRECTORY_DOCUMENTS,
|
||||||
|
GLib.UserDirectory.DIRECTORY_PICTURES,
|
||||||
|
GLib.UserDirectory.DIRECTORY_MUSIC,
|
||||||
|
GLib.UserDirectory.DIRECTORY_DOWNLOAD,
|
||||||
|
GLib.UserDirectory.DIRECTORY_VIDEOS,
|
||||||
|
];
|
||||||
|
|
||||||
|
const PlacesManager = new Lang.Class({
|
||||||
|
Name: 'PlacesManager',
|
||||||
|
|
||||||
|
_init: function() {
|
||||||
|
this._places = {
|
||||||
|
special: [],
|
||||||
|
devices: [],
|
||||||
|
bookmarks: [],
|
||||||
|
network: [],
|
||||||
|
};
|
||||||
|
|
||||||
|
let homePath = GLib.get_home_dir();
|
||||||
|
|
||||||
|
this._places.special.push(new PlaceInfo('special',
|
||||||
|
Gio.File.new_for_path(homePath),
|
||||||
|
_("Home")));
|
||||||
|
for (let i = 0; i < DEFAULT_DIRECTORIES.length; i++) {
|
||||||
|
let specialPath = GLib.get_user_special_dir(DEFAULT_DIRECTORIES[i]);
|
||||||
|
if (specialPath == homePath)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
let file = Gio.File.new_for_path(specialPath), info;
|
||||||
|
try {
|
||||||
|
info = new PlaceInfo('special', file);
|
||||||
|
} catch(e if e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
this._places.special.push(info);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Show devices, code more or less ported from nautilus-places-sidebar.c
|
||||||
|
*/
|
||||||
|
this._volumeMonitor = Gio.VolumeMonitor.get();
|
||||||
|
this._connectVolumeMonitorSignals();
|
||||||
|
this._updateMounts();
|
||||||
|
|
||||||
|
this._bookmarksFile = this._findBookmarksFile()
|
||||||
|
this._bookmarkTimeoutId = 0;
|
||||||
|
this._monitor = null;
|
||||||
|
|
||||||
|
if (this._bookmarksFile) {
|
||||||
|
this._monitor = this._bookmarksFile.monitor_file(Gio.FileMonitorFlags.NONE, null);
|
||||||
|
this._monitor.connect('changed', Lang.bind(this, function () {
|
||||||
|
if (this._bookmarkTimeoutId > 0)
|
||||||
|
return;
|
||||||
|
/* Defensive event compression */
|
||||||
|
this._bookmarkTimeoutId = Mainloop.timeout_add(100, Lang.bind(this, function () {
|
||||||
|
this._bookmarkTimeoutId = 0;
|
||||||
|
this._reloadBookmarks();
|
||||||
|
return false;
|
||||||
|
}));
|
||||||
|
}));
|
||||||
|
|
||||||
|
this._reloadBookmarks();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_connectVolumeMonitorSignals: function() {
|
||||||
|
const signals = ['volume-added', 'volume-removed', 'volume-changed',
|
||||||
|
'mount-added', 'mount-removed', 'mount-changed',
|
||||||
|
'drive-connected', 'drive-disconnected', 'drive-changed'];
|
||||||
|
|
||||||
|
this._volumeMonitorSignals = [];
|
||||||
|
let func = Lang.bind(this, this._updateMounts);
|
||||||
|
for (let i = 0; i < signals.length; i++) {
|
||||||
|
let id = this._volumeMonitor.connect(signals[i], func);
|
||||||
|
this._volumeMonitorSignals.push(id);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
destroy: function() {
|
||||||
|
for (let i = 0; i < this._volumeMonitorSignals.length; i++)
|
||||||
|
this._volumeMonitor.disconnect(this._volumeMonitorSignals[i]);
|
||||||
|
|
||||||
|
if (this._monitor)
|
||||||
|
this._monitor.cancel();
|
||||||
|
if (this._bookmarkTimeoutId)
|
||||||
|
Mainloop.source_remove(this._bookmarkTimeoutId);
|
||||||
|
},
|
||||||
|
|
||||||
|
_updateMounts: function() {
|
||||||
|
this._places.devices = [];
|
||||||
|
this._places.network = [];
|
||||||
|
|
||||||
|
/* Add standard places */
|
||||||
|
this._places.devices.push(new PlaceInfo('devices',
|
||||||
|
Gio.File.new_for_path('/'),
|
||||||
|
_("File System"),
|
||||||
|
'drive-harddisk-symbolic'));
|
||||||
|
this._places.network.push(new PlaceInfo('network',
|
||||||
|
Gio.File.new_for_uri('network:///'),
|
||||||
|
_("Browse network"),
|
||||||
|
'network-workgroup-symbolic'));
|
||||||
|
|
||||||
|
/* first go through all connected drives */
|
||||||
|
let drives = this._volumeMonitor.get_connected_drives();
|
||||||
|
for (let i = 0; i < drives.length; i++) {
|
||||||
|
let volumes = drives[i].get_volumes();
|
||||||
|
|
||||||
|
for(let j = 0; j < volumes.length; j++) {
|
||||||
|
let mount = volumes[j].get_mount();
|
||||||
|
let kind = 'devices';
|
||||||
|
if (volumes[j].get_identifier('class').indexOf('network') >= 0)
|
||||||
|
kind = 'network';
|
||||||
|
|
||||||
|
if(mount != null)
|
||||||
|
this._addMount(kind, mount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* add all volumes that is not associated with a drive */
|
||||||
|
let volumes = this._volumeMonitor.get_volumes();
|
||||||
|
for(let i = 0; i < volumes.length; i++) {
|
||||||
|
if(volumes[i].get_drive() != null)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
let kind = 'devices';
|
||||||
|
if (volumes.get_identifier('class').indexOf('network') >= 0)
|
||||||
|
kind = 'network';
|
||||||
|
|
||||||
|
let mount = volumes[i].get_mount();
|
||||||
|
if(mount != null)
|
||||||
|
this._addMount(kind, mount);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* add mounts that have no volume (/etc/mtab mounts, ftp, sftp,...) */
|
||||||
|
let mounts = this._volumeMonitor.get_mounts();
|
||||||
|
for(let i = 0; i < mounts.length; i++) {
|
||||||
|
if(mounts[i].is_shadowed())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if(mounts[i].get_volume())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
let root = mounts[i].get_default_location();
|
||||||
|
let kind;
|
||||||
|
if (root.is_native())
|
||||||
|
kind = 'devices';
|
||||||
|
else
|
||||||
|
kind = 'network';
|
||||||
|
|
||||||
|
this._addMount(kind, mounts[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.emit('devices-updated');
|
||||||
|
this.emit('network-updated');
|
||||||
|
},
|
||||||
|
|
||||||
|
_findBookmarksFile: function() {
|
||||||
|
let paths = [
|
||||||
|
GLib.build_filenamev([GLib.get_user_config_dir(), 'gtk-3.0', 'bookmarks']),
|
||||||
|
GLib.build_filenamev([GLib.get_home_dir(), '.gtk-bookmarks']),
|
||||||
|
];
|
||||||
|
|
||||||
|
for (let i = 0; i < paths.length; i++) {
|
||||||
|
if (GLib.file_test(paths[i], GLib.FileTest.EXISTS))
|
||||||
|
return Gio.File.new_for_path(paths[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
},
|
||||||
|
|
||||||
|
_reloadBookmarks: function() {
|
||||||
|
|
||||||
|
this._bookmarks = [];
|
||||||
|
|
||||||
|
let content = Shell.get_file_contents_utf8_sync(this._bookmarksFile.get_path());
|
||||||
|
let lines = content.split('\n');
|
||||||
|
|
||||||
|
let bookmarks = [];
|
||||||
|
for (let i = 0; i < lines.length; i++) {
|
||||||
|
let line = lines[i];
|
||||||
|
let components = line.split(' ');
|
||||||
|
let bookmark = components[0];
|
||||||
|
|
||||||
|
if (!bookmark)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
let file = Gio.File.new_for_uri(bookmark);
|
||||||
|
if (file.is_native() && !file.query_exists(null))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
let duplicate = false;
|
||||||
|
for (let i = 0; i < this._places.special.length; i++) {
|
||||||
|
if (file.equal(this._places.special[i].file)) {
|
||||||
|
duplicate = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (duplicate)
|
||||||
|
continue;
|
||||||
|
for (let i = 0; i < bookmarks.length; i++) {
|
||||||
|
if (file.equal(bookmarks[i].file)) {
|
||||||
|
duplicate = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (duplicate)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
let label = null;
|
||||||
|
if (components.length > 1)
|
||||||
|
label = components.slice(1).join(' ');
|
||||||
|
|
||||||
|
bookmarks.push(new PlaceInfo('bookmarks', file, label));
|
||||||
|
}
|
||||||
|
|
||||||
|
this._places.bookmarks = bookmarks;
|
||||||
|
|
||||||
|
this.emit('bookmarks-updated');
|
||||||
|
},
|
||||||
|
|
||||||
|
_addMount: function(kind, mount) {
|
||||||
|
let devItem;
|
||||||
|
|
||||||
|
try {
|
||||||
|
devItem = new PlaceDeviceInfo(kind, mount);
|
||||||
|
} catch(e if e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this._places[kind].push(devItem);
|
||||||
|
},
|
||||||
|
|
||||||
|
get: function (kind) {
|
||||||
|
return this._places[kind];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Signals.addSignalMethods(PlacesManager.prototype);
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
/* none used*/
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
EXTENSION_ID = static-workspaces
|
||||||
|
|
||||||
|
include ../../extension.mk
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
||||||
|
|
||||||
|
const Meta = imports.gi.Meta;
|
||||||
|
|
||||||
|
function init(metadata) {
|
||||||
|
}
|
||||||
|
|
||||||
|
function enable() {
|
||||||
|
// Override gnome-shell's overrides
|
||||||
|
Meta.prefs_override_preference_schema('dynamic-workspaces',
|
||||||
|
'org.gnome.mutter');
|
||||||
|
}
|
||||||
|
|
||||||
|
function disable() {
|
||||||
|
// Restore gnome-shell's overrides
|
||||||
|
Meta.prefs_override_preference_schema('dynamic-workspaces',
|
||||||
|
'org.gnome.shell.overrides');
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"extension-id": "@extension_id@",
|
||||||
|
"uuid": "@uuid@",
|
||||||
|
"settings-schema": "@gschemaname@",
|
||||||
|
"gettext-domain": "@gettext_domain@",
|
||||||
|
"name": "Static workspaces",
|
||||||
|
"description": "Disable dynamic workspace management",
|
||||||
|
"original-authors": [ "fmuellner@gnome.org" ],
|
||||||
|
"shell-version": [ "@shell_current@" ],
|
||||||
|
"url": "@url@"
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
/* This extensions requires no special styling */
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
EXTENSION_ID = systemMonitor
|
||||||
|
|
||||||
|
include ../../extension.mk
|
||||||
@@ -0,0 +1,360 @@
|
|||||||
|
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||||
|
|
||||||
|
const Clutter = imports.gi.Clutter;
|
||||||
|
const GTop = imports.gi.GTop;
|
||||||
|
const Lang = imports.lang;
|
||||||
|
const Mainloop = imports.mainloop;
|
||||||
|
const St = imports.gi.St;
|
||||||
|
const Shell = imports.gi.Shell;
|
||||||
|
|
||||||
|
const Main = imports.ui.main;
|
||||||
|
const Tweener = imports.ui.tweener;
|
||||||
|
|
||||||
|
const Gettext = imports.gettext.domain('gnome-shell-extensions');
|
||||||
|
const _ = Gettext.gettext;
|
||||||
|
|
||||||
|
const ExtensionUtils = imports.misc.extensionUtils;
|
||||||
|
const Me = ExtensionUtils.getCurrentExtension();
|
||||||
|
const Convenience = Me.imports.convenience;
|
||||||
|
|
||||||
|
const INDICATOR_UPDATE_INTERVAL = 500;
|
||||||
|
const INDICATOR_NUM_GRID_LINES = 3;
|
||||||
|
|
||||||
|
const ITEM_LABEL_SHOW_TIME = 0.15;
|
||||||
|
const ITEM_LABEL_HIDE_TIME = 0.1;
|
||||||
|
const ITEM_HOVER_TIMEOUT = 300;
|
||||||
|
|
||||||
|
const Indicator = new Lang.Class({
|
||||||
|
Name: 'SystemMonitor.Indicator',
|
||||||
|
|
||||||
|
_init: function() {
|
||||||
|
this._initValues();
|
||||||
|
this.drawing_area = new St.DrawingArea({ reactive: true });
|
||||||
|
this.drawing_area.connect('repaint', Lang.bind(this, this._draw));
|
||||||
|
this.drawing_area.connect('button-press-event', function() {
|
||||||
|
let app = Shell.AppSystem.get_default().lookup_app('gnome-system-monitor.desktop');
|
||||||
|
app.open_new_window(-1);
|
||||||
|
});
|
||||||
|
|
||||||
|
this.actor = new St.Bin({ style_class: "extension-systemMonitor-indicator-area",
|
||||||
|
reactive: true, track_hover: true,
|
||||||
|
x_fill: true, y_fill: true });
|
||||||
|
this.actor.add_actor(this.drawing_area);
|
||||||
|
|
||||||
|
this._timeout = Mainloop.timeout_add(INDICATOR_UPDATE_INTERVAL, Lang.bind(this, function () {
|
||||||
|
this._updateValues();
|
||||||
|
this.drawing_area.queue_repaint();
|
||||||
|
return true;
|
||||||
|
}));
|
||||||
|
},
|
||||||
|
|
||||||
|
showLabel: function() {
|
||||||
|
if (this.label == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this.label.opacity = 0;
|
||||||
|
this.label.show();
|
||||||
|
|
||||||
|
let [stageX, stageY] = this.actor.get_transformed_position();
|
||||||
|
|
||||||
|
let itemWidth = this.actor.allocation.x2 - this.actor.allocation.x1;
|
||||||
|
let itemHeight = this.actor.allocation.y2 - this.actor.allocation.y1;
|
||||||
|
|
||||||
|
let labelWidth = this.label.width;
|
||||||
|
let labelHeight = this.label.height;
|
||||||
|
let xOffset = Math.floor((itemWidth - labelWidth) / 2)
|
||||||
|
|
||||||
|
let x = stageX + xOffset;
|
||||||
|
|
||||||
|
let node = this.label.get_theme_node();
|
||||||
|
let yOffset = node.get_length('-y-offset');
|
||||||
|
|
||||||
|
let y = stageY - this.label.get_height() - yOffset;
|
||||||
|
|
||||||
|
this.label.set_position(x, y);
|
||||||
|
Tweener.addTween(this.label,
|
||||||
|
{ opacity: 255,
|
||||||
|
time: ITEM_LABEL_SHOW_TIME,
|
||||||
|
transition: 'easeOutQuad',
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
setLabelText: function(text) {
|
||||||
|
if (this.label == null)
|
||||||
|
this.label = new St.Label({ style_class: 'extension-systemMonitor-indicator-label'});
|
||||||
|
|
||||||
|
this.label.set_text(text);
|
||||||
|
Main.layoutManager.addChrome(this.label);
|
||||||
|
this.label.hide();
|
||||||
|
},
|
||||||
|
|
||||||
|
hideLabel: function () {
|
||||||
|
Tweener.addTween(this.label,
|
||||||
|
{ opacity: 0,
|
||||||
|
time: ITEM_LABEL_HIDE_TIME,
|
||||||
|
transition: 'easeOutQuad',
|
||||||
|
onComplete: Lang.bind(this, function() {
|
||||||
|
this.label.hide();
|
||||||
|
})
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
destroy: function() {
|
||||||
|
Mainloop.source_remove(this._timeout);
|
||||||
|
|
||||||
|
this.actor.destroy();
|
||||||
|
if (this.label)
|
||||||
|
this.label.destroy();
|
||||||
|
},
|
||||||
|
|
||||||
|
_initValues: function() {
|
||||||
|
},
|
||||||
|
|
||||||
|
_updateValues: function() {
|
||||||
|
},
|
||||||
|
|
||||||
|
_draw: function(area) {
|
||||||
|
let [width, height] = area.get_surface_size();
|
||||||
|
let themeNode = this.actor.get_theme_node();
|
||||||
|
let cr = area.get_context();
|
||||||
|
|
||||||
|
//draw the background grid
|
||||||
|
let color = themeNode.get_color(this.gridColor);
|
||||||
|
let gridOffset = Math.floor(height / (INDICATOR_NUM_GRID_LINES + 1));
|
||||||
|
for (let i = 1; i <= INDICATOR_NUM_GRID_LINES; ++i) {
|
||||||
|
cr.moveTo(0, i * gridOffset + .5);
|
||||||
|
cr.lineTo(width, i * gridOffset + .5);
|
||||||
|
}
|
||||||
|
Clutter.cairo_set_source_color(cr, color);
|
||||||
|
cr.setLineWidth(1);
|
||||||
|
cr.setDash([4,1], 0);
|
||||||
|
cr.stroke();
|
||||||
|
|
||||||
|
//draw the foreground
|
||||||
|
|
||||||
|
function makePath(values, reverse, nudge) {
|
||||||
|
if (nudge == null) {
|
||||||
|
nudge = 0;
|
||||||
|
}
|
||||||
|
//if we are going in reverse, we are completing the bottom of a chart, so use lineTo
|
||||||
|
if (reverse) {
|
||||||
|
cr.lineTo(values.length - 1, (1 - values[values.length - 1]) * height + nudge);
|
||||||
|
for (let k = values.length - 2; k >= 0; --k) {
|
||||||
|
cr.lineTo(k, (1 - values[k]) * height + nudge);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
cr.moveTo(0, (1 - values[0]) * height + nudge);
|
||||||
|
for (let k = 1; k < values.length; ++k) {
|
||||||
|
cr.lineTo(k, (1 - values[k]) * height + nudge);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let renderStats = this.renderStats;
|
||||||
|
|
||||||
|
// Make sure we don't have more sample points than pixels
|
||||||
|
renderStats.map(Lang.bind(this, function(k){
|
||||||
|
let stat = this.stats[k];
|
||||||
|
if (stat.values.length > width) {
|
||||||
|
stat.values = stat.values.slice(stat.values.length - width, stat.values.length);
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
for (let i = 0; i < renderStats.length; ++i) {
|
||||||
|
let stat = this.stats[renderStats[i]];
|
||||||
|
// We outline at full opacity and fill with 40% opacity
|
||||||
|
let outlineColor = themeNode.get_color(stat.color);
|
||||||
|
let color = new Clutter.Color(outlineColor);
|
||||||
|
color.alpha = color.alpha * .4;
|
||||||
|
|
||||||
|
// Render the background between us and the next level
|
||||||
|
makePath(stat.values, false);
|
||||||
|
// If there is a process below us, render the cpu between us and it, otherwise,
|
||||||
|
// render to the bottom of the chart
|
||||||
|
if (i == renderStats.length - 1) {
|
||||||
|
cr.lineTo(stat.values.length - 1, height);
|
||||||
|
cr.lineTo(0, height);
|
||||||
|
cr.closePath();
|
||||||
|
} else {
|
||||||
|
let nextStat = this.stats[renderStats[i+1]];
|
||||||
|
makePath(nextStat.values, true);
|
||||||
|
}
|
||||||
|
cr.closePath()
|
||||||
|
Clutter.cairo_set_source_color(cr, color);
|
||||||
|
cr.fill();
|
||||||
|
|
||||||
|
// Render the outline of this level
|
||||||
|
makePath(stat.values, false, .5);
|
||||||
|
Clutter.cairo_set_source_color(cr, outlineColor);
|
||||||
|
cr.setLineWidth(1.0);
|
||||||
|
cr.setDash([], 0);
|
||||||
|
cr.stroke();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const CpuIndicator = new Lang.Class({
|
||||||
|
Name: 'SystemMonitor.CpuIndicator',
|
||||||
|
Extends: Indicator,
|
||||||
|
|
||||||
|
_init: function() {
|
||||||
|
this.parent();
|
||||||
|
|
||||||
|
this.gridColor = '-grid-color';
|
||||||
|
this.renderStats = [ 'cpu-user', 'cpu-sys', 'cpu-iowait' ];
|
||||||
|
|
||||||
|
// Make sure renderStats is sorted as necessary for rendering
|
||||||
|
let renderStatOrder = {'cpu-total': 0, 'cpu-user': 1, 'cpu-sys': 2, 'cpu-iowait': 3};
|
||||||
|
this.renderStats = this.renderStats.sort(function(a,b) {
|
||||||
|
return renderStatOrder[a] - renderStatOrder[b];
|
||||||
|
});
|
||||||
|
|
||||||
|
this.setLabelText(_("CPU"));
|
||||||
|
},
|
||||||
|
|
||||||
|
_initValues: function() {
|
||||||
|
this._prev = new GTop.glibtop_cpu;
|
||||||
|
GTop.glibtop_get_cpu(this._prev);
|
||||||
|
|
||||||
|
this.stats = {
|
||||||
|
'cpu-user': {color: '-cpu-user-color', values: []},
|
||||||
|
'cpu-sys': {color: '-cpu-sys-color', values: []},
|
||||||
|
'cpu-iowait': {color: '-cpu-iowait-color', values: []},
|
||||||
|
'cpu-total': {color: '-cpu-total-color', values: []}
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
_updateValues: function() {
|
||||||
|
let cpu = new GTop.glibtop_cpu;
|
||||||
|
let t = 0.0;
|
||||||
|
GTop.glibtop_get_cpu(cpu);
|
||||||
|
let total = cpu.total - this._prev.total;
|
||||||
|
let user = cpu.user - this._prev.user;
|
||||||
|
let sys = cpu.sys - this._prev.sys;
|
||||||
|
let iowait = cpu.iowait - this._prev.iowait;
|
||||||
|
let idle = cpu.idle - this._prev.idle;
|
||||||
|
|
||||||
|
t += iowait / total;
|
||||||
|
this.stats['cpu-iowait'].values.push(t);
|
||||||
|
t += sys / total;
|
||||||
|
this.stats['cpu-sys'].values.push(t);
|
||||||
|
t += user / total;
|
||||||
|
this.stats['cpu-user'].values.push(t);
|
||||||
|
this.stats['cpu-total'].values.push(1 - idle / total);
|
||||||
|
|
||||||
|
this._prev = cpu;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const MemoryIndicator = new Lang.Class({
|
||||||
|
Name: 'SystemMonitor.MemoryIndicator',
|
||||||
|
Extends: Indicator,
|
||||||
|
|
||||||
|
_init: function() {
|
||||||
|
this.parent();
|
||||||
|
|
||||||
|
this.gridColor = '-grid-color';
|
||||||
|
this.renderStats = [ 'mem-user', 'mem-other', 'mem-cached' ];
|
||||||
|
|
||||||
|
// Make sure renderStats is sorted as necessary for rendering
|
||||||
|
let renderStatOrder = { 'mem-cached': 0, 'mem-other': 1, 'mem-user': 2 };
|
||||||
|
this.renderStats = this.renderStats.sort(function(a,b) {
|
||||||
|
return renderStatOrder[a] - renderStatOrder[b];
|
||||||
|
});
|
||||||
|
|
||||||
|
this.setLabelText(_("Memory"));
|
||||||
|
},
|
||||||
|
|
||||||
|
_initValues: function() {
|
||||||
|
this.mem = new GTop.glibtop_mem;
|
||||||
|
this.stats = {
|
||||||
|
'mem-user': { color: "-mem-user-color", values: [] },
|
||||||
|
'mem-other': { color: "-mem-other-color", values: [] },
|
||||||
|
'mem-cached': { color: "-mem-cached-color", values: [] }
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
_updateValues: function() {
|
||||||
|
GTop.glibtop_get_mem(this.mem);
|
||||||
|
|
||||||
|
let t = this.mem.user / this.mem.total;
|
||||||
|
this.stats['mem-user'].values.push(t);
|
||||||
|
t += (this.mem.used - this.mem.user - this.mem.cached) / this.mem.total;
|
||||||
|
this.stats['mem-other'].values.push(t);
|
||||||
|
t += this.mem.cached / this.mem.total;
|
||||||
|
this.stats['mem-cached'].values.push(t);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const INDICATORS = [CpuIndicator, MemoryIndicator];
|
||||||
|
|
||||||
|
const Extension = new Lang.Class({
|
||||||
|
Name: 'SystemMonitor.Extension',
|
||||||
|
|
||||||
|
_init: function() {
|
||||||
|
Convenience.initTranslations();
|
||||||
|
|
||||||
|
this._showLabelTimeoutId = 0;
|
||||||
|
this._resetHoverTimeoutId = 0;
|
||||||
|
this._labelShowing = false;
|
||||||
|
},
|
||||||
|
|
||||||
|
enable: function() {
|
||||||
|
this._box = new St.BoxLayout({ style_class: 'extension-systemMonitor-container',
|
||||||
|
x_align: Clutter.ActorAlign.START,
|
||||||
|
x_expand: true });
|
||||||
|
this._indicators = [ ];
|
||||||
|
|
||||||
|
for (let i = 0; i < INDICATORS.length; i++) {
|
||||||
|
let indicator = new (INDICATORS[i])();
|
||||||
|
|
||||||
|
indicator.actor.connect('notify::hover', Lang.bind(this, function() {
|
||||||
|
this._onHover(indicator);
|
||||||
|
}));
|
||||||
|
this._box.add_actor(indicator.actor);
|
||||||
|
this._indicators.push(indicator);
|
||||||
|
}
|
||||||
|
|
||||||
|
Main.messageTray.actor.add_actor(this._box);
|
||||||
|
},
|
||||||
|
|
||||||
|
disable: function() {
|
||||||
|
this._indicators.forEach(function(i) { i.destroy(); });
|
||||||
|
this._box.destroy();
|
||||||
|
},
|
||||||
|
|
||||||
|
_onHover: function (item) {
|
||||||
|
if (item.actor.get_hover()) {
|
||||||
|
if (this._showLabelTimeoutId == 0) {
|
||||||
|
let timeout = this._labelShowing ? 0 : ITEM_HOVER_TIMEOUT;
|
||||||
|
this._showLabelTimeoutId = Mainloop.timeout_add(timeout,
|
||||||
|
Lang.bind(this, function() {
|
||||||
|
this._labelShowing = true;
|
||||||
|
item.showLabel();
|
||||||
|
return false;
|
||||||
|
}));
|
||||||
|
if (this._resetHoverTimeoutId > 0) {
|
||||||
|
Mainloop.source_remove(this._resetHoverTimeoutId);
|
||||||
|
this._resetHoverTimeoutId = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (this._showLabelTimeoutId > 0)
|
||||||
|
Mainloop.source_remove(this._showLabelTimeoutId);
|
||||||
|
this._showLabelTimeoutId = 0;
|
||||||
|
item.hideLabel();
|
||||||
|
if (this._labelShowing) {
|
||||||
|
this._resetHoverTimeoutId = Mainloop.timeout_add(ITEM_HOVER_TIMEOUT,
|
||||||
|
Lang.bind(this, function() {
|
||||||
|
this._labelShowing = false;
|
||||||
|
return false;
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
function init() {
|
||||||
|
return new Extension();
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"shell-version": ["@shell_current@" ],
|
||||||
|
"uuid": "@uuid@",
|
||||||
|
"extension-id": "@extension_id@",
|
||||||
|
"settings-schema": "@gschemaname@",
|
||||||
|
"gettext-domain": "@gettext_domain@",
|
||||||
|
"original-author": "zaspire@rambler.ru",
|
||||||
|
"name": "SystemMonitor",
|
||||||
|
"description": "System Monitor",
|
||||||
|
"url": "@url@"
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
.extension-systemMonitor-container {
|
||||||
|
spacing: 5px;
|
||||||
|
padding-left: 5px;
|
||||||
|
padding-right: 5px;
|
||||||
|
padding-bottom: 10px;
|
||||||
|
padding-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.extension-systemMonitor-indicator-area {
|
||||||
|
border: 1px solid #8d8d8d;
|
||||||
|
border-radius: 3px;
|
||||||
|
width: 100px;
|
||||||
|
/* message tray is 72px, so 20px padding of the container,
|
||||||
|
2px of border, makes it 50px */
|
||||||
|
height: 50px;
|
||||||
|
-grid-color: #575757;
|
||||||
|
-cpu-total-color: rgb(0,154,62);
|
||||||
|
-cpu-user-color: rgb(69,154,0);
|
||||||
|
-cpu-sys-color: rgb(255,253,81);
|
||||||
|
-cpu-iowait-color: rgb(210,148,0);
|
||||||
|
-mem-user-color: rgb(210,148,0);
|
||||||
|
-mem-cached-color: rgb(90,90,90);
|
||||||
|
-mem-other-color: rgb(205,203,41);
|
||||||
|
background-color: #1e1e1e;
|
||||||
|
}
|
||||||
|
|
||||||
|
.extension-systemMonitor-indicator-label {
|
||||||
|
border-radius: 7px;
|
||||||
|
padding: 4px 12px;
|
||||||
|
background-color: rgba(0,0,0,0.9);
|
||||||
|
text-align: center;
|
||||||
|
-y-offset: 8px;
|
||||||
|
font-size: 9pt;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
EXTENSION_ID = user-theme
|
||||||
|
|
||||||
|
include ../../extension.mk
|
||||||
|
include ../../settings.mk
|
||||||
|
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
||||||
|
// Load shell theme from ~/.themes/name/gnome-shell
|
||||||
|
|
||||||
|
const GLib = imports.gi.GLib;
|
||||||
|
const Gio = imports.gi.Gio;
|
||||||
|
const Lang = imports.lang;
|
||||||
|
const Main = imports.ui.main;
|
||||||
|
|
||||||
|
const SETTINGS_KEY = 'name';
|
||||||
|
|
||||||
|
const ExtensionUtils = imports.misc.extensionUtils;
|
||||||
|
const Me = ExtensionUtils.getCurrentExtension();
|
||||||
|
const Convenience = Me.imports.convenience;
|
||||||
|
|
||||||
|
const ThemeManager = new Lang.Class({
|
||||||
|
Name: 'UserTheme.ThemeManager',
|
||||||
|
|
||||||
|
_init: function() {
|
||||||
|
this._settings = Convenience.getSettings();
|
||||||
|
},
|
||||||
|
|
||||||
|
enable: function() {
|
||||||
|
this._changedId = this._settings.connect('changed::'+SETTINGS_KEY, Lang.bind(this, this._changeTheme));
|
||||||
|
this._changeTheme();
|
||||||
|
},
|
||||||
|
|
||||||
|
disable: function() {
|
||||||
|
if (this._changedId) {
|
||||||
|
this._settings.disconnect(this._changedId);
|
||||||
|
this._changedId = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
Main.setThemeStylesheet(null);
|
||||||
|
Main.loadTheme();
|
||||||
|
},
|
||||||
|
|
||||||
|
_changeTheme: function() {
|
||||||
|
let _stylesheet = null;
|
||||||
|
let _themeName = this._settings.get_string(SETTINGS_KEY);
|
||||||
|
|
||||||
|
if (_themeName) {
|
||||||
|
let _userCssStylesheet = GLib.get_home_dir() + '/.themes/' + _themeName + '/gnome-shell/gnome-shell.css';
|
||||||
|
let file = Gio.file_new_for_path(_userCssStylesheet);
|
||||||
|
if (file.query_exists(null))
|
||||||
|
_stylesheet = _userCssStylesheet;
|
||||||
|
else {
|
||||||
|
let sysdirs = GLib.get_system_data_dirs();
|
||||||
|
for (let i = 0; i < sysdirs.length; i++) {
|
||||||
|
_userCssStylesheet = sysdirs[i] + '/themes/' + _themeName + '/gnome-shell/gnome-shell.css';
|
||||||
|
let file = Gio.file_new_for_path(_userCssStylesheet);
|
||||||
|
if (file.query_exists(null)) {
|
||||||
|
_stylesheet = _userCssStylesheet;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_stylesheet)
|
||||||
|
global.log('loading user theme: ' + _stylesheet);
|
||||||
|
else
|
||||||
|
global.log('loading default theme (Adwaita)');
|
||||||
|
Main.setThemeStylesheet(_stylesheet);
|
||||||
|
Main.loadTheme();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
function init() {
|
||||||
|
return new ThemeManager();
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"uuid": "@uuid@",
|
||||||
|
"extension-id": "@extension_id@",
|
||||||
|
"settings-schema": "@gschemaname@",
|
||||||
|
"gettext-domain": "@gettext_domain@",
|
||||||
|
"name": "User Themes",
|
||||||
|
"description": "Load shell themes from user directory",
|
||||||
|
"shell-version": [ "@shell_current@" ],
|
||||||
|
"original-authors": [ "john.stowers@gmail.com" ],
|
||||||
|
"url": "@url@"
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
<schemalist gettext-domain="gnome-shell-extensions">
|
||||||
|
<schema id="org.gnome.shell.extensions.user-theme" path="/org/gnome/shell/extensions/user-theme/">
|
||||||
|
<key name="name" type="s">
|
||||||
|
<default>""</default>
|
||||||
|
<_summary>Theme name</_summary>
|
||||||
|
<_description>The name of the theme, to be loaded from ~/.themes/name/gnome-shell</_description>
|
||||||
|
</key>
|
||||||
|
</schema>
|
||||||
|
</schemalist>
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
/* none used */
|
||||||
@@ -17,74 +17,88 @@ function injectToFunction(parent, name, func) {
|
|||||||
ret = func.apply(this, arguments);
|
ret = func.apply(this, arguments);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
return origin;
|
||||||
}
|
}
|
||||||
|
|
||||||
function main() {
|
let winInjections, workspaceInjections, workViewInjections, createdActors, connectedSignals;
|
||||||
Workspace.WindowOverlay.prototype.setId = function(id) {
|
|
||||||
if (this._text.visible && id == null)
|
function resetState() {
|
||||||
this._text.hide();
|
winInjections = { };
|
||||||
this._id = id;
|
workspaceInjections = { };
|
||||||
if (id != null)
|
workViewInjections = { };
|
||||||
this._text.text = this._id.toString();
|
createdActors = [ ];
|
||||||
}
|
connectedSignals = [ ];
|
||||||
Workspace.WindowOverlay.prototype.getId = function() {
|
}
|
||||||
return this._id;
|
|
||||||
}
|
function enable() {
|
||||||
|
resetState();
|
||||||
|
|
||||||
Workspace.WindowOverlay.prototype.showTooltip = function() {
|
Workspace.WindowOverlay.prototype.showTooltip = function() {
|
||||||
if (this._id === null)
|
|
||||||
return;
|
|
||||||
this._text.raise_top();
|
this._text.raise_top();
|
||||||
this._text.show();
|
this._text.show();
|
||||||
this._text.text = this._id.toString();
|
this._text.text = (this._windowClone.slotId + 1).toString();
|
||||||
}
|
}
|
||||||
|
winInjections['showTooltip'] = undefined;
|
||||||
|
|
||||||
Workspace.WindowOverlay.prototype.hideTooltip = function() {
|
Workspace.WindowOverlay.prototype.hideTooltip = function() {
|
||||||
if (this._text.visible)
|
if (this._text && this._text.visible)
|
||||||
this._text.hide();
|
this._text.hide();
|
||||||
}
|
}
|
||||||
|
winInjections['hideTooltip'] = undefined;
|
||||||
|
|
||||||
Workspace.Workspace.prototype.showTooltip = function() {
|
Workspace.Workspace.prototype.showTooltip = function() {
|
||||||
if (this._tip == null)
|
if (this._tip == null)
|
||||||
return;
|
return;
|
||||||
if (this.parent)
|
this._tip.text = (this.metaWorkspace.index() + 1).toString();
|
||||||
return;
|
this._tip.x = this._x;
|
||||||
this.actor.add_actor(this._tip);
|
this._tip.y = this._y;
|
||||||
|
this._tip.show();
|
||||||
this._tip.raise_top();
|
this._tip.raise_top();
|
||||||
}
|
}
|
||||||
|
workspaceInjections['showTooltip'] = undefined;
|
||||||
|
|
||||||
Workspace.Workspace.prototype.hideTooltip = function() {
|
Workspace.Workspace.prototype.hideTooltip = function() {
|
||||||
if (this._tip == null)
|
if (this._tip == null)
|
||||||
return;
|
return;
|
||||||
if (!this._tip.get_parent())
|
if (!this._tip.get_parent())
|
||||||
return;
|
return;
|
||||||
this.actor.remove_actor(this._tip);
|
this._tip.hide();
|
||||||
}
|
}
|
||||||
|
workspaceInjections['hideTooltip'] = undefined;
|
||||||
|
|
||||||
Workspace.Workspace.prototype.getWindowWithTooltip = function(id) {
|
Workspace.Workspace.prototype.getWindowWithTooltip = function(id) {
|
||||||
for (let i in this._windowOverlays) {
|
for (let i = 0; i < this._windows.length; i++) {
|
||||||
if (this._windowOverlays[i] == null)
|
if ((this._windows[i].slotId + 1) == id)
|
||||||
continue;
|
return this._windows[i].metaWindow;
|
||||||
if (this._windowOverlays[i].getId() === id)
|
|
||||||
return this._windowOverlays[i]._windowClone.metaWindow;
|
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
workspaceInjections['getWindowWithTooltip'] = undefined;
|
||||||
|
|
||||||
Workspace.Workspace.prototype.showWindowsTooltips = function() {
|
Workspace.Workspace.prototype.showWindowsTooltips = function() {
|
||||||
for (let i in this._windowOverlays) {
|
for (let i in this._windowOverlays) {
|
||||||
if (this._windowOverlays[i] != null)
|
if (this._windowOverlays[i] != null)
|
||||||
this._windowOverlays[i].showTooltip();
|
this._windowOverlays[i].showTooltip();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
workspaceInjections['showWindowsTooltips'] = undefined;
|
||||||
|
|
||||||
Workspace.Workspace.prototype.hideWindowsTooltips = function() {
|
Workspace.Workspace.prototype.hideWindowsTooltips = function() {
|
||||||
for (let i in this._windowOverlays) {
|
for (let i in this._windowOverlays) {
|
||||||
if (this._windowOverlays[i] != null)
|
if (this._windowOverlays[i] != null)
|
||||||
this._windowOverlays[i].hideTooltip();
|
this._windowOverlays[i].hideTooltip();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
workspaceInjections['hideWindowsTooltips'] = undefined;
|
||||||
|
|
||||||
WorkspacesView.WorkspacesView.prototype._hideTooltips = function() {
|
WorkspacesView.WorkspacesView.prototype._hideTooltips = function() {
|
||||||
global.stage.set_key_focus(this._prevFocusActor);
|
if (global.stage.get_key_focus() == global.stage)
|
||||||
|
global.stage.set_key_focus(this._prevFocusActor);
|
||||||
this._pickWindow = false;
|
this._pickWindow = false;
|
||||||
for (let i = 0; i < this._workspaces.length; i++)
|
for (let i = 0; i < this._workspaces.length; i++)
|
||||||
this._workspaces[i].hideWindowsTooltips();
|
this._workspaces[i].hideWindowsTooltips();
|
||||||
}
|
}
|
||||||
|
workViewInjections['_hideTooltips'] = undefined;
|
||||||
|
|
||||||
WorkspacesView.WorkspacesView.prototype._hideWorkspacesTooltips = function() {
|
WorkspacesView.WorkspacesView.prototype._hideWorkspacesTooltips = function() {
|
||||||
global.stage.set_key_focus(this._prevFocusActor);
|
global.stage.set_key_focus(this._prevFocusActor);
|
||||||
@@ -92,15 +106,27 @@ function main() {
|
|||||||
for (let i = 0; i < this._workspaces.length; i++)
|
for (let i = 0; i < this._workspaces.length; i++)
|
||||||
this._workspaces[i].hideTooltip();
|
this._workspaces[i].hideTooltip();
|
||||||
}
|
}
|
||||||
|
workViewInjections['_hideWorkspacesTooltips'] = undefined;
|
||||||
|
|
||||||
WorkspacesView.WorkspacesView.prototype._onKeyRelease = function(s, o) {
|
WorkspacesView.WorkspacesView.prototype._onKeyRelease = function(s, o) {
|
||||||
if (this._pickWindow && o.get_key_symbol() == Clutter.Alt_L)
|
if (this._pickWindow &&
|
||||||
|
(o.get_key_symbol() == Clutter.KEY_Alt_L ||
|
||||||
|
o.get_key_symbol() == Clutter.KEY_Alt_R))
|
||||||
this._hideTooltips();
|
this._hideTooltips();
|
||||||
if (this._pickWorkspace && o.get_key_symbol() == Clutter.Control_L)
|
if (this._pickWorkspace &&
|
||||||
|
(o.get_key_symbol() == Clutter.KEY_Control_L ||
|
||||||
|
o.get_key_symbol() == Clutter.KEY_Control_R))
|
||||||
this._hideWorkspacesTooltips();
|
this._hideWorkspacesTooltips();
|
||||||
}
|
}
|
||||||
|
workViewInjections['_onKeyRelease'] = undefined;
|
||||||
|
|
||||||
WorkspacesView.WorkspacesView.prototype._onKeyPress = function(s, o) {
|
WorkspacesView.WorkspacesView.prototype._onKeyPress = function(s, o) {
|
||||||
if (o.get_key_symbol() == Clutter.Alt_L && !this._pickWorkspace) {
|
if(Main.overview._viewSelector._activePage != Main.overview._viewSelector._workspacesPage)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if ((o.get_key_symbol() == Clutter.KEY_Alt_L ||
|
||||||
|
o.get_key_symbol() == Clutter.KEY_Alt_R)
|
||||||
|
&& !this._pickWorkspace) {
|
||||||
this._prevFocusActor = global.stage.get_key_focus();
|
this._prevFocusActor = global.stage.get_key_focus();
|
||||||
global.stage.set_key_focus(null);
|
global.stage.set_key_focus(null);
|
||||||
this._active = global.screen.get_active_workspace_index();
|
this._active = global.screen.get_active_workspace_index();
|
||||||
@@ -108,7 +134,9 @@ function main() {
|
|||||||
this._workspaces[global.screen.get_active_workspace_index()].showWindowsTooltips();
|
this._workspaces[global.screen.get_active_workspace_index()].showWindowsTooltips();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (o.get_key_symbol() == Clutter.Control_L && !this._pickWindow) {
|
if ((o.get_key_symbol() == Clutter.KEY_Control_L ||
|
||||||
|
o.get_key_symbol() == Clutter.KEY_Control_R)
|
||||||
|
&& !this._pickWindow) {
|
||||||
this._prevFocusActor = global.stage.get_key_focus();
|
this._prevFocusActor = global.stage.get_key_focus();
|
||||||
global.stage.set_key_focus(null);
|
global.stage.set_key_focus(null);
|
||||||
this._pickWorkspace = true;
|
this._pickWorkspace = true;
|
||||||
@@ -120,84 +148,125 @@ function main() {
|
|||||||
if (global.stage.get_key_focus() != global.stage)
|
if (global.stage.get_key_focus() != global.stage)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
// ignore shift presses, they're required to get numerals in azerty keyboards
|
||||||
|
if ((this._pickWindow || this._pickWorkspace) &&
|
||||||
|
(o.get_key_symbol() == Clutter.KEY_Shift_L ||
|
||||||
|
o.get_key_symbol() == Clutter.KEY_Shift_R))
|
||||||
|
return true;
|
||||||
|
|
||||||
if (this._pickWindow) {
|
if (this._pickWindow) {
|
||||||
if (this._active != global.screen.get_active_workspace_index()) {
|
if (this._active != global.screen.get_active_workspace_index()) {
|
||||||
this._hideTooltips();
|
this._hideTooltips();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
let c = o.get_key_unicode();
|
|
||||||
if (c > '9'.charCodeAt(0) || c < '0'.charCodeAt(0)) {
|
let c = o.get_key_symbol() - Clutter.KEY_KP_0;
|
||||||
this._hideTooltips();
|
if (c > 9 || c <= 0) {
|
||||||
return false;
|
c = o.get_key_symbol() - Clutter.KEY_0;
|
||||||
|
if (c > 9 || c <= 0) {
|
||||||
|
this._hideTooltips();
|
||||||
|
global.log(c);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
let win = this._workspaces[this._active].getWindowWithTooltip(c - '0'.charCodeAt(0));
|
|
||||||
|
let win = this._workspaces[this._active].getWindowWithTooltip(c);
|
||||||
this._hideTooltips();
|
this._hideTooltips();
|
||||||
|
|
||||||
if (win)
|
if (win)
|
||||||
Main.activateWindow(win, global.get_current_time());
|
Main.activateWindow(win, global.get_current_time());
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (this._pickWorkspace) {
|
if (this._pickWorkspace) {
|
||||||
let c = o.get_key_unicode();
|
let c = o.get_key_symbol() - Clutter.KEY_KP_0;
|
||||||
if (c > '9'.charCodeAt(0) || c < '0'.charCodeAt(0)) {
|
if (c > 9 || c <= 0) {
|
||||||
this._hideWorkspacesTooltips();
|
c = o.get_key_symbol() - Clutter.KEY_0;
|
||||||
return false;
|
if (c > 9 || c <= 0) {
|
||||||
|
this._hideWorkspacesTooltips();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
let workspace = this._workspaces[c - '0'.charCodeAt(0) - 1];
|
|
||||||
|
let workspace = this._workspaces[c - 1];
|
||||||
if (workspace !== undefined)
|
if (workspace !== undefined)
|
||||||
workspace.metaWorkspace.activate(global.get_current_time());
|
workspace.metaWorkspace.activate(global.get_current_time());
|
||||||
|
|
||||||
this._hideWorkspacesTooltips();
|
this._hideWorkspacesTooltips();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
workViewInjections['_onKeyPress'] = undefined;
|
||||||
|
|
||||||
injectToFunction(Workspace.WindowOverlay.prototype, '_init', function(windowClone, parentActor) {
|
winInjections['_init'] = injectToFunction(Workspace.WindowOverlay.prototype, '_init', function(windowClone, parentActor) {
|
||||||
this._id = null;
|
this._id = null;
|
||||||
this._text = new St.Label({ style_class: 'window-tooltip' });
|
createdActors.push(this._text = new St.Label({ style_class: 'extension-windowsNavigator-window-tooltip' }));
|
||||||
this._text.hide();
|
this._text.hide();
|
||||||
parentActor.add_actor(this._text);
|
parentActor.add_actor(this._text);
|
||||||
});
|
});
|
||||||
injectToFunction(Workspace.WindowOverlay.prototype, 'updatePositions', function(cloneX, cloneY, cloneWidth, cloneHeight) {
|
|
||||||
|
winInjections['updatePositions'] = injectToFunction(Workspace.WindowOverlay.prototype, 'updatePositions', function(cloneX, cloneY, cloneWidth, cloneHeight) {
|
||||||
let textX = cloneX - 2;
|
let textX = cloneX - 2;
|
||||||
let textY = cloneY - 2;
|
let textY = cloneY - 2;
|
||||||
this._text.set_position(Math.floor(textX), Math.floor(textY));
|
this._text.set_position(Math.floor(textX) + 5, Math.floor(textY) + 5);
|
||||||
this._text.raise_top();
|
this._text.raise_top();
|
||||||
});
|
});
|
||||||
injectToFunction(Workspace.Workspace.prototype, '_init', function(metaWorkspace) {
|
|
||||||
if (metaWorkspace.index() < 9) {
|
workspaceInjections['_init'] = injectToFunction(Workspace.Workspace.prototype, '_init', function(metaWorkspace) {
|
||||||
this._tip = new St.Label({ style_class: 'window-tooltip',
|
if (metaWorkspace && metaWorkspace.index() < 9) {
|
||||||
text: (metaWorkspace.index() + 1).toString() });
|
createdActors.push(this._tip = new St.Label({ style_class: 'extension-windowsNavigator-window-tooltip',
|
||||||
this.actor.connect('notify::scale-x', Lang.bind(this, function() {
|
visible: false }));
|
||||||
|
|
||||||
|
this.actor.add_actor(this._tip);
|
||||||
|
let signalId = this.actor.connect('notify::scale-x', Lang.bind(this, function() {
|
||||||
this._tip.set_scale(1 / this.actor.scale_x, 1 / this.actor.scale_x);
|
this._tip.set_scale(1 / this.actor.scale_x, 1 / this.actor.scale_x);
|
||||||
}));
|
}));
|
||||||
|
connectedSignals.push({ obj: this.actor, id: signalId });
|
||||||
} else
|
} else
|
||||||
this._tip = null;
|
this._tip = null;
|
||||||
});
|
});
|
||||||
injectToFunction(Workspace.Workspace.prototype, 'positionWindows', function(flags) {
|
|
||||||
let visibleClones = this._getVisibleClones();
|
|
||||||
if (this._reservedSlot)
|
|
||||||
visibleClones.push(this._reservedSlot);
|
|
||||||
|
|
||||||
let slots = this._computeAllWindowSlots(visibleClones.length);
|
workViewInjections['_init'] = injectToFunction(WorkspacesView.WorkspacesView.prototype, '_init', function(width, height, x, y, workspaces) {
|
||||||
visibleClones = this._orderWindowsByMotionAndStartup(visibleClones, slots);
|
|
||||||
for (let i = 0; i < visibleClones.length; i++) {
|
|
||||||
let clone = visibleClones[i];
|
|
||||||
let metaWindow = clone.metaWindow;
|
|
||||||
let mainIndex = this._lookupIndex(metaWindow);
|
|
||||||
let overlay = this._windowOverlays[mainIndex];
|
|
||||||
if (overlay)
|
|
||||||
overlay.setId(i < 9 ? i + 1 : null);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
injectToFunction(WorkspacesView.WorkspacesView.prototype, '_init', function(width, height, x, y, workspaces) {
|
|
||||||
this._pickWorkspace = false;
|
this._pickWorkspace = false;
|
||||||
this._pickWindow = false;
|
this._pickWindow = false;
|
||||||
this._keyPressEventId = global.stage.connect('key-press-event', Lang.bind(this, this._onKeyPress));
|
this._keyPressEventId = global.stage.connect('key-press-event', Lang.bind(this, this._onKeyPress));
|
||||||
this._keyReleaseEventId = global.stage.connect('key-release-event', Lang.bind(this, this._onKeyRelease));
|
this._keyReleaseEventId = global.stage.connect('key-release-event', Lang.bind(this, this._onKeyRelease));
|
||||||
|
connectedSignals.push({ obj: global.stage, id: this._keyPressEventId });
|
||||||
|
connectedSignals.push({ obj: global.stage, id: this._keyReleaseEventId });
|
||||||
});
|
});
|
||||||
injectToFunction(WorkspacesView.WorkspacesView.prototype, '_onDestroy', function() {
|
|
||||||
|
workViewInjections['_onDestroy'] = injectToFunction(WorkspacesView.WorkspacesView.prototype, '_onDestroy', function() {
|
||||||
global.stage.disconnect(this._keyPressEventId);
|
global.stage.disconnect(this._keyPressEventId);
|
||||||
global.stage.disconnect(this._keyReleaseEventId);
|
global.stage.disconnect(this._keyReleaseEventId);
|
||||||
|
connectedSignals = [ ];
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function removeInjection(object, injection, name) {
|
||||||
|
if (injection[name] === undefined)
|
||||||
|
delete object[name];
|
||||||
|
else
|
||||||
|
object[name] = injection[name];
|
||||||
|
}
|
||||||
|
|
||||||
|
function disable() {
|
||||||
|
for (i in workspaceInjections)
|
||||||
|
removeInjection(Workspace.Workspace.prototype, workspaceInjections, i);
|
||||||
|
for (i in winInjections)
|
||||||
|
removeInjection(Workspace.WindowOverlay.prototype, winInjections, i);
|
||||||
|
for (i in workViewInjections)
|
||||||
|
removeInjection(WorkspacesView.WorkspacesView.prototype, workViewInjections, i);
|
||||||
|
|
||||||
|
for each (i in connectedSignals)
|
||||||
|
i.obj.disconnect(i.id);
|
||||||
|
|
||||||
|
for each (i in createdActors)
|
||||||
|
i.destroy();
|
||||||
|
|
||||||
|
resetState();
|
||||||
|
}
|
||||||
|
|
||||||
|
function init() {
|
||||||
|
/* do nothing */
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
{
|
|
||||||
"shell-version": ["2.91.5", "2.91.6"],
|
|
||||||
"uuid": "windowsNavigator@gnome-shell-extensions.gnome.org",
|
|
||||||
"original-author": "zaspire@rambler.ru",
|
|
||||||
"name": "windowNavigator",
|
|
||||||
"description": "Allow keyboard selection of windows and workspaces in overlay mode"
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"shell-version": ["@shell_current@" ],
|
||||||
|
"extension-id": "@extension_id@",
|
||||||
|
"uuid": "@uuid@",
|
||||||
|
"settings-schema": "@gschemaname@",
|
||||||
|
"gettext-domain": "@gettext_domain@",
|
||||||
|
"original-author": "zaspire@rambler.ru",
|
||||||
|
"name": "windowNavigator",
|
||||||
|
"description": "Allow keyboard selection of windows and workspaces in overlay mode",
|
||||||
|
"url": "@url@"
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
.window-tooltip {
|
.extension-windowsNavigator-window-tooltip {
|
||||||
color: #ff0000;
|
color: #fefefe;
|
||||||
background: rgba(0,0,0,0.8);
|
background: rgba(0,0,0,0.8);
|
||||||
border: 1px solid rgba(128,128,128,0.40);
|
border: 1px solid rgba(128,128,128,0.40);
|
||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
EXTENSION_ID = workspace-indicator
|
||||||
|
|
||||||
|
EXTRA_MODULES = prefs.js
|
||||||
|
|
||||||
|
include ../../extension.mk
|
||||||
@@ -0,0 +1,143 @@
|
|||||||
|
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
||||||
|
|
||||||
|
const Gio = imports.gi.Gio;
|
||||||
|
const Meta = imports.gi.Meta;
|
||||||
|
const Clutter = imports.gi.Clutter;
|
||||||
|
const St = imports.gi.St;
|
||||||
|
const Lang = imports.lang;
|
||||||
|
const Mainloop = imports.mainloop;
|
||||||
|
const PanelMenu = imports.ui.panelMenu;
|
||||||
|
const PopupMenu = imports.ui.popupMenu;
|
||||||
|
const Panel = imports.ui.panel;
|
||||||
|
|
||||||
|
const Gettext = imports.gettext.domain('gnome-shell-extensions');
|
||||||
|
const _ = Gettext.gettext;
|
||||||
|
|
||||||
|
const Main = imports.ui.main;
|
||||||
|
|
||||||
|
const ExtensionUtils = imports.misc.extensionUtils;
|
||||||
|
const Me = ExtensionUtils.getCurrentExtension();
|
||||||
|
const Convenience = Me.imports.convenience;
|
||||||
|
|
||||||
|
const WORKSPACE_SCHEMA = 'org.gnome.desktop.wm.preferences';
|
||||||
|
const WORKSPACE_KEY = 'workspace-names';
|
||||||
|
|
||||||
|
const WorkspaceIndicator = new Lang.Class({
|
||||||
|
Name: 'WorkspaceIndicator.WorkspaceIndicator',
|
||||||
|
Extends: PanelMenu.Button,
|
||||||
|
|
||||||
|
_init: function(){
|
||||||
|
this.parent(0.0, _("Workspace Indicator"));
|
||||||
|
|
||||||
|
this._currentWorkspace = global.screen.get_active_workspace().index();
|
||||||
|
this.statusLabel = new St.Label({ text: this._labelText() });
|
||||||
|
|
||||||
|
this.actor.add_actor(this.statusLabel);
|
||||||
|
|
||||||
|
this.workspacesItems = [];
|
||||||
|
this._workspaceSection = new PopupMenu.PopupMenuSection();
|
||||||
|
this.menu.addMenuItem(this._workspaceSection);
|
||||||
|
|
||||||
|
this._screenSignals = [];
|
||||||
|
this._screenSignals.push(global.screen.connect_after('workspace-added', Lang.bind(this,this._createWorkspacesSection)));
|
||||||
|
this._screenSignals.push(global.screen.connect_after('workspace-removed', Lang.bind(this,this._createWorkspacesSection)));
|
||||||
|
this._screenSignals.push(global.screen.connect_after('workspace-switched', Lang.bind(this,this._updateIndicator)));
|
||||||
|
|
||||||
|
this.actor.connect('scroll-event', Lang.bind(this, this._onScrollEvent));
|
||||||
|
this._createWorkspacesSection();
|
||||||
|
|
||||||
|
//styling
|
||||||
|
this.statusLabel.add_style_class_name('panel-workspace-indicator');
|
||||||
|
|
||||||
|
this._settings = new Gio.Settings({ schema: WORKSPACE_SCHEMA });
|
||||||
|
this._settingsChangedId = this._settings.connect('changed::' + WORKSPACE_KEY, Lang.bind(this, this._createWorkspacesSection));
|
||||||
|
},
|
||||||
|
|
||||||
|
destroy: function() {
|
||||||
|
for (let i = 0; i < this._screenSignals.length; i++)
|
||||||
|
global.screen.disconnect(this._screenSignals[i]);
|
||||||
|
|
||||||
|
if (this._settingsChangedId) {
|
||||||
|
this._settings.disconnect(this._settingsChangedId);
|
||||||
|
this._settingsChangedId = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.parent();
|
||||||
|
},
|
||||||
|
|
||||||
|
_updateIndicator: function() {
|
||||||
|
this.workspacesItems[this._currentWorkspace].setShowDot(false);
|
||||||
|
this._currentWorkspace = global.screen.get_active_workspace().index();
|
||||||
|
this.workspacesItems[this._currentWorkspace].setShowDot(true);
|
||||||
|
|
||||||
|
this.statusLabel.set_text(this._labelText());
|
||||||
|
},
|
||||||
|
|
||||||
|
_labelText : function(workspaceIndex) {
|
||||||
|
if(workspaceIndex == undefined) {
|
||||||
|
workspaceIndex = this._currentWorkspace;
|
||||||
|
return (workspaceIndex + 1).toString();
|
||||||
|
}
|
||||||
|
return Meta.prefs_get_workspace_name(workspaceIndex);
|
||||||
|
},
|
||||||
|
|
||||||
|
_createWorkspacesSection : function() {
|
||||||
|
this._workspaceSection.removeAll();
|
||||||
|
this.workspacesItems = [];
|
||||||
|
this._currentWorkspace = global.screen.get_active_workspace().index();
|
||||||
|
|
||||||
|
let i = 0;
|
||||||
|
for(; i < global.screen.n_workspaces; i++) {
|
||||||
|
this.workspacesItems[i] = new PopupMenu.PopupMenuItem(this._labelText(i));
|
||||||
|
this._workspaceSection.addMenuItem(this.workspacesItems[i]);
|
||||||
|
this.workspacesItems[i].workspaceId = i;
|
||||||
|
this.workspacesItems[i].label_actor = this.statusLabel;
|
||||||
|
let self = this;
|
||||||
|
this.workspacesItems[i].connect('activate', Lang.bind(this, function(actor, event) {
|
||||||
|
this._activate(actor.workspaceId);
|
||||||
|
}));
|
||||||
|
|
||||||
|
if (i == this._currentWorkspace)
|
||||||
|
this.workspacesItems[i].setShowDot(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.statusLabel.set_text(this._labelText());
|
||||||
|
},
|
||||||
|
|
||||||
|
_activate : function (index) {
|
||||||
|
if(index >= 0 && index < global.screen.n_workspaces) {
|
||||||
|
let metaWorkspace = global.screen.get_workspace_by_index(index);
|
||||||
|
metaWorkspace.activate(global.get_current_time());
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_onScrollEvent : function(actor, event) {
|
||||||
|
let direction = event.get_scroll_direction();
|
||||||
|
let diff = 0;
|
||||||
|
if (direction == Clutter.ScrollDirection.DOWN) {
|
||||||
|
diff = 1;
|
||||||
|
} else if (direction == Clutter.ScrollDirection.UP) {
|
||||||
|
diff = -1;
|
||||||
|
} else {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let newIndex = global.screen.get_active_workspace().index() + diff;
|
||||||
|
this._activate(newIndex);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
function init(meta) {
|
||||||
|
Convenience.initTranslations();
|
||||||
|
}
|
||||||
|
|
||||||
|
let _indicator;
|
||||||
|
|
||||||
|
function enable() {
|
||||||
|
_indicator = new WorkspaceIndicator;
|
||||||
|
Main.panel.addToStatusArea('workspace-indicator', _indicator);
|
||||||
|
}
|
||||||
|
|
||||||
|
function disable() {
|
||||||
|
_indicator.destroy();
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"extension-id": "@extension_id@",
|
||||||
|
"uuid": "@uuid@",
|
||||||
|
"settings-schema": "@gschemaname@",
|
||||||
|
"gettext-domain": "@gettext_domain@",
|
||||||
|
"name": "Workspace Indicator",
|
||||||
|
"description": "Put an indicator on the panel signaling in which workspace you are, and give you the possibility of switching to another one",
|
||||||
|
"shell-version": [ "@shell_current@" ],
|
||||||
|
"original-authors": [ "erick.red@gmail.com" ],
|
||||||
|
"url": "@url@"
|
||||||
|
}
|
||||||
@@ -0,0 +1,207 @@
|
|||||||
|
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
||||||
|
|
||||||
|
const Gio = imports.gi.Gio;
|
||||||
|
const GLib = imports.gi.GLib;
|
||||||
|
const GObject = imports.gi.GObject;
|
||||||
|
const Gtk = imports.gi.Gtk;
|
||||||
|
const Lang = imports.lang;
|
||||||
|
|
||||||
|
const Gettext = imports.gettext.domain('gnome-shell-extensions');
|
||||||
|
const _ = Gettext.gettext;
|
||||||
|
const N_ = function(e) { return e };
|
||||||
|
|
||||||
|
const ExtensionUtils = imports.misc.extensionUtils;
|
||||||
|
const Me = ExtensionUtils.getCurrentExtension();
|
||||||
|
const Convenience = Me.imports.convenience;
|
||||||
|
|
||||||
|
const WORKSPACE_SCHEMA = 'org.gnome.desktop.wm.preferences';
|
||||||
|
const WORKSPACE_KEY = 'workspace-names';
|
||||||
|
|
||||||
|
const WorkspaceNameModel = new GObject.Class({
|
||||||
|
Name: 'WorkspaceIndicator.WorkspaceNameModel',
|
||||||
|
GTypeName: 'WorkspaceNameModel',
|
||||||
|
Extends: Gtk.ListStore,
|
||||||
|
|
||||||
|
Columns: {
|
||||||
|
LABEL: 0,
|
||||||
|
},
|
||||||
|
|
||||||
|
_init: function(params) {
|
||||||
|
this.parent(params);
|
||||||
|
this.set_column_types([GObject.TYPE_STRING]);
|
||||||
|
|
||||||
|
this._settings = new Gio.Settings({ schema: WORKSPACE_SCHEMA });
|
||||||
|
//this._settings.connect('changed::workspace-names', Lang.bind(this, this._reloadFromSettings));
|
||||||
|
|
||||||
|
this._reloadFromSettings();
|
||||||
|
|
||||||
|
// overriding class closure doesn't work, because GtkTreeModel
|
||||||
|
// plays tricks with marshallers and class closures
|
||||||
|
this.connect('row-changed', Lang.bind(this, this._onRowChanged));
|
||||||
|
this.connect('row-inserted', Lang.bind(this, this._onRowInserted));
|
||||||
|
this.connect('row-deleted', Lang.bind(this, this._onRowDeleted));
|
||||||
|
},
|
||||||
|
|
||||||
|
_reloadFromSettings: function() {
|
||||||
|
if (this._preventChanges)
|
||||||
|
return;
|
||||||
|
this._preventChanges = true;
|
||||||
|
|
||||||
|
let newNames = this._settings.get_strv(WORKSPACE_KEY);
|
||||||
|
|
||||||
|
let i = 0;
|
||||||
|
let [ok, iter] = this.get_iter_first();
|
||||||
|
while (ok && i < newNames.length) {
|
||||||
|
this.set(iter, [this.Columns.LABEL], [newNames[i]]);
|
||||||
|
|
||||||
|
ok = this.iter_next(iter);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (ok)
|
||||||
|
ok = this.remove(iter);
|
||||||
|
|
||||||
|
for ( ; i < newNames.length; i++) {
|
||||||
|
iter = this.append();
|
||||||
|
this.set(iter, [this.Columns.LABEL], [newNames[i]]);
|
||||||
|
}
|
||||||
|
|
||||||
|
this._preventChanges = false;
|
||||||
|
},
|
||||||
|
|
||||||
|
_onRowChanged: function(self, path, iter) {
|
||||||
|
if (this._preventChanges)
|
||||||
|
return;
|
||||||
|
this._preventChanges = true;
|
||||||
|
|
||||||
|
let index = path.get_indices()[0];
|
||||||
|
let names = this._settings.get_strv(WORKSPACE_KEY);
|
||||||
|
|
||||||
|
if (index >= names.length) {
|
||||||
|
// fill with blanks
|
||||||
|
for (let i = names.length; i <= index; i++)
|
||||||
|
names[i] = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
names[index] = this.get_value(iter, this.Columns.LABEL);
|
||||||
|
|
||||||
|
this._settings.set_strv(WORKSPACE_KEY, names);
|
||||||
|
|
||||||
|
this._preventChanges = false;
|
||||||
|
},
|
||||||
|
|
||||||
|
_onRowInserted: function(self, path, iter) {
|
||||||
|
if (this._preventChanges)
|
||||||
|
return;
|
||||||
|
this._preventChanges = true;
|
||||||
|
|
||||||
|
let index = path.get_indices()[0];
|
||||||
|
let names = this._settings.get_strv(WORKSPACE_KEY);
|
||||||
|
let label = this.get_value(iter, this.Columns.LABEL) || '';
|
||||||
|
names.splice(index, 0, label);
|
||||||
|
|
||||||
|
this._settings.set_strv(WORKSPACE_KEY, names);
|
||||||
|
|
||||||
|
this._preventChanges = false;
|
||||||
|
},
|
||||||
|
|
||||||
|
_onRowDeleted: function(self, path) {
|
||||||
|
if (this._preventChanges)
|
||||||
|
return;
|
||||||
|
this._preventChanges = true;
|
||||||
|
|
||||||
|
let index = path.get_indices()[0];
|
||||||
|
let names = this._settings.get_strv(WORKSPACE_KEY);
|
||||||
|
|
||||||
|
if (index >= names.length)
|
||||||
|
return;
|
||||||
|
|
||||||
|
names.splice(index, 1);
|
||||||
|
|
||||||
|
// compact the array
|
||||||
|
for (let i = names.length -1; i >= 0 && !names[i]; i++)
|
||||||
|
names.pop();
|
||||||
|
|
||||||
|
this._settings.set_strv(WORKSPACE_KEY, names);
|
||||||
|
|
||||||
|
this._preventChanges = false;
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const WorkspaceSettingsWidget = new GObject.Class({
|
||||||
|
Name: 'WorkspaceIndicator.WorkspaceSettingsWidget',
|
||||||
|
GTypeName: 'WorkspaceSettingsWidget',
|
||||||
|
Extends: Gtk.Grid,
|
||||||
|
|
||||||
|
_init: function(params) {
|
||||||
|
this.parent(params);
|
||||||
|
this.margin = 10;
|
||||||
|
this.orientation = Gtk.Orientation.VERTICAL;
|
||||||
|
|
||||||
|
this.add(new Gtk.Label({ label: _("Workspace names:"),
|
||||||
|
margin_bottom: 5 }));
|
||||||
|
|
||||||
|
this._store = new WorkspaceNameModel();
|
||||||
|
this._treeView = new Gtk.TreeView({ model: this._store,
|
||||||
|
headers_visible: false,
|
||||||
|
reorderable: true,
|
||||||
|
hexpand: true,
|
||||||
|
vexpand: true
|
||||||
|
});
|
||||||
|
|
||||||
|
let column = new Gtk.TreeViewColumn({ title: _("Name") });
|
||||||
|
let renderer = new Gtk.CellRendererText({ editable: true });
|
||||||
|
renderer.connect('edited', Lang.bind(this, this._cellEdited));
|
||||||
|
column.pack_start(renderer, true);
|
||||||
|
column.add_attribute(renderer, 'text', this._store.Columns.LABEL);
|
||||||
|
this._treeView.append_column(column);
|
||||||
|
|
||||||
|
this.add(this._treeView);
|
||||||
|
|
||||||
|
let toolbar = new Gtk.Toolbar();
|
||||||
|
toolbar.get_style_context().add_class(Gtk.STYLE_CLASS_INLINE_TOOLBAR);
|
||||||
|
|
||||||
|
let newButton = new Gtk.ToolButton({ stock_id: Gtk.STOCK_NEW });
|
||||||
|
newButton.connect('clicked', Lang.bind(this, this._newClicked));
|
||||||
|
toolbar.add(newButton);
|
||||||
|
|
||||||
|
let delButton = new Gtk.ToolButton({ stock_id: Gtk.STOCK_DELETE });
|
||||||
|
delButton.connect('clicked', Lang.bind(this, this._delClicked));
|
||||||
|
toolbar.add(delButton);
|
||||||
|
|
||||||
|
this.add(toolbar);
|
||||||
|
},
|
||||||
|
|
||||||
|
_cellEdited: function(renderer, path, new_text) {
|
||||||
|
let [ok, iter] = this._store.get_iter_from_string(path);
|
||||||
|
|
||||||
|
if (ok)
|
||||||
|
this._store.set(iter, [this._store.Columns.LABEL], [new_text]);
|
||||||
|
},
|
||||||
|
|
||||||
|
_newClicked: function() {
|
||||||
|
let iter = this._store.append();
|
||||||
|
let index = this._store.get_path(iter).get_indices()[0];
|
||||||
|
|
||||||
|
let label = _("Workspace %d").format(index);
|
||||||
|
this._store.set(iter, [this._store.Columns.LABEL], [label]);
|
||||||
|
},
|
||||||
|
|
||||||
|
_delClicked: function() {
|
||||||
|
let [any, model, iter] = this._treeView.get_selection().get_selected();
|
||||||
|
|
||||||
|
if (any)
|
||||||
|
this._store.remove(iter);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
function init() {
|
||||||
|
Convenience.initTranslations();
|
||||||
|
}
|
||||||
|
|
||||||
|
function buildPrefsWidget() {
|
||||||
|
let widget = new WorkspaceSettingsWidget();
|
||||||
|
widget.show_all();
|
||||||
|
|
||||||
|
return widget;
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
.panel-workspace-indicator {
|
||||||
|
padding: 0 8px;
|
||||||
|
background-color: rgba(200, 200, 200, .5);
|
||||||
|
border: 1px solid #cccccc;
|
||||||
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||||
|
|
||||||
const DBus = imports.dbus;
|
|
||||||
const Gdk = imports.gi.Gdk;
|
const Gdk = imports.gi.Gdk;
|
||||||
|
const Gio = imports.gi.Gio;
|
||||||
const GLib = imports.gi.GLib;
|
const GLib = imports.gi.GLib;
|
||||||
const GnomeDesktop = imports.gi.GnomeDesktop;
|
const GnomeDesktop = imports.gi.GnomeDesktop;
|
||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
@@ -13,8 +13,13 @@ const PanelMenu = imports.ui.panelMenu;
|
|||||||
const PopupMenu = imports.ui.popupMenu;
|
const PopupMenu = imports.ui.popupMenu;
|
||||||
const Panel = imports.ui.panel;
|
const Panel = imports.ui.panel;
|
||||||
|
|
||||||
const Gettext = imports.gettext.domain('gnome-shell');
|
const Gettext = imports.gettext.domain('gnome-shell-extensions');
|
||||||
const _ = Gettext.gettext;
|
const _ = Gettext.gettext;
|
||||||
|
const N_ = function(e) { return e };
|
||||||
|
|
||||||
|
const ExtensionUtils = imports.misc.extensionUtils;
|
||||||
|
const Me = ExtensionUtils.getCurrentExtension();
|
||||||
|
const Convenience = Me.imports.convenience;
|
||||||
|
|
||||||
const possibleRotations = [ GnomeDesktop.RRRotation.ROTATION_0,
|
const possibleRotations = [ GnomeDesktop.RRRotation.ROTATION_0,
|
||||||
GnomeDesktop.RRRotation.ROTATION_90,
|
GnomeDesktop.RRRotation.ROTATION_90,
|
||||||
@@ -22,31 +27,29 @@ const possibleRotations = [ GnomeDesktop.RRRotation.ROTATION_0,
|
|||||||
GnomeDesktop.RRRotation.ROTATION_270
|
GnomeDesktop.RRRotation.ROTATION_270
|
||||||
];
|
];
|
||||||
|
|
||||||
let rotations = [ [ GnomeDesktop.RRRotation.ROTATION_0, _("Normal") ],
|
let rotations = [ [ GnomeDesktop.RRRotation.ROTATION_0, N_("Normal") ],
|
||||||
[ GnomeDesktop.RRRotation.ROTATION_90, _("Left") ],
|
[ GnomeDesktop.RRRotation.ROTATION_90, N_("Left") ],
|
||||||
[ GnomeDesktop.RRRotation.ROTATION_270, _("Right") ],
|
[ GnomeDesktop.RRRotation.ROTATION_270, N_("Right") ],
|
||||||
[ GnomeDesktop.RRRotation.ROTATION_180, _("Upside-down") ]
|
[ GnomeDesktop.RRRotation.ROTATION_180, N_("Upside-down") ]
|
||||||
];
|
];
|
||||||
|
|
||||||
const XRandr2Iface = {
|
const XRandr2Iface = <interface name='org.gnome.SettingsDaemon.XRANDR_2'>
|
||||||
name: 'org.gnome.SettingsDaemon.XRANDR_2',
|
<method name='ApplyConfiguration'>
|
||||||
methods: [
|
<arg type='x' direction='in'/>
|
||||||
{ name: 'ApplyConfiguration', inSignature: 'xx', outSignature: '' },
|
<arg type='x' direction='in'/>
|
||||||
]
|
</method>
|
||||||
};
|
</interface>;
|
||||||
let XRandr2 = DBus.makeProxyClass(XRandr2Iface);
|
|
||||||
|
|
||||||
function Indicator() {
|
const XRandr2 = Gio.DBusProxy.makeProxyWrapper(XRandr2Iface);
|
||||||
this._init.apply(this, arguments);
|
|
||||||
}
|
|
||||||
|
|
||||||
Indicator.prototype = {
|
const Indicator = new Lang.Class({
|
||||||
__proto__: PanelMenu.SystemStatusButton.prototype,
|
Name: 'XRandRIndicator',
|
||||||
|
Extends: PanelMenu.SystemStatusButton,
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
PanelMenu.SystemStatusButton.prototype._init.call(this, 'preferences-desktop-display');
|
this.parent('preferences-desktop-display-symbolic', _("Display"));
|
||||||
|
|
||||||
this._proxy = new XRandr2(DBus.session, 'org.gnome.SettingsDaemon', '/org/gnome/SettingsDaemon/XRANDR');
|
this._proxy = new XRandr2(Gio.DBus.session, 'org.gnome.SettingsDaemon', '/org/gnome/SettingsDaemon/XRANDR');
|
||||||
|
|
||||||
try {
|
try {
|
||||||
this._screen = new GnomeDesktop.RRScreen({ gdk_screen: Gdk.Screen.get_default() });
|
this._screen = new GnomeDesktop.RRScreen({ gdk_screen: Gdk.Screen.get_default() });
|
||||||
@@ -58,7 +61,7 @@ Indicator.prototype = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this._createMenu();
|
this._createMenu();
|
||||||
this._screen.connect('screen-changed', Lang.bind(this, this._randrEvent));
|
this._screen.connect('changed', Lang.bind(this, this._randrEvent));
|
||||||
},
|
},
|
||||||
|
|
||||||
_randrEvent: function() {
|
_randrEvent: function() {
|
||||||
@@ -70,13 +73,11 @@ Indicator.prototype = {
|
|||||||
let config = GnomeDesktop.RRConfig.new_current(this._screen);
|
let config = GnomeDesktop.RRConfig.new_current(this._screen);
|
||||||
let outputs = config.get_outputs();
|
let outputs = config.get_outputs();
|
||||||
for (let i = 0; i < outputs.length; i++) {
|
for (let i = 0; i < outputs.length; i++) {
|
||||||
if (outputs[i].get_connected())
|
if (outputs[i].is_connected())
|
||||||
this._addOutputItem(config, outputs[i]);
|
this._addOutputItem(config, outputs[i]);
|
||||||
}
|
}
|
||||||
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||||
this.menu.addAction(_("Configure display settings..."), function() {
|
this.menu.addSettingsAction(_("Display Settings"), 'gnome-display-panel.desktop');
|
||||||
GLib.spawn_command_line_async('gnome-control-center display');
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_addOutputItem: function(config, output) {
|
_addOutputItem: function(config, output) {
|
||||||
@@ -87,21 +88,26 @@ Indicator.prototype = {
|
|||||||
this.menu.addMenuItem(item);
|
this.menu.addMenuItem(item);
|
||||||
|
|
||||||
let allowedRotations = this._getAllowedRotations(config, output);
|
let allowedRotations = this._getAllowedRotations(config, output);
|
||||||
|
let currentRotation = output.get_rotation();
|
||||||
for (let i = 0; i < rotations.length; i++) {
|
for (let i = 0; i < rotations.length; i++) {
|
||||||
let [bitmask, name] = rotations[i];
|
let [bitmask, name] = rotations[i];
|
||||||
if (bitmask & allowedRotations) {
|
if (bitmask & allowedRotations) {
|
||||||
this.menu.addAction(name, Lang.bind(this, function(event) {
|
let item = new PopupMenu.PopupMenuItem(Gettext.gettext(name));
|
||||||
|
if (bitmask & currentRotation)
|
||||||
|
item.setShowDot(true);
|
||||||
|
item.connect('activate', Lang.bind(this, function(item, event) {
|
||||||
/* ensure config is saved so we get a backup if anything goes wrong */
|
/* ensure config is saved so we get a backup if anything goes wrong */
|
||||||
config.save();
|
config.save();
|
||||||
|
|
||||||
output.set_rotation(bitmask);
|
output.set_rotation(bitmask);
|
||||||
try {
|
try {
|
||||||
config.save();
|
config.save();
|
||||||
this._proxy.ApplyConfigurationRemote(global.stage_xwindow, event.get_time());
|
this._proxy.ApplyConfigurationRemote(0, event.get_time());
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
logError ('Could not save monitor configuration: ' + e);
|
log ('Could not save monitor configuration: ' + e);
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
this.menu.addMenuItem(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -127,9 +133,19 @@ Indicator.prototype = {
|
|||||||
}
|
}
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
function init(metadata) {
|
||||||
|
Convenience.initTranslations();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let _indicator;
|
||||||
|
|
||||||
function main() {
|
function enable() {
|
||||||
Panel.STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION['display'] = Indicator;
|
_indicator = new Indicator();
|
||||||
|
Main.panel.addToStatusArea('display', _indicator);
|
||||||
|
}
|
||||||
|
|
||||||
|
function disable() {
|
||||||
|
_indicator.destroy();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,132 +0,0 @@
|
|||||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
||||||
|
|
||||||
const DBus = imports.dbus;
|
|
||||||
const Gdk = imports.gi.Gdk;
|
|
||||||
const GLib = imports.gi.GLib;
|
|
||||||
const GnomeDesktop = imports.gi.GnomeDesktop;
|
|
||||||
const Lang = imports.lang;
|
|
||||||
const Shell = imports.gi.Shell;
|
|
||||||
const St = imports.gi.St;
|
|
||||||
|
|
||||||
const Main = imports.ui.main;
|
|
||||||
const PanelMenu = imports.ui.panelMenu;
|
|
||||||
const PopupMenu = imports.ui.popupMenu;
|
|
||||||
const Panel = imports.ui.panel;
|
|
||||||
|
|
||||||
const Gettext = imports.gettext.domain('gnome-shell');
|
|
||||||
const _ = Gettext.gettext;
|
|
||||||
|
|
||||||
const possibleRotations = [ GnomeDesktop.RRRotation.ROTATION_0,
|
|
||||||
GnomeDesktop.RRRotation.ROTATION_90,
|
|
||||||
GnomeDesktop.RRRotation.ROTATION_180,
|
|
||||||
GnomeDesktop.RRRotation.ROTATION_270
|
|
||||||
];
|
|
||||||
|
|
||||||
let rotations = [ [ GnomeDesktop.RRRotation.ROTATION_0, _("Normal") ],
|
|
||||||
[ GnomeDesktop.RRRotation.ROTATION_90, _("Left") ],
|
|
||||||
[ GnomeDesktop.RRRotation.ROTATION_270, _("Right") ],
|
|
||||||
[ GnomeDesktop.RRRotation.ROTATION_180, _("Upside-down") ]
|
|
||||||
];
|
|
||||||
|
|
||||||
const XRandr2Iface = {
|
|
||||||
name: 'org.gnome.SettingsDaemon.XRANDR_2',
|
|
||||||
methods: [
|
|
||||||
{ name: 'ApplyConfiguration', inSignature: 'xx', outSignature: '' },
|
|
||||||
]
|
|
||||||
};
|
|
||||||
let XRandr2 = DBus.makeProxyClass(XRandr2Iface);
|
|
||||||
|
|
||||||
function Indicator() {
|
|
||||||
this._init.apply(this, arguments);
|
|
||||||
}
|
|
||||||
|
|
||||||
Indicator.prototype = {
|
|
||||||
__proto__: PanelMenu.SystemStatusButton.prototype,
|
|
||||||
|
|
||||||
_init: function() {
|
|
||||||
PanelMenu.SystemStatusButton.prototype._init.call(this, 'preferences-desktop-display');
|
|
||||||
|
|
||||||
this._proxy = new XRandr2(DBus.session, 'org.gnome.SettingsDaemon', '/org/gnome/SettingsDaemon/XRANDR');
|
|
||||||
|
|
||||||
try {
|
|
||||||
this._screen = new GnomeDesktop.RRScreen({ gdk_screen: Gdk.Screen.get_default() });
|
|
||||||
this._screen.init(null);
|
|
||||||
} catch(e) {
|
|
||||||
// an error means there is no XRandR extension
|
|
||||||
this.actor.hide();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this._createMenu();
|
|
||||||
this._screen.connect('screen-changed', Lang.bind(this, this._randrEvent));
|
|
||||||
},
|
|
||||||
|
|
||||||
_randrEvent: function() {
|
|
||||||
this.menu.removeAll();
|
|
||||||
this._createMenu();
|
|
||||||
},
|
|
||||||
|
|
||||||
_createMenu: function() {
|
|
||||||
let config = GnomeDesktop.RRConfig.new_current(this._screen);
|
|
||||||
let outputs = config.get_outputs();
|
|
||||||
for (let i = 0; i < outputs.length; i++) {
|
|
||||||
if (outputs[i].get_connected())
|
|
||||||
this._addOutputItem(config, outputs[i]);
|
|
||||||
}
|
|
||||||
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
|
||||||
this.menu.addAction(_("Configure display settings..."), function() {
|
|
||||||
GLib.spawn_command_line_async('gnome-control-center display');
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
_addOutputItem: function(config, output) {
|
|
||||||
let item = new PopupMenu.PopupMenuItem(output.get_display_name());
|
|
||||||
item.label.add_style_class_name('display-subtitle');
|
|
||||||
item.actor.reactive = false;
|
|
||||||
item.actor.can_focus = false;
|
|
||||||
this.menu.addMenuItem(item);
|
|
||||||
|
|
||||||
let allowedRotations = this._getAllowedRotations(config, output);
|
|
||||||
for (let i = 0; i < rotations.length; i++) {
|
|
||||||
let [bitmask, name] = rotations[i];
|
|
||||||
if (bitmask & allowedRotations) {
|
|
||||||
this.menu.addAction(name, Lang.bind(this, function(event) {
|
|
||||||
/* ensure config is saved so we get a backup if anything goes wrong */
|
|
||||||
config.save();
|
|
||||||
|
|
||||||
output.set_rotation(bitmask);
|
|
||||||
try {
|
|
||||||
config.save();
|
|
||||||
this._proxy.ApplyConfigurationRemote(global.stage_xwindow, event.get_time());
|
|
||||||
} catch (e) {
|
|
||||||
logError ('Could not save monitor configuration: ' + e);
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_getAllowedRotations: function(config, output) {
|
|
||||||
let retval = 0;
|
|
||||||
|
|
||||||
let current = output.get_rotation();
|
|
||||||
|
|
||||||
for (let i = 0; i < possibleRotations.length; i++) {
|
|
||||||
output.set_rotation(possibleRotations[i]);
|
|
||||||
if (config.applicable(this._screen)) {
|
|
||||||
retval |= possibleRotations[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
output.set_rotation(current);
|
|
||||||
|
|
||||||
if (retval.lenght == 0) {
|
|
||||||
// what, no rotation?
|
|
||||||
// what's current then?
|
|
||||||
retval = current;
|
|
||||||
}
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Panel.STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION['display'] = Indicator;
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
{
|
|
||||||
"uuid": "xrandr-indicator@gnome-shell-extensions.gnome.org",
|
|
||||||
"name": "Monitor Status Indicator",
|
|
||||||
"description": "Add a systems status menu for rotating monitors (overrides what is currently provided by gnome-settings-daemon)",
|
|
||||||
"shell-version": [ "2.91.5", "2.91.6" ]
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"extension-id": "@extension_id@",
|
||||||
|
"uuid": "@uuid@",
|
||||||
|
"settings-schema": "@gschemaname@",
|
||||||
|
"gettext-domain": "@gettext_domain@",
|
||||||
|
"name": "Monitor Status Indicator",
|
||||||
|
"description": "Add a systems status menu for rotating monitors (overrides what is currently provided by gnome-settings-daemon)",
|
||||||
|
"shell-version": [ "@shell_current@" ],
|
||||||
|
"url": "@url@"
|
||||||
|
}
|
||||||
@@ -6,6 +6,13 @@
|
|||||||
|
|
||||||
<name xml:lang="en">GNOME Shell Extensions</name>
|
<name xml:lang="en">GNOME Shell Extensions</name>
|
||||||
<shortdesc xml:lang="en">Modify and extend GNOME Shell functionality and behavior</shortdesc>
|
<shortdesc xml:lang="en">Modify and extend GNOME Shell functionality and behavior</shortdesc>
|
||||||
|
<description xml:lang="en">
|
||||||
|
GNOME Shell Extensions is a collection of extensions providing
|
||||||
|
additional and optional functionality to GNOME Shell.
|
||||||
|
Most extensions can be installed by configuring --prefix=$HOME/.local,
|
||||||
|
and will be picked automatically at next login.
|
||||||
|
</description>
|
||||||
|
<bug-database rdf:resource="http://bugzilla.gnome.org/browse.cgi?product=gnome-shell&component=extensions" />
|
||||||
<homepage rdf:resource="http://live.gnome.org/GnomeShell/Extenstions" />
|
<homepage rdf:resource="http://live.gnome.org/GnomeShell/Extenstions" />
|
||||||
|
|
||||||
<maintainer>
|
<maintainer>
|
||||||
|
|||||||
+12
@@ -0,0 +1,12 @@
|
|||||||
|
extensionurl = http://git.gnome.org/gnome-shell-extensions
|
||||||
|
|
||||||
|
# Change these to modify how installation is performed
|
||||||
|
topextensiondir = $(datadir)/gnome-shell/extensions
|
||||||
|
extensionbase = @gnome-shell-extensions.gcampax.github.com
|
||||||
|
|
||||||
|
gschemabase = org.gnome.shell.extensions
|
||||||
|
|
||||||
|
uuid = $(EXTENSION_ID)$(extensionbase)
|
||||||
|
gschemaname = $(gschemabase).$(EXTENSION_ID)
|
||||||
|
|
||||||
|
extensiondir = $(topextensiondir)/$(uuid)
|
||||||
@@ -0,0 +1,93 @@
|
|||||||
|
/* -*- mode: js; js-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||||
|
/*
|
||||||
|
Copyright (c) 2011-2012, Giovanni Campagna <scampa.giovanni@gmail.com>
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
* Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
* Neither the name of the GNOME nor the
|
||||||
|
names of its contributors may be used to endorse or promote products
|
||||||
|
derived from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
|
||||||
|
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
const Gettext = imports.gettext;
|
||||||
|
const Gio = imports.gi.Gio;
|
||||||
|
|
||||||
|
const Config = imports.misc.config;
|
||||||
|
const ExtensionUtils = imports.misc.extensionUtils;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* initTranslations:
|
||||||
|
* @domain: (optional): the gettext domain to use
|
||||||
|
*
|
||||||
|
* Initialize Gettext to load translations from extensionsdir/locale.
|
||||||
|
* If @domain is not provided, it will be taken from metadata['gettext-domain']
|
||||||
|
*/
|
||||||
|
function initTranslations(domain) {
|
||||||
|
let extension = ExtensionUtils.getCurrentExtension();
|
||||||
|
|
||||||
|
domain = domain || extension.metadata['gettext-domain'];
|
||||||
|
|
||||||
|
// check if this extension was built with "make zip-file", and thus
|
||||||
|
// has the locale files in a subfolder
|
||||||
|
// otherwise assume that extension has been installed in the
|
||||||
|
// same prefix as gnome-shell
|
||||||
|
let localeDir = extension.dir.get_child('locale');
|
||||||
|
if (localeDir.query_exists(null))
|
||||||
|
Gettext.bindtextdomain(domain, localeDir.get_path());
|
||||||
|
else
|
||||||
|
Gettext.bindtextdomain(domain, Config.LOCALEDIR);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* getSettings:
|
||||||
|
* @schema: (optional): the GSettings schema id
|
||||||
|
*
|
||||||
|
* Builds and return a GSettings schema for @schema, using schema files
|
||||||
|
* in extensionsdir/schemas. If @schema is not provided, it is taken from
|
||||||
|
* metadata['settings-schema'].
|
||||||
|
*/
|
||||||
|
function getSettings(schema) {
|
||||||
|
let extension = ExtensionUtils.getCurrentExtension();
|
||||||
|
|
||||||
|
schema = schema || extension.metadata['settings-schema'];
|
||||||
|
|
||||||
|
const GioSSS = Gio.SettingsSchemaSource;
|
||||||
|
|
||||||
|
// check if this extension was built with "make zip-file", and thus
|
||||||
|
// has the schema files in a subfolder
|
||||||
|
// otherwise assume that extension has been installed in the
|
||||||
|
// same prefix as gnome-shell (and therefore schemas are available
|
||||||
|
// in the standard folders)
|
||||||
|
let schemaDir = extension.dir.get_child('schemas');
|
||||||
|
let schemaSource;
|
||||||
|
if (schemaDir.query_exists(null))
|
||||||
|
schemaSource = GioSSS.new_from_directory(schemaDir.get_path(),
|
||||||
|
GioSSS.get_default(),
|
||||||
|
false);
|
||||||
|
else
|
||||||
|
schemaSource = GioSSS.get_default();
|
||||||
|
|
||||||
|
let schemaObj = schemaSource.lookup(schema, true);
|
||||||
|
if (!schemaObj)
|
||||||
|
throw new Error('Schema ' + schema + ' could not be found for extension '
|
||||||
|
+ extension.metadata.uuid + '. Please check your installation.');
|
||||||
|
|
||||||
|
return new Gio.Settings({ settings_schema: schemaObj });
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
intltool.m4
|
||||||
+39
@@ -0,0 +1,39 @@
|
|||||||
|
ar
|
||||||
|
ca
|
||||||
|
cs
|
||||||
|
da
|
||||||
|
de
|
||||||
|
el
|
||||||
|
en_GB
|
||||||
|
eo
|
||||||
|
es
|
||||||
|
eu
|
||||||
|
fa
|
||||||
|
fi
|
||||||
|
fr
|
||||||
|
gl
|
||||||
|
he
|
||||||
|
hu
|
||||||
|
id
|
||||||
|
it
|
||||||
|
ja
|
||||||
|
ko
|
||||||
|
lv
|
||||||
|
lt
|
||||||
|
nb
|
||||||
|
pa
|
||||||
|
pt
|
||||||
|
pt_BR
|
||||||
|
pl
|
||||||
|
ru
|
||||||
|
sk
|
||||||
|
sl
|
||||||
|
sr
|
||||||
|
sr@latin
|
||||||
|
sv
|
||||||
|
te
|
||||||
|
vi
|
||||||
|
uk
|
||||||
|
zh_CN
|
||||||
|
zh_HK
|
||||||
|
zh_TW
|
||||||
+22
-1
@@ -1,4 +1,25 @@
|
|||||||
|
data/gnome-classic.desktop.in
|
||||||
|
data/gnome-classic.session.desktop.in.in
|
||||||
|
data/gnome-shell-classic.desktop.in.in
|
||||||
|
extensions/alternate-tab/prefs.js
|
||||||
|
extensions/alternative-status-menu/extension.js
|
||||||
|
extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in
|
||||||
|
extensions/apps-menu/extension.js
|
||||||
|
extensions/auto-move-windows/extension.js
|
||||||
|
extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in
|
||||||
|
extensions/auto-move-windows/prefs.js
|
||||||
|
extensions/drive-menu/extension.js
|
||||||
extensions/example/extension.js
|
extensions/example/extension.js
|
||||||
|
extensions/example/org.gnome.shell.extensions.example.gschema.xml.in
|
||||||
|
extensions/example/prefs.js
|
||||||
|
extensions/native-window-placement/extension.js
|
||||||
|
extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in
|
||||||
|
extensions/places-menu/extension.js
|
||||||
|
extensions/places-menu/placeDisplay.js
|
||||||
|
extensions/systemMonitor/extension.js
|
||||||
|
extensions/user-theme/extension.js
|
||||||
|
extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in
|
||||||
extensions/windowsNavigator/extension.js
|
extensions/windowsNavigator/extension.js
|
||||||
|
extensions/workspace-indicator/extension.js
|
||||||
|
extensions/workspace-indicator/prefs.js
|
||||||
extensions/xrandr-indicator/extension.js
|
extensions/xrandr-indicator/extension.js
|
||||||
extensions/alternate-tab/extension.js
|
|
||||||
|
|||||||
@@ -0,0 +1,332 @@
|
|||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
# Khaled Hosny <khaledhosny@eglug.org>, 2012.
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2012-11-21 16:58+0200\n"
|
||||||
|
"PO-Revision-Date: 2012-11-21 17:00+0200\n"
|
||||||
|
"Last-Translator: Khaled Hosny <khaledhosny@eglug.org>\n"
|
||||||
|
"Language-Team: Arabic <doc@arabeyes.org>\n"
|
||||||
|
"Language: ar\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
|
||||||
|
"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
|
||||||
|
"X-Generator: Virtaal 0.7.0\n"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:1
|
||||||
|
msgid "The application icon mode."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:2
|
||||||
|
msgid ""
|
||||||
|
"Configures how the windows are shown in the switcher. Valid possibilities "
|
||||||
|
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
|
||||||
|
"only' (shows only the application icon) or 'both'."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:26
|
||||||
|
msgid "Thumbnail only"
|
||||||
|
msgstr "مصغّرة فقط"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:27
|
||||||
|
msgid "Application icon only"
|
||||||
|
msgstr "أيقونة التطبيق فقط"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:28
|
||||||
|
msgid "Thumbnail and application icon"
|
||||||
|
msgstr "مصغّرة وأيقونة التطبيق"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:43
|
||||||
|
msgid "Present windows as"
|
||||||
|
msgstr "كيفية عرض التطبيقات"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:68
|
||||||
|
msgid "Show only windows in the current workspace"
|
||||||
|
msgstr "أظهر نوافذ مساحات العمل الحالية فقط"
|
||||||
|
|
||||||
|
#. add the new entries
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:144
|
||||||
|
msgid "Suspend"
|
||||||
|
msgstr "علّق"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:147
|
||||||
|
msgid "Hibernate"
|
||||||
|
msgstr "أسبِت"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:150
|
||||||
|
msgid "Power Off"
|
||||||
|
msgstr "أطفئ"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:1
|
||||||
|
msgid "Enable suspending"
|
||||||
|
msgstr "فعّل التعليق"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:2
|
||||||
|
msgid "Control the visibility of the Suspend menu item"
|
||||||
|
msgstr "تحكم في ظهور ”علّق“ في القائمة"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:3
|
||||||
|
msgid "Enable hibernating"
|
||||||
|
msgstr "فعّل الإسبات"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:4
|
||||||
|
msgid "Control the visibility of the Hibernate menu item"
|
||||||
|
msgstr "تحكم في ظهور ”أسبِت“ في القائمة"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1
|
||||||
|
msgid "Application and workspace list"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
|
||||||
|
msgid ""
|
||||||
|
"A list of strings, each containing an application id (desktop file name), "
|
||||||
|
"followed by a colon and the workspace number"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:55
|
||||||
|
msgid "Application"
|
||||||
|
msgstr "التطبيق"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:64
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:106
|
||||||
|
msgid "Workspace"
|
||||||
|
msgstr "مساحة العمل"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:80
|
||||||
|
msgid "Add rule"
|
||||||
|
msgstr "أضِف قاعدة"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:94
|
||||||
|
msgid "Create new matching rule"
|
||||||
|
msgstr "أنشئ قاعدة تطابق"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:98
|
||||||
|
msgid "Add"
|
||||||
|
msgstr "أضِف"
|
||||||
|
|
||||||
|
#: ../extensions/drive-menu/extension.js:72
|
||||||
|
#, c-format
|
||||||
|
msgid "Ejecting drive '%s' failed:"
|
||||||
|
msgstr "فشل إخراج '%s':"
|
||||||
|
|
||||||
|
#: ../extensions/drive-menu/extension.js:89
|
||||||
|
msgid "Removable devices"
|
||||||
|
msgstr "الأجهزة المنفصلة"
|
||||||
|
|
||||||
|
#: ../extensions/drive-menu/extension.js:106
|
||||||
|
msgid "Open File"
|
||||||
|
msgstr "افتح الملف"
|
||||||
|
|
||||||
|
#: ../extensions/example/extension.js:17
|
||||||
|
msgid "Hello, world!"
|
||||||
|
msgstr "أهلا، يا عالم!"
|
||||||
|
|
||||||
|
#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:1
|
||||||
|
msgid "Alternative greeting text."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:2
|
||||||
|
msgid ""
|
||||||
|
"If not empty, it contains the text that will be shown when clicking on the "
|
||||||
|
"panel."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. TRANSLATORS: Example is the name of the extension, should not be
|
||||||
|
#. translated
|
||||||
|
#: ../extensions/example/prefs.js:30
|
||||||
|
msgid ""
|
||||||
|
"Example aims to show how to build well behaved extensions for the Shell and "
|
||||||
|
"as such it has little functionality on its own.\n"
|
||||||
|
"Nevertheless it's possible to customize the greeting message."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/example/prefs.js:36
|
||||||
|
msgid "Message:"
|
||||||
|
msgstr "الرسالة:"
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1
|
||||||
|
msgid "Use more screen for windows"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2
|
||||||
|
msgid ""
|
||||||
|
"Try to use more screen for placing window thumbnails by adapting to screen "
|
||||||
|
"aspect ratio, and consolidating them further to reduce the bounding box. "
|
||||||
|
"This setting applies only with the natural placement strategy."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3
|
||||||
|
msgid "Place window captions on top"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4
|
||||||
|
msgid ""
|
||||||
|
"If true, place window captions on top the respective thumbnail, overriding "
|
||||||
|
"shell default of placing it at the bottom. Changing this setting requires "
|
||||||
|
"restarting the shell to have any effect."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/extension.js:46
|
||||||
|
msgid "Places"
|
||||||
|
msgstr "الأماكن"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/extension.js:47
|
||||||
|
msgid "Devices"
|
||||||
|
msgstr "الأجهزة"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/extension.js:48
|
||||||
|
msgid "Bookmarks"
|
||||||
|
msgstr "العلامات"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/extension.js:49
|
||||||
|
msgid "Network"
|
||||||
|
msgstr "الشبكة"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/placeDisplay.js:48
|
||||||
|
#, c-format
|
||||||
|
msgid "Failed to launch \"%s\""
|
||||||
|
msgstr "فشل تشغيل \"%s\""
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/placeDisplay.js:121
|
||||||
|
msgid "Home"
|
||||||
|
msgstr "المنزل"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/placeDisplay.js:195
|
||||||
|
msgid "File System"
|
||||||
|
msgstr "نظام الملفات"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/placeDisplay.js:199
|
||||||
|
msgid "Browse network"
|
||||||
|
msgstr "تصفّح الشبكة"
|
||||||
|
|
||||||
|
#: ../extensions/systemMonitor/extension.js:213
|
||||||
|
msgid "CPU"
|
||||||
|
msgstr "المعالج"
|
||||||
|
|
||||||
|
#: ../extensions/systemMonitor/extension.js:266
|
||||||
|
msgid "Memory"
|
||||||
|
msgstr "الذاكرة"
|
||||||
|
|
||||||
|
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:1
|
||||||
|
msgid "Theme name"
|
||||||
|
msgstr "اسم السمة"
|
||||||
|
|
||||||
|
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
|
||||||
|
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/workspace-indicator/extension.js:30
|
||||||
|
msgid "Workspace Indicator"
|
||||||
|
msgstr "مؤشر مساحات العمل"
|
||||||
|
|
||||||
|
#: ../extensions/workspace-indicator/prefs.js:141
|
||||||
|
msgid "Workspace names:"
|
||||||
|
msgstr "أسماء مساحات العمل"
|
||||||
|
|
||||||
|
#: ../extensions/workspace-indicator/prefs.js:152
|
||||||
|
msgid "Name"
|
||||||
|
msgstr "الاسم"
|
||||||
|
|
||||||
|
#: ../extensions/workspace-indicator/prefs.js:186
|
||||||
|
#, c-format
|
||||||
|
msgid "Workspace %d"
|
||||||
|
msgstr "مساحة العمل %Id"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:30
|
||||||
|
msgid "Normal"
|
||||||
|
msgstr "عادي"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:31
|
||||||
|
msgid "Left"
|
||||||
|
msgstr "يسار"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:32
|
||||||
|
msgid "Right"
|
||||||
|
msgstr "يمين"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:33
|
||||||
|
msgid "Upside-down"
|
||||||
|
msgstr "رأسا على عقب"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:50
|
||||||
|
msgid "Display"
|
||||||
|
msgstr "العرض"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:80
|
||||||
|
msgid "Display Settings"
|
||||||
|
msgstr "إعدادات العرض"
|
||||||
|
|
||||||
|
#~ msgid "Drag here to add favorites"
|
||||||
|
#~ msgstr "اسحب إلى هنا ليضاف إلى المفضّلة"
|
||||||
|
|
||||||
|
#~ msgid "New Window"
|
||||||
|
#~ msgstr "نافذة جديدة"
|
||||||
|
|
||||||
|
#~ msgid "Quit Application"
|
||||||
|
#~ msgstr "أغلق التطبيق"
|
||||||
|
|
||||||
|
#~ msgid "Remove from Favorites"
|
||||||
|
#~ msgstr "أزِل من المفضّلة"
|
||||||
|
|
||||||
|
#~ msgid "Add to Favorites"
|
||||||
|
#~ msgstr "أضِف إلى المفضّلة"
|
||||||
|
|
||||||
|
#~ msgid "Icon size"
|
||||||
|
#~ msgstr "حجم الأيقونة"
|
||||||
|
|
||||||
|
#~ msgid "Monitor"
|
||||||
|
#~ msgstr "الشاشة"
|
||||||
|
|
||||||
|
#~ msgid "%s is away."
|
||||||
|
#~ msgstr "%s غائب."
|
||||||
|
|
||||||
|
#~ msgid "%s is offline."
|
||||||
|
#~ msgstr "%s غير متّصل."
|
||||||
|
|
||||||
|
#~ msgid "%s is online."
|
||||||
|
#~ msgstr "%s متّصل."
|
||||||
|
|
||||||
|
#~ msgid "%s is busy."
|
||||||
|
#~ msgstr "%s مشغول."
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "This mode presents all applications from all workspaces in one selection "
|
||||||
|
#~ "list. Instead of using the application icon of every window, it uses "
|
||||||
|
#~ "small thumbnails resembling the window itself."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "يعرض هذا النمط كل التطبيقات من كل مساحات العمل في قائمة واحدة، وبدلا من "
|
||||||
|
#~ "استخدام أيقونة التطبيق لكل النوافذ يستخدم صورة مصغّرة للنافذة نفسها."
|
||||||
|
|
||||||
|
#~ msgid "Workspace & Icons"
|
||||||
|
#~ msgstr "مساحة العمل مع أيقونات"
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "This mode let's you switch between the applications of your current "
|
||||||
|
#~ "workspace and gives you additionally the option to switch to the last "
|
||||||
|
#~ "used application of your previous workspace. This is always the last "
|
||||||
|
#~ "symbol in the list and is segregated by a separator/vertical line if "
|
||||||
|
#~ "available. \n"
|
||||||
|
#~ "Every window is represented by its application icon."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "يتيح هذا النمط التنقل بين التطبيقات في مساحة العمل الحالية بالإضافة إلى "
|
||||||
|
#~ "إمكانية الانتقال إلى آخر تطبيق استُخدم في مساحة العمل السابقة، والذي سيكون "
|
||||||
|
#~ "دائما آخر عنصر في القائمة مفصولا بخط رأسي.\n"
|
||||||
|
#~ "تُمثل كل نافذة بأيقونة التطبيق الذي تنتمي إليه."
|
||||||
|
|
||||||
|
#~ msgid "Move current selection to front before closing the popup"
|
||||||
|
#~ msgstr "انقل الاختيار الحالي إلى المقدمة قبل غلق النافذة المنبثقة."
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "The Alternate Tab can be used in different modes, that affect the way "
|
||||||
|
#~ "windows are chosen and presented."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "يمكن استخدام هذا الامتداد في أنماط مختلفة تؤثر على كيفية اختيار وعرض "
|
||||||
|
#~ "النوافذ."
|
||||||
|
|
||||||
|
#~ msgid "Removable Devices"
|
||||||
|
#~ msgstr "الأجهزة المنفصلة"
|
||||||
@@ -0,0 +1,527 @@
|
|||||||
|
# Catalan translation for gnome-shell-extensions.
|
||||||
|
# Copyright (C) 2011 gnome-shell-extensions's COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the gnome-shell-extensions package.
|
||||||
|
# Jordi Mas i Hernandez <jmas@softcatala.org>, 2011.
|
||||||
|
# Gil Forcada <gilforcada@guifi.net>, 2012.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: gnome-shell-extensions\n"
|
||||||
|
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||||
|
"shell&keywords=I18N+L10N&component=extensions\n"
|
||||||
|
"POT-Creation-Date: 2012-09-06 17:51+0000\n"
|
||||||
|
"PO-Revision-Date: 2012-09-29 00:02+0200\n"
|
||||||
|
"Last-Translator: Gil Forcada <gilforcada@guifi.net>\n"
|
||||||
|
"Language-Team: Catalan <tradgnome@softcatala.org>\n"
|
||||||
|
"Language: \n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bits\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:1
|
||||||
|
msgid "The application icon mode."
|
||||||
|
msgstr "El mode d'icona d'aplicació."
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:2
|
||||||
|
msgid ""
|
||||||
|
"Configures how the windows are shown in the switcher. Valid possibilities "
|
||||||
|
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
|
||||||
|
"only' (shows only the application icon) or 'both'."
|
||||||
|
msgstr ""
|
||||||
|
"Configura com es mostren les icones en l'intercanviador. Les possibilitats "
|
||||||
|
"vàlides són «thumbnail-only» (només miniatures, mostra les miniatures de les "
|
||||||
|
"finestres), «app-icon-only» (només icona de l'aplicació, mostra només la "
|
||||||
|
"icona de l'aplicació) o «both» (ambdós, mostra tan la icona de l'aplicació "
|
||||||
|
"com la miniatura). "
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:26
|
||||||
|
msgid "Thumbnail only"
|
||||||
|
msgstr "Només miniatures"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:27
|
||||||
|
msgid "Application icon only"
|
||||||
|
msgstr "Només la icona de l'aplicació"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:28
|
||||||
|
msgid "Thumbnail and application icon"
|
||||||
|
msgstr "Miniatura i icona de l'aplicació"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:43
|
||||||
|
msgid "Present windows as"
|
||||||
|
msgstr "Mostra les finestres com a"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:68
|
||||||
|
msgid "Show only windows in the current workspace"
|
||||||
|
msgstr "Mostra només les icones de l'espai de treball actual"
|
||||||
|
|
||||||
|
#. add the new entries
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:68
|
||||||
|
msgid "Suspend"
|
||||||
|
msgstr "Atura temporalment"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:73
|
||||||
|
msgid "Hibernate"
|
||||||
|
msgstr "Hiberna"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:78
|
||||||
|
msgid "Power Off"
|
||||||
|
msgstr "Apaga"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:1
|
||||||
|
msgid "Enable suspending"
|
||||||
|
msgstr "Habilita l'aturada temporal"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:2
|
||||||
|
msgid "Control the visibility of the Suspend menu item"
|
||||||
|
msgstr "Permet controlar si es mostra l'element de menú «Atura temporalment»"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:3
|
||||||
|
msgid "Enable hibernating"
|
||||||
|
msgstr "Habilita la hibernació"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:4
|
||||||
|
msgid "Control the visibility of the Hibernate menu item"
|
||||||
|
msgstr "Permet controlar si es mostra l'element de menú «Hiberna»"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1
|
||||||
|
msgid "Application and workspace list"
|
||||||
|
msgstr "Aplicació i llista d'espais de treball"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
|
||||||
|
msgid ""
|
||||||
|
"A list of strings, each containing an application id (desktop file name), "
|
||||||
|
"followed by a colon and the workspace number"
|
||||||
|
msgstr ""
|
||||||
|
"Una llista de cadenes, cada una de les quals conté un identificador "
|
||||||
|
"d'aplicació (nom del fitxer de l'escriptori), seguit de dos punts i el "
|
||||||
|
"número de l'espai de treball"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:55
|
||||||
|
msgid "Application"
|
||||||
|
msgstr "Aplicació"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:64
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:106
|
||||||
|
msgid "Workspace"
|
||||||
|
msgstr "Espai de treball"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:80
|
||||||
|
msgid "Add rule"
|
||||||
|
msgstr "Afegeix una regla"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:94
|
||||||
|
msgid "Create new matching rule"
|
||||||
|
msgstr "Crea una regla de coincidència nova"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:98
|
||||||
|
msgid "Add"
|
||||||
|
msgstr "Afegeix"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:600
|
||||||
|
msgid "Drag here to add favorites"
|
||||||
|
msgstr "Arrossegueu aquí per afegir als preferits"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:926
|
||||||
|
msgid "New Window"
|
||||||
|
msgstr "Finestra nova"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:928
|
||||||
|
msgid "Quit Application"
|
||||||
|
msgstr "Surt de l'aplicació"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:933
|
||||||
|
msgid "Remove from Favorites"
|
||||||
|
msgstr "Suprimeix dels preferits"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:934
|
||||||
|
msgid "Add to Favorites"
|
||||||
|
msgstr "Afegeix als preferits"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:1
|
||||||
|
msgid "Position of the dock"
|
||||||
|
msgstr "Posició de l'acoblador"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:2
|
||||||
|
msgid ""
|
||||||
|
"Sets the position of the dock in the screen. Allowed values are 'right' or "
|
||||||
|
"'left'"
|
||||||
|
msgstr ""
|
||||||
|
"Defineix la posició de l'acoblador a la pantalla. Els valors permesos són "
|
||||||
|
"«right» (dreta) o «left» (esquerra)"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:3
|
||||||
|
msgid "Icon size"
|
||||||
|
msgstr "Mida de la icona"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:4
|
||||||
|
msgid "Sets icon size of the dock."
|
||||||
|
msgstr "Defineix la mida de la icona per l'acoblador."
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:5
|
||||||
|
msgid "Enable/disable autohide"
|
||||||
|
msgstr "Habilita/inhabilita l'ocultació automàtica"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:6
|
||||||
|
msgid "Autohide effect"
|
||||||
|
msgstr "Efecte de l'ocultació automàtica"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:7
|
||||||
|
msgid ""
|
||||||
|
"Sets the effect of the hide dock. Allowed values are 'resize', 'rescale' and "
|
||||||
|
"'move'"
|
||||||
|
msgstr ""
|
||||||
|
"Defineix l'efecte de l'acoblador ocult. Els valors permesos són "
|
||||||
|
"«resize» (amplia), «rescale» (escala) i «move» (mou)"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:8
|
||||||
|
msgid "Autohide duration"
|
||||||
|
msgstr "Duració de l'ocultació automàtica"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:9
|
||||||
|
msgid "Sets the time duration of the autohide effect."
|
||||||
|
msgstr "Defineix la durada en temps de l'efecte d'ocultació automàtica."
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:10
|
||||||
|
msgid "Monitor"
|
||||||
|
msgstr "Pantalla"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:11
|
||||||
|
msgid ""
|
||||||
|
"Sets monitor to display dock in. The default value (-1) is the primary "
|
||||||
|
"monitor."
|
||||||
|
msgstr ""
|
||||||
|
"Estableix la pantalla a on es mostra l'acoblador. El valor per defecte és "
|
||||||
|
"«-1», la pantalla principal."
|
||||||
|
|
||||||
|
#: ../extensions/drive-menu/extension.js:56
|
||||||
|
msgid "Removable devices"
|
||||||
|
msgstr "Dispositius extraïbles"
|
||||||
|
|
||||||
|
#: ../extensions/drive-menu/extension.js:67
|
||||||
|
msgid "Open file manager"
|
||||||
|
msgstr "Obre del gestor de fitxers"
|
||||||
|
|
||||||
|
#: ../extensions/example/extension.js:17
|
||||||
|
msgid "Hello, world!"
|
||||||
|
msgstr "Hola, món!"
|
||||||
|
|
||||||
|
#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:1
|
||||||
|
msgid "Alternative greeting text."
|
||||||
|
msgstr "Text de rebuda alternatiu."
|
||||||
|
|
||||||
|
#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:2
|
||||||
|
msgid ""
|
||||||
|
"If not empty, it contains the text that will be shown when clicking on the "
|
||||||
|
"panel."
|
||||||
|
msgstr ""
|
||||||
|
"Si no és buit, conté el text que es mostrarà quan es faci clic en el quadre."
|
||||||
|
|
||||||
|
#. TRANSLATORS: Example is the name of the extension, should not be
|
||||||
|
#. translated
|
||||||
|
#: ../extensions/example/prefs.js:30
|
||||||
|
msgid ""
|
||||||
|
"Example aims to show how to build well behaved extensions for the Shell and "
|
||||||
|
"as such it has little functionality on its own.\n"
|
||||||
|
"Nevertheless it's possible to customize the greeting message."
|
||||||
|
msgstr ""
|
||||||
|
"L'«Example» està pensat com una extensió del GNOME Shell que demostri la "
|
||||||
|
"manera correcta de crear extensions. Com a extensió pròpiament dita no fa "
|
||||||
|
"gairebé res.\n"
|
||||||
|
"Tot i així permet personalitzar el missatge del rebedor."
|
||||||
|
|
||||||
|
#: ../extensions/example/prefs.js:36
|
||||||
|
msgid "Message:"
|
||||||
|
msgstr "Missatge:"
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:226
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is away."
|
||||||
|
msgstr "%s està absent."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:229
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is offline."
|
||||||
|
msgstr "%s està fora de línia."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:232
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is online."
|
||||||
|
msgstr "%s està en línia."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:235
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is busy."
|
||||||
|
msgstr "%s està ocupat."
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1
|
||||||
|
msgid "Use more screen for windows"
|
||||||
|
msgstr "Utilitza més pantalla per les finestres"
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2
|
||||||
|
msgid ""
|
||||||
|
"Try to use more screen for placing window thumbnails by adapting to screen "
|
||||||
|
"aspect ratio, and consolidating them further to reduce the bounding box. "
|
||||||
|
"This setting applies only with the natural placement strategy."
|
||||||
|
msgstr ""
|
||||||
|
"Intenta utilitzar més espai de la pantalla per posicionar les miniatures de "
|
||||||
|
"les finestres adaptant-les al ràtio d'aspecte de la pantalla, consolidant-"
|
||||||
|
"les més per reduir la capsa que les envolta. Aquest paràmetre de "
|
||||||
|
"configuració només s'aplica a l'estratègia de posicionament de finestres "
|
||||||
|
"natural."
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3
|
||||||
|
msgid "Place window captions on top"
|
||||||
|
msgstr "Posiciona els títols de les finestres al damunt"
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4
|
||||||
|
msgid ""
|
||||||
|
"If true, place window captions on top the respective thumbnail, overriding "
|
||||||
|
"shell default of placing it at the bottom. Changing this setting requires "
|
||||||
|
"restarting the shell to have any effect."
|
||||||
|
msgstr ""
|
||||||
|
"Si és «true» (cert), posiciona el títol de la finestra damunt de la "
|
||||||
|
"miniatura corresponent, substituint el comportament per defecte del Shell de "
|
||||||
|
"posicionar-lo a baix. Cal reiniciar el Shell per tal de que aquest canvi "
|
||||||
|
"tingui efecte."
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/extension.js:46
|
||||||
|
msgid "Places"
|
||||||
|
msgstr "Llocs"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/extension.js:47
|
||||||
|
msgid "Devices"
|
||||||
|
msgstr "Dispositius"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/extension.js:48
|
||||||
|
msgid "Bookmarks"
|
||||||
|
msgstr "Adreces d'interès"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/extension.js:49
|
||||||
|
msgid "Network"
|
||||||
|
msgstr "Xarxa"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/placeDisplay.js:48
|
||||||
|
#, c-format
|
||||||
|
msgid "Failed to launch \"%s\""
|
||||||
|
msgstr "No s'ha pogut iniciar «%s»"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/placeDisplay.js:121
|
||||||
|
msgid "Home"
|
||||||
|
msgstr "Inici"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/placeDisplay.js:184
|
||||||
|
msgid "File System"
|
||||||
|
msgstr "Sistema de fitxers"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/placeDisplay.js:188
|
||||||
|
msgid "Browse network"
|
||||||
|
msgstr "Navega per la xarxa"
|
||||||
|
|
||||||
|
#: ../extensions/systemMonitor/extension.js:213
|
||||||
|
msgid "CPU"
|
||||||
|
msgstr "CPU"
|
||||||
|
|
||||||
|
#: ../extensions/systemMonitor/extension.js:266
|
||||||
|
msgid "Memory"
|
||||||
|
msgstr "Memòria"
|
||||||
|
|
||||||
|
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:1
|
||||||
|
msgid "Theme name"
|
||||||
|
msgstr "Nom del tema"
|
||||||
|
|
||||||
|
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
|
||||||
|
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
|
||||||
|
msgstr "El nom del tema que es carregarà des de ~/.themes/name/gnome-shell"
|
||||||
|
|
||||||
|
#: ../extensions/workspace-indicator/extension.js:30
|
||||||
|
msgid "Workspace Indicator"
|
||||||
|
msgstr "Indicador de l'espai de treball"
|
||||||
|
|
||||||
|
#: ../extensions/workspace-indicator/prefs.js:141
|
||||||
|
msgid "Workspace names:"
|
||||||
|
msgstr "Noms dels espais de treball:"
|
||||||
|
|
||||||
|
#: ../extensions/workspace-indicator/prefs.js:152
|
||||||
|
msgid "Name"
|
||||||
|
msgstr "Nom"
|
||||||
|
|
||||||
|
#: ../extensions/workspace-indicator/prefs.js:186
|
||||||
|
#, c-format
|
||||||
|
msgid "Workspace %d"
|
||||||
|
msgstr "Espai de treball %d"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:30
|
||||||
|
msgid "Normal"
|
||||||
|
msgstr "Normal"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:31
|
||||||
|
msgid "Left"
|
||||||
|
msgstr "Esquerra"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:32
|
||||||
|
msgid "Right"
|
||||||
|
msgstr "Dreta"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:33
|
||||||
|
msgid "Upside-down"
|
||||||
|
msgstr "Capgira"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:50
|
||||||
|
msgid "Display"
|
||||||
|
msgstr "Pantalla"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:80
|
||||||
|
msgid "Display Settings"
|
||||||
|
msgstr "Paràmetres de la pantalla"
|
||||||
|
|
||||||
|
#~ msgid "The alt tab behaviour."
|
||||||
|
#~ msgstr "Comportament de l'«Alternate Tab»."
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "Sets the Alt-Tab behaviour. Possible values are: all_thumbnails and "
|
||||||
|
#~ "workspace_icons. See the configuration dialogs for details."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Defineix el comportament de l'«Alternate Tab». Els valors possibles són: "
|
||||||
|
#~ "«all_thumbnails» (totes i les miniatures) i «workspace_icons» (espais de "
|
||||||
|
#~ "treball i icones). Vegeu els diàlegs de configuració per saber-ne més."
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "This mode presents all applications from all workspaces in one selection "
|
||||||
|
#~ "list. Instead of using the application icon of every window, it uses "
|
||||||
|
#~ "small thumbnails resembling the window itself."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Aquest mode mostra totes les aplicacions de tots els espais de treball en "
|
||||||
|
#~ "una sola llista de selecció. En comptes de fer servir la icona de "
|
||||||
|
#~ "l'aplicació per cada finestra, fa servir miniatures de les mateixes "
|
||||||
|
#~ "finestres de les aplicacions."
|
||||||
|
|
||||||
|
#~ msgid "Workspace & Icons"
|
||||||
|
#~ msgstr "Espai de treball i icones"
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "This mode let's you switch between the applications of your current "
|
||||||
|
#~ "workspace and gives you additionally the option to switch to the last "
|
||||||
|
#~ "used application of your previous workspace. This is always the last "
|
||||||
|
#~ "symbol in the list and is segregated by a separator/vertical line if "
|
||||||
|
#~ "available. \n"
|
||||||
|
#~ "Every window is represented by its application icon."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Aquest mode us permet canviar entre les aplicacions de l'espai de treball "
|
||||||
|
#~ "actual i us dóna la possibilitat de canviar a l'última aplicació "
|
||||||
|
#~ "utilitzada de l'espai de treball anterior. Es mostra, en cas d'estar "
|
||||||
|
#~ "disponible, sempre com a l'última icona de la llista, separada de la "
|
||||||
|
#~ "resta amb un separador vertical.\n"
|
||||||
|
#~ "Cada finestra està representada per la seva icona d'aplicació."
|
||||||
|
|
||||||
|
#~ msgid "Move current selection to front before closing the popup"
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Mou la selecció actual al primer pla abans de tancar el diàleg emergent"
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "The Alternate Tab can be used in different modes, that affect the way "
|
||||||
|
#~ "windows are chosen and presented."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "L'«Alternate Tab» es pot utilitzar de diferents maneres que canvien la "
|
||||||
|
#~ "forma en que es seleccionen i es mostren les finestres."
|
||||||
|
|
||||||
|
#~ msgid "Removable Devices"
|
||||||
|
#~ msgstr "Dispositius extraïbles"
|
||||||
|
|
||||||
|
#~ msgid "Configure display settings..."
|
||||||
|
#~ msgstr "Configura els paràmetres de visualització..."
|
||||||
|
|
||||||
|
#~ msgid "Available"
|
||||||
|
#~ msgstr "Disponible"
|
||||||
|
|
||||||
|
#~ msgid "Busy"
|
||||||
|
#~ msgstr "Ocupat"
|
||||||
|
|
||||||
|
#~ msgid "My Account"
|
||||||
|
#~ msgstr "El meu compte"
|
||||||
|
|
||||||
|
#~ msgid "Lock Screen"
|
||||||
|
#~ msgstr "Bloca la pantalla"
|
||||||
|
|
||||||
|
#~ msgid "Switch User"
|
||||||
|
#~ msgstr "Canvia d'usuari"
|
||||||
|
|
||||||
|
#~ msgid "Log Out..."
|
||||||
|
#~ msgstr "Surt..."
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "This is the first time you use the Alternate Tab extension. \n"
|
||||||
|
#~ "Please choose your preferred behaviour:\n"
|
||||||
|
#~ "\n"
|
||||||
|
#~ "All & Thumbnails:\n"
|
||||||
|
#~ " This mode presents all applications from all workspaces in one "
|
||||||
|
#~ "selection \n"
|
||||||
|
#~ " list. Instead of using the application icon of every window, it uses "
|
||||||
|
#~ "small \n"
|
||||||
|
#~ " thumbnails resembling the window itself. \n"
|
||||||
|
#~ "\n"
|
||||||
|
#~ "Workspace & Icons:\n"
|
||||||
|
#~ " This mode let's you switch between the applications of your current \n"
|
||||||
|
#~ " workspace and gives you additionally the option to switch to the last "
|
||||||
|
#~ "used \n"
|
||||||
|
#~ " application of your previous workspace. This is always the last "
|
||||||
|
#~ "symbol in \n"
|
||||||
|
#~ " the list and is segregated by a separator/vertical line if "
|
||||||
|
#~ "available. \n"
|
||||||
|
#~ " Every window is represented by its application icon. \n"
|
||||||
|
#~ "\n"
|
||||||
|
#~ "Native:\n"
|
||||||
|
#~ " This mode is the native GNOME 3 behaviour or in other words: "
|
||||||
|
#~ "Clicking \n"
|
||||||
|
#~ " native switches the Alternate Tab extension off. \n"
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Aquest és el primer cop que utilitzeu l'extensió «Alternate Tab». \n"
|
||||||
|
#~ "Trieu el comportament que preferiu:\n"
|
||||||
|
#~ "\n"
|
||||||
|
#~ "Totes i miniatures:\n"
|
||||||
|
#~ " Aquest mode presenta totes les aplicacions de tots els espais de "
|
||||||
|
#~ "treball com a\n"
|
||||||
|
#~ " una llista de selecció. En comptes de mostrar la icona d'aplicació de "
|
||||||
|
#~ "cada finestra, mostra les \n"
|
||||||
|
#~ " miniatures que representen el contingut de la finestra. \n"
|
||||||
|
#~ "\n"
|
||||||
|
#~ "Espai de treball i icones:\n"
|
||||||
|
#~ " Aquest mode us permet canviar entre aplicacions de l'espai de treball "
|
||||||
|
#~ "actual \n"
|
||||||
|
#~ " i us dóna la possibilitat de canviar a l'última aplicació usada de "
|
||||||
|
#~ "l'espai de \n"
|
||||||
|
#~ " treball anterior. Aquest és sempre el darrer símbol a la llista i "
|
||||||
|
#~ "està separat \n"
|
||||||
|
#~ " per una línia vertical/separador quan està disponible. \n"
|
||||||
|
#~ " Cada finestra es representa per la seva icona d'aplicació. \n"
|
||||||
|
#~ "\n"
|
||||||
|
#~ "Nadiu:\n"
|
||||||
|
#~ " Aquest és el mode de comportament nadiu al GNOME 3 o amb altres "
|
||||||
|
#~ "paraules: fent \n"
|
||||||
|
#~ " clic inhabilita l'extensió «Alternate Tab». \n"
|
||||||
|
|
||||||
|
#~ msgid "Alt Tab Behaviour"
|
||||||
|
#~ msgstr "Comportament de l'«Alternate Tab»"
|
||||||
|
|
||||||
|
#~ msgid "Cancel"
|
||||||
|
#~ msgstr "Cancel·la"
|
||||||
|
|
||||||
|
#~ msgid "Ask the user for a default behaviour if true."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Si és «true» (cert) pregunta a l'usuari pel comportament per defecte."
|
||||||
|
|
||||||
|
#~ msgid "Indicates if Alternate Tab is newly installed"
|
||||||
|
#~ msgstr "Indica si s'acaba d'instal·lar l'«Alternate Tab»"
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "The algorithm used to layout thumbnails in the overview. 'grid' to use "
|
||||||
|
#~ "the default grid based algorithm, 'natural' to use another one that "
|
||||||
|
#~ "reflects more the position and size of the actual window"
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "L'algoritme per posicionar les miniatures en la perspectiva general. Useu "
|
||||||
|
#~ "«grid» (graella) per a utilitzar l'algoritme per defecte basat en "
|
||||||
|
#~ "disposició en graella, o «natural» (natural) per a usar un algoritme que "
|
||||||
|
#~ "reflexa millor la posició i mida de la finestra actual."
|
||||||
|
|
||||||
|
#~ msgid "Window placement strategy"
|
||||||
|
#~ msgstr "Estratègia de posicionament de la finestra"
|
||||||
@@ -0,0 +1,374 @@
|
|||||||
|
# Czech translation for gnome-shell-extensions.
|
||||||
|
# Copyright (C) 2011 gnome-shell-extensions's COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the gnome-shell-extensions package.
|
||||||
|
#
|
||||||
|
# Marek Černocký <marek@manet.cz>, 2011, 2012.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: gnome-shell-extensions master\n"
|
||||||
|
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||||
|
"shell&keywords=I18N+L10N&component=extensions\n"
|
||||||
|
"POT-Creation-Date: 2012-10-08 17:42+0000\n"
|
||||||
|
"PO-Revision-Date: 2012-10-08 22:39+0200\n"
|
||||||
|
"Last-Translator: Marek Černocký <marek@manet.cz>\n"
|
||||||
|
"Language-Team: Czech <gnome-cs-list@gnome.org>\n"
|
||||||
|
"Language: cs\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:1
|
||||||
|
msgid "The application icon mode."
|
||||||
|
msgstr "Režim ikony aplikace."
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:2
|
||||||
|
msgid ""
|
||||||
|
"Configures how the windows are shown in the switcher. Valid possibilities "
|
||||||
|
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
|
||||||
|
"only' (shows only the application icon) or 'both'."
|
||||||
|
msgstr ""
|
||||||
|
"Nastavuje, jak jsou okna zobrazována v přepínači. Platné možnosti jsou "
|
||||||
|
"„thumbnail-only“ (zobrazuje náhled okna), „app-icon-only“ (zobrazuje pouze "
|
||||||
|
"ikonu aplikace) nebo „both“ (zobrazuje obojí)."
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:26
|
||||||
|
msgid "Thumbnail only"
|
||||||
|
msgstr "Pouze náhled"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:27
|
||||||
|
msgid "Application icon only"
|
||||||
|
msgstr "Pouze ikona aplikace"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:28
|
||||||
|
msgid "Thumbnail and application icon"
|
||||||
|
msgstr "Náhled a ikona aplikace"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:43
|
||||||
|
msgid "Present windows as"
|
||||||
|
msgstr "Představovat okna jako"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:68
|
||||||
|
msgid "Show only windows in the current workspace"
|
||||||
|
msgstr "Zobrazovat pouze okna z aktuální pracovní plochy"
|
||||||
|
|
||||||
|
#. add the new entries
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:86
|
||||||
|
msgid "Suspend"
|
||||||
|
msgstr "Uspat do paměti"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:91
|
||||||
|
msgid "Hibernate"
|
||||||
|
msgstr "Uspat na disk"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:96
|
||||||
|
msgid "Power Off"
|
||||||
|
msgstr "Vypnout"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:1
|
||||||
|
msgid "Enable suspending"
|
||||||
|
msgstr "Povolit uspávání do paměti"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:2
|
||||||
|
msgid "Control the visibility of the Suspend menu item"
|
||||||
|
msgstr "Řídí viditelnost položky „Uspat do paměti“ v nabídce"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:3
|
||||||
|
msgid "Enable hibernating"
|
||||||
|
msgstr "Povolit uspávání na disk"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:4
|
||||||
|
msgid "Control the visibility of the Hibernate menu item"
|
||||||
|
msgstr "Řídí viditelnost položky „Uspat na disk“ v nabídce"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1
|
||||||
|
msgid "Application and workspace list"
|
||||||
|
msgstr "Seznam aplikací a pracovních ploch"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
|
||||||
|
msgid ""
|
||||||
|
"A list of strings, each containing an application id (desktop file name), "
|
||||||
|
"followed by a colon and the workspace number"
|
||||||
|
msgstr ""
|
||||||
|
"Seznam řetězců, z nichž každý obsahuje ID aplikace (název souboru pracovní "
|
||||||
|
"plochy), následovaný dvojtečkou a číslem pracovní plochy"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:55
|
||||||
|
msgid "Application"
|
||||||
|
msgstr "Aplikace"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:64
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:106
|
||||||
|
msgid "Workspace"
|
||||||
|
msgstr "Pracovní plocha"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:80
|
||||||
|
msgid "Add rule"
|
||||||
|
msgstr "Přidat pravidlo"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:94
|
||||||
|
msgid "Create new matching rule"
|
||||||
|
msgstr "Vytvoření nového srovnávacího pravidla"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:98
|
||||||
|
msgid "Add"
|
||||||
|
msgstr "Přidat"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:600
|
||||||
|
msgid "Drag here to add favorites"
|
||||||
|
msgstr "Přetažením sem přidáte do oblíbených"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:926
|
||||||
|
msgid "New Window"
|
||||||
|
msgstr "Nové okno"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:928
|
||||||
|
msgid "Quit Application"
|
||||||
|
msgstr "Ukončit aplikaci"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:933
|
||||||
|
msgid "Remove from Favorites"
|
||||||
|
msgstr "Odebrat z oblíbených"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:934
|
||||||
|
msgid "Add to Favorites"
|
||||||
|
msgstr "Přidat do oblíbených"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:1
|
||||||
|
msgid "Position of the dock"
|
||||||
|
msgstr "Poloha doku"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:2
|
||||||
|
msgid ""
|
||||||
|
"Sets the position of the dock in the screen. Allowed values are 'right' or "
|
||||||
|
"'left'"
|
||||||
|
msgstr ""
|
||||||
|
"Nastavuje polohu doku na obrazovce. Povolené hodnoty jsou „right“ (vpravo) "
|
||||||
|
"nebo „left“ (vlevo)."
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:3
|
||||||
|
msgid "Icon size"
|
||||||
|
msgstr "Velikost ikony"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:4
|
||||||
|
msgid "Sets icon size of the dock."
|
||||||
|
msgstr "Nastavuje velikost ikon v doku."
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:5
|
||||||
|
msgid "Enable/disable autohide"
|
||||||
|
msgstr "Zapnout/vypnout automatické skrývání"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:6
|
||||||
|
msgid "Autohide effect"
|
||||||
|
msgstr "Efekt automatického skrývání"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:7
|
||||||
|
msgid ""
|
||||||
|
"Sets the effect of the hide dock. Allowed values are 'resize', 'rescale' and "
|
||||||
|
"'move'"
|
||||||
|
msgstr ""
|
||||||
|
"Nastavuje efekt skrývání doku. Povolené hodnoty jsou „resize“ (změna "
|
||||||
|
"velikosti), „rescale“ (změna měřítka) a „move“ (přesun)."
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:8
|
||||||
|
msgid "Autohide duration"
|
||||||
|
msgstr "Čas automatického skrývání"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:9
|
||||||
|
msgid "Sets the time duration of the autohide effect."
|
||||||
|
msgstr "Nastavuje čas trvání efektu automatického skrývání."
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:10
|
||||||
|
msgid "Monitor"
|
||||||
|
msgstr "Monitor"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:11
|
||||||
|
msgid ""
|
||||||
|
"Sets monitor to display dock in. The default value (-1) is the primary "
|
||||||
|
"monitor."
|
||||||
|
msgstr ""
|
||||||
|
"Nastavuje monitor, na kterém se má zobrazovat dok. Výchozí hodnotou (-1) je "
|
||||||
|
"hlavní monitor."
|
||||||
|
|
||||||
|
#: ../extensions/drive-menu/extension.js:72
|
||||||
|
#, c-format
|
||||||
|
msgid "Ejecting drive '%s' failed:"
|
||||||
|
msgstr "Vysunutí disku „%s“ selhalo:"
|
||||||
|
|
||||||
|
#: ../extensions/drive-menu/extension.js:89
|
||||||
|
msgid "Removable devices"
|
||||||
|
msgstr "Výměnná zařízení"
|
||||||
|
|
||||||
|
#: ../extensions/drive-menu/extension.js:106
|
||||||
|
msgid "Open File"
|
||||||
|
msgstr "Otevřít soubor"
|
||||||
|
|
||||||
|
#: ../extensions/example/extension.js:17
|
||||||
|
msgid "Hello, world!"
|
||||||
|
msgstr "Ahoj světe!"
|
||||||
|
|
||||||
|
#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:1
|
||||||
|
msgid "Alternative greeting text."
|
||||||
|
msgstr "Alternativní uvítací text"
|
||||||
|
|
||||||
|
#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:2
|
||||||
|
msgid ""
|
||||||
|
"If not empty, it contains the text that will be shown when clicking on the "
|
||||||
|
"panel."
|
||||||
|
msgstr ""
|
||||||
|
"Pokud není prázdné, obsahuje text, který se objeví po kliknutí na panel."
|
||||||
|
|
||||||
|
#. TRANSLATORS: Example is the name of the extension, should not be
|
||||||
|
#. translated
|
||||||
|
#: ../extensions/example/prefs.js:30
|
||||||
|
msgid ""
|
||||||
|
"Example aims to show how to build well behaved extensions for the Shell and "
|
||||||
|
"as such it has little functionality on its own.\n"
|
||||||
|
"Nevertheless it's possible to customize the greeting message."
|
||||||
|
msgstr ""
|
||||||
|
"Rozšíření Example vám má jen ukázat, jak sestavit dobře fungující rozšíření "
|
||||||
|
"pro Shell, a tak je jeho praktické využití pramalé.\n"
|
||||||
|
"Přesto si můžete alespoň upravit uvítací zprávu."
|
||||||
|
|
||||||
|
#: ../extensions/example/prefs.js:36
|
||||||
|
msgid "Message:"
|
||||||
|
msgstr "Zpráva:"
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:226
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is away."
|
||||||
|
msgstr "%s je pryč."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:229
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is offline."
|
||||||
|
msgstr "%s je odpojen."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:232
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is online."
|
||||||
|
msgstr "%s je připojen."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:235
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is busy."
|
||||||
|
msgstr "%s je zaneprázdněn."
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1
|
||||||
|
msgid "Use more screen for windows"
|
||||||
|
msgstr "Použít větší část obrazovky pro okna"
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2
|
||||||
|
msgid ""
|
||||||
|
"Try to use more screen for placing window thumbnails by adapting to screen "
|
||||||
|
"aspect ratio, and consolidating them further to reduce the bounding box. "
|
||||||
|
"This setting applies only with the natural placement strategy."
|
||||||
|
msgstr ""
|
||||||
|
"Pomocí přizpůsobení měřítka obrazovky spolu se zmenšením ohraničení zkusit "
|
||||||
|
"využít větší část obrazovky pro umístění náhledů oken. Toto nastavení se "
|
||||||
|
"použije pouze dohromady se strategií umisťování „natural“."
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3
|
||||||
|
msgid "Place window captions on top"
|
||||||
|
msgstr "Umístit název okna nahoru"
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4
|
||||||
|
msgid ""
|
||||||
|
"If true, place window captions on top the respective thumbnail, overriding "
|
||||||
|
"shell default of placing it at the bottom. Changing this setting requires "
|
||||||
|
"restarting the shell to have any effect."
|
||||||
|
msgstr ""
|
||||||
|
"Pokud je zapnuto, umisťuje se název okna nad případný náhled, čímž se "
|
||||||
|
"přepíše výchozí chování shellu, který jej umisťuje dolů. Změna tohoto "
|
||||||
|
"nastavení vyžaduje restart shellu, aby se projevila."
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/extension.js:46
|
||||||
|
msgid "Places"
|
||||||
|
msgstr "Místa"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/extension.js:47
|
||||||
|
msgid "Devices"
|
||||||
|
msgstr "Zařízení"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/extension.js:48
|
||||||
|
msgid "Bookmarks"
|
||||||
|
msgstr "Záložky"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/extension.js:49
|
||||||
|
msgid "Network"
|
||||||
|
msgstr "Síť"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/placeDisplay.js:48
|
||||||
|
#, c-format
|
||||||
|
msgid "Failed to launch \"%s\""
|
||||||
|
msgstr "Selhalo spuštění „%s“"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/placeDisplay.js:121
|
||||||
|
msgid "Home"
|
||||||
|
msgstr "Domů"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/placeDisplay.js:184
|
||||||
|
msgid "File System"
|
||||||
|
msgstr "Systém souborů"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/placeDisplay.js:188
|
||||||
|
msgid "Browse network"
|
||||||
|
msgstr "Procházet síť"
|
||||||
|
|
||||||
|
#: ../extensions/systemMonitor/extension.js:213
|
||||||
|
msgid "CPU"
|
||||||
|
msgstr "Procesor"
|
||||||
|
|
||||||
|
#: ../extensions/systemMonitor/extension.js:266
|
||||||
|
msgid "Memory"
|
||||||
|
msgstr "Paměť"
|
||||||
|
|
||||||
|
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:1
|
||||||
|
msgid "Theme name"
|
||||||
|
msgstr "Název motivu"
|
||||||
|
|
||||||
|
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
|
||||||
|
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
|
||||||
|
msgstr "Název motivu, který se má načíst z ~/.themes/name/gnome-shell"
|
||||||
|
|
||||||
|
#: ../extensions/workspace-indicator/extension.js:30
|
||||||
|
msgid "Workspace Indicator"
|
||||||
|
msgstr "Ukazatel pracovní plochy"
|
||||||
|
|
||||||
|
#: ../extensions/workspace-indicator/prefs.js:141
|
||||||
|
msgid "Workspace names:"
|
||||||
|
msgstr "Názvy pracovních ploch"
|
||||||
|
|
||||||
|
#: ../extensions/workspace-indicator/prefs.js:152
|
||||||
|
msgid "Name"
|
||||||
|
msgstr "Název"
|
||||||
|
|
||||||
|
#: ../extensions/workspace-indicator/prefs.js:186
|
||||||
|
#, c-format
|
||||||
|
msgid "Workspace %d"
|
||||||
|
msgstr "Pracovní plocha %d"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:30
|
||||||
|
msgid "Normal"
|
||||||
|
msgstr "Normální"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:31
|
||||||
|
msgid "Left"
|
||||||
|
msgstr "Doleva"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:32
|
||||||
|
msgid "Right"
|
||||||
|
msgstr "Doprava"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:33
|
||||||
|
msgid "Upside-down"
|
||||||
|
msgstr "Vzhůru nohama"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:50
|
||||||
|
msgid "Display"
|
||||||
|
msgstr "Obrazovka"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:80
|
||||||
|
msgid "Display Settings"
|
||||||
|
msgstr "Nastavení obrazovky"
|
||||||
@@ -0,0 +1,290 @@
|
|||||||
|
# Danish translation for gnome-shell-extensions.
|
||||||
|
# Copyright (C) 2011 gnome-shell-extensions's COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the gnome-shell-extensions package.
|
||||||
|
#
|
||||||
|
# Kris Thomsen <lakristho@gmail.com>, 2011.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: gnome-shell-extensions master\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2012-01-02 12:35+0100\n"
|
||||||
|
"PO-Revision-Date: 2011-12-27 00:32+0000\n"
|
||||||
|
"Last-Translator: Kris Thomsen <lakristho@gmail.com>\n"
|
||||||
|
"Language-Team: Danish <dansk@dansk-gruppen.dk>\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"
|
||||||
|
|
||||||
|
#. add the new entries
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:68
|
||||||
|
msgid "Suspend"
|
||||||
|
msgstr "Dvale"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:73
|
||||||
|
msgid "Hibernate"
|
||||||
|
msgstr "Hviletilstand"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:78
|
||||||
|
msgid "Power Off..."
|
||||||
|
msgstr "Sluk..."
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/extension.js:54
|
||||||
|
msgid ""
|
||||||
|
"This is the first time you use the Alternate Tab extension. \n"
|
||||||
|
"Please choose your preferred behaviour:\n"
|
||||||
|
"\n"
|
||||||
|
"All & Thumbnails:\n"
|
||||||
|
" This mode presents all applications from all workspaces in one "
|
||||||
|
"selection \n"
|
||||||
|
" list. Instead of using the application icon of every window, it uses "
|
||||||
|
"small \n"
|
||||||
|
" thumbnails resembling the window itself. \n"
|
||||||
|
"\n"
|
||||||
|
"Workspace & Icons:\n"
|
||||||
|
" This mode let's you switch between the applications of your current \n"
|
||||||
|
" workspace and gives you additionally the option to switch to the last "
|
||||||
|
"used \n"
|
||||||
|
" application of your previous workspace. This is always the last symbol "
|
||||||
|
"in \n"
|
||||||
|
" the list and is segregated by a separator/vertical line if available. \n"
|
||||||
|
" Every window is represented by its application icon. \n"
|
||||||
|
"\n"
|
||||||
|
"If you whish to revert to the default behavior for the Alt-Tab switcher, "
|
||||||
|
"just\n"
|
||||||
|
"disable the extension from extensions.gnome.org or the Advanced Settings "
|
||||||
|
"application."
|
||||||
|
msgstr ""
|
||||||
|
"Dette er første gang du bruger Alternate Tab-udvidelsen. \n"
|
||||||
|
"Vælg venligst din foretrukne opførsel:\n"
|
||||||
|
"\n"
|
||||||
|
"Alle & miniaturebilleder:\n"
|
||||||
|
" Denne tilstand præsenterer alle programmer fra alle arbejdsområder i en "
|
||||||
|
"markerings- \n"
|
||||||
|
" liste. I stedet for at bruge programikonet for hvert vindue, bruges et "
|
||||||
|
"lille \n"
|
||||||
|
" miniaturebillede af vinduet selv. \n"
|
||||||
|
"\n"
|
||||||
|
"Arbejdsområde & ikoner:\n"
|
||||||
|
" Denne tilstand giver mulighed for at skifte mellem programmerne i dit "
|
||||||
|
"nuværende \n"
|
||||||
|
" arbejdsområde og giver dig derudover muligheden for at skifte til det "
|
||||||
|
"seneste brugte \n"
|
||||||
|
" program i dit tidligere arbejdsområde. Dette er altid det sidste symbol "
|
||||||
|
"i \n"
|
||||||
|
" listen og er visuelt adskilt af en vertikal linje, hvis tilgængelig. \n"
|
||||||
|
" Hvert vindue er repræsenteret af dets programikon. \n"
|
||||||
|
"\n"
|
||||||
|
"Hvis du ønsker at skifte tilbage til standardopførslen for Alt-Tab-"
|
||||||
|
"skifteren, skal du\n"
|
||||||
|
"blot deaktivere udvidelsen fra extensions.gnome.org eller programmet "
|
||||||
|
"Avancerede indstillinger."
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/extension.js:295
|
||||||
|
msgid "Alt Tab Behaviour"
|
||||||
|
msgstr "Alt-Tab-opførsel"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/extension.js:311
|
||||||
|
msgid "All & Thumbnails"
|
||||||
|
msgstr "Alle & miniaturebilleder"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/extension.js:318
|
||||||
|
msgid "Workspace & Icons"
|
||||||
|
msgstr "Arbejdsområde & ikoner"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/extension.js:325
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr "Annullér"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:1
|
||||||
|
msgid "Ask the user for a default behaviour if true."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:2
|
||||||
|
msgid "Indicates if Alternate Tab is newly installed"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:3
|
||||||
|
msgid ""
|
||||||
|
"Sets the Alt-Tab behaviour. Possible values are: native, all_thumbnails and "
|
||||||
|
"workspace_icons."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:4
|
||||||
|
#, fuzzy
|
||||||
|
msgid "The alt tab behaviour."
|
||||||
|
msgstr "Alt-Tab-opførsel"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1
|
||||||
|
msgid ""
|
||||||
|
"A list of strings, each containing an application id (desktop file name), "
|
||||||
|
"followed by a colon and the workspace number"
|
||||||
|
msgstr ""
|
||||||
|
"En liste over strenge, som hver indeholder et program-id "
|
||||||
|
"(skrivebordsfilnavn), efterfulgt af et kolon og arbejdsområdets nummer"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
|
||||||
|
msgid "Application and workspace list"
|
||||||
|
msgstr "Liste over programmer og arbejdsområder"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:561
|
||||||
|
msgid "Drag here to add favorites"
|
||||||
|
msgstr "Træk hertil for at føje til favoritter"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:896
|
||||||
|
msgid "New Window"
|
||||||
|
msgstr "Nyt vindue"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:898
|
||||||
|
msgid "Quit Application"
|
||||||
|
msgstr "Afslut program"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:903
|
||||||
|
msgid "Remove from Favorites"
|
||||||
|
msgstr "Fjern fra favoritter"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:904
|
||||||
|
msgid "Add to Favorites"
|
||||||
|
msgstr "Føj til favoritter"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:1
|
||||||
|
msgid "Autohide duration"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:2
|
||||||
|
msgid "Autohide effect"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:3
|
||||||
|
msgid "Enable/disable autohide"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:4
|
||||||
|
msgid "Icon size"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:5
|
||||||
|
msgid "Position of the dock"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:6
|
||||||
|
msgid "Sets icon size of the dock."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:7
|
||||||
|
msgid ""
|
||||||
|
"Sets the effect of the hide dock. Allowed values are 'resize', 'rescale' and "
|
||||||
|
"'move'"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:8
|
||||||
|
msgid ""
|
||||||
|
"Sets the position of the dock in the screen. Allowed values are 'right' or "
|
||||||
|
"'left'"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:9
|
||||||
|
msgid "Sets the time duration of the autohide effect."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/drive-menu/extension.js:69
|
||||||
|
msgid "Open file manager"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/example/extension.js:11
|
||||||
|
msgid "Hello, world!"
|
||||||
|
msgstr "Hej verden!"
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:227
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is away."
|
||||||
|
msgstr "%s er ikke til stede."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:230
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is offline."
|
||||||
|
msgstr "%s er frakoblet."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:233
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is online."
|
||||||
|
msgstr "%s er tilgængelig."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:236
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is busy."
|
||||||
|
msgstr "%s er optaget."
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1
|
||||||
|
msgid ""
|
||||||
|
"If true, place window captions on top the respective thumbnail, overriding "
|
||||||
|
"shell default of placing it at the bottom. Changing this setting requires "
|
||||||
|
"restarting the shell to have any effect."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2
|
||||||
|
msgid "Place window captions on top"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3
|
||||||
|
msgid ""
|
||||||
|
"Try to use more screen for placing window thumbnails by adapting to screen "
|
||||||
|
"aspect ratio, and consolidating them further to reduce the bounding box. "
|
||||||
|
"This setting applies only with the natural placement strategy."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4
|
||||||
|
msgid "Use more screen for windows"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/extension.js:36
|
||||||
|
msgid "Removable Devices"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:1
|
||||||
|
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
|
||||||
|
msgstr "Navnet på temaet, som indlæses fra ~/.themes/name/gnome-shell"
|
||||||
|
|
||||||
|
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
|
||||||
|
msgid "Theme name"
|
||||||
|
msgstr "Temanavn"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:26
|
||||||
|
msgid "Normal"
|
||||||
|
msgstr "Normal"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:27
|
||||||
|
msgid "Left"
|
||||||
|
msgstr "Venstre"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:28
|
||||||
|
msgid "Right"
|
||||||
|
msgstr "Højre"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:29
|
||||||
|
msgid "Upside-down"
|
||||||
|
msgstr "På hovedet"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:78
|
||||||
|
msgid "Configure display settings..."
|
||||||
|
msgstr "Konfigurér skærmindstillinger..."
|
||||||
|
|
||||||
|
#~ msgid "Notifications"
|
||||||
|
#~ msgstr "Beskeder"
|
||||||
|
|
||||||
|
#~ msgid "Online Accounts"
|
||||||
|
#~ msgstr "Online konti"
|
||||||
|
|
||||||
|
#~ msgid "System Settings"
|
||||||
|
#~ msgstr "Systemindstillinger"
|
||||||
|
|
||||||
|
#~ msgid "Lock Screen"
|
||||||
|
#~ msgstr "Lås skærm"
|
||||||
|
|
||||||
|
#~ msgid "Switch User"
|
||||||
|
#~ msgstr "Skift bruger"
|
||||||
|
|
||||||
|
#~ msgid "Log Out..."
|
||||||
|
#~ msgstr "Log ud..."
|
||||||
@@ -0,0 +1,366 @@
|
|||||||
|
# German translation for gnome-shell-extensions.
|
||||||
|
# Copyright (C) 2011 gnome-shell-extensions's COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the gnome-shell-extensions package.
|
||||||
|
# Mario Blättermann <mario.blaettermann@gmail.com>, 2011, 2012.
|
||||||
|
# Christian Kirbach <Christian.Kirbach@googlemail.com>, 2011, 2012.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: gnome-shell-extensions master\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2012-10-24 12:41+0200\n"
|
||||||
|
"PO-Revision-Date: 2012-10-24 12:37+0100\n"
|
||||||
|
"Last-Translator: Christian Kirbach <christian.kirbach@gmail.com>\n"
|
||||||
|
"Language-Team: Deutsch <gnome-de@gnome.org>\n"
|
||||||
|
"Language: \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-Poedit-Language: German\n"
|
||||||
|
"X-Poedit-Country: GERMANY\n"
|
||||||
|
"X-Generator: Gtranslator 2.91.5\n"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:1
|
||||||
|
msgid "The application icon mode."
|
||||||
|
msgstr "Der Modus des Anwendungssymbols."
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:2
|
||||||
|
msgid ""
|
||||||
|
"Configures how the windows are shown in the switcher. Valid possibilities "
|
||||||
|
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
|
||||||
|
"only' (shows only the application icon) or 'both'."
|
||||||
|
msgstr ""
|
||||||
|
"Legt fest, wie die Fenster im Fensterumschalter angezeigt werden. Gültige "
|
||||||
|
"Werte sind »thumbnail-only« (zeigt ein Vorschaubild des Fensters), »app-icon-"
|
||||||
|
"only« (zeigt das Anwendungssymbol) oder »both« (beides)."
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:26
|
||||||
|
msgid "Thumbnail only"
|
||||||
|
msgstr "Nur Vorschaubild"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:27
|
||||||
|
msgid "Application icon only"
|
||||||
|
msgstr "Nur Anwendungssymbol"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:28
|
||||||
|
msgid "Thumbnail and application icon"
|
||||||
|
msgstr "Vorschaubild und Anwendungssymbol"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:43
|
||||||
|
msgid "Present windows as"
|
||||||
|
msgstr "Fenster darstellen als"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:68
|
||||||
|
msgid "Show only windows in the current workspace"
|
||||||
|
msgstr "Nur Fenster der aktuellen Arbeitsfläche anzeigen"
|
||||||
|
|
||||||
|
#. add the new entries
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:86
|
||||||
|
msgid "Suspend"
|
||||||
|
msgstr "Bereitschaft"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:91
|
||||||
|
msgid "Hibernate"
|
||||||
|
msgstr "Ruhezustand"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:96
|
||||||
|
msgid "Power Off"
|
||||||
|
msgstr "Ausschalten …"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:1
|
||||||
|
msgid "Enable suspending"
|
||||||
|
msgstr "Bereitschaft einblenden"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:2
|
||||||
|
msgid "Control the visibility of the Suspend menu item"
|
||||||
|
msgstr "Die Sichtbarkeit des Menüeintrags »Bereitschaft« festlegen"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:3
|
||||||
|
msgid "Enable hibernating"
|
||||||
|
msgstr "Ruhezustand einblenden"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:4
|
||||||
|
msgid "Control the visibility of the Hibernate menu item"
|
||||||
|
msgstr "Die Sichtbarkeit des Menüeintrags »Ruhezustand« festlegen"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1
|
||||||
|
msgid "Application and workspace list"
|
||||||
|
msgstr "Anwendungs- und Arbeitsflächenliste"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
|
||||||
|
msgid ""
|
||||||
|
"A list of strings, each containing an application id (desktop file name), "
|
||||||
|
"followed by a colon and the workspace number"
|
||||||
|
msgstr ""
|
||||||
|
"Eine Liste aus Zeichenketten, wovon jede eine Anwendungskennung (*.desktop-"
|
||||||
|
"Datei) enthält, gefolgt von einem Doppelpunkt und der Nummer der "
|
||||||
|
"Arbeitsfläche"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:55
|
||||||
|
msgid "Application"
|
||||||
|
msgstr "Anwendung"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:64
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:106
|
||||||
|
msgid "Workspace"
|
||||||
|
msgstr "Arbeitsfläche "
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:80
|
||||||
|
msgid "Add rule"
|
||||||
|
msgstr "Regel hinzufügen"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:94
|
||||||
|
msgid "Create new matching rule"
|
||||||
|
msgstr "Neue Übereinstimmungsregel erstellen"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:98
|
||||||
|
msgid "Add"
|
||||||
|
msgstr "Hinzufügen"
|
||||||
|
|
||||||
|
#: ../extensions/drive-menu/extension.js:72
|
||||||
|
#, c-format
|
||||||
|
msgid "Ejecting drive '%s' failed:"
|
||||||
|
msgstr "Auswerfen von Laufwerk »%s« schlug fehl:"
|
||||||
|
|
||||||
|
#: ../extensions/drive-menu/extension.js:89
|
||||||
|
msgid "Removable devices"
|
||||||
|
msgstr "Wechseldatenträger"
|
||||||
|
|
||||||
|
#: ../extensions/drive-menu/extension.js:106
|
||||||
|
msgid "Open File"
|
||||||
|
msgstr "Datei öffnen"
|
||||||
|
|
||||||
|
#: ../extensions/example/extension.js:17
|
||||||
|
msgid "Hello, world!"
|
||||||
|
msgstr "Hallo, Welt!"
|
||||||
|
|
||||||
|
#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:1
|
||||||
|
msgid "Alternative greeting text."
|
||||||
|
msgstr "Alternative Begrüßungstext."
|
||||||
|
|
||||||
|
#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:2
|
||||||
|
msgid ""
|
||||||
|
"If not empty, it contains the text that will be shown when clicking on the "
|
||||||
|
"panel."
|
||||||
|
msgstr ""
|
||||||
|
"Falls nicht leer, ist dies der Text, der beim Anklicken des Panels angezeigt "
|
||||||
|
"wird."
|
||||||
|
|
||||||
|
#. TRANSLATORS: Example is the name of the extension, should not be
|
||||||
|
#. translated
|
||||||
|
#: ../extensions/example/prefs.js:30
|
||||||
|
msgid ""
|
||||||
|
"Example aims to show how to build well behaved extensions for the Shell and "
|
||||||
|
"as such it has little functionality on its own.\n"
|
||||||
|
"Nevertheless it's possible to customize the greeting message."
|
||||||
|
msgstr ""
|
||||||
|
"Das Beispiel soll zeigen, wie sich korrekt verhaltende Erweiterungen für die "
|
||||||
|
"Shell erstellt werden. Es enthält grundlegende Funktionalität.\n"
|
||||||
|
"Es ist möglich, die Begrüßungsnachricht zu ändern."
|
||||||
|
|
||||||
|
#: ../extensions/example/prefs.js:36
|
||||||
|
msgid "Message:"
|
||||||
|
msgstr "Nachricht:"
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1
|
||||||
|
msgid "Use more screen for windows"
|
||||||
|
msgstr "Mehr Bildschirmbereich für Fenster verwenden"
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2
|
||||||
|
msgid ""
|
||||||
|
"Try to use more screen for placing window thumbnails by adapting to screen "
|
||||||
|
"aspect ratio, and consolidating them further to reduce the bounding box. "
|
||||||
|
"This setting applies only with the natural placement strategy."
|
||||||
|
msgstr ""
|
||||||
|
"Versuchen, mehr Bildschirmfläche zum Platzieren der Fenstervorschaubilder zu "
|
||||||
|
"verwenden, indem das Bildschirmseitenverhältnis berücksichtigt wird und "
|
||||||
|
"diese stärker zusammengelegt werden, um den umgebenden Rahmen zu "
|
||||||
|
"verkleinern. Diese Einstellung betrifft nur den natürlichen "
|
||||||
|
"Platzierungsalgorithmus."
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3
|
||||||
|
msgid "Place window captions on top"
|
||||||
|
msgstr "Fensterbeschriftungen oben platzieren"
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4
|
||||||
|
msgid ""
|
||||||
|
"If true, place window captions on top the respective thumbnail, overriding "
|
||||||
|
"shell default of placing it at the bottom. Changing this setting requires "
|
||||||
|
"restarting the shell to have any effect."
|
||||||
|
msgstr ""
|
||||||
|
"Falls wahr, so werden die Fensterbeschriftungen über dem zugehörigen "
|
||||||
|
"Vorschaubild platziert und damit die Voreinstellung der Shell übergangen. "
|
||||||
|
"Eine Änderungseinstellung tritt erst mit einem Neustart der Shell in Kraft."
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/extension.js:46
|
||||||
|
msgid "Places"
|
||||||
|
msgstr "Orte"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/extension.js:47
|
||||||
|
msgid "Devices"
|
||||||
|
msgstr "Geräte"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/extension.js:48
|
||||||
|
msgid "Bookmarks"
|
||||||
|
msgstr "Lesezeichen"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/extension.js:49
|
||||||
|
msgid "Network"
|
||||||
|
msgstr "Netzwerk"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/placeDisplay.js:48
|
||||||
|
#, c-format
|
||||||
|
msgid "Failed to launch \"%s\""
|
||||||
|
msgstr "Starten von »%s« fehlgeschlagen"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/placeDisplay.js:121
|
||||||
|
msgid "Home"
|
||||||
|
msgstr "Persönlicher Ordner"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/placeDisplay.js:184
|
||||||
|
msgid "File System"
|
||||||
|
msgstr "Dateisystem"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/placeDisplay.js:188
|
||||||
|
msgid "Browse network"
|
||||||
|
msgstr "Netzwerk durchsuchen"
|
||||||
|
|
||||||
|
#: ../extensions/systemMonitor/extension.js:213
|
||||||
|
msgid "CPU"
|
||||||
|
msgstr "CPU"
|
||||||
|
|
||||||
|
#: ../extensions/systemMonitor/extension.js:266
|
||||||
|
msgid "Memory"
|
||||||
|
msgstr "Speicher"
|
||||||
|
|
||||||
|
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:1
|
||||||
|
msgid "Theme name"
|
||||||
|
msgstr "Themenname"
|
||||||
|
|
||||||
|
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
|
||||||
|
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
|
||||||
|
msgstr ""
|
||||||
|
"Der Name des Themas, welches aus ~/.themes/name/gnome-shell geladen werden "
|
||||||
|
"soll"
|
||||||
|
|
||||||
|
#: ../extensions/workspace-indicator/extension.js:30
|
||||||
|
msgid "Workspace Indicator"
|
||||||
|
msgstr "Arbeitsflächenindikator"
|
||||||
|
|
||||||
|
#: ../extensions/workspace-indicator/prefs.js:141
|
||||||
|
msgid "Workspace names:"
|
||||||
|
msgstr "Namen der Arbeitsflächen:"
|
||||||
|
|
||||||
|
#: ../extensions/workspace-indicator/prefs.js:152
|
||||||
|
msgid "Name"
|
||||||
|
msgstr "Name"
|
||||||
|
|
||||||
|
#: ../extensions/workspace-indicator/prefs.js:186
|
||||||
|
#, c-format
|
||||||
|
msgid "Workspace %d"
|
||||||
|
msgstr "Arbeitsfläche %d"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:30
|
||||||
|
msgid "Normal"
|
||||||
|
msgstr "Normal"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:31
|
||||||
|
msgid "Left"
|
||||||
|
msgstr "Links"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:32
|
||||||
|
msgid "Right"
|
||||||
|
msgstr "Rechts"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:33
|
||||||
|
msgid "Upside-down"
|
||||||
|
msgstr "Kopfüber"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:50
|
||||||
|
msgid "Display"
|
||||||
|
msgstr "Anzeige"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:80
|
||||||
|
msgid "Display Settings"
|
||||||
|
msgstr "Bildschirmeinstellungen"
|
||||||
|
|
||||||
|
#~ msgid "Drag here to add favorites"
|
||||||
|
#~ msgstr "Hierher ziehen, um zu Favoriten hinzuzufügen"
|
||||||
|
|
||||||
|
#~ msgid "New Window"
|
||||||
|
#~ msgstr "Neues Fenster"
|
||||||
|
|
||||||
|
#~ msgid "Quit Application"
|
||||||
|
#~ msgstr "Anwendung beenden"
|
||||||
|
|
||||||
|
#~ msgid "Remove from Favorites"
|
||||||
|
#~ msgstr "Aus Favoriten entfernen"
|
||||||
|
|
||||||
|
#~ msgid "Add to Favorites"
|
||||||
|
#~ msgstr "Zu Favoriten hinzufügen"
|
||||||
|
|
||||||
|
# Dock = das Dock ? -ck
|
||||||
|
# Sofern es sich nicht um das Original-Dash handelt, ja. -mb
|
||||||
|
#~ msgid "Position of the dock"
|
||||||
|
#~ msgstr "Position des Docks"
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "Sets the position of the dock in the screen. Allowed values are 'right' "
|
||||||
|
#~ "or 'left'"
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Legt die Position des Docks auf dem Bildschirm fest. Mögliche Werte sind "
|
||||||
|
#~ "»right« und »left«"
|
||||||
|
|
||||||
|
#~ msgid "Icon size"
|
||||||
|
#~ msgstr "Symbolgröße"
|
||||||
|
|
||||||
|
#~ msgid "Sets icon size of the dock."
|
||||||
|
#~ msgstr "Legt die Symbolgröße für das Dock fest"
|
||||||
|
|
||||||
|
#~ msgid "Enable/disable autohide"
|
||||||
|
#~ msgstr "Automatisches Verbergen aktivieren/deaktivieren"
|
||||||
|
|
||||||
|
#~ msgid "Autohide effect"
|
||||||
|
#~ msgstr "Effekt automatisch verbergen"
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "Sets the effect of the hide dock. Allowed values are 'resize', 'rescale' "
|
||||||
|
#~ "and 'move'"
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Legt den Effekt für das versteckte Dock fest. Mögliche Werte sind "
|
||||||
|
#~ "»resize«, »rescale« und »move«"
|
||||||
|
|
||||||
|
#~ msgid "Autohide duration"
|
||||||
|
#~ msgstr "Dauer automatisch verbergen"
|
||||||
|
|
||||||
|
#~ msgid "Sets the time duration of the autohide effect."
|
||||||
|
#~ msgstr "Legt die Effektdauer für automatisches Verbergen fest."
|
||||||
|
|
||||||
|
#~ msgid "Monitor"
|
||||||
|
#~ msgstr "Bildschirm"
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "Sets monitor to display dock in. The default value (-1) is the primary "
|
||||||
|
#~ "monitor."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Legt den Bildschirm fest, in dem das Dock angezeigt werden soll. Die "
|
||||||
|
#~ "Voreinstellung (-1) entspricht dem primären Bildschirm."
|
||||||
|
|
||||||
|
#~ msgid "%s is away."
|
||||||
|
#~ msgstr "%s ist abwesend."
|
||||||
|
|
||||||
|
#~ msgid "%s is offline."
|
||||||
|
#~ msgstr "%s ist abgemeldet."
|
||||||
|
|
||||||
|
#~ msgid "%s is online."
|
||||||
|
#~ msgstr "%s ist angemeldet."
|
||||||
|
|
||||||
|
#~ msgid "%s is busy."
|
||||||
|
#~ msgstr "%s ist beschäftigt."
|
||||||
|
|
||||||
|
#~ msgid "Removable Devices"
|
||||||
|
#~ msgstr "Wechseldatenträger"
|
||||||
|
|
||||||
|
#~ msgid "The alt tab behaviour."
|
||||||
|
#~ msgstr "Das Verhalten bei Eingabe von Alt-Tab."
|
||||||
@@ -0,0 +1,536 @@
|
|||||||
|
# Greek translation for gnome-shell-extensions.
|
||||||
|
# Copyright (C) 2011 gnome-shell-extensions's COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the gnome-shell-extensions package.
|
||||||
|
# ioza1964 <ioza1964@yahoo.gr>, 2011.
|
||||||
|
# Ιωάννης Ζαμπούκας <ioza1964@yahoo.gr>, 2011.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: gnome-shell-extensions master\n"
|
||||||
|
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||||
|
"shell&keywords=I18N+L10N&component=extensions\n"
|
||||||
|
"POT-Creation-Date: 2012-10-08 17:42+0000\n"
|
||||||
|
"PO-Revision-Date: 2012-10-11 17:16+0200\n"
|
||||||
|
"Last-Translator: Tom Tryfonidis <tomtryf@gmail.com>\n"
|
||||||
|
"Language-Team: Greek <team@gnome.gr>\n"
|
||||||
|
"Language: el\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:1
|
||||||
|
msgid "The application icon mode."
|
||||||
|
msgstr "Η λειτουργία εικονιδίου της εφαρμογής"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:2
|
||||||
|
msgid ""
|
||||||
|
"Configures how the windows are shown in the switcher. Valid possibilities "
|
||||||
|
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
|
||||||
|
"only' (shows only the application icon) or 'both'."
|
||||||
|
msgstr ""
|
||||||
|
"Διαμορφώνει πως τα παράθυρα θα εμφανίζονται στν εναλλαγή των παραθύρων. "
|
||||||
|
"Έγκυρες ρυθμίσεις είναι 'thumbnail-only' (εμφανίζει μια μικρογραφία του "
|
||||||
|
"παραθύρου), 'app-icon-only' (εμφανίζει μόνο το εικονίδιο της εφαρμογής) ή "
|
||||||
|
"'both'."
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:26
|
||||||
|
msgid "Thumbnail only"
|
||||||
|
msgstr "Μόνο μικρογραφίες"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:27
|
||||||
|
msgid "Application icon only"
|
||||||
|
msgstr "Μόνο εικονίδια εφαρμογών"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:28
|
||||||
|
msgid "Thumbnail and application icon"
|
||||||
|
msgstr "Εικονίδια μικρογραφιών και εφαρμογών"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:43
|
||||||
|
msgid "Present windows as"
|
||||||
|
msgstr "Παρουσίαση παραθύρων ως"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:68
|
||||||
|
msgid "Show only windows in the current workspace"
|
||||||
|
msgstr "Προβολή των παραθύρων μόνο στον τρέχων χώρο εργασίας"
|
||||||
|
|
||||||
|
#. add the new entries
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:86
|
||||||
|
msgid "Suspend"
|
||||||
|
msgstr "Αναστολή"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:91
|
||||||
|
msgid "Hibernate"
|
||||||
|
msgstr "Αδρανοποίηση"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:96
|
||||||
|
msgid "Power Off"
|
||||||
|
msgstr "Τερματισμός"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:1
|
||||||
|
msgid "Enable suspending"
|
||||||
|
msgstr "Ενεργοποίηση αναστολής"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:2
|
||||||
|
msgid "Control the visibility of the Suspend menu item"
|
||||||
|
msgstr "Ελέγχει την ορατότητα του αντικειμένου Αναστολη"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:3
|
||||||
|
msgid "Enable hibernating"
|
||||||
|
msgstr "Ενεργοποίηση αδρανοποίησης"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:4
|
||||||
|
msgid "Control the visibility of the Hibernate menu item"
|
||||||
|
msgstr "Ελέγχει την ορατότητα του αντικειμένου Αδρανοποίηση"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1
|
||||||
|
msgid "Application and workspace list"
|
||||||
|
msgstr "Λίστα εφαρμογών και χώρου εργασίας"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
|
||||||
|
msgid ""
|
||||||
|
"A list of strings, each containing an application id (desktop file name), "
|
||||||
|
"followed by a colon and the workspace number"
|
||||||
|
msgstr ""
|
||||||
|
"Μια λίστα συμβολοσειρών, που η καθεμία περιέχει ένα αναγνωριστικό εφαρμογής "
|
||||||
|
"(όνομα αρχείου επιφάνειας εργασίας), ακολουθούμενη από άνω και κάτω τελεία "
|
||||||
|
"και τον αριθμό του χώρου εργασίας"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:55
|
||||||
|
msgid "Application"
|
||||||
|
msgstr "Εφαρμογή"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:64
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:106
|
||||||
|
msgid "Workspace"
|
||||||
|
msgstr "Χώρος εργασίας"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:80
|
||||||
|
msgid "Add rule"
|
||||||
|
msgstr "Προσθήκη κανόνα"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:94
|
||||||
|
msgid "Create new matching rule"
|
||||||
|
msgstr "Δημιουργία νέου κανόνα που ταιριάζει"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:98
|
||||||
|
msgid "Add"
|
||||||
|
msgstr "Προσθήκη"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:600
|
||||||
|
msgid "Drag here to add favorites"
|
||||||
|
msgstr "Σύρετε εδώ για να προσθέσετε αγαπημένα"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:926
|
||||||
|
msgid "New Window"
|
||||||
|
msgstr "Νέο παράθυρο"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:928
|
||||||
|
msgid "Quit Application"
|
||||||
|
msgstr "Εγκατάλειψη εφαρμογής"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:933
|
||||||
|
msgid "Remove from Favorites"
|
||||||
|
msgstr "Απομάκρυνση από τα αγαπημένα"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:934
|
||||||
|
msgid "Add to Favorites"
|
||||||
|
msgstr "Προσθήκη στα αγαπημένα"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:1
|
||||||
|
msgid "Position of the dock"
|
||||||
|
msgstr "Θέση υποδοχέα"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:2
|
||||||
|
msgid ""
|
||||||
|
"Sets the position of the dock in the screen. Allowed values are 'right' or "
|
||||||
|
"'left'"
|
||||||
|
msgstr ""
|
||||||
|
"Ρυθμίζει τη θέση του υποδοχέα στην οθόνη. Επιτρεπόμενες τιμές είναι right "
|
||||||
|
"(«δεξιά») ή right («αριστερά»)"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:3
|
||||||
|
msgid "Icon size"
|
||||||
|
msgstr "Μέγεθος εικονιδίου"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:4
|
||||||
|
msgid "Sets icon size of the dock."
|
||||||
|
msgstr "Ρυθμίζει το μέγεθος εικόνας του υποδοχέα."
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:5
|
||||||
|
msgid "Enable/disable autohide"
|
||||||
|
msgstr "Ενεργοποίηση/απενεργοποίηση αυτόματης απόκρυψης"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:6
|
||||||
|
msgid "Autohide effect"
|
||||||
|
msgstr "Εφέ αυτόματης απόκρυψης"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:7
|
||||||
|
msgid ""
|
||||||
|
"Sets the effect of the hide dock. Allowed values are 'resize', 'rescale' and "
|
||||||
|
"'move'"
|
||||||
|
msgstr ""
|
||||||
|
"Ρυθμίζει το εφέ κρυψίματος του υποδοχέα. Επιτρεπόμενες τιμές είναι 'resize', "
|
||||||
|
"'rescale' και 'move'"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:8
|
||||||
|
msgid "Autohide duration"
|
||||||
|
msgstr "Διάρκεια αυτόματης απόκρυψης"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:9
|
||||||
|
msgid "Sets the time duration of the autohide effect."
|
||||||
|
msgstr "Ρυθμίζει την χρονική διάρκεια του εφέ αυτόματης απόκρυψης."
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:10
|
||||||
|
msgid "Monitor"
|
||||||
|
msgstr "Οθόνη"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:11
|
||||||
|
msgid ""
|
||||||
|
"Sets monitor to display dock in. The default value (-1) is the primary "
|
||||||
|
"monitor."
|
||||||
|
msgstr ""
|
||||||
|
"Ορίζει την οθόνη για την εμφάνιση του ταμπλό. Η προεπιλεγμένη τιμή (-1) "
|
||||||
|
"είναι η κύρια οθόνη."
|
||||||
|
|
||||||
|
#: ../extensions/drive-menu/extension.js:72
|
||||||
|
#, c-format
|
||||||
|
msgid "Ejecting drive '%s' failed:"
|
||||||
|
msgstr "Απέτυχε η εξαγωγή του δίσκου '%s':"
|
||||||
|
|
||||||
|
#: ../extensions/drive-menu/extension.js:89
|
||||||
|
msgid "Removable devices"
|
||||||
|
msgstr "Αφαιρούμενες συσκευές"
|
||||||
|
|
||||||
|
#: ../extensions/drive-menu/extension.js:106
|
||||||
|
#| msgid "Open file manager"
|
||||||
|
msgid "Open File"
|
||||||
|
msgstr "Άνοιγμα αρχείου"
|
||||||
|
|
||||||
|
#: ../extensions/example/extension.js:17
|
||||||
|
msgid "Hello, world!"
|
||||||
|
msgstr "Γεια σου, κόσμε!"
|
||||||
|
|
||||||
|
#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:1
|
||||||
|
msgid "Alternative greeting text."
|
||||||
|
msgstr "Εναλλακτικό κείμενο χαιρετισμού"
|
||||||
|
|
||||||
|
#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:2
|
||||||
|
msgid ""
|
||||||
|
"If not empty, it contains the text that will be shown when clicking on the "
|
||||||
|
"panel."
|
||||||
|
msgstr ""
|
||||||
|
"Αν δεν είναι κενό, περιέχει το κείμενο που θα εμφανιστεί όταν θα κάνετε κλικ "
|
||||||
|
"στον πίνακα εφαρμογών."
|
||||||
|
|
||||||
|
#. TRANSLATORS: Example is the name of the extension, should not be
|
||||||
|
#. translated
|
||||||
|
#: ../extensions/example/prefs.js:30
|
||||||
|
msgid ""
|
||||||
|
"Example aims to show how to build well behaved extensions for the Shell and "
|
||||||
|
"as such it has little functionality on its own.\n"
|
||||||
|
"Nevertheless it's possible to customize the greeting message."
|
||||||
|
msgstr ""
|
||||||
|
"Το παράδειγμα στοχεύει να δείξει πώς να δημιουργήσουμε επεκτάσεις για το "
|
||||||
|
"κέλυφος που συμπεριφέρονται σωστά και ως αυτού έχει μικρή λειτουργικότητα "
|
||||||
|
"από μόνο του.\n"
|
||||||
|
"Παρ' όλα αυτά είναι δυνατό να προσαρμόσετε το μήνυμα χαιρετισμού."
|
||||||
|
|
||||||
|
#: ../extensions/example/prefs.js:36
|
||||||
|
msgid "Message:"
|
||||||
|
msgstr "Μήνυμα:"
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:226
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is away."
|
||||||
|
msgstr "%s είναι εκτός."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:229
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is offline."
|
||||||
|
msgstr "%s είναι εκτός σύνδεσης."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:232
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is online."
|
||||||
|
msgstr "%s είναι σε σύνδεση."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:235
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is busy."
|
||||||
|
msgstr "%s είναι απασχολημένος/η."
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1
|
||||||
|
msgid "Use more screen for windows"
|
||||||
|
msgstr "Χρησιμοποιήστε περισσότερη οθόνη για τα παράθυρα"
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2
|
||||||
|
msgid ""
|
||||||
|
"Try to use more screen for placing window thumbnails by adapting to screen "
|
||||||
|
"aspect ratio, and consolidating them further to reduce the bounding box. "
|
||||||
|
"This setting applies only with the natural placement strategy."
|
||||||
|
msgstr ""
|
||||||
|
"Προσπαθήστε να χρησιμοποιήσετε περισσότερη οθόνη για την τοποθέτηση "
|
||||||
|
"μικρογραφιών παραθύρου προσαρμόζοντας τον λόγο διαστάσεων οθόνης, και "
|
||||||
|
"εδραιώνοντας τους περαιτέρω για να μειώσετε το πλαίσιο οριοθέτησης. Αυτή η "
|
||||||
|
"ρύθμιση ισχύει μόνο με την στρατηγική φυσικής τοποθέτησης."
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3
|
||||||
|
msgid "Place window captions on top"
|
||||||
|
msgstr "Τοποθετήστε τίτλους παράθυρου στην κορυφή"
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4
|
||||||
|
msgid ""
|
||||||
|
"If true, place window captions on top the respective thumbnail, overriding "
|
||||||
|
"shell default of placing it at the bottom. Changing this setting requires "
|
||||||
|
"restarting the shell to have any effect."
|
||||||
|
msgstr ""
|
||||||
|
"Αν αυτό αληθεύει, τοποθετήστε τους τίτλους παράθυρου στην κορυφή της "
|
||||||
|
"αντίστοιχης μικρογραφίας, παρακάμπτοντας το προεπιλεγμένο του κελύφους πού "
|
||||||
|
"το τοποθετεί στο κάτω μέρος. Η αλλαγή αυτής της ρύθμισης απαιτεί "
|
||||||
|
"επανεκκίνηση του κέλυφους για να έχει κάποιο αποτέλεσμα."
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/extension.js:46
|
||||||
|
msgid "Places"
|
||||||
|
msgstr "Τοποθεσίες"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/extension.js:47
|
||||||
|
msgid "Devices"
|
||||||
|
msgstr "Συσκευές"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/extension.js:48
|
||||||
|
msgid "Bookmarks"
|
||||||
|
msgstr "Σελιδοδείκτες"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/extension.js:49
|
||||||
|
msgid "Network"
|
||||||
|
msgstr "Δίκτυο"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/placeDisplay.js:48
|
||||||
|
#, c-format
|
||||||
|
msgid "Failed to launch \"%s\""
|
||||||
|
msgstr "Αποτυχία εκκίνησης \"%s\""
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/placeDisplay.js:121
|
||||||
|
msgid "Home"
|
||||||
|
msgstr "Προσωπικός φάκελος"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/placeDisplay.js:184
|
||||||
|
msgid "File System"
|
||||||
|
msgstr "Σύστημα αρχείων"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/placeDisplay.js:188
|
||||||
|
msgid "Browse network"
|
||||||
|
msgstr "Περιήγηση δικτύου"
|
||||||
|
|
||||||
|
#: ../extensions/systemMonitor/extension.js:213
|
||||||
|
msgid "CPU"
|
||||||
|
msgstr "CPU"
|
||||||
|
|
||||||
|
#: ../extensions/systemMonitor/extension.js:266
|
||||||
|
msgid "Memory"
|
||||||
|
msgstr "Μνήμη"
|
||||||
|
|
||||||
|
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:1
|
||||||
|
msgid "Theme name"
|
||||||
|
msgstr "Όνομα θέματος"
|
||||||
|
|
||||||
|
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
|
||||||
|
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
|
||||||
|
msgstr ""
|
||||||
|
"Το όνομα του θέματος, για να φορτωθεί από το αρχείο ~ / .themes / name / "
|
||||||
|
"gnome-shell"
|
||||||
|
|
||||||
|
#: ../extensions/workspace-indicator/extension.js:30
|
||||||
|
msgid "Workspace Indicator"
|
||||||
|
msgstr "Δείκτης χώρου εργασίας"
|
||||||
|
|
||||||
|
#: ../extensions/workspace-indicator/prefs.js:141
|
||||||
|
msgid "Workspace names:"
|
||||||
|
msgstr "Ονόματα χώρων εργασίας:"
|
||||||
|
|
||||||
|
#: ../extensions/workspace-indicator/prefs.js:152
|
||||||
|
msgid "Name"
|
||||||
|
msgstr "Όνομα"
|
||||||
|
|
||||||
|
#: ../extensions/workspace-indicator/prefs.js:186
|
||||||
|
#, c-format
|
||||||
|
msgid "Workspace %d"
|
||||||
|
msgstr "Χώρος εργασίας %d"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:30
|
||||||
|
msgid "Normal"
|
||||||
|
msgstr "Κανονικό"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:31
|
||||||
|
msgid "Left"
|
||||||
|
msgstr "Αριστερά"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:32
|
||||||
|
msgid "Right"
|
||||||
|
msgstr "Δεξιά"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:33
|
||||||
|
msgid "Upside-down"
|
||||||
|
msgstr "Αναποδογυρισμένο"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:50
|
||||||
|
msgid "Display"
|
||||||
|
msgstr "Οθόνη"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:80
|
||||||
|
msgid "Display Settings"
|
||||||
|
msgstr "Ρυθμίσεις οθόνης"
|
||||||
|
|
||||||
|
#~ msgid "The alt tab behaviour."
|
||||||
|
#~ msgstr "Η συμπεριφορά alt tab."
|
||||||
|
|
||||||
|
#~| msgid ""
|
||||||
|
#~| "Sets the Alt-Tab behaviour. Possible values are: native, all_thumbnails "
|
||||||
|
#~| "and workspace_icons."
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "Sets the Alt-Tab behaviour. Possible values are: all_thumbnails and "
|
||||||
|
#~ "workspace_icons. See the configuration dialogs for details."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Ρυθμίζει την συμπεριφορά του Alt Tab. Πιθανές τιμές είναι οι εξής: "
|
||||||
|
#~ "όλες_μικρογραφίες (all_thumbnails) και εικονίδια_χώρου εργασίας "
|
||||||
|
#~ "(workspace_icons). Δείτε τις ρυθμίσεις διαλόγου για λεπτομέρειες."
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "This mode presents all applications from all workspaces in one selection "
|
||||||
|
#~ "list. Instead of using the application icon of every window, it uses "
|
||||||
|
#~ "small thumbnails resembling the window itself."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Αυτή η κατάσταση εμφανίζει όλες τις εφαρμογές απ' όλους τους χώρους "
|
||||||
|
#~ "εργασίας σε μια λίστα επιλογής. Αντί να χρησιμοποιήσει το εικονίδιο της "
|
||||||
|
#~ "εφαρμογής για κάθε παράθυρο, χρησιμοποιεί μικρογραφίες που μοιάζουν με το "
|
||||||
|
#~ "ίδιο το παράθυρο."
|
||||||
|
|
||||||
|
#~ msgid "Workspace & Icons"
|
||||||
|
#~ msgstr "Χώρος εργασίας & εικονίδια"
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "This mode let's you switch between the applications of your current "
|
||||||
|
#~ "workspace and gives you additionally the option to switch to the last "
|
||||||
|
#~ "used application of your previous workspace. This is always the last "
|
||||||
|
#~ "symbol in the list and is segregated by a separator/vertical line if "
|
||||||
|
#~ "available. \n"
|
||||||
|
#~ "Every window is represented by its application icon."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Αυτή η κατάσταση σας επιτρέπει την εναλλαγή μεταξύ των εφαρμογών του "
|
||||||
|
#~ "τωρινού χώρου εργασίας και σας δίνει επιπλέον την επιλογή να μεταβείτε "
|
||||||
|
#~ "στην τελευταία χρησιμοποιημένη εφαρμογή του προηγούμενου χώρου εργασίας "
|
||||||
|
#~ "σας. Αυτό είναι πάντα το τελευταίο σύμβολο στη λιστα και διαχωρίζεται από "
|
||||||
|
#~ "μια κάθετη γραμμή αν είναι διαθέσιμη. \n"
|
||||||
|
#~ "Κάθε παράθυρο αντιπροσωπεύεται από το εικονίδιο της εφαρμογής του."
|
||||||
|
|
||||||
|
#~ msgid "Move current selection to front before closing the popup"
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Μετακινήστε τη τωρινή επιλογή προς τα εμπρός πριν το κλείσιμο του "
|
||||||
|
#~ "αναδυόμενου"
|
||||||
|
|
||||||
|
#, fuzzy
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "The Alternate Tab can be used in different modes, that affect the way "
|
||||||
|
#~ "windows are chosen and presented."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Το Alternate Tab μπορεί να χρησιμοποιηθεί σε διαφορετικές καταστάσεις, οι "
|
||||||
|
#~ "οποίες επηρεάζουν τον τρόπο που τα παράθυρα επιλέγονται και "
|
||||||
|
#~ "παρουσιάζονται."
|
||||||
|
|
||||||
|
#~ msgid "Configure display settings..."
|
||||||
|
#~ msgstr "Διαμορφώστε τις ρυθμίσεις της οθόνης…"
|
||||||
|
|
||||||
|
#~ msgid "Notifications"
|
||||||
|
#~ msgstr "Ειδοποιήσεις"
|
||||||
|
|
||||||
|
#~ msgid "Online Accounts"
|
||||||
|
#~ msgstr "Λογαριασμοί διαδικτύου"
|
||||||
|
|
||||||
|
#~ msgid "Lock Screen"
|
||||||
|
#~ msgstr "Κλείδωμα οθόνης"
|
||||||
|
|
||||||
|
#~ msgid "Switch User"
|
||||||
|
#~ msgstr "Αλλαγή χρήστη"
|
||||||
|
|
||||||
|
#~ msgid "Log Out..."
|
||||||
|
#~ msgstr "Αποσύνδεση…"
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "This is the first time you use the Alternate Tab extension. \n"
|
||||||
|
#~ "Please choose your preferred behaviour:\n"
|
||||||
|
#~ "\n"
|
||||||
|
#~ "All & Thumbnails:\n"
|
||||||
|
#~ " This mode presents all applications from all workspaces in one "
|
||||||
|
#~ "selection \n"
|
||||||
|
#~ " list. Instead of using the application icon of every window, it uses "
|
||||||
|
#~ "small \n"
|
||||||
|
#~ " thumbnails resembling the window itself. \n"
|
||||||
|
#~ "\n"
|
||||||
|
#~ "Workspace & Icons:\n"
|
||||||
|
#~ " This mode let's you switch between the applications of your current \n"
|
||||||
|
#~ " workspace and gives you additionally the option to switch to the last "
|
||||||
|
#~ "used \n"
|
||||||
|
#~ " application of your previous workspace. This is always the last "
|
||||||
|
#~ "symbol in \n"
|
||||||
|
#~ " the list and is segregated by a separator/vertical line if "
|
||||||
|
#~ "available. \n"
|
||||||
|
#~ " Every window is represented by its application icon. \n"
|
||||||
|
#~ "\n"
|
||||||
|
#~ "Native:\n"
|
||||||
|
#~ " This mode is the native GNOME 3 behaviour or in other words: "
|
||||||
|
#~ "Clicking \n"
|
||||||
|
#~ " native switches the Alternate Tab extension off. \n"
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Αυτή είναι η πρώτη φορά που χρησιμοποιήσατε την εναλλακτική επέκταση "
|
||||||
|
#~ "στηλοθέτη. \n"
|
||||||
|
#~ "Παρακαλούμε επιλέξτε την συμπεριφορά που επιθυμείτε εσείς:\n"
|
||||||
|
#~ "\n"
|
||||||
|
#~ "Όλα & μικρογραφίες:\n"
|
||||||
|
#~ " Αυτή η κατάσταση εμφανίζει όλες τις εφαρμογές από όλους τους χώρους "
|
||||||
|
#~ "εργασίας σε μια επιλογή \n"
|
||||||
|
#~ " λίστα. Αντί να χρησιμοποιεί το εικονίδιο της εφαρμογής από κάθε "
|
||||||
|
#~ "παράθυρο, χρησιμοποιεί μικρές \n"
|
||||||
|
#~ " μικρογραφίες που μοιάζουν με το ίδιο το παράθυρο. \n"
|
||||||
|
#~ "\n"
|
||||||
|
#~ "Χώρος εργασίας & εικονίδια:\n"
|
||||||
|
#~ " Αυτή η λειτουργία σας επιτρέπει να κάνετε εναλλαγή μεταξύ των "
|
||||||
|
#~ "εφαρμογών του τρέχοντος \n"
|
||||||
|
#~ " χώρου εργασίας σας και σας δίνει επιπλέον τη δυνατότητα να μεταβείτε "
|
||||||
|
#~ "στην τελευταία χρησιμοποιημένη \n"
|
||||||
|
#~ " εφαρμογή του προηγούμενου χώρου εργασίας σας. Αυτό είναι πάντα το "
|
||||||
|
#~ "τελευταίο σύμβολο στη \n"
|
||||||
|
#~ " λίστα και είναι απομονωμένο από ένα διαχωριστικό/κάθετη γραμμή, εάν "
|
||||||
|
#~ "υπάρχει. \n"
|
||||||
|
#~ " Κάθε παράθυρο αντιπροσωπεύεται από εικονίδιο της εφαρμογής της. \n"
|
||||||
|
#~ "\n"
|
||||||
|
#~ "Μητρική:\n"
|
||||||
|
#~ " Αυτή η λειτουργία είναι η μητρική συμπεριφορά του GNOME 3 ή με άλλα "
|
||||||
|
#~ "λόγια: Αν κάνετε κλικ \n"
|
||||||
|
#~ " στο μητρική θέτει εκτός λειτουργίας την εναλλακτική επέκταση "
|
||||||
|
#~ "στηλοθέτη. \n"
|
||||||
|
|
||||||
|
#~ msgid "Alt Tab Behaviour"
|
||||||
|
#~ msgstr "Συμπεριφορά Alt Tab"
|
||||||
|
|
||||||
|
#~ msgid "Cancel"
|
||||||
|
#~ msgstr "Ακύρωση"
|
||||||
|
|
||||||
|
#~ msgid "Ask the user for a default behaviour if true."
|
||||||
|
#~ msgstr "Ρωτήστε τον χρήστη για μια προεπιλεγμένη συμπεριφορα εαν αληθεύει."
|
||||||
|
|
||||||
|
#~ msgid "Indicates if Alternate Tab is newly installed"
|
||||||
|
#~ msgstr "Υποδεικνύει αν ο εναλλακτικός στηλοθέτης είναι νεοεισαχθείς"
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "The algorithm used to layout thumbnails in the overview. 'grid' to use "
|
||||||
|
#~ "the default grid based algorithm, 'natural' to use another one that "
|
||||||
|
#~ "reflects more the position and size of the actual window"
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Ο αλγόριθμος που χρησιμοποιείται για την διάταξη μικρογραφιών στην "
|
||||||
|
#~ "επισκόπηση. grid («πλέγμα») να χρησιμοποιήσει τον αλγόριθμο που βασίζετε "
|
||||||
|
#~ "στο προεπιλεγμένο πλέγμα, natural («φυσικό») να χρησιμοποιήσει ένα άλλο "
|
||||||
|
#~ "που αντανακλά περισσότερο τη θέση και το μέγεθος της πραγματικού παράθυρου"
|
||||||
|
|
||||||
|
#~ msgid "Window placement strategy"
|
||||||
|
#~ msgstr "Στρατηγική τοποθέτησης παραθύρου"
|
||||||
+476
@@ -0,0 +1,476 @@
|
|||||||
|
# British English translation of gnome-shell-extensions.
|
||||||
|
# Copyright (C) 2011 gnome-shell-extensions'S COPYRIGHT HOLDER.
|
||||||
|
# This file is distributed under the same license as the gnome-shell-extensions package.
|
||||||
|
# Bruce Cowan <bruce@bcowan.me.uk>, 2011.
|
||||||
|
# Chris Leonard <cjlhomeaddress@gmail.com>, 2012.
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: gnome-shell-extensions\n"
|
||||||
|
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||||
|
"shell&keywords=I18N+L10N&component=extensions\n"
|
||||||
|
"POT-Creation-Date: 2012-09-20 13:47+0000\n"
|
||||||
|
"PO-Revision-Date: 2012-09-21 21:00-0400\n"
|
||||||
|
"Last-Translator: Chris Leonard <cjlhomeaddress@gmail.com>\n"
|
||||||
|
"Language-Team: Sugar Labs\n"
|
||||||
|
"Language: en_GB\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"X-Generator: Virtaal 0.7.1\n"
|
||||||
|
"X-Project-Style: gnome\n"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:1
|
||||||
|
msgid "The application icon mode."
|
||||||
|
msgstr "The application icon mode."
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:2
|
||||||
|
msgid ""
|
||||||
|
"Configures how the windows are shown in the switcher. Valid possibilities "
|
||||||
|
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
|
||||||
|
"only' (shows only the application icon) or 'both'."
|
||||||
|
msgstr ""
|
||||||
|
"Configures how the windows are shown in the switcher. Valid possibilities "
|
||||||
|
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
|
||||||
|
"only' (shows only the application icon) or 'both'."
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:26
|
||||||
|
msgid "Thumbnail only"
|
||||||
|
msgstr "Thumbnail only"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:27
|
||||||
|
msgid "Application icon only"
|
||||||
|
msgstr "Application icon only"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:28
|
||||||
|
msgid "Thumbnail and application icon"
|
||||||
|
msgstr "Thumbnail and application icon"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:43
|
||||||
|
msgid "Present windows as"
|
||||||
|
msgstr "Present windows as"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:68
|
||||||
|
msgid "Show only windows in the current workspace"
|
||||||
|
msgstr "Show only windows in the current workspace"
|
||||||
|
|
||||||
|
#. add the new entries
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:68
|
||||||
|
msgid "Suspend"
|
||||||
|
msgstr "Suspend"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:73
|
||||||
|
msgid "Hibernate"
|
||||||
|
msgstr "Hibernate"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:78
|
||||||
|
msgid "Power Off"
|
||||||
|
msgstr "Power Off"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:1
|
||||||
|
msgid "Enable suspending"
|
||||||
|
msgstr "Enable suspending"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:2
|
||||||
|
msgid "Control the visibility of the Suspend menu item"
|
||||||
|
msgstr "Control the visibility of the Suspend menu item"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:3
|
||||||
|
msgid "Enable hibernating"
|
||||||
|
msgstr "Enable hibernating"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:4
|
||||||
|
msgid "Control the visibility of the Hibernate menu item"
|
||||||
|
msgstr "Control the visibility of the Hibernate menu item"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1
|
||||||
|
msgid "Application and workspace list"
|
||||||
|
msgstr "Application and workspace list"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
|
||||||
|
msgid ""
|
||||||
|
"A list of strings, each containing an application id (desktop file name), "
|
||||||
|
"followed by a colon and the workspace number"
|
||||||
|
msgstr ""
|
||||||
|
"A list of strings, each containing an application id (desktop file name), "
|
||||||
|
"followed by a colon and the workspace number"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:55
|
||||||
|
msgid "Application"
|
||||||
|
msgstr "Application"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:64
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:106
|
||||||
|
msgid "Workspace"
|
||||||
|
msgstr "Workspace"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:80
|
||||||
|
msgid "Add rule"
|
||||||
|
msgstr "Add rule"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:94
|
||||||
|
msgid "Create new matching rule"
|
||||||
|
msgstr "Create new matching rule"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:98
|
||||||
|
msgid "Add"
|
||||||
|
msgstr "Add"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:600
|
||||||
|
msgid "Drag here to add favorites"
|
||||||
|
msgstr "Drag here to add favourites"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:926
|
||||||
|
msgid "New Window"
|
||||||
|
msgstr "New Window"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:928
|
||||||
|
msgid "Quit Application"
|
||||||
|
msgstr "Quit Application"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:933
|
||||||
|
msgid "Remove from Favorites"
|
||||||
|
msgstr "Remove from Favourites"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:934
|
||||||
|
msgid "Add to Favorites"
|
||||||
|
msgstr "Add to Favourites"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:1
|
||||||
|
msgid "Position of the dock"
|
||||||
|
msgstr "Position of the dock"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:2
|
||||||
|
msgid ""
|
||||||
|
"Sets the position of the dock in the screen. Allowed values are 'right' or "
|
||||||
|
"'left'"
|
||||||
|
msgstr ""
|
||||||
|
"Sets the position of the dock in the screen. Allowed values are 'right' or "
|
||||||
|
"'left'"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:3
|
||||||
|
msgid "Icon size"
|
||||||
|
msgstr "Icon size"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:4
|
||||||
|
msgid "Sets icon size of the dock."
|
||||||
|
msgstr "Sets icon size of the dock."
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:5
|
||||||
|
msgid "Enable/disable autohide"
|
||||||
|
msgstr "Enable/disable autohide"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:6
|
||||||
|
msgid "Autohide effect"
|
||||||
|
msgstr "Autohide effect"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:7
|
||||||
|
msgid ""
|
||||||
|
"Sets the effect of the hide dock. Allowed values are 'resize', 'rescale' and "
|
||||||
|
"'move'"
|
||||||
|
msgstr ""
|
||||||
|
"Sets the effect of the hide dock. Allowed values are 'resize', 'rescale' and "
|
||||||
|
"'move'"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:8
|
||||||
|
msgid "Autohide duration"
|
||||||
|
msgstr "Autohide duration"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:9
|
||||||
|
msgid "Sets the time duration of the autohide effect."
|
||||||
|
msgstr "Sets the time duration of the autohide effect."
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:10
|
||||||
|
msgid "Monitor"
|
||||||
|
msgstr "Monitor"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:11
|
||||||
|
msgid ""
|
||||||
|
"Sets monitor to display dock in. The default value (-1) is the primary "
|
||||||
|
"monitor."
|
||||||
|
msgstr ""
|
||||||
|
"Sets monitor to display dock in. The default value (-1) is the primary "
|
||||||
|
"monitor."
|
||||||
|
|
||||||
|
#: ../extensions/drive-menu/extension.js:56
|
||||||
|
msgid "Removable devices"
|
||||||
|
msgstr "Removable devices"
|
||||||
|
|
||||||
|
#: ../extensions/drive-menu/extension.js:67
|
||||||
|
msgid "Open file manager"
|
||||||
|
msgstr "Open file manager"
|
||||||
|
|
||||||
|
#: ../extensions/example/extension.js:17
|
||||||
|
msgid "Hello, world!"
|
||||||
|
msgstr "Hello, world!"
|
||||||
|
|
||||||
|
#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:1
|
||||||
|
msgid "Alternative greeting text."
|
||||||
|
msgstr "Alternative greeting text."
|
||||||
|
|
||||||
|
#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:2
|
||||||
|
msgid ""
|
||||||
|
"If not empty, it contains the text that will be shown when clicking on the "
|
||||||
|
"panel."
|
||||||
|
msgstr ""
|
||||||
|
"If not empty, it contains the text that will be shown when clicking on the "
|
||||||
|
"panel."
|
||||||
|
|
||||||
|
#. TRANSLATORS: Example is the name of the extension, should not be
|
||||||
|
#. translated
|
||||||
|
#: ../extensions/example/prefs.js:30
|
||||||
|
msgid ""
|
||||||
|
"Example aims to show how to build well behaved extensions for the Shell and "
|
||||||
|
"as such it has little functionality on its own.\n"
|
||||||
|
"Nevertheless it's possible to customize the greeting message."
|
||||||
|
msgstr ""
|
||||||
|
"Example aims to show how to build well behaved extensions for the Shell and "
|
||||||
|
"as such it has little functionality on its own.\n"
|
||||||
|
"Nevertheless it's possible to customize the greeting message."
|
||||||
|
|
||||||
|
#: ../extensions/example/prefs.js:36
|
||||||
|
msgid "Message:"
|
||||||
|
msgstr "Message:"
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:226
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is away."
|
||||||
|
msgstr "%s is away."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:229
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is offline."
|
||||||
|
msgstr "%s is offline."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:232
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is online."
|
||||||
|
msgstr "%s is online."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:235
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is busy."
|
||||||
|
msgstr "%s is busy."
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1
|
||||||
|
msgid "Use more screen for windows"
|
||||||
|
msgstr "Use more screen for windows"
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2
|
||||||
|
msgid ""
|
||||||
|
"Try to use more screen for placing window thumbnails by adapting to screen "
|
||||||
|
"aspect ratio, and consolidating them further to reduce the bounding box. "
|
||||||
|
"This setting applies only with the natural placement strategy."
|
||||||
|
msgstr ""
|
||||||
|
"Try to use more screen for placing window thumbnails by adapting to screen "
|
||||||
|
"aspect ratio, and consolidating them further to reduce the bounding box. "
|
||||||
|
"This setting applies only with the natural placement strategy."
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3
|
||||||
|
msgid "Place window captions on top"
|
||||||
|
msgstr "Place window captions on top"
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4
|
||||||
|
msgid ""
|
||||||
|
"If true, place window captions on top the respective thumbnail, overriding "
|
||||||
|
"shell default of placing it at the bottom. Changing this setting requires "
|
||||||
|
"restarting the shell to have any effect."
|
||||||
|
msgstr ""
|
||||||
|
"If true, place window captions on top the respective thumbnail, overriding "
|
||||||
|
"shell default of placing it at the bottom. Changing this setting requires "
|
||||||
|
"restarting the shell to have any effect."
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/extension.js:46
|
||||||
|
msgid "Places"
|
||||||
|
msgstr "Places"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/extension.js:47
|
||||||
|
msgid "Devices"
|
||||||
|
msgstr "Devices"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/extension.js:48
|
||||||
|
msgid "Bookmarks"
|
||||||
|
msgstr "Bookmarks"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/extension.js:49
|
||||||
|
msgid "Network"
|
||||||
|
msgstr "Network"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/placeDisplay.js:48
|
||||||
|
#, c-format
|
||||||
|
msgid "Failed to launch \"%s\""
|
||||||
|
msgstr "Failed to launch \"%s\""
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/placeDisplay.js:121
|
||||||
|
msgid "Home"
|
||||||
|
msgstr "Home"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/placeDisplay.js:184
|
||||||
|
msgid "File System"
|
||||||
|
msgstr "File System"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/placeDisplay.js:188
|
||||||
|
msgid "Browse network"
|
||||||
|
msgstr "Browse network"
|
||||||
|
|
||||||
|
#: ../extensions/systemMonitor/extension.js:213
|
||||||
|
msgid "CPU"
|
||||||
|
msgstr "CPU"
|
||||||
|
|
||||||
|
#: ../extensions/systemMonitor/extension.js:266
|
||||||
|
msgid "Memory"
|
||||||
|
msgstr "Memory"
|
||||||
|
|
||||||
|
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:1
|
||||||
|
msgid "Theme name"
|
||||||
|
msgstr "Theme name"
|
||||||
|
|
||||||
|
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
|
||||||
|
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
|
||||||
|
msgstr "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
|
||||||
|
|
||||||
|
#: ../extensions/workspace-indicator/extension.js:30
|
||||||
|
msgid "Workspace Indicator"
|
||||||
|
msgstr "Workspace Indicator"
|
||||||
|
|
||||||
|
#: ../extensions/workspace-indicator/prefs.js:141
|
||||||
|
msgid "Workspace names:"
|
||||||
|
msgstr "Workspace names:"
|
||||||
|
|
||||||
|
#: ../extensions/workspace-indicator/prefs.js:152
|
||||||
|
msgid "Name"
|
||||||
|
msgstr "Name"
|
||||||
|
|
||||||
|
#: ../extensions/workspace-indicator/prefs.js:186
|
||||||
|
#, c-format
|
||||||
|
msgid "Workspace %d"
|
||||||
|
msgstr "Workspace %d"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:30
|
||||||
|
msgid "Normal"
|
||||||
|
msgstr "Normal"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:31
|
||||||
|
msgid "Left"
|
||||||
|
msgstr "Left"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:32
|
||||||
|
msgid "Right"
|
||||||
|
msgstr "Right"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:33
|
||||||
|
msgid "Upside-down"
|
||||||
|
msgstr "Upside-down"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:50
|
||||||
|
msgid "Display"
|
||||||
|
msgstr "Display"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:80
|
||||||
|
msgid "Display Settings"
|
||||||
|
msgstr "Display Settings"
|
||||||
|
|
||||||
|
#~ msgid "Do Not Disturb"
|
||||||
|
#~ msgstr "Do Not Disturb"
|
||||||
|
|
||||||
|
#~ msgid "Online Accounts"
|
||||||
|
#~ msgstr "Online Accounts"
|
||||||
|
|
||||||
|
#~ msgid "Lock Screen"
|
||||||
|
#~ msgstr "Lock Screen"
|
||||||
|
|
||||||
|
#~ msgid "Switch User"
|
||||||
|
#~ msgstr "Switch User"
|
||||||
|
|
||||||
|
#~ msgid "Log Out..."
|
||||||
|
#~ msgstr "Log Out…"
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "This is the first time you use the Alternate Tab extension. \n"
|
||||||
|
#~ "Please choose your preferred behaviour:\n"
|
||||||
|
#~ "\n"
|
||||||
|
#~ "All & Thumbnails:\n"
|
||||||
|
#~ " This mode presents all applications from all workspaces in one "
|
||||||
|
#~ "selection \n"
|
||||||
|
#~ " list. Instead of using the application icon of every window, it uses "
|
||||||
|
#~ "small \n"
|
||||||
|
#~ " thumbnails resembling the window itself. \n"
|
||||||
|
#~ "\n"
|
||||||
|
#~ "Workspace & Icons:\n"
|
||||||
|
#~ " This mode let's you switch between the applications of your current \n"
|
||||||
|
#~ " workspace and gives you additionally the option to switch to the last "
|
||||||
|
#~ "used \n"
|
||||||
|
#~ " application of your previous workspace. This is always the last "
|
||||||
|
#~ "symbol in \n"
|
||||||
|
#~ " the list and is segregated by a separator/vertical line if "
|
||||||
|
#~ "available. \n"
|
||||||
|
#~ " Every window is represented by its application icon. \n"
|
||||||
|
#~ "\n"
|
||||||
|
#~ "Native:\n"
|
||||||
|
#~ " This mode is the native GNOME 3 behaviour or in other words: "
|
||||||
|
#~ "Clicking \n"
|
||||||
|
#~ " native switches the Alternate Tab extension off. \n"
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "This is the first time you use the Alternate Tab extension. \n"
|
||||||
|
#~ "Please choose your preferred behaviour:\n"
|
||||||
|
#~ "\n"
|
||||||
|
#~ "All & Thumbnails:\n"
|
||||||
|
#~ " This mode presents all applications from all workspaces in one "
|
||||||
|
#~ "selection list. Instead of using the application icon of every "
|
||||||
|
#~ "window, it uses small \n"
|
||||||
|
#~ " thumbnails resembling the window itself. \n"
|
||||||
|
#~ "\n"
|
||||||
|
#~ "Workspace & Icons:\n"
|
||||||
|
#~ " This mode lets you switch between the applications of your current \n"
|
||||||
|
#~ " workspace and additionally gives you the option to switch to the last "
|
||||||
|
#~ "used \n"
|
||||||
|
#~ " application of your previous workspace. This is always the last "
|
||||||
|
#~ "symbol in \n"
|
||||||
|
#~ " the list and is segregated by a separator/vertical line if "
|
||||||
|
#~ "available. \n"
|
||||||
|
#~ " Every window is represented by its application icon. \n"
|
||||||
|
#~ "\n"
|
||||||
|
#~ "Native:\n"
|
||||||
|
#~ " This mode is the native GNOME 3 behaviour or in other words: "
|
||||||
|
#~ "Clicking \n"
|
||||||
|
#~ " native switches the Alternate Tab extension off. \n"
|
||||||
|
|
||||||
|
#~ msgid "Alt Tab Behaviour"
|
||||||
|
#~ msgstr "Alt Tab Behaviour"
|
||||||
|
|
||||||
|
#~ msgid "Native"
|
||||||
|
#~ msgstr "Native"
|
||||||
|
|
||||||
|
#~ msgid "Cancel"
|
||||||
|
#~ msgstr "Cancel"
|
||||||
|
|
||||||
|
#~ msgid "Ask the user for a default behaviour if true."
|
||||||
|
#~ msgstr "Ask the user for a default behaviour if true."
|
||||||
|
|
||||||
|
#~ msgid "Indicates if Alternate Tab is newly installed"
|
||||||
|
#~ msgstr "Indicates if Alternate Tab is newly installed"
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "Sets the Alt-Tab behaviour. Possible values are: native, all_thumbnails "
|
||||||
|
#~ "and workspace_icons."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Sets the Alt-Tab behaviour. Possible values are: native, all_thumbnails "
|
||||||
|
#~ "and workspace_icons."
|
||||||
|
|
||||||
|
#~ msgid "The alt tab behaviour."
|
||||||
|
#~ msgstr "The alt tab behaviour."
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "The algorithm used to layout thumbnails in the overview. 'grid' to use "
|
||||||
|
#~ "the default grid based algorithm, 'natural' to use another one that "
|
||||||
|
#~ "reflects more the position and size of the actual window"
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "The algorithm used to layout thumbnails in the overview. 'grid' to use "
|
||||||
|
#~ "the default grid based algorithm, 'natural' to use another one that "
|
||||||
|
#~ "reflects more the position and size of the actual window"
|
||||||
|
|
||||||
|
#~ msgid "Window placement strategy"
|
||||||
|
#~ msgstr "Window placement strategy"
|
||||||
|
|
||||||
|
#~ msgid "Configure display settings..."
|
||||||
|
#~ msgstr "Configure display settings…"
|
||||||
@@ -0,0 +1,245 @@
|
|||||||
|
# Esperanto translation for gnome-shell-extensions.
|
||||||
|
# Copyright (C) 2011 Free Software Foundation, Inc.
|
||||||
|
# This file is distributed under the same license as the gnome-shell-extensions package.
|
||||||
|
# Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>, 2011.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: gnome-shell-extensions master\n"
|
||||||
|
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||||
|
"shell&keywords=I18N+L10N&component=extensions\n"
|
||||||
|
"POT-Creation-Date: 2011-12-28 20:45+0000\n"
|
||||||
|
"PO-Revision-Date: 2011-12-29 13:44+0100\n"
|
||||||
|
"Last-Translator: Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>\n"
|
||||||
|
"Language-Team: Esperanto <gnome-l10n-eo@lists.launchpad.net>\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bits\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||||
|
|
||||||
|
#. add the new entries
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:68
|
||||||
|
msgid "Suspend"
|
||||||
|
msgstr "Dormeti"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:73
|
||||||
|
msgid "Hibernate"
|
||||||
|
msgstr "Pasivumigi"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:78
|
||||||
|
msgid "Power Off..."
|
||||||
|
msgstr "Elŝalti..."
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/extension.js:54
|
||||||
|
msgid ""
|
||||||
|
"This is the first time you use the Alternate Tab extension. \n"
|
||||||
|
"Please choose your preferred behaviour:\n"
|
||||||
|
"\n"
|
||||||
|
"All & Thumbnails:\n"
|
||||||
|
" This mode presents all applications from all workspaces in one "
|
||||||
|
"selection \n"
|
||||||
|
" list. Instead of using the application icon of every window, it uses "
|
||||||
|
"small \n"
|
||||||
|
" thumbnails resembling the window itself. \n"
|
||||||
|
"\n"
|
||||||
|
"Workspace & Icons:\n"
|
||||||
|
" This mode let's you switch between the applications of your current \n"
|
||||||
|
" workspace and gives you additionally the option to switch to the last "
|
||||||
|
"used \n"
|
||||||
|
" application of your previous workspace. This is always the last symbol "
|
||||||
|
"in \n"
|
||||||
|
" the list and is segregated by a separator/vertical line if available. \n"
|
||||||
|
" Every window is represented by its application icon. \n"
|
||||||
|
"\n"
|
||||||
|
"If you whish to revert to the default behavior for the Alt-Tab switcher, "
|
||||||
|
"just\n"
|
||||||
|
"disable the extension from extensions.gnome.org or the Advanced Settings "
|
||||||
|
"application."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/extension.js:295
|
||||||
|
msgid "Alt Tab Behaviour"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/extension.js:311
|
||||||
|
msgid "All & Thumbnails"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/extension.js:318
|
||||||
|
msgid "Workspace & Icons"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/extension.js:325
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr "Nuligi"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:1
|
||||||
|
msgid "Ask the user for a default behaviour if true."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:2
|
||||||
|
msgid "Indicates if Alternate Tab is newly installed"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:3
|
||||||
|
msgid ""
|
||||||
|
"Sets the Alt-Tab behaviour. Possible values are: native, all_thumbnails and "
|
||||||
|
"workspace_icons."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:4
|
||||||
|
msgid "The alt tab behaviour."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1
|
||||||
|
msgid ""
|
||||||
|
"A list of strings, each containing an application id (desktop file name), "
|
||||||
|
"followed by a colon and the workspace number"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
|
||||||
|
msgid "Application and workspace list"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:561
|
||||||
|
msgid "Drag here to add favorites"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:896
|
||||||
|
msgid "New Window"
|
||||||
|
msgstr "Nova fenestro"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:898
|
||||||
|
msgid "Quit Application"
|
||||||
|
msgstr "Ĉesi aplikaĵon"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:903
|
||||||
|
msgid "Remove from Favorites"
|
||||||
|
msgstr "Forigi de la preferataj aplikaĵoj"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:904
|
||||||
|
msgid "Add to Favorites"
|
||||||
|
msgstr "Aldoni al la preferataj aplikaĵoj"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:1
|
||||||
|
msgid "Autohide duration"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:2
|
||||||
|
msgid "Autohide effect"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:3
|
||||||
|
msgid "Enable/disable autohide"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:4
|
||||||
|
msgid "Icon size"
|
||||||
|
msgstr "Piktogramgrando"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:5
|
||||||
|
msgid "Position of the dock"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:6
|
||||||
|
msgid "Sets icon size of the dock."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:7
|
||||||
|
msgid ""
|
||||||
|
"Sets the effect of the hide dock. Allowed values are 'resize', 'rescale' and "
|
||||||
|
"'move'"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:8
|
||||||
|
msgid ""
|
||||||
|
"Sets the position of the dock in the screen. Allowed values are 'right' or "
|
||||||
|
"'left'"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:9
|
||||||
|
msgid "Sets the time duration of the autohide effect."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/drive-menu/extension.js:69
|
||||||
|
msgid "Open file manager"
|
||||||
|
msgstr "Malfermi dosieradministrilo"
|
||||||
|
|
||||||
|
#: ../extensions/example/extension.js:11
|
||||||
|
msgid "Hello, world!"
|
||||||
|
msgstr "Saluton, mondo!"
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:227
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is away."
|
||||||
|
msgstr "%s estas fora."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:230
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is offline."
|
||||||
|
msgstr "%s estas nekonektita."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:233
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is online."
|
||||||
|
msgstr "%s estas konektita."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:236
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is busy."
|
||||||
|
msgstr "%s estas okupata."
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1
|
||||||
|
msgid ""
|
||||||
|
"If true, place window captions on top the respective thumbnail, overriding "
|
||||||
|
"shell default of placing it at the bottom. Changing this setting requires "
|
||||||
|
"restarting the shell to have any effect."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2
|
||||||
|
msgid "Place window captions on top"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3
|
||||||
|
msgid ""
|
||||||
|
"Try to use more screen for placing window thumbnails by adapting to screen "
|
||||||
|
"aspect ratio, and consolidating them further to reduce the bounding box. "
|
||||||
|
"This setting applies only with the natural placement strategy."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4
|
||||||
|
msgid "Use more screen for windows"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/extension.js:36
|
||||||
|
msgid "Removable Devices"
|
||||||
|
msgstr "Demeteblaj aparatoj"
|
||||||
|
|
||||||
|
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:1
|
||||||
|
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
|
||||||
|
msgid "Theme name"
|
||||||
|
msgstr "Etosnomo"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:26
|
||||||
|
msgid "Normal"
|
||||||
|
msgstr "Normale"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:27
|
||||||
|
msgid "Left"
|
||||||
|
msgstr "Maldekstre"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:28
|
||||||
|
msgid "Right"
|
||||||
|
msgstr "Dekstre"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:29
|
||||||
|
msgid "Upside-down"
|
||||||
|
msgstr "Renversite"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:78
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Configure display settings..."
|
||||||
|
msgstr "Agordi ekranagordojn..."
|
||||||
@@ -0,0 +1,538 @@
|
|||||||
|
# Spanish translation for gnome-shell-extensions.
|
||||||
|
# Copyright (C) 2011 gnome-shell-extensions's COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the gnome-shell-extensions package.
|
||||||
|
# Jorge González <jorgegonz@svn.gnome.org>, 2011.
|
||||||
|
# Nicolás Satragno <nsatragno@gmail.com>, 2011.
|
||||||
|
#
|
||||||
|
# Daniel Mustieles <daniel.mustieles@gmail.com>, 2011, 2012.
|
||||||
|
, 2012.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: gnome-shell-extensions master\n"
|
||||||
|
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||||
|
"shell&keywords=I18N+L10N&component=extensions\n"
|
||||||
|
"POT-Creation-Date: 2012-12-05 14:20+0000\n"
|
||||||
|
"PO-Revision-Date: 2012-12-05 19:20+0100\n"
|
||||||
|
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
|
||||||
|
"Language-Team: Español; Castellano <gnome-es-list@gnome.org>\n"
|
||||||
|
"Language: \n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"X-Generator: Gtranslator 2.91.5\n"
|
||||||
|
|
||||||
|
#: ../data/gnome-classic.desktop.in.h:1
|
||||||
|
#: ../data/gnome-classic.session.desktop.in.in.h:1
|
||||||
|
msgid "GNOME Classic"
|
||||||
|
msgstr "GNOME clásico"
|
||||||
|
|
||||||
|
#: ../data/gnome-classic.desktop.in.h:2
|
||||||
|
msgid "This session logs you into GNOME Classic"
|
||||||
|
msgstr "Esta sesión inicia GNOME clásico"
|
||||||
|
|
||||||
|
#: ../data/gnome-shell-classic.desktop.in.in.h:1
|
||||||
|
msgid "GNOME Shell Classic"
|
||||||
|
msgstr "GNOME Shell clásico"
|
||||||
|
|
||||||
|
#: ../data/gnome-shell-classic.desktop.in.in.h:2
|
||||||
|
#| msgid "Thumbnail and application icon"
|
||||||
|
msgid "Window management and application launching"
|
||||||
|
msgstr "Gestión de ventanas e inicio de aplicaciones"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:1
|
||||||
|
msgid "The application icon mode."
|
||||||
|
msgstr "El modo de icono de la aplicación."
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:2
|
||||||
|
msgid ""
|
||||||
|
"Configures how the windows are shown in the switcher. Valid possibilities "
|
||||||
|
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
|
||||||
|
"only' (shows only the application icon) or 'both'."
|
||||||
|
msgstr ""
|
||||||
|
"Configura cómo se muestran las ventanas en el intercambiador. Las opciones "
|
||||||
|
"posibles son «thumbnail-only» (muestra una miniatura de la ventana, «app-"
|
||||||
|
"icon-only» (sólo muestra el icono de la aplicación) o «both» (se muestran "
|
||||||
|
"ambas cosas)."
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:26
|
||||||
|
msgid "Thumbnail only"
|
||||||
|
msgstr "Sólo miniaturas"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:27
|
||||||
|
msgid "Application icon only"
|
||||||
|
msgstr "Sólo icono de la aplicación"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:28
|
||||||
|
msgid "Thumbnail and application icon"
|
||||||
|
msgstr "Miniatura e icono de la aplicación"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:43
|
||||||
|
msgid "Present windows as"
|
||||||
|
msgstr "Presentar ventanas como"
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/prefs.js:68
|
||||||
|
msgid "Show only windows in the current workspace"
|
||||||
|
msgstr "Mostrar ventanas solamente en el área de trabajo actual"
|
||||||
|
|
||||||
|
#. add the new entries
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:144
|
||||||
|
msgid "Suspend"
|
||||||
|
msgstr "Suspender"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:147
|
||||||
|
msgid "Hibernate"
|
||||||
|
msgstr "Hibernar"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:150
|
||||||
|
msgid "Power Off"
|
||||||
|
msgstr "Apagar"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:1
|
||||||
|
msgid "Enable suspending"
|
||||||
|
msgstr "Activar la suspensión"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:2
|
||||||
|
msgid "Control the visibility of the Suspend menu item"
|
||||||
|
msgstr "Controla la visibilidad del elemento de menú «Suspender»"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:3
|
||||||
|
msgid "Enable hibernating"
|
||||||
|
msgstr "Activar la hibernación"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/org.gnome.shell.extensions.alternative-status-menu.gschema.xml.in.h:4
|
||||||
|
msgid "Control the visibility of the Hibernate menu item"
|
||||||
|
msgstr "Controla la visibilidad del elemento de menú «Hibernar»"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1
|
||||||
|
msgid "Application and workspace list"
|
||||||
|
msgstr "Lista de aplicaciones y áreas de trabajo"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
|
||||||
|
msgid ""
|
||||||
|
"A list of strings, each containing an application id (desktop file name), "
|
||||||
|
"followed by a colon and the workspace number"
|
||||||
|
msgstr ""
|
||||||
|
"Una lista de cadenas, conteniendo cada una un ID de aplicación (nombre de "
|
||||||
|
"archivo de escritorio), seguido de dos puntos y el número del área de trabajo"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:55
|
||||||
|
msgid "Application"
|
||||||
|
msgstr "Aplicación"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:64
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:106
|
||||||
|
msgid "Workspace"
|
||||||
|
msgstr "Área de trabajo"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:80
|
||||||
|
msgid "Add rule"
|
||||||
|
msgstr "Añadir regla"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:94
|
||||||
|
msgid "Create new matching rule"
|
||||||
|
msgstr "Crear regla de coincidencia nueva"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/prefs.js:98
|
||||||
|
msgid "Add"
|
||||||
|
msgstr "Añadir"
|
||||||
|
|
||||||
|
#: ../extensions/drive-menu/extension.js:72
|
||||||
|
#, c-format
|
||||||
|
msgid "Ejecting drive '%s' failed:"
|
||||||
|
msgstr "Falló al expulsar el dispositivo «%s»"
|
||||||
|
|
||||||
|
#: ../extensions/drive-menu/extension.js:89
|
||||||
|
msgid "Removable devices"
|
||||||
|
msgstr "Dispositivos extraíbles"
|
||||||
|
|
||||||
|
#: ../extensions/drive-menu/extension.js:106
|
||||||
|
msgid "Open File"
|
||||||
|
msgstr "Abrir archivo"
|
||||||
|
|
||||||
|
#: ../extensions/example/extension.js:17
|
||||||
|
msgid "Hello, world!"
|
||||||
|
msgstr "¡Hola, mundo!"
|
||||||
|
|
||||||
|
#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:1
|
||||||
|
msgid "Alternative greeting text."
|
||||||
|
msgstr "Texto de bienvenida alternativo"
|
||||||
|
|
||||||
|
#: ../extensions/example/org.gnome.shell.extensions.example.gschema.xml.in.h:2
|
||||||
|
msgid ""
|
||||||
|
"If not empty, it contains the text that will be shown when clicking on the "
|
||||||
|
"panel."
|
||||||
|
msgstr ""
|
||||||
|
"Si no está vacío, contiene el texto que se desplegará al pulsar sobre el "
|
||||||
|
"panel."
|
||||||
|
|
||||||
|
#. TRANSLATORS: Example is the name of the extension, should not be
|
||||||
|
#. translated
|
||||||
|
#: ../extensions/example/prefs.js:30
|
||||||
|
msgid ""
|
||||||
|
"Example aims to show how to build well behaved extensions for the Shell and "
|
||||||
|
"as such it has little functionality on its own.\n"
|
||||||
|
"Nevertheless it's possible to customize the greeting message."
|
||||||
|
msgstr ""
|
||||||
|
"«Example» tiene por objeto mostrar cómo construir extensiones de buen "
|
||||||
|
"comportamiento para la Shell y por eso tiene poca funcionalidad por sí "
|
||||||
|
"solo.\n"
|
||||||
|
"Sin embargo, es posible personalizar el mensaje de bienvenida."
|
||||||
|
|
||||||
|
#: ../extensions/example/prefs.js:36
|
||||||
|
msgid "Message:"
|
||||||
|
msgstr "Mensaje:"
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1
|
||||||
|
msgid "Use more screen for windows"
|
||||||
|
msgstr "Usar más pantalla para las ventanas"
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2
|
||||||
|
msgid ""
|
||||||
|
"Try to use more screen for placing window thumbnails by adapting to screen "
|
||||||
|
"aspect ratio, and consolidating them further to reduce the bounding box. "
|
||||||
|
"This setting applies only with the natural placement strategy."
|
||||||
|
msgstr ""
|
||||||
|
"Intente utilizar más espacio para situar las miniaturas, adaptándolas a la "
|
||||||
|
"forma de la pantalla, y consolidarlas aún más para reducir el área ocupada. "
|
||||||
|
"Esta opción sólo se aplica a la estrategia de posicionamiento «natural»."
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3
|
||||||
|
msgid "Place window captions on top"
|
||||||
|
msgstr "Situar los títulos de ventanas arriba"
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4
|
||||||
|
msgid ""
|
||||||
|
"If true, place window captions on top the respective thumbnail, overriding "
|
||||||
|
"shell default of placing it at the bottom. Changing this setting requires "
|
||||||
|
"restarting the shell to have any effect."
|
||||||
|
msgstr ""
|
||||||
|
"Si es cierto, situar los títulos de las ventanas encima de las miniaturas "
|
||||||
|
"correspondientes, cambiando el comportamiento predeterminado de shell, que "
|
||||||
|
"los sitúa por debajo. Cambiar esta configuración requiere reiniciar la shell "
|
||||||
|
"para que tenga efecto."
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/extension.js:46
|
||||||
|
msgid "Places"
|
||||||
|
msgstr "Lugares"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/extension.js:47
|
||||||
|
msgid "Devices"
|
||||||
|
msgstr "Dispositivos"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/extension.js:48
|
||||||
|
msgid "Bookmarks"
|
||||||
|
msgstr "Marcadores"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/extension.js:49
|
||||||
|
msgid "Network"
|
||||||
|
msgstr "Red"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/placeDisplay.js:48
|
||||||
|
#, c-format
|
||||||
|
msgid "Failed to launch \"%s\""
|
||||||
|
msgstr "Falló al lanzar «%s»"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/placeDisplay.js:121
|
||||||
|
msgid "Home"
|
||||||
|
msgstr "Carpeta personal"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/placeDisplay.js:195
|
||||||
|
msgid "File System"
|
||||||
|
msgstr "Sistema de archivos"
|
||||||
|
|
||||||
|
#: ../extensions/places-menu/placeDisplay.js:199
|
||||||
|
msgid "Browse network"
|
||||||
|
msgstr "Examinar la red"
|
||||||
|
|
||||||
|
#: ../extensions/systemMonitor/extension.js:213
|
||||||
|
msgid "CPU"
|
||||||
|
msgstr "CPU"
|
||||||
|
|
||||||
|
#: ../extensions/systemMonitor/extension.js:266
|
||||||
|
msgid "Memory"
|
||||||
|
msgstr "Memoria"
|
||||||
|
|
||||||
|
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:1
|
||||||
|
msgid "Theme name"
|
||||||
|
msgstr "Nombre del tema"
|
||||||
|
|
||||||
|
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
|
||||||
|
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
|
||||||
|
msgstr "El nombre del tema, que se carga desde ~/.themes/nombre/gnome-shell"
|
||||||
|
|
||||||
|
#: ../extensions/workspace-indicator/extension.js:30
|
||||||
|
msgid "Workspace Indicator"
|
||||||
|
msgstr "Indicador de área de trabajo"
|
||||||
|
|
||||||
|
#: ../extensions/workspace-indicator/prefs.js:141
|
||||||
|
msgid "Workspace names:"
|
||||||
|
msgstr "Nombres de los áreas de trabajo:"
|
||||||
|
|
||||||
|
#: ../extensions/workspace-indicator/prefs.js:152
|
||||||
|
msgid "Name"
|
||||||
|
msgstr "Nombre"
|
||||||
|
|
||||||
|
#: ../extensions/workspace-indicator/prefs.js:186
|
||||||
|
#, c-format
|
||||||
|
msgid "Workspace %d"
|
||||||
|
msgstr "Área de trabajo %d"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:30
|
||||||
|
msgid "Normal"
|
||||||
|
msgstr "Normal"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:31
|
||||||
|
msgid "Left"
|
||||||
|
msgstr "Izquierda"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:32
|
||||||
|
msgid "Right"
|
||||||
|
msgstr "Derecha"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:33
|
||||||
|
msgid "Upside-down"
|
||||||
|
msgstr "Hacia abajo"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:50
|
||||||
|
msgid "Display"
|
||||||
|
msgstr "Pantalla"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:80
|
||||||
|
msgid "Display Settings"
|
||||||
|
msgstr "Configuración de pantalla"
|
||||||
|
|
||||||
|
#~ msgid "Drag here to add favorites"
|
||||||
|
#~ msgstr "Arrastrar aquí para añadir a favoritos"
|
||||||
|
|
||||||
|
#~ msgid "New Window"
|
||||||
|
#~ msgstr "Ventana nueva"
|
||||||
|
|
||||||
|
#~ msgid "Quit Application"
|
||||||
|
#~ msgstr "Salir de la aplicación"
|
||||||
|
|
||||||
|
#~ msgid "Remove from Favorites"
|
||||||
|
#~ msgstr "Quitar de favoritos"
|
||||||
|
|
||||||
|
#~ msgid "Add to Favorites"
|
||||||
|
#~ msgstr "Añadir a favoritos"
|
||||||
|
|
||||||
|
#~ msgid "Position of the dock"
|
||||||
|
#~ msgstr "Posición del tablero"
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "Sets the position of the dock in the screen. Allowed values are 'right' "
|
||||||
|
#~ "or 'left'"
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Configura la posición del tablero en la pantalla. Los valores permitidos "
|
||||||
|
#~ "son «right» (derecha) o «left» (izquierda)"
|
||||||
|
|
||||||
|
#~ msgid "Icon size"
|
||||||
|
#~ msgstr "Tamaño del icono"
|
||||||
|
|
||||||
|
#~ msgid "Sets icon size of the dock."
|
||||||
|
#~ msgstr "Configura el tamaño de los íconos del tablero."
|
||||||
|
|
||||||
|
#~ msgid "Enable/disable autohide"
|
||||||
|
#~ msgstr "Activar/desactivar ocultación automática"
|
||||||
|
|
||||||
|
#~ msgid "Autohide effect"
|
||||||
|
#~ msgstr "Efecto de ocultación automática"
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "Sets the effect of the hide dock. Allowed values are 'resize', 'rescale' "
|
||||||
|
#~ "and 'move'"
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Establece el efecto de ocultación del tablero. Los valores permitidos son "
|
||||||
|
#~ "«resize» (redimensionar) y «rescale» (re-escalar) y «move» (mover)"
|
||||||
|
|
||||||
|
#~ msgid "Autohide duration"
|
||||||
|
#~ msgstr "Duración de la ocultación automática"
|
||||||
|
|
||||||
|
#~ msgid "Sets the time duration of the autohide effect."
|
||||||
|
#~ msgstr "Configura la duración del efecto de ocultación automática."
|
||||||
|
|
||||||
|
#~ msgid "Monitor"
|
||||||
|
#~ msgstr "Pantalla"
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "Sets monitor to display dock in. The default value (-1) is the primary "
|
||||||
|
#~ "monitor."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Establece la pantalla en la que mostrar el tablero. El valor "
|
||||||
|
#~ "predeterminado es (-1), que es la pantalla principal."
|
||||||
|
|
||||||
|
#~ msgid "%s is away."
|
||||||
|
#~ msgstr "%s no está disponible."
|
||||||
|
|
||||||
|
#~ msgid "%s is offline."
|
||||||
|
#~ msgstr "%s está desconectado."
|
||||||
|
|
||||||
|
#~ msgid "%s is online."
|
||||||
|
#~ msgstr "%s está conectado."
|
||||||
|
|
||||||
|
#~ msgid "%s is busy."
|
||||||
|
#~ msgstr "%s está ocupado."
|
||||||
|
|
||||||
|
#~ msgid "Removable Devices"
|
||||||
|
#~ msgstr "Dispositivos extraíbles"
|
||||||
|
|
||||||
|
#~ msgid "Configure display settings..."
|
||||||
|
#~ msgstr "Configurar las opciones de pantalla…"
|
||||||
|
|
||||||
|
#~ msgid "The alt tab behaviour."
|
||||||
|
#~ msgstr "El comportamiento de Alt+Tab."
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "Sets the Alt-Tab behaviour. Possible values are: all_thumbnails and "
|
||||||
|
#~ "workspace_icons. See the configuration dialogs for details."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Establece el comportamiento de Alt+Tab. Los valores posibles son: "
|
||||||
|
#~ "«native» (nativo), «all_thumbnails» (todo y miniaturas) y "
|
||||||
|
#~ "«workspace_icons» (iconos de áreas de trabajo). Para obtener información "
|
||||||
|
#~ "más detallada, consulte la configuración de los diálogos "
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "This mode presents all applications from all workspaces in one selection "
|
||||||
|
#~ "list. Instead of using the application icon of every window, it uses "
|
||||||
|
#~ "small thumbnails resembling the window itself."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Este modo presenta todas las aplicaciones de todas las áreas de trabajo "
|
||||||
|
#~ "en una lista de selección. En lugar de usar el icono de aplicación de "
|
||||||
|
#~ "cada ventana, usa pequeñas miniaturas que se asemejan a la propia ventana."
|
||||||
|
|
||||||
|
#~ msgid "Workspace & Icons"
|
||||||
|
#~ msgstr "Área de trabajo e iconos"
|
||||||
|
|
||||||
|
#~| msgid ""
|
||||||
|
#~| "This mode let's you switch between the applications of your current "
|
||||||
|
#~| "workspace and gives you additionally the option to switch to the last "
|
||||||
|
#~| "used application of your previous workspace. This is always the last "
|
||||||
|
#~| "symbol in the list and is segregated by a separator/vertical line if "
|
||||||
|
#~| "available. \n"
|
||||||
|
#~| "Every window is represented by its application icon."
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "This mode lets you switch between the applications of your current "
|
||||||
|
#~ "workspace and gives you additionally the option to switch to the last "
|
||||||
|
#~ "used application of your previous workspace. This is always the last "
|
||||||
|
#~ "symbol in the list and is separated by a separator/vertical line if "
|
||||||
|
#~ "available. \n"
|
||||||
|
#~ "Every window is represented by its application icon."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Este modo le permite alternar entre las aplicaciones de su área de "
|
||||||
|
#~ "trabajo actual y le da la opción de cambiar a la última aplicación "
|
||||||
|
#~ "utilizada de su área de trabajo anterior. Este siempre es el último "
|
||||||
|
#~ "símbolo de la lista y está separado por un separador/línea vertical si "
|
||||||
|
#~ "está disponible.\n"
|
||||||
|
#~ "Cada ventana está representada por su icono de aplicación."
|
||||||
|
|
||||||
|
#~ msgid "Move current selection to front before closing the popup"
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Mover la selección actual al frente antes de cerrar la ventana emergente"
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "The Alternate Tab can be used in different modes, that affect the way "
|
||||||
|
#~ "windows are chosen and presented."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "La combinación de teclas Alt+Tab se puede usar en diferentes modos, que "
|
||||||
|
#~ "afectan la manera en que se eligen y presentan las ventanas."
|
||||||
|
|
||||||
|
#~ msgid "Indicates if Alternate Tab is newly installed"
|
||||||
|
#~ msgstr "Indica si se ha instalado Alt+Tab recientemente"
|
||||||
|
|
||||||
|
#~ msgid "Ask the user for a default behaviour if true."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Si es cierto, preguntar al usuario el comportamiento predeterminado."
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "This is the first time you use the Alternate Tab extension. \n"
|
||||||
|
#~ "Please choose your preferred behaviour:\n"
|
||||||
|
#~ "\n"
|
||||||
|
#~ "All & Thumbnails:\n"
|
||||||
|
#~ " This mode presents all applications from all workspaces in one "
|
||||||
|
#~ "selection \n"
|
||||||
|
#~ " list. Instead of using the application icon of every window, it uses "
|
||||||
|
#~ "small \n"
|
||||||
|
#~ " thumbnails resembling the window itself. \n"
|
||||||
|
#~ "\n"
|
||||||
|
#~ "Workspace & Icons:\n"
|
||||||
|
#~ " This mode let's you switch between the applications of your current \n"
|
||||||
|
#~ " workspace and gives you additionally the option to switch to the last "
|
||||||
|
#~ "used \n"
|
||||||
|
#~ " application of your previous workspace. This is always the last "
|
||||||
|
#~ "symbol in \n"
|
||||||
|
#~ " the list and is segregated by a separator/vertical line if "
|
||||||
|
#~ "available. \n"
|
||||||
|
#~ " Every window is represented by its application icon. \n"
|
||||||
|
#~ "\n"
|
||||||
|
#~ "If you whish to revert to the default behavior for the Alt-Tab switcher, "
|
||||||
|
#~ "just\n"
|
||||||
|
#~ "disable the extension from extensions.gnome.org or the Advanced Settings "
|
||||||
|
#~ "application."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Esta es la primera vez que usa la extensión Alt+Tab. \n"
|
||||||
|
#~ "Seleccione el comportamiento preferido:\n"
|
||||||
|
#~ "\n"
|
||||||
|
#~ "Todo y miniaturas:\n"
|
||||||
|
#~ " Este modo muestra todas la aplicaciones de todas las áreas de "
|
||||||
|
#~ "trabajo \n"
|
||||||
|
#~ " en una única lista. En lugar de usar el icono de la aplicación de "
|
||||||
|
#~ "cada ventana, usa \n"
|
||||||
|
#~ " miniaturas similares a la ventana.\n"
|
||||||
|
#~ "\n"
|
||||||
|
#~ "Área de trabajo e iconos:\n"
|
||||||
|
#~ " Este modo permite le alternar entre aplicaciones del área de trabajo "
|
||||||
|
#~ "actual, \n"
|
||||||
|
#~ " y ofrece la posibilidad de cambiar a la última aplicación usada en "
|
||||||
|
#~ "el \n"
|
||||||
|
#~ " área de trabajo anterior. Éste último es siempre el último símbolo en "
|
||||||
|
#~ "la \n"
|
||||||
|
#~ " lista, y está diferenciado mediante un separador/línea vertical, si "
|
||||||
|
#~ "está \n"
|
||||||
|
#~ " disponible. \n"
|
||||||
|
#~ " Cada ventana se representa con el icono de la aplicación. \n"
|
||||||
|
#~ "\n"
|
||||||
|
#~ "Si quiere volver al comportamiento predeterminado de Alt+Tab, "
|
||||||
|
#~ "simplemente\n"
|
||||||
|
#~ "desactive la extensión desde extensions.gnome.org o en la aplicación "
|
||||||
|
#~ "Configuración avanzada."
|
||||||
|
|
||||||
|
#~ msgid "Alt Tab Behaviour"
|
||||||
|
#~ msgstr "Comportamiento de Alt+Tab"
|
||||||
|
|
||||||
|
#~ msgid "Cancel"
|
||||||
|
#~ msgstr "Cancelar"
|
||||||
|
|
||||||
|
#~ msgid "Notifications"
|
||||||
|
#~ msgstr "Notificaciones"
|
||||||
|
|
||||||
|
#~ msgid "Online Accounts"
|
||||||
|
#~ msgstr "Cuentas en línea"
|
||||||
|
|
||||||
|
#~ msgid "Lock Screen"
|
||||||
|
#~ msgstr "Bloquear la pantalla"
|
||||||
|
|
||||||
|
#~ msgid "Switch User"
|
||||||
|
#~ msgstr "Cambiar de usuario"
|
||||||
|
|
||||||
|
#~ msgid "Log Out..."
|
||||||
|
#~ msgstr "Cerrar la sesión…"
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "The algorithm used to layout thumbnails in the overview. 'grid' to use "
|
||||||
|
#~ "the default grid based algorithm, 'natural' to use another one that "
|
||||||
|
#~ "reflects more the position and size of the actual window"
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "El algoritmo usado para situar las miniaturas en la vista previa. "
|
||||||
|
#~ "«grid» (tabla) para usar el algoritmo predeterminado basado en una tabla, "
|
||||||
|
#~ "«natural» para usar otro que refleja mejor la posición y tamaño de la "
|
||||||
|
#~ "ventana representada."
|
||||||
|
|
||||||
|
#~ msgid "Window placement strategy"
|
||||||
|
#~ msgstr "Estrategia de ubicación de ventanas"
|
||||||
|
|
||||||
|
#~ msgid "Available"
|
||||||
|
#~ msgstr "Disponible"
|
||||||
|
|
||||||
|
#~ msgid "Busy"
|
||||||
@@ -0,0 +1,284 @@
|
|||||||
|
# Basque translation for gnome-shell-extensions.
|
||||||
|
# Copyright (C) 2011 gnome-shell-extensions's COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the gnome-shell-extensions package.
|
||||||
|
# Daniel Mustieles <daniel.mustieles@gmail.com>, 2011.
|
||||||
|
# assar <asiersar@yahoo.com>, 2011.
|
||||||
|
# Iñaki Larrañaga Murgoitio <dooteo@euskalgnu.org>, 2011.
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: gnome-shell-extensions master\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2011-10-10 21:36+0200\n"
|
||||||
|
"PO-Revision-Date: 2011-10-10 21:36+0200\n"
|
||||||
|
"Last-Translator: Iñaki Larrañaga Murgoitio <dooteo@euskalgnu.org>\n"
|
||||||
|
"Language-Team: Basque <itzulpena@euskalgnu.org>\n"
|
||||||
|
"Language: eu\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"X-Generator: Lokalize 1.0\n"
|
||||||
|
"X-Project-Style: gnome\n"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:44
|
||||||
|
msgid "Notifications"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:52
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Online Accounts"
|
||||||
|
msgstr "Nire kontua"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:56
|
||||||
|
msgid "System Settings"
|
||||||
|
msgstr "Sistemaren konfigurazioa"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:63
|
||||||
|
msgid "Lock Screen"
|
||||||
|
msgstr "Blokeatu pantaila"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:68
|
||||||
|
msgid "Switch User"
|
||||||
|
msgstr "Aldatu erabiltzailea"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:73
|
||||||
|
msgid "Log Out..."
|
||||||
|
msgstr "Itxi saioa..."
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:81
|
||||||
|
msgid "Suspend"
|
||||||
|
msgstr "Eseki"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:87
|
||||||
|
msgid "Hibernate"
|
||||||
|
msgstr "Hibernatu"
|
||||||
|
|
||||||
|
#: ../extensions/alternative-status-menu/extension.js:93
|
||||||
|
msgid "Power Off..."
|
||||||
|
msgstr "Itzali..."
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/extension.js:44
|
||||||
|
msgid ""
|
||||||
|
"This is the first time you use the Alternate Tab extension. \n"
|
||||||
|
"Please choose your preferred behaviour:\n"
|
||||||
|
"\n"
|
||||||
|
"All & Thumbnails:\n"
|
||||||
|
" This mode presents all applications from all workspaces in one "
|
||||||
|
"selection \n"
|
||||||
|
" list. Instead of using the application icon of every window, it uses "
|
||||||
|
"small \n"
|
||||||
|
" thumbnails resembling the window itself. \n"
|
||||||
|
"\n"
|
||||||
|
"Workspace & Icons:\n"
|
||||||
|
" This mode let's you switch between the applications of your current \n"
|
||||||
|
" workspace and gives you additionally the option to switch to the last "
|
||||||
|
"used \n"
|
||||||
|
" application of your previous workspace. This is always the last symbol "
|
||||||
|
"in \n"
|
||||||
|
" the list and is segregated by a separator/vertical line if available. \n"
|
||||||
|
" Every window is represented by its application icon. \n"
|
||||||
|
"\n"
|
||||||
|
"Native:\n"
|
||||||
|
" This mode is the native GNOME 3 behaviour or in other words: Clicking \n"
|
||||||
|
" native switches the Alternate Tab extension off. \n"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/extension.js:269
|
||||||
|
msgid "Alt Tab Behaviour"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/extension.js:285
|
||||||
|
msgid "All & Thumbnails"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/extension.js:292
|
||||||
|
msgid "Workspace & Icons"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/extension.js:299
|
||||||
|
msgid "Native"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/extension.js:306
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:1
|
||||||
|
msgid "Ask the user for a default behaviour if true."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:2
|
||||||
|
msgid "Indicates if Alternate Tab is newly installed"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:3
|
||||||
|
msgid ""
|
||||||
|
"Sets the Alt-Tab behaviour. Possible values are: native, all_thumbnails and "
|
||||||
|
"workspace_icons."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/alternate-tab/org.gnome.shell.extensions.alternate-tab.gschema.xml.in.h:4
|
||||||
|
msgid "The alt tab behaviour."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:1
|
||||||
|
msgid ""
|
||||||
|
"A list of strings, each containing an application id (desktop file name), "
|
||||||
|
"followed by a colon and the workspace number"
|
||||||
|
msgstr ""
|
||||||
|
"Kateen zerrenda bat, bakoitzak aplikazio-ID bat duena (mahaigainaren "
|
||||||
|
"fitxategi-izena) eta jarraian bi puntu eta laneko arearen zenbakia dituena"
|
||||||
|
|
||||||
|
#: ../extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml.in.h:2
|
||||||
|
msgid "Application and workspace list"
|
||||||
|
msgstr "Aplikazioen eta laneko areen zerrenda"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:483
|
||||||
|
msgid "Drag here to add favorites"
|
||||||
|
msgstr "Arrastatu hona gogokoei gehitzeko"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:817
|
||||||
|
msgid "New Window"
|
||||||
|
msgstr "Leiho berria"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:819
|
||||||
|
msgid "Quit Application"
|
||||||
|
msgstr "Irten aplikaziotik"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:824
|
||||||
|
msgid "Remove from Favorites"
|
||||||
|
msgstr "Kendu gogokoetatik"
|
||||||
|
|
||||||
|
#: ../extensions/dock/extension.js:825
|
||||||
|
msgid "Add to Favorites"
|
||||||
|
msgstr "Gehitu gogokoei"
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:1
|
||||||
|
msgid "Autohide duration"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:2
|
||||||
|
msgid "Autohide effect"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:3
|
||||||
|
msgid "Enable/disable autohide"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:4
|
||||||
|
msgid "Icon size"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:5
|
||||||
|
msgid "Position of the dock"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:6
|
||||||
|
msgid "Sets icon size of the dock."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:7
|
||||||
|
msgid ""
|
||||||
|
"Sets the effect of the hide dock. Allowed values are 'resize' or 'rescale'"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:8
|
||||||
|
msgid ""
|
||||||
|
"Sets the position of the dock in the screen. Allowed values are 'right' or "
|
||||||
|
"'left'"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/dock/org.gnome.shell.extensions.dock.gschema.xml.in.h:9
|
||||||
|
msgid "Sets the time duration of the autohide effect."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/example/extension.js:11
|
||||||
|
msgid "Hello, world!"
|
||||||
|
msgstr "Kaixo mundua!"
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:227
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is away."
|
||||||
|
msgstr "%s kanpoan dago."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:230
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is offline."
|
||||||
|
msgstr "%s linea kanpo dago."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:233
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is online."
|
||||||
|
msgstr "%s linean dago."
|
||||||
|
|
||||||
|
#: ../extensions/gajim/extension.js:236
|
||||||
|
#, c-format
|
||||||
|
msgid "%s is busy."
|
||||||
|
msgstr "%s lanpetuta dago."
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:1
|
||||||
|
msgid ""
|
||||||
|
"If true, place window captions on top the respective thumbnail, overriding "
|
||||||
|
"shell default of placing it at the bottom. Changing this setting requires "
|
||||||
|
"restarting the shell to have any effect."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:2
|
||||||
|
msgid "Place window captions on top"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:3
|
||||||
|
msgid ""
|
||||||
|
"The algorithm used to layout thumbnails in the overview. 'grid' to use the "
|
||||||
|
"default grid based algorithm, 'natural' to use another one that reflects "
|
||||||
|
"more the position and size of the actual window"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:4
|
||||||
|
msgid ""
|
||||||
|
"Try to use more screen for placing window thumbnails by adapting to screen "
|
||||||
|
"aspect ratio, and consolidating them further to reduce the bounding box. "
|
||||||
|
"This setting applies only with the natural placement strategy."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:5
|
||||||
|
msgid "Use more screen for windows"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml.in.h:6
|
||||||
|
msgid "Window placement strategy"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:1
|
||||||
|
msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
|
||||||
|
msgstr "Gaiaren izena, ~/.themes/izena/gnome-shell direktoriotik kargatzeko"
|
||||||
|
|
||||||
|
#: ../extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml.in.h:2
|
||||||
|
msgid "Theme name"
|
||||||
|
msgstr "Gaiaren izena"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:26
|
||||||
|
msgid "Normal"
|
||||||
|
msgstr "Normala"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:27
|
||||||
|
msgid "Left"
|
||||||
|
msgstr "Ezkerrean"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:28
|
||||||
|
msgid "Right"
|
||||||
|
msgstr "Eskuinean"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:29
|
||||||
|
msgid "Upside-down"
|
||||||
|
msgstr "Buruz behera"
|
||||||
|
|
||||||
|
#: ../extensions/xrandr-indicator/extension.js:78
|
||||||
|
msgid "Configure display settings..."
|
||||||
|
msgstr "Konfiguratu pantailaren ezarpenak..."
|
||||||
|
|
||||||
|
#~ msgid "Available"
|
||||||
|
#~ msgstr "Libre"
|
||||||
|
|
||||||
|
#~ msgid "Busy"
|
||||||
|
#~ msgstr "Lanpetuta"
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user